Adrian Lang has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/239052

Change subject: Move sitelink scraping to sitelinkgrouplistview
......................................................................

Move sitelink scraping to sitelinkgrouplistview

Change-Id: Ie18fb8e5e0d7ecca3ded216a4a2cd1aeb27393ef
---
M view/resources/jquery/wikibase/jquery.wikibase.itemview.js
M view/resources/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.js
M view/resources/jquery/wikibase/resources.php
M 
view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.tests.js
4 files changed, 101 insertions(+), 107 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/52/239052/1

diff --git a/view/resources/jquery/wikibase/jquery.wikibase.itemview.js 
b/view/resources/jquery/wikibase/jquery.wikibase.itemview.js
index 2d86045..f9882e6 100644
--- a/view/resources/jquery/wikibase/jquery.wikibase.itemview.js
+++ b/view/resources/jquery/wikibase/jquery.wikibase.itemview.js
@@ -4,86 +4,6 @@
 var PARENT = $.wikibase.entityview;
 
 /**
- * Scrapes site links from static HTML in order to be sure the order in the 
static HTML matches the
- * order set on the widget initialized on the HTML structure since that widget 
is not supposed to
- * re-render the HTML for performance reasons.
- * @ignore
- *
- * @param {jQuery} $siteLinks
- * @param {wikibase.datamodel.SiteLinkSet} siteLinkSet
- * @return {Object}
- */
-function scrapeSiteLinks( $siteLinks, siteLinkSet ) {
-       var value = [];
-
-       $siteLinks.find( '.wikibase-sitelinkgroupview' ).each( function() {
-               var $sitelinkgroupview = $( this ),
-                       $sitelinklistview = $sitelinkgroupview.find( 
'.wikibase-sitelinklistview' ),
-                       group = $sitelinkgroupview.data( 'wb-sitelinks-group' ),
-                       siteIdsOfGroup = [],
-                       siteLinkIds = siteLinkSet.getKeys(),
-                       siteLinksOfGroup = [];
-
-               $sitelinklistview.find( '.wikibase-sitelinkview' ).each( 
function() {
-                       siteIdsOfGroup.push( $( this ).data( 'wb-siteid' ) );
-               } );
-
-               for( var i = 0; i < siteIdsOfGroup.length; i++ ) {
-                       for( var j = 0; j < siteLinkIds.length; j++ ) {
-                               if( siteLinkIds[j] === siteIdsOfGroup[i] ) {
-                                       siteLinksOfGroup.push( 
siteLinkSet.getItemByKey( siteLinkIds[j] ) );
-                                       break;
-                               }
-                       }
-               }
-
-               value.push( {
-                       group: group,
-                       siteLinks: siteLinksOfGroup
-               } );
-       } );
-
-       return value;
-}
-
-/**
- * Maps site links of a `wikibase.datamodel.SiteLinkSet` to their Wikibase 
site groups.
- * @ignore
- *
- * @param {wikibase.datamodel.SiteLinkSet} siteLinkSet
- * @return {Object}
- */
-function orderSiteLinksByGroup( siteLinkSet ) {
-       var value = [];
-
-       siteLinkSet.each( function( siteId, siteLink ) {
-               var site = wb.sites.getSite( siteId ),
-                       found = false;
-
-               if( !site ) {
-                       throw new Error( 'Site with id ' + siteId + ' is not 
registered' );
-               }
-
-               for( var i = 0; i < value.length; i++ ) {
-                       if( value[i].group === site.getGroup() ) {
-                               value[i].siteLinks.push( siteLink );
-                               found = true;
-                               break;
-                       }
-               }
-
-               if( !found ) {
-                       value.push( {
-                               group: site.getGroup(),
-                               siteLinks: [siteLink]
-                       } );
-               }
-       } );
-
-       return value;
-}
-
-/**
  * View for displaying a Wikibase `Item`.
  * @see wikibase.datamodel.Item
  * @class jQuery.wikibase.itemview
@@ -183,16 +103,10 @@
         * @protected
         */
        _initSiteLinks: function() {
-               var self = this,
-                       value = $( '.wikibase-sitelinkgrouplistview', 
this.element ).length
-                               ? scrapeSiteLinks( this.$siteLinks, 
this.options.value.getSiteLinks() )
-                               : orderSiteLinksByGroup( 
this.options.value.getSiteLinks() );
-
                this.$siteLinks.sitelinkgrouplistview( {
-                       value: value,
-                       entityId: self.options.value.getId(),
-                       siteLinksChanger: 
self.options.entityChangersFactory.getSiteLinksChanger(),
-                       entityStore: self.options.entityStore
+                       value: this.options.value,
+                       siteLinksChanger: 
this.options.entityChangersFactory.getSiteLinksChanger(),
+                       entityStore: this.options.entityStore
                } );
        },
 
diff --git 
a/view/resources/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.js 
b/view/resources/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.js
index 70fef4e..13eb5b3 100644
--- a/view/resources/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.js
+++ b/view/resources/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.js
@@ -5,16 +5,94 @@
 ( function( $, mw ) {
        'use strict';
 
-       var PARENT = $.ui.TemplatedWidget;
+/**
+ * Scrapes site links from static HTML in order to be sure the order in the 
static HTML matches the
+ * order set on the widget initialized on the HTML structure since that widget 
is not supposed to
+ * re-render the HTML for performance reasons.
+ * @ignore
+ *
+ * @param {jQuery} $siteLinks
+ * @param {wikibase.datamodel.SiteLinkSet} siteLinkSet
+ * @return {Object}
+ */
+function scrapeSiteLinks( $siteLinks, siteLinkSet ) {
+       var value = [];
+
+       $siteLinks.find( '.wikibase-sitelinkgroupview' ).each( function() {
+               var $sitelinkgroupview = $( this ),
+                       $sitelinklistview = $sitelinkgroupview.find( 
'.wikibase-sitelinklistview' ),
+                       group = $sitelinkgroupview.data( 'wb-sitelinks-group' ),
+                       siteIdsOfGroup = [],
+                       siteLinkIds = siteLinkSet.getKeys(),
+                       siteLinksOfGroup = [];
+
+               $sitelinklistview.find( '.wikibase-sitelinkview' ).each( 
function() {
+                       siteIdsOfGroup.push( $( this ).data( 'wb-siteid' ) );
+               } );
+
+               for( var i = 0; i < siteIdsOfGroup.length; i++ ) {
+                       for( var j = 0; j < siteLinkIds.length; j++ ) {
+                               if( siteLinkIds[j] === siteIdsOfGroup[i] ) {
+                                       siteLinksOfGroup.push( 
siteLinkSet.getItemByKey( siteLinkIds[j] ) );
+                                       break;
+                               }
+                       }
+               }
+
+               value.push( {
+                       group: group,
+                       siteLinks: siteLinksOfGroup
+               } );
+       } );
+
+       return value;
+}
+
+/**
+ * Maps site links of a `wikibase.datamodel.SiteLinkSet` to their Wikibase 
site groups.
+ * @ignore
+ *
+ * @param {wikibase.datamodel.SiteLinkSet} siteLinkSet
+ * @return {Object}
+ */
+function orderSiteLinksByGroup( siteLinkSet ) {
+       var value = [];
+
+       siteLinkSet.each( function( siteId, siteLink ) {
+               var site = wb.sites.getSite( siteId ),
+                       found = false;
+
+               if( !site ) {
+                       throw new Error( 'Site with id ' + siteId + ' is not 
registered' );
+               }
+
+               for( var i = 0; i < value.length; i++ ) {
+                       if( value[i].group === site.getGroup() ) {
+                               value[i].siteLinks.push( siteLink );
+                               found = true;
+                               break;
+                       }
+               }
+
+               if( !found ) {
+                       value.push( {
+                               group: site.getGroup(),
+                               siteLinks: [siteLink]
+                       } );
+               }
+       } );
+
+       return value;
+}
+
+var PARENT = $.ui.TemplatedWidget;
 
 /**
  * Encapsulates multiple sitelinkgroupview widgets.
  * @since 0.5
  * @extends jQuery.ui.TemplatedWidget
  *
- * @option {Object[]} value
- *         Array of objects representing the widget's value.
- *         Structure: [{ group: <{string}>, siteLinks: 
<{wikibase.datamodel.SiteLink[]}> }[, ...]]
+ * @option {wikibase.datamodel.Entity} value
  *
  * @option {wikibase.entityChangers.SiteLinksChanger} siteLinksChanger
  *
@@ -79,6 +157,10 @@
                var self = this,
                        prefix = 
$.wikibase.sitelinkgroupview.prototype.widgetEventPrefix;
 
+               var value = this.element.is( ':empty' )
+                               ? scrapeSiteLinks( this.element, 
this.options.value.getSiteLinks() )
+                               : orderSiteLinksByGroup( 
this.options.value.getSiteLinks() );
+
                this.$listview = this.element.find( '.wikibase-listview' );
 
                if( !this.$listview.length ) {
@@ -99,7 +181,7 @@
                                        };
                                }
                        } ),
-                       value: self.options.value || null,
+                       value: value,
                        encapsulate: true
                } )
                .on( prefix + 'disable.' + this.widgetName, function( event ) {
diff --git a/view/resources/jquery/wikibase/resources.php 
b/view/resources/jquery/wikibase/resources.php
index 37293b5..bc651ae 100644
--- a/view/resources/jquery/wikibase/resources.php
+++ b/view/resources/jquery/wikibase/resources.php
@@ -249,7 +249,6 @@
                                'jquery.wikibase.statementgrouplistview',
                                'jquery.wikibase.entityview',
                                'jquery.wikibase.sitelinkgrouplistview',
-                               'wikibase.sites',
                                'wikibase.utilities.ClaimGuidGenerator',
                        ),
                ),
@@ -335,6 +334,7 @@
                                'jquery.util.EventSingletonManager',
                                'jquery.wikibase.listview',
                                'jquery.wikibase.sitelinkgroupview',
+                               'wikibase.sites',
                        ),
                        'messages' => array(
                                'wikibase-sitelinkgroupview-input-help-message',
diff --git 
a/view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.tests.js
 
b/view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.tests.js
index 2068fa5..1361b4d 100644
--- 
a/view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.tests.js
+++ 
b/view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinkgrouplistview.tests.js
@@ -68,18 +68,16 @@
 } ) );
 
 QUnit.test( 'Create & destroy', function( assert ) {
-       var value = [
-               {
-                       group: 'group1',
-                       siteLinks: [new wb.datamodel.SiteLink( 'enwiki', 
'page1' )]
-               }, {
-                       group: 'group2',
-                       siteLinks: [
-                               new wb.datamodel.SiteLink( 'dewiki', 'page1' ),
-                               new wb.datamodel.SiteLink( 'enwiki', 'page2' )
-                       ]
-               }
-       ];
+       var value = new wb.datamodel.Item(
+               'Q1',
+               null,
+               null,
+               new wb.datamodel.SiteLinkSet( [
+                       new wb.datamodel.SiteLink( 'aawiki', 'page1' ),
+                       new wb.datamodel.SiteLink( 'dewiki', 'page1' ),
+                       new wb.datamodel.SiteLink( 'enwiki', 'page2' )
+               ] )
+       );
 
        var $sitelinkgrouplistview = createSitelinkgrouplistview( {
                        value: value

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie18fb8e5e0d7ecca3ded216a4a2cd1aeb27393ef
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Lang <adrian.he...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to