Gerrit Patch Uploader has uploaded a new change for review. https://gerrit.wikimedia.org/r/221654
Change subject: mediawiki.util: Implement Sanitizer::escapeId as mw.util.escapeId ...................................................................... mediawiki.util: Implement Sanitizer::escapeId as mw.util.escapeId This is only partial implementation. It does not support * decoding of HTML entities * initial character must be a letter * options This change introduces a new global JavaScript variable wgExperimentalHtmlIds. Bug: T103661 Change-Id: I5627ebc5964e80bdb55cd9b3ce108c1c2bfd2405 --- M includes/resourceloader/ResourceLoaderStartUpModule.php M resources/src/mediawiki/mediawiki.util.js M tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js 3 files changed, 67 insertions(+), 0 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core refs/changes/54/221654/1 diff --git a/includes/resourceloader/ResourceLoaderStartUpModule.php b/includes/resourceloader/ResourceLoaderStartUpModule.php index a578ece..27e9528 100644 --- a/includes/resourceloader/ResourceLoaderStartUpModule.php +++ b/includes/resourceloader/ResourceLoaderStartUpModule.php @@ -100,6 +100,7 @@ 'wgLegalTitleChars' => Title::convertByteClassToUnicodeClass( Title::legalChars() ), 'wgResourceLoaderStorageVersion' => $conf->get( 'ResourceLoaderStorageVersion' ), 'wgResourceLoaderStorageEnabled' => $conf->get( 'ResourceLoaderStorageEnabled' ), + 'wgExperimentalHtmlIds' => $conf->get( 'ExperimentalHtmlIds' ), ); Hooks::run( 'ResourceLoaderGetConfigVars', array( &$vars ) ); diff --git a/resources/src/mediawiki/mediawiki.util.js b/resources/src/mediawiki/mediawiki.util.js index 13bf455..0f5a15c 100644 --- a/resources/src/mediawiki/mediawiki.util.js +++ b/resources/src/mediawiki/mediawiki.util.js @@ -59,6 +59,29 @@ }, /** + * Encode the string like Sanitizer::escapeId in PHP + * + * @param {string} str String to be encoded. + */ + escapeId: function ( str ) { + str = String( str ); + if ( mw.config.get( 'wgExperimentalHtmlIds' ) ) { + str = str + .replace( /[ \t\n\r\f_\'"&#%]+/g, ' ' ) + .trim() + .replace( / /g, '_' ); + if ( str === '' ) { + // Must have been all whitespace to start with. + return '_'; + } + return str; + } + return util.rawurlencode( str.replace( / /g, '_' ) ) + .replace( /%3A/g, ':' ) + .replace( /%/g, '.' ); + }, + + /** * Encode page titles for use in a URL * * We want / and : to be included as literal characters in our title URLs diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js index 8a3e100..1b8da4c 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js @@ -92,6 +92,49 @@ assert.equal( mw.util.rawurlencode( 'Test:A & B/Here' ), 'Test%3AA%20%26%20B%2FHere' ); } ); + QUnit.test( 'escapeId', 17, function ( assert ) { + $.each( mw.config.get( 'wgExperimentalHtmlIds' ) ? + { + '+': '+', + '&': '_', + '=': '=', + ':': ':', + ';': ';', + '@': '@', + '$': '$', + '-_.': '-_.', + '!': '!', + '*': '*', + '/': '/', + '[]': '[]', + '<>': '<>', + '\'': '_', + '§': '§', + 'Test:A & B/Here': 'Test:A_B/Here', + 'A&B&C&amp;D&amp;amp;E': 'A_B_amp;C_amp;amp;D_amp;amp;amp;E' + } : { + '+': '.2B', + '&': '.26', + '=': '.3D', + ':': ':', + ';': '.3B', + '@': '.40', + '$': '.24', + '-_.': '-_.', + '!': '.21', + '*': '.2A', + '/': '.2F', + '[]': '.5B.5D', + '<>': '.3C.3E', + '\'': '.27', + '§': '.C2.A7', + 'Test:A & B/Here': 'Test:A_.26_B.2FHere', + 'A&B&C&amp;D&amp;amp;E': 'A.26B.26amp.3BC.26amp.3Bamp.3BD.26amp.3Bamp.3Bamp.3BE' + }, function ( input, output ) { + assert.equal( mw.util.escapeId( input ), output ); + } ); + } ); + QUnit.test( 'wikiUrlencode', 10, function ( assert ) { assert.equal( mw.util.wikiUrlencode( 'Test:A & B/Here' ), 'Test:A_%26_B/Here' ); // See also wfUrlencodeTest.php#provideURLS -- To view, visit https://gerrit.wikimedia.org/r/221654 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5627ebc5964e80bdb55cd9b3ce108c1c2bfd2405 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Gerrit Patch Uploader <gerritpatchuploa...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits