From 985feb398e805d575afb81e3de7f5d6d11eee103 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20Schro=CC=88der?= Date: Fri, 3 Jan 2014 17:18:14 +0100 Subject: [PATCH] FML Update --- application/core/FML/Controls/Control.php | 574 +++++++++++----------- application/core/FML/Controls/Label.php | 2 +- application/core/FML/CustomUI.php | 362 +++++++------- application/core/FML/ManiaLink.php | 388 +++++++-------- application/core/FML/ManiaLinks.php | 25 +- application/core/FML/Script/Builder.php | 44 +- application/core/FML/Script/Script.php | 520 +++++++++++++------- application/core/FML/autoload.php | 4 + 8 files changed, 1057 insertions(+), 862 deletions(-) diff --git a/application/core/FML/Controls/Control.php b/application/core/FML/Controls/Control.php index d5be5b0f..96f40efc 100644 --- a/application/core/FML/Controls/Control.php +++ b/application/core/FML/Controls/Control.php @@ -1,287 +1,287 @@ -setId($id); - } - } - - /** - * Get Control Id - * - * @return string - */ - public function getId() { - return $this->id; - } - - /** - * Set Control Id - * - * @param string $id Control Id - * @return \FML\Controls\Control - */ - public function setId($id) { - $this->id = $id; - return $this; - } - - /** - * Check Id for dangerous Characters and assign an unique Id if necessary - * - * @return \FML\Controls\Control - */ - public function checkId() { - if (!$this->getId()) { - $this->setId(uniqid()); - return $this; - } - $dangerousCharacters = array(' ', ' ', '.', '|', '-', PHP_EOL); - $idCharacters = str_split($this->getId()); - $danger = false; - foreach ($idCharacters as $character) { - if (!in_array($character, $dangerousCharacters)) continue; - $danger = true; - break; - } - if ($danger) { - trigger_error("Please don't use special Characters in Ids, they might cause Problems! (I stripped them for You.)"); - $id = str_ireplace($dangerousCharacters, '', $this->getId()); - $this->setId($id); - } - return $this; - } - - /** - * Set X Position - * - * @param float $x Horizontal Position - * @return \FML\Controls\Control - */ - public function setX($x) { - $this->x = $x; - return $this; - } - - /** - * Set Y Position - * - * @param float $y Vertical Position - * @return \FML\Controls\Control - */ - public function setY($y) { - $this->y = $y; - return $this; - } - - /** - * Set Z Position - * - * @param float $z Depth - * @return \FML\Controls\Control - */ - public function setZ($z) { - $this->z = $z; - return $this; - } - - /** - * Set Control Position - * - * @param float $x Horizontal Position - * @param float $y Vertical Position - * @param float $z Depth - * @return \FML\Controls\Control - */ - public function setPosition($x, $y, $z = null) { - $this->setX($x); - $this->setY($y); - if ($z !== null) { - $this->setZ($z); - } - return $this; - } - - /** - * Set Control Width - * - * @param float $width Control Width - * @return \FML\Controls\Control - */ - public function setWidth($width) { - $this->width = $width; - return $this; - } - - /** - * Set Control Height - * - * @param float $height Control Height - * @return \FML\Controls\Control - */ - public function setHeight($height) { - $this->height = $height; - return $this; - } - - /** - * Set Control Size - * - * @param float $width Control Width - * @param float $height Control Height - * @return \FML\Controls\Control - */ - public function setSize($width, $height) { - $this->setWidth($width); - $this->setHeight($height); - return $this; - } - - /** - * Set Horizontal Alignment - * - * @param string $hAlign Horizontal Alignment - * @return \FML\Controls\Control - */ - public function setHAlign($hAlign) { - $this->hAlign = $hAlign; - return $this; - } - - /** - * Set Vertical Alignment - * - * @param string $vAlign Vertical Alignment - * @return \FML\Controls\Control - */ - public function setVAlign($vAlign) { - $this->vAlign = $vAlign; - return $this; - } - - /** - * Set Horizontal and Vertical Alignment - * - * @param string $hAlign Horizontal Alignment - * @param string $vAlign Vertical Alignment - * @return \FML\Controls\Control - */ - public function setAlign($hAlign, $vAlign) { - $this->setHAlign($hAlign); - $this->setVAlign($vAlign); - return $this; - } - - /** - * Set Control Scale - * - * @param float $scale Control Scale - * @return \FML\Controls\Control - */ - public function setScale($scale) { - $this->scale = $scale; - return $this; - } - - /** - * Set Visibility - * - * @param bool $visible If Control should be visible - * @return \FML\Controls\Control - */ - public function setVisible($visible) { - $this->hidden = ($visible ? 0 : 1); - return $this; - } - - /** - * Add new Class Name - * - * @param string $class Class Name - * @return \FML\Controls\Control - */ - public function addClass($class) { - if (!in_array($class, $this->classes)) { - array_push($this->classes, $class); - } - return $this; - } - - /** - * - * @see \FML\Types\Renderable::render() - */ - public function render(\DOMDocument $domDocument) { - $xml = $domDocument->createElement($this->tagName); - if ($this->id) { - $xml->setAttribute('id', $this->id); - } - if ($this->x !== 0. || $this->y !== 0. || $this->z !== 0.) { - $xml->setAttribute('posn', "{$this->x} {$this->y} {$this->z}"); - } - if ($this->width >= 0. || $this->height >= 0.) { - $xml->setAttribute('sizen', "{$this->width} {$this->height}"); - } - if ($this->hAlign) { - $xml->setAttribute('halign', $this->hAlign); - } - if ($this->vAlign) { - $xml->setAttribute('valign', $this->vAlign); - } - if ($this->scale !== 1.) { - $xml->setAttribute('scale', $this->scale); - } - if ($this->hidden) { - $xml->setAttribute('hidden', $this->hidden); - } - $classes = ''; - foreach ($this->classes as $class) { - $classes .= $class . ' '; - } - if ($classes) { - $xml->setAttribute('class', $classes); - } - return $xml; - } -} +setId($id); + } + } + + /** + * Get Control Id + * + * @return string + */ + public function getId() { + return $this->id; + } + + /** + * Set Control Id + * + * @param string $id Control Id + * @return \FML\Controls\Control + */ + public function setId($id) { + $this->id = $id; + return $this; + } + + /** + * Check Id for dangerous Characters and assign an unique Id if necessary + * + * @return \FML\Controls\Control + */ + public function checkId() { + if (!$this->getId()) { + $this->setId(uniqid()); + return $this; + } + $dangerousCharacters = array(' ', ' ', '.', '|', '-', PHP_EOL); + $idCharacters = str_split($this->getId()); + $danger = false; + foreach ($idCharacters as $character) { + if (!in_array($character, $dangerousCharacters)) continue; + $danger = true; + break; + } + if ($danger) { + trigger_error("Please don't use special Characters in Ids, they might cause Problems! (I stripped them for You.)"); + $id = str_ireplace($dangerousCharacters, '', $this->getId()); + $this->setId($id); + } + return $this; + } + + /** + * Set X Position + * + * @param float $x Horizontal Position + * @return \FML\Controls\Control + */ + public function setX($x) { + $this->x = $x; + return $this; + } + + /** + * Set Y Position + * + * @param float $y Vertical Position + * @return \FML\Controls\Control + */ + public function setY($y) { + $this->y = $y; + return $this; + } + + /** + * Set Z Position + * + * @param float $z Depth + * @return \FML\Controls\Control + */ + public function setZ($z) { + $this->z = $z; + return $this; + } + + /** + * Set Control Position + * + * @param float $x Horizontal Position + * @param float $y Vertical Position + * @param float $z Depth + * @return \FML\Controls\Control + */ + public function setPosition($x, $y, $z = null) { + $this->setX($x); + $this->setY($y); + if ($z !== null) { + $this->setZ($z); + } + return $this; + } + + /** + * Set Control Width + * + * @param float $width Control Width + * @return \FML\Controls\Control + */ + public function setWidth($width) { + $this->width = $width; + return $this; + } + + /** + * Set Control Height + * + * @param float $height Control Height + * @return \FML\Controls\Control + */ + public function setHeight($height) { + $this->height = $height; + return $this; + } + + /** + * Set Control Size + * + * @param float $width Control Width + * @param float $height Control Height + * @return \FML\Controls\Control + */ + public function setSize($width, $height) { + $this->setWidth($width); + $this->setHeight($height); + return $this; + } + + /** + * Set Horizontal Alignment + * + * @param string $hAlign Horizontal Alignment + * @return \FML\Controls\Control + */ + public function setHAlign($hAlign) { + $this->hAlign = $hAlign; + return $this; + } + + /** + * Set Vertical Alignment + * + * @param string $vAlign Vertical Alignment + * @return \FML\Controls\Control + */ + public function setVAlign($vAlign) { + $this->vAlign = $vAlign; + return $this; + } + + /** + * Set Horizontal and Vertical Alignment + * + * @param string $hAlign Horizontal Alignment + * @param string $vAlign Vertical Alignment + * @return \FML\Controls\Control + */ + public function setAlign($hAlign, $vAlign) { + $this->setHAlign($hAlign); + $this->setVAlign($vAlign); + return $this; + } + + /** + * Set Control Scale + * + * @param float $scale Control Scale + * @return \FML\Controls\Control + */ + public function setScale($scale) { + $this->scale = $scale; + return $this; + } + + /** + * Set Visibility + * + * @param bool $visible If Control should be visible + * @return \FML\Controls\Control + */ + public function setVisible($visible) { + $this->hidden = ($visible ? 0 : 1); + return $this; + } + + /** + * Add new Class Name + * + * @param string $class Class Name + * @return \FML\Controls\Control + */ + public function addClass($class) { + if (!in_array($class, $this->classes)) { + array_push($this->classes, $class); + } + return $this; + } + + /** + * + * @see \FML\Types\Renderable::render() + */ + public function render(\DOMDocument $domDocument) { + $xml = $domDocument->createElement($this->tagName); + if ($this->id) { + $xml->setAttribute('id', $this->id); + } + if ($this->x !== 0. || $this->y !== 0. || $this->z !== 0.) { + $xml->setAttribute('posn', "{$this->x} {$this->y} {$this->z}"); + } + if ($this->width >= 0. || $this->height >= 0.) { + $xml->setAttribute('sizen', "{$this->width} {$this->height}"); + } + if ($this->hAlign) { + $xml->setAttribute('halign', $this->hAlign); + } + if ($this->vAlign) { + $xml->setAttribute('valign', $this->vAlign); + } + if ($this->scale !== 1.) { + $xml->setAttribute('scale', $this->scale); + } + if ($this->hidden) { + $xml->setAttribute('hidden', $this->hidden); + } + $classes = ''; + foreach ($this->classes as $class) { + $classes .= $class . ' '; + } + if ($classes) { + $xml->setAttribute('class', $classes); + } + return $xml; + } +} diff --git a/application/core/FML/Controls/Label.php b/application/core/FML/Controls/Label.php index 9b61e94e..5389c44b 100644 --- a/application/core/FML/Controls/Label.php +++ b/application/core/FML/Controls/Label.php @@ -62,7 +62,7 @@ class Label extends Control implements Actionable, Linkable, NewLineable, Script * Set Text Prefix * * @param string $textPrefix - * Text Pefix + * Text Prefix * @return \FML\Controls\Label */ public function setTextPrefix($textPrefix) { diff --git a/application/core/FML/CustomUI.php b/application/core/FML/CustomUI.php index a99d5afa..43cb1c6e 100644 --- a/application/core/FML/CustomUI.php +++ b/application/core/FML/CustomUI.php @@ -1,182 +1,182 @@ -encoding = $encoding; - return $this; - } - - /** - * Set Showing of Notices - * - * @param bool $visible - * @return \FML\CustomUI - */ - public function setNoticeVisible($visible) { - $this->noticeVisible = $visible; - return $this; - } - - /** - * Set Showing of the Challenge Info - * - * @param bool $visible - * @return \FML\CustomUI - */ - public function setChallengeInfoVisible($visible) { - $this->challengeInfoVisible = $visible; - return $this; - } - - /** - * Set Showing of the Net Infos - * - * @param bool $visible - * @return \FML\CustomUI - */ - public function setNetInfosVisible($visible) { - $this->netInfosVisible = $visible; - return $this; - } - - /** - * Set Showing of the Chat - * - * @param bool $visible - * @return \FML\CustomUI - */ - public function setChatVisible($visible) { - $this->chatVisible = $visible; - return $this; - } - - /** - * Set Showing of the Checkpoint List - * - * @param bool $visible - * @return \FML\CustomUI - */ - public function setCheckpointListVisible($visible) { - $this->checkpointListVisible = $visible; - return $this; - } - - /** - * Set Showing of Round Scores - * - * @param bool $visible - * @return \FML\CustomUI - */ - public function setRoundScoresVisible($visible) { - $this->roundScoresVisible = $visible; - return $this; - } - - /** - * Set Showing of the Scoretable - * - * @param bool $visible - * @return \FML\CustomUI - */ - public function setScoretableVisible($visible) { - $this->scoretableVisible = $visible; - return $this; - } - - /** - * Set Global Showing - * - * @param bool $visible - * @return \FML\CustomUI - */ - public function setGlobalVisible($visible) { - $this->globalVisible = $visible; - return $this; - } - - /** - * Render the XML Document - * - * @param \DOMDocument $domDocument - * @return \DOMDocument - */ - public function render($domDocument = null) { - $isChild = false; - if ($domDocument) { - $isChild = true; - } - if (!$isChild) { - $domDocument = new \DOMDocument('1.0', $this->encoding); - } - $xmlElement = $domDocument->createElement($this->tagName); - $domDocument->appendChild($xmlElement); - $settings = $this->getSettings(); - foreach ($settings as $setting => $value) { - if ($value === null) continue; - $xmlSubElement = $domDocument->createElement($setting); - $xmlSubElement->setAttribute('visible', ($value ? 1 : 0)); - $xmlElement->appendChild($xmlSubElement); - } - if ($isChild) { - return $xmlElement; - } - return $domDocument; - } - - /** - * Get String Representation - * - * @return string - */ - public function __toString() { - $domDocument = $this->render(); - $xmlText = $domDocument->saveXML(); - return $xmlText; - } - - /** - * Get associative Array of all CustomUI Settings - * - * @return array - */ - private function getSettings() { - $settings = array(); - $settings['challenge_info'] = $this->challengeInfoVisible; - $settings['chat'] = $this->chatVisible; - $settings['checkpoint_list'] = $this->checkpointListVisible; - $settings['global'] = $this->globalVisible; - $settings['net_infos'] = $this->netInfosVisible; - $settings['notice'] = $this->noticeVisible; - $settings['round_scores'] = $this->roundScoresVisible; - $settings['scoretable'] = $this->scoretableVisible; - return $settings; - } +encoding = $encoding; + return $this; + } + + /** + * Set Showing of Notices + * + * @param bool $visible + * @return \FML\CustomUI + */ + public function setNoticeVisible($visible) { + $this->noticeVisible = $visible; + return $this; + } + + /** + * Set Showing of the Challenge Info + * + * @param bool $visible + * @return \FML\CustomUI + */ + public function setChallengeInfoVisible($visible) { + $this->challengeInfoVisible = $visible; + return $this; + } + + /** + * Set Showing of the Net Infos + * + * @param bool $visible + * @return \FML\CustomUI + */ + public function setNetInfosVisible($visible) { + $this->netInfosVisible = $visible; + return $this; + } + + /** + * Set Showing of the Chat + * + * @param bool $visible + * @return \FML\CustomUI + */ + public function setChatVisible($visible) { + $this->chatVisible = $visible; + return $this; + } + + /** + * Set Showing of the Checkpoint List + * + * @param bool $visible + * @return \FML\CustomUI + */ + public function setCheckpointListVisible($visible) { + $this->checkpointListVisible = $visible; + return $this; + } + + /** + * Set Showing of Round Scores + * + * @param bool $visible + * @return \FML\CustomUI + */ + public function setRoundScoresVisible($visible) { + $this->roundScoresVisible = $visible; + return $this; + } + + /** + * Set Showing of the Scoretable + * + * @param bool $visible + * @return \FML\CustomUI + */ + public function setScoretableVisible($visible) { + $this->scoretableVisible = $visible; + return $this; + } + + /** + * Set Global Showing + * + * @param bool $visible + * @return \FML\CustomUI + */ + public function setGlobalVisible($visible) { + $this->globalVisible = $visible; + return $this; + } + + /** + * Render the XML Document + * + * @param \DOMDocument $domDocument + * @return \DOMDocument + */ + public function render($domDocument = null) { + $isChild = false; + if ($domDocument) { + $isChild = true; + } + if (!$isChild) { + $domDocument = new \DOMDocument('1.0', $this->encoding); + } + $xmlElement = $domDocument->createElement($this->tagName); + $domDocument->appendChild($xmlElement); + $settings = $this->getSettings(); + foreach ($settings as $setting => $value) { + if ($value === null) continue; + $xmlSubElement = $domDocument->createElement($setting); + $xmlSubElement->setAttribute('visible', ($value ? 1 : 0)); + $xmlElement->appendChild($xmlSubElement); + } + if ($isChild) { + return $xmlElement; + } + return $domDocument; + } + + /** + * Get String Representation + * + * @return string + */ + public function __toString() { + $domDocument = $this->render(); + $xmlText = $domDocument->saveXML(); + return $xmlText; + } + + /** + * Get associative Array of all CustomUI Settings + * + * @return array + */ + private function getSettings() { + $settings = array(); + $settings['challenge_info'] = $this->challengeInfoVisible; + $settings['chat'] = $this->chatVisible; + $settings['checkpoint_list'] = $this->checkpointListVisible; + $settings['global'] = $this->globalVisible; + $settings['net_infos'] = $this->netInfosVisible; + $settings['notice'] = $this->noticeVisible; + $settings['round_scores'] = $this->roundScoresVisible; + $settings['scoretable'] = $this->scoretableVisible; + return $settings; + } } diff --git a/application/core/FML/ManiaLink.php b/application/core/FML/ManiaLink.php index b663d423..bb34ced3 100644 --- a/application/core/FML/ManiaLink.php +++ b/application/core/FML/ManiaLink.php @@ -1,195 +1,195 @@ -setId($id); - } - } - - /** - * Set XML Encoding - * - * @param string $encoding - * XML Encoding - * @return \FML\ManiaLink - */ - public function setXmlEncoding($encoding) { - $this->encoding = $encoding; - return $this; - } - - /** - * Set Manialink Id - * - * @param string $id - * Manialink Id - * @return \FML\ManiaLink - */ - public function setId($id) { - $this->id = $id; - return $this; - } - - /** - * Set Background - * - * @param string $background - * Background Value - * @return \FML\ManiaLink - */ - public function setBackground($background) { - $this->background = $background; - return $this; - } - - /** - * Set Navigable3d - * - * @param bool $navigable3d - * If the manialink is 3d navigable - * @return \FML\ManiaLink - */ - public function setNavigable3d($navigable3d) { - $this->navigable3d = ($navigable3d ? 1 : 0); - return $this; - } - - /** - * Set Timeout - * - * @param int $timeout - * Timeout Duration - * @return \FML\ManiaLink - */ - public function setTimeout($timeout) { - $this->timeout = $timeout; - return $this; - } - - /** - * - * @see \FML\Types\Container::add() - * @return \FML\ManiaLink - */ - public function add(Renderable $child) { - array_push($this->children, $child); - return $this; - } - - /** - * - * @see \FML\Types\Container::removeChildren() - * @return \FML\ManiaLink - */ - public function removeChildren() { - $this->children = array(); - return $this; - } - - /** - * Set the script object of the Manialink - * - * @param Script $script - * @return \FML\ManiaLink - */ - public function setScript(Script $script) { - $this->script = $script; - return $this; - } - - /** - * Render the XML Document - * - * @param bool $echo - * If the xml should be echoed and the content-type header should be set - * @param \DOMDocument $domDocument - * @return \DOMDocument - */ - public function render($echo = false, $domDocument = null) { - $isChild = false; - if ($domDocument) { - $isChild = true; - } - if (!$isChild) { - $domDocument = new \DOMDocument('1.0', $this->encoding); - } - $manialink = $domDocument->createElement($this->tagName); - if (!$isChild) { - $domDocument->appendChild($manialink); - } - if ($this->id) { - $manialink->setAttribute('id', $this->id); - } - if ($this->version) { - $manialink->setAttribute('version', $this->version); - } - if ($this->background) { - $manialink->setAttribute('background', $this->background); - } - if ($this->navigable3d) { - $manialink->setAttribute('navigable3d', $this->navigable3d); - } - if ($this->timeout) { - $timeoutXml = $domDocument->createElement('timeout', $this->timeout); - $manialink->appendChild($timeoutXml); - } - foreach ($this->children as $child) { - $childXml = $child->render($domDocument); - $manialink->appendChild($childXml); - } - if ($this->script) { - $scriptXml = $this->script->render($domDocument); - $manialink->appendChild($scriptXml); - } - if ($isChild) { - return $manialink; - } - if ($echo) { - header('Content-Type: application/xml'); - echo $domDocument->saveXML(); - } - return $domDocument; - } - - /** - * Get String Representation - * - * @return string - */ - public function __toString() { - $domDocument = $this->render(); - $xmlText = $domDocument->saveXML(); - return $xmlText; - } +setId($id); + } + } + + /** + * Set XML Encoding + * + * @param string $encoding + * XML Encoding + * @return \FML\ManiaLink + */ + public function setXmlEncoding($encoding) { + $this->encoding = $encoding; + return $this; + } + + /** + * Set Manialink Id + * + * @param string $id + * Manialink Id + * @return \FML\ManiaLink + */ + public function setId($id) { + $this->id = $id; + return $this; + } + + /** + * Set Background + * + * @param string $background + * Background Value + * @return \FML\ManiaLink + */ + public function setBackground($background) { + $this->background = $background; + return $this; + } + + /** + * Set Navigable3d + * + * @param bool $navigable3d + * If the manialink is 3d navigable + * @return \FML\ManiaLink + */ + public function setNavigable3d($navigable3d) { + $this->navigable3d = ($navigable3d ? 1 : 0); + return $this; + } + + /** + * Set Timeout + * + * @param int $timeout + * Timeout Duration + * @return \FML\ManiaLink + */ + public function setTimeout($timeout) { + $this->timeout = $timeout; + return $this; + } + + /** + * + * @see \FML\Types\Container::add() + * @return \FML\ManiaLink + */ + public function add(Renderable $child) { + array_push($this->children, $child); + return $this; + } + + /** + * + * @see \FML\Types\Container::removeChildren() + * @return \FML\ManiaLink + */ + public function removeChildren() { + $this->children = array(); + return $this; + } + + /** + * Set the script object of the Manialink + * + * @param Script $script + * @return \FML\ManiaLink + */ + public function setScript(Script $script) { + $this->script = $script; + return $this; + } + + /** + * Render the XML Document + * + * @param bool $echo + * If the xml should be echoed and the content-type header should be set + * @param \DOMDocument $domDocument + * @return \DOMDocument + */ + public function render($echo = false, $domDocument = null) { + $isChild = false; + if ($domDocument) { + $isChild = true; + } + if (!$isChild) { + $domDocument = new \DOMDocument('1.0', $this->encoding); + } + $manialink = $domDocument->createElement($this->tagName); + if (!$isChild) { + $domDocument->appendChild($manialink); + } + if ($this->id) { + $manialink->setAttribute('id', $this->id); + } + if ($this->version) { + $manialink->setAttribute('version', $this->version); + } + if ($this->background) { + $manialink->setAttribute('background', $this->background); + } + if ($this->navigable3d) { + $manialink->setAttribute('navigable3d', $this->navigable3d); + } + if ($this->timeout) { + $timeoutXml = $domDocument->createElement('timeout', $this->timeout); + $manialink->appendChild($timeoutXml); + } + foreach ($this->children as $child) { + $childXml = $child->render($domDocument); + $manialink->appendChild($childXml); + } + if ($this->script) { + $scriptXml = $this->script->render($domDocument); + $manialink->appendChild($scriptXml); + } + if ($isChild) { + return $manialink; + } + if ($echo) { + header('Content-Type: application/xml'); + echo $domDocument->saveXML(); + } + return $domDocument; + } + + /** + * Get String Representation + * + * @return string + */ + public function __toString() { + $domDocument = $this->render(); + $xmlText = $domDocument->saveXML(); + return $xmlText; + } } diff --git a/application/core/FML/ManiaLinks.php b/application/core/FML/ManiaLinks.php index 5b374f53..a8e28da2 100644 --- a/application/core/FML/ManiaLinks.php +++ b/application/core/FML/ManiaLinks.php @@ -14,12 +14,12 @@ class ManiaLinks { protected $encoding = 'utf-8'; protected $tagName = 'manialinks'; protected $children = array(); + protected $customUI = null; /** * Set XML Encoding * - * @param string $encoding - * XML Encoding + * @param string $encoding XML Encoding * @return \FML\ManiaLinks */ public function setXmlEncoding($encoding) { @@ -30,8 +30,7 @@ class ManiaLinks { /** * Add a Child Manialink * - * @param ManiaLink $child - * Child Manialink + * @param ManiaLink $child Child Manialink * @return \FML\ManiaLinks */ public function add(ManiaLink $child) { @@ -51,11 +50,21 @@ class ManiaLinks { return $this; } + /** + * Set the CustomUI + * + * @param CustomUI $customUI The CustomUI Object + * @return \FML\ManiaLinks + */ + public function setCustomUI(CustomUI $customUI) { + $this->customUI = $customUI; + return $this; + } + /** * Render the XML Document * - * @param bool $echo - * If the xml should be echoed and the content-type header should be set + * @param bool $echo If the XML should be echoed and the Content-Type Header should be set * @return \DOMDocument */ public function render($echo = false) { @@ -66,6 +75,10 @@ class ManiaLinks { $childXml = $child->render(false, $domDocument); $manialinks->appendChild($childXml); } + if ($this->customUI) { + $customUIXml = $this->customUI->render($domDocument); + $manialinks->appendChild($customUIXml); + } if ($echo) { header('Content-Type: application/xml'); echo $domDocument->saveXML(); diff --git a/application/core/FML/Script/Builder.php b/application/core/FML/Script/Builder.php index 2c7bb325..d96f7bcb 100644 --- a/application/core/FML/Script/Builder.php +++ b/application/core/FML/Script/Builder.php @@ -1,23 +1,23 @@ -includes[$namespace] = $file; return $this; } + /** + * Set a Constant of the Script + * + * @param string $name + * @param string $value + * @return \FML\Script\Script + */ + public function setConstant($name, $value) { + $this->constants[$name] = $value; + return $this; + } + + /** + * Set a Function of the Script + * + * @param string $name + * @param string $coding + * @return \FML\Script\Script + */ + public function setFunction($name, $coding) { + $this->functions[$name] = $coding; + return $this; + } + /** * Add a Tooltip Behavior * - * @param Control $hoverControl - * @param Control $tooltipControl + * @param Control $hoverControl The Control that shows the Tooltip + * @param Control $tooltipControl The Tooltip to display + * @param string $options,... (optional) Unlimited Number of Tooltip Options * @return \FML\Script\Script */ public function addTooltip(Control $hoverControl, Control $tooltipControl) { @@ -68,9 +102,30 @@ class Script { } $tooltipControl->checkId(); $tooltipControl->setVisible(false); + $hoverControl->checkId(); $hoverControl->setScriptEvents(true); $hoverControl->addClass(self::CLASS_TOOLTIPS); $hoverControl->addClass($tooltipControl->getId()); + $options = $this->spliceParameters(func_get_args(), 2); + foreach ($options as $option => $value) { + if ($option == self::OPTION_TOOLTIP_TEXT) { + if (!($tooltipControl instanceof Label)) { + trigger_error('Label needed for Tooltip Text Option!'); + continue; + } + $hoverId = $hoverControl->getId(); + $tooltipId = $tooltipControl->getId(); + if (!isset($this->tooltipTexts[$tooltipId])) { + $this->tooltipTexts[$tooltipId] = array(); + } + $this->tooltipTexts[$tooltipId][$hoverId] = $value; + continue; + } + if ($option == self::OPTION_TOOLTIP_INVERT) { + $tooltipControl->setVisible(true); + } + $hoverControl->addClass($option); + } $this->tooltips = true; return $this; } @@ -78,9 +133,9 @@ class Script { /** * Add a Menu Behavior * - * @param Control $clickControl - * @param Control $menuControl - * @param string $menuId + * @param Control $clickControl + * @param Control $menuControl + * @param string $menuId * @return \FML\Script\Script */ public function addMenu(Control $clickControl, Control $menuControl, $menuId = null) { @@ -95,7 +150,7 @@ class Script { $clickControl->setScriptEvents(true); $clickControl->addClass(self::CLASS_MENUBUTTON); $clickControl->addClass($menuId . '-' . $menuControl->getId()); - $this->addInclude('TextLib', 'TextLib'); + $this->setInclude('TextLib', 'TextLib'); $this->menus = true; return $this; } @@ -103,9 +158,9 @@ class Script { /** * Add a Page for a Paging Behavior * - * @param Control $pageControl - * @param int $pageNumber - * @param string $pagesId + * @param Control $pageControl + * @param int $pageNumber + * @param string $pagesId * @return \FML\Script\Script */ public function addPage(Control $pageControl, $pageNumber, $pagesId = null) { @@ -120,9 +175,9 @@ class Script { /** * Add a Pager Button for a Paging Behavior * - * @param Control $pagerControl - * @param int $pagingAction - * @param string $pagesId + * @param Control $pagerControl + * @param int $pagingAction + * @param string $pagesId * @return \FML\Script\Script */ public function addPager(Control $pagerControl, $pagingAction, $pagesId = null) { @@ -136,7 +191,7 @@ class Script { $pagerControl->addClass(self::CLASS_PAGER); $pagerControl->addClass(self::CLASS_PAGER . '-I' . $pagesId); $pagerControl->addClass(self::CLASS_PAGER . '-A' . $pagingAction); - $this->addInclude('TextLib', 'TextLib'); + $this->setInclude('TextLib', 'TextLib'); $this->pages = true; return $this; } @@ -144,8 +199,8 @@ class Script { /** * Add a Label that shows the current Page Number * - * @param Label $pageLabel - * @param string $pagesId + * @param Label $pageLabel + * @param string $pagesId * @return \FML\Script\Script */ public function addPageLabel(Label $pageLabel, $pagesId = null) { @@ -158,8 +213,8 @@ class Script { /** * Add a Button Behavior that will open the Built-In Player Profile * - * @param Control $profileControl - * @param string $playerLogin + * @param Control $profileControl + * @param string $playerLogin * @return \FML\Script\Script */ public function addProfileButton(Control $profileControl, $playerLogin) { @@ -172,7 +227,7 @@ class Script { if ($playerLogin) { $profileControl->addClass(self::CLASS_PROFILE . '-' . $playerLogin); } - $this->addInclude('TextLib', 'TextLib'); + $this->setInclude('TextLib', 'TextLib'); $this->profile = true; return $this; } @@ -180,7 +235,7 @@ class Script { /** * Add a Button Behavior that will open the Built-In Map Info * - * @param Control $mapInfoControl + * @param Control $mapInfoControl * @return \FML\Script\Script */ public function addMapInfoButton(Control $mapInfoControl) { @@ -197,7 +252,7 @@ class Script { /** * Create the Script XML Tag * - * @param \DOMDocument $domDocument + * @param \DOMDocument $domDocument * @return \DOMElement */ public function render(\DOMDocument $domDocument) { @@ -217,21 +272,13 @@ class Script { $scriptText = ""; $scriptText .= $this->getHeaderComment(); $scriptText .= $this->getIncludes(); - if ($this->tooltips) { - $scriptText .= $this->getTooltipLabels(); - } - if ($this->menus) { - $scriptText .= $this->getMenuLabels(); - } - if ($this->pages) { - $scriptText .= $this->getPagesLabels(); - } - if ($this->profile) { - $scriptText .= $this->getProfileLabels(); - } - if ($this->mapInfo) { - $scriptText .= $this->getMapInfoLabels(); - } + $scriptText .= $this->getConstants(); + $scriptText .= $this->getFunctions(); + $scriptText .= $this->getTooltipLabels(); + $scriptText .= $this->getMenuLabels(); + $scriptText .= $this->getPagesLabels(); + $scriptText .= $this->getProfileLabels(); + $scriptText .= $this->getMapInfoLabels(); $scriptText .= $this->getMainFunction(); return $scriptText; } @@ -259,30 +306,133 @@ class Script { return $includesText; } + /** + * Get the Constants + * + * @return string + */ + private function getConstants() { + $this->buildTooltipConstants(); + $constantsText = PHP_EOL; + foreach ($this->constants as $name => $value) { + $constantsText .= "#Const {$name} {$value}" . PHP_EOL; + } + return $constantsText; + } + + /** + * Build the Constants needed for tooltips + */ + private function buildTooltipConstants() { + if (!$this->tooltips) return; + $constantText = "["; + $index = 0; + $count = count($this->tooltipTexts); + foreach ($this->tooltipTexts as $tooltipId => $tooltipTexts) { + $constantText .= "\"{$tooltipId}\" => ["; + $subIndex = 0; + $subCount = count($tooltipTexts); + foreach ($tooltipTexts as $hoverId => $text) { + $constantText .= "\"{$hoverId}\" => \"{$text}\""; + if ($subIndex < $subCount - 1) $constantText .= ", "; + $subIndex++; + } + $constantText .= "]"; + if ($index < $count - 1) $constantText .= ", "; + $index++; + } + $constantText .= "]"; + $this->setConstant(self::CONSTANT_TOOLTIPTEXTS, $constantText); + } + + /** + * Get the Functions + * + * @return string + */ + private function getFunctions() { + $this->buildTooltipFunctions(); + $functionsText = PHP_EOL; + foreach ($this->functions as $name => $coding) { + $functionsText .= $coding; + } + return $functionsText; + } + + /** + * Build the Functions needed for Tooltips + */ + private function buildTooltipFunctions() { + if (!$this->tooltips) return; + $setFunctionText = " +Void " . self::FUNCTION_SETTOOLTIPTEXT . "(CMlControl _TooltipControl, CMlControl _HoverControl) { + if (!_TooltipControl.Visible) return; + declare TooltipId = _TooltipControl.ControlId; + declare HoverId = _HoverControl.ControlId; + if (!" . self::CONSTANT_TOOLTIPTEXTS . ".existskey(TooltipId)) return; + if (!" . self::CONSTANT_TOOLTIPTEXTS . "[TooltipId].existskey(HoverId)) return; + declare Label = (_TooltipControl as CMlLabel); + Label.Value = " . self::CONSTANT_TOOLTIPTEXTS . "[TooltipId][HoverId]; +}"; + $this->setFunction(self::FUNCTION_SETTOOLTIPTEXT, $setFunctionText); + } + /** * Get the Tooltip Labels * * @return string */ private function getTooltipLabels() { - $mouseOverScript = " -if (Event.Control.HasClass(\"" . self::CLASS_TOOLTIPS . "\")) { - foreach (ControlClass in Event.Control.ControlClasses) { - declare TooltipControl <=> Page.GetFirstChild(ControlClass); - if (TooltipControl == Null) continue; - TooltipControl.Show(); - } + if (!$this->tooltips) return ""; + $mouseOverScript = " +if (!Event.Control.HasClass(\"" . self::CLASS_TOOLTIPS . "\")) break; +if (Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_ONCLICK . "\")) break; +declare Invert = Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_INVERT . "\"); +foreach (ControlClass in Event.Control.ControlClasses) { + declare TooltipControl <=> Page.GetFirstChild(ControlClass); + if (TooltipControl == Null) continue; + TooltipControl.Visible = !Invert; + " . self::FUNCTION_SETTOOLTIPTEXT . "(TooltipControl, Event.Control); }"; - $mouseOutScript = " -if (Event.Control.HasClass(\"" . self::CLASS_TOOLTIPS . "\")) { - foreach (ControlClass in Event.Control.ControlClasses) { - declare TooltipControl <=> Page.GetFirstChild(ControlClass); - if (TooltipControl == Null) continue; - TooltipControl.Hide(); - } + $mouseOutScript = " +if (!Event.Control.HasClass(\"" . self::CLASS_TOOLTIPS . "\")) break; +declare FML_Clicked for Event.Control = False; +declare StayOnClick = Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_STAYONCLICK . "\"); +if (StayOnClick && FML_Clicked) break; +declare Invert = Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_INVERT . "\"); +foreach (ControlClass in Event.Control.ControlClasses) { + declare TooltipControl <=> Page.GetFirstChild(ControlClass); + if (TooltipControl == Null) continue; + TooltipControl.Visible = Invert; + " . self::FUNCTION_SETTOOLTIPTEXT . "(TooltipControl, Event.Control); +}"; + $mouseClickScript = " +if (!Event.Control.HasClass(\"" . self::CLASS_TOOLTIPS . "\")) break; +declare Show = False; +declare OnClick = Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_ONCLICK . "\"); +if (OnClick) { + Show = !Event.Control.Visible; +} else { + declare StayOnClick = Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_STAYONCLICK . "\"); + if (StayOnClick) { + declare FML_Clicked for Event.Control = False; + FML_Clicked = !FML_Clicked; + if (FML_Clicked) break; + Show = False; + } else { + break; + } +} +declare Invert = Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_INVERT . "\"); +foreach (ControlClass in Event.Control.ControlClasses) { + declare TooltipControl <=> Page.GetFirstChild(ControlClass); + if (TooltipControl == Null) continue; + TooltipControl.Visible = Show && !Invert; + " . self::FUNCTION_SETTOOLTIPTEXT . "(TooltipControl, Event.Control); }"; $tooltipsLabels = Builder::getLabelImplementationBlock(self::LABEL_MOUSEOVER, $mouseOverScript); $tooltipsLabels .= Builder::getLabelImplementationBlock(self::LABEL_MOUSEOUT, $mouseOutScript); + $tooltipsLabels .= Builder::getLabelImplementationBlock(self::LABEL_MOUSECLICK, $mouseClickScript); return $tooltipsLabels; } @@ -292,26 +442,27 @@ if (Event.Control.HasClass(\"" . self::CLASS_TOOLTIPS . "\")) { * @return string */ private function getMenuLabels() { - $mouseClickScript = " -if (Event.Control.HasClass(\"" . self::CLASS_MENUBUTTON . "\")) { - declare Text MenuIdClass; - declare Text MenuControlId; - foreach (ControlClass in Event.Control.ControlClasses) { - declare ClassParts = TextLib::Split(\"-\", ControlClass); - if (ClassParts.count <= 1) continue; - MenuIdClass = ClassParts[0]; - MenuControlId = ClassParts[1]; - break; - } - Page.GetClassChildren(MenuIdClass, Page.MainFrame, True); - foreach (MenuControl in Page.GetClassChildren_Result) { - if (!MenuControl.HasClass(\"" . self::CLASS_MENU . "\")) continue; - if (MenuControlId != MenuControl.ControlId) { - MenuControl.Hide(); - } else { - MenuControl.Show(); - } - } + if (!$this->menus) return ""; + $mouseClickScript = " +if (Event.Control.HasClass(\"" . self::CLASS_MENUBUTTON . "\")) { + declare Text MenuIdClass; + declare Text MenuControlId; + foreach (ControlClass in Event.Control.ControlClasses) { + declare ClassParts = TextLib::Split(\"-\", ControlClass); + if (ClassParts.count <= 1) continue; + MenuIdClass = ClassParts[0]; + MenuControlId = ClassParts[1]; + break; + } + Page.GetClassChildren(MenuIdClass, Page.MainFrame, True); + foreach (MenuControl in Page.GetClassChildren_Result) { + if (!MenuControl.HasClass(\"" . self::CLASS_MENU . "\")) continue; + if (MenuControlId != MenuControl.ControlId) { + MenuControl.Hide(); + } else { + MenuControl.Show(); + } + } }"; $menuLabels = Builder::getLabelImplementationBlock(self::LABEL_MOUSECLICK, $mouseClickScript); return $menuLabels; @@ -323,76 +474,77 @@ if (Event.Control.HasClass(\"" . self::CLASS_MENUBUTTON . "\")) { * @return string */ private function getPagesLabels() { + if (!$this->pages) return ""; $pagesNumberPrefix = self::CLASS_PAGE . '-P'; $pagesNumberPrefixLength = strlen($pagesNumberPrefix); - $pagesScript = " -if (Event.Control.HasClass(\"" . self::CLASS_PAGER . "\")) { - declare Text PagesId; - declare Integer PagingAction; - foreach (ControlClass in Event.Control.ControlClasses) { - declare ClassParts = TextLib::Split(\"-\", ControlClass); - if (ClassParts.count <= 1) continue; - if (ClassParts[0] != \"" . self::CLASS_PAGER . "\") continue; - switch (TextLib::SubText(ClassParts[1], 0, 1)) { - case \"I\": { - PagesId = TextLib::SubText(ClassParts[1], 1, 99); - } - case \"A\": { - PagingAction = TextLib::ToInteger(TextLib::SubText(ClassParts[1], 1, 99)); - } - } - } - declare FML_PagesLastScriptStart for This = FML_ScriptStart; - declare FML_MinPageNumber for This = Integer[Text]; - declare FML_MaxPageNumber for This = Integer[Text]; - declare FML_PageNumber for This = Integer[Text]; - if (FML_PagesLastScriptStart != FML_ScriptStart || !FML_PageNumber.existskey(PagesId) || !FML_MinPageNumber.existskey(PagesId) || !FML_MaxPageNumber.existskey(PagesId)) { - Page.GetClassChildren(PagesId, Page.MainFrame, True); - foreach (PageControl in Page.GetClassChildren_Result) { - if (!PageControl.HasClass(\"" . self::CLASS_PAGE . "\")) continue; - foreach (ControlClass in PageControl.ControlClasses) { - if (TextLib::SubText(ControlClass, 0, {$pagesNumberPrefixLength}) != \"{$pagesNumberPrefix}\") continue; - declare PageNumber = TextLib::ToInteger(TextLib::SubText(ControlClass, {$pagesNumberPrefixLength}, 99)); - if (!FML_MinPageNumber.existskey(PagesId) || PageNumber < FML_MinPageNumber[PagesId]) { - FML_MinPageNumber[PagesId] = PageNumber; - } - if (!FML_MaxPageNumber.existskey(PagesId) || PageNumber > FML_MaxPageNumber[PagesId]) { - FML_MaxPageNumber[PagesId] = PageNumber; - } - break; - } - } - FML_PageNumber[PagesId] = FML_MinPageNumber[PagesId]; - } - FML_PageNumber[PagesId] += PagingAction; - if (FML_PageNumber[PagesId] < FML_MinPageNumber[PagesId]) { - FML_PageNumber[PagesId] = FML_MinPageNumber[PagesId]; - } - if (FML_PageNumber[PagesId] > FML_MaxPageNumber[PagesId]) { - FML_PageNumber[PagesId] = FML_MaxPageNumber[PagesId]; - } - FML_PagesLastScriptStart = FML_ScriptStart; - Page.GetClassChildren(PagesId, Page.MainFrame, True); - foreach (PageControl in Page.GetClassChildren_Result) { - if (!PageControl.HasClass(\"" . self::CLASS_PAGE . "\")) continue; - declare PageNumber = -1; - foreach (ControlClass in PageControl.ControlClasses) { - if (TextLib::SubText(ControlClass, 0, {$pagesNumberPrefixLength}) != \"{$pagesNumberPrefix}\") continue; - PageNumber = TextLib::ToInteger(TextLib::SubText(ControlClass, {$pagesNumberPrefixLength}, 99)); - break; - } - if (PageNumber != FML_PageNumber[PagesId]) { - PageControl.Hide(); - } else { - PageControl.Show(); - } - } - Page.GetClassChildren(\"" . self::CLASS_PAGELABEL . "\", Page.MainFrame, True); - foreach (PageControl in Page.GetClassChildren_Result) { - if (!PageControl.HasClass(PagesId)) continue; - declare PageLabel <=> (PageControl as CMlLabel); - PageLabel.Value = FML_PageNumber[PagesId]^\"/\"^FML_MaxPageNumber[PagesId]; - } + $pagesScript = " +if (Event.Control.HasClass(\"" . self::CLASS_PAGER . "\")) { + declare Text PagesId; + declare Integer PagingAction; + foreach (ControlClass in Event.Control.ControlClasses) { + declare ClassParts = TextLib::Split(\"-\", ControlClass); + if (ClassParts.count <= 1) continue; + if (ClassParts[0] != \"" . self::CLASS_PAGER . "\") continue; + switch (TextLib::SubText(ClassParts[1], 0, 1)) { + case \"I\": { + PagesId = TextLib::SubText(ClassParts[1], 1, 99); + } + case \"A\": { + PagingAction = TextLib::ToInteger(TextLib::SubText(ClassParts[1], 1, 99)); + } + } + } + declare FML_PagesLastScriptStart for This = FML_ScriptStart; + declare FML_MinPageNumber for This = Integer[Text]; + declare FML_MaxPageNumber for This = Integer[Text]; + declare FML_PageNumber for This = Integer[Text]; + if (FML_PagesLastScriptStart != FML_ScriptStart || !FML_PageNumber.existskey(PagesId) || !FML_MinPageNumber.existskey(PagesId) || !FML_MaxPageNumber.existskey(PagesId)) { + Page.GetClassChildren(PagesId, Page.MainFrame, True); + foreach (PageControl in Page.GetClassChildren_Result) { + if (!PageControl.HasClass(\"" . self::CLASS_PAGE . "\")) continue; + foreach (ControlClass in PageControl.ControlClasses) { + if (TextLib::SubText(ControlClass, 0, {$pagesNumberPrefixLength}) != \"{$pagesNumberPrefix}\") continue; + declare PageNumber = TextLib::ToInteger(TextLib::SubText(ControlClass, {$pagesNumberPrefixLength}, 99)); + if (!FML_MinPageNumber.existskey(PagesId) || PageNumber < FML_MinPageNumber[PagesId]) { + FML_MinPageNumber[PagesId] = PageNumber; + } + if (!FML_MaxPageNumber.existskey(PagesId) || PageNumber > FML_MaxPageNumber[PagesId]) { + FML_MaxPageNumber[PagesId] = PageNumber; + } + break; + } + } + FML_PageNumber[PagesId] = FML_MinPageNumber[PagesId]; + } + FML_PageNumber[PagesId] += PagingAction; + if (FML_PageNumber[PagesId] < FML_MinPageNumber[PagesId]) { + FML_PageNumber[PagesId] = FML_MinPageNumber[PagesId]; + } + if (FML_PageNumber[PagesId] > FML_MaxPageNumber[PagesId]) { + FML_PageNumber[PagesId] = FML_MaxPageNumber[PagesId]; + } + FML_PagesLastScriptStart = FML_ScriptStart; + Page.GetClassChildren(PagesId, Page.MainFrame, True); + foreach (PageControl in Page.GetClassChildren_Result) { + if (!PageControl.HasClass(\"" . self::CLASS_PAGE . "\")) continue; + declare PageNumber = -1; + foreach (ControlClass in PageControl.ControlClasses) { + if (TextLib::SubText(ControlClass, 0, {$pagesNumberPrefixLength}) != \"{$pagesNumberPrefix}\") continue; + PageNumber = TextLib::ToInteger(TextLib::SubText(ControlClass, {$pagesNumberPrefixLength}, 99)); + break; + } + if (PageNumber != FML_PageNumber[PagesId]) { + PageControl.Hide(); + } else { + PageControl.Show(); + } + } + Page.GetClassChildren(\"" . self::CLASS_PAGELABEL . "\", Page.MainFrame, True); + foreach (PageControl in Page.GetClassChildren_Result) { + if (!PageControl.HasClass(PagesId)) continue; + declare PageLabel <=> (PageControl as CMlLabel); + PageLabel.Value = FML_PageNumber[PagesId]^\"/\"^FML_MaxPageNumber[PagesId]; + } }"; $pagesLabels = Builder::getLabelImplementationBlock(self::LABEL_MOUSECLICK, $pagesScript); return $pagesLabels; @@ -404,17 +556,18 @@ if (Event.Control.HasClass(\"" . self::CLASS_PAGER . "\")) { * @return string */ private function getProfileLabels() { - $profileScript = " -if (Event.Control.HasClass(\"" . self::CLASS_PROFILE . "\")) { - declare Login = LocalUser.Login; - foreach (ControlClass in Event.Control.ControlClasses) { - declare ClassParts = TextLib::Split(\"-\", ControlClass); - if (ClassParts.count <= 1) continue; - if (ClassParts[0] != \"" . self::CLASS_PROFILE . "\") continue; - Login = ClassParts[1]; - break; - } - ShowProfile(Login); + if (!$this->profile) return ""; + $profileScript = " +if (Event.Control.HasClass(\"" . self::CLASS_PROFILE . "\")) { + declare Login = LocalUser.Login; + foreach (ControlClass in Event.Control.ControlClasses) { + declare ClassParts = TextLib::Split(\"-\", ControlClass); + if (ClassParts.count <= 1) continue; + if (ClassParts[0] != \"" . self::CLASS_PROFILE . "\") continue; + Login = ClassParts[1]; + break; + } + ShowProfile(Login); }"; $profileLabels = Builder::getLabelImplementationBlock(self::LABEL_MOUSECLICK, $profileScript); return $profileLabels; @@ -426,9 +579,10 @@ if (Event.Control.HasClass(\"" . self::CLASS_PROFILE . "\")) { * @return string */ private function getMapInfoLabels() { - $mapInfoScript = " -if (Event.Control.HasClass(\"" . self::CLASS_MAPINFO . "\")) { - ShowCurChallengeCard(); + if (!$this->mapInfo) return ""; + $mapInfoScript = " +if (Event.Control.HasClass(\"" . self::CLASS_MAPINFO . "\")) { + ShowCurChallengeCard(); }"; $mapInfoLabels = Builder::getLabelImplementationBlock(self::LABEL_MOUSECLICK, $mapInfoScript); return $mapInfoLabels; @@ -443,4 +597,28 @@ if (Event.Control.HasClass(\"" . self::CLASS_MAPINFO . "\")) { $mainFunction = file_get_contents(__DIR__ . '/Parts/Main.txt'); return $mainFunction; } -} + + /** + * Return the Array of additional optional Parameters + * + * @param array $args + * @param int $offset + * @return array + */ + private function spliceParameters(array $params, $offset) { + $args = array_splice($params, $offset); + if (!$args) return $args; + $parameters = array(); + foreach ($args as $arg) { + if (is_array($arg)) { + foreach ($arg as $key => $value) { + $parameters[$key] = $value; + } + } + else { + $parameters[$arg] = true; + } + } + return $parameters; + } +} diff --git a/application/core/FML/autoload.php b/application/core/FML/autoload.php index bb0a7fdb..60200348 100644 --- a/application/core/FML/autoload.php +++ b/application/core/FML/autoload.php @@ -9,7 +9,11 @@ if (!defined('FML_PATH')) { define('FML_PATH', __DIR__ . '/../'); } +if (!defined('FML_VERSION')) { + define('FML_VERSION', 1.0); +} +// Register Autoload Function that loads FML Class Files on Demand spl_autoload_register( function ($className) { $classPath = str_replace('\\', DIRECTORY_SEPARATOR, $className);