jenkins-bot has submitted this change and it was merged.

Change subject: Allow siteselector to dynamically retrieve site objects
......................................................................


Allow siteselector to dynamically retrieve site objects

Prerequisite for enabling an managing a dynamically added input element in the 
sitelinklistview.

Change-Id: I17d1a7d9739d5c0e5d0590a027f57a859de941f7
---
M lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js
M lib/resources/jquery.wikibase/jquery.wikibase.sitelinkview.js
M lib/resources/jquery.wikibase/jquery.wikibase.siteselector.js
M lib/resources/jquery.wikibase/resources.php
M lib/tests/qunit/jquery.wikibase/jquery.wikibase.siteselector.tests.js
5 files changed, 65 insertions(+), 9 deletions(-)

Approvals:
  Thiemo Mättig (WMDE): Looks good to me, approved
  jenkins-bot: Verified



diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js
index 542c3b4..eaff444 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js
@@ -125,8 +125,10 @@
                                newItemOptionsFn: function( value ) {
                                        return {
                                                value: value,
-                                               getAllowedSiteIds: function() {
-                                                       return 
self._getUnusedAllowedSiteIds();
+                                               getAllowedSites: function() {
+                                                       return $.map( 
self._getUnusedAllowedSiteIds(), function( siteId ) {
+                                                               return 
wb.sites.getSite( siteId );
+                                                       } );
                                                },
                                                entityStore: 
self.options.entityStore
                                        };
diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkview.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkview.js
index eaaa01d..5be4fda 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkview.js
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkview.js
@@ -15,8 +15,8 @@
  * @option {wikibase.datamodel.SiteLink} [value]
  *         Default: null
  *
- * @option {Function} [getAllowedSiteIds]
- *         Function returning an array of wikibase.datamodel.SiteLink objects.
+ * @option {Function} [getAllowedSites]
+ *         Function returning an array of wikibase.Site objects.
  *         Default: function() { return []; }
  *
  * @option {wikibase.store.EntityStore} entityStore
@@ -76,7 +76,7 @@
                        '$link': '.wikibase-sitelinkview-link'
                },
                value: null,
-               getAllowedSiteIds: function() { return []; },
+               getAllowedSites: function() { return []; },
                entityStore: null,
                helpMessage: mw.msg( 'wikibase-sitelinks-input-help-message' )
        },
@@ -228,9 +228,7 @@
                var $siteIdInput = $( '<input />' )
                        .attr( 'placeholder', mw.msg( 
'wikibase-sitelink-site-edit-placeholder' ) )
                        .siteselector( {
-                               source: $.map( this.option( 'getAllowedSiteIds' 
)(), function( siteId ) {
-                                       return wb.sites.getSite( siteId );
-                               } )
+                               source: self.options.getAllowedSites
                        } );
 
                var pagesuggester = $pageNameInput.data( 'pagesuggester' );
diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.siteselector.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.siteselector.js
index 06334be..97dca3e 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.siteselector.js
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.siteselector.js
@@ -10,7 +10,15 @@
         * Enhances an input box with auto-complete and auto-suggestion 
functionality for site ids.
         * @since 0.2
         *
-        * @example $( 'input' ).siteselector( { source: <{wb.Site[]}> } );
+        * @example $( 'input' ).siteselector( { source: <{wikibase.Site[]}> } 
);
+        *
+        * @option {wikibase.Site[]|Function} source
+        *         An array of Site objects that shall be used to provide 
suggestions. Alternatively, a
+        *         function dynamically retrieving an array of Site objects may 
be provided.
+        *
+        * @option {number} [delay]
+        *         Delay in milliseconds of the request querying for 
suggestions.
+        *         Default: 0
         *
         * @event selected
         *        Triggered whenever a site is selected or de-selected.
@@ -161,6 +169,17 @@
                },
 
                /**
+                * @see jQuery.ui.suggester._getSuggestions
+                */
+               _getSuggestions: function( term ) {
+                       var source = $.isFunction( this.options.source )
+                               ? this.options.source()
+                               : this.options.source;
+
+                       return this._getSuggestionsFromArray( term, source );
+               },
+
+               /**
                 * @see jQuery.ui.suggester._getSuggestionsFromArray
                 */
                _getSuggestionsFromArray: function( term, source ) {
diff --git a/lib/resources/jquery.wikibase/resources.php 
b/lib/resources/jquery.wikibase/resources.php
index eb14714..2f13aed 100644
--- a/lib/resources/jquery.wikibase/resources.php
+++ b/lib/resources/jquery.wikibase/resources.php
@@ -344,6 +344,7 @@
                                'jquery.wikibase.toolbarcontroller',
                                'wikibase',
                                'wikibase.datamodel',
+                               'wikibase.sites',
                                'wikibase.templates',
                                'wikibase.utilities', // wikibase.utilities.ui
                        ),
diff --git 
a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.siteselector.tests.js 
b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.siteselector.tests.js
index 5c8e04f..9765970 100644
--- a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.siteselector.tests.js
+++ b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.siteselector.tests.js
@@ -114,6 +114,11 @@
                        { frrwiki: 'nord' }
                ];
 
+               /**
+                * @param {string} string
+                * @param {string} expectedSiteId
+                * @param {Function} next
+                */
                var testString = function( string, expectedSiteId, next ) {
                        $siteSelector.val( string );
 
@@ -201,6 +206,37 @@
                $queue.dequeue( 'tests' );
        } );
 
+       QUnit.test( 'Create passing a source function', function( assert ) {
+               var $siteSelector = newTestSiteSelector( {
+                               source: function() {
+                                       return sites;
+                               }
+                       } ),
+                       siteSelector = $siteSelector.data( 'siteselector' );
+
+               QUnit.stop();
+
+               $siteSelector.val( 'en' );
+
+               siteSelector.search()
+               .done( function( suggestions ) {
+                       assert.equal(
+                               suggestions[0].getId(),
+                               'enwiki',
+                               'Returned expected first suggestion "enwiki".'
+                       );
+               } )
+               .fail( function() {
+                       QUnit.ok(
+                               false,
+                               'Search failed.'
+                       );
+               } )
+               .always( function() {
+                       QUnit.start();
+               } );
+       } );
+
        QUnit.test( 'Item constructor', function( assert ) {
                var item = new $.wikibase.siteselector.Item( 'label', 'value', 
sites[0] );
 

-- 
To view, visit https://gerrit.wikimedia.org/r/168072
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I17d1a7d9739d5c0e5d0590a027f57a859de941f7
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Henning Snater <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to