summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Translate/utils/JsSelectToInput.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/Translate/utils/JsSelectToInput.php')
-rw-r--r--www/wiki/extensions/Translate/utils/JsSelectToInput.php120
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' );
+ }
+}