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&amp;C&amp;amp;D&amp;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&amp;C&amp;amp;D&amp;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

Reply via email to