diff options
Diffstat (limited to 'www/wiki/resources/src/mediawiki.widgets.visibleLengthLimit/mediawiki.widgets.visibleLengthLimit.js')
-rw-r--r-- | www/wiki/resources/src/mediawiki.widgets.visibleLengthLimit/mediawiki.widgets.visibleLengthLimit.js | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/www/wiki/resources/src/mediawiki.widgets.visibleLengthLimit/mediawiki.widgets.visibleLengthLimit.js b/www/wiki/resources/src/mediawiki.widgets.visibleLengthLimit/mediawiki.widgets.visibleLengthLimit.js new file mode 100644 index 00000000..52ebe747 --- /dev/null +++ b/www/wiki/resources/src/mediawiki.widgets.visibleLengthLimit/mediawiki.widgets.visibleLengthLimit.js @@ -0,0 +1,54 @@ +( function ( mw ) { + + var byteLength = require( 'mediawiki.String' ).byteLength, + codePointLength = require( 'mediawiki.String' ).codePointLength; + + /** + * @class mw.widgets + */ + + /** + * Add a visible byte limit label to a TextInputWidget. + * + * Uses jQuery#byteLimit to enforce the limit. + * + * @param {OO.ui.TextInputWidget} textInputWidget Text input widget + * @param {number} [limit] Byte limit, defaults to $input's maxlength + */ + mw.widgets.visibleByteLimit = function ( textInputWidget, limit ) { + limit = limit || +textInputWidget.$input.attr( 'maxlength' ); + + function updateCount() { + textInputWidget.setLabel( ( limit - byteLength( textInputWidget.getValue() ) ).toString() ); + } + textInputWidget.on( 'change', updateCount ); + // Initialise value + updateCount(); + + // Actually enforce limit + 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() { + textInputWidget.setLabel( ( limit - codePointLength( textInputWidget.getValue() ) ).toString() ); + } + textInputWidget.on( 'change', updateCount ); + // Initialise value + updateCount(); + + // Actually enforce limit + textInputWidget.$input.codePointLimit( limit ); + }; + +}( mediaWiki ) ); |