aboutsummaryrefslogtreecommitdiff
path: root/data/assets/test/tab-users.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/assets/test/tab-users.js')
-rw-r--r--data/assets/test/tab-users.js286
1 files changed, 286 insertions, 0 deletions
diff --git a/data/assets/test/tab-users.js b/data/assets/test/tab-users.js
new file mode 100644
index 0000000..d60e348
--- /dev/null
+++ b/data/assets/test/tab-users.js
@@ -0,0 +1,286 @@
+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 = $('#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;
+ }
+
+ // old test, not used any more
+ function set_user(user_id) {
+ return send('test/set_user', {
+ user_id: user_id,
+ }).fail(function(r) {
+ alert('Error ' + r.responseText);
+ }).done(function(r) {
+ // do nothing
+ });
+ }
+
+ $('#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;
+ });
+
+ $('#user-add-dialog').on('show.bs.modal', function() {
+ $.each(['name', 'email', 'password'], function(i, id) {
+ $('#user-add-' + id).val('');
+ });
+ $('#user-add-role').val('guest');
+ });
+
+ $('#user-add-dialog').on('shown.bs.modal', function() {
+ $('#user-add-name').focus();
+ });
+
+ $('#user-add-name, #user-add-email, #user-add-password').keydown(function(ev) {
+ if (ev.which == 13) {
+ setTimeout(function() {
+ $('#user-add-confirm').click();
+ }, 10);
+
+ // stop event
+ return false;
+ }
+ });
+
+ $('#user-add-confirm').click(function() {
+ var me = $(this);
+
+ if (me.hasClass('disabled'))
+ return false;
+
+ // toggle loading
+ me.toggleClass('disabled').find('.loading').toggleClass('hidden');
+
+ send('test/add_user', {
+ name: $('#user-add-name').val(),
+ email: $('#user-add-email').val(),
+ password: $('#user-add-password').val(),
+ role: $('#user-add-role').val(),
+ active: 't',
+ }).always(function() {
+ // toggle loading
+ me.toggleClass('disabled').find('.loading').toggleClass('hidden');
+ }).fail(function(r) {
+ alert('Error ' + r.responseText);
+ }).done(function(r) {
+ console.log(r);
+ reload();
+ $('#user-add-dialog').modal('hide');
+ });
+
+ // stop event
+ return false;
+ });
+
+ $('#user-edit-dialog').on('show.bs.modal', function() {
+ var row = $(this).data('row');
+
+ $.each({
+ name: 'user_name',
+ email: 'email',
+ role: 'role_name',
+ }, function(id, col) {
+ $('#user-edit-' + id).val(row[col]);
+ });
+ });
+
+ $('#user-edit-dialog').on('shown.bs.modal', function() {
+ $('#user-edit-name').focus();
+ });
+
+ $('#user-edit-dialog').on('hide.bs.modal', function() {
+ // clear highlight
+ $('#users .active').removeClass('active');
+ });
+
+ $('#user-edit-name, #user-edit-email').keydown(function(ev) {
+ if (ev.which == 13) {
+ setTimeout(function() {
+ $('#user-edit-confirm').click();
+ }, 10);
+
+ // stop event
+ return false;
+ }
+ });
+
+ $('#user-edit-confirm').click(function() {
+ var me = $(this),
+ user_id = $('#user-edit-dialog').data('row').user_id;
+
+ if (me.hasClass('disabled'))
+ return false;
+
+ // toggle loading
+ me.toggleClass('disabled').find('.loading').toggleClass('hidden');
+
+ send('test/edit_user', {
+ user_id: user_id,
+ name: $('#user-edit-name').val(),
+ email: $('#user-edit-email').val(),
+ role: $('#user-edit-role').val(),
+ }).always(function() {
+ // toggle loading
+ me.toggleClass('disabled').find('.loading').toggleClass('hidden');
+ }).fail(function(r) {
+ alert('Error ' + r.responseText);
+ }).done(function(r) {
+ console.log(r);
+ reload();
+ $('#user-edit-dialog').modal('hide');
+ });
+
+ // stop event
+ return false;
+ });
+
+ $('#login-dialog').on('show.bs.modal', function() {
+ $('#login-email').val('');
+ $('#login-password').val('');
+ });
+
+ $('#login-dialog').on('shown.bs.modal', function() {
+ $('#login-email').focus();
+ });
+
+ $('#login-confirm').click(function() {
+ var me = $(this);
+
+ if (me.hasClass('disabled'))
+ return false;
+
+ // toggle loading
+ me.toggleClass('disabled').find('.loading').toggleClass('hidden');
+
+ send('test/login', {
+ email: $('#login-email').val(),
+ password: $('#login-password').val(),
+ }).always(function() {
+ // toggle loading
+ me.toggleClass('disabled').find('.loading').toggleClass('hidden');
+ }).fail(function(r) {
+ alert('Error ' + r.responseText);
+ }).done(function(r) {
+ console.log(r);
+ $('#login-dialog').modal('hide');
+ });
+
+ // stop event
+ return false;
+ });
+
+ $('#login-user, #login-password').keydown(function(ev) {
+ if (ev.which == 13) {
+ setTimeout(function() {
+ // trigger login
+ $('#login-confirm').click();
+ }, 10);
+
+ // stop event
+ return false;
+ }
+ });
+
+ $('#reload').click(reload);
+
+ // load users
+ $('#admin-tab-users').on('show.bs.tab', function() {
+ reload();
+ });
+});