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

Change subject: Introduce comfort functions _drawResult and _iterateResult
......................................................................


Introduce comfort functions _drawResult and _iterateResult

Refactor result browser code into _drawResult and _iterateResult

Change-Id: Ia7ae0ed555b5fe11e9622ef74fd0da7a043ea9c9
---
M wikibase/queryService/ui/App.js
M wikibase/queryService/ui/resultBrowser/AbstractResultBrowser.js
M wikibase/queryService/ui/resultBrowser/BubbleChartResultBrowser.js
M wikibase/queryService/ui/resultBrowser/CoordinateResultBrowser.js
M wikibase/queryService/ui/resultBrowser/ImageResultBrowser.js
M wikibase/queryService/ui/resultBrowser/TreeMapResultBrowser.js
6 files changed, 117 insertions(+), 90 deletions(-)

Approvals:
  Smalyshev: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/wikibase/queryService/ui/App.js b/wikibase/queryService/ui/App.js
index 1f71df1..ed2d2fc 100644
--- a/wikibase/queryService/ui/App.js
+++ b/wikibase/queryService/ui/App.js
@@ -368,24 +368,15 @@
         * @private
         */
        SELF.prototype._handleQueryResult = function() {
-               var api = this._sparqlApi,
-                       self = this;
+               var api = this._sparqlApi;
 
                $( '#total-results' ).text( api.getResultLength() );
                $( '#query-time' ).text( api.getExecutionTime() );
                $( '.query-total' ).show();
                $( '#execute-button' ).prop('disabled', false);
 
-               var $queryResult = $( '#query-result' );
-
                var defaultBrowser = this._createResultBrowsers( 
api.getResultRawData() );
-               this._showActionMessage( 'Generating View' , 'success', 100);
-               window.setTimeout( function() {
-                       $queryResult.show();
-                       defaultBrowser.draw( $queryResult );
-                       self._hideActionMessage();
-                       self._handleQueryResultBrowsers();
-               }, 20 );
+               this._drawResult( defaultBrowser );
 
                return false;
        };
@@ -444,15 +435,7 @@
                                        $(this).closest( '.open' ).removeClass( 
'open' );
 
                                        $( '#query-result' ).html( '' );
-                                       self._showActionMessage( 'Generating 
View' , 'success', 100);
-                                       window.setTimeout( function() {
-                                               try{
-                                                       b.object.draw( $( 
'#query-result' ) );
-                                                       
self._hideActionMessage();
-                                               } catch( e ){
-                                                       
self._showActionMessage( 'Unable to display ' + b.label , 'warning' );
-                                               }
-                                       }, 20 );
+                                       self._drawResult( b.object );
                                        return false;
                                } );
                        } else {
@@ -461,6 +444,27 @@
                } );
        };
 
+
+       /**
+        * @private
+        */
+       SELF.prototype._drawResult = function( resultBrowser ) {
+               var self = this;
+
+               this._showActionMessage( 'Generating View' , 'success', 100);
+               window.setTimeout( function() {
+                       try{
+                               resultBrowser.draw( $( '#query-result' ) );
+                               self._hideActionMessage();
+                               $( '#query-result' ).show();
+                       } catch( e ){
+                               self._showActionMessage( 'Unable to display 
result' , 'warning' );
+                               window.console.log( e.stack );
+                       }
+                       self._handleQueryResultBrowsers();
+
+               }, 20 );
+       };
        /**
         * @private
         */
diff --git a/wikibase/queryService/ui/resultBrowser/AbstractResultBrowser.js 
b/wikibase/queryService/ui/resultBrowser/AbstractResultBrowser.js
index ab37a32..aa3b469 100644
--- a/wikibase/queryService/ui/resultBrowser/AbstractResultBrowser.js
+++ b/wikibase/queryService/ui/resultBrowser/AbstractResultBrowser.js
@@ -55,6 +55,35 @@
        };
 
        /**
+        * Iterate the result set and calls the visitors
+        * @protected
+        * @param {resultCallback} cb - called for every column of the resultset
+        **/
+       SELF.prototype._iterateResult = function( cb ) {
+               var self = this;
+
+               $.each( this._result.results.bindings, function( rowNum, row ){
+                       $.each( self._result.head.vars, function( rowNum1, key 
){
+                               var field = null;
+                               if( row[key] ){
+                                       field = row[key];
+                               }
+                               self.processVisitors( field );
+
+                               cb( field, key, row );
+                       } );
+               } );
+       };
+
+       /**
+        * Callback used by _iterateResult
+        * @callback resultCallback
+        * @param {object} field
+        * @param {string} key of the field
+        * @param {object} row
+        */
+
+       /**
         * Checks whether the result browser can draw the given result
         * @return {boolean}
         **/
diff --git a/wikibase/queryService/ui/resultBrowser/BubbleChartResultBrowser.js 
b/wikibase/queryService/ui/resultBrowser/BubbleChartResultBrowser.js
index 9cc09e6..62da3cc 100644
--- a/wikibase/queryService/ui/resultBrowser/BubbleChartResultBrowser.js
+++ b/wikibase/queryService/ui/resultBrowser/BubbleChartResultBrowser.js
@@ -40,36 +40,34 @@
         **/
        SELF.prototype.draw = function ( $element ) {
                var self = this;
+               var data = { 'name': 'bubblechart', 'children': [] },
+                       labelKey = this._getLabelColumns()[0],
+                       numberKey = this._getNumberColumns()[0],
+                       prevRow = null,
+                       url = null;
 
-               var data = { 'name': 'bubblechart', 'children': [] };
+               this._iterateResult( function( field, key, row ) {
 
-               var labelKey = this._getLabelColumns()[0],
-                       numberKey = this._getNumberColumns()[0];
-
-               $.each( this._getRows(), function( index, row ){
-
-                       var item = {};
-                       if( row[labelKey] && row[numberKey] ){
-                               item.name = row[labelKey].value;
-                               item.size = row[numberKey].value;
+                       if( field && field.value
+                                       && self._getFormatter().isExploreUrl( 
field.value ) ){
+                               url = field.value;
                        }
 
-                       $.each( self._getColumns(), function ( key, col ) {
-                               var value = row[col].value;
+                       if( row !== prevRow ){
+                               var item = { url: url };
+                               url = null;
+                               prevRow = row;
 
-                               if( self._getFormatter().isExploreUrl( value ) 
){
-                                       item.url = value;
+                               if( row[labelKey] && row[numberKey] ){
+                                       item.name = row[labelKey].value;
+                                       item.size = row[numberKey].value;
+                                       data.children.push( item );
                                }
+                       }
 
-                               self.processVisitors( value );
-                       } );
-
-                       data.children.push( item );
                } );
 
-               var $wrapper = $( '<div/>' )
-                       .css( 'margin', 'auto' )
-                       .css( 'width', '60%' );
+               var $wrapper = $( '<center>' );
                $element.html( $wrapper );
 
                this._drawBubbleChart( $wrapper, data );
diff --git a/wikibase/queryService/ui/resultBrowser/CoordinateResultBrowser.js 
b/wikibase/queryService/ui/resultBrowser/CoordinateResultBrowser.js
index 0f9be79..118212b 100644
--- a/wikibase/queryService/ui/resultBrowser/CoordinateResultBrowser.js
+++ b/wikibase/queryService/ui/resultBrowser/CoordinateResultBrowser.js
@@ -79,16 +79,11 @@
         */
        SELF.prototype._getMarkerGroup = function() {
                var self = this,
-                       result = this._result.results.bindings || {},
                        markers = [];
 
-               $.each( result, function( rowKey){
-                       $.each( this, function( key, field ){
-                               self.processVisitors( field );
-
-                       if( field.datatype === MAP_DATATYPE ){
+                       this._iterateResult( function( field, key, row ) {
+                       if( field && field.datatype === MAP_DATATYPE ){
                                var longLat = self._extractLongLat( field.value 
);
-
                                        if( longLat === null || !longLat[0] || 
!longLat[1]  ){
                                        return true;
                                }
@@ -97,14 +92,13 @@
                                        marker = L.circle( [ longLat[0], 
longLat[1] ], 10 ).bindPopup( popup );
 
                                marker.on( 'click', function() {
-                                       var info = self._getItemDescription( 
rowKey );
+                                       var info = self._getItemDescription( 
row );
                                        popup.setContent( info[0] );
                                } );
 
                                markers.push( marker );
                        }
                        } );
-               } );
 
                if( markers.length === 0 ){
                        var marker =  L.marker([0, 0])
@@ -153,9 +147,8 @@
        /**
         * @private
         */
-       SELF.prototype._getItemDescription = function( rowKey ) {
-               var row = this._result.results.bindings[rowKey],
-               $result = $( '<div/>' ).append( this._getFormatter().formatRow( 
row ) );
+       SELF.prototype._getItemDescription = function( row ) {
+               var $result = $( '<div/>' ).append( 
this._getFormatter().formatRow( row ) );
 
                return $result;
        };
diff --git a/wikibase/queryService/ui/resultBrowser/ImageResultBrowser.js 
b/wikibase/queryService/ui/resultBrowser/ImageResultBrowser.js
index f3ab46f..0d133c2 100644
--- a/wikibase/queryService/ui/resultBrowser/ImageResultBrowser.js
+++ b/wikibase/queryService/ui/resultBrowser/ImageResultBrowser.js
@@ -32,23 +32,20 @@
         **/
        SELF.prototype.draw = function( $element ) {
                var self = this;
-
                this._grid = $( '<div class="masonry">' );
 
+               this._iterateResult( function( field, key, row ) {
 
-               $.each( this._result.results.bindings, function( rowNum, row ){
-                       $.each( this, function( key, field ){
-                               self.processVisitors( field );
-                               if( self._isCommonsResource( field.value ) ){
-                                       var url = field.value,
-                                               fileName = 
self._getFormatter().getCommonsResourceFileName( url );
+                       if( field && self._isCommonsResource( field.value ) ){
+                               var url = field.value,
+                                       fileName = 
self._getFormatter().getCommonsResourceFileName( url );
 
-                                       self._grid.append( self._getItem( 
self._getThumbnail( url ),
-                                                       self._getThumbnail( 
url, 1000 ),
-                                                       fileName,
-                                                       row ) );
-                               }
-                       } );
+                               self._grid.append( self._getItem( 
self._getThumbnail( url ),
+                                               self._getThumbnail( url, 1000 ),
+                                               fileName,
+                                               row ) );
+                       }
+
                } );
 
                $element.html( this._grid );
diff --git a/wikibase/queryService/ui/resultBrowser/TreeMapResultBrowser.js 
b/wikibase/queryService/ui/resultBrowser/TreeMapResultBrowser.js
index 78ccf3d..026e600 100644
--- a/wikibase/queryService/ui/resultBrowser/TreeMapResultBrowser.js
+++ b/wikibase/queryService/ui/resultBrowser/TreeMapResultBrowser.js
@@ -36,35 +36,41 @@
        SELF.prototype.draw = function ( $element ) {
                var self = this;
 
-               var data = {};
+               var data = {},
+                       layer = data,
+                       size = null,
+                       url = null,
+                       prevRow = null;
 
-               $.each( this._getRows(), function( index, row ){
-                       var layer = data,
-                               size = null,
-                               url = null;
+               this._iterateResult( function( field, key, row ) {
 
-                       $.each( self._getColumns(), function ( key, col ) {
-                               col = row[col];
-                               var value = col && col.value ? col.value : null;
-
-
-                               if( self._getFormatter().isLabel( col ) ){
-                                       if( !layer[ value ] ){
-                                               layer[ value ] = {};
-                                       }
-                                       layer = layer[ value ];
-                               }
-                               if( self._getFormatter().isNumber( value ) ){
-                                       size = value;
-                               }
-                               if( self._getFormatter().isExploreUrl( value ) 
){
-                                       url = value;
+                       if( row !== prevRow ){
+                               if( prevRow !== null ){
+                                       layer.data = { size: size, url:url };
+                                       size = null;
+                                       url = null;
+                                       layer = data;
                                }
 
-                               self.processVisitors( col );
-                       } );
-                       layer.data = { size: size, url:url };
+                               prevRow = row;
+                       }
+
+                       if( self._getFormatter().isLabel( field ) ){
+                               if( !layer[ field.value ] ){
+                                       layer[ field.value ] = {};
+                               }
+                               layer = layer[ field.value ];
+                       }
+                       if( self._getFormatter().isNumber( field ) ){
+                               size = field.value;
+                       }
+                       if( field && field.value
+                                       && self._getFormatter().isExploreUrl( 
field.value ) ){
+                               url = field.value;
+                       }
+
                } );
+               layer.data = { size: size, url:url };
 
                var children = this._createTreeData( data );
                var treeData = { name: 'treeMap', children:children };

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ia7ae0ed555b5fe11e9622ef74fd0da7a043ea9c9
Gerrit-PatchSet: 3
Gerrit-Project: wikidata/query/gui
Gerrit-Branch: master
Gerrit-Owner: Jonas Kress (WMDE) <[email protected]>
Gerrit-Reviewer: Smalyshev <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to