From 35f70a240a81b3a20007e84f391969545b54393a Mon Sep 17 00:00:00 2001 From: Prateek Saxena Date: Fri, 24 Mar 2017 15:25:37 +0530 Subject: [PATCH] Rename CategorySelector to CategoryMultiselectWidget For consistency. Bug: T161285 Change-Id: I7c9e0089ba6b77f4bc73e14b989630487f6f3174 --- resources/Resources.php | 12 ++- ...> mw.widgets.CategoryMultiselectWidget.js} | 85 +++++++++---------- 2 files changed, 51 insertions(+), 46 deletions(-) rename resources/src/mediawiki.widgets/{mw.widgets.CategorySelector.js => mw.widgets.CategoryMultiselectWidget.js} (73%) diff --git a/resources/Resources.php b/resources/Resources.php index 631386a629..ce52846282 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -1302,7 +1302,7 @@ return [ 'dependencies' => [ 'mediawiki.ForeignStructuredUpload', 'mediawiki.Upload.BookletLayout', - 'mediawiki.widgets.CategorySelector', + 'mediawiki.widgets.CategoryMultiselectWidget', 'mediawiki.widgets.DateInputWidget', 'mediawiki.jqueryMsg', 'mediawiki.api.messages', @@ -2357,9 +2357,15 @@ return [ 'targets' => [ 'desktop', 'mobile' ], ], 'mediawiki.widgets.CategorySelector' => [ + 'deprecated' => 'Use "mw.widgets.CategoryMultiselectWidget" instead. See T161285.', + 'dependencies' => [ + 'mediawiki.widgets.CategoryMultiselectWidget', + ], + ], + 'mediawiki.widgets.CategoryMultiselectWidget' => [ 'scripts' => [ 'resources/src/mediawiki.widgets/mw.widgets.CategoryCapsuleItemWidget.js', - 'resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js', + 'resources/src/mediawiki.widgets/mw.widgets.CategoryMultiselectWidget.js', ], 'dependencies' => [ 'oojs-ui-widgets', @@ -2369,7 +2375,7 @@ return [ ], 'messages' => [ 'red-link-title', - 'mw-widgets-categoryselector-add-category-placeholder' + 'mw-widgets-categoryselector-add-category-placeholder', ], 'targets' => [ 'desktop', 'mobile' ], ], diff --git a/resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js b/resources/src/mediawiki.widgets/mw.widgets.CategoryMultiselectWidget.js similarity index 73% rename from resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js rename to resources/src/mediawiki.widgets/mw.widgets.CategoryMultiselectWidget.js index 422c048e76..ccc5c9dcb4 100644 --- a/resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js +++ b/resources/src/mediawiki.widgets/mw.widgets.CategoryMultiselectWidget.js @@ -1,31 +1,30 @@ /*! - * MediaWiki Widgets - CategorySelector class. + * MediaWiki Widgets - CategoryMultiselectWidget class. * * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt * @license The MIT License (MIT); see LICENSE.txt */ ( function ( $, mw ) { - var CSP, - NS_CATEGORY = mw.config.get( 'wgNamespaceIds' ).category; + var NS_CATEGORY = mw.config.get( 'wgNamespaceIds' ).category; /** * Category selector widget. Displays an OO.ui.CapsuleMultiselectWidget * and autocompletes with available categories. * - * mw.loader.using( 'mediawiki.widgets.CategorySelector', function () { - * var selector = new mw.widgets.CategorySelector( { + * mw.loader.using( 'mediawiki.widgets.CategoryMultiselectWidget', function () { + * var selector = new mw.widgets.CategoryMultiselectWidget( { * searchTypes: [ - * mw.widgets.CategorySelector.SearchType.OpenSearch, - * mw.widgets.CategorySelector.SearchType.InternalSearch + * mw.widgets.CategoryMultiselectWidget.SearchType.OpenSearch, + * mw.widgets.CategoryMultiselectWidget.SearchType.InternalSearch * ] * } ); * * $( 'body' ).append( selector.$element ); * - * selector.setSearchTypes( [ mw.widgets.CategorySelector.SearchType.SubCategories ] ); + * selector.setSearchTypes( [ mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories ] ); * } ); * - * @class mw.widgets.CategorySelector + * @class mw.widgets.CategoryMultiselectWidget * @uses mw.Api * @extends OO.ui.CapsuleMultiselectWidget * @mixins OO.ui.mixin.PendingElement @@ -34,21 +33,21 @@ * @param {Object} [config] Configuration options * @cfg {mw.Api} [api] Instance of mw.Api (or subclass thereof) to use for queries * @cfg {number} [limit=10] Maximum number of results to load - * @cfg {mw.widgets.CategorySelector.SearchType[]} [searchTypes=[mw.widgets.CategorySelector.SearchType.OpenSearch]] + * @cfg {mw.widgets.CategoryMultiselectWidget.SearchType[]} [searchTypes=[mw.widgets.CategoryMultiselectWidget.SearchType.OpenSearch]] * Default search API to use when searching. */ - function CategorySelector( config ) { + mw.widgets.CategoryMultiselectWidget = function MWCategoryMultiselectWidget( config ) { // Config initialization config = $.extend( { limit: 10, - searchTypes: [ CategorySelector.SearchType.OpenSearch ] + searchTypes: [ mw.widgets.CategoryMultiselectWidget.SearchType.OpenSearch ] }, config ); this.limit = config.limit; this.searchTypes = config.searchTypes; this.validateSearchTypes(); // Parent constructor - mw.widgets.CategorySelector.parent.call( this, $.extend( true, {}, config, { + mw.widgets.CategoryMultiselectWidget.parent.call( this, $.extend( true, {}, config, { menu: { filterFromInput: false }, @@ -67,13 +66,12 @@ // Initialize this.api = config.api || new mw.Api(); this.searchCache = {}; - } + }; /* Setup */ - OO.inheritClass( CategorySelector, OO.ui.CapsuleMultiselectWidget ); - OO.mixinClass( CategorySelector, OO.ui.mixin.PendingElement ); - CSP = CategorySelector.prototype; + OO.inheritClass( mw.widgets.CategoryMultiselectWidget, OO.ui.CapsuleMultiselectWidget ); + OO.mixinClass( mw.widgets.CategoryMultiselectWidget, OO.ui.mixin.PendingElement ); /* Methods */ @@ -85,7 +83,7 @@ * @private * @method */ - CSP.updateMenuItems = function () { + mw.widgets.CategoryMultiselectWidget.prototype.updateMenuItems = function () { this.getMenu().clearItems(); this.getNewMenuItems( this.$input.val() ).then( function ( items ) { var existingItems, filteredItems, @@ -121,8 +119,8 @@ /** * @inheritdoc */ - CSP.clearInput = function () { - CategorySelector.parent.prototype.clearInput.call( this ); + mw.widgets.CategoryMultiselectWidget.prototype.clearInput = function () { + mw.widgets.CategoryMultiselectWidget.parent.prototype.clearInput.call( this ); // Abort all pending requests, we won't need their results this.api.abort(); }; @@ -135,7 +133,7 @@ * @param {string} input The input used to prefix search categories * @return {jQuery.Promise} Resolves with an array of categories */ - CSP.getNewMenuItems = function ( input ) { + mw.widgets.CategoryMultiselectWidget.prototype.getNewMenuItems = function ( input ) { var i, promises = [], deferred = $.Deferred(); @@ -189,7 +187,7 @@ /** * @inheritdoc */ - CSP.createItemWidget = function ( data ) { + mw.widgets.CategoryMultiselectWidget.prototype.createItemWidget = function ( data ) { var title = mw.Title.makeTitle( NS_CATEGORY, data ); if ( !title ) { return null; @@ -203,7 +201,7 @@ /** * @inheritdoc */ - CSP.getItemFromData = function ( data ) { + mw.widgets.CategoryMultiselectWidget.prototype.getItemFromData = function ( data ) { // This is a bit of a hack... We have to canonicalize the data in the same way that // #createItemWidget and CategoryCapsuleItemWidget will do, otherwise we won't find duplicates. var title = mw.Title.makeTitle( NS_CATEGORY, data ); @@ -219,9 +217,9 @@ * @private * @return {boolean} */ - CSP.validateSearchTypes = function () { + mw.widgets.CategoryMultiselectWidget.prototype.validateSearchTypes = function () { var validSearchTypes = false, - searchTypeEnumCount = Object.keys( CategorySelector.SearchType ).length; + searchTypeEnumCount = Object.keys( mw.widgets.CategoryMultiselectWidget.SearchType ).length; // Check if all values are in the SearchType enum validSearchTypes = this.searchTypes.every( function ( searchType ) { @@ -232,20 +230,20 @@ throw new Error( 'Unknown searchType in searchTypes' ); } - // If the searchTypes has CategorySelector.SearchType.SubCategories + // If the searchTypes has mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories // it can be the only search type. - if ( this.searchTypes.indexOf( CategorySelector.SearchType.SubCategories ) > -1 && + if ( this.searchTypes.indexOf( mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories ) > -1 && this.searchTypes.length > 1 ) { - throw new Error( 'Can\'t have additional search types with CategorySelector.SearchType.SubCategories' ); + throw new Error( 'Can\'t have additional search types with mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories' ); } - // If the searchTypes has CategorySelector.SearchType.ParentCategories + // If the searchTypes has mw.widgets.CategoryMultiselectWidget.SearchType.ParentCategories // it can be the only search type. - if ( this.searchTypes.indexOf( CategorySelector.SearchType.ParentCategories ) > -1 && + if ( this.searchTypes.indexOf( mw.widgets.CategoryMultiselectWidget.SearchType.ParentCategories ) > -1 && this.searchTypes.length > 1 ) { - throw new Error( 'Can\'t have additional search types with CategorySelector.SearchType.ParentCategories' ); + throw new Error( 'Can\'t have additional search types with mw.widgets.CategoryMultiselectWidget.SearchType.ParentCategories' ); } return true; @@ -254,9 +252,9 @@ /** * Sets and validates the value of `this.searchType`. * - * @param {mw.widgets.CategorySelector.SearchType[]} searchTypes + * @param {mw.widgets.CategoryMultiselectWidget.SearchType[]} searchTypes */ - CSP.setSearchTypes = function ( searchTypes ) { + mw.widgets.CategoryMultiselectWidget.prototype.setSearchTypes = function ( searchTypes ) { this.searchTypes = searchTypes; this.validateSearchTypes(); }; @@ -267,10 +265,10 @@ * @private * @method * @param {string} input The input used to prefix search categories - * @param {mw.widgets.CategorySelector.SearchType} searchType + * @param {mw.widgets.CategoryMultiselectWidget.SearchType} searchType * @return {jQuery.Promise} Resolves with an array of categories */ - CSP.searchCategories = function ( input, searchType ) { + mw.widgets.CategoryMultiselectWidget.prototype.searchCategories = function ( input, searchType ) { var deferred = $.Deferred(), cacheKey = input + searchType.toString(); @@ -280,7 +278,7 @@ } switch ( searchType ) { - case CategorySelector.SearchType.OpenSearch: + case mw.widgets.CategoryMultiselectWidget.SearchType.OpenSearch: this.api.get( { formatversion: 2, action: 'opensearch', @@ -293,7 +291,7 @@ } ).fail( deferred.reject.bind( deferred ) ); break; - case CategorySelector.SearchType.InternalSearch: + case mw.widgets.CategoryMultiselectWidget.SearchType.InternalSearch: this.api.get( { formatversion: 2, action: 'query', @@ -310,7 +308,7 @@ } ).fail( deferred.reject.bind( deferred ) ); break; - case CategorySelector.SearchType.Exists: + case mw.widgets.CategoryMultiselectWidget.SearchType.Exists: if ( input.indexOf( '|' ) > -1 ) { deferred.resolve( [] ); break; @@ -334,7 +332,7 @@ } ).fail( deferred.reject.bind( deferred ) ); break; - case CategorySelector.SearchType.SubCategories: + case mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories: if ( input.indexOf( '|' ) > -1 ) { deferred.resolve( [] ); break; @@ -355,7 +353,7 @@ } ).fail( deferred.reject.bind( deferred ) ); break; - case CategorySelector.SearchType.ParentCategories: + case mw.widgets.CategoryMultiselectWidget.SearchType.ParentCategories: if ( input.indexOf( '|' ) > -1 ) { deferred.resolve( [] ); break; @@ -393,10 +391,10 @@ }; /** - * @enum mw.widgets.CategorySelector.SearchType + * @enum mw.widgets.CategoryMultiselectWidget.SearchType * Types of search available. */ - CategorySelector.SearchType = { + mw.widgets.CategoryMultiselectWidget.SearchType = { /** Search using action=opensearch */ OpenSearch: 0, @@ -413,5 +411,6 @@ ParentCategories: 4 }; - mw.widgets.CategorySelector = CategorySelector; + // For backwards compatibility. See T161285. + mw.widgets.CategorySelector = mw.widgets.CategoryMultiselectWidget; }( jQuery, mediaWiki ) ); -- 2.20.1