@@ -65,9 +65,6 @@ public function process($content, $options = [])
6565 if (is_string ($ content ) && strpos ($ content , '<component ' ) === false ) {
6666 return $ content ;
6767 }
68- if (isset ($ options ['_internal_process_components ' ]) && $ options ['_internal_process_components ' ] === false ) {
69- return $ content ;
70- }
7168
7269 $ getComponentFileContent = static function ($ file , $ component , $ variables ) {
7370 if (is_file ($ file )) {
@@ -95,18 +92,15 @@ public function process($content, $options = [])
9592 } else {
9693 $ sourceParts = explode (': ' , $ srcAttributeValue , 2 );
9794 }
98- if (sizeof ($ sourceParts) === 2 ) {
95+ if (isset ($ sourceParts[ 0 ], $ sourceParts [ 1 ]) ) {
9996 $ scheme = $ sourceParts [0 ];
100- if (isset ($ options ['recursive ' ]) && $ options ['recursive ' ] === false ) {
101- $ componentOptions = array_merge ($ options , ['_internal_process_components ' => false ]);
102- }
10397 if ($ scheme === 'data ' ) {
10498 if (substr ($ sourceParts [1 ], 0 , 7 ) === 'base64, ' ) {
105- return $ this -> process ( base64_decode (substr ($ sourceParts [1 ], 7 )), isset ($ componentOptions ) ? $ componentOptions : $ options );
99+ return base64_decode (substr ($ sourceParts [1 ], 7 )); //$this->process( , isset($componentOptions) ? $componentOptions : $options);
106100 }
107101 throw new \Exception ('Components data URI scheme only supports base64 (data:base64,ABCD...)! ' );
108102 } elseif ($ scheme === 'file ' ) {
109- return $ this -> process ( $ getComponentFileContent (urldecode ($ sourceParts [1 ]), $ component , isset ($ options ['variables ' ]) && is_array ($ options ['variables ' ]) ? $ options ['variables ' ] : []), isset ($ componentOptions ) ? $ componentOptions : $ options );
103+ return $ getComponentFileContent (urldecode ($ sourceParts [1 ]), $ component , isset ($ options ['variables ' ]) && is_array ($ options ['variables ' ]) ? $ options ['variables ' ] : []); //$this->process( isset($componentOptions) ? $componentOptions : $options);
110104 }
111105 throw new \Exception ('Components URI scheme not valid! It must be \'file: \', \'data: \' or an alias. ' );
112106 }
@@ -116,40 +110,41 @@ public function process($content, $options = [])
116110 };
117111
118112 $ domDocument = new \IvoPetkov \HTML5DOMDocument ();
119- if ($ content instanceof \IvoPetkov \HTMLServerComponent) {
120- $ domDocument ->loadHTML ($ getComponentResultHTML ($ content ));
121- } else {
122- $ domDocument ->loadHTML ($ content );
113+ $ domDocument ->loadHTML ($ content instanceof \IvoPetkov \HTMLServerComponent ? $ getComponentResultHTML ($ content ) : $ content );
114+ for ($ level = 0 ; $ level < 1000 ; $ level ++) {
123115 $ componentElements = $ domDocument ->getElementsByTagName ('component ' );
124116 $ componentElementsCount = $ componentElements ->length ;
125- if ($ componentElementsCount > 0 ) {
126- for ($ i = 0 ; $ i < $ componentElementsCount ; $ i ++) {
127- $ componentElement = $ componentElements ->item (0 );
128- if ($ componentElement === null ) { // component in component innerHTML case
117+ if ($ componentElementsCount === 0 ) {
118+ break ;
119+ }
120+ for ($ i = 0 ; $ i < $ componentElementsCount ; $ i ++) {
121+ $ componentElement = $ componentElements ->item ($ i );
122+ if ($ componentElement === null ) { // component in component innerHTML case
123+ continue ;
124+ }
125+ $ component = $ this ->constructComponent ($ componentElement ->getAttributes (), $ componentElement ->innerHTML );
126+ $ componentResultHTML = $ getComponentResultHTML ($ component );
127+ $ isInBodyTag = false ;
128+ $ parentNode = $ componentElement ->parentNode ;
129+ while ($ parentNode !== null && isset ($ parentNode ->tagName )) {
130+ if ($ parentNode ->tagName === 'body ' ) {
131+ $ isInBodyTag = true ;
129132 break ;
130133 }
131- $ component = $ this ->constructComponent ($ componentElement ->getAttributes (), $ componentElement ->innerHTML );
132- $ componentResultHTML = $ getComponentResultHTML ($ component );
133-
134- $ isInBodyTag = false ;
135- $ parentNode = $ componentElement ->parentNode ;
136- while ($ parentNode !== null && isset ($ parentNode ->tagName )) {
137- if ($ parentNode ->tagName === 'body ' ) {
138- $ isInBodyTag = true ;
139- break ;
140- }
141- $ parentNode = $ parentNode ->parentNode ;
142- }
143- if ($ isInBodyTag ) {
144- $ insertTargetName = 'html-server-components-compiler-target- ' . uniqid ();
145- $ componentElement ->parentNode ->insertBefore ($ domDocument ->createInsertTarget ($ insertTargetName ), $ componentElement );
146- $ componentElement ->parentNode ->removeChild ($ componentElement ); // must be before insertHTML because a duplicate elements IDs can occur.
147- $ domDocument ->insertHTML ($ componentResultHTML , $ insertTargetName );
148- } else {
149- $ componentElement ->parentNode ->removeChild ($ componentElement );
150- $ domDocument ->insertHTML ($ componentResultHTML );
151- }
134+ $ parentNode = $ parentNode ->parentNode ;
152135 }
136+ if ($ isInBodyTag ) {
137+ $ insertTargetName = 'html-server-components-compiler-insert-target ' ;
138+ $ componentElement ->parentNode ->insertBefore ($ domDocument ->createInsertTarget ($ insertTargetName ), $ componentElement );
139+ $ componentElement ->parentNode ->removeChild ($ componentElement ); // must be before insertHTML because a duplicate elements IDs can occur.
140+ $ domDocument ->insertHTML ($ componentResultHTML , $ insertTargetName );
141+ } else {
142+ $ componentElement ->parentNode ->removeChild ($ componentElement );
143+ $ domDocument ->insertHTML ($ componentResultHTML );
144+ }
145+ }
146+ if (isset ($ options ['recursive ' ]) && $ options ['recursive ' ] === false ) {
147+ break ;
153148 }
154149 }
155150
0 commit comments