Esanders has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/248315

Change subject: TextInputWidget: Improve selection API
......................................................................

TextInputWidget: Improve selection API

Provide a generic #selectRange methdo and run all existing
selection calls through this (#select and #moveCursorToEnd).

Provide #moveCursorToStart for symmetry.

Change-Id: I4109d5ad6089035cf689e11667e6ec2bb007d6ce
---
M src/widgets/TextInputWidget.js
1 file changed, 58 insertions(+), 14 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/oojs/ui refs/changes/15/248315/1

diff --git a/src/widgets/TextInputWidget.js b/src/widgets/TextInputWidget.js
index e09c78c..2a06162 100644
--- a/src/widgets/TextInputWidget.js
+++ b/src/widgets/TextInputWidget.js
@@ -474,30 +474,74 @@
 };
 
 /**
- * Select the entire text of the input.
+ * Focus the input and select a specified range within the text.
  *
+ * @param {number} from Select from offset
+ * @param {number} [to] Select to offset, defaults to from
  * @chainable
  */
-OO.ui.TextInputWidget.prototype.select = function () {
-       this.$input.select();
+OO.ui.TextInputWidget.prototype.selectRange = function ( from, to ) {
+       var textRange, isBackwards, start, end,
+               element = this.$input[ 0 ];
+
+       to = to || from;
+
+       isBackwards = to < from;
+       start = isBackwards ? to : from;
+       end = isBackwards ? from : to;
+
+       this.focus();
+
+       if ( element.setSelectionRange ) {
+               element.setSelectionRange( start, end, isBackwards ? 'backward' 
: 'forward' );
+       } else if ( element.createTextRange ) {
+               // IE 8 and below
+               textRange = element.createTextRange();
+               textRange.collapse( true );
+               textRange.moveStart( 'character', start );
+               textRange.moveEnd( 'character', end - start );
+               textRange.select();
+       }
        return this;
 };
 
 /**
+ * Get the length of the text input value.
+ *
+ * This could differ from the length of #getValue if the
+ * value gets filtered
+ *
+ * @return {number} Input length
+ */
+OO.ui.TextInputWidget.prototype.getInputLength = function () {
+       return this.$input[ 0 ].value.length;
+};
+
+/**
+ * Focus the input and select the entire text.
+ *
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.select = function () {
+       return this.selectRange( 0, this.getInputLength() );
+};
+
+/**
+ * Focus the input and move the cursor to the start.
+ *
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.moveCursorToStart = function () {
+       return this.selectRange( 0 );
+};
+
+/**
  * Focus the input and move the cursor to the end.
+ *
+ * @chainable
  */
 OO.ui.TextInputWidget.prototype.moveCursorToEnd = function () {
-       var textRange,
-               element = this.$input[ 0 ];
-       this.focus();
-       if ( element.selectionStart !== undefined ) {
-               element.selectionStart = element.selectionEnd = 
element.value.length;
-       } else if ( element.createTextRange ) {
-               // IE 8 and below
-               textRange = element.createTextRange();
-               textRange.collapse( false );
-               textRange.select();
-       }
+       return this.selectRange( this.getInputLength() );
 };
 
 /**

-- 
To view, visit https://gerrit.wikimedia.org/r/248315
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4109d5ad6089035cf689e11667e6ec2bb007d6ce
Gerrit-PatchSet: 1
Gerrit-Project: oojs/ui
Gerrit-Branch: master
Gerrit-Owner: Esanders <esand...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to