[Groonga-commit] groonga/groonga-admin at a417728 [master] Support drilldown

Back to archive index

Kouhei Sutou null+****@clear*****
Wed Nov 5 00:13:36 JST 2014


Kouhei Sutou	2014-11-05 00:13:36 +0900 (Wed, 05 Nov 2014)

  New Revision: a4177280eb51fd7b2b9a1438c5443def5d724b75
  https://github.com/groonga/groonga-admin/commit/a4177280eb51fd7b2b9a1438c5443def5d724b75

  Message:
    Support drilldown

  Modified files:
    app/scripts/controllers/table-search-controller.js
    app/scripts/groonga-client/response/select.js
    app/styles/main.scss
    app/views/tables/search.html

  Modified: app/scripts/controllers/table-search-controller.js (+27 -0)
===================================================================
--- app/scripts/controllers/table-search-controller.js    2014-11-05 00:13:15 +0900 (91569d4)
+++ app/scripts/controllers/table-search-controller.js    2014-11-05 00:13:36 +0900 (e4c3833)
@@ -21,6 +21,7 @@ angular.module('groongaAdminApp')
       $scope.rawData = [];
       $scope.columns = [];
       $scope.records = [];
+      $scope.drilldowns = [];
       $scope.indexedColumns = [];
       $scope.outputColumns = [];
       $scope.commandLine = '';
@@ -35,6 +36,7 @@ angular.module('groongaAdminApp')
       $scope.search = search;
       $scope.clear  = clear;
       $scope.toggleSort = toggleSort;
+      $scope.selectDrilldown = selectDrilldown;
     }
 
     function packInUseColumns(columns) {
@@ -103,6 +105,22 @@ angular.module('groongaAdminApp')
       search();
     }
 
+    function selectDrilldown(key, value) {
+      var query = $scope.parameters.query || '';
+      if (query.length > 0) {
+        query += ' ';
+      }
+      $scope.parameters.query = query + key + ':' + value;
+
+      var drilldowns = ($scope.parameters.drilldown || '').split(/\s*,\s*/);
+      drilldowns = drilldowns.filter(function(drilldown) {
+        return drilldown !== key;
+      });
+      $scope.parameters.drilldown = drilldowns.join(',');
+
+      search();
+    }
+
     function addOutputColumn(name) {
       var outputColumns = $scope.parameters.output_columns;
       var inUse = true;
@@ -206,6 +224,15 @@ angular.module('groongaAdminApp')
             };
           });
         });
+        $scope.drilldowns = response.drilldowns();
+        ($scope.parameters.drilldown || '')
+          .split(/\s*,\s*/)
+          .filter(function(drilldown) {
+            return drilldown.length > 0;
+          })
+          .forEach(function(drilldown, i) {
+            $scope.drilldowns[i].key = drilldown;
+          });
       });
     }
 

  Modified: app/scripts/groonga-client/response/select.js (+22 -0)
===================================================================
--- app/scripts/groonga-client/response/select.js    2014-11-05 00:13:15 +0900 (4f33b90)
+++ app/scripts/groonga-client/response/select.js    2014-11-05 00:13:36 +0900 (357eb29)
@@ -25,4 +25,26 @@
   Select.prototype.records = function() {
     return this.body()[0].slice(2);
   };
+
+  Select.prototype.drilldowns = function() {
+    return this.body().slice(1).map(function(drilldown) {
+      var columns = drilldown[1].map(function(rawColumn) {
+        return {
+          name: rawColumn[0],
+          type: rawColumn[1]
+        };
+      });
+      return {
+        nTotalRecords: drilldown[0][0],
+        columns: columns,
+        records: drilldown.slice(2).map(function(rawRecord) {
+          var record = {};
+          columns.forEach(function(column, i) {
+            record[column.name] = rawRecord[i];
+          });
+          return record;
+        })
+      };
+    });
+  };
 })();

  Modified: app/styles/main.scss (+8 -0)
===================================================================
--- app/styles/main.scss    2014-11-05 00:13:15 +0900 (19b1684)
+++ app/styles/main.scss    2014-11-05 00:13:36 +0900 (3b124f8)
@@ -3,6 +3,14 @@ $icon-font-path: "../bower_components/bootstrap-sass-official/assets/fonts/boots
 @import "bootstrap-sass-official/assets/stylesheets/_bootstrap.scss";
 // endbower
 
+.sidebar {
+  @extend .col-md-2;
+}
+
+.main-content {
+  @extend .col-md-10;
+}
+
 .table-search-result {
   @extend .table-responsive;
 

  Modified: app/views/tables/search.html (+25 -0)
===================================================================
--- app/views/tables/search.html    2014-11-05 00:13:15 +0900 (cb5c107)
+++ app/views/tables/search.html    2014-11-05 00:13:36 +0900 (e799b04)
@@ -5,6 +5,30 @@
     <li><a href="#/tables/{{table}}">{{table}}</a></li>
     <li class="active">Search</li>
   </ol>
+
+  <div class="sidebar">
+    <div class="panel panel-default"
+         ng-repeat="drilldown in drilldowns track by $index">
+      <div class="panel-heading">
+        <h2 class="panel-title">
+          {{drilldown.key}}({{drilldown.nTotalRecords}})
+        </h2>
+      </div>
+      <div class="panel-body">
+        <ul class="list-group">
+          <li class="list-group-item"
+              ng-repeat="record in drilldown.records track by $index">
+            <a ng-click="selectDrilldown(drilldown.key, record._key)">
+              {{record._key}}
+            </a>
+            <span class="badge">{{record._nsubrecs}}</span>
+          </li>
+        </ul>
+      </div>
+    </div>
+  </div>
+
+  <div class="main-content">
   <div class="alert alert-warning" ng-show="message.length &gt; 0">
     <p>{{message}}</p>
   </div>
@@ -118,4 +142,5 @@
               ng-model="currentPage"
               ng-change="search()">
   </pagination>
+  </div>
 </div>
-------------- next part --------------
HTML����������������������������...
下載 



More information about the Groonga-commit mailing list
Back to archive index