From bfc319cff9527e1db159d8d499695b9be325b4aa Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 20 Jun 2018 16:51:18 +1000 Subject: [PATCH] Frontend user list and modal dialog fixes --- src/frontend/js/app/api.js | 19 +++-- src/frontend/js/app/controller.js | 36 ++++----- src/frontend/js/app/main.js | 6 +- src/frontend/js/app/ui/footer/main.ejs | 2 +- src/frontend/js/app/ui/header/main.ejs | 4 +- src/frontend/js/app/ui/main.ejs | 5 +- src/frontend/js/app/ui/main.js | 62 +++++++++++++++- src/frontend/js/app/ui/menu/main.ejs | 13 +++- src/frontend/js/app/ui/menu/main.js | 35 ++++++++- src/frontend/js/app/user/form.ejs | 53 +++++++++++++ src/frontend/js/app/user/form.js | 99 +++++++++++++++++++++++++ src/frontend/js/app/users/list/item.ejs | 31 ++++++++ src/frontend/js/app/users/list/item.js | 66 +++++++++++++++++ src/frontend/js/app/users/list/main.ejs | 10 +++ src/frontend/js/app/users/list/main.js | 29 ++++++++ src/frontend/js/app/users/main.ejs | 17 +++++ src/frontend/js/app/users/main.js | 51 +++++++++++++ src/frontend/scss/custom.scss | 25 +++++++ src/frontend/scss/styles.scss | 4 +- src/frontend/scss/tabler-extra.scss | 26 +++++++ 20 files changed, 549 insertions(+), 44 deletions(-) create mode 100644 src/frontend/js/app/user/form.ejs create mode 100644 src/frontend/js/app/user/form.js create mode 100644 src/frontend/js/app/users/list/item.ejs create mode 100644 src/frontend/js/app/users/list/item.js create mode 100644 src/frontend/js/app/users/list/main.ejs create mode 100644 src/frontend/js/app/users/list/main.js create mode 100644 src/frontend/js/app/users/main.ejs create mode 100644 src/frontend/js/app/users/main.js create mode 100644 src/frontend/scss/custom.scss create mode 100644 src/frontend/scss/tabler-extra.scss diff --git a/src/frontend/js/app/api.js b/src/frontend/js/app/api.js index d6c4764..26886ef 100644 --- a/src/frontend/js/app/api.js +++ b/src/frontend/js/app/api.js @@ -163,17 +163,22 @@ module.exports = { }, /** - * @param {Integer} [offset] - * @param {Integer} [limit] - * @param {String} [sort] * @param {Array} [expand] * @param {String} [query] * @returns {Promise} */ - getAll: function (offset, limit, sort, expand, query) { - return fetch('get', 'users?offset=' + (offset ? offset : 0) + '&limit=' + (limit ? limit : 20) + (sort ? '&sort=' + sort : '') + - (typeof expand === 'object' && expand !== null && expand.length ? '&expand=' + makeExpansionString(expand) : '') + - (typeof query === 'string' ? '&query=' + query : '')); + getAll: function (expand, query) { + let params = []; + + if (typeof expand === 'object' && expand !== null && expand.length) { + params.push('expand=' + makeExpansionString(expand)); + } + + if (typeof query === 'string') { + params.push('query=' + query); + } + + return fetch('get', 'users' + (params.length ? '?' + params.join('&') : '')); }, /** diff --git a/src/frontend/js/app/controller.js b/src/frontend/js/app/controller.js index e217d1d..2802d59 100644 --- a/src/frontend/js/app/controller.js +++ b/src/frontend/js/app/controller.js @@ -26,34 +26,30 @@ module.exports = { /** * Users - * - * @param {Number} [offset] - * @param {Number} [limit] - * @param {String} [sort] */ - showUsers: function (offset, limit, sort) { - /* + showUsers: function () { let controller = this; if (Cache.User.isAdmin()) { require(['./main', './users/main'], (App, View) => { controller.navigate('/users'); - App.UI.showMainLoading(); - let view = new View({ - sort: (typeof sort !== 'undefined' && sort ? sort : Cache.Session.Users.sort), - offset: (typeof offset !== 'undefined' ? offset : Cache.Session.Users.offset), - limit: (typeof limit !== 'undefined' && limit ? limit : Cache.Session.Users.limit) - }); - - view.on('loaded', function () { - App.UI.hideMainLoading(); - }); - - App.UI.showAppContent(view); + App.UI.showAppContent(new View()); }); } else { - this.showRules(); + this.showDashboard(); + } + }, + + /** + * User Form + * + * @param model + */ + showUserForm: function (model) { + if (Cache.User.isAdmin()) { + require(['./main', './user/form'], function (App, View) { + App.UI.showModalDialog(new View({model: model})); + }); } - */ }, /** diff --git a/src/frontend/js/app/main.js b/src/frontend/js/app/main.js index 4ef25c6..3fe2210 100644 --- a/src/frontend/js/app/main.js +++ b/src/frontend/js/app/main.js @@ -12,13 +12,17 @@ const UI = require('./ui/main'); const App = Mn.Application.extend({ - region: '#app', Cache: Cache, Api: Api, UI: null, Controller: Controller, version: null, + region: { + el: '#app', + replaceElement: true + }, + onStart: function (app, options) { console.log('Welcome to Nginx Proxy Manager'); diff --git a/src/frontend/js/app/ui/footer/main.ejs b/src/frontend/js/app/ui/footer/main.ejs index eeea09e..2a16c68 100644 --- a/src/frontend/js/app/ui/footer/main.ejs +++ b/src/frontend/js/app/ui/footer/main.ejs @@ -9,6 +9,6 @@
- v<%- getVersion() %> © 2018 jc21.com. Theme by Tabler + v<%- getVersion() %> © 2018 jc21.com. Theme by Tabler
diff --git a/src/frontend/js/app/ui/header/main.ejs b/src/frontend/js/app/ui/header/main.ejs index eba23e3..ced7414 100644 --- a/src/frontend/js/app/ui/header/main.ejs +++ b/src/frontend/js/app/ui/header/main.ejs @@ -1,7 +1,7 @@
-   Docker Registry +   Nginx Proxy Manager
@@ -9,7 +9,7 @@ - <%- getUserField('name', 'Unknown User') %> + <%- getUserField('nickname', null) || getUserField('name', 'Unknown User') %> <%- getRole() %> diff --git a/src/frontend/js/app/ui/main.ejs b/src/frontend/js/app/ui/main.ejs index 5d8b656..853e111 100644 --- a/src/frontend/js/app/ui/main.ejs +++ b/src/frontend/js/app/ui/main.ejs @@ -1,5 +1,4 @@
- @@ -15,4 +14,6 @@
-
\ No newline at end of file + + + diff --git a/src/frontend/js/app/ui/main.js b/src/frontend/js/app/ui/main.js index b013cd4..4783358 100644 --- a/src/frontend/js/app/ui/main.js +++ b/src/frontend/js/app/ui/main.js @@ -8,8 +8,16 @@ const FooterView = require('./footer/main'); const Cache = require('../cache'); module.exports = Mn.View.extend({ - className: 'page', - template: template, + id: 'app', + className: 'page', + template: template, + modal_setup: false, + + modal: null, + + ui: { + modal: '#modal-dialog' + }, regions: { header_region: { @@ -21,13 +29,60 @@ module.exports = Mn.View.extend({ replaceElement: true }, footer_region: '.footer', - app_content_region: '#app-content' + app_content_region: '#app-content', + modal_region: '#modal-dialog' }, + /** + * @param {Object} view + */ showAppContent: function (view) { this.showChildView('app_content_region', view); }, + /** + * @param {Object} view + * @param {Function} [show_callback] + * @param {Function} [shown_callback] + */ + showModalDialog: function (view, show_callback, shown_callback) { + this.showChildView('modal_region', view); + let modal = this.getRegion('modal_region').$el.modal('show'); + + modal.on('hidden.bs.modal', function (/*e*/) { + if (show_callback) { + modal.off('show.bs.modal', show_callback); + } + + if (shown_callback) { + modal.off('shown.bs.modal', shown_callback); + } + + modal.off('hidden.bs.modal'); + view.destroy(); + }); + + if (show_callback) { + modal.on('show.bs.modal', show_callback); + } + + if (shown_callback) { + modal.on('shown.bs.modal', shown_callback); + } + }, + + /** + * + * @param {Function} [hidden_callback] + */ + closeModal: function (hidden_callback) { + let modal = this.getRegion('modal_region').$el.modal('hide'); + + if (hidden_callback) { + modal.on('hidden.bs.modal', hidden_callback); + } + }, + onRender: function () { this.showChildView('header_region', new HeaderView({ model: Cache.User @@ -40,5 +95,6 @@ module.exports = Mn.View.extend({ reset: function () { this.getRegion('header_region').reset(); this.getRegion('footer_region').reset(); + this.getRegion('modal_region').reset(); } }); diff --git a/src/frontend/js/app/ui/menu/main.ejs b/src/frontend/js/app/ui/menu/main.ejs index d4b975c..bdb065f 100644 --- a/src/frontend/js/app/ui/menu/main.ejs +++ b/src/frontend/js/app/ui/menu/main.ejs @@ -3,10 +3,15 @@