diff options
Diffstat (limited to 'data/assets/js/admin/tabs/users.js')
-rw-r--r-- | data/assets/js/admin/tabs/users.js | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/data/assets/js/admin/tabs/users.js b/data/assets/js/admin/tabs/users.js new file mode 100644 index 0000000..22348e2 --- /dev/null +++ b/data/assets/js/admin/tabs/users.js @@ -0,0 +1,115 @@ +jQuery(function($) { + "use strict"; + + var TEMPLATES = new LuigiTemplate.Cache({ + user: [ + "<a ", + "href='#' ", + "class='list-group-item %{css|h}' ", + "title='Edit user \"%{user_name|h}\".' ", + "data-row='%{row|json|h}' ", + "data-q='%{q|h}' ", + ">", + "<i class='fa fa-fw fa-spinner fa-spin hidden loading'></i>", + "<i class='fa fa-fw fa-user loading'></i>", + " ", + "%{user_name|h} (%{email|h})", + + "<span class='badge pull-right'>", + "%{role_name|h}", + "</span>", + "</a>", + ], + + loading: [ + "<span class='list-group-item disabled'>", + "<i class='fa fa-spinner fa-spin'></i>", + " ", + "Loading...", + "</span>", + ], + + error: [ + "<span class='list-group-item list-group-item-danger disabled'>", + "<i class='fa fa-exclamation-triangle'></i>", + " ", + "Error: %{responseText|h}", + "</span>", + ], + }); + + function filter() { + var qs = $('#users-q').val().replace(/^\s+|\s+$/g, '').toLowerCase().split(/\s+/); + + if (qs.length > 0) { + // hide all users + $('#users .list-group-item').addClass('hidden'); + + // show matching users + $($.grep($('#users .list-group-item'), function(el) { + var eq = $(el).data('q'); + + return ($.grep(qs, function(q) { + return eq.indexOf(q) !== -1; + }).length == qs.length); + })).removeClass('hidden'); + } else { + // show all users + $('#users .list-group-item').removeClass('hidden'); + } + } + + function reload() { + var btn = $('#users-reload'), + list = $('#users'); + + // show loading + btn.toggleClass('disabled').find('.loading').toggleClass('hidden'); + list.html(TEMPLATES.run('loading')); + + send('test/get_users').always(function() { + btn.toggleClass('disabled').find('.loading').toggleClass('hidden'); + list.html(''); + }).fail(function(r) { + console.log('get_users failed: ' + r.responseText); + list.html(TEMPLATES.run('error', r)); + }).done(function(r) { + list.html($.map(r.users, function(row) { + return TEMPLATES.run('user', $.extend({}, row, { + q: [row.user_id, row.user_name, row.email, row.role_name].join(' ').toLowerCase(), + row: row, + })); + }).join('')); + + // refresh filters + filter(); + }); + + // stop event + return false; + } + + $('#users-q').on('search-update', function() { + filter(); + }); + + $('#users').on('click', 'a.list-group-item', function() { + var me = $(this); + + // update highlight + $('#users .active').removeClass('active'); + me.addClass('active'); + + $('#user-edit-dialog').data('row', me.data('row')).modal('show'); + + // stop event + return false; + }); + + $('#users-reload').click(reload); + + // load users + $('#admin-tab-users').on('show.bs.tab', function() { + reload(); + }); +}); |