Added first version.
This commit is contained in:
parent
9e4cff2692
commit
cde7a9e767
1 changed files with 107 additions and 0 deletions
107
module.php
Normal file
107
module.php
Normal file
|
|
@ -0,0 +1,107 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Lewp\Resolve;
|
||||||
|
use Lewp\Config;
|
||||||
|
|
||||||
|
return new class extends Lewp\Module
|
||||||
|
{
|
||||||
|
|
||||||
|
const KEY_ORDERED_LIST = "is_ordered";
|
||||||
|
const KEY_HEADING = "heading";
|
||||||
|
const KEY_HEADING_ELEMENT = "heading_element";
|
||||||
|
const KEY_LIST = "list";
|
||||||
|
const KEY_LIST_ITEM_TITLE = "title";
|
||||||
|
const KEY_LIST_ITEM_HREF = "href";
|
||||||
|
const KEY_JSON_FILE = "json_file";
|
||||||
|
|
||||||
|
const DEFAULT_IS_ORDERED = true;
|
||||||
|
const DEFAULT_HEADING_ELEMENT = "div";
|
||||||
|
|
||||||
|
private function loadData(string $filename)
|
||||||
|
{
|
||||||
|
return $this->loadJsonFile(Resolve::arrayToId([$this->getPageId(), $filename]));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createHeading(string $heading_element, string $heading)
|
||||||
|
{
|
||||||
|
return $this->createAndSetupElement(
|
||||||
|
$heading_element,
|
||||||
|
$heading,
|
||||||
|
[
|
||||||
|
"class" => "heading"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createList(
|
||||||
|
array $list_items,
|
||||||
|
bool $is_ordered = self::DEFAULT_IS_ORDERED
|
||||||
|
) {
|
||||||
|
if ($is_ordered) {
|
||||||
|
$list = $this->createElement("ol");
|
||||||
|
} else {
|
||||||
|
$list = $this->createElement("ul");
|
||||||
|
}
|
||||||
|
$list->setAttribute("class", "list");
|
||||||
|
|
||||||
|
$this->appendListItems($list, $list_items);
|
||||||
|
return $list;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function appendListItems(&$list, array $list_items)
|
||||||
|
{
|
||||||
|
foreach ($list_items as $item) {
|
||||||
|
$a = $this->createAndSetupElement(
|
||||||
|
'a',
|
||||||
|
$item[self::KEY_LIST_ITEM_TITLE],
|
||||||
|
[
|
||||||
|
"href" => $item[self::KEY_LIST_ITEM_HREF]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$li = $this->createAndSetupElement(
|
||||||
|
'li',
|
||||||
|
'',
|
||||||
|
[
|
||||||
|
"class" => "list-item"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$li->appendChild($a);
|
||||||
|
$list->appendChild($li);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function run(array $options = []) : bool
|
||||||
|
{
|
||||||
|
$filename = $options[self::KEY_JSON_FILE];
|
||||||
|
if (isset($filename)) {
|
||||||
|
$options = array_merge($options, $this->loadData($options[self::KEY_JSON_FILE]));
|
||||||
|
}
|
||||||
|
if (!isset($options)) {
|
||||||
|
trigger_error(
|
||||||
|
'Module: '.$this->getModuleId().": ".
|
||||||
|
'The specified JSON file "'.$filename.'"seems to be invalid. Please check it!',
|
||||||
|
E_USER_WARNING
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// add default configuration
|
||||||
|
$options += [
|
||||||
|
self::KEY_ORDERED_LIST => self::DEFAULT_IS_ORDERED,
|
||||||
|
self::KEY_HEADING_ELEMENT => self::DEFAULT_HEADING_ELEMENT
|
||||||
|
];
|
||||||
|
// add heading if defined
|
||||||
|
if (isset($options[self::KEY_HEADING])) {
|
||||||
|
$this->appendChild(
|
||||||
|
$this->createHeading($options[self::KEY_HEADING_ELEMENT],
|
||||||
|
$options[self::KEY_HEADING])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// add list
|
||||||
|
if (!empty($options[self::KEY_LIST])) {
|
||||||
|
$this->appendChild(
|
||||||
|
$this->createList($options[self::KEY_LIST], $options[self::KEY_ORDERED_LIST])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
Loading…
Add table
Add a link
Reference in a new issue