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