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:
parent
b4068ae922
commit
8bee338d1c
5 changed files with 67 additions and 0 deletions
|
|
@ -23,6 +23,7 @@
|
|||
"classes": [
|
||||
"mw.Title",
|
||||
"mw.Uri",
|
||||
"mw.RegExp",
|
||||
"mw.messagePoster.*",
|
||||
"mw.notification",
|
||||
"mw.Notification_",
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
22
resources/src/mediawiki/mediawiki.RegExp.js
Normal file
22
resources/src/mediawiki/mediawiki.RegExp.js
Normal 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 ) );
|
||||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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 ) );
|
||||
Loading…
Reference in a new issue