diff --git a/frappe/core/page/background_jobs/background_jobs.css b/frappe/core/page/background_jobs/background_jobs.css index 63c0ce7202..0c77522cb3 100644 --- a/frappe/core/page/background_jobs/background_jobs.css +++ b/frappe/core/page/background_jobs/background_jobs.css @@ -54,9 +54,7 @@ thead > tr > th:last-child { } .footer { - display: flex; - align-items: center; - justify-content: space-between; + align-items: flex-end; margin-top: var(--margin-md); font-size: var(--text-base); } diff --git a/frappe/core/page/background_jobs/background_jobs.html b/frappe/core/page/background_jobs/background_jobs.html index 7668661444..1b00ec3106 100644 --- a/frappe/core/page/background_jobs/background_jobs.html +++ b/frappe/core/page/background_jobs/background_jobs.html @@ -38,13 +38,14 @@
{{ __("No pending or current jobs for this site") }}
{% endif %} - \ No newline at end of file diff --git a/frappe/core/page/permission_manager/permission_manager.css b/frappe/core/page/permission_manager/permission_manager.css new file mode 100644 index 0000000000..3c74859c75 --- /dev/null +++ b/frappe/core/page/permission_manager/permission_manager.css @@ -0,0 +1,50 @@ +.table { + margin-bottom: 0px; + margin-top: 0px; + border-radius: var(--border-radius-md); +} + +thead { + border: none; + background-color: var(--control-bg); + border-radius: var(--border-radius-md); +} + +thead > tr { + border-radius: var(--border-radius-md); +} + +thead > tr > th:first-child { + border-radius: var(--border-radius-md) 0 0 var(--border-radius-md); +} +thead > tr > th:last-child { + border-radius: 0 var(--border-radius-md) var(--border-radius-md) 0; +} + +/* Space between thead and tbody */ +/* tbody:before { + content: "@"; + display: block; + line-height: var(--margin-md); + text-indent: -99999px; +} */ + +td[data-fieldname="permissions"] > .row > .col-md-4 { + margin-bottom: var(--margin-sm); +} + +tbody > tr { + border-top: 1px solid var(--border-color); +} + +tbody > tr:first-child { + border-top: none; +} + +button.btn-remove-perm { + box-shadow: none; +} + +button.btn-remove-perm > svg > use { + stroke: var(--white); +} diff --git a/frappe/core/page/permission_manager/permission_manager.js b/frappe/core/page/permission_manager/permission_manager.js index 0d3267c7d5..c4957f233c 100644 --- a/frappe/core/page/permission_manager/permission_manager.js +++ b/frappe/core/page/permission_manager/permission_manager.js @@ -1,8 +1,8 @@ frappe.pages['permission-manager'].on_page_load = (wrapper) => { - var page = frappe.ui.make_app_page({ + let page = frappe.ui.make_app_page({ parent: wrapper, title: __('Role Permissions Manager'), - icon: "fa fa-lock", + card_layout: true, single_column: true }); @@ -14,233 +14,255 @@ frappe.pages['permission-manager'].on_page_load = (wrapper) => { }; -frappe.pages['permission-manager'].refresh = function(wrapper) { +frappe.pages['permission-manager'].refresh = function (wrapper) { wrapper.permission_engine.set_from_route(); }; -frappe.PermissionEngine = Class.extend({ - init: function(wrapper) { +frappe.PermissionEngine = class PermissionEngine { + constructor(wrapper) { this.wrapper = wrapper; this.page = wrapper.page; this.body = $(this.wrapper).find(".perm-engine"); this.make(); this.refresh(); this.add_check_events(); - }, - make: function() { - var me = this; + } - me.make_reset_button(); - return frappe.call({ - module:"frappe.core", - page:"permission_manager", - method: "get_roles_and_doctypes", - callback: function(r) { - me.options = r.message; - me.setup_page(); - } + make() { + this.make_reset_button(); + frappe.call({ + module: "frappe.core", + page: "permission_manager", + method: "get_roles_and_doctypes" + }).then((res) => { + this.options = res.message; + this.setup_page(); }); + } - }, - setup_page: function() { - var me = this; + setup_page() { this.doctype_select = this.wrapper.page.add_select(__("Document Type"), - [{value: "", label: __("Select Document Type")+"..."}].concat(this.options.doctypes)) - .change(function() { + [{ value: "", label: __("Select Document Type") + "..." }].concat(this.options.doctypes)) + .change(function () { frappe.set_route("permission-manager", $(this).val()); }); + this.role_select = this.wrapper.page.add_select(__("Roles"), - [__("Select Role")+"..."].concat(this.options.roles)) - .change(function() { - me.refresh(); + [__("Select Role") + "..."].concat(this.options.roles)) + .change(() => { + this.refresh(); }); this.page.add_inner_button(__('Set User Permissions'), () => { return frappe.set_route('List', 'User Permission'); }); this.set_from_route(); - }, - set_from_route: function() { - var me = this; - if(!this.doctype_select) { + } + + set_from_route() { + if (!this.doctype_select) { // selects not yet loaded, call again after a bit setTimeout(() => { - me.set_from_route(); + this.set_from_route(); }, 500); return; } - if(frappe.get_route()[1]) { + if (frappe.get_route()[1]) { this.doctype_select.val(frappe.get_route()[1]); - } else if(frappe.route_options) { - if(frappe.route_options.doctype) { + } else if (frappe.route_options) { + if (frappe.route_options.doctype) { this.doctype_select.val(frappe.route_options.doctype); } - if(frappe.route_options.role) { + if (frappe.route_options.role) { this.role_select.val(frappe.route_options.role); } frappe.route_options = null; } this.refresh(); - }, - get_standard_permissions: function(callback) { - var doctype = this.get_doctype(); - if(doctype) { + } + + get_standard_permissions(callback) { + let doctype = this.get_doctype(); + if (doctype) { return frappe.call({ - module:"frappe.core", - page:"permission_manager", + module: "frappe.core", + page: "permission_manager", method: "get_standard_permissions", - args: {doctype: doctype}, + args: { doctype: doctype }, callback: callback }); } return false; - }, - reset_std_permissions: function(data) { - var me = this; - var d = frappe.confirm(__("Reset Permissions for {0}?", [me.get_doctype()]), function() { + } + + reset_std_permissions(data) { + let doctype = this.get_doctype() + let d = frappe.confirm(__("Reset Permissions for {0}?", [doctype]), () => { return frappe.call({ - module:"frappe.core", - page:"permission_manager", - method:"reset", - args: { - doctype: me.get_doctype(), - }, - callback: function() { - me.refresh(); - } + module: "frappe.core", + page: "permission_manager", + method: "reset", + args: { doctype } + }).then(() => { + this.refresh(); }); }); // show standard permissions - var $d = $(d.wrapper).find(".frappe-confirm-message").append("" + __("Loading") + "...
"); - return; - } - if(!me.get_doctype() && !me.get_role()) { - this.body.html(""+__("Select Document Type or Role to start.")+"
"); + d.rights = rights.join(", "); + + $wrapper.append(`+ ${message} +
+" - +__("No Permissions set for this criteria.")+"
"); + if (!this.perm_list.length) { + this.set_empty_message(__("No Permissions set for this criteria.")); } else { this.show_permission_table(this.perm_list); } this.show_add_rule(); - this.make_reset_button(); - }, - show_permission_table: function(perm_list) { + this.get_doctype() && this.make_reset_button(); + } - var me = this; + show_permission_table(perm_list) { this.table = $("