From 71b9a42f00d8871bb09944ec80979c61ad84e655 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Tue, 8 Dec 2015 16:05:59 -0500 Subject: Allow the header bar customization This commit also provide a way to escape the Shorcuts page on Sandstorm. --- client/components/boards/boardArchive.js | 2 +- client/components/boards/boardHeader.jade | 2 +- client/components/boards/boardsList.jade | 9 +++++ client/components/main/header.jade | 13 +------ client/components/main/header.styl | 8 ++++ client/components/main/keyboardShortcuts.jade | 19 ++++++++++ client/components/main/keyboardShortcuts.tpl.jade | 11 ------ client/components/main/layouts.jade | 1 + client/components/main/layouts.styl | 3 ++ client/config/router.js | 22 ++++++++--- client/lib/modal.js | 12 ++++-- sandstorm.js | 46 ++++++++++++++--------- 12 files changed, 98 insertions(+), 50 deletions(-) create mode 100644 client/components/main/keyboardShortcuts.jade delete mode 100644 client/components/main/keyboardShortcuts.tpl.jade diff --git a/client/components/boards/boardArchive.js b/client/components/boards/boardArchive.js index 35f795f3..6f62daaf 100644 --- a/client/components/boards/boardArchive.js +++ b/client/components/boards/boardArchive.js @@ -1,4 +1,4 @@ -Template.headerTitle.events({ +Template.boardHeaderBar.events({ 'click .js-open-archived-board'() { Modal.open('archivedBoards'); }, diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index 5e11c3b7..fc1abc88 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -1,4 +1,4 @@ -template(name="headerBoard") +template(name="boardHeaderBar") h1.header-board-menu with currentBoard a(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}") diff --git a/client/components/boards/boardsList.jade b/client/components/boards/boardsList.jade index 7099cdc9..c11bb2df 100644 --- a/client/components/boards/boardsList.jade +++ b/client/components/boards/boardsList.jade @@ -23,3 +23,12 @@ template(name="boardList") p.board-list-item-desc= description li.js-add-board a.board-list-item.label {{_ 'add-board'}} + + +template(name="boardListHeaderBar") + h1 {{_ 'my-boards'}} + + .board-header-btns.right + a.board-header-btn.js-open-archived-board + i.fa.fa-archive + span {{_ 'archives'}} diff --git a/client/components/main/header.jade b/client/components/main/header.jade index 86dfd6a7..0d178250 100644 --- a/client/components/main/header.jade +++ b/client/components/main/header.jade @@ -32,10 +32,7 @@ template(name="header") current page. This bar is contextual based. If the user is not connected we display "sign in" and "log in" buttons. #header-main-bar(class="{{#if wrappedHeader}}wrapper{{/if}}") - if $.Session.get 'currentBoard' - +headerBoard - else if($eq currentRouteName 'home') - +headerTitle + +Template.dynamic(template=headerBar) //- On sandstorm, the logo shouldn't be clickable, because we only have one @@ -47,11 +44,3 @@ template(name="header") else a.wekan-logo(href="{{pathFor 'home'}}" title="{{_ 'header-logo-title'}}") img(src="{{pathFor '/wekan-logo-header.png'}}" alt="Wekan") - -template(name="headerTitle") - h1 {{_ 'my-boards'}} - - .board-header-btns.right - a.board-header-btn.js-open-archived-board - i.fa.fa-archive - span {{_ 'archives'}} diff --git a/client/components/main/header.styl b/client/components/main/header.styl index b66eb2da..6decf2df 100644 --- a/client/components/main/header.styl +++ b/client/components/main/header.styl @@ -85,6 +85,14 @@ float: left border-radius: 3px + a.fa, a i.fa + color: white + + .back-btn + font-size: 0.9em + margin-right: 10px + + .wekan-logo display: block margin: 3px auto 0 diff --git a/client/components/main/keyboardShortcuts.jade b/client/components/main/keyboardShortcuts.jade new file mode 100644 index 00000000..bde40819 --- /dev/null +++ b/client/components/main/keyboardShortcuts.jade @@ -0,0 +1,19 @@ +template(name="shortcutsHeaderBar") + h1 + a.back-btn(href="{{pathFor 'home'}}") + i.fa.fa-chevron-left + | {{_ 'keyboard-shortcuts'}} + +template(name="shortcutsModalTitle") + h2 + i.fa.fa-keyboard-o + | {{_ 'keyboard-shortcuts'}} + +template(name="keyboardShortcuts") + .wrapper.shortcuts-list + each mapping + .shortcuts-list-item + .shortcuts-list-item-keys + each keys + kbd= this + .shortcuts-list-item-action {{_ action}} diff --git a/client/components/main/keyboardShortcuts.tpl.jade b/client/components/main/keyboardShortcuts.tpl.jade deleted file mode 100644 index 5b5dae8b..00000000 --- a/client/components/main/keyboardShortcuts.tpl.jade +++ /dev/null @@ -1,11 +0,0 @@ -.wrapper.shortcuts-list - h2 - i.fa.fa-keyboard-o - | {{_ 'keyboard-shortcuts'}} - - each mapping - .shortcuts-list-item - .shortcuts-list-item-keys - each keys - kbd= this - .shortcuts-list-item-action {{_ action}} diff --git a/client/components/main/layouts.jade b/client/components/main/layouts.jade index 65b53f04..88d178f5 100644 --- a/client/components/main/layouts.jade +++ b/client/components/main/layouts.jade @@ -31,6 +31,7 @@ template(name="defaultLayout") .modal-content a.modal-close-btn.js-close-modal i.fa.fa-times-thin + +Template.dynamic(template=Modal.getHeaderName) +Template.dynamic(template=Modal.getTemplateName) template(name="notFound") diff --git a/client/components/main/layouts.styl b/client/components/main/layouts.styl index fcc94251..0e50dd55 100644 --- a/client/components/main/layouts.styl +++ b/client/components/main/layouts.styl @@ -31,6 +31,9 @@ body .sk-spinner margin-top: 30vh + > .wrapper + margin-top: 25px + #modal position: absolute top: 0 diff --git a/client/config/router.js b/client/config/router.js index 0a6958d0..ddd69db4 100644 --- a/client/config/router.js +++ b/client/config/router.js @@ -13,7 +13,10 @@ FlowRouter.route('/', { Filter.reset(); EscapeActions.executeAll(); - BlazeLayout.render('defaultLayout', { content: 'boardList' }); + BlazeLayout.render('defaultLayout', { + headerBar: 'boardListHeaderBar', + content: 'boardList', + }); }, }); @@ -33,7 +36,10 @@ FlowRouter.route('/b/:id/:slug', { EscapeActions.executeUpTo('popup-close'); } - BlazeLayout.render('defaultLayout', { content: 'board' }); + BlazeLayout.render('defaultLayout', { + headerBar: 'boardHeaderBar', + content: 'board', + }); }, }); @@ -45,7 +51,10 @@ FlowRouter.route('/b/:boardId/:slug/:cardId', { Session.set('currentBoard', params.boardId); Session.set('currentCard', params.cardId); - BlazeLayout.render('defaultLayout', { content: 'board' }); + BlazeLayout.render('defaultLayout', { + headerBar: 'boardHeaderBar', + content: 'board', + }); }, }); @@ -58,11 +67,14 @@ FlowRouter.route('/shortcuts', { if (previousPath) { Modal.open(shortcutsTemplate, { + header: 'shortcutsModalTitle', onCloseGoTo: previousPath, }); } else { - // XXX There is currently no way to escape this page on Sandstorm - BlazeLayout.render('defaultLayout', { content: shortcutsTemplate }); + BlazeLayout.render('defaultLayout', { + headerBar: 'shortcutsHeaderBar', + content: shortcutsTemplate, + }); } }, }); diff --git a/client/lib/modal.js b/client/lib/modal.js index e6301cb5..1ca8804b 100644 --- a/client/lib/modal.js +++ b/client/lib/modal.js @@ -6,8 +6,14 @@ window.Modal = new class { this._onCloseGoTo = ''; } + getHeaderName() { + const currentModal = this._currentModal.get(); + return currentModal && currentModal.header; + } + getTemplateName() { - return this._currentModal.get(); + const currentModal = this._currentModal.get(); + return currentModal && currentModal.modalName; } isOpen() { @@ -21,8 +27,8 @@ window.Modal = new class { } } - open(modalName, { onCloseGoTo = ''} = {}) { - this._currentModal.set(modalName); + open(modalName, { header = '', onCloseGoTo = ''} = {}) { + this._currentModal.set({ header, modalName }); this._onCloseGoTo = onCloseGoTo; } }; diff --git a/sandstorm.js b/sandstorm.js index a711a960..5148095f 100644 --- a/sandstorm.js +++ b/sandstorm.js @@ -3,24 +3,24 @@ const isSandstorm = Meteor.settings && Meteor.settings.public && Meteor.settings.public.sandstorm; -if (isSandstorm && Meteor.isServer) { - // In sandstorm we only have one board per sandstorm instance. Since we want - // to keep most of our code unchanged, we simply hard-code a board `_id` and - // redirect the user to this particular board. - const sandstormBoard = { - _id: 'sandstorm', - - // XXX Should be shared with the grain instance name. - title: 'Wekan', - slug: 'libreboard', - members: [], - - // Board access security is handled by sandstorm, so in our point of view we - // can alway assume that the board is public (unauthorized users won't be - // able to access it anyway). - permission: 'public', - }; +// In sandstorm we only have one board per sandstorm instance. Since we want to +// keep most of our code unchanged, we simply hard-code a board `_id` and +// redirect the user to this particular board. +const sandstormBoard = { + _id: 'sandstorm', + + // XXX Should be shared with the grain instance name. + title: 'Wekan', + slug: 'libreboard', + members: [], + + // Board access security is handled by sandstorm, so in our point of view we + // can alway assume that the board is public (unauthorized users won't be able + // to access it anyway). + permission: 'public', +}; +if (isSandstorm && Meteor.isServer) { function updateUserPermissions(userId, permissions) { const isActive = permissions.indexOf('participate') > -1; const isAdmin = permissions.indexOf('configure') > -1; @@ -142,6 +142,18 @@ if (isSandstorm && Meteor.isClient) { updateSandstormMetaData({ setTitle: DocHead.getTitle() }); }); + // Runtime redirection from the home page to the unique board -- since the + // home page contains a list of a single board it's not worth to display. + // + // XXX Hack. The home route is already defined at this point so we need to + // add the redirection trigger to the internal route object. + FlowRouter._routesMap.home._triggersEnter.push((context, redirect) => { + redirect(FlowRouter.path('board', { + id: sandstormBoard._id, + slug: sandstormBoard.slug, + })); + }); + // XXX Hack. `Meteor.absoluteUrl` doesn't work in Sandstorm, since every // session has a different URL whereas Meteor computes absoluteUrl based on // the ROOT_URL environment variable. So we overwrite this function on a -- cgit v1.2.3-1-g7c22