diff --git a/server/src/uds/REST/methods/users.py b/server/src/uds/REST/methods/users.py index ab1cd047e..361b21384 100644 --- a/server/src/uds/REST/methods/users.py +++ b/server/src/uds/REST/methods/users.py @@ -32,12 +32,11 @@ ''' from __future__ import unicode_literals -import time +#import time from django.utils.translation import ugettext as _ -from django.utils import formats from uds.core.util.State import State -from uds.models import Authenticator, User +from uds.models import Authenticator from uds.REST.mixins import DetailHandler diff --git a/server/src/uds/static/adm/css/uds-admin.css b/server/src/uds/static/adm/css/uds-admin.css index 1014fd69f..907493ca6 100644 --- a/server/src/uds/static/adm/css/uds-admin.css +++ b/server/src/uds/static/adm/css/uds-admin.css @@ -20,65 +20,8 @@ body { padding: 5px 15px; } -/* Nav Messages */ - -.messages-dropdown .dropdown-menu .message-preview .avatar, -.messages-dropdown .dropdown-menu .message-preview .name, -.messages-dropdown .dropdown-menu .message-preview .message, -.messages-dropdown .dropdown-menu .message-preview .time { - display: block; -} - -.messages-dropdown .dropdown-menu .message-preview .avatar { - float: left; - margin-right: 15px; -} - -.messages-dropdown .dropdown-menu .message-preview .name { - font-weight: bold; -} - -.messages-dropdown .dropdown-menu .message-preview .message { - font-size: 12px; -} - -.messages-dropdown .dropdown-menu .message-preview .time { - font-size: 12px; -} - -/* Nav Announcements */ - -.announcement-heading { - font-size: 50px; - margin: 0; -} - -.announcement-text { - margin: 0; -} - -/* Table Headers */ - -table.tablesorter thead { - cursor: pointer; -} - -table.tablesorter thead tr th:hover { - background-color: #f5f5f5; -} - -/* Flot Chart Containers */ - -.flot-chart { - display: block; - height: 400px; -} - -.flot-chart-content { - width: 100%; - height: 100%; -} +/* Custom */ .btn3d-tables { margin-top:0px; margin-botton: 8px; @@ -93,9 +36,19 @@ table.tablesorter thead tr th:hover { display: none; } -.white { - color: white; +/* chevrons for collapsable pannels */ +.chevron:before { + content: "\f139"; } +.chevron.collapsed:before { + content: "\f13a"; +} +.panel-icon { + margin-left: 0.6em !important; + cursor: pointer; +} + + /* Edit Below to Customize Widths > 768px */ @media (min-width:768px) { @@ -158,17 +111,7 @@ table.tablesorter thead tr th:hover { .navbar-inverse .navbar-nav>li>a:focus { background-color: #080808; } - - /* Nav Messages */ - - .messages-dropdown .dropdown-menu { - min-width: 300px; - } - - .messages-dropdown .dropdown-menu li a { - white-space: normal; - } - + .label-tbl-button { display: inline-block; } diff --git a/server/src/uds/static/adm/js/gui-elements.js b/server/src/uds/static/adm/js/gui-elements.js index e85bf34b4..36dba8448 100644 --- a/server/src/uds/static/adm/js/gui-elements.js +++ b/server/src/uds/static/adm/js/gui-elements.js @@ -39,7 +39,7 @@ gui.providers.link = function(event) { gui.doLog(this); gui.doLog(this.fnGetSelectedData()); }, - buttons : [ 'edit', 'refresh', 'delete', 'xls' ], + buttons : [ 'edit', 'delete', 'xls' ], }); return false; @@ -64,7 +64,7 @@ gui.authenticators.link = function(event) { gui.authenticators.table({ container : 'auths-placeholder', rowSelect : 'single', - buttons : [ 'edit', 'refresh', 'delete', 'xls' ], + buttons : [ 'edit', 'delete', 'xls' ], onRowSelect : function(selected) { api.tools.blockUI(); var id = selected[0].id; @@ -72,7 +72,7 @@ gui.authenticators.link = function(event) { user.table({ container : 'users-placeholder', rowSelect : 'multi', - buttons : [ 'edit', 'refresh', 'delete', 'xls' ], + buttons : [ 'edit', 'delete', 'xls' ], scrollToTable : true, onLoad: function(k) { api.tools.unblockUI(); @@ -97,7 +97,7 @@ gui.osmanagers.link = function(event) { gui.osmanagers.table({ rowSelect : 'single', - buttons : [ 'edit', 'refresh', 'delete', 'xls' ], + buttons : [ 'edit', 'delete', 'xls' ], }); return false; @@ -120,12 +120,12 @@ gui.connectivity.link = function(event) { gui.connectivity.transports.table({ rowSelect : 'multi', container : 'transports-placeholder', - buttons : [ 'edit', 'refresh', 'delete', 'xls' ], + buttons : [ 'edit', 'delete', 'xls' ], }); gui.connectivity.networks.table({ rowSelect : 'multi', container : 'networks-placeholder', - buttons : [ 'edit', 'refresh', 'delete', 'xls' ], + buttons : [ 'edit', 'delete', 'xls' ], }); }); diff --git a/server/src/uds/static/adm/js/gui.js b/server/src/uds/static/adm/js/gui.js index 96969c646..5ff77a769 100644 --- a/server/src/uds/static/adm/js/gui.js +++ b/server/src/uds/static/adm/js/gui.js @@ -55,22 +55,27 @@ css: 'btn3d-info btn3d btn3d-tables', }, }; - + gui.table = function(title, table_id, options) { - if (options === undefined) - options = { - 'size' : 12, - 'icon' : 'table' - }; - if (options.size === undefined) - options.size = 12; - if (options.icon === undefined) - options.icon = 'table'; + options = options || {}; + var size = options.size || 12; + var icon = options.icon || 'table'; + var panelId = 'panel-' + table_id; - return '
' + - '

' + title + '

' + - '
'; + return { + text: '
' + + '
' + + '

' + title + + ' ' + + ' ' + + ' ' + + '

' + + '
' + + '
', + panelId: panelId, + refreshSelector: '#' + panelId + ' span.fa-refresh' + }; }; gui.breadcrumbs = function(path) { @@ -200,25 +205,21 @@ GuiElement.prototype = { // Receives 3 parameters: // 1.- the array of selected items data (objects, as got from api...get) // 2.- the DataTable that raised the event - // 3.- the DataTableTools that raised the event // onNew: Event (function). If defined, will be invoked when "new" button is pressed // Receives 4 parameters: // 1.- the selected item data (single object, as got from api...get) // 2.- the event that fired this (new, delete, edit, ..) // 3.- the DataTable that raised the event - // 4.- the DataTableTools that raised the event // onEdit: Event (function). If defined, will be invoked when "edit" button is pressed // Receives 4 parameters: // 1.- the selected item data (single object, as got from api...get) // 2.- the event that fired this (new, delete, edit, ..) // 3.- the DataTable that raised the event - // 4.- the DataTableTools that raised the event // onDelete: Event (function). If defined, will be invoked when "delete" button is pressed // Receives 4 parameters: // 1.- the selected item data (single object, as got from api...get) // 2.- the event that fired this (new, delete, edit, ..) // 4.- the DataTable that raised the event - // 5.- the DataTableTools that raised the event table : function(options) { "use strict"; options = options || {}; @@ -339,10 +340,10 @@ GuiElement.prototype = { success : function(data) { var table = gui.table(title, tableId); if (options.container === undefined) { - gui.appendToWorkspace('
' + table + '
'); + gui.appendToWorkspace('
' + table.text + '
'); } else { $('#' + options.container).empty(); - $('#' + options.container).append(table); + $('#' + options.container).append(table.text); } var btns = []; @@ -351,42 +352,14 @@ GuiElement.prototype = { var clickHandlerFor = function(handler, action) { var handleFnc = handler || function(val, action, tbl, tbltools) {gui.doLog('Default handler called for ' + action + ': ' + JSON.stringify(val));}; return function(btn) { - var tblTools = this; - var table = $('#' + tableId).dataTable(); + var tbl = $('#' + tableId).dataTable(); var val = this.fnGetSelectedData()[0]; setTimeout(function() { - handleFnc(val, action, table, tblTools); + handleFnc(val, action, tbl); }, 0); }; }; - - // What execute on refresh button push - var onRefresh = options.onRefresh || function(){}; - - var refreshFnc = function(btn) { - // Refreshes table content - var tbl = $('#' + tableId).dataTable(); - /*var width = $(btn).width(); - var saved = $(btn).html(); - $(btn).addClass('disabled').html('') - .width(width);*/ - if( data.length > 1000 ) - api.tools.blockUI(); - - onRefresh($this); - - $this.rest.get({ - success : function(data) { - /*$(btn).removeClass('disabled').width('').html(saved);*/ - setTimeout( function() { - tbl.fnClearTable(); - tbl.fnAddData(data); - api.tools.unblockUI(); - }, 0); - } - }); - }; - + // methods for buttons on row select var editSelected = function(btn, obj, node) { var sel = this.fnGetSelectedData(); @@ -404,6 +377,31 @@ GuiElement.prototype = { $(btn).removeClass('btn3d-warning').addClass('disabled'); } }; + + // What execute on refresh button push + var onRefresh = options.onRefresh || function(){}; + + var refreshFnc = function() { + // Refreshes table content + var tbl = $('#' + tableId).dataTable(); + // Clears selection first + TableTools.fnGetInstance(tableId).fnSelectNone(); + if( data.length > 1000 ) + api.tools.blockUI(); + + $this.rest.get({ + success : function(data) { + /*$(btn).removeClass('disabled').width('').html(saved);*/ + setTimeout( function() { + tbl.fnClearTable(); + tbl.fnAddData(data); + onRefresh($this); + api.tools.unblockUI(); + }, 0); + } + }); + return false; // This may be used on button or href, better disable execution of it + }; $.each(options.buttons, function(index, value) { var btn; @@ -532,7 +530,10 @@ GuiElement.prototype = { // Fix 3dbuttons api.tools.fix3dButtons('#' + tableId + '_wrapper .btn-group-3d'); // Fix form - //$('#' + tableId + '_filter input').addClass('form-control'); + $('#' + tableId + '_filter input').addClass('form-control'); + // Add refresh action to panel + $(table.refreshSelector).click(refreshFnc); + if (options.scrollToTable === true ) { var tableTop = $('#' + tableId).offset().top; $('html, body').scrollTop(tableTop); diff --git a/server/src/uds/static/css/tables.css b/server/src/uds/static/css/tables.css index 7c97ccbe2..98ab466a0 100644 --- a/server/src/uds/static/css/tables.css +++ b/server/src/uds/static/css/tables.css @@ -1,4 +1,4 @@ -@media (max-width: 979px) { +@media (max-width: 768px) { table, thead, tbody, th, td, tr { display: block; }