diff options
Diffstat (limited to 'www/wiki/extensions/Translate/utils/JsSelectToInput.php')
-rw-r--r-- | www/wiki/extensions/Translate/utils/JsSelectToInput.php | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/utils/JsSelectToInput.php b/www/wiki/extensions/Translate/utils/JsSelectToInput.php new file mode 100644 index 00000000..24f30bc1 --- /dev/null +++ b/www/wiki/extensions/Translate/utils/JsSelectToInput.php @@ -0,0 +1,120 @@ +<?php +/** + * Code for JavaScript enhanced \<option> selectors. + * @file + * @author Niklas Laxström + * @copyright Copyright © 2010 Niklas Laxström + * @license GPL-2.0-or-later + */ + +/** + * Code for JavaScript enhanced \<option> selectors. + */ +class JsSelectToInput { + /// Id of the text field where stuff is appended + protected $targetId; + /// Id of the \<option> field + protected $sourceId; + + /** + * @var XmlSelect + */ + protected $select; + + /// Id on the button + protected $buttonId; + + /** + * @var string Text for the append button + */ + protected $msg = 'translate-jssti-add'; + + public function __construct( XmlSelect $select = null ) { + $this->select = $select; + } + + /** + * @return string + */ + public function getSourceId() { + return $this->sourceId; + } + + /** + * Set the id of the target text field + * @param string $id + */ + public function setTargetId( $id ) { + $this->targetId = $id; + } + + /** + * @return string + */ + public function getTargetId() { + return $this->targetId; + } + + /** + * Set the message key. + * @param string $message + */ + public function setMessage( $message ) { + $this->msg = $message; + } + + /** + * @return string Message key. + */ + public function getMessage() { + return $this->msg; + } + + /** + * Returns the whole input element and injects needed JavaScript + * @throws MWException + * @return string Html code. + */ + public function getHtmlAndPrepareJS() { + $this->sourceId = $this->select->getAttribute( 'id' ); + + if ( !is_string( $this->sourceId ) ) { + throw new MWException( 'ID needs to be specified for the selector' ); + } + + self::injectJs(); + $html = $this->select->getHTML(); + $html .= $this->getButton( $this->msg, $this->sourceId, $this->targetId ); + + return $html; + } + + /** + * Constructs the append button. + * @param string $msg Message key. + * @param string $source Html id. + * @param string $target Html id. + * @return string + */ + protected function getButton( $msg, $source, $target ) { + $html = Xml::element( 'input', [ + 'type' => 'button', + 'value' => wfMessage( $msg )->text(), + 'onclick' => Xml::encodeJsCall( 'appendFromSelect', [ $source, $target ] ) + ] ); + + return $html; + } + + /** + * Inject needed JavaScript in the page. + */ + public static function injectJs() { + static $done = false; + if ( $done ) { + return; + } + + RequestContext::getMain()->getOutput()->addModules( 'ext.translate.selecttoinput' ); + } +} |