@@ -65,9 +65,6 @@ public function process($content, $options = [])
65
65
if (is_string ($ content ) && strpos ($ content , '<component ' ) === false ) {
66
66
return $ content ;
67
67
}
68
- if (isset ($ options ['_internal_process_components ' ]) && $ options ['_internal_process_components ' ] === false ) {
69
- return $ content ;
70
- }
71
68
72
69
$ getComponentFileContent = static function ($ file , $ component , $ variables ) {
73
70
if (is_file ($ file )) {
@@ -95,18 +92,15 @@ public function process($content, $options = [])
95
92
} else {
96
93
$ sourceParts = explode (': ' , $ srcAttributeValue , 2 );
97
94
}
98
- if (sizeof ($ sourceParts) === 2 ) {
95
+ if (isset ($ sourceParts[ 0 ], $ sourceParts [ 1 ]) ) {
99
96
$ scheme = $ sourceParts [0 ];
100
- if (isset ($ options ['recursive ' ]) && $ options ['recursive ' ] === false ) {
101
- $ componentOptions = array_merge ($ options , ['_internal_process_components ' => false ]);
102
- }
103
97
if ($ scheme === 'data ' ) {
104
98
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);
106
100
}
107
101
throw new \Exception ('Components data URI scheme only supports base64 (data:base64,ABCD...)! ' );
108
102
} 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);
110
104
}
111
105
throw new \Exception ('Components URI scheme not valid! It must be \'file: \', \'data: \' or an alias. ' );
112
106
}
@@ -116,40 +110,41 @@ public function process($content, $options = [])
116
110
};
117
111
118
112
$ 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 ++) {
123
115
$ componentElements = $ domDocument ->getElementsByTagName ('component ' );
124
116
$ 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 ;
129
132
break ;
130
133
}
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 ;
152
135
}
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 ;
153
148
}
154
149
}
155
150
0 commit comments