Merge "resourceloader: Make various CSSMin performance optimizations and cleanups"
[lhc/web/wiklou.git] / resources / src / mediawiki.widgets.visibleLengthLimit / mediawiki.widgets.visibleLengthLimit.js
index 03ffca7..aab1e7c 100644 (file)
@@ -1,6 +1,7 @@
 ( function ( mw ) {
 
-       var byteLength = require( 'mediawiki.String' ).byteLength;
+       var byteLength = require( 'mediawiki.String' ).byteLength,
+               codePointLength = require( 'mediawiki.String' ).codePointLength;
 
        /**
         * @class mw.widgets
                limit = limit || +textInputWidget.$input.attr( 'maxlength' );
 
                function updateCount() {
-                       textInputWidget.setLabel( ( limit - byteLength( textInputWidget.getValue() ) ).toString() );
+                       var remaining = limit - byteLength( textInputWidget.getValue() );
+                       if ( remaining > 99 ) {
+                               remaining = '';
+                       } else {
+                               remaining = mw.language.convertNumber( remaining );
+                       }
+                       textInputWidget.setLabel( remaining );
                }
                textInputWidget.on( 'change', updateCount );
                // Initialise value
                textInputWidget.$input.byteLimit( limit );
        };
 
+       /**
+        * Add a visible codepoint (character) limit label to a TextInputWidget.
+        *
+        * Uses jQuery#codePointLimit to enforce the limit.
+        *
+        * @param {OO.ui.TextInputWidget} textInputWidget Text input widget
+        * @param {number} [limit] Byte limit, defaults to $input's maxlength
+        */
+       mw.widgets.visibleCodePointLimit = function ( textInputWidget, limit ) {
+               limit = limit || +textInputWidget.$input.attr( 'maxlength' );
+
+               function updateCount() {
+                       var remaining = limit - codePointLength( textInputWidget.getValue() );
+                       if ( remaining > 99 ) {
+                               remaining = '';
+                       } else {
+                               remaining = mw.language.convertNumber( remaining );
+                       }
+                       textInputWidget.setLabel( remaining );
+               }
+               textInputWidget.on( 'change', updateCount );
+               // Initialise value
+               updateCount();
+
+               // Actually enforce limit
+               textInputWidget.$input.codePointLimit( limit );
+       };
+
 }( mediaWiki ) );