Repository: incubator-blur Updated Branches: refs/heads/console-v2 5066673dd -> 1ffef615f
Finished UI for search tab Project: http://git-wip-us.apache.org/repos/asf/incubator-blur/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-blur/commit/1ffef615 Tree: http://git-wip-us.apache.org/repos/asf/incubator-blur/tree/1ffef615 Diff: http://git-wip-us.apache.org/repos/asf/incubator-blur/diff/1ffef615 Branch: refs/heads/console-v2 Commit: 1ffef615f205f6d6d5de8655f0d5a7c41e0ff13e Parents: 5066673 Author: Chris Rohr <[email protected]> Authored: Thu May 15 09:56:03 2014 -0400 Committer: Chris Rohr <[email protected]> Committed: Thu May 15 09:56:03 2014 -0400 ---------------------------------------------------------------------- contrib/blur-console/ui/.jshintrc | 2 +- contrib/blur-console/ui/Gruntfile.js | 16 +- contrib/blur-console/ui/app/index.html | 1 + .../ui/app/scripts/blurconsole.fake.js | 37 +++- .../ui/app/scripts/blurconsole.model.js | 61 +++--- .../ui/app/scripts/blurconsole.search.js | 189 ++++++++++++++++--- .../ui/app/scripts/blurconsole.shell.js | 24 +-- .../ui/app/scripts/blurconsole.utils.js | 20 +- contrib/blur-console/ui/app/styles/_colors.scss | 4 + .../blur-console/ui/app/styles/blurconsole.scss | 15 +- .../ui/app/styles/blurconsole.search.scss | 11 ++ .../blur-console/ui/app/views/search.tpl.html | 32 ++-- contrib/blur-console/ui/package.json | 12 +- contrib/blur-console/ui/test/bower.json | 3 +- contrib/blur-console/ui/test/index.html | 28 ++- contrib/blur-console/ui/test/spec/utils.js | 5 +- 16 files changed, 357 insertions(+), 103 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/.jshintrc ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/.jshintrc b/contrib/blur-console/ui/.jshintrc index 287bc43..abc9b0a 100644 --- a/contrib/blur-console/ui/.jshintrc +++ b/contrib/blur-console/ui/.jshintrc @@ -3,7 +3,7 @@ "browser": true, "esnext": true, "bitwise": true, - "camelcase": true, + "camelcase": false, "curly": true, "eqeqeq": true, "immed": true, http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/Gruntfile.js ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/Gruntfile.js b/contrib/blur-console/ui/Gruntfile.js index 8a7460e..65677b2 100644 --- a/contrib/blur-console/ui/Gruntfile.js +++ b/contrib/blur-console/ui/Gruntfile.js @@ -152,8 +152,17 @@ module.exports = function (grunt) { } }, - - + // Code coverage options + blanket_mocha: { + test: { + src: ['test/index.html'], + options : { + threshold : 60, + log : true, + logErrors: true + } + } + }, // Compiles Sass to CSS and generates necessary files if requested compass: { @@ -397,7 +406,8 @@ module.exports = function (grunt) { grunt.task.run([ 'connect:test', - 'mocha' + 'mocha', + 'blanket_mocha' ]); }); http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/app/index.html ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/app/index.html b/contrib/blur-console/ui/app/index.html index 8757df1..0a79460 100644 --- a/contrib/blur-console/ui/app/index.html +++ b/contrib/blur-console/ui/app/index.html @@ -40,6 +40,7 @@ under the License. <link rel="stylesheet" href="styles/blurconsole.dashboard.css"> <link rel="stylesheet" href="styles/blurconsole.schema.css"> <link rel="stylesheet" href="styles/blurconsole.queries.css"> + <link rel="stylesheet" href="styles/blurconsole.search.css"> <!-- endbuild --> <script src="bower_components/modernizr/modernizr.js"></script> http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/app/scripts/blurconsole.fake.js ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/app/scripts/blurconsole.fake.js b/contrib/blur-console/ui/app/scripts/blurconsole.fake.js index 234bd04..aa85975 100644 --- a/contrib/blur-console/ui/app/scripts/blurconsole.fake.js +++ b/contrib/blur-console/ui/app/scripts/blurconsole.fake.js @@ -33,7 +33,7 @@ blurconsole.fake = (function() { records = randomNumber(10000)+1000; enabled = randomBoolean(); - data.push({cluster:cluster, name:'testtable'+i, enabled:enabled, rows:rows, records:records}); + data.push({cluster:cluster, name:'testtable'+i, enabled:enabled, rows:rows, records:records, families: blurconsole.utils.keys(getSchema('testtable'+i))}); } return data; @@ -152,12 +152,33 @@ blurconsole.fake = (function() { callback(terms); }; - - sendSearch = function(query, table, args, callback) { - console.log('sending fake search [' + query + '] on table [' + table + ']'); - - - }; + + sendSearch = function(query, table, args, callback) { + console.log('sending fake search [' + query + '] on table [' + table + ']'); + + var fams = args.families, results = {}, total = randomNumber(1000); + + $.each(fams, function(i, fam){ + var cols = randomNumber(30, true), toFetch = args.fetch; + if (total - args.start < toFetch) { + toFetch = total - args.start; + } + results[fam] = []; + for (var r = 0; r < randomNumber(toFetch); r++) { + var row = {}; + for (var c=0; c < cols; c++) { + row['col'+c] = randomString(); + } + results[fam].push(row); + } + }); + + callback({ + families: args.families, + results: results, + total: total + }); + }; randomNumber = function(max, includeZero) { var random = Math.random()*max; @@ -195,6 +216,6 @@ blurconsole.fake = (function() { deleteTable : deleteTable, getSchema : getSchema, findTerms : findTerms, - sendSearch : sendSearch + sendSearch : sendSearch }; }()); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/app/scripts/blurconsole.model.js ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/app/scripts/blurconsole.model.js b/contrib/blur-console/ui/app/scripts/blurconsole.model.js index f696506..c79900e 100644 --- a/contrib/blur-console/ui/app/scripts/blurconsole.model.js +++ b/contrib/blur-console/ui/app/scripts/blurconsole.model.js @@ -34,7 +34,7 @@ blurconsole.model = (function() { tables, metrics, nodes, queries, search, initModule, nodePoller, tablePoller, queryPerformancePoller, queryPoller; tables = (function() { - var getClusters, getEnabledTables, getDisabledTables, isDataLoaded, disableTable, enableTable, deleteTable, getSchema, findTerms, getAllEnabledTables; + var getClusters, getEnabledTables, getDisabledTables, isDataLoaded, disableTable, enableTable, deleteTable, getSchema, findTerms, getAllEnabledTables, getFamilies; getClusters = function() { if (stateMap.tableNameMap === null) { @@ -100,6 +100,19 @@ blurconsole.model = (function() { return configMap.poller.getSchema(tableName); }; + getFamilies = function(tableName) { + var table; + + $.each(stateMap.tableNameMap, function(idx, t) { + if (t.name === tableName) { + table = t; + return false; + } + }); + + return table.families; + }; + findTerms = function(table, family, column, startsWith) { configMap.poller.findTerms(table, family, column, startsWith, function(terms) { $.gevent.publish('terms-updated', terms); @@ -116,7 +129,8 @@ blurconsole.model = (function() { deleteTable : deleteTable, getSchema : getSchema, findTerms : findTerms, - getAllEnabledTables : getAllEnabledTables + getAllEnabledTables : getAllEnabledTables, + getFamilies : getFamilies }; }()); @@ -350,14 +364,20 @@ blurconsole.model = (function() { }()); search = (function() { - var results = {}, families = {}, currentQuery, currentTable, currentArgs = {start: 0, fetch: 10, rowRecordOption: 'rowrow', families: null}, - runSearch, getResults, getFamilies, loadMoreResults, + var results = {}, totalRecords = 0, currentQuery, currentTable, currentArgs = {start: 0, fetch: 10, rowRecordOption: 'rowrow', families: null}, + runSearch, getResults, getFamilies, loadMoreResults, getTotal, sendSearch, processResults; runSearch = function( query, table, searchArgs ) { + var parsedFamilies = blurconsole.utils.findFamilies(query); + currentQuery = query; currentTable = table; currentArgs = $.extend(currentArgs, searchArgs); + if (parsedFamilies.length > 0) { + currentArgs.families = parsedFamilies; + } + results = {}; sendSearch(); }; @@ -365,13 +385,15 @@ blurconsole.model = (function() { return results; }; - getFamilies = function() { - return families; + getTotal = function() { + return totalRecords; }; - loadMoreResults = function(family, start, fetch) { - currentArgs.start = start; - currentArgs.fetch = fetch; + loadMoreResults = function(family) { + var alreadyLoadedResults = results[family]; + + currentArgs.start = alreadyLoadedResults ? alreadyLoadedResults.length : 0; + currentArgs.fetch = 10; currentArgs.families = [family]; sendSearch(); }; @@ -381,33 +403,27 @@ blurconsole.model = (function() { }; processResults = function(data) { - var dataFamilies, dataResults, tmpFamilies = {}; + var dataFamilies, dataResults; dataFamilies = data.families; dataResults = data.results; + totalRecords = data.total; - if (dataFamilies !== null) { - $.each(dataFamilies, function(f, family){ - tmpFamilies[family] = false; - }); - } - - if (dataResults !== null) { + if (typeof dataResults !== 'undefined' && dataResults !== null) { $.each(dataResults, function(family, resultList){ - tmpFamilies[family] = true; var tmpList = results[family] || []; results[family] = tmpList.concat(resultList); }); } - families = tmpFamilies; - $.gevent.publish('results-updated'); + $.gevent.publish('results-updated', [dataFamilies]); }; return { runSearch: runSearch, getResults: getResults, getFamilies: getFamilies, - loadMoreResults: loadMoreResults + loadMoreResults: loadMoreResults, + getTotal: getTotal }; }()); @@ -462,6 +478,7 @@ blurconsole.model = (function() { tables : tables, metrics: metrics, nodes : nodes, - queries : queries + queries : queries, + search : search }; }()); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/app/scripts/blurconsole.search.js ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/app/scripts/blurconsole.search.js b/contrib/blur-console/ui/app/scripts/blurconsole.search.js index 3521fcd..b94e7cf 100644 --- a/contrib/blur-console/ui/app/scripts/blurconsole.search.js +++ b/contrib/blur-console/ui/app/scripts/blurconsole.search.js @@ -16,11 +16,23 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -/*global blurconsole:false */ +/*global blurconsole:false, confirm:false */ blurconsole.search = (function () { 'use strict'; var configMap = { - view : 'views/search.tpl.html' + view : 'views/search.tpl.html', + superQueryMap: { + 'rowrow' : 'Search Row / Retrieve Row', + 'recordrow' : 'Search Record / Retrieve Row', + 'recordrecord' : 'Search Record / Retrieve Record' + }, + optionsHtml: + '<label for="superQuery">Search & Retrieve</label>' + + '<select id="superQuery">' + + '<option value="rowrow">Search Row / Retrieve Row</option>' + + '<option value="recordrow">Search Record / Retrieve Row</option>' + + '<option value="recordrecord">Search Record / Retrieve Record</option>' + + '</select>' }, stateMap = { $container : null, @@ -33,7 +45,9 @@ blurconsole.search = (function () { $rowRecordOption : 'rowrow' }, jqueryMap = {}, - setJqueryMap, initModule, unloadModule, drawResults, registerPageEvents, unregisterPageEvents, sendSearch, showOptions, reviewTables, loadTableList; + setJqueryMap, initModule, unloadModule, drawResultHolders, drawResults, registerPageEvents, unregisterPageEvents, + sendSearch, showOptions, reviewTables, loadTableList, getMoreData, fixPanelWidths, updateOptionPopover, updateOptionDisplay, + persistOptions; setJqueryMap = function() { var $container = stateMap.$container; @@ -42,34 +56,91 @@ blurconsole.search = (function () { $queryField : $('#queryField'), $tableField : $('#tableChooser'), $tableSelectorStatusOption : $('#statusOption'), - $tableWarning : $('#tableGoneWarning') + $tableWarning : $('#tableGoneWarning'), + $resultsHolder : $('#results'), + $optionsDisplay : $('#searchOptionsDisplay'), + $countHolder : $('#resultCount') }; }; registerPageEvents = function() { $('#searchTrigger').on('click', sendSearch); - $('#searchOptionsTrigger').on('click', showOptions); + $('#results').on('shown.bs.collapse', '.panel-collapse:not(.loaded)', getMoreData); + $('#results').on('click', '.nextPage', getMoreData); + $('#searchOptionsTrigger').popover({ + html: true, + placement: 'bottom', + title: 'Extra Search Options', + container: 'body', + content: configMap.optionsHtml + }); + $('#searchOptionsTrigger').on('shown.bs.popover', updateOptionPopover); + $(document).on('change', '.popover select', persistOptions); }; unregisterPageEvents = function() { $('#searchTrigger').off('click'); - $('#searchOptionsTrigger').off('click'); + $('#results').off('shown.bs.collapse'); + $('#results').off('click'); + $('#searchOptionsTrigger').popover('destroy'); + $('#searchOptionsTrigger').off('shown.bs.popover'); + $(document).off('change'); + }; + + updateOptionDisplay = function() { + var displayText = ''; + + displayText += configMap.superQueryMap[stateMap.$rowRecordOption]; + + jqueryMap.$optionsDisplay.html(displayText); + }; + + updateOptionPopover = function() { + if ($('#superQuery').length > 0) { + $('#superQuery').val(stateMap.$rowRecordOption); + } + }; + + persistOptions = function() { + var resendSearch = false; + if (jqueryMap.$resultsHolder.children().length > 0) { + if (confirm('You have existing results on the screen, changing the search options will erase your results. Continue?')) { + resendSearch = true; + } else { + $('#superQuery').val(stateMap.$rowRecordOption); + return false; + } + } + stateMap.$rowRecordOption = $('#superQuery').val(); + if (resendSearch) { + sendSearch(); + } + updateOptionDisplay(); + $('#searchOptionsTrigger').popover('hide'); }; sendSearch = function() { - // Save options - stateMap.currentTable = jqueryMap.$tableField.val(); - stateMap.currentQuery = jqueryMap.$queryField.val(); + stateMap.$currentTable = jqueryMap.$tableField.val(); + stateMap.$currentQuery = jqueryMap.$queryField.val(); blurconsole.shell.changeAnchorPart({ tab: 'search', _tab: { - query: encodeURIComponent(stateMap.currentQuery), - table: stateMap.currentTable + query: encodeURIComponent(stateMap.$currentQuery), + table: stateMap.$currentTable, + rr: stateMap.$rowRecordOption } }); - blurconsole.model.search.runSearch(stateMap.currentQuery, stateMap.currentTable, {start: 0, fetch: 10}); + drawResultHolders(); + + blurconsole.model.search.runSearch(stateMap.$currentQuery, stateMap.$currentTable, {start: 0, fetch: 10}); + }; + + getMoreData = function() { + var family = $(this).attr('href') ? $(this).attr('href').substring(1) : $(this).attr('id'); + blurconsole.model.search.loadMoreResults(family); + return false; }; showOptions = function() { @@ -79,11 +150,11 @@ blurconsole.search = (function () { reviewTables = function() { var tableFound = false, tableMap; - if (stateMap.currentTable) { + if (stateMap.$currentTable) { tableMap = blurconsole.model.tables.getAllEnabledTables(); $.each(tableMap, function(cluster, tables){ var tableList = $.map(tables, function(t){ return t.name; }); - if (tableList.indexOf(stateMap.currentTable) > -1) { + if (tableList.indexOf(stateMap.$currentTable) > -1) { tableFound = true; } }); @@ -92,13 +163,83 @@ blurconsole.search = (function () { if (tableFound) { jqueryMap.$tableWarning.hide(); loadTableList(); - } else { + } else if (stateMap.$currentTable) { jqueryMap.$tableWarning.show(); + } else { + loadTableList(); } }; - drawResults = function() { + drawResultHolders = function() { + var familyMarkup = '', allFamilies, extraFamilies = [], parsedFamilies = blurconsole.utils.findFamilies(stateMap.$currentQuery), sortedFamilies; + + jqueryMap.$resultsHolder.html(''); + + // Redraw families + allFamilies = blurconsole.model.tables.getFamilies(stateMap.$currentTable); + extraFamilies = blurconsole.utils.reject(allFamilies, function(fam){ return parsedFamilies.indexOf(fam) >= 0; }); + parsedFamilies.sort(); + extraFamilies.sort(); + + sortedFamilies = parsedFamilies.concat(extraFamilies); + + $.each(sortedFamilies, function(i, fam) { + var famId = blurconsole.browserUtils.cleanId(fam); + familyMarkup += '<div class="panel panel-default"><div class="panel-heading">'; + familyMarkup += '<h4 class="panel-title"><a data-toggle="collapse" data-parent="#results" href="#' + famId + '">' + fam + '</a></h4></div>'; + familyMarkup += '<div id="' + famId + '" class="panel-collapse collapse' + (parsedFamilies.indexOf(fam) >= 0 ? ' in' : '') + '">'; + familyMarkup += '<div class="panel-body"><img src="images/ajax-loader.gif"></div></div></div>'; + }); + + jqueryMap.$resultsHolder.html(familyMarkup); + fixPanelWidths(); + }; + + fixPanelWidths = function() { + var allPanels = jqueryMap.$resultsHolder.find('.panel-collapse'); + if (allPanels.length > 0) { + var width = $(allPanels[0]).width(); + allPanels.width(width); + } + }; + + drawResults = function(evt, families) { + var results = blurconsole.model.search.getResults(); + jqueryMap.$countHolder.html('<small>Found ' + blurconsole.model.search.getTotal() + ' total results</small>'); + + $.each(families, function(i, fam) { + var famResults = results[fam], + famId = '#' + blurconsole.browserUtils.cleanId(fam), + famHolder = $(famId + ' .panel-body'), table = '', cols; + + cols = blurconsole.utils.keys(famResults[0]); + cols.sort(); + + table += '<table class="table table-condensed table-hover table-bordered"><thead><tr>'; + $.each(cols, function(i, col) { + table += '<th>' + col + '</th>'; + }); + table += '</tr></thead><tbody>'; + $.each(famResults, function(i, row) { + table += '<tr>'; + $.each(cols, function(c, col) { + table += '<td>' + (row[col] || '') + '</td>'; + }); + table += '</tr>'; + }); + table += '</tbody></table>'; + + if (famResults.length < blurconsole.model.search.getTotal()) { + table += '<div class="pull-right"><a href="' + famId + '" class="btn btn-primary nextPage">Load More...</a></div>'; + } + + famHolder.html(table); + if (!$(famId).hasClass('loaded')) { + $(famId).addClass('loaded'); + } + }); + fixPanelWidths(); }; loadTableList = function() { @@ -112,7 +253,7 @@ blurconsole.search = (function () { optGroupString = '<optgroup label="' + cluster + '">'; $.each(tables, function(t, table){ - optGroupString += '<option value="' + table.name + '"' + (table.name === stateMap.currentTable ? ' selected' : '') + '>' + table.name + '</option>'; + optGroupString += '<option value="' + table.name + '"' + (table.name === stateMap.$currentTable ? ' selected' : '') + '>' + table.name + '</option>'; }); optGroupString += '</optgroup>'; jqueryMap.$tableField.append(optGroupString); @@ -126,16 +267,22 @@ blurconsole.search = (function () { stateMap.$container = $container; setJqueryMap(); $.gevent.subscribe(jqueryMap.$container, 'tables-updated', reviewTables); + $.gevent.subscribe(jqueryMap.$container, 'results-updated', drawResults); registerPageEvents(); loadTableList(); var startupMap = $.uriAnchor.makeAnchorMap(); - stateMap.currentQuery = startupMap._tab.query; - jqueryMap.$queryField.val(stateMap.currentQuery); - stateMap.currentTable = startupMap._tab.table; - jqueryMap.$tableField.val(stateMap.currentTable); + if (startupMap._tab) { + stateMap.$currentQuery = startupMap._tab.query; + jqueryMap.$queryField.val(stateMap.$currentQuery); + stateMap.$currentTable = startupMap._tab.table; + jqueryMap.$tableField.val(stateMap.$currentTable); + stateMap.$rowRecordOption = startupMap._tab.rr; + } + updateOptionDisplay(); + stateMap.loaded = true; }); return true; }; http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/app/scripts/blurconsole.shell.js ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/app/scripts/blurconsole.shell.js b/contrib/blur-console/ui/app/scripts/blurconsole.shell.js index de8f327..ee19283 100644 --- a/contrib/blur-console/ui/app/scripts/blurconsole.shell.js +++ b/contrib/blur-console/ui/app/scripts/blurconsole.shell.js @@ -20,7 +20,7 @@ under the License. /** * blurconsole.shell.js - * Shell module for Blur Console + * Shell module for Blur Console */ /* global blurconsole:false, $:false */ blurconsole.shell = (function () { @@ -28,7 +28,7 @@ blurconsole.shell = (function () { var configMap = { anchorSchemaMap : { tab : { dashboard : true, tables : true, queries : true, search : true }, - _tab : { query: true, table: true } + _tab : { query: true, table: true, rr: true } }, defaultTab : 'dashboard', allTabs : ['dashboard', 'tables', 'queries', 'search'] @@ -58,17 +58,19 @@ blurconsole.shell = (function () { switchView = function ( tab ) { var i; - for ( i = 0; i < configMap.allTabs.length; i++ ) { - if (blurconsole[configMap.allTabs[i]]) { - blurconsole[configMap.allTabs[i]].unloadModule(); + if (stateMap.currentTab !== tab) { + for ( i = 0; i < configMap.allTabs.length; i++ ) { + if (blurconsole[configMap.allTabs[i]]) { + blurconsole[configMap.allTabs[i]].unloadModule(); + } } - } - stateMap.currentTab = tab; - jqueryMap.$sideNavTabs.removeClass('active'); - jqueryMap.$sideNavTabs.filter('a[href$="' + tab + '"]').addClass('active'); - if (blurconsole[tab]) { - blurconsole[tab].initModule( jqueryMap.$container ); + stateMap.currentTab = tab; + jqueryMap.$sideNavTabs.removeClass('active'); + jqueryMap.$sideNavTabs.filter('a[href$="' + tab + '"]').addClass('active'); + if (blurconsole[tab]) { + blurconsole[tab].initModule( jqueryMap.$container ); + } } return true; http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/app/scripts/blurconsole.utils.js ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/app/scripts/blurconsole.utils.js b/contrib/blur-console/ui/app/scripts/blurconsole.utils.js index f2aab55..216079c 100644 --- a/contrib/blur-console/ui/app/scripts/blurconsole.utils.js +++ b/contrib/blur-console/ui/app/scripts/blurconsole.utils.js @@ -20,7 +20,7 @@ under the License. /*global blurconsole:false */ blurconsole.utils = (function(){ 'use strict'; - var inject, unique, equals, findFamilies; + var inject, unique, equals, keys, findFamilies, reject; inject = function(collection, initial, block) { if (collection === null || collection.length === 0) { @@ -55,6 +55,10 @@ blurconsole.utils = (function(){ return JSON.stringify(obj1) === JSON.stringify(obj2); }; + keys = function(map) { + return $.map(map, function(v, key){ return key; }); + }; + findFamilies = function(query) { // Determine regex to find column families in lucene query var matches = query.match(/[^ \(\)\+\-]+(\w+)\.\w+:/g); @@ -65,11 +69,23 @@ blurconsole.utils = (function(){ return families; }; + reject = function(collection, block) { + var newArray = []; + $.each(collection, function(i, item){ + if (!block(item)) { + newArray.push(item); + } + }); + return newArray; + }; + return { inject: inject, reduce: inject, unique: unique, equals: equals, - findFamilies: findFamilies + keys: keys, + findFamilies: findFamilies, + reject: reject }; }()); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/app/styles/_colors.scss ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/app/styles/_colors.scss b/contrib/blur-console/ui/app/styles/_colors.scss new file mode 100644 index 0000000..82a2b31 --- /dev/null +++ b/contrib/blur-console/ui/app/styles/_colors.scss @@ -0,0 +1,4 @@ +$silver: #CCC; +$black: #000; +$san-marino: #4c66a4; +$white: #FFF; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/app/styles/blurconsole.scss ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/app/styles/blurconsole.scss b/contrib/blur-console/ui/app/styles/blurconsole.scss index 3f387a2..3c0729f 100644 --- a/contrib/blur-console/ui/app/styles/blurconsole.scss +++ b/contrib/blur-console/ui/app/styles/blurconsole.scss @@ -21,11 +21,12 @@ under the License. $icon-font-path: "/bower_components/twbs-bootstrap-sass/vendor/assets/fonts/bootstrap/"; @import 'twbs-bootstrap-sass/vendor/assets/stylesheets/bootstrap'; +@import 'colors'; .browsehappy { margin: 0.2em 0; - background: #ccc; - color: #000; + background: $silver; + color: $black; padding: 0.2em 0; } @@ -40,9 +41,9 @@ body { /* Top Navigation */ nav.navbar-fixed-top { - background-color: #4c66a4; + background-color: $san-marino; .navbar-brand { - color: #fff; + color: $white; } } @@ -64,14 +65,14 @@ nav.navbar-fixed-top { display: block; a { padding: 10px; - color: #ccc; + color: $silver; margin-right: 0; font-size: 20px; position: relative; display: block; &.active { - background-color: #fff; - color: #000; + background-color: $white; + color: $black; } } } http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/app/styles/blurconsole.search.scss ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/app/styles/blurconsole.search.scss b/contrib/blur-console/ui/app/styles/blurconsole.search.scss new file mode 100644 index 0000000..1e4f2b8 --- /dev/null +++ b/contrib/blur-console/ui/app/styles/blurconsole.search.scss @@ -0,0 +1,11 @@ +#results { + .panel-collapse { + padding: 5px; + overflow-x: auto; + } +} + +#resultCount { + padding-left: 30px; + font-style: italic; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/app/views/search.tpl.html ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/app/views/search.tpl.html b/contrib/blur-console/ui/app/views/search.tpl.html index 07e684e..3a58fe4 100644 --- a/contrib/blur-console/ui/app/views/search.tpl.html +++ b/contrib/blur-console/ui/app/views/search.tpl.html @@ -21,22 +21,28 @@ under the License. <div id="tableGoneWarning" class="alert alert-warning" style="display:none"><strong>Heads Up!</strong> The table that is currently being used for search is no longer enabled!</div> <div class="well"> <div class="container-fluid"> - <div class="col-xs-6"> - <div class="input-group"> - <input type="text" class="form-control" placeholder="Query" id="queryField"> - <span class="input-group-btn"> - <button class="btn btn-default" type="button" id="searchTrigger">Go!</button> - </span> + <div class="row"> + <div class="col-xs-6"> + <div class="input-group"> + <input type="text" class="form-control" placeholder="Query" id="queryField"> + <span class="input-group-btn"> + <button class="btn btn-default" type="button" id="searchTrigger">Go!</button> + </span> + </div> </div> + <div class="col-xs-2"> + <select class="form-control" id="tableChooser"> + <option value="" id="statusOption">Loading Tables....</option> + </select> + </div> + <button class="btn btn-default" type="button" id="searchOptionsTrigger"> + <i class="glyphicon glyphicon-cog"></i> + </button> + <span id="searchOptionsDisplay"></span> </div> - <div class="col-xs-2"> - <select class="form-control" id="tableChooser"> - <option value="" id="statusOption">Loading Tables....</option> - </select> + <div class="row"> + <div id="resultCount" class="col-xs-2"></div> </div> - <button class="btn btn-default" type="button" id="searchOptionsTrigger"> - <i class="glyphicon glyphicon-cog"></i> - </button> </div> </div> <div id="results"> http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/package.json ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/package.json b/contrib/blur-console/ui/package.json index 5ec6233..5c3c36a 100644 --- a/contrib/blur-console/ui/package.json +++ b/contrib/blur-console/ui/package.json @@ -1,6 +1,11 @@ { - "name": "ui", - "version": "0.0.0", + "name": "blur-console", + "version": "2.0.0", + "description": "Managment and Monitoring Console for Apache Blur", + "repository": "https://git-wip-us.apache.org/repos/asf/incubator-blur.git", + "directories": { + "test": "test" + }, "dependencies": {}, "devDependencies": { "grunt": "~0.4.1", @@ -26,7 +31,8 @@ "grunt-concurrent": "~0.4.0", "load-grunt-tasks": "~0.2.0", "time-grunt": "~0.2.0", - "jshint-stylish": "~0.1.3" + "jshint-stylish": "~0.1.3", + "grunt-blanket-mocha":"~0.4.0" }, "engines": { "node": ">=0.8.0" http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/test/bower.json ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/test/bower.json b/contrib/blur-console/ui/test/bower.json index 5453ee2..4a7bafd 100644 --- a/contrib/blur-console/ui/test/bower.json +++ b/contrib/blur-console/ui/test/bower.json @@ -3,7 +3,8 @@ "private": true, "dependencies": { "chai": "~1.8.0", - "mocha": "~1.14.0" + "mocha": "~1.14.0", + "blanket":"~1.1.5" }, "devDependencies": {} } http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/test/index.html ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/test/index.html b/contrib/blur-console/ui/test/index.html index f04325e..569cdc0 100644 --- a/contrib/blur-console/ui/test/index.html +++ b/contrib/blur-console/ui/test/index.html @@ -24,24 +24,36 @@ under the License. <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Mocha Spec Runner</title> <link rel="stylesheet" href="bower_components/mocha/mocha.css"> -</head> -<body> - <div id="mocha"></div> - <script src="bower_components/mocha/mocha.js"></script> - <script>mocha.setup('bdd')</script> + <script src="bower_components/chai/chai.js"></script> + <script src="bower_components/mocha/mocha.js"></script> + + <!-- include source files here... --> + <script src="bower_components/jquery/dist/jquery.js"></script> + <script src="app/scripts/blurconsole.js"></script> + <script src="app/scripts/blurconsole.utils.js"></script> + + <script src="bower_components/blanket/dist/qunit/blanket.js" data-cover-flags="branchTracking" data-cover-only="//scripts/"></script> + <script src="../node_modules/grunt-blanket-mocha/support/mocha-blanket.js"></script> + <script> var assert = chai.assert; var expect = chai.expect; var should = chai.should(); - </script> - <!-- include source files here... --> - <script src="scripts/blurconsole.utils.js"></script> + mocha.setup('bdd'); + + if (window.PHANTOMJS) { + blanket.options("reporter", "../node_modules/grunt-blanket-mocha/support/grunt-reporter.js"); + } + </script> <!-- include spec files here... --> <script src="spec/test.js"></script> <script src="spec/utils.js"></script> +</head> +<body> + <div id="mocha"></div> <script>mocha.run()</script> </body> http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/1ffef615/contrib/blur-console/ui/test/spec/utils.js ---------------------------------------------------------------------- diff --git a/contrib/blur-console/ui/test/spec/utils.js b/contrib/blur-console/ui/test/spec/utils.js index 7fa9665..927567d 100644 --- a/contrib/blur-console/ui/test/spec/utils.js +++ b/contrib/blur-console/ui/test/spec/utils.js @@ -17,16 +17,15 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -/* global describe, it */ +/* global describe, it, assert, blurconsole */ (function () { 'use strict'; - var assert = require("assert"); describe('Test blurconsole.utils', function () { describe('inject', function () { it('[1,2,3,4,5] should be 15 with simple summing', function () { - assert(blurconsole.utils.inject([1,2,3,4,5], 0, function(sum, item){ return sum + item; })); + assert(blurconsole.utils.inject([1,2,3,4,5], 0, function(sum, item){ return sum + item; })); }); }); });
