X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=resources%2Fsrc%2Fmediawiki.widgets.visibleLengthLimit%2Fmediawiki.widgets.visibleLengthLimit.js;h=aab1e7c6d3ad8ccf912c08ef63a4d8884c13a3a3;hb=fd3f586dbbbb556aa19c0a53c7e8cb1aa93fa164;hp=03ffca7b956ed4dda2632187decdf4e8d3003d0c;hpb=455f10a8aa01fa4030e5663a5e4dc01ebda95a4e;p=lhc%2Fweb%2Fwiklou.git diff --git a/resources/src/mediawiki.widgets.visibleLengthLimit/mediawiki.widgets.visibleLengthLimit.js b/resources/src/mediawiki.widgets.visibleLengthLimit/mediawiki.widgets.visibleLengthLimit.js index 03ffca7b95..aab1e7c6d3 100644 --- a/resources/src/mediawiki.widgets.visibleLengthLimit/mediawiki.widgets.visibleLengthLimit.js +++ b/resources/src/mediawiki.widgets.visibleLengthLimit/mediawiki.widgets.visibleLengthLimit.js @@ -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 @@ -18,7 +19,13 @@ 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 @@ -28,4 +35,32 @@ 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 ) );