diff --git a/module.php b/module.php new file mode 100644 index 0000000..3c835ec --- /dev/null +++ b/module.php @@ -0,0 +1,107 @@ +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; + } +};