jenkins-bot has submitted this change and it was merged. Change subject: Adjusted site selector widget to site groups ......................................................................
Adjusted site selector widget to site groups (bug 51560) In the site selector's input box and the corresponding suggestion list, the site id is shown instead of the language code now. (The matching mechanism is using the site id already.) Matching the language code is reimplemented with this change set. Change-Id: I911b4a8e9871f426580be1100b004740ec9b9916 --- M lib/resources/jquery.wikibase/jquery.wikibase.siteselector.js M lib/tests/qunit/jquery.wikibase/jquery.wikibase.siteselector.tests.js M lib/tests/qunit/wikibase.ui.SiteLinksEditTool.tests.js M repo/tests/selenium/sitelinks/sitelinks_spec.rb 4 files changed, 60 insertions(+), 26 deletions(-) Approvals: Tobias Gritschacher: Looks good to me, approved jenkins-bot: Verified diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.siteselector.js b/lib/resources/jquery.wikibase/jquery.wikibase.siteselector.js index 33341b8..14dccb5 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.siteselector.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.siteselector.js @@ -14,7 +14,7 @@ /** * Site selector - * Ehances an input box with auto-complete and auto-suggestion functionality for site ids. + * Enhances an input box with auto-complete and auto-suggestion functionality for site ids. * * @example $( 'input' ).siteselector( { resultSet: < list of wikibase Site objects > } ); * @desc Creates a simple site selector. @@ -104,25 +104,37 @@ var results = $.grep( this.options.resultSet, function( result, i ) { return ( result.label.toLowerCase().indexOf( request.term.toLowerCase() ) === 0 - || result.site.getId().indexOf( request.term.toLowerCase() ) === 0 - ); + || result.site.getId().indexOf( request.term.toLowerCase() ) === 0 + ); } ); - // if some site id is specified exactly, move that site to the top for it will - // be the one picked when leaving the input field - var additionallyFiltered = $.grep( results, function( result, i ) { + + // If some site id or language code is specified exactly, move that site / those sites + // to the top. The uppermost one be the one picked when leaving the input field. + var filteredById = $.grep( results, function( result, i ) { return ( request.term === result.site.getId() ); } ); - if ( additionallyFiltered.length > 0 ) { // remove site from original result set - for ( var i in results ) { - if ( results[i].site.getId() === additionallyFiltered[0].site.getId() ) { - results.splice( i, 1 ); - break; + + var filteredByLanguageCode = $.grep( results, function( result, i ) { + return ( request.term === result.site.getLanguageCode() ); + } ); + + // Placing sites hit by id before sites hits by language code: + var directlyHitSites = $.merge( filteredById, filteredByLanguageCode ); + + // Remove directly hit sites from original result set: + if( directlyHitSites.length ) { + for( var i in results ) { + for( var j in directlyHitSites ) { + if ( results[i].site.getId() === directlyHitSites[j].site.getId() ) { + results.splice( i, 1 ); + break; + } } } } - // put site with exactly hit site id to beginning of complete result set - $.merge( additionallyFiltered, results ); - suggest( additionallyFiltered ); + + // Put site(s) exactly hit to the top of the complete result set: + suggest( $.merge( directlyHitSites, results ) ); }, /** @@ -169,8 +181,8 @@ for ( var i in resultSet ) { var site = resultSet[i]; this.options.resultSet.push( { - 'label': site.getName() + ' (' + site.getLanguageCode() + ')', - 'value': site.getShortName() + ' (' + site.getLanguageCode() + ')', + 'label': site.getName() + ' (' + site.getId() + ')', + 'value': site.getShortName() + ' (' + site.getId() + ')', 'site': site // additional reference to site object for validation } ); } @@ -215,6 +227,7 @@ || value === currentItem.site.getShortName().toLowerCase() || value === currentItem.value.toLowerCase() || value === currentItem.label.toLowerCase() + || value === currentItem.site.getLanguageCode() ) { return currentItem.site.getId(); } 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 8e23181..a891e30 100644 --- a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.siteselector.tests.js +++ b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.siteselector.tests.js @@ -44,7 +44,7 @@ 'wbSiteDetails': { enwiki: { apiUrl: 'http://en.wikipedia.org/w/api.php', - name: 'English Wikipedia', + name: 'English', pageUrl: 'http://en.wikipedia.org/wiki/$1', shortName: 'English', languageCode: 'en', @@ -53,12 +53,30 @@ }, dewiki: { apiUrl: 'http://de.wikipedia.org/w/api.php', - name: 'Deutsche Wikipedia', + name: 'Deutsch', pageUrl: 'http://de.wikipedia.org/wiki/$1', shortName: 'Deutsch', languageCode: 'de', id: 'dewiki', group: 'another' + }, + nowiki: { + apiUrl: 'http://no.wikipedia.org/w/api.php', + name: 'norsk bokmål', + pageUrl: 'http://no.wikipedia.org/wiki/$1', + shortName: 'norsk bokmål', + languageCode: 'no', + id: 'nowiki', + group: 'foo' + }, + frrwiki: { + apiUrl: 'http://frrwiki.wikipedia.org/w/api.php', + name: 'Nordfriisk', + pageUrl: 'http://frrwiki.wikipedia.org/wiki/$1', + shortName: 'Nordfriisk', + languageCode: 'frr', + id: 'frrwiki', + group: 'foo' } } }, @@ -82,8 +100,11 @@ testStrings = [ { enwiki: 'en' }, { dewiki: 'd' }, - { enwiki: 'English (en)'}, - { dewiki: 'deutsch' } + { enwiki: 'English (enwiki)'}, + { dewiki: 'deutsch' }, + { nowiki: 'no' }, // Select by language code. + { enwiki: 'enwiki' }, + { frrwiki: 'nord' } ]; var testString = function( string, expectedSiteId ) { diff --git a/lib/tests/qunit/wikibase.ui.SiteLinksEditTool.tests.js b/lib/tests/qunit/wikibase.ui.SiteLinksEditTool.tests.js index 963d4f2..5017282 100644 --- a/lib/tests/qunit/wikibase.ui.SiteLinksEditTool.tests.js +++ b/lib/tests/qunit/wikibase.ui.SiteLinksEditTool.tests.js @@ -155,7 +155,7 @@ 'initially, no site links, so no sites represented yet' ); - hackyValueInsertionAndSave( subject, [ 'English (en)', 'London' ], 'enwiki' ); + hackyValueInsertionAndSave( subject, [ 'English (enwiki)', 'London' ], 'enwiki' ); assert.deepEqual( subject.getRepresentedSiteIds(), @@ -275,7 +275,7 @@ 'editable values initiated correctly' ); - var rawNewValue = [ 'Deutsch (de)', 'Berlin' ]; + var rawNewValue = [ 'Deutsch (dewiki)', 'Berlin' ]; var newValue = hackyValueInsertion( this.subject, rawNewValue, 'dewiki' ); assert.strictEqual( diff --git a/repo/tests/selenium/sitelinks/sitelinks_spec.rb b/repo/tests/selenium/sitelinks/sitelinks_spec.rb index 47826d8..bb440c7 100644 --- a/repo/tests/selenium/sitelinks/sitelinks_spec.rb +++ b/repo/tests/selenium/sitelinks/sitelinks_spec.rb @@ -55,7 +55,7 @@ page.siteIdAutocompleteList_element.visible?.should be_true page.pageInputField_element.enabled?.should be_true page.pageInputField="xyz_thisarticleshouldneverexist_xyz" - page.siteIdInputField.should == "English (en)" + page.siteIdInputField.should == "English (enwiki)" ajax_wait page.saveSitelinkLink ajax_wait @@ -76,7 +76,7 @@ page.addSitelinkLink page.siteIdInputField_element.should be_true page.pageInputField_element.enabled?.should be_false - page.siteIdInputField="English (en)" + page.siteIdInputField="en" ajax_wait page.wait_until do page.siteIdAutocompleteList_element.visible? @@ -119,7 +119,7 @@ page.siteIdAutocompleteList_element.visible?.should be_true page.pageInputField_element.enabled?.should be_true page.pageInputField="Ber" - page.siteIdInputField.should == "English (en)" + page.siteIdInputField.should == "English (enwiki)" ajax_wait page.wait_until do page.pageAutocompleteList_element.visible? @@ -150,7 +150,7 @@ it "should check if adding multiple sitelinks works" do count = 1 - sitelinks = [["de", "Ber", "Deutsch (de)"], ["ja", "Ber", "日本語 (ja)"], ["he", "BER", "עברית (he)"]] + sitelinks = [["de", "Ber", "Deutsch (dewiki)"], ["ja", "Ber", "日本語 (jawiki)"], ["he", "BER", "עברית (hewiki)"]] on_page(ItemPage) do |page| page.navigate_to_item page.wait_for_entity_to_load -- To view, visit https://gerrit.wikimedia.org/r/76735 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I911b4a8e9871f426580be1100b004740ec9b9916 Gerrit-PatchSet: 3 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Henning Snater <henning.sna...@wikimedia.de> Gerrit-Reviewer: Tobias Gritschacher <tobias.gritschac...@wikimedia.de> Gerrit-Reviewer: jenkins-bot _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits