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