TitleWidget: Perform diacritic-insensitive highlighting
authorEd Sanders <esanders@wikimedia.org>
Sun, 1 Oct 2017 12:15:38 +0000 (13:15 +0100)
committerJforrester <jforrester@wikimedia.org>
Tue, 3 Oct 2017 19:51:50 +0000 (19:51 +0000)
Change-Id: Ib92877e4afa45f73bb086c04946f5c1d0c99ed6f

resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js
resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js

index 638f461..7d49a09 100644 (file)
@@ -23,6 +23,7 @@
         * @cfg {boolean} [redirect] Page is a redirect
         * @cfg {boolean} [disambiguation] Page is a disambiguation page
         * @cfg {string} [query] Matching query string to highlight
         * @cfg {boolean} [redirect] Page is a redirect
         * @cfg {boolean} [disambiguation] Page is a disambiguation page
         * @cfg {string} [query] Matching query string to highlight
+        * @cfg {string} [compare] String comparison function for query highlighting
         */
        mw.widgets.TitleOptionWidget = function MwWidgetsTitleOptionWidget( config ) {
                var icon;
         */
        mw.widgets.TitleOptionWidget = function MwWidgetsTitleOptionWidget( config ) {
                var icon;
@@ -69,7 +70,7 @@
 
                // Highlight matching parts of link suggestion
                if ( config.query ) {
 
                // Highlight matching parts of link suggestion
                if ( config.query ) {
-                       this.setHighlightedQuery( config.data, config.query );
+                       this.setHighlightedQuery( config.data, config.query, config.compare );
                }
                this.$label.attr( 'title', config.data );
 
                }
                this.$label.attr( 'title', config.data );
 
index 5fe094f..db56bd3 100644 (file)
                this.validateTitle = config.validateTitle !== undefined ? config.validateTitle : true;
                this.cache = config.cache;
                this.api = config.api || new mw.Api();
                this.validateTitle = config.validateTitle !== undefined ? config.validateTitle : true;
                this.cache = config.cache;
                this.api = config.api || new mw.Api();
+               // Supports: IE10, FF28, Chrome23
+               this.compare = window.Intl && Intl.Collator ?
+                       new Intl.Collator( mw.config.get( 'wgContentLanguage' ), { sensitivity: 'base' } ).compare :
+                       null;
 
                // Initialization
                this.$element.addClass( 'mw-widget-titleWidget' );
 
                // Initialization
                this.$element.addClass( 'mw-widget-titleWidget' );
                        missing: data.missing,
                        redirect: data.redirect,
                        disambiguation: data.disambiguation,
                        missing: data.missing,
                        redirect: data.redirect,
                        disambiguation: data.disambiguation,
-                       query: this.getQueryValue()
+                       query: this.getQueryValue(),
+                       compare: this.compare
                };
        };
 
                };
        };