Introduce mediawiki.RegExp module

Simple module based on the $.escapeRE method of the old
"jquery.mwExtension" module.

Change-Id: I9e108a3f8c24d87bb239b63a14807a691c25aa3e
This commit is contained in:
Timo Tijhof 2015-06-20 06:46:24 +01:00
parent b4068ae922
commit 8bee338d1c
5 changed files with 67 additions and 0 deletions

View file

@ -23,6 +23,7 @@
"classes": [
"mw.Title",
"mw.Uri",
"mw.RegExp",
"mw.messagePoster.*",
"mw.notification",
"mw.Notification_",

View file

@ -1020,6 +1020,10 @@ return array(
'scripts' => 'resources/src/mediawiki/mediawiki.notify.js',
'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.RegExp' => array(
'scripts' => 'resources/src/mediawiki/mediawiki.RegExp.js',
'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.pager.tablePager' => array(
'styles' => 'resources/src/mediawiki/mediawiki.pager.tablePager.less',
'position' => 'top',

View file

@ -0,0 +1,22 @@
( function ( mw ) {
/**
* @class mw.RegExp
*/
mw.RegExp = {
/**
* Escape string for safe inclusion in regular expression
*
* The following characters are escaped:
*
* \ { } ( ) | . ? * + - ^ $ [ ]
*
* @since 1.26
* @static
* @param {string} str String to escape
* @return {string} Escaped string
*/
escape: function ( str ) {
return str.replace( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
}
};
}( mediaWiki ) );

View file

@ -66,6 +66,7 @@ return array(
'tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.RegExp.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js',
@ -108,6 +109,7 @@ return array(
'mediawiki.api.watch',
'mediawiki.jqueryMsg',
'mediawiki.messagePoster',
'mediawiki.RegExp',
'mediawiki.Title',
'mediawiki.toc',
'mediawiki.Uri',

View file

@ -0,0 +1,38 @@
( function ( mw, $ ) {
QUnit.module( 'mediawiki.RegExp' );
QUnit.test( 'escape', 16, function ( assert ) {
var specials, normal;
specials = [
'\\',
'{',
'}',
'(',
')',
'[',
']',
'|',
'.',
'?',
'*',
'+',
'-',
'^',
'$'
];
normal = [
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz',
'0123456789'
].join( '' );
$.each( specials, function ( i, str ) {
assert.propEqual( str.match( new RegExp( mw.RegExp.escape( str ) ) ), [ str ], 'Match ' + str );
} );
assert.equal( mw.RegExp.escape( normal ), normal, 'Alphanumerals are left alone' );
} );
}( mediaWiki, jQuery ) );