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 > 0"> <p>{{message}}</p> </div> @@ -118,4 +142,5 @@ ng-model="currentPage" ng-change="search()"> </pagination> + </div> </div> -------------- next part -------------- HTML����������������������������... 下載