mirror of
https://github.com/Universal-Omega/PortableInfobox.git
synced 2024-11-28 10:10:51 +00:00
52 lines
1.3 KiB
PHP
52 lines
1.3 KiB
PHP
|
<?php
|
||
|
namespace PortableInfobox\Parser\Nodes;
|
||
|
|
||
|
class NodePanel extends Node {
|
||
|
const COLLAPSE_ATTR_NAME = 'collapse';
|
||
|
const COLLAPSE_OPEN_OPTION = 'open';
|
||
|
const COLLAPSE_CLOSED_OPTION = 'closed';
|
||
|
|
||
|
private $supportedPanelCollapses = [
|
||
|
self::COLLAPSE_OPEN_OPTION,
|
||
|
self::COLLAPSE_CLOSED_OPTION
|
||
|
];
|
||
|
|
||
|
public function getData() {
|
||
|
if ( !isset( $this->data ) ) {
|
||
|
$this->data = [
|
||
|
'value' => $this->getRenderDataForChildren(),
|
||
|
'collapse' => $this->getCollapse(),
|
||
|
'item-name' => $this->getItemName(),
|
||
|
];
|
||
|
}
|
||
|
return $this->data;
|
||
|
}
|
||
|
|
||
|
protected function getChildNodes() {
|
||
|
if ( !isset( $this->children ) ) {
|
||
|
$this->children = [];
|
||
|
$hasHeader = false;
|
||
|
|
||
|
foreach ( $this->xmlNode as $child ) {
|
||
|
$name = $child->getName();
|
||
|
|
||
|
if ( $name === 'section' || ( $name === 'header' && !$hasHeader ) ) {
|
||
|
if ( $name === 'header' ) {
|
||
|
$hasHeader = true;
|
||
|
}
|
||
|
|
||
|
$this->children[] = NodeFactory::newFromSimpleXml( $child, $this->infoboxData )
|
||
|
->setExternalParser( $this->externalParser );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return $this->children;
|
||
|
}
|
||
|
|
||
|
protected function getCollapse() {
|
||
|
$collapse = $this->getXmlAttribute( $this->xmlNode, self::COLLAPSE_ATTR_NAME );
|
||
|
return ( isset( $collapse ) && in_array( $collapse, $this->supportedPanelCollapses ) ) ?
|
||
|
$collapse : null;
|
||
|
}
|
||
|
}
|