Jonas Kress (WMDE) has uploaded a new change for review.

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

Change subject: Refactor ResultBrowsers to be configurable
......................................................................

Refactor ResultBrowsers to be configurable

Change-Id: Idc8b389329894021782f0e6aba3a6ffba94e4766
---
M index.html
M wikibase/queryService/ui/App.js
2 files changed, 58 insertions(+), 45 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/wikidata/query/gui 
refs/changes/36/277236/1

diff --git a/index.html b/index.html
index 62ea053..47f4336 100644
--- a/index.html
+++ b/index.html
@@ -95,9 +95,6 @@
                                                        <li><a href="#" 
data-toggle="dropdown" class="dropdown-toggle"> <span class="glyphicon 
glyphicon-eye-open" aria-hidden="true">Display</span><span class="caret"></span>
                                                        </a>
                                                                <ul 
id="result-browser-menu" class="dropdown-menu" role="menu">
-                                                                       <li><a 
class="result-browser default" href="#"><span class="glyphicon 
glyphicon-th"></span>Table</a></li>
-                                                                       <li><a 
class="result-browser gallery" href="#"><span class="glyphicon 
glyphicon-picture"></span>Image Grid</a></li>
-                                                                       <li><a 
class="result-browser map" href="#"><span class="glyphicon 
glyphicon-map-marker"></span>Map</a></li>
                                                                </ul></li>
                                                        <li>
                                                        <li><a href="#" 
data-toggle="dropdown" class="dropdown-toggle"> <span class="glyphicon 
glyphicon-download-alt" aria-hidden="true">Download</span><span 
class="caret"></span>
diff --git a/wikibase/queryService/ui/App.js b/wikibase/queryService/ui/App.js
index c764ed9..f3b4817 100644
--- a/wikibase/queryService/ui/App.js
+++ b/wikibase/queryService/ui/App.js
@@ -66,6 +66,16 @@
        SELF.prototype._autoExecuteQuery = false;
 
        /**
+        * @property {Object}
+        * @private
+        **/
+       SELF.prototype._resultBrowsers = {
+                       TableResultBrowser: {icon: 'th', label: 'Table', 
object: null, $element: null },
+                       ImageResultBrowser: {icon: 'picture', label: 'Image 
Grid', object: null, $element: null },
+                       CoordinateResultBrowser: {icon: 'map-marker', label: 
'Map', object: null, $element: null }
+       };
+
+       /**
         * Initialize private members and call delegate to specific init methods
         * @private
         **/
@@ -90,6 +100,7 @@
                this._initQuery();
                this._initRdfNamespaces();
                this._initHandlers();
+               this._initResultBrowserMenu();
 
                if( this._autoExecuteQuery ){
                        $( '#execute-button' ).click();
@@ -214,11 +225,6 @@
                        $( '.explorer-panel' ).hide();
                } );
 
-
-               //result browser
-               $( '.result-browser' ).click( function(){ $(this).closest( 
'.open' ).removeClass('open'); } );
-               $( '.result-browser.default' ).click( $.proxy( 
this._handleQueryResult, this )  );
-
                $( window ).on( 'popstate', $.proxy( this._initQuery, this ) );
 
                this._initPopovers();
@@ -321,6 +327,21 @@
                }
        };
 
+
+       /**
+        * @private
+        **/
+       SELF.prototype._initResultBrowserMenu = function() {
+
+               $.each( this._resultBrowsers, function( key, b ){
+                       var $element = $( '<li><a class="result-browser" 
href="#">' +
+                               '<span class="glyphicon glyphicon-'+ b.icon 
+'"></span>' + b.label + '</a></li>' );
+                       $element.appendTo( $( '#result-browser-menu' ) );
+                       b.$element = $element;
+               } );
+
+       };
+
        /**
         * @private
         **/
@@ -389,53 +410,48 @@
                        return false;
                }
 
-               var tableBrowser = new 
wikibase.queryService.ui.resultBrowser.TableResultBrowser();
-               var imageBrowser = new 
wikibase.queryService.ui.resultBrowser.ImageResultBrowser();
-               var coordinateBrowser = new 
wikibase.queryService.ui.resultBrowser.CoordinateResultBrowser();
+               var defaultBrowser = null;
+               $.each( this._resultBrowsers, function( className, b ){
+                       var instance = new 
wikibase.queryService.ui.resultBrowser[ className ]();
+                       instance.setResult ( api.getResultRawData() );
 
-               tableBrowser.setResult( api.getResultRawData() );
-               tableBrowser.addVisitor( imageBrowser );
-               tableBrowser.addVisitor( coordinateBrowser );
-               tableBrowser.draw( $queryResult );
+                       if( !defaultBrowser ){
+                               defaultBrowser = instance;
+                       } else {
+                               defaultBrowser.addVisitor( instance );
+                       }
+
+                       b.object = instance;
+               } );
+
+               defaultBrowser.draw( $queryResult );
                $queryResult.show();
 
-               this._handleQueryResultBrowsers( imageBrowser, 
coordinateBrowser );
-
+               this._handleQueryResultBrowsers();
                return false;
        };
 
        /**
         * @private
         */
-       SELF.prototype._handleQueryResultBrowsers = function( imageBrowser, 
coordinateBrowser ) {
-               //image
-               imageBrowser.setResult( this._sparqlApi.getResultRawData() );
+       SELF.prototype._handleQueryResultBrowsers = function() {
+               $.each( this._resultBrowsers, function( key, b ){
+                       if( b.object.isDrawable() ){
+                               b.$element.css( 'opacity', 1 ).attr( 'href', 
'#' );
+                               b.$element.click( function(){
+                                       $(this).closest( '.open' ).removeClass( 
'open' );
 
-               if( imageBrowser.isDrawable() ){
-                       $( '.result-browser.gallery' ).css( 'opacity', 1 
).attr( 'href', '#' );
-                       $( '.result-browser.gallery' ).click( function(){
-                               imageBrowser.draw( $( '#query-result' ) );
-                               return false;
-                       } );
-               }else{
-                       $( '.result-browser.gallery' ).off( 'click' );
-                       $( '.result-browser.gallery' ).css( 'opacity', 0.5 
).removeAttr( 'href' );
-               }
-
-
-               //maps
-               coordinateBrowser.setResult( this._sparqlApi.getResultRawData() 
);
-
-               if( coordinateBrowser.isDrawable() ){
-                       $( '.result-browser.map' ).css( 'opacity', 1 ).attr( 
'href', '#' );
-                       $( '.result-browser.map' ).click( function(){
-                               coordinateBrowser.draw( $( '#query-result' ) );
-                               return false;
-                       } );
-               }else{
-                       $( '.result-browser.map' ).off( 'click' );
-                       $( '.result-browser.map' ).css( 'opacity', 0.5 
).removeAttr( 'href' );
-               }
+                                       $( '#query-result' ).html( 'Loading...' 
);
+                                       window.setTimeout( function() {
+                                               b.object.draw( $( 
'#query-result' ) );
+                                       }, 20 );
+                                       return false;
+                               } );
+                       } else {
+                               b.$element.off( 'click' );
+                               b.$element.css( 'opacity', 0.5 ).removeAttr( 
'href' );
+                       }
+               } );
        };
 
        /**

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Idc8b389329894021782f0e6aba3a6ffba94e4766
Gerrit-PatchSet: 1
Gerrit-Project: wikidata/query/gui
Gerrit-Branch: master
Gerrit-Owner: Jonas Kress (WMDE) <[email protected]>

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

Reply via email to