-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathComponentExpander.php
54 lines (48 loc) · 1.47 KB
/
ComponentExpander.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
namespace Gt\DomTemplate;
use Gt\Dom\Document;
use Gt\Dom\Element;
use Throwable;
class ComponentExpander extends PartialContentExpander {
/** @return Element[] */
public function expand(Element $context = null):array {
$expandedComponentArray = [];
if(is_null($context)) {
$context = $this->document->documentElement;
}
// Any HTML element is considered a "custom element" if it contains a hyphen in
// its name:
// @see https://www.w3.org/TR/custom-elements/#valid-custom-element-name
$xpathResult = $this->document->evaluate(
".//*[contains(local-name(), '-')]",
$context
);
foreach($xpathResult as $element) {
/** @var Element $element */
$name = strtolower($element->tagName);
try {
$src = $element->getAttribute("src");
$content = $this->partialContent->getContent(
$name,
src: $src,
);
$element->innerHTML = $content;
foreach($element->querySelectorAll("form[method='post']") as $form) {
$componentInput = $element->ownerDocument->createElement("input");
$componentInput->type = "hidden";
$componentInput->name = "__component";
$componentInput->value = $name;
$form->prepend($componentInput);
}
array_push($expandedComponentArray, $element);
$recursiveExpandedComponents = $this->expand($element);
$expandedComponentArray = array_merge(
$expandedComponentArray,
$recursiveExpandedComponents
);
}
catch(Throwable) {}
}
return $expandedComponentArray;
}
}