Skip to content

Commit 33eeef8

Browse files
committed
Adjust regex to support single and double quotes
1 parent cff8490 commit 33eeef8

7 files changed

+79
-60
lines changed

src/View/BladeFragment.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public static function render(string $view, string $fragment, array $data = []):
1414

1515
$content = File::get($path);
1616

17-
$re = sprintf('/@fragment\("%s"\)(.*)@endfragment/msU', $fragment);
17+
$re = sprintf('/(?<!@)@fragment[ \t]*\([\'"]{1}%s[\'"]{1}\)(.*?)@endfragment/s', $fragment);
1818

1919
preg_match($re, $content, $matches);
2020

tests/FragmentBladeDirectiveTest.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,21 @@ public function the_view_still_renders_correctly_if_it_contains_fragments()
2222
}
2323

2424
/** @test */
25-
public function the_fragment_view_macro_can_render_a_single_fragment()
25+
public function the_render_fragment_view_macro_can_render_a_single_fragment_whose_name_is_enclosed_in_double_quotes()
2626
{
2727
$message = 'htmx';
2828

29-
$renderedView = view()->renderFragment('basic', 'test', compact('message'));
29+
$renderedView = view()->renderFragment('basic', 'double', compact('message'));
30+
31+
$this->assertMatchesSnapshot($renderedView);
32+
}
33+
34+
/** @test */
35+
public function the_render_fragment_view_macro_can_render_a_single_fragment_whose_name_is_enclosed_in_single_quotes()
36+
{
37+
$message = 'htmx';
38+
39+
$renderedView = view()->renderFragment('basic', 'single', compact('message'));
3040

3141
$this->assertMatchesSnapshot($renderedView);
3242
}

tests/Http/HtmxResponseTest.php

Lines changed: 54 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -19,65 +19,65 @@ public function the_response_should_issue_a_soft_client_side_redirect_by_setting
1919
{
2020
Route::get('test', fn () => with(new HtmxResponse())->location('http://foobar'));
2121

22-
$this
23-
->get('test')
24-
->assertOk()
25-
->assertHeader('HX-Location', 'http://foobar');
22+
$response = $this->get('test');
23+
24+
$response->assertOk();
25+
$response->assertHeader('HX-Location', 'http://foobar');
2626
}
2727

2828
/** @test */
2929
public function the_response_should_push_a_new_url_by_setting_the_hx_push_url_header()
3030
{
3131
Route::get('test', fn () => with(new HtmxResponse())->pushUrl('http://foobar'));
3232

33-
$this
34-
->get('test')
35-
->assertOk()
36-
->assertHeader('HX-Push-Url', 'http://foobar');
33+
$response = $this->get('test');
34+
35+
$response->assertOk();
36+
$response->assertHeader('HX-Push-Url', 'http://foobar');
3737
}
3838

3939
/** @test */
4040
public function the_response_should_replace_the_current_url_by_setting_the_hx_replace_url_header()
4141
{
4242
Route::get('test', fn () => with(new HtmxResponse())->replaceUrl('http://foobar'));
4343

44-
$this
45-
->get('test')
46-
->assertOk()
47-
->assertHeader('HX-Replace-Url', 'http://foobar');
44+
$response = $this->get('test');
45+
46+
$response->assertOk();
47+
$response->assertHeader('HX-Replace-Url', 'http://foobar');
4848
}
4949

5050
/** @test */
5151
public function the_response_should_determine_how_the_response_will_be_swapped_by_setting_the_hx_reswap_header()
5252
{
5353
Route::get('test', fn () => with(new HtmxResponse())->reswap('innerHTML'));
5454

55-
$this
56-
->get('test')
57-
->assertOk()
58-
->assertHeader('HX-Reswap', 'innerHTML');
55+
$response = $this->get('test');
56+
57+
$response->assertOk();
58+
$response->assertHeader('HX-Reswap', 'innerHTML');
5959
}
6060

6161
/** @test */
6262
public function the_response_should_specify_the_target_of_the_content_to_update_by_setting_the_hx_retarget_header()
6363
{
6464
Route::get('test', fn () => with(new HtmxResponse())->retarget('.update-me'));
6565

66-
$this
67-
->get('test')
68-
->assertOk()
69-
->assertHeader('HX-Retarget', '.update-me');
66+
$response = $this->get('test');
67+
68+
$response->assertOk();
69+
$response->assertHeader('HX-Retarget', '.update-me');
7070
}
7171

7272
/** @test */
7373
public function the_response_should_trigger_a_client_side_event_by_setting_the_hx_trigger_header()
7474
{
7575
Route::get('test', fn () => with(new HtmxResponse())->addTrigger('htmx:abort'));
7676

77-
$this
78-
->get('test')
79-
->assertOk()
80-
->assertHeader('HX-Trigger', 'htmx:abort');
77+
$response = $this->get('test');
78+
79+
$response->assertOk();
80+
$response->assertHeader('HX-Trigger', 'htmx:abort');
8181
}
8282

8383
/** @test */
@@ -88,21 +88,21 @@ public function the_response_supports_triggering_multiple_events()
8888
->addTrigger('htmx:load')
8989
);
9090

91-
$this
92-
->get('test')
93-
->assertOk()
94-
->assertHeader('HX-Trigger', 'htmx:abort,htmx:load');
91+
$response = $this->get('test');
92+
93+
$response->assertOk();
94+
$response->assertHeader('HX-Trigger', 'htmx:abort,htmx:load');
9595
}
9696

9797
/** @test */
9898
public function the_response_should_trigger_a_client_side_event_after_the_settling_step_by_setting_the_hx_trigger_after_settle_header()
9999
{
100100
Route::get('test', fn () => with(new HtmxResponse())->addTriggerAfterSettle('htmx:abort'));
101101

102-
$this
103-
->get('test')
104-
->assertOk()
105-
->assertHeader('HX-Trigger-After-Settle', 'htmx:abort');
102+
$response = $this->get('test');
103+
104+
$response->assertOk();
105+
$response->assertHeader('HX-Trigger-After-Settle', 'htmx:abort');
106106
}
107107

108108
/** @test */
@@ -113,21 +113,21 @@ public function the_response_supports_triggering_after_settle_multiple_events()
113113
->addTriggerAfterSettle('htmx:load')
114114
);
115115

116-
$this
117-
->get('test')
118-
->assertOk()
119-
->assertHeader('HX-Trigger-After-Settle', 'htmx:abort,htmx:load');
116+
$response = $this->get('test');
117+
118+
$response->assertOk();
119+
$response->assertHeader('HX-Trigger-After-Settle', 'htmx:abort,htmx:load');
120120
}
121121

122122
/** @test */
123123
public function the_response_should_trigger_a_client_side_event_after_the_swap_step_by_setting_the_hx_trigger_after_swap_header()
124124
{
125125
Route::get('test', fn () => with(new HtmxResponse())->addTriggerAfterSwap('htmx:abort'));
126126

127-
$this
128-
->get('test')
129-
->assertOk()
130-
->assertHeader('HX-Trigger-After-Swap', 'htmx:abort');
127+
$response = $this->get('test');
128+
129+
$response->assertOk();
130+
$response->assertHeader('HX-Trigger-After-Swap', 'htmx:abort');
131131
}
132132

133133
/** @test */
@@ -138,10 +138,10 @@ public function the_response_supports_triggering_after_swap_multiple_multiple_ev
138138
->addTriggerAfterSwap('htmx:load')
139139
);
140140

141-
$this
142-
->get('test')
143-
->assertOk()
144-
->assertHeader('HX-Trigger-After-Swap', 'htmx:abort,htmx:load');
141+
$response = $this->get('test');
142+
143+
$response->assertOk();
144+
$response->assertHeader('HX-Trigger-After-Swap', 'htmx:abort,htmx:load');
145145
}
146146

147147
/** @test */
@@ -151,12 +151,12 @@ public function the_response_renders_a_single_fragment()
151151
$message = 'Htmx';
152152

153153
return with(new HtmxResponse())
154-
->renderFragment('basic', 'test', compact('message'));
154+
->renderFragment('basic', 'double', compact('message'));
155155
});
156156

157-
$response = $this
158-
->get('test')
159-
->assertOk();
157+
$response = $this->get('test');
158+
159+
$response->assertOk();
160160

161161
$this->assertMatchesSnapshot($response->getContent());
162162
}
@@ -172,9 +172,9 @@ public function the_response_renders_multiple_fragments_for_out_of_band_swaps()
172172
->addFragment('multiple', 'lower');
173173
});
174174

175-
$response = $this
176-
->get('test')
177-
->assertOk();
175+
$response = $this->get('test');
176+
177+
$response->assertOk();
178178

179179
$this->assertMatchesSnapshot($response->getContent());
180180
}
@@ -189,9 +189,9 @@ public function the_response_returns_a_rendered_fragment()
189189
->addRenderedFragment(Blade::render('<p>Hello from {{ $message}}</p>', compact('message')));
190190
});
191191

192-
$response = $this
193-
->get('test')
194-
->assertOk();
192+
$response = $this->get('test');
193+
194+
$response->assertOk();
195195

196196
$this->assertMatchesSnapshot($response->getContent());
197197
}

tests/__snapshots__/FragmentBladeDirectiveTest__the_fragment_view_macro_can_render_a_single_fragment__1.txt renamed to tests/__snapshots__/FragmentBladeDirectiveTest__the_render_fragment_view_macro_can_render_a_single_fragment_whose_name_is_enclosed_in_double_quotes__1.txt

File renamed without changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<p>Howdy from htmx</p>

tests/__snapshots__/FragmentBladeDirectiveTest__the_view_still_renders_correctly_if_it_contains_fragments__1.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,8 @@
22

33
<p>Hello from htmx</p>
44

5-
<h2>End</h2>
5+
6+
7+
<p>Howdy from htmx</p>
8+
9+
<h2>End</h2>

tests/views/basic.blade.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
<h1>Begin</h1>
2-
@fragment("test")
2+
@fragment("double")
33
<p>Hello from {{ $message }}</p>
44
@endfragment
5-
<h2>End</h2>
5+
6+
@fragment('single')
7+
<p>Howdy from {{ $message }}</p>
8+
@endfragment
9+
<h2>End</h2>

0 commit comments

Comments
 (0)