Merge "Provide PHPUnit 4 and 6 compatibility layer"
[lhc/web/wiklou.git] / resources / src / mediawiki.widgets.visibleLengthLimit / mediawiki.widgets.visibleLengthLimit.js
1 ( function ( mw ) {
2
3 var byteLength = require( 'mediawiki.String' ).byteLength,
4 codePointLength = require( 'mediawiki.String' ).codePointLength;
5
6 /**
7 * @class mw.widgets
8 */
9
10 /**
11 * Add a visible byte limit label to a TextInputWidget.
12 *
13 * Uses jQuery#byteLimit to enforce the limit.
14 *
15 * @param {OO.ui.TextInputWidget} textInputWidget Text input widget
16 * @param {number} [limit] Byte limit, defaults to $input's maxlength
17 */
18 mw.widgets.visibleByteLimit = function ( textInputWidget, limit ) {
19 limit = limit || +textInputWidget.$input.attr( 'maxlength' );
20
21 function updateCount() {
22 textInputWidget.setLabel( ( limit - byteLength( textInputWidget.getValue() ) ).toString() );
23 }
24 textInputWidget.on( 'change', updateCount );
25 // Initialise value
26 updateCount();
27
28 // Actually enforce limit
29 textInputWidget.$input.byteLimit( limit );
30 };
31
32 /**
33 * Add a visible codepoint (character) limit label to a TextInputWidget.
34 *
35 * Uses jQuery#codePointLimit to enforce the limit.
36 *
37 * @param {OO.ui.TextInputWidget} textInputWidget Text input widget
38 * @param {number} [limit] Byte limit, defaults to $input's maxlength
39 */
40 mw.widgets.visibleCodePointLimit = function ( textInputWidget, limit ) {
41 limit = limit || +textInputWidget.$input.attr( 'maxlength' );
42
43 function updateCount() {
44 textInputWidget.setLabel( ( limit - codePointLength( textInputWidget.getValue() ) ).toString() );
45 }
46 textInputWidget.on( 'change', updateCount );
47 // Initialise value
48 updateCount();
49
50 // Actually enforce limit
51 textInputWidget.$input.codePointLimit( limit );
52 };
53
54 }( mediaWiki ) );