FML 1.1
This commit is contained in:
		
							
								
								
									
										105
									
								
								application/core/Libs/FML/Script/Features/ActionTrigger.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								application/core/Libs/FML/Script/Features/ActionTrigger.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,105 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
| use FML\Controls\Control; | ||||
| use FML\Script\Script; | ||||
| use FML\Script\ScriptLabel; | ||||
| use FML\Script\Builder; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Script Feature for triggering a Page Action | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class ActionTrigger extends ScriptFeature { | ||||
| 	/* | ||||
| 	 * Protected Properties | ||||
| 	 */ | ||||
| 	protected $actionName = null; | ||||
| 	protected $control = null; | ||||
| 	protected $labelName = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct a new Action Trigger Feature | ||||
| 	 * | ||||
| 	 * @param string $actionName (optional) Triggered Action | ||||
| 	 * @param Control $control (optional) Action Control | ||||
| 	 * @param string $labelName (optional) Script Label Name | ||||
| 	 */ | ||||
| 	public function __construct($actionName = null, Control $control = null, $labelName = ScriptLabel::MOUSECLICK) { | ||||
| 		$this->setActionName($actionName); | ||||
| 		$this->setControl($control); | ||||
| 		$this->setLabelName($labelName); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Action to trigger | ||||
| 	 * | ||||
| 	 * @param string $actionName | ||||
| 	 * @return \FML\Script\Features\ActionTrigger | ||||
| 	 */ | ||||
| 	public function setActionName($actionName) { | ||||
| 		$this->actionName = $actionName; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Control | ||||
| 	 *  | ||||
| 	 * @param Control $control Action Control | ||||
| 	 * @return \FML\Script\Features\ActionTrigger | ||||
| 	 */ | ||||
| 	public function setControl(Control $control) { | ||||
| 		$control->checkId(); | ||||
| 		$control->setScriptEvents(true); | ||||
| 		$this->control = $control; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Label Name | ||||
| 	 * | ||||
| 	 * @param string $labelName Script Label Name | ||||
| 	 * @return \FML\Script\Features\ActionTrigger | ||||
| 	 */ | ||||
| 	public function setLabelName($labelName) { | ||||
| 		$this->labelName = $labelName; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * | ||||
| 	 * @see \FML\Script\Features\ScriptFeature::prepare() | ||||
| 	 */ | ||||
| 	public function prepare(Script $script) { | ||||
| 		$script->appendGenericScriptLabel($this->labelName, $this->getScriptText()); | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Script Text | ||||
| 	 * | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	protected function getScriptText() { | ||||
| 		$actionName = Builder::escapeText($this->actionName); | ||||
| 		if ($this->control) { | ||||
| 			// Control event | ||||
| 			$controlId = Builder::escapeText($this->control->getId()); | ||||
| 			$scriptText = " | ||||
| if (Event.Control.ControlId == \"{$controlId}\") { | ||||
| 	TriggerPageAction(\"{$actionName}\"); | ||||
| }"; | ||||
| 		} | ||||
| 		else { | ||||
| 			// Other | ||||
| 			$scriptText = " | ||||
| TriggerPageAction(\"{$actionName}\");"; | ||||
| 		} | ||||
| 		return $scriptText; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										107
									
								
								application/core/Libs/FML/Script/Features/Clock.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								application/core/Libs/FML/Script/Features/Clock.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
|  | ||||
| use FML\Script\Script; | ||||
| use FML\Script\ScriptLabel; | ||||
|  | ||||
|  | ||||
| use FML\Controls\Label; | ||||
| use FML\Script\ScriptInclude; | ||||
|  | ||||
| /** | ||||
|  * Script Feature showing the current Time on a Label | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class Clock extends ScriptFeature { | ||||
| 	/* | ||||
| 	 * Protected Properties | ||||
| 	 */ | ||||
| 	protected $label = null; | ||||
| 	protected $showSeconds = null; | ||||
| 	protected $showFullDate = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct a new Clock Feature | ||||
| 	 * | ||||
| 	 * @param Label $label (optional) Clock Label | ||||
| 	 * @param bool $showSeconds (optional) Whether the Seconds should be shown | ||||
| 	 * @param bool $showFullDate (optional) Whether the Date should be shown | ||||
| 	 */ | ||||
| 	public function __construct(Label $label = null, $showSeconds = true, $showFullDate = false) { | ||||
| 		$this->setLabel($label); | ||||
| 		$this->setShowSeconds($showSeconds); | ||||
| 		$this->setShowFullDate($showFullDate); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Label | ||||
| 	 * | ||||
| 	 * @param Label $label Clock Label | ||||
| 	 * @return \FML\Script\Features\Clock | ||||
| 	 */ | ||||
| 	public function setLabel(Label $label) { | ||||
| 		$label->checkId(); | ||||
| 		$this->label = $label; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set whether the Seconds should be shown | ||||
| 	 * | ||||
| 	 * @param bool $showSeconds Whether the Seconds should be shown | ||||
| 	 * @return \FML\Script\Features\Clock | ||||
| 	 */ | ||||
| 	public function setShowSeconds($showSeconds) { | ||||
| 		$this->showSeconds = (bool) $showSeconds; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set whether the Full Date should be shown | ||||
| 	 * | ||||
| 	 * @param bool $showFullDate Whether the Full Date should be shown | ||||
| 	 * @return \FML\Script\Features\Clock | ||||
| 	 */ | ||||
| 	public function setShowFullDate($showFullDate) { | ||||
| 		$this->showFullDate = (bool) $showFullDate; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * | ||||
| 	 * @see \FML\Script\Features\ScriptFeature::prepare() | ||||
| 	 */ | ||||
| 	public function prepare(Script $script) { | ||||
| 		$script->setScriptInclude(ScriptInclude::TEXTLIB); | ||||
| 		$script->appendGenericScriptLabel(ScriptLabel::TICK, $this->getScriptText(), true); | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Script Text | ||||
| 	 * | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	protected function getScriptText() { | ||||
| 		$controlId = $this->label->getId(true); | ||||
| 		$scriptText = " | ||||
| declare ClockLabel <=> (Page.GetFirstChild(\"{$controlId}\") as CMlLabel); | ||||
| declare TimeText = CurrentLocalDateText;"; | ||||
| 		if (!$this->showSeconds) { | ||||
| 			$scriptText .= " | ||||
| TimeText = TextLib::SubText(TimeText, 0, 16);"; | ||||
| 		} | ||||
| 		if (!$this->showFullDate) { | ||||
| 			$scriptText .= " | ||||
| TimeText = TextLib::SubText(TimeText, 11, 9);"; | ||||
| 		} | ||||
| 		$scriptText .= " | ||||
| ClockLabel.Value = TimeText;"; | ||||
| 		return $scriptText; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										107
									
								
								application/core/Libs/FML/Script/Features/EntrySubmit.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								application/core/Libs/FML/Script/Features/EntrySubmit.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
|  | ||||
| use FML\Script\Script; | ||||
| use FML\Script\ScriptLabel; | ||||
| use FML\Script\Builder; | ||||
|  | ||||
|  | ||||
| use FML\Controls\Entry; | ||||
| use FML\Script\ScriptInclude; | ||||
|  | ||||
| /** | ||||
|  * Script Feature for submitting an Entry | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class EntrySubmit extends ScriptFeature { | ||||
| 	/* | ||||
| 	 * Protected Properties | ||||
| 	 */ | ||||
| 	protected $entry = null; | ||||
| 	protected $url = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct a new Entry Submit Feature | ||||
| 	 * | ||||
| 	 * @param Entry $entry (optional) Entry Control | ||||
| 	 * @param string $url (optional) Submit Url | ||||
| 	 */ | ||||
| 	public function __construct(Entry $entry = null, $url = null) { | ||||
| 		$this->setEntry($entry); | ||||
| 		$this->setUrl($url); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Entry | ||||
| 	 * | ||||
| 	 * @param Entry $entry Entry Control | ||||
| 	 * @return \FML\Script\Features\EntrySubmit | ||||
| 	 */ | ||||
| 	public function setEntry(Entry $entry) { | ||||
| 		$entry->checkId(); | ||||
| 		$entry->setScriptEvents(true); | ||||
| 		$this->entry = $entry; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Submit Url | ||||
| 	 * | ||||
| 	 * @param string $url Submit Url | ||||
| 	 * @return \FML\Script\Features\EntrySubmit | ||||
| 	 */ | ||||
| 	public function setUrl($url) { | ||||
| 		$this->url = (string) $url; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * | ||||
| 	 * @see \FML\Script\Features\ScriptFeature::prepare() | ||||
| 	 */ | ||||
| 	public function prepare(Script $script) { | ||||
| 		$script->setScriptInclude(ScriptInclude::TEXTLIB); | ||||
| 		$script->appendGenericScriptLabel(ScriptLabel::ENTRYSUBMIT, $this->getScriptText()); | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Script Text | ||||
| 	 * | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	protected function getScriptText() { | ||||
| 		$controlId = $this->entry->getId(true); | ||||
| 		$url = $this->buildCompatibleUrl(); | ||||
| 		$entryName = Builder::escapeText($this->entry->getName()); | ||||
| 		$scriptText = " | ||||
| if (Event.Control.ControlId == \"{$controlId}\") { | ||||
| 	declare Entry <=> (Event.Control as CMlEntry); | ||||
| 	declare Value = TextLib::URLEncode(Entry.Value); | ||||
| 	OpenLink(\"{$url}{$entryName}=\"^Value, CMlScript::LinkType::Goto); | ||||
| }"; | ||||
| 		return $scriptText; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Build the Submit Url compatible for the Entry Parameter | ||||
| 	 * | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	protected function buildCompatibleUrl() { | ||||
| 		$url = $this->url; | ||||
| 		$paramsBegin = stripos($url, '?'); | ||||
| 		if (!is_int($paramsBegin) || $paramsBegin < 0) { | ||||
| 			$url .= '?'; | ||||
| 		} | ||||
| 		else { | ||||
| 			$url .= '&'; | ||||
| 		} | ||||
| 		return $url; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										90
									
								
								application/core/Libs/FML/Script/Features/MapInfo.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								application/core/Libs/FML/Script/Features/MapInfo.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,90 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
| use FML\Controls\Control; | ||||
| use FML\Script\Script; | ||||
| use FML\Script\ScriptLabel; | ||||
| use FML\Script\Builder; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Script Feature for opening the Map Info | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class MapInfo extends ScriptFeature { | ||||
| 	/* | ||||
| 	 * Protected Properties | ||||
| 	 */ | ||||
| 	protected $control = null; | ||||
| 	protected $labelName = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct a new Map Info Feature | ||||
| 	 * | ||||
| 	 * @param Control $control (optional) Map Info Control | ||||
| 	 * @param string $labelName (optional) Script Label Name | ||||
| 	 */ | ||||
| 	public function __construct(Control $control, $labelName = ScriptLabel::MOUSECLICK) { | ||||
| 		$this->setControl($control); | ||||
| 		$this->setLabelName($labelName); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Control | ||||
| 	 * | ||||
| 	 * @param Control $control Action Control | ||||
| 	 * @return \FML\Script\Features\ActionTrigger | ||||
| 	 */ | ||||
| 	public function setControl(Control $control) { | ||||
| 		$control->checkId(); | ||||
| 		$control->setScriptEvents(true); | ||||
| 		$this->control = $control; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Label Name | ||||
| 	 * | ||||
| 	 * @param string $labelName Script Label Name | ||||
| 	 * @return \FML\Script\Features\ActionTrigger | ||||
| 	 */ | ||||
| 	public function setLabelName($labelName) { | ||||
| 		$this->labelName = $labelName; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * | ||||
| 	 * @see \FML\Script\Features\ScriptFeature::prepare() | ||||
| 	 */ | ||||
| 	public function prepare(Script $script) { | ||||
| 		$script->appendGenericScriptLabel($this->labelName, $this->getScriptText()); | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Script Text | ||||
| 	 * | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	protected function getScriptText() { | ||||
| 		if ($this->control) { | ||||
| 			// Control event | ||||
| 			$controlId = Builder::escapeText($this->control->getId()); | ||||
| 			$scriptText = " | ||||
| if (Event.Control.ControlId == \"{$controlId}\") { | ||||
| 	ShowCurChallengeCard(); | ||||
| }"; | ||||
| 		} | ||||
| 		else { | ||||
| 			// Other | ||||
| 			$scriptText = " | ||||
| ShowCurChallengeCard();"; | ||||
| 		} | ||||
| 		return $scriptText; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										138
									
								
								application/core/Libs/FML/Script/Features/Menu.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								application/core/Libs/FML/Script/Features/Menu.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,138 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
| use FML\Controls\Control; | ||||
| use FML\Script\Script; | ||||
| use FML\Script\ScriptLabel; | ||||
| use FML\Script\Builder; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Script Feature realising a Menu showing specific Controls for the different Item Controls | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class Menu extends ScriptFeature { | ||||
| 	/* | ||||
| 	 * Constants | ||||
| 	 */ | ||||
| 	const FUNCTION_UPDATE_MENU = 'FML_UpdateMenu'; | ||||
| 	 | ||||
| 	/* | ||||
| 	 * Protected Properties | ||||
| 	 */ | ||||
| 	protected $elements = array(); | ||||
| 	protected $startElement = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct a new Menu Feature | ||||
| 	 * | ||||
| 	 * @param Control $item (optional) Item Control in the Menu Bar | ||||
| 	 * @param Control $control (optional) Toggled Menu Control | ||||
| 	 */ | ||||
| 	public function __construct(Control $item = null, Control $control = null) { | ||||
| 		if ($item && $control) { | ||||
| 			$this->addNewElement($item, $control); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Add a new Element to the Menu | ||||
| 	 * | ||||
| 	 * @param Control $item Item Control in the Menu Bar | ||||
| 	 * @param Control $control Toggled Menu Control | ||||
| 	 * @param bool $isStartElement (optional) Whether the Menu should start with this Element | ||||
| 	 * @return \FML\Script\Features\Menu | ||||
| 	 */ | ||||
| 	public function addElement(Control $item, Control $control, $isStartElement = false) { | ||||
| 		$menuElement = new MenuElement($item, $control); | ||||
| 		$this->appendElement($menuElement, $isStartElement); | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Append an Element to the Menu | ||||
| 	 * | ||||
| 	 * @param MenuElement $menuElement Menu Element | ||||
| 	 * @param bool $isStartElement (optional) Whether the Menu should start with this Element | ||||
| 	 * @return \FML\Script\Features\Menu | ||||
| 	 */ | ||||
| 	public function appendElement(MenuElement $menuElement, $isStartElement = false) { | ||||
| 		array_push($this->elements, $menuElement); | ||||
| 		if ($isStartElement) { | ||||
| 			$this->setStartElement($menuElement); | ||||
| 		} | ||||
| 		else if (count($this->elements) > 1) { | ||||
| 			$menuElement->getControl()->setVisible(false); | ||||
| 		} | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Element to start with | ||||
| 	 * | ||||
| 	 * @param MenuElement $startElement Starting Element | ||||
| 	 * @return \FML\Script\Features\Menu | ||||
| 	 */ | ||||
| 	public function setStartElement(MenuElement $startElement) { | ||||
| 		$this->startElement = $startElement; | ||||
| 		if (!in_array($startElement, $this->elements, true)) { | ||||
| 			array_push($this->elements, $startElement); | ||||
| 		} | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * | ||||
| 	 * @see \FML\Script\Features\ScriptFeature::prepare() | ||||
| 	 */ | ||||
| 	public function prepare(Script $script) { | ||||
| 		$updateFunctionName = self::FUNCTION_UPDATE_MENU; | ||||
| 		$elementsArrayText = $this->getElementsArrayText(); | ||||
| 		 | ||||
| 		// OnInit | ||||
| 		if ($this->startElement) { | ||||
| 			$startControlId = $this->startElement->getControl()->getId(true); | ||||
| 			$initScriptText = " | ||||
| {$updateFunctionName}({$elementsArrayText}, \"{$startControlId}\");"; | ||||
| 			$script->appendGenericScriptLabel(ScriptLabel::ONINIT, $initScriptText, true); | ||||
| 		} | ||||
| 		 | ||||
| 		// MouseClick | ||||
| 		$scriptText = " | ||||
| declare MenuElements = {$elementsArrayText}; | ||||
| if (MenuElements.existskey(Event.Control.ControlId)) { | ||||
| 	declare ShownControlId = MenuElements[Event.Control.ControlId]; | ||||
| 	{$updateFunctionName}(MenuElements, ShownControlId); | ||||
| }"; | ||||
| 		$script->appendGenericScriptLabel(ScriptLabel::MOUSECLICK, $scriptText, true); | ||||
| 		 | ||||
| 		// Update menu function | ||||
| 		$updateFunctionText = " | ||||
| Void {$updateFunctionName}(Text[Text] _Elements, Text _ShownControlId) { | ||||
| 	foreach (ItemId => ControlId in _Elements) { | ||||
| 		declare Control <=> (Page.GetFirstChild(ControlId)); | ||||
| 		Control.Visible = (ControlId == _ShownControlId); | ||||
| 	} | ||||
| }"; | ||||
| 		$script->addScriptFunction($updateFunctionName, $updateFunctionText); | ||||
| 		 | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Build the Array Text for the Elements | ||||
| 	 * | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	protected function getElementsArrayText() { | ||||
| 		$elements = array(); | ||||
| 		foreach ($this->elements as $element) { | ||||
| 			$elements[$element->getItem()->getId()] = $element->getControl()->getId(); | ||||
| 		} | ||||
| 		return Builder::getArray($elements, true); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										74
									
								
								application/core/Libs/FML/Script/Features/MenuElement.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								application/core/Libs/FML/Script/Features/MenuElement.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
| use FML\Controls\Control; | ||||
|  | ||||
| /** | ||||
|  * An Element for the Menu Feature | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class MenuElement { | ||||
| 	/* | ||||
| 	 * Protected Properties | ||||
| 	 */ | ||||
| 	protected $item = null; | ||||
| 	protected $control = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Create a new Menu Element | ||||
| 	 * | ||||
| 	 * @param Control $item (optional) Item Control in the Menu Bar | ||||
| 	 * @param Control $control (optional) Toggled Menu Control | ||||
| 	 */ | ||||
| 	public function __construct(Control $item = null, Control $control = null) { | ||||
| 		$this->setItem($item); | ||||
| 		$this->setControl($control); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Item Control | ||||
| 	 * | ||||
| 	 * @param Control $item Item Control in the Menu Bar | ||||
| 	 * @return \FML\Script\Features\MenuElement | ||||
| 	 */ | ||||
| 	public function setItem(Control $item) { | ||||
| 		$item->checkId(); | ||||
| 		$item->setScriptEvents(true); | ||||
| 		$this->item = $item; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Item Control | ||||
| 	 * | ||||
| 	 * @return \FML\Controls\Control | ||||
| 	 */ | ||||
| 	public function getItem() { | ||||
| 		return $this->item; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Menu Control | ||||
| 	 * | ||||
| 	 * @param Control $control Toggled Menu Control | ||||
| 	 * @return \FML\Script\Features\MenuElement | ||||
| 	 */ | ||||
| 	public function setControl(Control $control) { | ||||
| 		$control->checkId(); | ||||
| 		$this->control = $control; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Menu Control | ||||
| 	 * | ||||
| 	 * @return \FML\Controls\Control | ||||
| 	 */ | ||||
| 	public function getControl() { | ||||
| 		return $this->control; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										326
									
								
								application/core/Libs/FML/Script/Features/Paging.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										326
									
								
								application/core/Libs/FML/Script/Features/Paging.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,326 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
| use FML\Controls\Control; | ||||
| use FML\Script\Script; | ||||
| use FML\Script\ScriptLabel; | ||||
| use FML\Script\Builder; | ||||
|  | ||||
| use FML\Controls\Label; | ||||
| use FML\Script\ScriptInclude; | ||||
|  | ||||
| /** | ||||
|  * Script Feature realising a Mechanism for browsing through Pages | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class Paging extends ScriptFeature { | ||||
| 	/* | ||||
| 	 * Constants | ||||
| 	 */ | ||||
| 	const VAR_CURRENT_PAGE = 'FML_Paging_CurrentPage'; | ||||
| 	const FUNCTION_UPDATE_CURRENT_PAGE = 'FML_UpdateCurrentPage'; | ||||
| 	 | ||||
| 	/* | ||||
| 	 * Protected Properties | ||||
| 	 */ | ||||
| 	protected $pages = array(); | ||||
| 	protected $buttons = array(); | ||||
| 	protected $label = null; | ||||
| 	protected $customMinPageNumber = null; | ||||
| 	protected $customMaxPageNumber = null; | ||||
| 	protected $previousChunkAction = null; | ||||
| 	protected $nextChunkAction = null; | ||||
| 	protected $chunkActionAppendsPageNumber = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct a new Paging Script Feature | ||||
| 	 * | ||||
| 	 * @param Label $label (optional) Page Number Label | ||||
| 	 */ | ||||
| 	public function __construct(Label $label = null) { | ||||
| 		if ($label) { | ||||
| 			$this->setLabel($label); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Add a new Page Control | ||||
| 	 * | ||||
| 	 * @param Control $pageControl Page Control | ||||
| 	 * @param string $pageNumber (optional) Page Number | ||||
| 	 * @return \FML\Script\Features\Paging | ||||
| 	 */ | ||||
| 	public function addPage(Control $pageControl, $pageNumber = null) { | ||||
| 		if ($pageNumber === null) { | ||||
| 			$pageNumber = count($this->pages) + 1; | ||||
| 		} | ||||
| 		$page = new PagingPage($pageControl, $pageNumber); | ||||
| 		$this->appendPage($page); | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Append a Page | ||||
| 	 * | ||||
| 	 * @param PagingPage $page Paging Page | ||||
| 	 * @return \FML\Script\Features\Paging | ||||
| 	 */ | ||||
| 	public function appendPage(PagingPage $page) { | ||||
| 		array_push($this->pages, $page); | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Add a new Button to browse through the Pages | ||||
| 	 * | ||||
| 	 * @param Control $buttonControl Button used for Browsing | ||||
| 	 * @param int $browseAction (optional) Number of browsed Pages per Click | ||||
| 	 * @return \FML\Script\Features\Paging | ||||
| 	 */ | ||||
| 	public function addButton(Control $buttonControl, $browseAction = null) { | ||||
| 		if ($browseAction === null) { | ||||
| 			$buttonCount = count($this->buttons); | ||||
| 			if ($buttonCount % 2 === 0) { | ||||
| 				$browseAction = $buttonCount / 2 + 1; | ||||
| 			} | ||||
| 			else { | ||||
| 				$browseAction = $buttonCount / -2 - 1; | ||||
| 			} | ||||
| 		} | ||||
| 		$button = new PagingButton($buttonControl, $browseAction); | ||||
| 		$this->appendButton($button); | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Append a Button to browse through Pages | ||||
| 	 * | ||||
| 	 * @param PagingButton $button Paging Button | ||||
| 	 * @return \FML\Script\Features\Paging | ||||
| 	 */ | ||||
| 	public function appendButton(PagingButton $button) { | ||||
| 		array_push($this->buttons, $button); | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Label showing the Page Number | ||||
| 	 * | ||||
| 	 * @param Label $label Page Number Label | ||||
| 	 * @return \FML\Script\Features\Paging | ||||
| 	 */ | ||||
| 	public function setLabel(Label $label) { | ||||
| 		$label->checkId(); | ||||
| 		$this->label = $label; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set a custom Minimum Page Number for using Chunks | ||||
| 	 * | ||||
| 	 * @param int $minPageNumber Custom Minimum Page Number | ||||
| 	 * @return \FML\Script\Features\Paging | ||||
| 	 */ | ||||
| 	public function setCustomMinPageNumber($minPageNumber) { | ||||
| 		$this->customMinPageNumber = (int) $minPageNumber; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set a custom Maximum Page Number for using Chunks | ||||
| 	 * | ||||
| 	 * @param int $maxPageNumber Custom Maximum Page Number | ||||
| 	 * @return \FML\Script\Features\Paging | ||||
| 	 */ | ||||
| 	public function setCustomMaxPageNumber($maxPageNumber) { | ||||
| 		$this->customMaxPageNumber = (int) $maxPageNumber; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Action triggered when the previous Chunk is needed | ||||
| 	 * | ||||
| 	 * @param string $previousChunkAction Triggered Action | ||||
| 	 * @return \FML\Script\Features\Paging | ||||
| 	 */ | ||||
| 	public function setPreviousChunkAction($previousChunkAction) { | ||||
| 		$this->previousChunkAction = (string) $previousChunkAction; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Action triggered when the next Chunk is needed | ||||
| 	 * | ||||
| 	 * @param string $nextChunkAction Triggered Action | ||||
| 	 * @return \FML\Script\Features\Paging | ||||
| 	 */ | ||||
| 	public function setNextChunkAction($nextChunkAction) { | ||||
| 		$this->nextChunkAction = (string) $nextChunkAction; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set if the Chunk Action should get the needed Page Number appended | ||||
| 	 * | ||||
| 	 * @param bool $appendPageNumber Whether to append the needed Page Number | ||||
| 	 * @return \FML\Script\Features\Paging | ||||
| 	 * | ||||
| 	 */ | ||||
| 	public function setChunkActionAppendsPageNumber($appendPageNumber) { | ||||
| 		$this->chunkActionAppendsPageNumber = (bool) $appendPageNumber; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * | ||||
| 	 * @see \FML\Script\Features\ScriptFeature::prepare() | ||||
| 	 */ | ||||
| 	public function prepare(Script $script) { | ||||
| 		$script->setScriptInclude(ScriptInclude::TEXTLIB); | ||||
| 		 | ||||
| 		$currentPageVariable = self::VAR_CURRENT_PAGE; | ||||
| 		$updatePageFunction = self::FUNCTION_UPDATE_CURRENT_PAGE; | ||||
| 		 | ||||
| 		$minPage = $this->getMinPage(); | ||||
| 		$startPageNumber = $minPage->getPageNumber(); | ||||
| 		$minPageNumber = $startPageNumber; | ||||
| 		if (is_int($this->customMinPageNumber)) { | ||||
| 			$minPageNumber = $this->customMinPageNumber; | ||||
| 		} | ||||
| 		$maxPage = $this->getMaxPage(); | ||||
| 		$maxPageNumber = $maxPage->getPageNumber(); | ||||
| 		if (is_int($this->customMaxPageNumber)) { | ||||
| 			$maxPageNumber = $this->customMaxPageNumber; | ||||
| 		} | ||||
| 		 | ||||
| 		$pagingId = $minPage->getControl()->getId(true); | ||||
| 		$pageLabelId = $this->label->getId(true); | ||||
| 		$pagesArrayText = $this->getPagesArrayText(); | ||||
| 		$pageButtonsArrayText = $this->getPageButtonsArrayText(); | ||||
| 		 | ||||
| 		$previousChunkAction = Builder::escapeText($this->previousChunkAction); | ||||
| 		$nextChunkAction = Builder::escapeText($this->nextChunkAction); | ||||
| 		$chunkActionAppendsPageNumber = Builder::getBoolean($this->chunkActionAppendsPageNumber); | ||||
| 		 | ||||
| 		// Init | ||||
| 		$initScriptText = " | ||||
| declare {$currentPageVariable} for This = Integer[Text]; | ||||
| {$currentPageVariable}[\"{$pagingId}\"] = {$startPageNumber}; | ||||
| {$updatePageFunction}(\"{$pagingId}\", \"{$pageLabelId}\", 0, {$minPageNumber}, {$maxPageNumber}, {$pagesArrayText}, \"{$previousChunkAction}\", \"{$nextChunkAction}\", {$chunkActionAppendsPageNumber});"; | ||||
| 		$script->appendGenericScriptLabel(ScriptLabel::ONINIT, $initScriptText, true); | ||||
| 		 | ||||
| 		// MouseClick | ||||
| 		$clickScriptText = " | ||||
| declare PageButtons = {$pageButtonsArrayText}; | ||||
| if (PageButtons.existskey(Event.Control.ControlId)) { | ||||
| 	declare BrowseAction = PageButtons[Event.Control.ControlId]; | ||||
| 	{$updatePageFunction}(\"{$pagingId}\", \"{$pageLabelId}\", BrowseAction, {$minPageNumber}, {$maxPageNumber}, {$pagesArrayText}, \"{$previousChunkAction}\", \"{$nextChunkAction}\", {$chunkActionAppendsPageNumber}); | ||||
| }"; | ||||
| 		$script->appendGenericScriptLabel(ScriptLabel::MOUSECLICK, $clickScriptText, true); | ||||
| 		 | ||||
| 		// Update function | ||||
| 		$functionText = " | ||||
| Void {$updatePageFunction}(Text _PagingId, Text _PageLabelId, Integer _BrowseAction, Integer _MinPageNumber, Integer _MaxPageNumber, Text[Integer] _Pages, Text _PreviousChunkAction, Text _NextChunkAction, Boolean _ChunkActionAppendPageNumber) { | ||||
| 	declare {$currentPageVariable} for This = Integer[Text]; | ||||
| 	if (!{$currentPageVariable}.existskey(_PagingId)) return; | ||||
| 	declare CurrentPage = {$currentPageVariable}[_PagingId] + _BrowseAction; | ||||
| 	if (CurrentPage < _MinPageNumber) { | ||||
| 		CurrentPage = _MinPageNumber; | ||||
| 	} else if (CurrentPage > _MaxPageNumber) { | ||||
| 		CurrentPage = _MaxPageNumber; | ||||
| 	} | ||||
| 	{$currentPageVariable}[_PagingId] = CurrentPage; | ||||
| 	declare PageFound = False; | ||||
| 	foreach (PageNumber => PageId in _Pages) { | ||||
| 		declare PageControl <=> Page.GetFirstChild(PageId); | ||||
| 		PageControl.Visible = (CurrentPage == PageNumber); | ||||
| 		if (PageControl.Visible) { | ||||
| 			PageFound = True; | ||||
| 		} | ||||
| 	} | ||||
| 	if (!PageFound && _BrowseAction != 0) { | ||||
| 		declare Text ChunkAction; | ||||
| 		if (_BrowseAction < 0) { | ||||
| 			ChunkAction = _PreviousChunkAction; | ||||
| 		} else { | ||||
| 			ChunkAction = _NextChunkAction; | ||||
| 		} | ||||
| 		if (_ChunkActionAppendPageNumber) { | ||||
| 			ChunkAction ^= CurrentPage; | ||||
| 		} | ||||
| 		TriggerPageAction(ChunkAction); | ||||
| 	} | ||||
| 	declare PageLabel <=> (Page.GetFirstChild(_PageLabelId) as CMlLabel); | ||||
| 	if (PageLabel == Null) return; | ||||
| 	PageLabel.Value = CurrentPage^\"/\"^_MaxPageNumber; | ||||
| }"; | ||||
| 		$script->addScriptFunction($updatePageFunction, $functionText); | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the minimum Page | ||||
| 	 * | ||||
| 	 * @return \FML\Script\Features\PagingPage | ||||
| 	 */ | ||||
| 	protected function getMinPage() { | ||||
| 		$minPageNumber = null; | ||||
| 		$minPage = null; | ||||
| 		foreach ($this->pages as $page) { | ||||
| 			$pageNumber = $page->getPageNumber(); | ||||
| 			if ($minPageNumber === null || $pageNumber < $minPageNumber) { | ||||
| 				$minPageNumber = $pageNumber; | ||||
| 				$minPage = $page; | ||||
| 			} | ||||
| 		} | ||||
| 		return $minPage; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the maximum Page | ||||
| 	 * | ||||
| 	 * @return \FML\Script\Features\PagingPage | ||||
| 	 */ | ||||
| 	protected function getMaxPage() { | ||||
| 		$maxPageNumber = null; | ||||
| 		$maxPage = null; | ||||
| 		foreach ($this->pages as $page) { | ||||
| 			$pageNumber = $page->getPageNumber(); | ||||
| 			if ($maxPageNumber === null || $pageNumber > $maxPageNumber) { | ||||
| 				$maxPageNumber = $pageNumber; | ||||
| 				$maxPage = $page; | ||||
| 			} | ||||
| 		} | ||||
| 		return $maxPage; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Build the Array Text for the Pages | ||||
| 	 * | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	protected function getPagesArrayText() { | ||||
| 		$pages = array(); | ||||
| 		foreach ($this->pages as $page) { | ||||
| 			$pages[$page->getPageNumber()] = $page->getControl()->getId(); | ||||
| 		} | ||||
| 		return Builder::getArray($pages, true); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Build the Array Text for the Page Buttons | ||||
| 	 * | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	protected function getPageButtonsArrayText() { | ||||
| 		$pageButtons = array(); | ||||
| 		foreach ($this->buttons as $pageButton) { | ||||
| 			$pageButtons[$pageButton->getControl()->getId()] = $pageButton->getBrowseAction(); | ||||
| 		} | ||||
| 		return Builder::getArray($pageButtons, true); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										73
									
								
								application/core/Libs/FML/Script/Features/PagingButton.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								application/core/Libs/FML/Script/Features/PagingButton.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
| use FML\Controls\Control; | ||||
|  | ||||
| /** | ||||
|  * A Button for browsing through Pages | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class PagingButton { | ||||
| 	/* | ||||
| 	 * Protected Properties | ||||
| 	 */ | ||||
| 	protected $control = null; | ||||
| 	protected $browseAction = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct a new Paging Button | ||||
| 	 * | ||||
| 	 * @param Control $control (optional) Browse Control | ||||
| 	 * @param int $browseAction (optional) Number of browsed Pages per Click | ||||
| 	 */ | ||||
| 	public function __construct(Control $control = null, $browseAction = null) { | ||||
| 		$this->setControl($control); | ||||
| 		$this->setBrowseAction($browseAction); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Button Control | ||||
| 	 * | ||||
| 	 * @param Control $control Browse Control | ||||
| 	 * @return \FML\Script\Features\PagingButton | ||||
| 	 */ | ||||
| 	public function setControl(Control $control) { | ||||
| 		$control->checkId(); | ||||
| 		$control->setScriptEvents(true); | ||||
| 		$this->control = $control; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Button Control | ||||
| 	 * | ||||
| 	 * @return \FML\Controls\Control | ||||
| 	 */ | ||||
| 	public function getControl() { | ||||
| 		return $this->control; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Browse Action | ||||
| 	 * | ||||
| 	 * @param int $browseAction Number of browsed Pages per Click | ||||
| 	 * @return \FML\Script\Features\PagingButton | ||||
| 	 */ | ||||
| 	public function setBrowseAction($browseAction) { | ||||
| 		$this->browseAction = (int) $browseAction; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Browse Action | ||||
| 	 * | ||||
| 	 * @return int | ||||
| 	 */ | ||||
| 	public function getBrowseAction() { | ||||
| 		return $this->browseAction; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										72
									
								
								application/core/Libs/FML/Script/Features/PagingPage.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								application/core/Libs/FML/Script/Features/PagingPage.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
| use FML\Controls\Control; | ||||
|  | ||||
| /** | ||||
|  * A Page Control | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class PagingPage { | ||||
| 	/* | ||||
| 	 * Protected Properties | ||||
| 	 */ | ||||
| 	protected $control = null; | ||||
| 	protected $number = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct a new Paging Page | ||||
| 	 * | ||||
| 	 * @param Control $control (optional) Page Control | ||||
| 	 * @param int $pageNumber (optional) Number of the Page | ||||
| 	 */ | ||||
| 	public function __construct(Control $control = null, $pageNumber = 1) { | ||||
| 		$this->setControl($control); | ||||
| 		$this->setPageNumber($pageNumber); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Page Control | ||||
| 	 * | ||||
| 	 * @param Control $control Page Control | ||||
| 	 * @return \FML\Script\Features\PagingPage | ||||
| 	 */ | ||||
| 	public function setControl(Control $control) { | ||||
| 		$control->checkId(); | ||||
| 		$this->control = $control; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Page Control | ||||
| 	 * | ||||
| 	 * @return \FML\Controls\Control | ||||
| 	 */ | ||||
| 	public function getControl() { | ||||
| 		return $this->control; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Page Number | ||||
| 	 * | ||||
| 	 * @param int $pageNumber Number of the Page | ||||
| 	 * @return \FML\Script\Features\PagingPage | ||||
| 	 */ | ||||
| 	public function setPageNumber($pageNumber) { | ||||
| 		$this->number = (int) $pageNumber; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Page Number | ||||
| 	 * | ||||
| 	 * @return int | ||||
| 	 */ | ||||
| 	public function getPageNumber() { | ||||
| 		return $this->number; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										104
									
								
								application/core/Libs/FML/Script/Features/PlayerProfile.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								application/core/Libs/FML/Script/Features/PlayerProfile.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,104 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
| use FML\Controls\Control; | ||||
| use FML\Script\Script; | ||||
| use FML\Script\ScriptLabel; | ||||
| use FML\Script\Builder; | ||||
|  | ||||
| /** | ||||
|  * Script Feature for opening a Player Profile | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class PlayerProfile extends ScriptFeature { | ||||
| 	/* | ||||
| 	 * Protected Properties | ||||
| 	 */ | ||||
| 	protected $login = null; | ||||
| 	protected $control = null; | ||||
| 	protected $labelName = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct a new Player Profile Feature | ||||
| 	 * | ||||
| 	 * @param string $login (optional) Player Login | ||||
| 	 * @param Control $control (optional) Action Control | ||||
| 	 * @param string $labelName (optional) Script Label Name | ||||
| 	 */ | ||||
| 	public function __construct($login = null, Control $control = null, $labelName = ScriptLabel::MOUSECLICK) { | ||||
| 		$this->setLogin($login); | ||||
| 		$this->setControl($control); | ||||
| 		$this->setLabelName($labelName); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Login of the Player | ||||
| 	 * | ||||
| 	 * @param string $login Player Login | ||||
| 	 * @return \FML\Script\Features\PlayerProfile | ||||
| 	 */ | ||||
| 	public function setLogin($login) { | ||||
| 		$this->login = $login; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Control | ||||
| 	 * | ||||
| 	 * @param Control $control Profile Control | ||||
| 	 * @return \FML\Script\Features\PlayerProfile | ||||
| 	 */ | ||||
| 	public function setControl(Control $control) { | ||||
| 		$control->checkId(); | ||||
| 		$control->setScriptEvents(true); | ||||
| 		$this->control = $control; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Label Name | ||||
| 	 * | ||||
| 	 * @param string $labelName Script Label Name | ||||
| 	 * @return \FML\Script\Features\PlayerProfile | ||||
| 	 */ | ||||
| 	public function setLabelName($labelName) { | ||||
| 		$this->labelName = $labelName; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * | ||||
| 	 * @see \FML\Script\Features\ScriptFeature::prepare() | ||||
| 	 */ | ||||
| 	public function prepare(Script $script) { | ||||
| 		$script->appendGenericScriptLabel($this->labelName, $this->getScriptText()); | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Script Text | ||||
| 	 * | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	protected function getScriptText() { | ||||
| 		$login = Builder::escapeText($this->login); | ||||
| 		if ($this->control) { | ||||
| 			// Control event | ||||
| 			$controlId = Builder::escapeText($this->control->getId()); | ||||
| 			$scriptText = " | ||||
| if (Event.Control.ControlId == \"{$controlId}\") { | ||||
| 	ShowProfile(\"{$login}\"); | ||||
| }"; | ||||
| 		} | ||||
| 		else { | ||||
| 			// Other | ||||
| 			$scriptText = " | ||||
| ShowProfile(\"{$login}\");"; | ||||
| 		} | ||||
| 		return $scriptText; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										23
									
								
								application/core/Libs/FML/Script/Features/ScriptFeature.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								application/core/Libs/FML/Script/Features/ScriptFeature.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
| use FML\Script\Script; | ||||
|  | ||||
| /** | ||||
|  * ManiaLink Script Feature Class | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| abstract class ScriptFeature { | ||||
|  | ||||
| 	/** | ||||
| 	 * Prepare the given Script for Rendering by adding the needed Labels, etc. | ||||
| 	 * | ||||
| 	 * @param Script $script Script to prepare | ||||
| 	 * @return \FML\Script\Features\ScriptFeature | ||||
| 	 */ | ||||
| 	public abstract function prepare(Script $script); | ||||
| } | ||||
							
								
								
									
										133
									
								
								application/core/Libs/FML/Script/Features/Toggle.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								application/core/Libs/FML/Script/Features/Toggle.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,133 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
| use FML\Controls\Control; | ||||
| use FML\Script\Script; | ||||
| use FML\Script\ScriptLabel; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Script Feature for toggling Controls | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class Toggle extends ScriptFeature { | ||||
| 	/* | ||||
| 	 * Protected Properties | ||||
| 	 */ | ||||
| 	protected $togglingControl = null; | ||||
| 	protected $toggledControl = null; | ||||
| 	protected $labelName = null; | ||||
| 	protected $onlyShow = null; | ||||
| 	protected $onlyHide = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct a new Toggle Feature | ||||
| 	 * | ||||
| 	 * @param Control $togglingControl (optional) Toggling Control | ||||
| 	 * @param Control $toggledControl (optional) Toggled Control | ||||
| 	 * @param string $labelName (optional) Script Label Name | ||||
| 	 * @param bool $onlyShow (optional) Whether it should only Show the Control but not toggle | ||||
| 	 * @param bool $onlyHide (optional) Whether it should only Hide the Control but not toggle | ||||
| 	 */ | ||||
| 	public function __construct(Control $togglingControl = null, Control $toggledControl = null, $labelName = ScriptLabel::MOUSECLICK, $onlyShow = false, $onlyHide = false) { | ||||
| 		$this->setTogglingControl($togglingControl); | ||||
| 		$this->setToggledControl($toggledControl); | ||||
| 		$this->setLabelName($labelName); | ||||
| 		$this->setOnlyShow($onlyShow); | ||||
| 		$this->setOnlyHide($onlyHide); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Toggling Control | ||||
| 	 * | ||||
| 	 * @param Control $control Toggling Control | ||||
| 	 * @return \FML\Script\Features\Toggle | ||||
| 	 */ | ||||
| 	public function setTogglingControl(Control $control) { | ||||
| 		$control->checkId(); | ||||
| 		$control->setScriptEvents(true); | ||||
| 		$this->togglingControl = $control; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Toggled Control | ||||
| 	 * | ||||
| 	 * @param Control $control Toggling Control | ||||
| 	 * @return \FML\Script\Features\Toggle | ||||
| 	 */ | ||||
| 	public function setToggledControl(Control $control) { | ||||
| 		$control->checkId(); | ||||
| 		$this->toggledControl = $control; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Label Name | ||||
| 	 * | ||||
| 	 * @param string $labelName Script Label Name | ||||
| 	 * @return \FML\Script\Features\Toggle | ||||
| 	 */ | ||||
| 	public function setLabelName($labelName) { | ||||
| 		$this->labelName = (string) $labelName; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set only Show | ||||
| 	 * | ||||
| 	 * @param bool $onlyShow Whether it should only Show the Control but not toggle | ||||
| 	 * @return \FML\Script\Features\Toggle | ||||
| 	 */ | ||||
| 	public function setOnlyShow($onlyShow) { | ||||
| 		$this->onlyShow = (bool) $onlyShow; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set only Hide | ||||
| 	 * | ||||
| 	 * @param bool $onlyHide Whether it should only Hide the Control but not toggle | ||||
| 	 * @return \FML\Script\Features\Toggle | ||||
| 	 */ | ||||
| 	public function setOnlyHide($onlyHide) { | ||||
| 		$this->onlyHide = (bool) $onlyHide; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * | ||||
| 	 * @see \FML\Script\Features\ScriptFeature::prepare() | ||||
| 	 */ | ||||
| 	public function prepare(Script $script) { | ||||
| 		$script->appendGenericScriptLabel($this->labelName, $this->getScriptText()); | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Script Text | ||||
| 	 * | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	protected function getScriptText() { | ||||
| 		$togglingControlId = $this->togglingControl->getId(true); | ||||
| 		$toggledControlId = $this->toggledControl->getId(true); | ||||
| 		$visibility = '!ToggleControl.Visible'; | ||||
| 		if ($this->onlyShow) { | ||||
| 			$visibility = 'True'; | ||||
| 		} | ||||
| 		else if ($this->onlyHide) { | ||||
| 			$visibility = 'False'; | ||||
| 		} | ||||
| 		$scriptText = " | ||||
| if (Event.Control.ControlId == \"{$togglingControlId}\") { | ||||
| 	declare ToggleControl = Page.GetFirstChild(\"{$toggledControlId}\"); | ||||
| 	ToggleControl.Visible = {$visibility}; | ||||
| }"; | ||||
| 		return $scriptText; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										156
									
								
								application/core/Libs/FML/Script/Features/Tooltip.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								application/core/Libs/FML/Script/Features/Tooltip.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,156 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
| use FML\Controls\Control; | ||||
| use FML\Script\Script; | ||||
| use FML\Script\ScriptLabel; | ||||
| use FML\Script\Builder; | ||||
|  | ||||
|  | ||||
| use FML\Controls\Label; | ||||
|  | ||||
| /** | ||||
|  * Script Feature for Showing Tooltips | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class Tooltip extends ScriptFeature { | ||||
| 	/* | ||||
| 	 * Protected Properties | ||||
| 	 */ | ||||
| 	protected $hoverControl = null; | ||||
| 	protected $tooltipControl = null; | ||||
| 	protected $stayOnClick = null; | ||||
| 	protected $invert = null; | ||||
| 	protected $text = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct a new Tooltip Feature | ||||
| 	 * | ||||
| 	 * @param Control $hoverControl (optional) Hover Control | ||||
| 	 * @param Control $tooltipControl (optional) Tooltip Control | ||||
| 	 * @param bool $stayOnClick (optional) Whether the Tooltip should stay on Click | ||||
| 	 * @param bool $invert (optional) Whether the Visibility Toggling should be inverted | ||||
| 	 * @param string $text (optional) The Text to display if the TooltipControl is a Label | ||||
| 	 */ | ||||
| 	public function __construct(Control $hoverControl = null, Control $tooltipControl = null, $stayOnClick = false, $invert = false, $text = null) { | ||||
| 		$this->setHoverControl($hoverControl); | ||||
| 		$this->setTooltipControl($tooltipControl); | ||||
| 		$this->setStayOnClick($stayOnClick); | ||||
| 		$this->setInvert($invert); | ||||
| 		$this->setText($text); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Hover Control | ||||
| 	 * | ||||
| 	 * @param Control $hoverControl Hover Control | ||||
| 	 * @return \FML\Script\Features\Tooltip | ||||
| 	 */ | ||||
| 	public function setHoverControl(Control $hoverControl) { | ||||
| 		$hoverControl->checkId(); | ||||
| 		$hoverControl->setScriptEvents(true); | ||||
| 		$this->hoverControl = $hoverControl; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Tooltip Control | ||||
| 	 * | ||||
| 	 * @param Control $tooltipControl Tooltip Control | ||||
| 	 * @return \FML\Script\Features\Tooltip | ||||
| 	 */ | ||||
| 	public function setTooltipControl(Control $tooltipControl) { | ||||
| 		$tooltipControl->checkId(); | ||||
| 		$tooltipControl->setVisible(false); | ||||
| 		$this->tooltipControl = $tooltipControl; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set only Show | ||||
| 	 * | ||||
| 	 * @param bool $stayOnClick (optional) Whether the Tooltip should stay on Click | ||||
| 	 * @return \FML\Script\Features\Tooltip | ||||
| 	 */ | ||||
| 	public function setStayOnClick($stayOnClick) { | ||||
| 		$this->stayOnClick = (bool) $stayOnClick; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set only Hide | ||||
| 	 * | ||||
| 	 * @param bool $invert (optional) Whether the Visibility Toggling should be inverted | ||||
| 	 * @return \FML\Script\Features\Tooltip | ||||
| 	 */ | ||||
| 	public function setInvert($invert) { | ||||
| 		$this->invert = (bool) $invert; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set Text | ||||
| 	 * | ||||
| 	 * @param string $text (optional) The Text to display if the TooltipControl is a Label | ||||
| 	 * @return \FML\Script\Features\Tooltip | ||||
| 	 */ | ||||
| 	public function setText($text) { | ||||
| 		$this->text = $text; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * | ||||
| 	 * @see \FML\Script\Features\ScriptFeature::prepare() | ||||
| 	 */ | ||||
| 	public function prepare(Script $script) { | ||||
| 		$hoverControlId = $this->hoverControl->getId(true); | ||||
| 		$tooltipControlId = $this->tooltipControl->getId(true); | ||||
| 		 | ||||
| 		// MouseOver | ||||
| 		$visibility = ($this->invert ? 'False' : 'True'); | ||||
| 		$scriptText = " | ||||
| if (Event.Control.ControlId == \"{$hoverControlId}\") { | ||||
| 	declare TooltipControl = Page.GetFirstChild(\"{$tooltipControlId}\"); | ||||
| 	TooltipControl.Visible = {$visibility};"; | ||||
| 		if (is_string($this->text) && ($this->tooltipControl instanceof Label)) { | ||||
| 			$tooltipText = Builder::escapeText($this->text); | ||||
| 			$scriptText .= " | ||||
| 	declare TooltipLabel = (TooltipControl as CMlLabel); | ||||
| 	TooltipLabel.Value = \"{$tooltipText}\";"; | ||||
| 		} | ||||
| 		$scriptText .= " | ||||
| }"; | ||||
| 		$script->appendGenericScriptLabel(ScriptLabel::MOUSEOVER, $scriptText); | ||||
| 		 | ||||
| 		// MouseOut | ||||
| 		$visibility = ($this->invert ? 'True' : 'False'); | ||||
| 		$scriptText = " | ||||
| if (Event.Control.ControlId == \"{$hoverControlId}\") { | ||||
| 	declare TooltipControl = Page.GetFirstChild(\"{$tooltipControlId}\");"; | ||||
| 		if ($this->stayOnClick) { | ||||
| 			$scriptText .= " | ||||
| 	declare FML_Clicked for Event.Control = False; | ||||
| 	if (!FML_Clicked) "; | ||||
| 		} | ||||
| 		$scriptText .= " | ||||
| 	TooltipControl.Visible = {$visibility}; | ||||
| }"; | ||||
| 		$script->appendGenericScriptLabel(ScriptLabel::MOUSEOUT, $scriptText); | ||||
| 		 | ||||
| 		// MouseClick | ||||
| 		if ($this->stayOnClick) { | ||||
| 			$scriptText = " | ||||
| if (Event.Control.ControlId == \"{$hoverControlId}\") { | ||||
| 	declare FML_Clicked for Event.Control = False; | ||||
| 	FML_Clicked = !FML_Clicked; | ||||
| }"; | ||||
| 			$script->appendGenericScriptLabel(ScriptLabel::MOUSECLICK, $scriptText); | ||||
| 		} | ||||
| 		return $this; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										162
									
								
								application/core/Libs/FML/Script/Features/UISound.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								application/core/Libs/FML/Script/Features/UISound.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,162 @@ | ||||
| <?php | ||||
|  | ||||
| namespace FML\Script\Features; | ||||
|  | ||||
| use FML\Controls\Control; | ||||
| use FML\Script\Script; | ||||
| use FML\Script\ScriptLabel; | ||||
| use FML\Script\Builder; | ||||
|  | ||||
| /** | ||||
|  * Script Feature for playing an UI Sound | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder | ||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class UISound extends ScriptFeature { | ||||
| 	/* | ||||
| 	 * Constants | ||||
| 	 */ | ||||
| 	const Bonus = 'Bonus'; | ||||
| 	const Capture = 'Capture'; | ||||
| 	const Checkpoint = 'Checkpoint'; | ||||
| 	const Combo = 'Combo'; | ||||
| 	const Custom1 = 'Custom1'; | ||||
| 	const Custom2 = 'Custom2'; | ||||
| 	const Custom3 = 'Custom3'; | ||||
| 	const Custom4 = 'Custom4'; | ||||
| 	const Default_ = 'Default'; | ||||
| 	const EndMatch = 'EndMatch'; | ||||
| 	const EndRound = 'EndRound'; | ||||
| 	const Finish = 'Finish'; | ||||
| 	const FirstHit = 'FirstHit'; | ||||
| 	const Notice = 'Notice'; | ||||
| 	const PhaseChange = 'PhaseChange'; | ||||
| 	const PlayerEliminated = 'PlayerEliminated'; | ||||
| 	const PlayerHit = 'PlayerHit'; | ||||
| 	const PlayersRemaining = 'PlayersRemaining'; | ||||
| 	const RankChange = 'RankChange'; | ||||
| 	const Record = 'Record'; | ||||
| 	const ScoreProgress = 'ScoreProgress'; | ||||
| 	const Silence = 'Silence'; | ||||
| 	const StartMatch = 'StartMatch'; | ||||
| 	const StartRound = 'StartRound'; | ||||
| 	const TieBreakPoint = 'TieBreakPoint'; | ||||
| 	const TiePoint = 'TiePoint'; | ||||
| 	const TimeOut = 'TimeOut'; | ||||
| 	const VictoryPoint = 'VictoryPoint'; | ||||
| 	const Warning = 'Warning'; | ||||
| 	 | ||||
| 	/* | ||||
| 	 * Protected Properties | ||||
| 	 */ | ||||
| 	protected $soundName = null; | ||||
| 	protected $control = null; | ||||
| 	protected $variant = 0; | ||||
| 	protected $volume = 1.; | ||||
| 	protected $labelName = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct a new UISound Feature | ||||
| 	 * | ||||
| 	 * @param string $soundName (optional) Played Sound | ||||
| 	 * @param Control $control (optional) Action Control | ||||
| 	 * @param int $variant (optional) Sound Variant | ||||
| 	 * @param string $labelName (optional) Script Label Name | ||||
| 	 */ | ||||
| 	public function __construct($soundName = null, Control $control = null, $variant = 0, $labelName = ScriptLabel::MOUSECLICK) { | ||||
| 		$this->setSoundName($soundName); | ||||
| 		$this->setControl($control); | ||||
| 		$this->setVariant($variant); | ||||
| 		$this->setLabelName($labelName); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Sound to play | ||||
| 	 * | ||||
| 	 * @param string $soundName Sound Name | ||||
| 	 * @return \FML\Script\Features\UISound | ||||
| 	 */ | ||||
| 	public function setSoundName($soundName) { | ||||
| 		$this->soundName = (string) $soundName; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Control | ||||
| 	 * | ||||
| 	 * @param Control $control Action Control | ||||
| 	 * @return \FML\Script\Features\UISound | ||||
| 	 */ | ||||
| 	public function setControl(Control $control) { | ||||
| 		$control->checkId(); | ||||
| 		$control->setScriptEvents(true); | ||||
| 		$this->control = $control; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Sound Variant | ||||
| 	 * | ||||
| 	 * @param int $variant Sound Variant | ||||
| 	 * @return \FML\Script\Features\UISound | ||||
| 	 */ | ||||
| 	public function setVariant($variant) { | ||||
| 		$this->variant = (int) $variant; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Volume | ||||
| 	 * | ||||
| 	 * @param float $volume Sound Volume | ||||
| 	 * @return \FML\Script\Features\UISound | ||||
| 	 */ | ||||
| 	public function setVolume($volume) { | ||||
| 		$this->volume = (float) $volume; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the Label Name | ||||
| 	 * | ||||
| 	 * @param string $labelName Script Label Name | ||||
| 	 * @return \FML\Script\Features\UISound | ||||
| 	 */ | ||||
| 	public function setLabelName($labelName) { | ||||
| 		$this->labelName = (string) $labelName; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * | ||||
| 	 * @see \FML\Script\Features\ScriptFeature::prepare() | ||||
| 	 */ | ||||
| 	public function prepare(Script $script) { | ||||
| 		$script->appendGenericScriptLabel($this->labelName, $this->getScriptText()); | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Script Text | ||||
| 	 * | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	protected function getScriptText() { | ||||
| 		if ($this->control) { | ||||
| 			// Control event | ||||
| 			$controlId = Builder::escapeText($this->control->getId()); | ||||
| 			$scriptText = " | ||||
| if (Event.Control.ControlId == \"{$controlId}\") { | ||||
| 	PlayUiSound(CMlScriptIngame::EUISound::{$this->soundName}, {$this->variant}, {$this->volume}); | ||||
| }"; | ||||
| 		} | ||||
| 		else { | ||||
| 			// Other | ||||
| 			$scriptText = " | ||||
| PlayUiSound(CMlScriptIngame::EUISound::{$this->soundName}, {$this->variant}, {$this->volume});"; | ||||
| 		} | ||||
| 		return $scriptText; | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user