Author: ijd
Date: Thu Jun  5 09:59:32 2014
New Revision: 1600578

URL: http://svn.apache.org/r1600578
Log:
Added tab manager component, so that active tab can be set via 'tab=tabname' 
query param

Added:
    
jena/Experimental/jena-fuseki2/src/main/webapp/js/app/views/tabbed-view-manager.js
Modified:
    jena/Experimental/jena-fuseki2/src/main/webapp/css/fui.css
    jena/Experimental/jena-fuseki2/src/main/webapp/dataset.html
    
jena/Experimental/jena-fuseki2/src/main/webapp/js/app/controllers/dataset-controller.js

Modified: jena/Experimental/jena-fuseki2/src/main/webapp/css/fui.css
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-fuseki2/src/main/webapp/css/fui.css?rev=1600578&r1=1600577&r2=1600578&view=diff
==============================================================================
--- jena/Experimental/jena-fuseki2/src/main/webapp/css/fui.css (original)
+++ jena/Experimental/jena-fuseki2/src/main/webapp/css/fui.css Thu Jun  5 
09:59:32 2014
@@ -113,3 +113,15 @@ a.navbar-brand img {
   vertical-align: middle;
   display: inline-block;
 }
+
+.content-frame {
+  background-color: #eee;
+  border: 1px solid #aaa;
+  border-radius: 5px;
+  padding: 5px;
+}
+
+.tab-pane > div {
+  background-color: white;
+  border-radius: 3px;
+}
\ No newline at end of file

Modified: jena/Experimental/jena-fuseki2/src/main/webapp/dataset.html
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-fuseki2/src/main/webapp/dataset.html?rev=1600578&r1=1600577&r2=1600578&view=diff
==============================================================================
--- jena/Experimental/jena-fuseki2/src/main/webapp/dataset.html (original)
+++ jena/Experimental/jena-fuseki2/src/main/webapp/dataset.html Thu Jun  5 
09:59:32 2014
@@ -68,6 +68,196 @@
         </div>
       </div>
 
+      <div class="row">
+        <div class="col-md-12">
+          <div class="content-frame">
+            <ul class="nav nav-tabs">
+              <li><a href="#query" data-toggle="tab">query</a></li>
+              <li><a href="#upload" data-toggle="tab">upload file</a></li>
+              <li><a href="#edit" data-toggle="tab">edit</a></li>
+              <li><a href="#config" data-toggle="tab">view config</a></li>
+              <li><a href="#stats" data-toggle="tab">stats</a></li>
+            </ul>
+
+            <!-- Tab panes -->
+            <div class="tab-content">
+              <div class="tab-pane" id="query">
+                <div class="no-dataset">Please select a dataset.</div>
+                <div class="with-dataset hidden">
+                  <div class="row">
+                    <h1>SPARQL query form</h1>
+                    <p>To try out some SPARQL queries against the data in this 
Fuseki instance, enter your
+                    query below. You can select one of the active datasets to 
run the query against using the
+                    <span class="btn btn-custom-2">Select endpoint</span> 
button.</p>
+
+                    <div class="qonsole">
+                      <div class="col-md-12 well">
+                        <h2 class="">Example queries</h2>
+                        <ul class="list-inline examples">
+                        </ul>
+                      </div>
+
+                      <div class="col-md-12 well vertical">
+                        <h2 class="">Prefixes</h2>
+                        <ul class="list-inline prefixes">
+                          <li class="keep">
+                            <a data-toggle="modal" href="#prefixEditor" 
class="button" title="Add a SPARQL prefix">
+                              <i class="fa fa-plus-circle"></i>
+                            </a>
+                          </li>
+                        </ul>
+                      </div>
+
+                      <div class="col-md-12 well">
+                        <div class="query-edit">
+                          <div id="query-edit-cm" class=""></div>
+                        </div>
+                        <div class="query-chrome">
+                          <form class="form-inline" role="form">
+                            <div class="form-group">
+                              <label>SPARQL endpoint</label>
+                              <div class="dropdown ">
+                                <a data-toggle="dropdown" class="btn 
btn-custom2" href="#">
+                                  Select endpoint <i class="icon-collapse"></i>
+                                </a>
+                                <ul class="dropdown-menu endpoints" 
role="menu" aria-labelledby="dropdownMenu1">
+                                </ul>
+                              </div>
+                            </div>
+                            <div class="form-group">
+                              <label></label>
+                              <div>
+                                <input type="text" class="form-control" 
id="sparqlEndpoint" />
+                              </div>
+                            </div>
+
+                            <div class="form-group">
+                              <label>Results</label>
+                              <div class="dropdown ">
+                                <a data-toggle="dropdown" class="btn 
btn-custom2 display-format" href="#" data-value="tsv">
+                                  <span>table</span> <i 
class="icon-collapse"></i>
+                                </a>
+                                <ul class="dropdown-menu formats  " 
role="menu" aria-labelledby="dropdownMenu2">
+                                  <li role='presentation' class="" ><a 
data-value="tsv" role='menuitem' tabindex='-1' href='#'>table</a></li>
+                                  <li role='presentation' class="" ><a 
data-value="text"role='menuitem' tabindex='-1' href='#'>plain text</a></li>
+                                  <li role='presentation' class="" ><a 
data-value="json"role='menuitem' tabindex='-1' href='#'>JSON</a></li>
+                                  <li role='presentation' class="" ><a 
data-value="xml"role='menuitem' tabindex='-1' href='#'>XML</a></li>
+                                </ul>
+                              </div>
+                            </div>
+
+                            <div class="form-group">
+                              <label></label>
+                              <div>
+                                <a id="perform-btn" href="#" class="btn 
btn-success run-query form-control">perform query</a>
+                              </div>
+                            </div>
+
+                          </form>
+                        </div>
+                      </div>
+
+                      <!-- results -->
+                      <div id="results-block" class="row sparql 
sparql-results">
+                        <div class="col-md-12">
+                          <div class="well">
+                            <div class="row">
+                              <div class="col-md-12">
+                                <span class="loadingSpinner hidden">
+                                  <img src="images/wait30.gif" alt="waiting 
for server action to complete" />
+                                </span>
+                                <span class="timeTaken hidden"></span>
+                              </div>
+                            </div>
+                            <div class="row">
+                              <div class="col-md-12" id="results">
+                                <h2 class="col-md-12">Query results</h2>
+                              </div>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+
+                      <div class="row clearfix"></div>
+
+                      <footer>
+                      </footer>
+                    </div><!-- /.qonsole-->
+
+                    <!-- modal dialogue -->
+                    <div class="modal fade" id="prefixEditor" tabindex="-1" 
role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+                      <div class="modal-dialog">
+                        <div class="modal-content">
+                          <div class="modal-header">
+                            <button type="button" class="close" 
data-dismiss="modal" aria-hidden="true">&times;</button>
+                            <h4 class="modal-title">Add a SPARQL prefix</h4>
+                          </div>
+                          <div class="modal-body">
+                            <form class="form-horizontal" role="form">
+                              <div class="form-group">
+                                <label for="inputPrefix" class="col-lg-2 
control-label">Prefix</label>
+                                <div class="col-lg-10">
+                                  <input type="text" class="form-control" 
id="inputPrefix" placeholder="Prefix" autofocus>
+                                </div>
+                              </div>
+                              <div class="form-group">
+                                <div class="col-lg-offset-2 col-lg-10">
+                                  <button class="btn btn-sm btn-primary" 
id="lookupPrefix">Lookup <span></span> on prefix.cc</button>
+                                </div>
+                              </div>
+                              <div class="form-group">
+                                <label for="inputURI" class="col-lg-2 
control-label">URI</label>
+                                <div class="col-lg-10">
+                                  <input type="text" class="form-control" 
id="inputURI" placeholder="URI">
+                                </div>
+                              </div>
+                            </form>
+                          </div>
+                          <div class="modal-footer">
+                            <button type="button" class="btn btn-default" 
data-dismiss="modal">cancel</button>
+                            <button type="button" class="btn btn-primary" 
data-dismiss="modal" id="addPrefix">add prefix</button>
+                          </div>
+                        </div><!-- /.modal-content -->
+                      </div><!-- /.modal-dialog -->
+                    </div><!-- /.modal -->
+
+                  </div>
+
+                </div> <!-- /.with-dataset -->
+              </div>
+
+              <div class="tab-pane" id="upload">
+                <div class="no-dataset">Please select a dataset.</div>
+                <div class="with-dataset hidden">
+                  upload
+                </div>
+              </div>
+
+              <div class="tab-pane" id="edit">
+                <div class="no-dataset">Please select a dataset.</div>
+                <div class="with-dataset hidden">
+                  edit
+                </div>
+              </div>
+
+              <div class="tab-pane" id="config">
+                <div class="no-dataset">Please select a dataset.</div>
+                <div class="with-dataset hidden">
+                  config
+                </div>
+              </div>
+
+              <div class="tab-pane" id="stats">
+                <div class="no-dataset">Please select a dataset.</div>
+                <div class="with-dataset hidden">
+                  stats
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+
     </div>
 
   </body>

Modified: 
jena/Experimental/jena-fuseki2/src/main/webapp/js/app/controllers/dataset-controller.js
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-fuseki2/src/main/webapp/js/app/controllers/dataset-controller.js?rev=1600578&r1=1600577&r2=1600578&view=diff
==============================================================================
--- 
jena/Experimental/jena-fuseki2/src/main/webapp/js/app/controllers/dataset-controller.js
 (original)
+++ 
jena/Experimental/jena-fuseki2/src/main/webapp/js/app/controllers/dataset-controller.js
 Thu Jun  5 09:59:32 2014
@@ -7,7 +7,8 @@ define(
         Backbone = require( "backbone" ),
         _ = require( "underscore" ),
         fui = require( "fui" ),
-        DatasetSelectorView = require( "views/dataset-selector" );
+        DatasetSelectorView = require( "views/dataset-selector" ),
+        TabbedViewManagerView = require( "views/tabbed-view-manager" );
 
     var DatasetController = function() {
       this.initEvents();
@@ -22,7 +23,11 @@ define(
 
       /** When the fuseki server is ready, we can list the initial datasets */
       onServerModelReady: function( event ) {
-        new DatasetSelectorView( {model: fui.models.fusekiServer} ).render();
+        fui.views.datasetSelectorView = new DatasetSelectorView( {model: 
fui.models.fusekiServer} )
+        fui.views.datasetSelectorView.render();
+
+        fui.views.tabbedViewManagerView = new TabbedViewManagerView();
+        fui.views.tabbedViewManagerView.render();
       }
 
     } );

Added: 
jena/Experimental/jena-fuseki2/src/main/webapp/js/app/views/tabbed-view-manager.js
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-fuseki2/src/main/webapp/js/app/views/tabbed-view-manager.js?rev=1600578&view=auto
==============================================================================
--- 
jena/Experimental/jena-fuseki2/src/main/webapp/js/app/views/tabbed-view-manager.js
 (added)
+++ 
jena/Experimental/jena-fuseki2/src/main/webapp/js/app/views/tabbed-view-manager.js
 Thu Jun  5 09:59:32 2014
@@ -0,0 +1,59 @@
+/**
+ * Reusable component that encapsulates managing a collection of sub-views as
+ * tabs, with the active tab being selected via the URL query param `tab`.
+ **/
+
+define(
+  function( require ) {
+    "use strict";
+
+    var Marionette = require( "marionette" ),
+        Backbone = require( "backbone" ),
+        _ = require( "underscore" ),
+        fui = require( "fui" ),
+        sprintf = require( "sprintf" ),
+        PageUtils = require( "util/page-utils" );
+
+    var TabbedViewManagerView = Backbone.View.extend( {
+
+      initialize: function(){
+        this._tab = PageUtils.queryParam( "tab" );
+        this._firstRender = false;
+      },
+
+      render: function() {
+        if (!this._firstRender) {
+          this._firstRender = true;
+          this.activateCurrentTab();
+        }
+      },
+
+      /**
+       * Make the tab named as the current tab active. If no named tab, make
+       * the first tab active by default.
+       */
+      activateCurrentTab: function() {
+        var tabs = $(".nav-tabs");
+        var tab = tabs.children().first();
+
+        if (this._tab) {
+          tab = tabs.find( sprintf( "a[href=#%s]", this._tab ) )
+                    .parent();
+        }
+
+        if (!tab.is(".active")) {
+          tabs.children( "li" ).removeClass( "active" );
+          tabs.parent().children(".tab-pane").removeClass("active");
+
+          tab.addClass( "active" );
+          $( tab.children( "a" ).attr( "href" ) ).addClass("active");
+        }
+      }
+
+
+    });
+
+
+    return TabbedViewManagerView;
+  }
+);


Reply via email to