From 7c6af8fb2da7739a5d46c639194f4493d30f3a93 Mon Sep 17 00:00:00 2001 From: David Kellerman Date: Tue, 11 Sep 2018 00:48:25 -0700 Subject: [PATCH 1/6] Changes to make it easier to replace or customize admin templates. Added `admin-` prefix to `admin-theme-default/partials/head.ejs`, `admin-theme-default/partials/nav.ejs`, and `admin-theme-default/partials/scripts.ejs`. Changed references to `render()` instead of `include()`. Changed `AdminController.js` to use generic names for element icons (rather than Font Awesome classes), then map them to class names in `admin-theme-default/partials/admin-nav-menu.ejs`. This leaves the `icon` option dangling, so added a hack to pass it as an `override` property for submenu items, then pick it up in `admin-nav-menu.ejs`. --- src/AdminController.js | 15 +++++++-------- .../layouts/admin-default.ejs | 11 +++-------- .../partials/{head.ejs => admin-head.ejs} | 0 .../partials/admin-nav-menu.ejs | 17 ++++++++++++++--- .../partials/{nav.ejs => admin-nav.ejs} | 0 .../partials/{scripts.ejs => admin-scripts.ejs} | 0 6 files changed, 24 insertions(+), 19 deletions(-) rename src/modules/admin-theme-default/partials/{head.ejs => admin-head.ejs} (100%) rename src/modules/admin-theme-default/partials/{nav.ejs => admin-nav.ejs} (100%) rename src/modules/admin-theme-default/partials/{scripts.ejs => admin-scripts.ejs} (100%) diff --git a/src/AdminController.js b/src/AdminController.js index d12de50..866f328 100644 --- a/src/AdminController.js +++ b/src/AdminController.js @@ -19,7 +19,7 @@ import {application as app} from 'nxus-core' * to provide admin prefixes for routes ("/admin/model-identity") and templates ("model-identity-admin"), and by default wraps templates in 'admin-page' rather than 'page'. * * # Parameters (in addition to EditController parameters) - * * `icon` - icon class for nav - defaults to fa-files-o + * * `icon` - [deprecated] icon class for nav - defaults to fa-files-o * * `order` - optional ordering for nav * * `uploadType` - dataManager import type (e.g. csv, json), if set an Import action is available. * * `uploadOptions` - options to pass to dataManager parser @@ -42,7 +42,6 @@ class AdminController extends EditController { super(opts) this.displayName = opts.displayName || morph.toTitle(this.modelIdentity) - this.icon = opts.icon || 'fa fa-files-o' this.order = opts.order || 0 this.uploadOptions = opts.uploadOptions || {} @@ -59,13 +58,13 @@ class AdminController extends EditController { let menu = 'admin-sidebar' if (this.adminGroup) { menu = "admin-"+this.adminGroup+'-submenu' - admin.addNav(this.adminGroup, "", {subMenu: menu, icon: 'fa fa-folder-open-o', order: this.order}) + admin.addNav(this.adminGroup, "", {subMenu: menu, icon: 'group', order: this.order}) } this._subMenu = this.prefix+'-submenu' - nav.add(menu, this.displayName, this.routePrefix, {subMenu: this._subMenu, icon: this.icon, order: this.order}) + nav.add(menu, this.displayName, this.routePrefix, {subMenu: this._subMenu, icon: 'submenu', order: this.order, override: opts.icon}) - this.addNav('View', '', {icon: 'fa fa-list'}) - this.addNav('Create', 'create', {icon: 'fa fa-plus'}) + this.addNav('View', '', {icon: 'view'}) + this.addNav('Create', 'create', {icon: 'create'}) this.addAction('list', 'Add', "/create", {icon: 'fa fa-plus'}) this.addInstanceAction("Edit", "/edit/", {icon: "fa fa-edit"}) @@ -131,7 +130,7 @@ class AdminController extends EditController { nav: false, directHandler: true }, ::this._download) - nav.add(this.prefix+'-submenu', 'Download', exportRoute, {icon: 'fa fa-download'}) + nav.add(this.prefix+'-submenu', 'Download', exportRoute, {icon: 'download'}) actions.add(this.templatePrefix+"-list", "Download", "/export", { icon: "fa fa-download" }) @@ -157,7 +156,7 @@ class AdminController extends EditController { templater.default().template(__dirname+"/templates/admin-import.ejs", this.pageTemplate, this.templatePrefix+"-import") - nav.add(this.prefix+'-submenu', 'Import', importRoute, {icon: 'fa fa-upload'}) + nav.add(this.prefix+'-submenu', 'Import', importRoute, {icon: 'upload'}) actions.add(this.templatePrefix+"-list", "Import", "/import", { icon: "fa fa-upload" }) diff --git a/src/modules/admin-theme-default/layouts/admin-default.ejs b/src/modules/admin-theme-default/layouts/admin-default.ejs index f6306c7..0ff8791 100644 --- a/src/modules/admin-theme-default/layouts/admin-default.ejs +++ b/src/modules/admin-theme-default/layouts/admin-default.ejs @@ -1,17 +1,12 @@ - -<%- include('../partials/head.ejs') %> - +<%- render('admin-head') %> -
- <%- include('../partials/nav.ejs') %> - + <%- render('admin-nav') %> <%- content %>
- <%- include('../partials/scripts.ejs') %> + <%- render('admin-scripts') %> - \ No newline at end of file diff --git a/src/modules/admin-theme-default/partials/head.ejs b/src/modules/admin-theme-default/partials/admin-head.ejs similarity index 100% rename from src/modules/admin-theme-default/partials/head.ejs rename to src/modules/admin-theme-default/partials/admin-head.ejs diff --git a/src/modules/admin-theme-default/partials/admin-nav-menu.ejs b/src/modules/admin-theme-default/partials/admin-nav-menu.ejs index 0ec3a04..15a064c 100644 --- a/src/modules/admin-theme-default/partials/admin-nav-menu.ejs +++ b/src/modules/admin-theme-default/partials/admin-nav-menu.ejs @@ -1,9 +1,20 @@ +<% + const navIcons = { + submenu: 'fa fa-files-o', + group: 'fa fa-folder-open-o', + view: 'fa fa-list', + create: 'fa fa-plus', + download: 'fa fa-download', + upload: 'fa fa-upload', + } + function navIcon(icon, override) { return override || navIcons[icon] || icon } +%>