66namespace Torchlight \Blade ;
77
88use Illuminate \Http \Response ;
9+ use Illuminate \Support \Arr ;
910use Torchlight \Block ;
10- use Torchlight \Client ;
11+ use Torchlight \Torchlight ;
1112
1213class BladeManager
1314{
1415 protected static $ blocks = [];
1516
1617 public static function registerBlock (Block $ block )
1718 {
18- static ::$ blocks [] = $ block ;
19+ static ::$ blocks [$ block ->id ()] = $ block ;
20+ }
21+
22+ public static function getBlocks ()
23+ {
24+ return static ::$ blocks ;
25+ }
26+
27+ public static function clearBlocks ()
28+ {
29+ static ::$ blocks = [];
1930 }
2031
2132 public static function renderResponse (Response $ response )
@@ -37,23 +48,24 @@ public static function renderContent($content)
3748 return $ content ;
3849 }
3950
40- $ blocks = ( new Client )-> highlight (static ::$ blocks );
51+ Torchlight:: highlight (static ::$ blocks );
4152
42- static :: $ blocks = [] ;
53+ $ ids = Torchlight:: findTorchlightIds ( $ content ) ;
4354
44- foreach ($ blocks as $ block ) {
45- $ swap = [
46- $ block ->placeholder () => $ block ->highlighted ,
47- $ block ->placeholder ('classes ' ) => $ block ->classes ,
48- $ block ->placeholder ('styles ' ) => $ block ->styles ,
49- ];
55+ $ swap = [];
5056
51- foreach ($ swap as $ search => $ replace ) {
52- // Substitute all the placeholders that we left with the highlighted html.
53- $ content = str_replace ($ search , $ replace , $ content );
57+ foreach ($ ids as $ id ) {
58+ /** @var Block $block */
59+ if (!$ block = Arr::get (static ::$ blocks , $ id )) {
60+ continue ;
5461 }
62+
63+ // Swap out all the placeholders that we left.
64+ $ swap [$ block ->placeholder ()] = $ block ->highlighted ;
65+ $ swap [$ block ->placeholder ('classes ' )] = $ block ->classes ;
66+ $ swap [$ block ->placeholder ('styles ' )] = $ block ->styles ;
5567 }
5668
57- return $ content ;
69+ return str_replace ( array_keys ( $ swap ), array_values ( $ swap ), $ content) ;
5870 }
5971}
0 commit comments