diff options
Diffstat (limited to 'modules-available/statistics/templates/filterbox.html')
-rw-r--r-- | modules-available/statistics/templates/filterbox.html | 322 |
1 files changed, 91 insertions, 231 deletions
diff --git a/modules-available/statistics/templates/filterbox.html b/modules-available/statistics/templates/filterbox.html index 07aa7320..f62c4d7c 100644 --- a/modules-available/statistics/templates/filterbox.html +++ b/modules-available/statistics/templates/filterbox.html @@ -1,201 +1,104 @@ -<div id="modal-add-filter" class="modal fade" role="dialog" style="position: absolute"> - <div class="modal-dialog" role="document"> - <div class="modal-content"> - <div class="modal-header"> - <b>{{lang_add_filter}}</b> - </div> - <form class="form-inline center" onsubmit="$('#add-btn').click(); return false"> - <div class="modal-body"> - <div class="form-group"> - <select id="columnSelect" name="column" class="form-control col-4-xs"> </select> - </div> - <div class="form-group"> - <select id="operatorSelect" name="operator" class="form-control col-4-xs"> </select> - </div> - <div class="form-group"> - <input name="argument" id="argumentInput" class="form-control col-4-xs"> - <select name="argument" id="argumentSelect" class="form-control col-4-xs"> </select> - </div> +<a href="#top" class="btn btn-default to-top-btn"><span class="glyphicon glyphicon-menu-up"></span></a> +<h1>{{lang_moduleHeading}}</h1> + +<form id="query-form" method="GET" action="?do=statistics" role="form"> + <input type="hidden" name="show" value="{{show}}"> + <input type="hidden" name="do" value="statistics"> + <div class="btn-group pull-right"> + <button type="submit" hidden><!-- first button, so hitting enter in the form fields doesn't jump to summary --> + <button class="btn btn-default {{summaryButtonClass}}" type="submit" name="show" value="summary" + {{perms.view.summary.disabled}}> + <span class="glyphicon glyphicon-stats"></span> + {{lang_showVisualization}} + </button> + <button class="btn btn-default {{listButtonClass}}" type="submit" name="show" value="list" + {{perms.view.list.disabled}}> + <span class="glyphicon glyphicon-list"></span> + {{lang_showList}} + </button> + </div> + + <h3>{{lang_labelFilter}}</h3> + <div class="filter-list"> + {{#columns}} + <div class="{{collapse}} row filter-row" id="filter-{{key}}"> + <div class="col-sm-4 col-xs-12"> + <div class="checkbox checkbox-inline text-nowrap"> + <input id="check-{{key}}" type="checkbox" name="filter[{{key}}]" value="1" class="filter-enable" + {{checked}}> + <label for="check-{{key}}">{{name}}</label> </div> - <div class="modal-footer"> - <button type="button" class="btn btn-default" data-dismiss="modal">{{lang_cancel}}</button> - <button id="add-btn" type="button" class="btn btn-success" onclick="addFilterFromForm()"> - <span class="glyphicon glyphicon-plus"></span> - {{lang_add}} - </button> - </div> - </form> + </div> + <div class="col-sm-2 col-xs-3"> + <select name="op[{{key}}]" class="form-control enable-check op"> + {{#op}} + <option {{selected}}>{{op}}</option> + {{/op}} + </select> + </div> + <div class="col-sm-6 col-xs-9"> + {{#input}} + <input name="arg[{{key}}]" type="{{.}}" class="form-control enable-check {{inputclass}} arg" + value="{{currentvalue}}" placeholder="{{placeholder}}"> + {{/input}} + {{#enum}} + <select name="arg[{{key}}]" class="form-control enable-check arg"> + {{#values}} + <option value="{{key}}" {{disabled}} {{selected}}>{{value}}</option> + {{/values}} + </select> + {{/enum}} + </div> </div> + <div class="clearfix"></div><!-- fixes jumping around of items on firefox --> + {{/columns}} </div> -</div> - -<a href="#top" class="btn btn-default to-top-btn"><span class="glyphicon glyphicon-menu-up"></span></a> - - -<div class="col-md-12"> - <!-- use GET here, to avoid the "resend form?" confirmation, and anyway this is stateless, so GET makes more sense --> - <form id="queryForm" method="GET" action="?do=Statistics" class="" role="form"> - <input type="hidden" name="show" value="{{show}}"> - <button type="submit" hidden></button> - - - <div class="btn-group pull-right"> - <button class="btn btn-default {{statButtonClass}}" type="submit" name="show" value="summary" {{perms.view.summary.disabled}}> - <span class="glyphicon glyphicon-stats"></span> - {{lang_showVisualization}} + <div class="row"> + <div class="col-md-12 col-sm-10 col-xs-12"> + <button type="submit" class="btn btn-primary pull-right"> + <span class="glyphicon glyphicon-ok"></span> + {{lang_apply}} </button> - <button class="btn btn-default {{listButtonClass}}" type="submit" name="show" value="list" {{perms.view.list.disabled}}> - <span class="glyphicon glyphicon-list"></span> - {{lang_showList}} + <button type="button" class="btn btn-default" id="filter-expand"> + <span class="glyphicon glyphicon-arrow-down"></span> + {{lang_more}} </button> </div> - <h1>{{lang_moduleHeading}}</h1> - - <br/> - - <input type="hidden" name="do" value="statistics"> - <input type="hidden" name="sortColumn" id="sortColumn" value="{{sortColumn}}"/> - <input type="hidden" name="sortDirection" id="sortDirection" value="{{sortDirection}}"/> - - <label for="filterInput">{{lang_labelFilter}}</label> - <div class="row"> - <div class="col-md-12"> - <div class="input-group"> - <input type="text" name="filters" class="" id="filterInput"/> - <span class="input-group-btn" style=" width: 1%; padding-bottom: 5px;"> - <button type="button" class="btn btn-success" onclick="popupFilter(null)"> - <span class="glyphicon glyphicon-plus"></span> - {{lang_add_filter}} - </button> - </span> - </div> - </div> - </div> - - <br/> - </form> -</div> + </div> + <div class="clearfix slx-space"></div> +</form> <script type="application/javascript"><!-- -var filterSelectize; - -var slxFilterNames = { - machineuuid: '{{lang_uuid}}', - macaddr: '{{lang_macAddr}}', - firstseen: '{{lang_firstSeen}}', - lastseen: '{{lang_lastSeen}}', - lastboot: '{{lang_lastBoot}}', - logintime: '{{lang_lastLogin}}', - realcores: '{{lang_cores}}', - systemmodel: '{{lang_model}}', - cpumodel: '{{lang_cpuModel}}', - hddgb: '{{lang_tmpGb}}', - gbram: '{{lang_gbRam}}', - kvmstate: '{{lang_kvmSupport}}', - badsectors: '{{lang_reallocatedSectors}}', - clientip: '{{lang_ip}}', - state: '{{lang_usageState}}', - location: '{{lang_location}}', - currentuser: '{{lang_currentUser}}', - subnet: '{{lang_subnet}}', - runtime: '{{lang_runtimeHours}}', - hostname: '{{lang_hostname}}', - live_swapfree: '{{lang_swapFree}}', - live_memfree: '{{lang_memFree}}', - live_tmpfree: '{{lang_tmpFree}}' -}; - -slxLocations = {{{locations}}}; - -var slxFilterDel = '{{delimiter}}'; -var $modal, $queryForm; - - document.addEventListener("DOMContentLoaded", function () { - /* some objects */ - var $columnSelect = $('#columnSelect'); - $modal = $('#modal-add-filter'); - $queryForm = $('#queryForm'); - - var columns= {{{columns}}}; + $('.is-date').datepicker({format : 'yyyy-mm-dd'}); - /* add options to column select */ - for (var key in columns) { - $columnSelect.append($('<option>', { - value: key, text: (slxFilterNames[key] ? slxFilterNames[key] : key) })); - }; - - - /* initialize selectize */ - filterSelectize = $('#filterInput').selectize({ - delimiter: slxFilterDel, - persist: false, - plugins: ['remove_button'], - create: function(input) { - return {value: input, text: input} - }, - onChange: function() { - // if (initComplete && !$('#filterInput').is(':focus')) { - // reload(); - // } - }, - onItemRemove: function(value) { - refresh(); - } - })[0].selectize; - /* add query */ - var str = "{{{query}}}"; - var eExp = /^(\w+)\s*([=><!~]+)\s*(.*)$/; - str.split(slxFilterDel).forEach(function(v) { - if (v.trim().length === 0) - return; - var match = eExp.exec(v); - if (match && match.length === 4) { - addFilter(match[1], match[2], match[3]); - } else { - filterSelectize.addOption({value: v, text: v}); - filterSelectize.addItem(v); - } + $('#filter-expand').click(function() { + $('#query-form .filter-row.collapse').show(); + $(this).remove(); }); - $('#columnSelect').on('change', function() { - $('#operatorSelect option').remove(); - var col = $('#columnSelect').val(); - var opS = $('#operatorSelect'); - columns[col]['op'].sort(myOpSort); - columns[col]['op'].forEach(function (v) { - $(opS).append($('<option>', { - value: v, text: v - })); + // Cosmetic - less clutter in URL + $('#query-form').submit(function(e) { + $(this).find('.filter-row').each(function() { + var $row = $(this); + if ($row.find('.filter-enable').prop('checked')) + return; + $row.find('input, select').prop('name', ''); }); - /* also set the type of the input */ - if (columns[col]['type'] === 'date') { - $('#argumentInput').datepicker({format : 'yyyy-mm-dd'}); - $('#argumentSelect').hide(); - } else if(columns[col]['type'] === 'enum') { - $('#argumentSelect').empty(); - $('#argumentInput').hide(); - $('#argumentSelect').show(); - columns[col]['values'].forEach(function (v) { - var t = v; - var disabled = (col === 'location'); - if (col === 'location' && slxLocations['L' + v]) { - t = slxLocations['L' + v].pad + ' ' + slxLocations['L' + v].name; - disabled = slxLocations['L' + v].disabled; - } - $('#argumentSelect').append($('<option>', { value: v, text: t, disabled: disabled })); - }); - } else { - $('#argumentInput').datepicker('remove'); - $('#argumentSelect option').remove(); - $('#argumentInput').show(); - $('#argumentSelect').hide(); - } }); + var check = function() { + $(this).closest('.filter-row').find('.filter-enable:visible').prop('checked', true); + }; + + // This sucks - we need to wait a bit otherwise datepicker triggers change + setTimeout(function() { + $('.enable-check').change(check).keypress(check); + }, 100); + $('.filter-col').each(function(idx, elem) { var e = $(elem); var col = e.data('filter-col'); @@ -203,66 +106,23 @@ document.addEventListener("DOMContentLoaded", function () { e.find('.filter-val').each(function(idx, elem) { var e = $(elem); var val = e.data('filter-val'); - if (!val) return; + var op = e.data('filter-op'); + if (!op) op = '='; + if (val === null || val === undefined) return; e.click(function(ev) { ev.preventDefault(); - addFilter(col, '=', val); + addFilter(col, op, val); refresh(); }); }); }); -}, false); - -function popupFilter(field) { - if (field != null) { - $('#columnSelect').val(field); - } - $('#columnSelect').change(); - $modal.modal('show'); -} - -function addFilterFromForm() { - var argument1 = $('#argumentInput').val(); - var argument2 = $('#argumentSelect').val(); - var argument = argument1 ? argument1 : argument2; - var col = $('#columnSelect').val(); - var op = $('#operatorSelect').val(); - - addFilter(col, op, argument); - refresh(); // TODO: AJAX -} - -function addFilter(col, op, argument) { - var filterValue = col + ' ' + op + ' ' + argument; - var filterText = filterValue; - var displayArgument = argument; - if (col === 'location' && slxLocations['L' + argument]) { - displayArgument = slxLocations['L' + argument].name; - } - if (slxFilterNames[col]) { - filterText = slxFilterNames[col] + ' ' + op + ' ' + displayArgument; - } - filterSelectize.addOption({value: filterValue, text: filterText}); - filterSelectize.addItem(filterValue); -} - -function toggleSort(field) { - $('#sort').val(field + ' ' + order); - refresh(); -} - -/* equal sign should always be first, the rest doesn't matter*/ -function myOpSort(a,b) { - if (a === '=') { return -1; } - else if (a === b) {return 0} - else { return 1;} + $('.auto-chart').each(function() { + makePieChart($(this)); + }); -} +}, false); -function refresh() { - $queryForm.submit(); /* TODO: use AJAX */ -} // --></script> |