From 36b5965dd07e3f0fd90069353310739c394c220f Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 8 Nov 2019 00:21:04 +0200 Subject: Close card button now visible on mobile. Closes #2261 --- client/components/cards/cardDetails.jade | 11 ++++++++--- client/components/cards/cardDetails.styl | 14 +++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) (limited to 'client') diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 53a264ec..2b4f44b9 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -4,9 +4,14 @@ template(name="cardDetails") +inlinedForm(classNames="js-card-details-title") +editCardTitleForm else - a.fa.fa-times-thin.close-card-details.js-close-card-details - if currentUser.isBoardMember - a.fa.fa-navicon.card-details-menu.js-open-card-details-menu + unless isMiniScreen + a.fa.fa-times-thin.close-card-details.js-close-card-details + if currentUser.isBoardMember + a.fa.fa-navicon.card-details-menu.js-open-card-details-menu + if isMiniScreen + a.fa.fa-times-thin.close-card-details-mobile-web.js-close-card-details + if currentUser.isBoardMember + a.fa.fa-navicon.card-details-menu-mobile-web.js-open-card-details-menu h2.card-details-title.js-card-title( class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}") +viewer diff --git a/client/components/cards/cardDetails.styl b/client/components/cards/cardDetails.styl index e4549e44..3fc4d047 100644 --- a/client/components/cards/cardDetails.styl +++ b/client/components/cards/cardDetails.styl @@ -107,7 +107,9 @@ avatar-radius = 50% border-bottom: 1px solid darken(white, 14%) .close-card-details, - .card-details-menu + .card-details-menu, + .close-card-details-mobile-web, + .card-details-menu-mobile-web float: right .close-card-details @@ -115,10 +117,20 @@ avatar-radius = 50% padding: 5px margin-right: -8px + .close-card-details-mobile-web + font-size: 24px + padding: 5px + margin-right: 40px + .card-details-menu font-size: 17px padding: 10px + .card-details-menu-mobile-web + font-size: 17px + padding: 10px + margin-right: 30px + .card-details-watch font-size: 17px padding-left: 7px -- cgit v1.2.3-1-g7c22 From 274a997e62b421b034e1eb0b3a486813fe127240 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 13 Nov 2019 19:33:13 +0200 Subject: Fix card, list and swimlane move. Allow moving cards in multiselect mode. Closes #2771, closes #2743, closes #2704, related #2081 --- client/components/boards/boardBody.js | 19 ++++++++++++- client/components/lists/list.js | 27 ++++++++++--------- client/components/swimlanes/swimlaneHeader.jade | 2 ++ client/components/swimlanes/swimlanes.js | 36 ++++++++++++++----------- 4 files changed, 54 insertions(+), 30 deletions(-) (limited to 'client') diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js index 47042ae7..82f12c40 100644 --- a/client/components/boards/boardBody.js +++ b/client/components/boards/boardBody.js @@ -89,7 +89,6 @@ BlazeComponent.extendComponent({ helper.append(list.clone()); return helper; }, - handle: '.js-swimlane-header-handle', items: '.swimlane:not(.placeholder)', placeholder: 'swimlane placeholder', distance: 7, @@ -193,6 +192,24 @@ BlazeComponent.extendComponent({ // ugly touch event hotfix enableClickOnTouch('.js-swimlane:not(.placeholder)'); + this.autorun(() => { + if ( + Utils.isMiniScreen() || + (!Utils.isMiniScreen() && Meteor.user().hasShowDesktopDragHandles()) + ) { + $swimlanesDom.sortable({ + handle: '.js-swimlane-header-handle', + }); + } else { + $swimlanesDom.sortable({ + handle: '.swimlane-header', + }); + } + + // Disable drag-dropping if the current user is not a board member or is comment only + $swimlanesDom.sortable('option', 'disabled', !userIsMember()); + }); + function userIsMember() { return ( Meteor.user() && diff --git a/client/components/lists/list.js b/client/components/lists/list.js index b7b8b2e0..6bd8eefe 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -31,18 +31,6 @@ BlazeComponent.extendComponent({ const itemsSelector = '.js-minicard:not(.placeholder, .js-card-composer)'; const $cards = this.$('.js-minicards'); - if (Utils.isMiniScreen) { - $('.js-minicards').sortable({ - handle: '.handle', - }); - } - - if (!Utils.isMiniScreen && showDesktopDragHandles) { - $('.js-minicards').sortable({ - handle: '.handle', - }); - } - $cards.sortable({ connectWith: '.js-minicards:not(.js-list-full)', tolerance: 'pointer', @@ -128,8 +116,21 @@ BlazeComponent.extendComponent({ // ugly touch event hotfix enableClickOnTouch(itemsSelector); - // Disable drag-dropping if the current user is not a board member or is comment only this.autorun(() => { + if ( + Utils.isMiniScreen() || + (!Utils.isMiniScreen() && Meteor.user().hasShowDesktopDragHandles()) + ) { + $cards.sortable({ + handle: '.handle', + }); + } else { + $cards.sortable({ + handle: '.minicard', + }); + } + + // Disable drag-dropping if the current user is not a board member or is comment only $cards.sortable('option', 'disabled', !userIsMember()); }); diff --git a/client/components/swimlanes/swimlaneHeader.jade b/client/components/swimlanes/swimlaneHeader.jade index 72a7f054..4b48b0cc 100644 --- a/client/components/swimlanes/swimlaneHeader.jade +++ b/client/components/swimlanes/swimlaneHeader.jade @@ -17,6 +17,8 @@ template(name="swimlaneFixedHeader") a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon a.fa.fa-navicon.js-open-swimlane-menu unless isMiniScreen + unless showDesktopDragHandles + a.swimlane-header.handle.fa.fa-arrows.js-swimlane-header-handle if showDesktopDragHandles a.swimlane-header-handle.handle.fa.fa-arrows.js-swimlane-header-handle if isMiniScreen diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 8faad870..f2fa882f 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -53,18 +53,6 @@ function initSortable(boardComponent, $listsDom) { }, }; - if (Utils.isMiniScreen) { - $listsDom.sortable({ - handle: '.js-list-handle', - }); - } - - if (!Utils.isMiniScreen && showDesktopDragHandles) { - $listsDom.sortable({ - handle: '.js-list-header', - }); - } - $listsDom.sortable({ tolerance: 'pointer', helper: 'clone', @@ -108,15 +96,29 @@ function initSortable(boardComponent, $listsDom) { ); } - // Disable drag-dropping while in multi-selection mode, or if the current user - // is not a board member boardComponent.autorun(() => { + if ( + Utils.isMiniScreen() || + (!Utils.isMiniScreen() && Meteor.user().hasShowDesktopDragHandles()) + ) { + $listsDom.sortable({ + handle: '.js-list-handle', + }); + } else { + $listsDom.sortable({ + handle: '.js-list-header', + }); + } + const $listDom = $listsDom; if ($listDom.data('sortable')) { $listsDom.sortable( 'option', 'disabled', - MultiSelection.isActive() || !userIsMember(), + // Disable drag-dropping when user is not member + !userIsMember(), + // Not disable drag-dropping while in multi-selection mode + // MultiSelection.isActive() || !userIsMember(), ); } }); @@ -164,7 +166,9 @@ BlazeComponent.extendComponent({ // his mouse. const noDragInside = ['a', 'input', 'textarea', 'p'].concat( - Util.isMiniScreen || (!Util.isMiniScreen && showDesktopDragHandles) + Utils.isMiniScreen() || + (!Utils.isMiniScreen() && + Meteor.user().hasShowDesktopDragHandles()) ? ['.js-list-handle', '.js-swimlane-header-handle'] : ['.js-list-header'], ); -- cgit v1.2.3-1-g7c22 From a6366114718f0faf0e1c600374ffdd8745a3d9ff Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 17 Nov 2019 00:57:50 +0200 Subject: Remove swimlane handle at desktop non-handle mode. --- client/components/swimlanes/swimlaneHeader.jade | 2 -- 1 file changed, 2 deletions(-) (limited to 'client') diff --git a/client/components/swimlanes/swimlaneHeader.jade b/client/components/swimlanes/swimlaneHeader.jade index 4b48b0cc..72a7f054 100644 --- a/client/components/swimlanes/swimlaneHeader.jade +++ b/client/components/swimlanes/swimlaneHeader.jade @@ -17,8 +17,6 @@ template(name="swimlaneFixedHeader") a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon a.fa.fa-navicon.js-open-swimlane-menu unless isMiniScreen - unless showDesktopDragHandles - a.swimlane-header.handle.fa.fa-arrows.js-swimlane-header-handle if showDesktopDragHandles a.swimlane-header-handle.handle.fa.fa-arrows.js-swimlane-header-handle if isMiniScreen -- cgit v1.2.3-1-g7c22 From 26e0bbce172f89baa380ddae19b7b495519db40f Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 17 Nov 2019 01:20:26 +0200 Subject: Swimlanes collapsed by default. TODO: - Add count. - Move list names to top, if possible. I did not get it working yet. - Try to fit collapse+swimlane name etc at same row. Related #2804 --- client/components/swimlanes/swimlanes.jade | 31 ++++++++------- client/components/swimlanes/swimlanes.js | 16 ++++++++ client/components/swimlanes/swimlanes.styl | 60 +++++++++++++++++++++++------- 3 files changed, 80 insertions(+), 27 deletions(-) (limited to 'client') diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index 9eab6054..3c70833e 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -1,24 +1,27 @@ template(name="swimlane") .swimlane +swimlaneHeader - .swimlane.js-lists.js-swimlane - if isMiniScreen - if currentListIsInThisSwimlane _id - +list(currentList) - unless currentList + // Minimize swimlanes next 2 lines below https://www.w3schools.com/howto/howto_js_accordion.asp + button(class="accordion") + div(class="panel") + .swimlane.js-lists.js-swimlane + if isMiniScreen + if currentListIsInThisSwimlane _id + +list(currentList) + unless currentList + each lists + +miniList(this) + if currentUser.isBoardMember + unless currentUser.isCommentOnly + +addListForm + else each lists - +miniList(this) + +list(this) + if currentCardIsInThisList _id ../_id + +cardDetails(currentCard) if currentUser.isBoardMember unless currentUser.isCommentOnly +addListForm - else - each lists - +list(this) - if currentCardIsInThisList _id ../_id - +cardDetails(currentCard) - if currentUser.isBoardMember - unless currentUser.isCommentOnly - +addListForm template(name="listsGroup") .swimlane.list-group.js-lists diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index f2fa882f..0b94174d 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -134,6 +134,22 @@ BlazeComponent.extendComponent({ } initSortable(boardComponent, $listsDom); + + // Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp + var acc = document.getElementsByClassName("accordion"); + var i; + for (i = 0; i < acc.length; i++) { + acc[i].addEventListener("click", function() { + this.classList.toggle("active"); + var panel = this.nextElementSibling; + if (panel.style.maxHeight) { + panel.style.maxHeight = null; + } else { + panel.style.maxHeight = panel.scrollHeight + "px"; + } + }); + } + // Minimize swimlanes end https://www.w3schools.com/howto/howto_js_accordion.asp }, onCreated() { this.draggingActive = new ReactiveVar(false); diff --git a/client/components/swimlanes/swimlanes.styl b/client/components/swimlanes/swimlanes.styl index 164c66d5..9a89bf07 100644 --- a/client/components/swimlanes/swimlanes.styl +++ b/client/components/swimlanes/swimlanes.styl @@ -1,5 +1,39 @@ @import 'nib' +// Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp + +.accordion + cursor: pointer + width: 30px + height: 20px + border: none + outline: none + font-size: 18px + transition: 0.4s + padding-top: 0px + margin-top: 0px + +.accordion:after + // Unicode triagle right: + content: '\25B6' + color: #777 + font-weight: bold + float: left + +.active:after + // Unicode triangle down: + content: '\25BC' + +.panel + width: 100% + max-height: 0 + overflow: hidden + transition: max-height 0.2s ease-out + margin: 0px + padding: 0px + +// Minimize swimlanes end https://www.w3schools.com/howto/howto_js_accordion.asp + .swimlane // Even if this background color is the same as the body we can't leave it // transparent, because that won't work during a swimlane drag. @@ -25,22 +59,22 @@ cursor: grabbing .swimlane-header-wrap - display: flex; - flex-direction: row; - flex: 1 0 100%; - background-color: #ccc; + display: flex + flex-direction: row + flex: 1 0 100% + background-color: #ccc .swimlane-header - font-size: 14px; + font-size: 14px padding: 5px 5px - font-weight: bold; - min-height: 9px; - width: 100%; - overflow: hidden; - -o-text-overflow: ellipsis; - text-overflow: ellipsis; - word-wrap: break-word; - text-align: center; + font-weight: bold + min-height: 9px + width: 100% + overflow: hidden + -o-text-overflow: ellipsis + text-overflow: ellipsis + word-wrap: break-word + text-align: center .swimlane-header-menu position: absolute -- cgit v1.2.3-1-g7c22 From c93ea33d05bed042a744fc11e4730c9e5ecdb93b Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 17 Nov 2019 01:36:33 +0200 Subject: Fix prettify. --- client/components/swimlanes/swimlanes.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'client') diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 0b94174d..2cba5b56 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -136,16 +136,16 @@ BlazeComponent.extendComponent({ initSortable(boardComponent, $listsDom); // Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp - var acc = document.getElementsByClassName("accordion"); + var acc = document.getElementsByClassName('accordion'); var i; for (i = 0; i < acc.length; i++) { - acc[i].addEventListener("click", function() { - this.classList.toggle("active"); + acc[i].addEventListener('click', function() { + this.classList.toggle('active'); var panel = this.nextElementSibling; if (panel.style.maxHeight) { panel.style.maxHeight = null; } else { - panel.style.maxHeight = panel.scrollHeight + "px"; + panel.style.maxHeight = panel.scrollHeight + 'px'; } }); } -- cgit v1.2.3-1-g7c22 From f652b677d0fa9c8bbeef7ca366aebd5f5a149d02 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 17 Nov 2019 01:59:57 +0200 Subject: Fix prettier. --- client/components/swimlanes/swimlanes.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'client') diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 2cba5b56..f4e33ddd 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -136,16 +136,16 @@ BlazeComponent.extendComponent({ initSortable(boardComponent, $listsDom); // Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp - var acc = document.getElementsByClassName('accordion'); - var i; + let acc = document.getElementsByClassName('accordion'); + let i; for (i = 0; i < acc.length; i++) { acc[i].addEventListener('click', function() { this.classList.toggle('active'); - var panel = this.nextElementSibling; + let panel = this.nextElementSibling; if (panel.style.maxHeight) { panel.style.maxHeight = null; } else { - panel.style.maxHeight = panel.scrollHeight + 'px'; + panel.style.maxHeight = panel.scrollHeight.toString() + 'px'; } }); } -- cgit v1.2.3-1-g7c22 From 34bfb09c85ead9d0db4fd8b5fb9f923593bcb25a Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 17 Nov 2019 14:03:39 +0200 Subject: Fix prettier. --- client/components/swimlanes/swimlanes.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'client') diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index f4e33ddd..56d8fb81 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -136,16 +136,16 @@ BlazeComponent.extendComponent({ initSortable(boardComponent, $listsDom); // Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp - let acc = document.getElementsByClassName('accordion'); + const acc = document.getElementsByClassName('accordion'); let i; for (i = 0; i < acc.length; i++) { acc[i].addEventListener('click', function() { this.classList.toggle('active'); - let panel = this.nextElementSibling; + const panel = this.nextElementSibling; if (panel.style.maxHeight) { panel.style.maxHeight = null; } else { - panel.style.maxHeight = panel.scrollHeight.toString() + 'px'; + panel.style.maxHeight = `${panel.scrollHeight}px`; } }); } -- cgit v1.2.3-1-g7c22 From 96abe3c6914ce37d9fb44da8fda375e40ad65c9e Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 18 Nov 2019 22:23:49 +0200 Subject: New feature: Now there is popup selection of Lists/Swimlanes/Calendar/Roles. New feature, not set visible yet, because switching to it does not work properly yet: Collapsible Swimlanes #2804 Fix: Public board now loads correctly. When you select one of Lists/Swimlanes/Calendar view and reload webbrowser page, it can change view. Closes #2311 Fix: List sorting commented out. Closes #2800 Fix: Errors hasHiddenMinicardText, hasShowDragHandles, showSort, hasSortBy, profile, FirefoxAndroid/IE11/Vivaldi/Chromium browsers not working by using cookies instead of database. More details at https://github.com/wekan/wekan/issues/2643#issuecomment-554907955 Note: Cookie changes are not always immediate, if there is no effect, you may need to reload webbrowser page. Closes #2643 . Thanks to xet7 ! --- client/components/boards/boardBody.js | 29 +++++-- client/components/boards/boardHeader.jade | 104 +++++++++++++++++------- client/components/boards/boardHeader.js | 109 +++++++++++++++++++++----- client/components/cards/minicard.js | 24 +++++- client/components/lists/list.js | 25 +++--- client/components/lists/listBody.js | 25 +++--- client/components/lists/listHeader.js | 16 +++- client/components/sidebar/sidebar.js | 16 +++- client/components/swimlanes/swimlaneHeader.js | 8 +- client/components/swimlanes/swimlanes.jade | 26 +++++- client/components/swimlanes/swimlanes.js | 55 +++++++------ client/components/users/userHeader.js | 30 ++++++- client/lib/utils.js | 54 +++++++++++++ 13 files changed, 403 insertions(+), 118 deletions(-) (limited to 'client') diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js index 82f12c40..8122a0b6 100644 --- a/client/components/boards/boardBody.js +++ b/client/components/boards/boardBody.js @@ -192,10 +192,13 @@ BlazeComponent.extendComponent({ // ugly touch event hotfix enableClickOnTouch('.js-swimlane:not(.placeholder)'); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + this.autorun(() => { if ( Utils.isMiniScreen() || - (!Utils.isMiniScreen() && Meteor.user().hasShowDesktopDragHandles()) + (!Utils.isMiniScreen() && cookies.has('showDesktopDragHandles')) ) { $swimlanesDom.sortable({ handle: '.js-swimlane-header-handle', @@ -227,20 +230,32 @@ BlazeComponent.extendComponent({ }, isViewSwimlanes() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); const currentUser = Meteor.user(); - if (!currentUser) return false; + if (!currentUser) { + return cookies.get('boardView') === 'board-view-swimlanes'; + } return (currentUser.profile || {}).boardView === 'board-view-swimlanes'; }, isViewLists() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); const currentUser = Meteor.user(); - if (!currentUser) return true; + if (!currentUser) { + return cookies.get('boardView') === 'board-view-lists'; + } return (currentUser.profile || {}).boardView === 'board-view-lists'; }, isViewCalendar() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); const currentUser = Meteor.user(); - if (!currentUser) return false; + if (!currentUser) { + return cookies.get('boardView') === 'board-view-cal'; + } return (currentUser.profile || {}).boardView === 'board-view-cal'; }, @@ -398,8 +413,12 @@ BlazeComponent.extendComponent({ }; }, isViewCalendar() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); const currentUser = Meteor.user(); - if (!currentUser) return false; + if (!currentUser) { + return cookies.get('boardView') === 'board-view-cal'; + } return (currentUser.profile || {}).boardView === 'board-view-cal'; }, }).register('calendarView'); diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index 175cc2c2..39221778 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -77,10 +77,11 @@ template(name="boardHeaderBar") i.fa.fa-archive span {{_ 'archives'}} - if showSort - a.board-header-btn.js-open-sort-view(title="{{_ 'sort-desc'}}") - i.fa(class="{{directionClass}}") - span {{_ 'sort'}}{{_ listSortShortDesc}} + //if showSort + // a.board-header-btn.js-open-sort-view(title="{{_ 'sort-desc'}}") + // i.fa(class="{{directionClass}}") + // span {{_ 'sort'}}{{_ listSortShortDesc}} + a.board-header-btn.js-open-filter-view( title="{{#if Filter.isActive}}{{_ 'filter-on-desc'}}{{else}}{{_ 'filter'}}{{/if}}" class="{{#if Filter.isActive}}emphasis{{/if}}") @@ -89,15 +90,6 @@ template(name="boardHeaderBar") if Filter.isActive a.board-header-btn-close.js-filter-reset(title="{{_ 'filter-clear'}}") i.fa.fa-times-thin - - if currentUser.isAdmin - a.board-header-btn.js-open-rules-view(title="{{_ 'rules'}}") - i.fa.fa-magic - span {{_ 'rules'}} - else if currentUser.isBoardAdmin - a.board-header-btn.js-open-rules-view(title="{{_ 'rules'}}") - i.fa.fa-magic - span {{_ 'rules'}} a.board-header-btn.js-open-search-view(title="{{_ 'search'}}") i.fa.fa-search @@ -106,8 +98,19 @@ template(name="boardHeaderBar") unless currentBoard.isTemplatesBoard a.board-header-btn.js-toggle-board-view( title="{{_ 'board-view'}}") - i.fa.fa-th-large - span {{#if currentUser.profile.boardView}}{{_ currentUser.profile.boardView}}{{else}}{{_ 'board-view-lists'}}{{/if}} + i.fa.fa-caret-down + if $eq boardView 'board-view-lists' + i.fa.fa-trello + if $eq boardView 'board-view-swimlanes' + i.fa.fa-th-large + // unless collapseSwimlane + // i.fa.fa-th-large + // if collapseSwimlane + // i.fa.fa-play + if $eq boardView 'board-view-cal' + i.fa.fa-calendar + span {{#if boardView}}{{_ boardView}}{{else}}{{_ 'board-view-lists'}}{{/if}} + //span {{#if collapseSwimlane}}{{_ 'board-view-collapse'}}{{else}}{{#if boardView}}{{_ boardView}}{{else}}{{_ 'board-view-lists'}}{{/if}}{{/if}} if canModifyBoard a.board-header-btn.js-multiselection-activate( @@ -172,6 +175,51 @@ template(name="boardChangeWatchPopup") i.fa.fa-check span.sub-name {{_ 'muted-info'}} +template(name="boardChangeViewPopup") + ul.pop-over-list + li + with "board-view-lists" + a.js-open-lists-view + i.fa.fa-trello.colorful + | {{_ 'board-view-lists'}} + if $eq Utils.boardView "board-view-lists" + i.fa.fa-check + li + with "board-view-swimlanes" + a.js-open-swimlanes-view + i.fa.fa-th-large.colorful + | {{_ 'board-view-swimlanes'}} + if $eq Utils.boardView "board-view-swimlanes" + i.fa.fa-check + //li + // with "board-view-collapse" + // a.js-open-collapse-view + // i.fa.fa-play.colorful + // | {{_ 'board-view-collapse'}} + // if $eq Utils.boardView "board-view-collapse" + // i.fa.fa-check + li + with "board-view-cal" + a.js-open-cal-view + i.fa.fa-calendar.colorful + | {{_ 'board-view-cal'}} + if $eq Utils.boardView "board-view-cal" + i.fa.fa-check + if currentUser.isAdmin + hr + li + with "board-view-rules" + a.js-open-rules-view(title="{{_ 'rules'}}") + i.fa.fa-magic + | {{_ 'rules'}} + else if currentUser.isBoardAdmin + hr + li + with "board-view-rules" + a.js-open-rules-view(title="{{_ 'rules'}}") + i.fa.fa-magic + | {{_ 'rules'}} + template(name="createBoard") form label @@ -198,19 +246,19 @@ template(name="createBoard") | / a.js-board-template {{_ 'template'}} -template(name="listsortPopup") - h2 - | {{_ 'list-sort-by'}} - hr - ul.pop-over-list - each value in allowedSortValues - li - a.js-sort-by(name="{{value.name}}") - if $eq sortby value.name - i(class="fa {{Direction}}") - | {{_ value.label }}{{_ value.shortLabel}} - if $eq sortby value.name - i(class="fa fa-check") +//template(name="listsortPopup") +// h2 +// | {{_ 'list-sort-by'}} +// hr +// ul.pop-over-list +// each value in allowedSortValues +// li +// a.js-sort-by(name="{{value.name}}") +// if $eq sortby value.name +// i(class="fa {{Direction}}") +// | {{_ value.label }}{{_ value.shortLabel}} +// if $eq sortby value.name +// i(class="fa fa-check") template(name="boardChangeTitlePopup") form diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index e14b1444..1706f8e4 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -1,5 +1,7 @@ +/* const DOWNCLS = 'fa-sort-down'; const UPCLS = 'fa-sort-up'; +*/ Template.boardMenuPopup.events({ 'click .js-rename-board': Popup.open('boardChangeTitle'), 'click .js-custom-fields'() { @@ -82,6 +84,7 @@ BlazeComponent.extendComponent({ const currentBoard = Boards.findOne(Session.get('currentBoard')); return currentBoard && currentBoard.stars >= 2; }, + /* showSort() { return Meteor.user().hasSortBy(); }, @@ -101,6 +104,7 @@ BlazeComponent.extendComponent({ listSortShortDesc() { return `list-label-short-${this.currentListSortBy()}`; }, + */ events() { return [ { @@ -114,30 +118,14 @@ BlazeComponent.extendComponent({ 'click .js-open-archived-board'() { Modal.open('archivedBoards'); }, - 'click .js-toggle-board-view'() { - const currentUser = Meteor.user(); - if ( - (currentUser.profile || {}).boardView === 'board-view-swimlanes' - ) { - currentUser.setBoardView('board-view-cal'); - } else if ( - (currentUser.profile || {}).boardView === 'board-view-lists' - ) { - currentUser.setBoardView('board-view-swimlanes'); - } else if ( - (currentUser.profile || {}).boardView === 'board-view-cal' - ) { - currentUser.setBoardView('board-view-lists'); - } else { - currentUser.setBoardView('board-view-swimlanes'); - } - }, + 'click .js-toggle-board-view': Popup.open('boardChangeView'), 'click .js-toggle-sidebar'() { Sidebar.toggle(); }, 'click .js-open-filter-view'() { Sidebar.setView('filter'); }, + /* 'click .js-open-sort-view'(evt) { const target = evt.target; if (target.tagName === 'I') { @@ -148,6 +136,7 @@ BlazeComponent.extendComponent({ Popup.open('listsort')(evt); } }, + */ 'click .js-filter-reset'(event) { event.stopPropagation(); Sidebar.setView(); @@ -156,9 +145,6 @@ BlazeComponent.extendComponent({ 'click .js-open-search-view'() { Sidebar.setView('search'); }, - 'click .js-open-rules-view'() { - Modal.openWide('rulesMain'); - }, 'click .js-multiselection-activate'() { const currentCard = Session.get('currentCard'); MultiSelection.activate(); @@ -186,6 +172,85 @@ Template.boardHeaderBar.helpers({ !Meteor.user().isCommentOnly() ); }, + boardView() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.get('boardView') === 'board-view-lists') { + return 'board-view-lists'; + } else if (cookies.get('boardView') === 'board-view-swimlanes') { + return 'board-view-swimlanes'; + } else if (cookies.get('boardView') === 'board-view-collapse') { + return 'board-view-collapse'; + } else if (cookies.get('boardView') === 'board-view-cal') { + return 'board-view-cal'; + } else { + return false; + } + }, + collapseSwimlane() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('collapseSwimlane')) { + return true; + } else { + return false; + } + }, +}); + +Template.boardChangeViewPopup.events({ + 'click .js-open-lists-view'() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.get('boardView') !== 'board-view-lists') { + cookies.set('boardView', 'board-view-lists'); + const currentUser = Meteor.user(); + if (currentUser) { + Meteor.user().setBoardView('board-view-lists'); + } + } + Popup.close(); + }, + 'click .js-open-swimlanes-view'() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.get('boardView') !== 'board-view-swimlanes') { + cookies.set('boardView', 'board-view-swimlanes'); + cookies.remove('collapseSwimlane'); + const currentUser = Meteor.user(); + if (currentUser) { + Meteor.user().setBoardView('board-view-swimlanes'); + } + } + Popup.close(); + }, + 'click .js-open-collapse-view'() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.get('boardView') !== 'board-view-swimlanes') { + cookies.set('boardView', 'board-view-swimlanes'); + cookies.set('collapseSwimlane', 'true'); + const currentUser = Meteor.user(); + if (currentUser) { + Meteor.user().setBoardView('board-view-swimlanes'); + } + } + Popup.close(); + }, + 'click .js-open-cal-view'() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + cookies.set('boardView', 'board-view-cal'); + const currentUser = Meteor.user(); + if (currentUser) { + Meteor.user().setBoardView('board-view-cal'); + } + Popup.close(); + }, + 'click .js-open-rules-view'() { + Modal.openWide('rulesMain'); + Popup.close(); + }, }); const CreateBoard = BlazeComponent.extendComponent({ @@ -308,6 +373,7 @@ BlazeComponent.extendComponent({ }, }).register('boardChangeWatchPopup'); +/* BlazeComponent.extendComponent({ onCreated() { //this.sortBy = new ReactiveVar(); @@ -377,3 +443,4 @@ BlazeComponent.extendComponent({ ]; }, }).register('listsortPopup'); +*/ diff --git a/client/components/cards/minicard.js b/client/components/cards/minicard.js index 4c76db46..5caea709 100644 --- a/client/components/cards/minicard.js +++ b/client/components/cards/minicard.js @@ -18,7 +18,13 @@ BlazeComponent.extendComponent({ }, { 'click .js-toggle-minicard-label-text'() { - Meteor.call('toggleMinicardLabelText'); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('hiddenMinicardLabelText')) { + cookies.remove('hiddenMinicardLabelText'); //true + } else { + cookies.set('hiddenMinicardLabelText', 'true'); //true + } }, }, ]; @@ -27,9 +33,21 @@ BlazeComponent.extendComponent({ Template.minicard.helpers({ showDesktopDragHandles() { - return Meteor.user().hasShowDesktopDragHandles(); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + return true; + } else { + return false; + } }, hiddenMinicardLabelText() { - return Meteor.user().hasHiddenMinicardLabelText(); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('hiddenMinicardLabelText')) { + return true; + } else { + return false; + } }, }); diff --git a/client/components/lists/list.js b/client/components/lists/list.js index 6bd8eefe..8433ad90 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -73,16 +73,15 @@ BlazeComponent.extendComponent({ const listId = Blaze.getData(ui.item.parents('.list').get(0))._id; const currentBoard = Boards.findOne(Session.get('currentBoard')); let swimlaneId = ''; - const boardView = (Meteor.user().profile || {}).boardView; if ( - boardView === 'board-view-swimlanes' || + Utils.boardView() === 'board-view-swimlanes' || currentBoard.isTemplatesBoard() ) swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id; else if ( - boardView === 'board-view-lists' || - boardView === 'board-view-cal' || - !boardView + Utils.boardView() === 'board-view-lists' || + Utils.boardView() === 'board-view-cal' || + !Utils.boardView ) swimlaneId = currentBoard.getDefaultSwimline()._id; @@ -116,11 +115,11 @@ BlazeComponent.extendComponent({ // ugly touch event hotfix enableClickOnTouch(itemsSelector); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + this.autorun(() => { - if ( - Utils.isMiniScreen() || - (!Utils.isMiniScreen() && Meteor.user().hasShowDesktopDragHandles()) - ) { + if (!Utils.isMiniScreen() && cookies.has('showDesktopDragHandles')) { $cards.sortable({ handle: '.handle', }); @@ -164,7 +163,13 @@ BlazeComponent.extendComponent({ Template.list.helpers({ showDesktopDragHandles() { - return Meteor.user().hasShowDesktopDragHandles(); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + return true; + } else { + return false; + } }, }); diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index c8e41a0b..46d2794e 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -48,7 +48,6 @@ BlazeComponent.extendComponent({ const board = this.data().board(); let linkedId = ''; let swimlaneId = ''; - const boardView = (Meteor.user().profile || {}).boardView; let cardType = 'cardType-card'; if (title) { if (board.isTemplatesBoard()) { @@ -71,14 +70,14 @@ BlazeComponent.extendComponent({ }); cardType = 'cardType-linkedBoard'; } - } else if (boardView === 'board-view-swimlanes') + } else if (Utils.boardView() === 'board-view-swimlanes') swimlaneId = this.parentComponent() .parentComponent() .data()._id; else if ( - boardView === 'board-view-lists' || - boardView === 'board-view-cal' || - !boardView + Utils.boardView() === 'board-view-lists' || + Utils.boardView() === 'board-view-cal' || + !Utils.boardView ) swimlaneId = board.getDefaultSwimline()._id; @@ -157,9 +156,8 @@ BlazeComponent.extendComponent({ }, idOrNull(swimlaneId) { - const currentUser = Meteor.user(); if ( - (currentUser.profile || {}).boardView === 'board-view-swimlanes' || + Utils.boardView() === 'board-view-swimlanes' || this.data() .board() .isTemplatesBoard() @@ -397,10 +395,9 @@ BlazeComponent.extendComponent({ '.js-swimlane', ); this.swimlaneId = ''; - const boardView = (Meteor.user().profile || {}).boardView; - if (boardView === 'board-view-swimlanes') + if (Utils.boardView() === 'board-view-swimlanes') this.swimlaneId = Blaze.getData(swimlane[0])._id; - else if (boardView === 'board-view-lists' || !boardView) + else if (Utils.boardView() === 'board-view-lists' || !Utils.boardView) this.swimlaneId = Swimlanes.findOne({ boardId: this.boardId })._id; }, @@ -580,7 +577,7 @@ BlazeComponent.extendComponent({ const swimlane = $(Popup._getTopStack().openerElement).parents( '.js-swimlane', ); - if ((Meteor.user().profile || {}).boardView === 'board-view-swimlanes') + if (Utils.boardView() === 'board-view-swimlanes') this.swimlaneId = Blaze.getData(swimlane[0])._id; else this.swimlaneId = Swimlanes.findOne({ boardId: this.boardId })._id; // List where to insert card @@ -709,8 +706,7 @@ BlazeComponent.extendComponent({ if (isSandstorm) { const user = Meteor.user(); if (user) { - const boardView = (Meteor.user().profile || {}).boardView; - if (boardView === 'board-view-swimlanes') { + if (Utils.boardView() === 'board-view-swimlanes') { this.swimlaneId = this.parentComponent() .parentComponent() .parentComponent() @@ -718,8 +714,7 @@ BlazeComponent.extendComponent({ } } } else { - const boardView = (Meteor.user().profile || {}).boardView; - if (boardView === 'board-view-swimlanes') { + if (Utils.boardView() === 'board-view-swimlanes') { this.swimlaneId = this.parentComponent() .parentComponent() .parentComponent() diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index b524d4e0..90946610 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -44,14 +44,16 @@ BlazeComponent.extendComponent({ }, limitToShowCardsCount() { - return Meteor.user().getLimitToShowCardsCount(); + const currentUser = Meteor.user(); + if (currentUser) { + return Meteor.user().getLimitToShowCardsCount(); + } }, cardsCount() { const list = Template.currentData(); let swimlaneId = ''; - const boardView = (Meteor.user().profile || {}).boardView; - if (boardView === 'board-view-swimlanes') + if (Utils.boardView() === 'board-view-swimlanes') swimlaneId = this.parentComponent() .parentComponent() .data()._id; @@ -100,7 +102,13 @@ BlazeComponent.extendComponent({ Template.listHeader.helpers({ showDesktopDragHandles() { - return Meteor.user().hasShowDesktopDragHandles(); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + return true; + } else { + return false; + } }, }); diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index f1ccfb1e..4b918d54 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -107,7 +107,13 @@ BlazeComponent.extendComponent({ 'click .js-toggle-sidebar': this.toggle, 'click .js-back-home': this.setView, 'click .js-toggle-minicard-label-text'() { - Meteor.call('toggleMinicardLabelText'); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('hiddenMinicardLabelText')) { + cookies.remove('hiddenMinicardLabelText'); //true + } else { + cookies.set('hiddenMinicardLabelText', 'true'); //true + } }, 'click .js-shortcuts'() { FlowRouter.go('shortcuts'); @@ -121,7 +127,13 @@ Blaze.registerHelper('Sidebar', () => Sidebar); Template.homeSidebar.helpers({ hiddenMinicardLabelText() { - return Meteor.user().hasHiddenMinicardLabelText(); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('hiddenMinicardLabelText')) { + return true; + } else { + return false; + } }, }); diff --git a/client/components/swimlanes/swimlaneHeader.js b/client/components/swimlanes/swimlaneHeader.js index 6f8029fd..c8ef4dcb 100644 --- a/client/components/swimlanes/swimlaneHeader.js +++ b/client/components/swimlanes/swimlaneHeader.js @@ -30,7 +30,13 @@ BlazeComponent.extendComponent({ Template.swimlaneHeader.helpers({ showDesktopDragHandles() { - return Meteor.user().hasShowDesktopDragHandles(); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + return true; + } else { + return false; + } }, }); diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index 3c70833e..ea9cc913 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -1,9 +1,7 @@ template(name="swimlane") .swimlane +swimlaneHeader - // Minimize swimlanes next 2 lines below https://www.w3schools.com/howto/howto_js_accordion.asp - button(class="accordion") - div(class="panel") + unless collapseSwimlane .swimlane.js-lists.js-swimlane if isMiniScreen if currentListIsInThisSwimlane _id @@ -22,6 +20,28 @@ template(name="swimlane") if currentUser.isBoardMember unless currentUser.isCommentOnly +addListForm + if collapseSwimlane + // Minimize swimlanes next 2 lines below https://www.w3schools.com/howto/howto_js_accordion.asp + button(class="accordion") + div(class="panel") + .swimlane.js-lists.js-swimlane + if isMiniScreen + if currentListIsInThisSwimlane _id + +list(currentList) + unless currentList + each lists + +miniList(this) + if currentUser.isBoardMember + unless currentUser.isCommentOnly + +addListForm + else + each lists + +list(this) + if currentCardIsInThisList _id ../_id + +cardDetails(currentCard) + if currentUser.isBoardMember + unless currentUser.isCommentOnly + +addListForm template(name="listsGroup") .swimlane.list-group.js-lists diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 56d8fb81..1bb522e5 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -14,7 +14,7 @@ function currentCardIsInThisList(listId, swimlaneId) { if ( currentUser && currentUser.profile && - currentUser.profile.boardView === 'board-view-swimlanes' + Utils.boardView() === 'board-view-swimlanes' ) return ( currentCard && @@ -97,10 +97,9 @@ function initSortable(boardComponent, $listsDom) { } boardComponent.autorun(() => { - if ( - Utils.isMiniScreen() || - (!Utils.isMiniScreen() && Meteor.user().hasShowDesktopDragHandles()) - ) { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (!Utils.isMiniScreen() && cookies.has('showDesktopDragHandles')) { $listsDom.sortable({ handle: '.js-list-handle', }); @@ -135,21 +134,25 @@ BlazeComponent.extendComponent({ initSortable(boardComponent, $listsDom); - // Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp - const acc = document.getElementsByClassName('accordion'); - let i; - for (i = 0; i < acc.length; i++) { - acc[i].addEventListener('click', function() { - this.classList.toggle('active'); - const panel = this.nextElementSibling; - if (panel.style.maxHeight) { - panel.style.maxHeight = null; - } else { - panel.style.maxHeight = `${panel.scrollHeight}px`; - } - }); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('collapseSwimlane')) { + // Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp + const acc = document.getElementsByClassName('accordion'); + let i; + for (i = 0; i < acc.length; i++) { + acc[i].addEventListener('click', function() { + this.classList.toggle('active'); + const panel = this.nextElementSibling; + if (panel.style.maxHeight) { + panel.style.maxHeight = null; + } else { + panel.style.maxHeight = `${panel.scrollHeight}px`; + } + }); + } + // Minimize swimlanes end https://www.w3schools.com/howto/howto_js_accordion.asp } - // Minimize swimlanes end https://www.w3schools.com/howto/howto_js_accordion.asp }, onCreated() { this.draggingActive = new ReactiveVar(false); @@ -181,10 +184,12 @@ BlazeComponent.extendComponent({ // the user will legitimately expect to be able to select some text with // his mouse. + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + const noDragInside = ['a', 'input', 'textarea', 'p'].concat( Utils.isMiniScreen() || - (!Utils.isMiniScreen() && - Meteor.user().hasShowDesktopDragHandles()) + (!Utils.isMiniScreen() && cookies.has('showDesktopDragHandles')) ? ['.js-list-handle', '.js-swimlane-header-handle'] : ['.js-list-header'], ); @@ -265,7 +270,13 @@ BlazeComponent.extendComponent({ Template.swimlane.helpers({ showDesktopDragHandles() { - return Meteor.user().hasShowDesktopDragHandles(); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + return true; + } else { + return false; + } }, canSeeAddList() { return ( diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js index 194f990f..3a5bb4e3 100644 --- a/client/components/users/userHeader.js +++ b/client/components/users/userHeader.js @@ -162,19 +162,41 @@ Template.changeLanguagePopup.events({ Template.changeSettingsPopup.helpers({ showDesktopDragHandles() { - return Meteor.user().hasShowDesktopDragHandles(); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + return true; + } else { + return false; + } }, hiddenSystemMessages() { - return Meteor.user().hasHiddenSystemMessages(); + const currentUser = Meteor.user(); + if (currentUser) { + return Meteor.user().hasHiddenSystemMessages(); + } else { + return false; + } }, showCardsCountAt() { - return Meteor.user().getLimitToShowCardsCount(); + const currentUser = Meteor.user(); + if (currentUser) { + return Meteor.user().getLimitToShowCardsCount(); + } else { + return false; + } }, }); Template.changeSettingsPopup.events({ 'click .js-toggle-desktop-drag-handles'() { - Meteor.call('toggleDesktopDragHandles'); + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + cookies.remove('showDesktopDragHandles'); //true + } else { + cookies.set('showDesktopDragHandles', 'true'); //true + } }, 'click .js-toggle-system-messages'() { Meteor.call('toggleSystemMessages'); diff --git a/client/lib/utils.js b/client/lib/utils.js index cc3526c0..7b4990e7 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -1,4 +1,58 @@ Utils = { + setBoardView(view) { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + currentUser = Meteor.user(); + if (view === 'board-view-lists') { + cookies.set('boardView', 'board-view-lists'); //true + if (currentUser) { + Meteor.user().setBoardView('board-view-lists'); + } + } else if (view === 'board-view-swimlanes') { + cookies.set('boardView', 'board-view-swimlanes'); //true + if (currentUser) { + Meteor.user().setBoardView('board-view-swimlanes'); + } + } else if (view === 'board-view-collapse') { + cookies.set('boardView', 'board-view-swimlane'); //true + cookies.set('collapseSwimlane', 'true'); //true + if (currentUser) { + Meteor.user().setBoardView('board-view-swimlane'); + } + } else if (view === 'board-view-cal') { + cookies.set('boardView', 'board-view-cal'); //true + if (currentUser) { + Meteor.user().setBoardView('board-view-cal'); + } + } + }, + + unsetBoardView() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + cookies.remove('boardView'); + cookies.remove('collapseSwimlane'); + }, + + boardView() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.get('boardView') === 'board-view-lists') { + return 'board-view-lists'; + } else if ( + cookies.get('boardView') === 'board-view-swimlanes' && + !cookies.has('collapseSwimlane') + ) { + return 'board-view-swimlanes'; + } else if (cookies.has('collapseSwimlane')) { + return 'board-view-swimlanes'; + } else if (cookies.get('boardView') === 'board-view-cal') { + return 'board-view-cal'; + } else { + return false; + } + }, + // XXX We should remove these two methods goBoardId(_id) { const board = Boards.findOne(_id); -- cgit v1.2.3-1-g7c22 From 351d4767d7e93c90ac798769d6071da8730d834f Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 19 Nov 2019 14:09:36 +0200 Subject: When logged in, use database for setting, so that changes are immediate. Only on public board use cookies. Comment out Collapse CSS that is not in use. Thanks to xet7 ! --- client/components/boards/boardBody.js | 57 +++++++++++------- client/components/cards/minicard.js | 30 ++++++---- client/components/lists/list.js | 29 +++++++-- client/components/lists/listHeader.js | 15 +++-- client/components/sidebar/sidebar.js | 30 ++++++---- client/components/swimlanes/swimlaneHeader.js | 15 +++-- client/components/swimlanes/swimlanes.jade | 44 +++++++------- client/components/swimlanes/swimlanes.js | 46 +++++++++++--- client/components/swimlanes/swimlanes.styl | 2 + client/components/users/userHeader.js | 86 +++++++++++++++++++++------ 10 files changed, 249 insertions(+), 105 deletions(-) (limited to 'client') diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js index 8122a0b6..f00b8b1d 100644 --- a/client/components/boards/boardBody.js +++ b/client/components/boards/boardBody.js @@ -196,9 +196,20 @@ BlazeComponent.extendComponent({ const cookies = new Cookies(); this.autorun(() => { + let showDesktopDragHandles = false; + currentUser = Meteor.user(); + if (currentUser) { + showDesktopDragHandles = (currentUser.profile || {}).showDesktopDragHandles; + } else { + if (cookies.has('showDesktopDragHandles')) { + showDesktopDragHandles = true; + } else { + showDesktopDragHandles = false; + } + } if ( Utils.isMiniScreen() || - (!Utils.isMiniScreen() && cookies.has('showDesktopDragHandles')) + (!Utils.isMiniScreen() && showDesktopDragHandles) ) { $swimlanesDom.sortable({ handle: '.js-swimlane-header-handle', @@ -230,33 +241,36 @@ BlazeComponent.extendComponent({ }, isViewSwimlanes() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - const currentUser = Meteor.user(); - if (!currentUser) { + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).boardView === 'board-view-swimlanes'; + } else { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); return cookies.get('boardView') === 'board-view-swimlanes'; } - return (currentUser.profile || {}).boardView === 'board-view-swimlanes'; }, isViewLists() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - const currentUser = Meteor.user(); - if (!currentUser) { + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).boardView === 'board-view-lists'; + } else { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); return cookies.get('boardView') === 'board-view-lists'; } - return (currentUser.profile || {}).boardView === 'board-view-lists'; }, isViewCalendar() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - const currentUser = Meteor.user(); - if (!currentUser) { + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).boardView === 'board-view-cal'; + } else { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); return cookies.get('boardView') === 'board-view-cal'; } - return (currentUser.profile || {}).boardView === 'board-view-cal'; }, openNewListForm() { @@ -413,12 +427,13 @@ BlazeComponent.extendComponent({ }; }, isViewCalendar() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - const currentUser = Meteor.user(); - if (!currentUser) { + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).boardView === 'board-view-cal'; + } else { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); return cookies.get('boardView') === 'board-view-cal'; } - return (currentUser.profile || {}).boardView === 'board-view-cal'; }, }).register('calendarView'); diff --git a/client/components/cards/minicard.js b/client/components/cards/minicard.js index 5caea709..a9f92dec 100644 --- a/client/components/cards/minicard.js +++ b/client/components/cards/minicard.js @@ -33,21 +33,31 @@ BlazeComponent.extendComponent({ Template.minicard.helpers({ showDesktopDragHandles() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.has('showDesktopDragHandles')) { - return true; + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).showDesktopDragHandles; } else { - return false; + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + return true; + } else { + return false; + } } }, hiddenMinicardLabelText() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.has('hiddenMinicardLabelText')) { - return true; + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).hiddenMinicardLabelText; } else { - return false; + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('hiddenMinicardLabelText')) { + return true; + } else { + return false; + } } }, }); diff --git a/client/components/lists/list.js b/client/components/lists/list.js index 8433ad90..7a51fc6e 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -119,7 +119,19 @@ BlazeComponent.extendComponent({ const cookies = new Cookies(); this.autorun(() => { - if (!Utils.isMiniScreen() && cookies.has('showDesktopDragHandles')) { + let showDesktopDragHandles = false; + currentUser = Meteor.user(); + if (currentUser) { + showDesktopDragHandles = (currentUser.profile || {}).showDesktopDragHandles; + } else { + if (cookies.has('showDesktopDragHandles')) { + showDesktopDragHandles = true; + } else { + showDesktopDragHandles = false; + } + } + + if (!Utils.isMiniScreen() && showDesktopDragHandles) { $cards.sortable({ handle: '.handle', }); @@ -163,12 +175,17 @@ BlazeComponent.extendComponent({ Template.list.helpers({ showDesktopDragHandles() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.has('showDesktopDragHandles')) { - return true; + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).showDesktopDragHandles; } else { - return false; + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + return true; + } else { + return false; + } } }, }); diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index 90946610..4ef431fb 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -102,12 +102,17 @@ BlazeComponent.extendComponent({ Template.listHeader.helpers({ showDesktopDragHandles() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.has('showDesktopDragHandles')) { - return true; + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).showDesktopDragHandles; } else { - return false; + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + return true; + } else { + return false; + } } }, }); diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index 4b918d54..6bb22f39 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -107,12 +107,17 @@ BlazeComponent.extendComponent({ 'click .js-toggle-sidebar': this.toggle, 'click .js-back-home': this.setView, 'click .js-toggle-minicard-label-text'() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.has('hiddenMinicardLabelText')) { - cookies.remove('hiddenMinicardLabelText'); //true + currentUser = Meteor.user(); + if (currentUser) { + Meteor.call('toggleMinicardLabelText'); } else { - cookies.set('hiddenMinicardLabelText', 'true'); //true + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('hiddenMinicardLabelText')) { + cookies.remove('hiddenMinicardLabelText'); + } else { + cookies.set('hiddenMinicardLabelText', 'true'); + } } }, 'click .js-shortcuts'() { @@ -127,12 +132,17 @@ Blaze.registerHelper('Sidebar', () => Sidebar); Template.homeSidebar.helpers({ hiddenMinicardLabelText() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.has('hiddenMinicardLabelText')) { - return true; + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).hiddenMinicardLabelText; } else { - return false; + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('hiddenMinicardLabelText')) { + return true; + } else { + return false; + } } }, }); diff --git a/client/components/swimlanes/swimlaneHeader.js b/client/components/swimlanes/swimlaneHeader.js index c8ef4dcb..69971b05 100644 --- a/client/components/swimlanes/swimlaneHeader.js +++ b/client/components/swimlanes/swimlaneHeader.js @@ -30,12 +30,17 @@ BlazeComponent.extendComponent({ Template.swimlaneHeader.helpers({ showDesktopDragHandles() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.has('showDesktopDragHandles')) { - return true; + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).showDesktopDragHandles; } else { - return false; + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + return true; + } else { + return false; + } } }, }); diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index ea9cc913..b2e03afe 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -20,28 +20,28 @@ template(name="swimlane") if currentUser.isBoardMember unless currentUser.isCommentOnly +addListForm - if collapseSwimlane - // Minimize swimlanes next 2 lines below https://www.w3schools.com/howto/howto_js_accordion.asp - button(class="accordion") - div(class="panel") - .swimlane.js-lists.js-swimlane - if isMiniScreen - if currentListIsInThisSwimlane _id - +list(currentList) - unless currentList - each lists - +miniList(this) - if currentUser.isBoardMember - unless currentUser.isCommentOnly - +addListForm - else - each lists - +list(this) - if currentCardIsInThisList _id ../_id - +cardDetails(currentCard) - if currentUser.isBoardMember - unless currentUser.isCommentOnly - +addListForm + //if collapseSwimlane + // // Minimize swimlanes next 2 lines below https://www.w3schools.com/howto/howto_js_accordion.asp + // button(class="accordion") + // div(class="panel") + // .swimlane.js-lists.js-swimlane + // if isMiniScreen + // if currentListIsInThisSwimlane _id + // +list(currentList) + // unless currentList + // each lists + // +miniList(this) + // if currentUser.isBoardMember + // unless currentUser.isCommentOnly + // +addListForm + // else + // each lists + // +list(this) + // if currentCardIsInThisList _id ../_id + // +cardDetails(currentCard) + // if currentUser.isBoardMember + // unless currentUser.isCommentOnly + // +addListForm template(name="listsGroup") .swimlane.list-group.js-lists diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 1bb522e5..cad673aa 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -99,7 +99,21 @@ function initSortable(boardComponent, $listsDom) { boardComponent.autorun(() => { import { Cookies } from 'meteor/ostrio:cookies'; const cookies = new Cookies(); - if (!Utils.isMiniScreen() && cookies.has('showDesktopDragHandles')) { + let showDesktopDragHandles = false; + currentUser = Meteor.user(); + if (currentUser) { + showDesktopDragHandles = (currentUser.profile || {}).showDesktopDragHandles; + } else { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + showDesktopDragHandles = true; + } else { + showDesktopDragHandles = false; + } + } + + if (!Utils.isMiniScreen() && showDesktopDragHandles) { $listsDom.sortable({ handle: '.js-list-handle', }); @@ -186,10 +200,23 @@ BlazeComponent.extendComponent({ import { Cookies } from 'meteor/ostrio:cookies'; const cookies = new Cookies(); + let showDesktopDragHandles = false; + currentUser = Meteor.user(); + if (currentUser) { + showDesktopDragHandles = (currentUser.profile || {}).showDesktopDragHandles; + } else { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + showDesktopDragHandles = true; + } else { + showDesktopDragHandles = false; + } + } const noDragInside = ['a', 'input', 'textarea', 'p'].concat( Utils.isMiniScreen() || - (!Utils.isMiniScreen() && cookies.has('showDesktopDragHandles')) + (!Utils.isMiniScreen() && showDesktopDragHandles) ? ['.js-list-handle', '.js-swimlane-header-handle'] : ['.js-list-header'], ); @@ -270,12 +297,17 @@ BlazeComponent.extendComponent({ Template.swimlane.helpers({ showDesktopDragHandles() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.has('showDesktopDragHandles')) { - return true; + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).showDesktopDragHandles; } else { - return false; + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + return true; + } else { + return false; + } } }, canSeeAddList() { diff --git a/client/components/swimlanes/swimlanes.styl b/client/components/swimlanes/swimlanes.styl index 9a89bf07..ca5611cc 100644 --- a/client/components/swimlanes/swimlanes.styl +++ b/client/components/swimlanes/swimlanes.styl @@ -1,5 +1,6 @@ @import 'nib' +/* // Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp .accordion @@ -33,6 +34,7 @@ padding: 0px // Minimize swimlanes end https://www.w3schools.com/howto/howto_js_accordion.asp +*/ .swimlane // Even if this background color is the same as the body we can't leave it diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js index 3a5bb4e3..1f0e3ef0 100644 --- a/client/components/users/userHeader.js +++ b/client/components/users/userHeader.js @@ -5,10 +5,22 @@ Template.headerUserBar.events({ Template.memberMenuPopup.helpers({ templatesBoardId() { - return Meteor.user().getTemplatesBoardId(); + currentUser = Meteor.user(); + if (currentUser) { + return Meteor.user().getTemplatesBoardId(); + } else { + // No need to getTemplatesBoardId on public board + return false; + } }, templatesBoardSlug() { - return Meteor.user().getTemplatesBoardSlug(); + currentUser = Meteor.user(); + if (currentUser) { + return Meteor.user().getTemplatesBoardSlug(); + } else { + // No need to getTemplatesBoardSlug() on public board + return false; + } }, }); @@ -162,44 +174,73 @@ Template.changeLanguagePopup.events({ Template.changeSettingsPopup.helpers({ showDesktopDragHandles() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.has('showDesktopDragHandles')) { - return true; + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).showDesktopDragHandles; } else { - return false; + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + return true; + } else { + return false; + } } }, hiddenSystemMessages() { - const currentUser = Meteor.user(); + currentUser = Meteor.user(); if (currentUser) { - return Meteor.user().hasHiddenSystemMessages(); + return (currentUser.profile || {}).hasHiddenSystemMessages; } else { - return false; + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('hasHiddenSystemMessages')) { + return true; + } else { + return false; + } } }, showCardsCountAt() { - const currentUser = Meteor.user(); + currentUser = Meteor.user(); if (currentUser) { return Meteor.user().getLimitToShowCardsCount(); } else { - return false; + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + return cookies.get('limitToShowCardsCount'); } }, }); Template.changeSettingsPopup.events({ 'click .js-toggle-desktop-drag-handles'() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.has('showDesktopDragHandles')) { - cookies.remove('showDesktopDragHandles'); //true + currentUser = Meteor.user(); + if (currentUser) { + Meteor.call('toggleDesktopDragHandles'); } else { - cookies.set('showDesktopDragHandles', 'true'); //true + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('showDesktopDragHandles')) { + cookies.remove('showDesktopDragHandles'); + } else { + cookies.set('showDesktopDragHandles', 'true'); + } } }, 'click .js-toggle-system-messages'() { - Meteor.call('toggleSystemMessages'); + currentUser = Meteor.user(); + if (currentUser) { + Meteor.call('toggleSystemMessages'); + } else { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.has('hasHiddenSystemMessages')) { + cookies.remove('hasHiddenSystemMessages'); + } else { + cookies.set('hasHiddenSystemMessages', 'true'); + } + } }, 'click .js-apply-show-cards-at'(event, templateInstance) { event.preventDefault(); @@ -208,7 +249,14 @@ Template.changeSettingsPopup.events({ 10, ); if (!isNaN(minLimit)) { - Meteor.call('changeLimitToShowCardsCount', minLimit); + currentUser = Meteor.user(); + if (currentUser) { + Meteor.call('changeLimitToShowCardsCount', minLimit); + } else { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + cookies.set('limitToShowCardsCount', minLimit); + } Popup.back(); } }, -- cgit v1.2.3-1-g7c22 From 4786b0c18ddeb8f48525216eabebdced7159467d Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 19 Nov 2019 21:42:00 +0200 Subject: Use database when logged in. Continued. Thanks to xet7 ! --- client/components/boards/boardHeader.js | 79 +++++++-------------------------- client/components/lists/listHeader.jade | 4 +- client/lib/utils.js | 65 +++++++++++++-------------- 3 files changed, 50 insertions(+), 98 deletions(-) (limited to 'client') diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index 1706f8e4..ffbb9b72 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -173,78 +173,33 @@ Template.boardHeaderBar.helpers({ ); }, boardView() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.get('boardView') === 'board-view-lists') { - return 'board-view-lists'; - } else if (cookies.get('boardView') === 'board-view-swimlanes') { - return 'board-view-swimlanes'; - } else if (cookies.get('boardView') === 'board-view-collapse') { - return 'board-view-collapse'; - } else if (cookies.get('boardView') === 'board-view-cal') { - return 'board-view-cal'; - } else { - return false; - } - }, - collapseSwimlane() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.has('collapseSwimlane')) { - return true; - } else { - return false; - } - }, + return Utils.boardView(); + }, + //collapseSwimlane() { + // import { Cookies } from 'meteor/ostrio:cookies'; + // const cookies = new Cookies(); + // if (cookies.has('collapseSwimlane')) { + // return true; + // } else { + // return false; + // } + //}, }); Template.boardChangeViewPopup.events({ 'click .js-open-lists-view'() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.get('boardView') !== 'board-view-lists') { - cookies.set('boardView', 'board-view-lists'); - const currentUser = Meteor.user(); - if (currentUser) { - Meteor.user().setBoardView('board-view-lists'); - } - } + Utils.setBoardView('board-view-lists'); Popup.close(); }, 'click .js-open-swimlanes-view'() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.get('boardView') !== 'board-view-swimlanes') { - cookies.set('boardView', 'board-view-swimlanes'); - cookies.remove('collapseSwimlane'); - const currentUser = Meteor.user(); - if (currentUser) { - Meteor.user().setBoardView('board-view-swimlanes'); - } - } - Popup.close(); - }, - 'click .js-open-collapse-view'() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.get('boardView') !== 'board-view-swimlanes') { - cookies.set('boardView', 'board-view-swimlanes'); - cookies.set('collapseSwimlane', 'true'); - const currentUser = Meteor.user(); - if (currentUser) { - Meteor.user().setBoardView('board-view-swimlanes'); - } - } + Utils.setBoardView('board-view-swimlanes'); Popup.close(); }, + //'click .js-open-collapse-view'() { + // Utils.setBoardView('board-view-collapse'); + //Popup.close(); 'click .js-open-cal-view'() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - cookies.set('boardView', 'board-view-cal'); - const currentUser = Meteor.user(); - if (currentUser) { - Meteor.user().setBoardView('board-view-cal'); - } + Utils.setBoardView('board-view-cal'); Popup.close(); }, 'click .js-open-rules-view'() { diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index 064303ee..631f68a0 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -39,8 +39,8 @@ template(name="listHeader") i.list-header-watch-icon.fa.fa-eye div.list-header-menu unless currentUser.isCommentOnly - if isBoardAdmin - a.fa.js-list-star.list-header-plus-icon(class="fa-star{{#unless starred}}-o{{/unless}}") + //if isBoardAdmin + // a.fa.js-list-star.list-header-plus-icon(class="fa-star{{#unless starred}}-o{{/unless}}") if canSeeAddCard a.js-add-card.fa.fa-plus.list-header-plus-icon a.fa.fa-navicon.js-open-list-menu diff --git a/client/lib/utils.js b/client/lib/utils.js index 7b4990e7..80ec412c 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -3,26 +3,18 @@ Utils = { import { Cookies } from 'meteor/ostrio:cookies'; const cookies = new Cookies(); currentUser = Meteor.user(); - if (view === 'board-view-lists') { - cookies.set('boardView', 'board-view-lists'); //true - if (currentUser) { - Meteor.user().setBoardView('board-view-lists'); - } - } else if (view === 'board-view-swimlanes') { - cookies.set('boardView', 'board-view-swimlanes'); //true - if (currentUser) { - Meteor.user().setBoardView('board-view-swimlanes'); - } - } else if (view === 'board-view-collapse') { - cookies.set('boardView', 'board-view-swimlane'); //true - cookies.set('collapseSwimlane', 'true'); //true - if (currentUser) { - Meteor.user().setBoardView('board-view-swimlane'); - } - } else if (view === 'board-view-cal') { - cookies.set('boardView', 'board-view-cal'); //true - if (currentUser) { - Meteor.user().setBoardView('board-view-cal'); + if (currentUser) { + Meteor.user().setBoardView(view); + } else { + if (view === 'board-view-lists') { + cookies.set('boardView', 'board-view-lists'); //true + } else if (view === 'board-view-swimlanes') { + cookies.set('boardView', 'board-view-swimlanes'); //true + //} else if (view === 'board-view-collapse') { + // cookies.set('boardView', 'board-view-swimlane'); //true + // cookies.set('collapseSwimlane', 'true'); //true + } else if (view === 'board-view-cal') { + cookies.set('boardView', 'board-view-cal'); //true } } }, @@ -35,21 +27,26 @@ Utils = { }, boardView() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.get('boardView') === 'board-view-lists') { - return 'board-view-lists'; - } else if ( - cookies.get('boardView') === 'board-view-swimlanes' && - !cookies.has('collapseSwimlane') - ) { - return 'board-view-swimlanes'; - } else if (cookies.has('collapseSwimlane')) { - return 'board-view-swimlanes'; - } else if (cookies.get('boardView') === 'board-view-cal') { - return 'board-view-cal'; + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).boardView } else { - return false; + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.get('boardView') === 'board-view-lists') { + return 'board-view-lists'; + } else if ( + cookies.get('boardView') === 'board-view-swimlanes' + //&& !cookies.has('collapseSwimlane') + ) { + return 'board-view-swimlanes'; + //} else if (cookies.has('collapseSwimlane')) { + // return 'board-view-swimlanes'; + } else if (cookies.get('boardView') === 'board-view-cal') { + return 'board-view-cal'; + } else { + return false; + } } }, -- cgit v1.2.3-1-g7c22 From 115d23f9293cad8a93f18f75a47a8a65756f71ce Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 19 Nov 2019 21:55:43 +0200 Subject: Use database when logged in. Continued. Thanks to xet7 ! --- client/components/boards/boardBody.js | 3 ++- client/components/lists/list.js | 3 ++- client/components/lists/listBody.js | 12 +++++------- client/components/swimlanes/swimlanes.js | 6 ++++-- client/lib/utils.js | 12 ++++++------ 5 files changed, 19 insertions(+), 17 deletions(-) (limited to 'client') diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js index f00b8b1d..b10f55ab 100644 --- a/client/components/boards/boardBody.js +++ b/client/components/boards/boardBody.js @@ -199,7 +199,8 @@ BlazeComponent.extendComponent({ let showDesktopDragHandles = false; currentUser = Meteor.user(); if (currentUser) { - showDesktopDragHandles = (currentUser.profile || {}).showDesktopDragHandles; + showDesktopDragHandles = (currentUser.profile || {}) + .showDesktopDragHandles; } else { if (cookies.has('showDesktopDragHandles')) { showDesktopDragHandles = true; diff --git a/client/components/lists/list.js b/client/components/lists/list.js index 7a51fc6e..d97f4404 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -122,7 +122,8 @@ BlazeComponent.extendComponent({ let showDesktopDragHandles = false; currentUser = Meteor.user(); if (currentUser) { - showDesktopDragHandles = (currentUser.profile || {}).showDesktopDragHandles; + showDesktopDragHandles = (currentUser.profile || {}) + .showDesktopDragHandles; } else { if (cookies.has('showDesktopDragHandles')) { showDesktopDragHandles = true; diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index 46d2794e..b0974705 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -713,13 +713,11 @@ BlazeComponent.extendComponent({ .data()._id; } } - } else { - if (Utils.boardView() === 'board-view-swimlanes') { - this.swimlaneId = this.parentComponent() - .parentComponent() - .parentComponent() - .data()._id; - } + } else if (Utils.boardView() === 'board-view-swimlanes') { + this.swimlaneId = this.parentComponent() + .parentComponent() + .parentComponent() + .data()._id; } }, diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index cad673aa..8618373c 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -102,7 +102,8 @@ function initSortable(boardComponent, $listsDom) { let showDesktopDragHandles = false; currentUser = Meteor.user(); if (currentUser) { - showDesktopDragHandles = (currentUser.profile || {}).showDesktopDragHandles; + showDesktopDragHandles = (currentUser.profile || {}) + .showDesktopDragHandles; } else { import { Cookies } from 'meteor/ostrio:cookies'; const cookies = new Cookies(); @@ -203,7 +204,8 @@ BlazeComponent.extendComponent({ let showDesktopDragHandles = false; currentUser = Meteor.user(); if (currentUser) { - showDesktopDragHandles = (currentUser.profile || {}).showDesktopDragHandles; + showDesktopDragHandles = (currentUser.profile || {}) + .showDesktopDragHandles; } else { import { Cookies } from 'meteor/ostrio:cookies'; const cookies = new Cookies(); diff --git a/client/lib/utils.js b/client/lib/utils.js index 80ec412c..ab5e3597 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -10,9 +10,9 @@ Utils = { cookies.set('boardView', 'board-view-lists'); //true } else if (view === 'board-view-swimlanes') { cookies.set('boardView', 'board-view-swimlanes'); //true - //} else if (view === 'board-view-collapse') { - // cookies.set('boardView', 'board-view-swimlane'); //true - // cookies.set('collapseSwimlane', 'true'); //true + //} else if (view === 'board-view-collapse') { + // cookies.set('boardView', 'board-view-swimlane'); //true + // cookies.set('collapseSwimlane', 'true'); //true } else if (view === 'board-view-cal') { cookies.set('boardView', 'board-view-cal'); //true } @@ -29,7 +29,7 @@ Utils = { boardView() { currentUser = Meteor.user(); if (currentUser) { - return (currentUser.profile || {}).boardView + return (currentUser.profile || {}).boardView; } else { import { Cookies } from 'meteor/ostrio:cookies'; const cookies = new Cookies(); @@ -40,8 +40,8 @@ Utils = { //&& !cookies.has('collapseSwimlane') ) { return 'board-view-swimlanes'; - //} else if (cookies.has('collapseSwimlane')) { - // return 'board-view-swimlanes'; + //} else if (cookies.has('collapseSwimlane')) { + // return 'board-view-swimlanes'; } else if (cookies.get('boardView') === 'board-view-cal') { return 'board-view-cal'; } else { -- cgit v1.2.3-1-g7c22 From 788dd0a81a06efee165007a92780f9e8c2c754ac Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 20 Nov 2019 21:10:11 +0200 Subject: Fix lint errors. --- client/components/boards/boardBody.js | 30 ++++++++++------------ client/components/lists/list.js | 24 ++++++++--------- client/components/lists/listHeader.js | 20 ++++++++------- client/components/swimlanes/swimlanes.js | 44 +++++++++++++++----------------- client/lib/utils.js | 42 +++++++++++++++--------------- 5 files changed, 76 insertions(+), 84 deletions(-) (limited to 'client') diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js index b10f55ab..41b6f4ef 100644 --- a/client/components/boards/boardBody.js +++ b/client/components/boards/boardBody.js @@ -201,16 +201,14 @@ BlazeComponent.extendComponent({ if (currentUser) { showDesktopDragHandles = (currentUser.profile || {}) .showDesktopDragHandles; + } else if (cookies.has('showDesktopDragHandles')) { + showDesktopDragHandles = true; } else { - if (cookies.has('showDesktopDragHandles')) { - showDesktopDragHandles = true; - } else { - showDesktopDragHandles = false; - } + showDesktopDragHandles = false; } if ( - Utils.isMiniScreen() || - (!Utils.isMiniScreen() && showDesktopDragHandles) + Utils.isMiniScreen() + || (!Utils.isMiniScreen() && showDesktopDragHandles) ) { $swimlanesDom.sortable({ handle: '.js-swimlane-header-handle', @@ -227,9 +225,9 @@ BlazeComponent.extendComponent({ function userIsMember() { return ( - Meteor.user() && - Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + Meteor.user() + && Meteor.user().isBoardMember() + && !Meteor.user().isCommentOnly() ); } @@ -308,16 +306,16 @@ BlazeComponent.extendComponent({ scrollLeft(position = 0) { const swimlanes = this.$('.js-swimlanes'); - swimlanes && - swimlanes.animate({ + swimlanes + && swimlanes.animate({ scrollLeft: position, }); }, scrollTop(position = 0) { const swimlanes = this.$('.js-swimlanes'); - swimlanes && - swimlanes.animate({ + swimlanes + && swimlanes.animate({ scrollTop: position, }); }, @@ -361,8 +359,8 @@ BlazeComponent.extendComponent({ end = end || card.endAt; title = title || card.title; const className = - (extraCls ? `${extraCls} ` : '') + - (card.color ? `calendar-event-${card.color}` : ''); + (extraCls ? `${extraCls} ` : '') + + (card.color ? `calendar-event-${card.color}` : ''); events.push({ id: card._id, title, diff --git a/client/components/lists/list.js b/client/components/lists/list.js index d97f4404..e58ea430 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -22,9 +22,9 @@ BlazeComponent.extendComponent({ function userIsMember() { return ( - Meteor.user() && - Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + Meteor.user() + && Meteor.user().isBoardMember() + && !Meteor.user().isCommentOnly() ); } @@ -74,14 +74,14 @@ BlazeComponent.extendComponent({ const currentBoard = Boards.findOne(Session.get('currentBoard')); let swimlaneId = ''; if ( - Utils.boardView() === 'board-view-swimlanes' || - currentBoard.isTemplatesBoard() + Utils.boardView() === 'board-view-swimlanes' + || currentBoard.isTemplatesBoard() ) swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id; else if ( - Utils.boardView() === 'board-view-lists' || - Utils.boardView() === 'board-view-cal' || - !Utils.boardView + Utils.boardView() === 'board-view-lists' + || Utils.boardView() === 'board-view-cal' + || !Utils.boardView ) swimlaneId = currentBoard.getDefaultSwimline()._id; @@ -124,12 +124,10 @@ BlazeComponent.extendComponent({ if (currentUser) { showDesktopDragHandles = (currentUser.profile || {}) .showDesktopDragHandles; + } else if (cookies.has('showDesktopDragHandles')) { + showDesktopDragHandles = true; } else { - if (cookies.has('showDesktopDragHandles')) { - showDesktopDragHandles = true; - } else { - showDesktopDragHandles = false; - } + showDesktopDragHandles = false; } if (!Utils.isMiniScreen() && showDesktopDragHandles) { diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index 4ef431fb..34322fa9 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -7,9 +7,9 @@ BlazeComponent.extendComponent({ canSeeAddCard() { const list = Template.currentData(); return ( - !list.getWipLimit('enabled') || - list.getWipLimit('soft') || - !this.reachedWipLimit() + !list.getWipLimit('enabled') + || list.getWipLimit('soft') + || !this.reachedWipLimit() ); }, @@ -47,6 +47,8 @@ BlazeComponent.extendComponent({ const currentUser = Meteor.user(); if (currentUser) { return Meteor.user().getLimitToShowCardsCount(); + } else { + return false; } }, @@ -64,8 +66,8 @@ BlazeComponent.extendComponent({ reachedWipLimit() { const list = Template.currentData(); return ( - list.getWipLimit('enabled') && - list.getWipLimit('value') <= list.cards().count() + list.getWipLimit('enabled') + && list.getWipLimit('value') <= list.cards().count() ); }, @@ -175,8 +177,8 @@ BlazeComponent.extendComponent({ const list = Template.currentData(); if ( - list.getWipLimit('soft') && - list.getWipLimit('value') < list.cards().count() + list.getWipLimit('soft') + && list.getWipLimit('value') < list.cards().count() ) { list.setWipLimit(list.cards().count()); } @@ -187,8 +189,8 @@ BlazeComponent.extendComponent({ const list = Template.currentData(); // Prevent user from using previously stored wipLimit.value if it is less than the current number of cards in the list if ( - !list.getWipLimit('enabled') && - list.getWipLimit('value') < list.cards().count() + !list.getWipLimit('enabled') + && list.getWipLimit('value') < list.cards().count() ) { list.setWipLimit(list.cards().count()); } diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 8618373c..9bc093be 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -3,8 +3,8 @@ const { calculateIndex, enableClickOnTouch } = Utils; function currentListIsInThisSwimlane(swimlaneId) { const currentList = Lists.findOne(Session.get('currentList')); return ( - currentList && - (currentList.swimlaneId === swimlaneId || currentList.swimlaneId === '') + currentList + && (currentList.swimlaneId === swimlaneId || currentList.swimlaneId === '') ); } @@ -12,14 +12,14 @@ function currentCardIsInThisList(listId, swimlaneId) { const currentCard = Cards.findOne(Session.get('currentCard')); const currentUser = Meteor.user(); if ( - currentUser && - currentUser.profile && - Utils.boardView() === 'board-view-swimlanes' + currentUser + && currentUser.profile + && Utils.boardView() === 'board-view-swimlanes' ) return ( - currentCard && - currentCard.listId === listId && - currentCard.swimlaneId === swimlaneId + currentCard + && currentCard.listId === listId + && currentCard.swimlaneId === swimlaneId ); // Default view: board-view-lists else return currentCard && currentCard.listId === listId; @@ -90,15 +90,13 @@ function initSortable(boardComponent, $listsDom) { function userIsMember() { return ( - Meteor.user() && - Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + Meteor.user() + && Meteor.user().isBoardMember() + && !Meteor.user().isCommentOnly() ); } boardComponent.autorun(() => { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); let showDesktopDragHandles = false; currentUser = Meteor.user(); if (currentUser) { @@ -199,8 +197,6 @@ BlazeComponent.extendComponent({ // the user will legitimately expect to be able to select some text with // his mouse. - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); let showDesktopDragHandles = false; currentUser = Meteor.user(); if (currentUser) { @@ -217,15 +213,15 @@ BlazeComponent.extendComponent({ } const noDragInside = ['a', 'input', 'textarea', 'p'].concat( - Utils.isMiniScreen() || - (!Utils.isMiniScreen() && showDesktopDragHandles) + Utils.isMiniScreen() + || (!Utils.isMiniScreen() && showDesktopDragHandles) ? ['.js-list-handle', '.js-swimlane-header-handle'] : ['.js-list-header'], ); if ( - $(evt.target).closest(noDragInside.join(',')).length === 0 && - this.$('.swimlane').prop('clientHeight') > evt.offsetY + $(evt.target).closest(noDragInside.join(',')).length === 0 + && this.$('.swimlane').prop('clientHeight') > evt.offsetY ) { this._isDragging = true; this._lastDragPositionX = evt.clientX; @@ -259,8 +255,8 @@ BlazeComponent.extendComponent({ onCreated() { this.currentBoard = Boards.findOne(Session.get('currentBoard')); this.isListTemplatesSwimlane = - this.currentBoard.isTemplatesBoard() && - this.currentData().isListTemplatesSwimlane(); + this.currentBoard.isTemplatesBoard() + && this.currentData().isListTemplatesSwimlane(); this.currentSwimlane = this.currentData(); }, @@ -314,9 +310,9 @@ Template.swimlane.helpers({ }, canSeeAddList() { return ( - Meteor.user() && - Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + Meteor.user() + && Meteor.user().isBoardMember() + && !Meteor.user().isCommentOnly() ); }, }); diff --git a/client/lib/utils.js b/client/lib/utils.js index ab5e3597..c90dd749 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -5,17 +5,15 @@ Utils = { currentUser = Meteor.user(); if (currentUser) { Meteor.user().setBoardView(view); - } else { - if (view === 'board-view-lists') { - cookies.set('boardView', 'board-view-lists'); //true - } else if (view === 'board-view-swimlanes') { - cookies.set('boardView', 'board-view-swimlanes'); //true - //} else if (view === 'board-view-collapse') { - // cookies.set('boardView', 'board-view-swimlane'); //true - // cookies.set('collapseSwimlane', 'true'); //true - } else if (view === 'board-view-cal') { - cookies.set('boardView', 'board-view-cal'); //true - } + } else if (view === 'board-view-lists') { + cookies.set('boardView', 'board-view-lists'); //true + } else if (view === 'board-view-swimlanes') { + cookies.set('boardView', 'board-view-swimlanes'); //true + //} else if (view === 'board-view-collapse') { + // cookies.set('boardView', 'board-view-swimlane'); //true + // cookies.set('collapseSwimlane', 'true'); //true + } else if (view === 'board-view-cal') { + cookies.set('boardView', 'board-view-cal'); //true } }, @@ -54,8 +52,8 @@ Utils = { goBoardId(_id) { const board = Boards.findOne(_id); return ( - board && - FlowRouter.go('board', { + board + && FlowRouter.go('board', { id: board._id, slug: board.slug, }) @@ -66,8 +64,8 @@ Utils = { const card = Cards.findOne(_id); const board = Boards.findOne(card.boardId); return ( - board && - FlowRouter.go('card', { + board + && FlowRouter.go('card', { cardId: card._id, boardId: board._id, slug: board.slug, @@ -238,8 +236,8 @@ Utils = { }; if ( - 'ontouchstart' in window || - (window.DocumentTouch && document instanceof window.DocumentTouch) + 'ontouchstart' in window + || (window.DocumentTouch && document instanceof window.DocumentTouch) ) { return true; } @@ -260,8 +258,8 @@ Utils = { calculateTouchDistance(touchA, touchB) { return Math.sqrt( - Math.pow(touchA.screenX - touchB.screenX, 2) + - Math.pow(touchA.screenY - touchB.screenY, 2), + Math.pow(touchA.screenX - touchB.screenX, 2) + + Math.pow(touchA.screenY - touchB.screenY, 2), ); }, @@ -278,9 +276,9 @@ Utils = { }); $(document).on('touchend', selector, function(e) { if ( - touchStart && - lastTouch && - Utils.calculateTouchDistance(touchStart, lastTouch) <= 20 + touchStart + && lastTouch + && Utils.calculateTouchDistance(touchStart, lastTouch) <= 20 ) { e.preventDefault(); const clickEvent = document.createEvent('MouseEvents'); -- cgit v1.2.3-1-g7c22 From 8898862d36b1f0fe8e7d7bdc80064e5106894d29 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 26 Nov 2019 02:29:36 +0200 Subject: Fix lint errors. --- client/components/boards/boardBody.js | 35 +++++++------------ client/components/boards/boardHeader.js | 12 ------- client/components/cards/minicard.js | 8 ++--- client/components/lists/list.js | 23 ++++++------ client/components/lists/listHeader.js | 22 ++++++------ client/components/sidebar/sidebar.js | 6 ++-- client/components/swimlanes/swimlaneHeader.js | 4 +-- client/components/swimlanes/swimlanes.js | 50 ++++++++++++--------------- client/components/users/userHeader.js | 13 ++----- client/lib/utils.js | 9 ++--- 10 files changed, 68 insertions(+), 114 deletions(-) (limited to 'client') diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js index 41b6f4ef..55b8c0a1 100644 --- a/client/components/boards/boardBody.js +++ b/client/components/boards/boardBody.js @@ -1,3 +1,5 @@ +import { Cookies } from 'meteor/ostrio:cookies'; +const cookies = new Cookies(); const subManager = new SubsManager(); const { calculateIndex, enableClickOnTouch } = Utils; const swimlaneWhileSortingHeight = 150; @@ -192,9 +194,6 @@ BlazeComponent.extendComponent({ // ugly touch event hotfix enableClickOnTouch('.js-swimlane:not(.placeholder)'); - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - this.autorun(() => { let showDesktopDragHandles = false; currentUser = Meteor.user(); @@ -207,8 +206,8 @@ BlazeComponent.extendComponent({ showDesktopDragHandles = false; } if ( - Utils.isMiniScreen() - || (!Utils.isMiniScreen() && showDesktopDragHandles) + Utils.isMiniScreen() || + (!Utils.isMiniScreen() && showDesktopDragHandles) ) { $swimlanesDom.sortable({ handle: '.js-swimlane-header-handle', @@ -225,9 +224,9 @@ BlazeComponent.extendComponent({ function userIsMember() { return ( - Meteor.user() - && Meteor.user().isBoardMember() - && !Meteor.user().isCommentOnly() + Meteor.user() && + Meteor.user().isBoardMember() && + !Meteor.user().isCommentOnly() ); } @@ -244,8 +243,6 @@ BlazeComponent.extendComponent({ if (currentUser) { return (currentUser.profile || {}).boardView === 'board-view-swimlanes'; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); return cookies.get('boardView') === 'board-view-swimlanes'; } }, @@ -255,8 +252,6 @@ BlazeComponent.extendComponent({ if (currentUser) { return (currentUser.profile || {}).boardView === 'board-view-lists'; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); return cookies.get('boardView') === 'board-view-lists'; } }, @@ -266,8 +261,6 @@ BlazeComponent.extendComponent({ if (currentUser) { return (currentUser.profile || {}).boardView === 'board-view-cal'; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); return cookies.get('boardView') === 'board-view-cal'; } }, @@ -306,16 +299,16 @@ BlazeComponent.extendComponent({ scrollLeft(position = 0) { const swimlanes = this.$('.js-swimlanes'); - swimlanes - && swimlanes.animate({ + swimlanes && + swimlanes.animate({ scrollLeft: position, }); }, scrollTop(position = 0) { const swimlanes = this.$('.js-swimlanes'); - swimlanes - && swimlanes.animate({ + swimlanes && + swimlanes.animate({ scrollTop: position, }); }, @@ -359,8 +352,8 @@ BlazeComponent.extendComponent({ end = end || card.endAt; title = title || card.title; const className = - (extraCls ? `${extraCls} ` : '') - + (card.color ? `calendar-event-${card.color}` : ''); + (extraCls ? `${extraCls} ` : '') + + (card.color ? `calendar-event-${card.color}` : ''); events.push({ id: card._id, title, @@ -430,8 +423,6 @@ BlazeComponent.extendComponent({ if (currentUser) { return (currentUser.profile || {}).boardView === 'board-view-cal'; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); return cookies.get('boardView') === 'board-view-cal'; } }, diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index ffbb9b72..eea43bd3 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -175,15 +175,6 @@ Template.boardHeaderBar.helpers({ boardView() { return Utils.boardView(); }, - //collapseSwimlane() { - // import { Cookies } from 'meteor/ostrio:cookies'; - // const cookies = new Cookies(); - // if (cookies.has('collapseSwimlane')) { - // return true; - // } else { - // return false; - // } - //}, }); Template.boardChangeViewPopup.events({ @@ -195,9 +186,6 @@ Template.boardChangeViewPopup.events({ Utils.setBoardView('board-view-swimlanes'); Popup.close(); }, - //'click .js-open-collapse-view'() { - // Utils.setBoardView('board-view-collapse'); - //Popup.close(); 'click .js-open-cal-view'() { Utils.setBoardView('board-view-cal'); Popup.close(); diff --git a/client/components/cards/minicard.js b/client/components/cards/minicard.js index a9f92dec..1ea608f5 100644 --- a/client/components/cards/minicard.js +++ b/client/components/cards/minicard.js @@ -1,3 +1,5 @@ +import { Cookies } from 'meteor/ostrio:cookies'; +const cookies = new Cookies(); // Template.cards.events({ // 'click .member': Popup.open('cardMember') // }); @@ -18,8 +20,6 @@ BlazeComponent.extendComponent({ }, { 'click .js-toggle-minicard-label-text'() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('hiddenMinicardLabelText')) { cookies.remove('hiddenMinicardLabelText'); //true } else { @@ -37,8 +37,6 @@ Template.minicard.helpers({ if (currentUser) { return (currentUser.profile || {}).showDesktopDragHandles; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('showDesktopDragHandles')) { return true; } else { @@ -51,8 +49,6 @@ Template.minicard.helpers({ if (currentUser) { return (currentUser.profile || {}).hiddenMinicardLabelText; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('hiddenMinicardLabelText')) { return true; } else { diff --git a/client/components/lists/list.js b/client/components/lists/list.js index e58ea430..89d51e85 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -1,3 +1,5 @@ +import { Cookies } from 'meteor/ostrio:cookies'; +const cookies = new Cookies(); const { calculateIndex, enableClickOnTouch } = Utils; BlazeComponent.extendComponent({ @@ -22,9 +24,9 @@ BlazeComponent.extendComponent({ function userIsMember() { return ( - Meteor.user() - && Meteor.user().isBoardMember() - && !Meteor.user().isCommentOnly() + Meteor.user() && + Meteor.user().isBoardMember() && + !Meteor.user().isCommentOnly() ); } @@ -74,14 +76,14 @@ BlazeComponent.extendComponent({ const currentBoard = Boards.findOne(Session.get('currentBoard')); let swimlaneId = ''; if ( - Utils.boardView() === 'board-view-swimlanes' - || currentBoard.isTemplatesBoard() + Utils.boardView() === 'board-view-swimlanes' || + currentBoard.isTemplatesBoard() ) swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id; else if ( - Utils.boardView() === 'board-view-lists' - || Utils.boardView() === 'board-view-cal' - || !Utils.boardView + Utils.boardView() === 'board-view-lists' || + Utils.boardView() === 'board-view-cal' || + !Utils.boardView ) swimlaneId = currentBoard.getDefaultSwimline()._id; @@ -115,9 +117,6 @@ BlazeComponent.extendComponent({ // ugly touch event hotfix enableClickOnTouch(itemsSelector); - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - this.autorun(() => { let showDesktopDragHandles = false; currentUser = Meteor.user(); @@ -178,8 +177,6 @@ Template.list.helpers({ if (currentUser) { return (currentUser.profile || {}).showDesktopDragHandles; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('showDesktopDragHandles')) { return true; } else { diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index 34322fa9..570cc30f 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -1,3 +1,5 @@ +import { Cookies } from 'meteor/ostrio:cookies'; +const cookies = new Cookies(); let listsColors; Meteor.startup(() => { listsColors = Lists.simpleSchema()._schema.color.allowedValues; @@ -7,9 +9,9 @@ BlazeComponent.extendComponent({ canSeeAddCard() { const list = Template.currentData(); return ( - !list.getWipLimit('enabled') - || list.getWipLimit('soft') - || !this.reachedWipLimit() + !list.getWipLimit('enabled') || + list.getWipLimit('soft') || + !this.reachedWipLimit() ); }, @@ -66,8 +68,8 @@ BlazeComponent.extendComponent({ reachedWipLimit() { const list = Template.currentData(); return ( - list.getWipLimit('enabled') - && list.getWipLimit('value') <= list.cards().count() + list.getWipLimit('enabled') && + list.getWipLimit('value') <= list.cards().count() ); }, @@ -108,8 +110,6 @@ Template.listHeader.helpers({ if (currentUser) { return (currentUser.profile || {}).showDesktopDragHandles; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('showDesktopDragHandles')) { return true; } else { @@ -177,8 +177,8 @@ BlazeComponent.extendComponent({ const list = Template.currentData(); if ( - list.getWipLimit('soft') - && list.getWipLimit('value') < list.cards().count() + list.getWipLimit('soft') && + list.getWipLimit('value') < list.cards().count() ) { list.setWipLimit(list.cards().count()); } @@ -189,8 +189,8 @@ BlazeComponent.extendComponent({ const list = Template.currentData(); // Prevent user from using previously stored wipLimit.value if it is less than the current number of cards in the list if ( - !list.getWipLimit('enabled') - && list.getWipLimit('value') < list.cards().count() + !list.getWipLimit('enabled') && + list.getWipLimit('value') < list.cards().count() ) { list.setWipLimit(list.cards().count()); } diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index 6bb22f39..caf36020 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -1,3 +1,5 @@ +import { Cookies } from 'meteor/ostrio:cookies'; +const cookies = new Cookies(); Sidebar = null; const defaultView = 'home'; @@ -111,8 +113,6 @@ BlazeComponent.extendComponent({ if (currentUser) { Meteor.call('toggleMinicardLabelText'); } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('hiddenMinicardLabelText')) { cookies.remove('hiddenMinicardLabelText'); } else { @@ -136,8 +136,6 @@ Template.homeSidebar.helpers({ if (currentUser) { return (currentUser.profile || {}).hiddenMinicardLabelText; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('hiddenMinicardLabelText')) { return true; } else { diff --git a/client/components/swimlanes/swimlaneHeader.js b/client/components/swimlanes/swimlaneHeader.js index 69971b05..fbc45351 100644 --- a/client/components/swimlanes/swimlaneHeader.js +++ b/client/components/swimlanes/swimlaneHeader.js @@ -1,3 +1,5 @@ +import { Cookies } from 'meteor/ostrio:cookies'; +const cookies = new Cookies(); const { calculateIndexData } = Utils; let swimlaneColors; @@ -34,8 +36,6 @@ Template.swimlaneHeader.helpers({ if (currentUser) { return (currentUser.profile || {}).showDesktopDragHandles; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('showDesktopDragHandles')) { return true; } else { diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 9bc093be..8687a0e8 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -1,10 +1,12 @@ +import { Cookies } from 'meteor/ostrio:cookies'; +const cookies = new Cookies(); const { calculateIndex, enableClickOnTouch } = Utils; function currentListIsInThisSwimlane(swimlaneId) { const currentList = Lists.findOne(Session.get('currentList')); return ( - currentList - && (currentList.swimlaneId === swimlaneId || currentList.swimlaneId === '') + currentList && + (currentList.swimlaneId === swimlaneId || currentList.swimlaneId === '') ); } @@ -12,14 +14,14 @@ function currentCardIsInThisList(listId, swimlaneId) { const currentCard = Cards.findOne(Session.get('currentCard')); const currentUser = Meteor.user(); if ( - currentUser - && currentUser.profile - && Utils.boardView() === 'board-view-swimlanes' + currentUser && + currentUser.profile && + Utils.boardView() === 'board-view-swimlanes' ) return ( - currentCard - && currentCard.listId === listId - && currentCard.swimlaneId === swimlaneId + currentCard && + currentCard.listId === listId && + currentCard.swimlaneId === swimlaneId ); // Default view: board-view-lists else return currentCard && currentCard.listId === listId; @@ -90,9 +92,9 @@ function initSortable(boardComponent, $listsDom) { function userIsMember() { return ( - Meteor.user() - && Meteor.user().isBoardMember() - && !Meteor.user().isCommentOnly() + Meteor.user() && + Meteor.user().isBoardMember() && + !Meteor.user().isCommentOnly() ); } @@ -103,8 +105,6 @@ function initSortable(boardComponent, $listsDom) { showDesktopDragHandles = (currentUser.profile || {}) .showDesktopDragHandles; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('showDesktopDragHandles')) { showDesktopDragHandles = true; } else { @@ -147,8 +147,6 @@ BlazeComponent.extendComponent({ initSortable(boardComponent, $listsDom); - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('collapseSwimlane')) { // Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp const acc = document.getElementsByClassName('accordion'); @@ -203,8 +201,6 @@ BlazeComponent.extendComponent({ showDesktopDragHandles = (currentUser.profile || {}) .showDesktopDragHandles; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('showDesktopDragHandles')) { showDesktopDragHandles = true; } else { @@ -213,15 +209,15 @@ BlazeComponent.extendComponent({ } const noDragInside = ['a', 'input', 'textarea', 'p'].concat( - Utils.isMiniScreen() - || (!Utils.isMiniScreen() && showDesktopDragHandles) + Utils.isMiniScreen() || + (!Utils.isMiniScreen() && showDesktopDragHandles) ? ['.js-list-handle', '.js-swimlane-header-handle'] : ['.js-list-header'], ); if ( - $(evt.target).closest(noDragInside.join(',')).length === 0 - && this.$('.swimlane').prop('clientHeight') > evt.offsetY + $(evt.target).closest(noDragInside.join(',')).length === 0 && + this.$('.swimlane').prop('clientHeight') > evt.offsetY ) { this._isDragging = true; this._lastDragPositionX = evt.clientX; @@ -255,8 +251,8 @@ BlazeComponent.extendComponent({ onCreated() { this.currentBoard = Boards.findOne(Session.get('currentBoard')); this.isListTemplatesSwimlane = - this.currentBoard.isTemplatesBoard() - && this.currentData().isListTemplatesSwimlane(); + this.currentBoard.isTemplatesBoard() && + this.currentData().isListTemplatesSwimlane(); this.currentSwimlane = this.currentData(); }, @@ -299,8 +295,6 @@ Template.swimlane.helpers({ if (currentUser) { return (currentUser.profile || {}).showDesktopDragHandles; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('showDesktopDragHandles')) { return true; } else { @@ -310,9 +304,9 @@ Template.swimlane.helpers({ }, canSeeAddList() { return ( - Meteor.user() - && Meteor.user().isBoardMember() - && !Meteor.user().isCommentOnly() + Meteor.user() && + Meteor.user().isBoardMember() && + !Meteor.user().isCommentOnly() ); }, }); diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js index 1f0e3ef0..e0c6218e 100644 --- a/client/components/users/userHeader.js +++ b/client/components/users/userHeader.js @@ -1,3 +1,6 @@ +import { Cookies } from 'meteor/ostrio:cookies'; +const cookies = new Cookies(); + Template.headerUserBar.events({ 'click .js-open-header-member-menu': Popup.open('memberMenu'), 'click .js-change-avatar': Popup.open('changeAvatar'), @@ -178,8 +181,6 @@ Template.changeSettingsPopup.helpers({ if (currentUser) { return (currentUser.profile || {}).showDesktopDragHandles; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('showDesktopDragHandles')) { return true; } else { @@ -192,8 +193,6 @@ Template.changeSettingsPopup.helpers({ if (currentUser) { return (currentUser.profile || {}).hasHiddenSystemMessages; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('hasHiddenSystemMessages')) { return true; } else { @@ -219,8 +218,6 @@ Template.changeSettingsPopup.events({ if (currentUser) { Meteor.call('toggleDesktopDragHandles'); } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('showDesktopDragHandles')) { cookies.remove('showDesktopDragHandles'); } else { @@ -233,8 +230,6 @@ Template.changeSettingsPopup.events({ if (currentUser) { Meteor.call('toggleSystemMessages'); } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.has('hasHiddenSystemMessages')) { cookies.remove('hasHiddenSystemMessages'); } else { @@ -253,8 +248,6 @@ Template.changeSettingsPopup.events({ if (currentUser) { Meteor.call('changeLimitToShowCardsCount', minLimit); } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); cookies.set('limitToShowCardsCount', minLimit); } Popup.back(); diff --git a/client/lib/utils.js b/client/lib/utils.js index c90dd749..aca45528 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -1,7 +1,8 @@ +import { Cookies } from 'meteor/ostrio:cookies'; +const cookies = new Cookies(); + Utils = { setBoardView(view) { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); currentUser = Meteor.user(); if (currentUser) { Meteor.user().setBoardView(view); @@ -18,8 +19,6 @@ Utils = { }, unsetBoardView() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); cookies.remove('boardView'); cookies.remove('collapseSwimlane'); }, @@ -29,8 +28,6 @@ Utils = { if (currentUser) { return (currentUser.profile || {}).boardView; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.get('boardView') === 'board-view-lists') { return 'board-view-lists'; } else if ( -- cgit v1.2.3-1-g7c22 From d5a8ec1c36fb4810746eaf44aac3ef66d8df77e2 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 29 Nov 2019 03:25:52 +0200 Subject: Remove 1st implementation of collapse swimlanes. I will do it differently in next 2nd implementation. Thanks to xet7 ! --- client/components/boards/boardHeader.jade | 12 ------------ client/components/swimlanes/swimlanes.jade | 22 ---------------------- client/components/swimlanes/swimlanes.js | 18 ------------------ client/lib/utils.js | 6 ------ 4 files changed, 58 deletions(-) (limited to 'client') diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index 39221778..53a74f76 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -103,14 +103,9 @@ template(name="boardHeaderBar") i.fa.fa-trello if $eq boardView 'board-view-swimlanes' i.fa.fa-th-large - // unless collapseSwimlane - // i.fa.fa-th-large - // if collapseSwimlane - // i.fa.fa-play if $eq boardView 'board-view-cal' i.fa.fa-calendar span {{#if boardView}}{{_ boardView}}{{else}}{{_ 'board-view-lists'}}{{/if}} - //span {{#if collapseSwimlane}}{{_ 'board-view-collapse'}}{{else}}{{#if boardView}}{{_ boardView}}{{else}}{{_ 'board-view-lists'}}{{/if}}{{/if}} if canModifyBoard a.board-header-btn.js-multiselection-activate( @@ -191,13 +186,6 @@ template(name="boardChangeViewPopup") | {{_ 'board-view-swimlanes'}} if $eq Utils.boardView "board-view-swimlanes" i.fa.fa-check - //li - // with "board-view-collapse" - // a.js-open-collapse-view - // i.fa.fa-play.colorful - // | {{_ 'board-view-collapse'}} - // if $eq Utils.boardView "board-view-collapse" - // i.fa.fa-check li with "board-view-cal" a.js-open-cal-view diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index b2e03afe..1dc23c59 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -20,28 +20,6 @@ template(name="swimlane") if currentUser.isBoardMember unless currentUser.isCommentOnly +addListForm - //if collapseSwimlane - // // Minimize swimlanes next 2 lines below https://www.w3schools.com/howto/howto_js_accordion.asp - // button(class="accordion") - // div(class="panel") - // .swimlane.js-lists.js-swimlane - // if isMiniScreen - // if currentListIsInThisSwimlane _id - // +list(currentList) - // unless currentList - // each lists - // +miniList(this) - // if currentUser.isBoardMember - // unless currentUser.isCommentOnly - // +addListForm - // else - // each lists - // +list(this) - // if currentCardIsInThisList _id ../_id - // +cardDetails(currentCard) - // if currentUser.isBoardMember - // unless currentUser.isCommentOnly - // +addListForm template(name="listsGroup") .swimlane.list-group.js-lists diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 8687a0e8..d072a2a2 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -146,24 +146,6 @@ BlazeComponent.extendComponent({ } initSortable(boardComponent, $listsDom); - - if (cookies.has('collapseSwimlane')) { - // Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp - const acc = document.getElementsByClassName('accordion'); - let i; - for (i = 0; i < acc.length; i++) { - acc[i].addEventListener('click', function() { - this.classList.toggle('active'); - const panel = this.nextElementSibling; - if (panel.style.maxHeight) { - panel.style.maxHeight = null; - } else { - panel.style.maxHeight = `${panel.scrollHeight}px`; - } - }); - } - // Minimize swimlanes end https://www.w3schools.com/howto/howto_js_accordion.asp - } }, onCreated() { this.draggingActive = new ReactiveVar(false); diff --git a/client/lib/utils.js b/client/lib/utils.js index aca45528..f4fc170a 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -10,9 +10,6 @@ Utils = { cookies.set('boardView', 'board-view-lists'); //true } else if (view === 'board-view-swimlanes') { cookies.set('boardView', 'board-view-swimlanes'); //true - //} else if (view === 'board-view-collapse') { - // cookies.set('boardView', 'board-view-swimlane'); //true - // cookies.set('collapseSwimlane', 'true'); //true } else if (view === 'board-view-cal') { cookies.set('boardView', 'board-view-cal'); //true } @@ -32,11 +29,8 @@ Utils = { return 'board-view-lists'; } else if ( cookies.get('boardView') === 'board-view-swimlanes' - //&& !cookies.has('collapseSwimlane') ) { return 'board-view-swimlanes'; - //} else if (cookies.has('collapseSwimlane')) { - // return 'board-view-swimlanes'; } else if (cookies.get('boardView') === 'board-view-cal') { return 'board-view-cal'; } else { -- cgit v1.2.3-1-g7c22 From 0a1e7006b38979fe40653834aa037341c6ac3355 Mon Sep 17 00:00:00 2001 From: Guillaume Date: Fri, 29 Nov 2019 14:48:44 +0100 Subject: Using LINKED_CARDS_ENABLED --- client/components/lists/listBody.jade | 7 ++++--- client/components/lists/listBody.js | 11 +++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) (limited to 'client') diff --git a/client/components/lists/listBody.jade b/client/components/lists/listBody.jade index 2f175205..517b9d93 100644 --- a/client/components/lists/listBody.jade +++ b/client/components/lists/listBody.jade @@ -49,9 +49,10 @@ template(name="addCardForm") button.primary.confirm(type="submit") {{_ 'add'}} unless currentBoard.isTemplatesBoard unless currentBoard.isTemplateBoard - span.quiet - | {{_ 'or'}} - a.js-link {{_ 'link'}} + if linkCardsEnabled + span.quiet + | {{_ 'or'}} + a.js-link {{_ 'link'}} span.quiet |   | / diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index b0974705..6ed95a2a 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -5,6 +5,17 @@ BlazeComponent.extendComponent({ onCreated() { // for infinite scrolling this.cardlimit = new ReactiveVar(InfiniteScrollIter); + this.linkCardsEnabled = new ReactiveVar(true); + + Meteor.call('getLinkedCardsEnabled', (error, ret) => { + if (!error && ret) { + this.linkCardsEnabled.set(ret); + } + }); + }, + + linkCardsEnabled() { + return this.linkCardsEnabled.get(); }, mixins() { -- cgit v1.2.3-1-g7c22 From e2a374f0aad8489a84d6de9966c281a812b5eca3 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Thu, 12 Dec 2019 18:41:22 +0200 Subject: Fix: Don't add a blank space for empty custom fields on minicards. Thanks to roobre and xet7 ! Closes #2850 --- client/components/cards/minicard.jade | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'client') diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade index 79672f8c..7dd220ee 100644 --- a/client/components/cards/minicard.jade +++ b/client/components/cards/minicard.jade @@ -67,14 +67,15 @@ template(name="minicard") .minicard-custom-fields each customFieldsWD if definition.showOnCard - .minicard-custom-field - if definition.showLabelOnMiniCard + if trueValue + .minicard-custom-field + if definition.showLabelOnMiniCard + .minicard-custom-field-item + +viewer + = definition.name .minicard-custom-field-item +viewer - = definition.name - .minicard-custom-field-item - +viewer - = trueValue + = trueValue if getAssignees .minicard-assignees.js-minicard-assignees -- cgit v1.2.3-1-g7c22 From 25561946edf37351f67cf7500902dde7d9114d2f Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 13 Dec 2019 00:37:21 +0200 Subject: Fix: Allow to set empty card title, AssignedBy and RequestedBy. Thanks to xet7 ! --- client/components/cards/cardDetails.js | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'client') diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index 7bb54223..67120043 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -291,6 +291,8 @@ BlazeComponent.extendComponent({ .trim(); if (title) { this.data().setTitle(title); + } else { + this.data().setTitle(''); } }, 'submit .js-card-details-assigner'(event) { @@ -300,6 +302,8 @@ BlazeComponent.extendComponent({ .trim(); if (assigner) { this.data().setAssignedBy(assigner); + } else { + this.data().setAssignedBy(''); } }, 'submit .js-card-details-requester'(event) { @@ -309,6 +313,8 @@ BlazeComponent.extendComponent({ .trim(); if (requester) { this.data().setRequestedBy(requester); + } else { + this.data().setRequestedBy(''); } }, 'click .js-member': Popup.open('cardMember'), -- cgit v1.2.3-1-g7c22 From 3b3950369ce07aa9e6fc4ab1bef9fb8a4993e398 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 17 Dec 2019 23:42:30 +0200 Subject: Fix comment text disappearing when clicking outside of comment text area. Fix lint error. Thanks to xet7 ! --- client/components/activities/comments.js | 3 --- client/components/users/userHeader.js | 34 +++++++++++--------------------- 2 files changed, 12 insertions(+), 25 deletions(-) (limited to 'client') diff --git a/client/components/activities/comments.js b/client/components/activities/comments.js index 95084646..50ca019b 100644 --- a/client/components/activities/comments.js +++ b/client/components/activities/comments.js @@ -16,9 +16,6 @@ BlazeComponent.extendComponent({ events() { return [ { - 'click .js-new-comment:not(.focus)'() { - commentFormIsOpen.set(true); - }, 'submit .js-new-comment-form'(evt) { const input = this.getInput(); const text = input.val().trim(); diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js index e0c6218e..5f36ef54 100644 --- a/client/components/users/userHeader.js +++ b/client/components/users/userHeader.js @@ -180,24 +180,20 @@ Template.changeSettingsPopup.helpers({ currentUser = Meteor.user(); if (currentUser) { return (currentUser.profile || {}).showDesktopDragHandles; + } else if (cookies.has('showDesktopDragHandles')) { + return true; } else { - if (cookies.has('showDesktopDragHandles')) { - return true; - } else { - return false; - } + return false; } }, hiddenSystemMessages() { currentUser = Meteor.user(); if (currentUser) { return (currentUser.profile || {}).hasHiddenSystemMessages; + } else if (cookies.has('hasHiddenSystemMessages')) { + return true; } else { - if (cookies.has('hasHiddenSystemMessages')) { - return true; - } else { - return false; - } + return false; } }, showCardsCountAt() { @@ -205,8 +201,6 @@ Template.changeSettingsPopup.helpers({ if (currentUser) { return Meteor.user().getLimitToShowCardsCount(); } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); return cookies.get('limitToShowCardsCount'); } }, @@ -217,24 +211,20 @@ Template.changeSettingsPopup.events({ currentUser = Meteor.user(); if (currentUser) { Meteor.call('toggleDesktopDragHandles'); + } else if (cookies.has('showDesktopDragHandles')) { + cookies.remove('showDesktopDragHandles'); } else { - if (cookies.has('showDesktopDragHandles')) { - cookies.remove('showDesktopDragHandles'); - } else { - cookies.set('showDesktopDragHandles', 'true'); - } + cookies.set('showDesktopDragHandles', 'true'); } }, 'click .js-toggle-system-messages'() { currentUser = Meteor.user(); if (currentUser) { Meteor.call('toggleSystemMessages'); + } else if (cookies.has('hasHiddenSystemMessages')) { + cookies.remove('hasHiddenSystemMessages'); } else { - if (cookies.has('hasHiddenSystemMessages')) { - cookies.remove('hasHiddenSystemMessages'); - } else { - cookies.set('hasHiddenSystemMessages', 'true'); - } + cookies.set('hasHiddenSystemMessages', 'true'); } }, 'click .js-apply-show-cards-at'(event, templateInstance) { -- cgit v1.2.3-1-g7c22 From 1f1aea87a421ca5e7931d220d10c838574208e2c Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 20 Dec 2019 17:04:33 +0200 Subject: Visual difference for inactive user in Administration: strikethrough. Thanks to hever and xet7 ! Closes #2860 --- client/components/settings/peopleBody.jade | 59 ++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 15 deletions(-) (limited to 'client') diff --git a/client/components/settings/peopleBody.jade b/client/components/settings/peopleBody.jade index ff343e37..d8f672b0 100644 --- a/client/components/settings/peopleBody.jade +++ b/client/components/settings/peopleBody.jade @@ -39,26 +39,55 @@ template(name="peopleGeneral") template(name="peopleRow") tr - td.username {{ userData.username }} - td {{ userData.profile.fullname }} - td - if userData.isAdmin - | {{_ 'yes'}} - else - | {{_ 'no'}} - td {{ userData.emails.[0].address }} - td - if userData.emails.[0].verified - | {{_ 'yes'}} - else - | {{_ 'no'}} - td {{ moment userData.createdAt 'LLL' }} + if userData.loginDisabled + td.username {{ userData.username }} + else + td.username {{ userData.username }} + if userData.loginDisabled + td {{ userData.profile.fullname }} + else + td {{ userData.profile.fullname }} + if userData.loginDisabled + td + if userData.isAdmin + | {{_ 'yes'}} + else + | {{_ 'no'}} + else + td + if userData.isAdmin + | {{_ 'yes'}} + else + | {{_ 'no'}} + if userData.loginDisabled + td {{ userData.emails.[0].address }} + else + td {{ userData.emails.[0].address }} + if userData.loginDisabled + td + if userData.emails.[0].verified + | {{_ 'yes'}} + else + | {{_ 'no'}} + else + td + if userData.emails.[0].verified + | {{_ 'yes'}} + else + | {{_ 'no'}} + if userData.loginDisabled + td {{ moment userData.createdAt 'LLL' }} + else + td {{ moment userData.createdAt 'LLL' }} td if userData.loginDisabled | {{_ 'no'}} else | {{_ 'yes'}} - td {{_ userData.authenticationMethod }} + if userData.loginDisabled + td {{_ userData.authenticationMethod }} + else + td {{_ userData.authenticationMethod }} td a.edit-user | {{_ 'edit'}} -- cgit v1.2.3-1-g7c22 From e928660bc0b1f873696fe5fece988a5be6fc2c4e Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sat, 21 Dec 2019 19:38:02 +0200 Subject: LINKED_CARDS_ENABLED settings part 3. In Progress, linked cards not completely disabled yet. Thanks to xet7 ! --- client/components/lists/listBody.jade | 2 +- client/components/lists/listBody.js | 17 ++++++----------- 2 files changed, 7 insertions(+), 12 deletions(-) (limited to 'client') diff --git a/client/components/lists/listBody.jade b/client/components/lists/listBody.jade index 517b9d93..335e42cd 100644 --- a/client/components/lists/listBody.jade +++ b/client/components/lists/listBody.jade @@ -49,7 +49,7 @@ template(name="addCardForm") button.primary.confirm(type="submit") {{_ 'add'}} unless currentBoard.isTemplatesBoard unless currentBoard.isTemplateBoard - if linkCardsEnabled + if linkedCardsEnabled span.quiet | {{_ 'or'}} a.js-link {{_ 'link'}} diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index 6ed95a2a..2851b69a 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -5,17 +5,6 @@ BlazeComponent.extendComponent({ onCreated() { // for infinite scrolling this.cardlimit = new ReactiveVar(InfiniteScrollIter); - this.linkCardsEnabled = new ReactiveVar(true); - - Meteor.call('getLinkedCardsEnabled', (error, ret) => { - if (!error && ret) { - this.linkCardsEnabled.set(ret); - } - }); - }, - - linkCardsEnabled() { - return this.linkCardsEnabled.get(); }, mixins() { @@ -388,6 +377,12 @@ BlazeComponent.extendComponent({ }, }).register('addCardForm'); +Template.addCardForm.helpers({ + linkedCardsEnabled() { + return Meteor.settings.public.linkedCardsEnabled; + }, +}); + BlazeComponent.extendComponent({ onCreated() { this.selectedBoardId = new ReactiveVar(''); -- cgit v1.2.3-1-g7c22 From e142acfdb745747c020a1bd5b1974b619d5bdb6d Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 22 Dec 2019 09:44:58 +0200 Subject: Remove LINKED_CARDS_ENABLED settings, because it does not work. Thanks to xet7 ! --- client/components/lists/listBody.jade | 7 +++---- client/components/lists/listBody.js | 6 ------ 2 files changed, 3 insertions(+), 10 deletions(-) (limited to 'client') diff --git a/client/components/lists/listBody.jade b/client/components/lists/listBody.jade index 335e42cd..2f175205 100644 --- a/client/components/lists/listBody.jade +++ b/client/components/lists/listBody.jade @@ -49,10 +49,9 @@ template(name="addCardForm") button.primary.confirm(type="submit") {{_ 'add'}} unless currentBoard.isTemplatesBoard unless currentBoard.isTemplateBoard - if linkedCardsEnabled - span.quiet - | {{_ 'or'}} - a.js-link {{_ 'link'}} + span.quiet + | {{_ 'or'}} + a.js-link {{_ 'link'}} span.quiet |   | / diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index 2851b69a..b0974705 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -377,12 +377,6 @@ BlazeComponent.extendComponent({ }, }).register('addCardForm'); -Template.addCardForm.helpers({ - linkedCardsEnabled() { - return Meteor.settings.public.linkedCardsEnabled; - }, -}); - BlazeComponent.extendComponent({ onCreated() { this.selectedBoardId = new ReactiveVar(''); -- cgit v1.2.3-1-g7c22 From 2bf004120d5a43cd3c3c060fc7c0c30d1b01f220 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 3 Jan 2020 06:49:35 +0200 Subject: Add Worker role. Add more Font Awesome icons. Fix browser console errors when editing user profile name etc. Thanks to xet7 ! Closes #2788 --- client/components/cards/attachments.jade | 26 ++- client/components/cards/cardDate.js | 3 +- client/components/cards/cardDetails.jade | 283 ++++++++++++++++-------- client/components/cards/cardDetails.js | 46 +++- client/components/cards/checklists.jade | 4 +- client/components/cards/checklists.js | 9 +- client/components/cards/minicard.js | 16 +- client/components/cards/subtasks.jade | 4 +- client/components/cards/subtasks.js | 9 +- client/components/lists/list.js | 8 +- client/components/lists/listBody.js | 3 +- client/components/lists/listHeader.jade | 47 +++- client/components/lists/listHeader.js | 15 +- client/components/settings/informationBody.jade | 8 +- client/components/settings/peopleBody.jade | 13 +- client/components/settings/peopleBody.styl | 2 +- client/components/settings/settingBody.jade | 25 ++- client/components/settings/settingBody.styl | 5 +- client/components/sidebar/sidebar.jade | 105 ++++++--- client/components/sidebar/sidebar.js | 41 +++- client/components/sidebar/sidebarArchives.jade | 54 +++-- client/components/sidebar/sidebarArchives.js | 9 + client/components/sidebar/sidebarFilters.jade | 15 +- client/components/swimlanes/swimlaneHeader.js | 8 +- client/components/swimlanes/swimlanes.jade | 33 +-- client/components/swimlanes/swimlanes.js | 24 +- client/components/users/userAvatar.jade | 1 + client/components/users/userHeader.jade | 65 ++++-- client/components/users/userHeader.js | 24 +- client/lib/utils.js | 40 ++-- 30 files changed, 628 insertions(+), 317 deletions(-) (limited to 'client') diff --git a/client/components/cards/attachments.jade b/client/components/cards/attachments.jade index 2a96f4f4..10b767f4 100644 --- a/client/components/cards/attachments.jade +++ b/client/components/cards/attachments.jade @@ -38,18 +38,20 @@ template(name="attachmentsGalery") | {{_ 'download'}} if currentUser.isBoardMember unless currentUser.isCommentOnly - if isImage - a(class="{{#if $eq ../coverId _id}}js-remove-cover{{else}}js-add-cover{{/if}}") - i.fa.fa-thumb-tack - if($eq ../coverId _id) - | {{_ 'remove-cover'}} - else - | {{_ 'add-cover'}} - a.js-confirm-delete - i.fa.fa-close - | {{_ 'delete'}} + unless currentUser.isWorker + if isImage + a(class="{{#if $eq ../coverId _id}}js-remove-cover{{else}}js-add-cover{{/if}}") + i.fa.fa-thumb-tack + if($eq ../coverId _id) + | {{_ 'remove-cover'}} + else + | {{_ 'add-cover'}} + a.js-confirm-delete + i.fa.fa-close + | {{_ 'delete'}} if currentUser.isBoardMember unless currentUser.isCommentOnly - li.attachment-item.add-attachment - a.js-add-attachment {{_ 'add-attachment' }} + unless currentUser.isWorker + li.attachment-item.add-attachment + a.js-add-attachment {{_ 'add-attachment' }} diff --git a/client/components/cards/cardDate.js b/client/components/cards/cardDate.js index cb54b033..c4b5c6d8 100644 --- a/client/components/cards/cardDate.js +++ b/client/components/cards/cardDate.js @@ -97,7 +97,8 @@ Template.dateBadge.helpers({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, }); diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 2b4f44b9..a7aa64ce 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -1,7 +1,7 @@ template(name="cardDetails") section.card-details.js-card-details.js-perfect-scrollbar: .card-details-canvas .card-details-header(class='{{#if colorClass}}card-details-{{colorClass}}{{/if}}') - +inlinedForm(classNames="js-card-details-title") + +inlinedForm(classNames="{{#if canModifyCardWorker}}js-card-details-title{{/if}}") +editCardTitleForm else unless isMiniScreen @@ -13,11 +13,11 @@ template(name="cardDetails") if currentUser.isBoardMember a.fa.fa-navicon.card-details-menu-mobile-web.js-open-card-details-menu h2.card-details-title.js-card-title( - class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}") + class="{{#if canModifyCardWorker}}js-open-inlined-form is-editable{{/if}}") +viewer = getTitle - if isWatching - i.fa.fa-eye.card-details-watch + if isWatching + i.card-details-watch.fa.fa-eye .card-details-path each parentList |   >   @@ -37,49 +37,66 @@ template(name="cardDetails") .card-details-items .card-details-item.card-details-item-received - h3.card-details-item-title {{_ 'card-received'}} + h3 + i.fa.fa-sign-out + card-details-item-title {{_ 'card-received'}} if getReceived +cardReceivedDate else if canModifyCard - a.js-received-date {{_ 'add'}} + unless currentUser.isWorker + a.js-received-date {{_ 'add'}} .card-details-item.card-details-item-start - h3.card-details-item-title {{_ 'card-start'}} + h3 + i.fa.fa-hourglass-start + card-details-item-title {{_ 'card-start'}} if getStart +cardStartDate else if canModifyCard - a.js-start-date {{_ 'add'}} + unless currentUser.isWorker + a.js-start-date {{_ 'add'}} .card-details-item.card-details-item-due - h3.card-details-item-title {{_ 'card-due'}} + h3 + i.fa.fa-sign-in + card-details-item-title {{_ 'card-due'}} if getDue +cardDueDate else if canModifyCard - a.js-due-date {{_ 'add'}} + unless currentUser.isWorker + a.js-due-date {{_ 'add'}} .card-details-item.card-details-item-end - h3.card-details-item-title {{_ 'card-end'}} + h3 + i.fa.fa-hourglass-end + card-details-item-title {{_ 'card-end'}} if getEnd +cardEndDate else if canModifyCard - a.js-end-date {{_ 'add'}} + unless currentUser.isWorker + a.js-end-date {{_ 'add'}} .card-details-items .card-details-item.card-details-item-members - h3.card-details-item-title {{_ 'members'}} + h3 + i.fa.fa-users + card-details-item-title {{_ 'members'}} each getMembers +userAvatar(userId=this cardId=../_id) | {{! XXX Hack to hide syntaxic coloration /// }} if canModifyCard - a.member.add-member.card-details-item-add-button.js-add-members(title="{{_ 'card-members-title'}}") - i.fa.fa-plus + unless currentUser.isWorker + a.member.add-member.card-details-item-add-button.js-add-members(title="{{_ 'card-members-title'}}") + i.fa.fa-plus .card-details-item.card-details-item-assignees - h3.card-details-item-title {{_ 'assignee'}} + h3 + i.fa.fa-user + card-details-item-title {{_ 'assignee'}} each getAssignees +userAvatarAssignee(userId=this cardId=../_id) | {{! XXX Hack to hide syntaxic coloration /// }} @@ -89,15 +106,18 @@ template(name="cardDetails") i.fa.fa-plus .card-details-item.card-details-item-labels - h3.card-details-item-title {{_ 'labels'}} + h3 + i.fa.fa-tags + card-details-item-title {{_ 'labels'}} a(class="{{#if canModifyCard}}js-add-labels{{else}}is-disabled{{/if}}" title="{{_ 'card-labels-title'}}") each labels span.card-label(class="card-label-{{color}}" title=name) +viewer = name if canModifyCard - a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}") - i.fa.fa-plus + unless currentUser.isWorker + a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}") + i.fa.fa-plus .card-details-items each customFieldsWD @@ -118,26 +138,29 @@ template(name="cardDetails") //- XXX We should use "editable" to avoid repetiting ourselves if canModifyCard - h3.card-details-item-title {{_ 'description'}} - +inlinedCardDescription(classNames="card-description js-card-description") - +editor(autofocus=true) - | {{getUnsavedValue 'cardDescription' _id getDescription}} - .edit-controls.clearfix - button.primary(type="submit") {{_ 'save'}} - a.fa.fa-times-thin.js-close-inlined-form - else - a.js-open-inlined-form - if getDescription - +viewer - = getDescription - else - | {{_ 'edit'}} - if (hasUnsavedValue 'cardDescription' _id) - p.quiet - | {{_ 'unsaved-description'}} - a.js-open-inlined-form {{_ 'view-it'}} - = ' - ' - a.js-close-inlined-form {{_ 'discard'}} + unless currentUser.isWorker + h3 + i.fa.fa-align-left + card-details-item-title {{_ 'description'}} + +inlinedCardDescription(classNames="card-description js-card-description") + +editor(autofocus=true) + | {{getUnsavedValue 'cardDescription' _id getDescription}} + .edit-controls.clearfix + button.primary(type="submit") {{_ 'save'}} + a.fa.fa-times-thin.js-close-inlined-form + else + a.js-open-inlined-form + if getDescription + +viewer + = getDescription + else + | {{_ 'edit'}} + if (hasUnsavedValue 'cardDescription' _id) + p.quiet + | {{_ 'unsaved-description'}} + a.js-open-inlined-form {{_ 'view-it'}} + = ' - ' + a.js-close-inlined-form {{_ 'discard'}} else if getDescription h3.card-details-item-title {{_ 'description'}} +viewer @@ -145,33 +168,39 @@ template(name="cardDetails") .card-details-items .card-details-item.card-details-item-name - h3.card-details-item-title {{_ 'requested-by'}} + h3 + i.fa.fa-shopping-cart + card-details-item-title {{_ 'requested-by'}} if canModifyCard - +inlinedForm(classNames="js-card-details-requester") - +editCardRequesterForm - else - a.js-open-inlined-form - if getRequestedBy - +viewer - = getRequestedBy - else - | {{_ 'add'}} + unless currentUser.isWorker + +inlinedForm(classNames="js-card-details-requester") + +editCardRequesterForm + else + a.js-open-inlined-form + if getRequestedBy + +viewer + = getRequestedBy + else + | {{_ 'add'}} else if getRequestedBy +viewer = getRequestedBy .card-details-item.card-details-item-name - h3.card-details-item-title {{_ 'assigned-by'}} + h3 + i.fa.fa-user-plus + card-details-item-title {{_ 'assigned-by'}} if canModifyCard - +inlinedForm(classNames="js-card-details-assigner") - +editCardAssignerForm - else - a.js-open-inlined-form - if getAssignedBy - +viewer - = getAssignedBy - else - | {{_ 'add'}} + unless currentUser.isWorker + +inlinedForm(classNames="js-card-details-assigner") + +editCardAssignerForm + else + a.js-open-inlined-form + if getAssignedBy + +viewer + = getAssignedBy + else + | {{_ 'add'}} else if getRequestedBy +viewer = getAssignedBy @@ -193,7 +222,9 @@ template(name="cardDetails") hr unless currentUser.isNoComments .activity-title - h3 {{ _ 'activity'}} + h3 + i.fa.fa-history + | {{ _ 'activity'}} if currentUser.isBoardMember .material-toggle-switch span.toggle-switch-title {{_ 'hide-system-messages'}} @@ -235,32 +266,79 @@ template(name="editCardAssignerForm") template(name="cardDetailsActionsPopup") ul.pop-over-list - li: a.js-toggle-watch-card {{#if isWatching}}{{_ 'unwatch'}}{{else}}{{_ 'watch'}}{{/if}} + li + a.js-toggle-watch-card + if isWatching + i.fa.fa-eye + | {{_ 'unwatch'}} + else + i.fa.fa-eye-slash + | {{_ 'watch'}} if canModifyCard - hr - ul.pop-over-list - //li: a.js-members {{_ 'card-edit-members'}} - //li: a.js-labels {{_ 'card-edit-labels'}} - //li: a.js-attachments {{_ 'card-edit-attachments'}} - li: a.js-custom-fields {{_ 'card-edit-custom-fields'}} - //li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}} - //li: a.js-start-date {{_ 'editCardStartDatePopup-title'}} - //li: a.js-due-date {{_ 'editCardDueDatePopup-title'}} - //li: a.js-end-date {{_ 'editCardEndDatePopup-title'}} - li: a.js-spent-time {{_ 'editCardSpentTimePopup-title'}} - li: a.js-set-card-color {{_ 'setCardColorPopup-title'}} - hr - ul.pop-over-list - li: a.js-move-card-to-top {{_ 'moveCardToTop-title'}} - li: a.js-move-card-to-bottom {{_ 'moveCardToBottom-title'}} - hr + unless currentUser.isWorker + hr + ul.pop-over-list + //li: a.js-members {{_ 'card-edit-members'}} + //li: a.js-labels {{_ 'card-edit-labels'}} + //li: a.js-attachments {{_ 'card-edit-attachments'}} + li + a.js-custom-fields + i.fa.fa-list-alt + | {{_ 'card-edit-custom-fields'}} + //li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}} + //li: a.js-start-date {{_ 'editCardStartDatePopup-title'}} + //li: a.js-due-date {{_ 'editCardDueDatePopup-title'}} + //li: a.js-end-date {{_ 'editCardEndDatePopup-title'}} + li + a.js-spent-time + i.fa.fa-clock-o + | {{_ 'editCardSpentTimePopup-title'}} + li + a.js-set-card-color + i.fa.fa-paint-brush + | {{_ 'setCardColorPopup-title'}} + hr ul.pop-over-list - li: a.js-move-card {{_ 'moveCardPopup-title'}} - li: a.js-copy-card {{_ 'copyCardPopup-title'}} - li: a.js-copy-checklist-cards {{_ 'copyChecklistToManyCardsPopup-title'}} + li + a.js-move-card-to-top + i.fa.fa-arrow-up + | {{_ 'moveCardToTop-title'}} + li + a.js-move-card-to-bottom + i.fa.fa-arrow-down + | {{_ 'moveCardToBottom-title'}} + unless currentUser.isWorker + hr + ul.pop-over-list + li + a.js-move-card + i.fa.fa-arrow-right + | {{_ 'moveCardPopup-title'}} + li + a.js-copy-card + i.fa.fa-copy + | {{_ 'copyCardPopup-title'}} + hr + ul.pop-over-list + li + a.js-copy-checklist-cards + i.fa.fa-list + i.fa.fa-copy + | {{_ 'copyChecklistToManyCardsPopup-title'}} unless archived - li: a.js-archive {{_ 'archive-card'}} - li: a.js-more {{_ 'cardMorePopup-title'}} + hr + ul.pop-over-list + li + a.js-archive + i.fa.fa-arrow-right + i.fa.fa-archive + | {{_ 'archive-card'}} + hr + ul.pop-over-list + li + a.js-more + i.fa.fa-link + | {{_ 'cardMorePopup-title'}} template(name="moveCardPopup") +boardsAndLists @@ -312,16 +390,27 @@ template(name="cardMembersPopup") i.fa.fa-check template(name="cardAssigneesPopup") - ul.pop-over-list.js-card-assignee-list - each board.activeMembers - li.item(class="{{#if isCardAssignee}}active{{/if}}") - a.name.js-select-assignee(href="#") - +userAvatar(userId=user._id) - span.full-name - = user.profile.fullname - | ({{ user.username }}) - if isCardAssignee - i.fa.fa-check + unless currentUser.isWorker + ul.pop-over-list.js-card-assignee-list + each board.activeMembers + li.item(class="{{#if isCardAssignee}}active{{/if}}") + a.name.js-select-assignee(href="#") + +userAvatar(userId=user._id) + span.full-name + = user.profile.fullname + | ({{ user.username }}) + if isCardAssignee + i.fa.fa-check + if currentUser.isWorker + ul.pop-over-list.js-card-assignee-list + li.item(class="{{#if currentUser.isCardAssignee}}active{{/if}}") + a.name.js-select-assigneeWorker(href="#") + +userAvatar(userId=currentUser._id) + span.full-name + = currentUser.profile.fullname + | ({{ currentUser.username }}) + if currentUser.isCardAssignee + i.fa.fa-check template(name="userAvatarAssignee") a.assignee.js-assignee(title="{{userData.profile.fullname}} ({{userData.username}})") @@ -349,11 +438,13 @@ template(name="cardAssigneePopup") p.quiet @{{ user.username }} ul.pop-over-list if currentUser.isNotCommentOnly + unless currentUser.isWorker li: a.js-remove-assignee {{_ 'remove-member-from-card'}} - if $eq currentUser._id user._id - with currentUser - li: a.js-edit-profile {{_ 'edit-profile'}} + unless currentUser.isWorker + if $eq currentUser._id user._id + with currentUser + li: a.js-edit-profile {{_ 'edit-profile'}} template(name="userAvatarAssigneeInitials") svg.avatar.avatar-assignee-initials(viewBox="0 0 {{viewPortWidth}} 15") diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index 67120043..f0317e6a 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -26,6 +26,7 @@ BlazeComponent.extendComponent({ onCreated() { this.currentBoard = Boards.findOne(Session.get('currentBoard')); + this.currentUser = Meteor.user(); this.isLoaded = new ReactiveVar(false); const boardBody = this.parentComponent().parentComponent(); //in Miniview parent is Board, not BoardBody. @@ -55,6 +56,15 @@ BlazeComponent.extendComponent({ ); }, + canModifyCardWorker() { + return ( + Meteor.user() && + Meteor.user().isBoardMember() && + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() + ); + }, + scrollParentContainer() { const cardPanelWidth = 510; const bodyBoardComponent = this.parentComponent().parentComponent(); @@ -322,7 +332,12 @@ BlazeComponent.extendComponent({ 'click .js-assignee': Popup.open('cardAssignee'), 'click .js-add-assignees': Popup.open('cardAssignees'), 'click .js-add-labels': Popup.open('cardLabels'), - 'click .js-received-date': Popup.open('editCardReceivedDate'), + 'click .js-received-date'(event) { + event.preventDefault(); + if (!Meteor.user().isWorker) { + Popup.open('editCardReceivedDate'); + } + }, 'click .js-start-date': Popup.open('editCardStartDate'), 'click .js-due-date': Popup.open('editCardDueDate'), 'click .js-end-date': Popup.open('editCardEndDate'), @@ -383,6 +398,13 @@ Template.cardDetails.helpers({ return user && user.isBoardAdmin() ? 'admin' : 'normal'; }, + isWorker() { + const currentBoard = Boards.findOne(Session.get('currentBoard')); + return ( + !currentBoard.hasAdmin(this.userId) && currentBoard.hasWorker(this.userId) + ); + }, + presenceStatusClassName() { const user = Users.findOne(this.userId); const userPresence = presences.findOne({ userId: this.userId }); @@ -459,6 +481,15 @@ Template.cardDetailsActionsPopup.helpers({ !Meteor.user().isCommentOnly() ); }, + + canModifyCardWorker() { + return ( + Meteor.user() && + Meteor.user().isBoardMember() && + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() + ); + }, }); Template.cardDetailsActionsPopup.events({ @@ -467,7 +498,12 @@ Template.cardDetailsActionsPopup.events({ 'click .js-labels': Popup.open('cardLabels'), 'click .js-attachments': Popup.open('cardAttachments'), 'click .js-custom-fields': Popup.open('cardCustomFields'), - 'click .js-received-date': Popup.open('editCardReceivedDate'), + 'click .js-received-date'(event) { + event.preventDefault(); + if (!Meteor.user().isWorker) { + Popup.open('editCardReceivedDate'); + } + }, 'click .js-start-date': Popup.open('editCardStartDate'), 'click .js-due-date': Popup.open('editCardDueDate'), 'click .js-end-date': Popup.open('editCardEndDate'), @@ -879,6 +915,12 @@ Template.cardAssigneesPopup.events({ card.toggleAssignee(assigneeId); event.preventDefault(); }, + 'click .js-select-assigneeWorker'(event) { + const card = Cards.findOne(Session.get('currentCard')); + const assigneeId = currentUser._id; + card.toggleAssignee(assigneeId); + event.preventDefault(); + }, }); Template.cardAssigneesPopup.helpers({ diff --git a/client/components/cards/checklists.jade b/client/components/cards/checklists.jade index 279d3671..391769e9 100644 --- a/client/components/cards/checklists.jade +++ b/client/components/cards/checklists.jade @@ -1,5 +1,7 @@ template(name="checklists") - h3 {{_ 'checklists'}} + h3 + i.fa.fa-check + | {{_ 'checklists'}} if toggleDeleteDialog.get .board-overlay#card-details-overlay +checklistDeleteDialog(checklist = checklistToDelete) diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index 57939eb8..27d1b1c9 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -67,7 +67,8 @@ BlazeComponent.extendComponent({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, }).register('checklistDetail'); @@ -120,7 +121,8 @@ BlazeComponent.extendComponent({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, @@ -228,7 +230,8 @@ Template.checklistItemDetail.helpers({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, }); diff --git a/client/components/cards/minicard.js b/client/components/cards/minicard.js index 1ea608f5..da36b87f 100644 --- a/client/components/cards/minicard.js +++ b/client/components/cards/minicard.js @@ -36,24 +36,20 @@ Template.minicard.helpers({ currentUser = Meteor.user(); if (currentUser) { return (currentUser.profile || {}).showDesktopDragHandles; + } else if (cookies.has('showDesktopDragHandles')) { + return true; } else { - if (cookies.has('showDesktopDragHandles')) { - return true; - } else { - return false; - } + return false; } }, hiddenMinicardLabelText() { currentUser = Meteor.user(); if (currentUser) { return (currentUser.profile || {}).hiddenMinicardLabelText; + } else if (cookies.has('hiddenMinicardLabelText')) { + return true; } else { - if (cookies.has('hiddenMinicardLabelText')) { - return true; - } else { - return false; - } + return false; } }, }); diff --git a/client/components/cards/subtasks.jade b/client/components/cards/subtasks.jade index 7e64e23f..df35bed3 100644 --- a/client/components/cards/subtasks.jade +++ b/client/components/cards/subtasks.jade @@ -1,5 +1,7 @@ template(name="subtasks") - h3 {{_ 'subtasks'}} + h3 + i.fa.fa-sitemap + | {{_ 'subtasks'}} if toggleDeleteDialog.get .board-overlay#card-details-overlay +subtaskDeleteDialog(subtask = subtaskToDelete) diff --git a/client/components/cards/subtasks.js b/client/components/cards/subtasks.js index fab860bb..34348fe1 100644 --- a/client/components/cards/subtasks.js +++ b/client/components/cards/subtasks.js @@ -3,7 +3,8 @@ BlazeComponent.extendComponent({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, }).register('subtaskDetail'); @@ -55,7 +56,8 @@ BlazeComponent.extendComponent({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, @@ -154,7 +156,8 @@ Template.subtaskItemDetail.helpers({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, }); diff --git a/client/components/lists/list.js b/client/components/lists/list.js index 89d51e85..0513f90f 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -176,12 +176,10 @@ Template.list.helpers({ currentUser = Meteor.user(); if (currentUser) { return (currentUser.profile || {}).showDesktopDragHandles; + } else if (cookies.has('showDesktopDragHandles')) { + return true; } else { - if (cookies.has('showDesktopDragHandles')) { - return true; - } else { - return false; - } + return false; } }, }); diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index b0974705..89c27ec7 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -189,7 +189,8 @@ BlazeComponent.extendComponent({ !this.reachedWipLimit() && Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index 631f68a0..686de845 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -56,25 +56,47 @@ template(name="editListTitleForm") template(name="listActionPopup") ul.pop-over-list - li: a.js-toggle-watch-list {{#if isWatching}}{{_ 'unwatch'}}{{else}}{{_ 'watch'}}{{/if}} + li + a.js-toggle-watch-list + if isWatching + i.fa.fa-eye + | {{_ 'unwatch'}} + else + i.fa.fa-eye-slash + | {{_ 'watch'}} unless currentUser.isCommentOnly - hr - ul.pop-over-list - li: a.js-set-color-list {{_ 'set-color-list'}} - hr + unless currentUser.isWorker + ul.pop-over-list + li + a.js-set-color-list + i.fa.fa-paint-brush + | {{_ 'set-color-list'}} ul.pop-over-list if cards.count - li: a.js-select-cards {{_ 'list-select-cards'}} - hr + li + a.js-select-cards + i.fa.fa-check-square + | {{_ 'list-select-cards'}} if currentUser.isBoardAdmin ul.pop-over-list - li: a.js-set-wip-limit {{#if isWipLimitEnabled }}{{_ 'edit-wip-limit'}}{{else}}{{_ 'setWipLimitPopup-title'}}{{/if}} + li + a.js-set-wip-limit + i.fa.fa-ban + | {{#if isWipLimitEnabled }}{{_ 'edit-wip-limit'}}{{else}}{{_ 'setWipLimitPopup-title'}}{{/if}} + unless currentUser.isWorker hr - ul.pop-over-list - li: a.js-close-list {{_ 'archive-list'}} + ul.pop-over-list + li + a.js-close-list + i.fa.fa-arrow-right + i.fa.fa-archive + | {{_ 'archive-list'}} hr ul.pop-over-list - li: a.js-more {{_ 'listMorePopup-title'}} + li + a.js-more + i.fa.fa-link + | {{_ 'listMorePopup-title'}} template(name="boardLists") ul.pop-over-list @@ -94,7 +116,8 @@ template(name="listMorePopup") input.inline-input(type="text" readonly value="{{ rootUrl }}") | {{_ 'added'}} span.date(title=list.createdAt) {{ moment createdAt 'LLL' }} - a.js-delete {{_ 'delete'}} + unless currentUser.isWorker + a.js-delete {{_ 'delete'}} template(name="listDeletePopup") p {{_ "list-delete-pop"}} diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index 570cc30f..46dbd748 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -9,9 +9,10 @@ BlazeComponent.extendComponent({ canSeeAddCard() { const list = Template.currentData(); return ( - !list.getWipLimit('enabled') || - list.getWipLimit('soft') || - !this.reachedWipLimit() + (!list.getWipLimit('enabled') || + list.getWipLimit('soft') || + !this.reachedWipLimit()) && + !Meteor.user().isWorker() ); }, @@ -109,12 +110,10 @@ Template.listHeader.helpers({ currentUser = Meteor.user(); if (currentUser) { return (currentUser.profile || {}).showDesktopDragHandles; + } else if (cookies.has('showDesktopDragHandles')) { + return true; } else { - if (cookies.has('showDesktopDragHandles')) { - return true; - } else { - return false; - } + return false; } }, }); diff --git a/client/components/settings/informationBody.jade b/client/components/settings/informationBody.jade index 2c615ffd..0f85dd9c 100644 --- a/client/components/settings/informationBody.jade +++ b/client/components/settings/informationBody.jade @@ -4,12 +4,16 @@ template(name='information') | {{_ 'error-notAuthorized'}} else .content-title - span {{_ 'info'}} + span + i.fa.fa-info-circle + | {{_ 'info'}} .content-body .side-menu ul li.active - a.js-setting-menu(data-id="information-display") {{_ 'info'}} + a.js-setting-menu(data-id="information-display") + i.fa.fa-info-circle + | {{_ 'info'}} .main-body +statistics diff --git a/client/components/settings/peopleBody.jade b/client/components/settings/peopleBody.jade index d8f672b0..b8a94337 100644 --- a/client/components/settings/peopleBody.jade +++ b/client/components/settings/peopleBody.jade @@ -5,16 +5,22 @@ template(name="people") else .content-title.ext-box .ext-box-left - span {{_ 'people'}} + span + i.fa.fa-users + | {{_ 'people'}} input#searchInput(placeholder="{{_ 'search'}}") - button#searchButton {{_ 'search'}} + button#searchButton + i.fa.fa-search + | {{_ 'search'}} .ext-box-right span {{_ 'people-number'}} #{peopleNumber} .content-body .side-menu ul li.active - a.js-setting-menu(data-id="people-setting") {{_ 'people'}} + a.js-setting-menu(data-id="people-setting") + i.fa.fa-users + | {{_ 'people'}} .main-body if loading.get +spinner @@ -90,6 +96,7 @@ template(name="peopleRow") td {{_ userData.authenticationMethod }} td a.edit-user + i.fa.fa-edit | {{_ 'edit'}} template(name="editUserPopup") diff --git a/client/components/settings/peopleBody.styl b/client/components/settings/peopleBody.styl index 80387611..c223e181 100644 --- a/client/components/settings/peopleBody.styl +++ b/client/components/settings/peopleBody.styl @@ -33,7 +33,7 @@ table padding: 0; button - min-width: 60px; + min-width: 90px; .content-wrapper margin-top: 10px diff --git a/client/components/settings/settingBody.jade b/client/components/settings/settingBody.jade index 04b635e8..877fe6e2 100644 --- a/client/components/settings/settingBody.jade +++ b/client/components/settings/settingBody.jade @@ -4,22 +4,35 @@ template(name="setting") | {{_ 'error-notAuthorized'}} else .content-title + i.fa.fa-cog span {{_ 'settings'}} .content-body .side-menu ul li.active - a.js-setting-menu(data-id="registration-setting") {{_ 'registration'}} + a.js-setting-menu(data-id="registration-setting") + i.fa.fa-sign-in + | {{_ 'registration'}} li - a.js-setting-menu(data-id="email-setting") {{_ 'email'}} + a.js-setting-menu(data-id="email-setting") + i.fa.fa-envelope + | {{_ 'email'}} li - a.js-setting-menu(data-id="account-setting") {{_ 'accounts'}} + a.js-setting-menu(data-id="account-setting") + i.fa.fa-users + | {{_ 'accounts'}} li - a.js-setting-menu(data-id="announcement-setting") {{_ 'admin-announcement'}} + a.js-setting-menu(data-id="announcement-setting") + i.fa.fa-bullhorn + | {{_ 'admin-announcement'}} li - a.js-setting-menu(data-id="layout-setting") {{_ 'layout'}} + a.js-setting-menu(data-id="layout-setting") + i.fa.fa-object-group + | {{_ 'layout'}} li - a.js-setting-menu(data-id="webhook-setting") {{_ 'global-webhook'}} + a.js-setting-menu(data-id="webhook-setting") + i.fa.fa-globe + | {{_ 'global-webhook'}} .main-body if loading.get +spinner diff --git a/client/components/settings/settingBody.styl b/client/components/settings/settingBody.styl index bcbd2ea1..d6ac32b2 100644 --- a/client/components/settings/settingBody.styl +++ b/client/components/settings/settingBody.styl @@ -41,15 +41,18 @@ &:hover background #fff box-shadow 0 1px 2px rgba(0,0,0,0.15); + a @extends .flex padding: 1rem 0 1rem 1rem width: 100% - 5rem - span font-size: 13px + i + margin-right: 20px + .main-body padding: 0.1em 1em -webkit-user-select: text // Safari 3.1+ diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index ccfadc0c..19e32970 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -37,11 +37,12 @@ template(name='homeSidebar') template(name="membersWidget") .board-widget.board-widget-members h3 - i.fa.fa-user + i.fa.fa-users | {{_ 'members'}} unless currentUser.isCommentOnly - a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}").right - i.board-header-btn-icon.fa.fa-cog + unless currentUser.isWorker + a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}").right + i.board-header-btn-icon.fa.fa-cog .board-widget-content each currentBoard.activeMembers @@ -130,7 +131,9 @@ template(name="chooseBoardSource") template(name="archiveBoardPopup") p {{_ 'close-board-pop'}} - button.js-confirm.negate.full(type="submit") {{_ 'archive'}} + button.js-confirm.negate.full(type="submit") + i.fa.fa-archive + | {{_ 'archive'}} template(name="outgoingWebhooksPopup") each integrations @@ -162,38 +165,80 @@ template(name="outgoingWebhooksPopup") template(name="boardMenuPopup") ul.pop-over-list - li: a.js-custom-fields {{_ 'custom-fields'}} - li: a.js-open-archives {{_ 'archived-items'}} + if isNotWorker + li: a.js-custom-fields {{_ 'custom-fields'}} + li + a.js-open-archives + i.fa.fa-archive + | {{_ 'archived-items'}} if currentUser.isBoardAdmin - li: a.js-change-board-color {{_ 'board-change-color'}} + li + a.js-change-board-color + i.fa.fa-paint-brush + | {{_ 'board-change-color'}} + //- XXX Language should be handled by sandstorm, but for now display a language selection link in the board menu. This link is normally present in the header bar that is not displayed on sandstorm. if isSandstorm - li: a.js-change-language {{_ 'language'}} + li + a.js-change-language + i.fa.fa-flag + | {{_ 'language'}} unless isSandstorm if currentUser.isBoardAdmin hr ul.pop-over-list - li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}} - unless currentBoard.isTemplatesBoard - li: a.js-archive-board {{_ 'archive-board'}} - li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}} - hr - ul.pop-over-list - li: a.js-subtask-settings {{_ 'subtask-settings'}} + li + a(href="{{exportUrl}}", download="{{exportFilename}}") + i.fa.fa-share-alt + | {{_ 'export-board'}} + li + a.js-outgoing-webhooks + i.fa.fa-globe + | {{_ 'outgoing-webhooks'}} + li + a.js-subtask-settings + i.fa.fa-sitemap + | {{_ 'subtask-settings'}} + unless currentBoard.isTemplatesBoard + hr + ul.pop-over-list + li + a.js-archive-board + i.fa.fa-arrow-right + i.fa.fa-archive + | {{_ 'archive-board'}} if isSandstorm hr ul.pop-over-list - li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}} - li: a.js-import-board {{_ 'import-board-c'}} - li: a.js-archive-board {{_ 'archive-board'}} - li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}} + li + a(href="{{exportUrl}}", download="{{exportFilename}}") + i.fa.fa-share-alt + i.fa.fa-sign-out + | {{_ 'export-board'}} + li + a.js-import-board + i.fa.fa-share-alt + i.fa.fa-sign-in + | {{_ 'import-board-c'}} + li + a.js-archive-board + i.fa.fa-arrow-right + i.fa.fa-archive + | {{_ 'archive-board'}} + li + a.js-outgoing-webhooks + i.fa.fa-globe + | {{_ 'outgoing-webhooks'}} hr ul.pop-over-list - li: a.js-subtask-settings {{_ 'subtask-settings'}} + li + a.js-subtask-settings + i.fa.fa-sitemap + | {{_ 'subtask-settings'}} template(name="labelsWidget") .board-widget.board-widget-labels @@ -203,7 +248,7 @@ template(name="labelsWidget") .board-widget-content each currentBoard.labels a.card-label(class="card-label-{{color}}" - class="{{#if currentUser.isNotCommentOnly}}js-label{{/if}}") + class="{{#if currentUser.isNotCommentOnly}}{{#if currentUser.isNotWorker}}js-label{{/if}}{{/if}}") span.card-label-name +viewer = name @@ -232,12 +277,12 @@ template(name="memberPopup") a.js-change-role | {{_ 'change-permissions'}} span.quiet (#{memberType}) - li - if $eq currentUser._id userId - a.js-leave-member {{_ 'leave-board'}} - else if currentUser.isBoardAdmin - a.js-remove-member {{_ 'remove-from-board'}} - + unless currentUser.isWorker + li + if $eq currentUser._id userId + a.js-leave-member {{_ 'leave-board'}} + else if currentUser.isBoardAdmin + a.js-remove-member {{_ 'remove-from-board'}} template(name="removeMemberPopup") p {{_ 'remove-member-pop' name=user.profile.fullname username=user.username boardTitle=board.title}} @@ -301,6 +346,12 @@ template(name="changePermissionsPopup") if isCommentOnly i.fa.fa-check span.sub-name {{_ 'comment-only-desc'}} + li + a(class="{{#if isLastAdmin}}disabled{{else}}js-set-worker{{/if}}") + | {{_ 'worker'}} + if isWorker + i.fa.fa-check + span.sub-name {{_ 'worker-desc'}} if isLastAdmin hr p.quiet.bottom {{_ 'last-admin-desc'}} diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index caf36020..e8f38b8c 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -112,12 +112,10 @@ BlazeComponent.extendComponent({ currentUser = Meteor.user(); if (currentUser) { Meteor.call('toggleMinicardLabelText'); + } else if (cookies.has('hiddenMinicardLabelText')) { + cookies.remove('hiddenMinicardLabelText'); } else { - if (cookies.has('hiddenMinicardLabelText')) { - cookies.remove('hiddenMinicardLabelText'); - } else { - cookies.set('hiddenMinicardLabelText', 'true'); - } + cookies.set('hiddenMinicardLabelText', 'true'); } }, 'click .js-shortcuts'() { @@ -135,12 +133,10 @@ Template.homeSidebar.helpers({ currentUser = Meteor.user(); if (currentUser) { return (currentUser.profile || {}).hiddenMinicardLabelText; + } else if (cookies.has('hiddenMinicardLabelText')) { + return true; } else { - if (cookies.has('hiddenMinicardLabelText')) { - return true; - } else { - return false; - } + return false; } }, }); @@ -165,10 +161,13 @@ Template.memberPopup.helpers({ const currentBoard = Boards.findOne(Session.get('currentBoard')); const commentOnly = currentBoard.hasCommentOnly(this.userId); const noComments = currentBoard.hasNoComments(this.userId); + const worker = currentBoard.hasWorker(this.userId); if (commentOnly) { return TAPi18n.__('comment-only').toLowerCase(); } else if (noComments) { return TAPi18n.__('no-comments').toLowerCase(); + } else if (worker) { + return TAPi18n.__('worker').toLowerCase(); } else { return TAPi18n.__(type).toLowerCase(); } @@ -271,6 +270,14 @@ Template.membersWidget.helpers({ const user = Meteor.user(); return user && user.isInvitedTo(Session.get('currentBoard')); }, + isWorker() { + const user = Meteor.user(); + if (user) { + return Meteor.call(Boards.hasWorker(user.memberId)); + } else { + return false; + } + }, }); Template.membersWidget.events({ @@ -648,7 +655,7 @@ BlazeComponent.extendComponent({ }).register('addMemberPopup'); Template.changePermissionsPopup.events({ - 'click .js-set-admin, click .js-set-normal, click .js-set-no-comments, click .js-set-comment-only'( + 'click .js-set-admin, click .js-set-normal, click .js-set-no-comments, click .js-set-comment-only, click .js-set-worker'( event, ) { const currentBoard = Boards.findOne(Session.get('currentBoard')); @@ -658,11 +665,13 @@ Template.changePermissionsPopup.events({ 'js-set-comment-only', ); const isNoComments = $(event.currentTarget).hasClass('js-set-no-comments'); + const isWorker = $(event.currentTarget).hasClass('js-set-worker'); currentBoard.setMemberPermission( memberId, isAdmin, isNoComments, isCommentOnly, + isWorker, ); Popup.back(1); }, @@ -679,7 +688,8 @@ Template.changePermissionsPopup.helpers({ return ( !currentBoard.hasAdmin(this.userId) && !currentBoard.hasNoComments(this.userId) && - !currentBoard.hasCommentOnly(this.userId) + !currentBoard.hasCommentOnly(this.userId) && + !currentBoard.hasWorker(this.userId) ); }, @@ -699,6 +709,13 @@ Template.changePermissionsPopup.helpers({ ); }, + isWorker() { + const currentBoard = Boards.findOne(Session.get('currentBoard')); + return ( + !currentBoard.hasAdmin(this.userId) && currentBoard.hasWorker(this.userId) + ); + }, + isLastAdmin() { const currentBoard = Boards.findOne(Session.get('currentBoard')); return ( diff --git a/client/components/sidebar/sidebarArchives.jade b/client/components/sidebar/sidebarArchives.jade index 466d2cb0..56423ad7 100644 --- a/client/components/sidebar/sidebarArchives.jade +++ b/client/components/sidebar/sidebarArchives.jade @@ -2,54 +2,60 @@ template(name="archivesSidebar") if isArchiveReady.get +basicTabs(tabs=tabs) +tabContent(slug="cards") - p.quiet - a.js-restore-all-cards {{_ 'restore-all'}} - | - - a.js-delete-all-cards {{_ 'delete-all'}} + unless isWorker + p.quiet + a.js-restore-all-cards {{_ 'restore-all'}} + | - + a.js-delete-all-cards {{_ 'delete-all'}} each archivedCards .minicard-wrapper.js-minicard +minicard(this) if currentUser.isBoardMember - p.quiet - a.js-restore-card {{_ 'restore'}} - | - - a.js-delete-card {{_ 'delete'}} + unless isWorker + p.quiet + a.js-restore-card {{_ 'restore'}} + | - + a.js-delete-card {{_ 'delete'}} if cardIsInArchivedList p.quiet.small ({{_ 'warn-list-archived'}}) else p.no-items-message {{_ 'no-archived-cards'}} +tabContent(slug="lists") - p.quiet - a.js-restore-all-lists {{_ 'restore-all'}} - | - - a.js-delete-all-lists {{_ 'delete-all'}} + unless isWorker + p.quiet + a.js-restore-all-lists {{_ 'restore-all'}} + | - + a.js-delete-all-lists {{_ 'delete-all'}} ul.archived-lists each archivedLists li.archived-lists-item = title if currentUser.isBoardMember - p.quiet - a.js-restore-list {{_ 'restore'}} - | - - a.js-delete-list {{_ 'delete'}} + unless isWorker + p.quiet + a.js-restore-list {{_ 'restore'}} + | - + a.js-delete-list {{_ 'delete'}} else li.no-items-message {{_ 'no-archived-lists'}} +tabContent(slug="swimlanes") - p.quiet - a.js-restore-all-swimlanes {{_ 'restore-all'}} - | - - a.js-delete-all-swimlanes {{_ 'delete-all'}} + unless isWorker + p.quiet + a.js-restore-all-swimlanes {{_ 'restore-all'}} + | - + a.js-delete-all-swimlanes {{_ 'delete-all'}} ul.archived-lists each archivedSwimlanes li.archived-lists-item = title if currentUser.isBoardMember - p.quiet - a.js-restore-swimlane {{_ 'restore'}} - | - - a.js-delete-swimlane {{_ 'delete'}} + unless isWorker + p.quiet + a.js-restore-swimlane {{_ 'restore'}} + | - + a.js-delete-swimlane {{_ 'delete'}} else li.no-items-message {{_ 'no-archived-swimlanes'}} else diff --git a/client/components/sidebar/sidebarArchives.js b/client/components/sidebar/sidebarArchives.js index a4846561..75b694e9 100644 --- a/client/components/sidebar/sidebarArchives.js +++ b/client/components/sidebar/sidebarArchives.js @@ -139,3 +139,12 @@ BlazeComponent.extendComponent({ ]; }, }).register('archivesSidebar'); + +Template.archivesSidebar.helpers({ + isWorker() { + const currentBoard = Boards.findOne(Session.get('currentBoard')); + return ( + !currentBoard.hasAdmin(this.userId) && currentBoard.hasWorker(this.userId) + ); + }, +}); diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade index 5f929cb9..7f31dada 100644 --- a/client/components/sidebar/sidebarFilters.jade +++ b/client/components/sidebar/sidebarFilters.jade @@ -117,13 +117,14 @@ template(name="multiselectionSidebar") i.fa.fa-check else if someSelectedElementHave 'member' _id i.fa.fa-ellipsis-h - hr - a.sidebar-btn.js-move-selection - i.fa.fa-share - span {{_ 'move-selection'}} - a.sidebar-btn.js-archive-selection - i.fa.fa-archive - span {{_ 'archive-selection'}} + unless currentUser.isWorker + hr + a.sidebar-btn.js-move-selection + i.fa.fa-share + span {{_ 'move-selection'}} + a.sidebar-btn.js-archive-selection + i.fa.fa-archive + span {{_ 'archive-selection'}} template(name="disambiguateMultiLabelPopup") p {{_ 'what-to-do'}} diff --git a/client/components/swimlanes/swimlaneHeader.js b/client/components/swimlanes/swimlaneHeader.js index fbc45351..3032966d 100644 --- a/client/components/swimlanes/swimlaneHeader.js +++ b/client/components/swimlanes/swimlaneHeader.js @@ -35,12 +35,10 @@ Template.swimlaneHeader.helpers({ currentUser = Meteor.user(); if (currentUser) { return (currentUser.profile || {}).showDesktopDragHandles; + } else if (cookies.has('showDesktopDragHandles')) { + return true; } else { - if (cookies.has('showDesktopDragHandles')) { - return true; - } else { - return false; - } + return false; } }, }); diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index 1dc23c59..9b00d9e8 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -43,19 +43,20 @@ template(name="listsGroup") +addListForm template(name="addListForm") - .list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}") - .list-header-add - +inlinedForm(autoclose=false) - input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}" - autocomplete="off" autofocus) - .edit-controls.clearfix - button.primary.confirm(type="submit") {{_ 'save'}} - unless currentBoard.isTemplatesBoard - unless currentBoard.isTemplateBoard - span.quiet - | {{_ 'or'}} - a.js-list-template {{_ 'template'}} - else - a.open-list-composer.js-open-inlined-form - i.fa.fa-plus - | {{_ 'add-list'}} + unless currentUser.isWorker + .list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}") + .list-header-add + +inlinedForm(autoclose=false) + input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}" + autocomplete="off" autofocus) + .edit-controls.clearfix + button.primary.confirm(type="submit") {{_ 'save'}} + unless currentBoard.isTemplatesBoard + unless currentBoard.isTemplateBoard + span.quiet + | {{_ 'or'}} + a.js-list-template {{_ 'template'}} + else + a.open-list-composer.js-open-inlined-form + i.fa.fa-plus + | {{_ 'add-list'}} diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index d072a2a2..6568036f 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -104,12 +104,10 @@ function initSortable(boardComponent, $listsDom) { if (currentUser) { showDesktopDragHandles = (currentUser.profile || {}) .showDesktopDragHandles; + } else if (cookies.has('showDesktopDragHandles')) { + showDesktopDragHandles = true; } else { - if (cookies.has('showDesktopDragHandles')) { - showDesktopDragHandles = true; - } else { - showDesktopDragHandles = false; - } + showDesktopDragHandles = false; } if (!Utils.isMiniScreen() && showDesktopDragHandles) { @@ -182,12 +180,10 @@ BlazeComponent.extendComponent({ if (currentUser) { showDesktopDragHandles = (currentUser.profile || {}) .showDesktopDragHandles; + } else if (cookies.has('showDesktopDragHandles')) { + showDesktopDragHandles = true; } else { - if (cookies.has('showDesktopDragHandles')) { - showDesktopDragHandles = true; - } else { - showDesktopDragHandles = false; - } + showDesktopDragHandles = false; } const noDragInside = ['a', 'input', 'textarea', 'p'].concat( @@ -276,12 +272,10 @@ Template.swimlane.helpers({ currentUser = Meteor.user(); if (currentUser) { return (currentUser.profile || {}).showDesktopDragHandles; + } else if (cookies.has('showDesktopDragHandles')) { + return true; } else { - if (cookies.has('showDesktopDragHandles')) { - return true; - } else { - return false; - } + return false; } }, canSeeAddList() { diff --git a/client/components/users/userAvatar.jade b/client/components/users/userAvatar.jade index ebfa48ba..7f2067ce 100644 --- a/client/components/users/userAvatar.jade +++ b/client/components/users/userAvatar.jade @@ -73,6 +73,7 @@ template(name="cardMemberPopup") p.quiet @{{ user.username }} ul.pop-over-list if currentUser.isNotCommentOnly + if currentUser.isNotWorker li: a.js-remove-member {{_ 'remove-member-from-card'}} if $eq currentUser._id user._id diff --git a/client/components/users/userHeader.jade b/client/components/users/userHeader.jade index 50a80396..9306d21d 100644 --- a/client/components/users/userHeader.jade +++ b/client/components/users/userHeader.jade @@ -13,21 +13,46 @@ template(name="headerUserBar") template(name="memberMenuPopup") ul.pop-over-list with currentUser - li: a.js-edit-profile {{_ 'edit-profile'}} - li: a.js-change-settings {{_ 'change-settings'}} - li: a.js-change-avatar {{_ 'edit-avatar'}} + li + a.js-edit-profile + i.fa.fa-user + | {{_ 'edit-profile'}} + li + a.js-change-settings + i.fa.fa-cog + | {{_ 'change-settings'}} + li + a.js-change-avatar + i.fa.fa-picture-o + | {{_ 'edit-avatar'}} unless isSandstorm - li: a.js-change-password {{_ 'changePasswordPopup-title'}} - li: a.js-change-language {{_ 'changeLanguagePopup-title'}} + li + a.js-change-password + i.fa.fa-key + | {{_ 'changePasswordPopup-title'}} + li + a.js-change-language + i.fa.fa-flag + | {{_ 'changeLanguagePopup-title'}} if currentUser.isAdmin - li: a.js-go-setting(href="{{pathFor 'setting'}}") {{_ 'admin-panel'}} - hr - ul.pop-over-list - li: a(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}") {{_ 'templates'}} + li + a.js-go-setting(href="{{pathFor 'setting'}}") + i.fa.fa-lock + | {{_ 'admin-panel'}} + unless currentUser.isWorker + hr + ul.pop-over-list + li + a(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}") + i.fa.fa-clone + | {{_ 'templates'}} unless isSandstorm hr ul.pop-over-list - li: a.js-logout {{_ 'log-out'}} + li + a.js-logout + i.fa.fa-sign-out + | {{_ 'log-out'}} template(name="editProfilePopup") form @@ -75,21 +100,25 @@ template(name="changeSettingsPopup") ul.pop-over-list li a.js-toggle-system-messages + i.fa.fa-comments-o | {{_ 'hide-system-messages'}} if hiddenSystemMessages i.fa.fa-check li a.js-toggle-desktop-drag-handles + i.fa.fa-arrows | {{_ 'show-desktop-drag-handles'}} if showDesktopDragHandles i.fa.fa-check - li - label.bold - | {{_ 'show-cards-minimum-count'}} - input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="0" max="99" onkeydown="return false") - input.js-apply-show-cards-at.left(type="submit" value="{{_ 'apply'}}") - + unless currentUser.isWorker + li + label.bold + i.fa.fa-sort-numeric-asc + | {{_ 'show-cards-minimum-count'}} + input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="0" max="99" onkeydown="return false") + input.js-apply-show-cards-at.left(type="submit" value="{{_ 'apply'}}") template(name="userDeletePopup") - p {{_ 'delete-user-confirm-popup'}} - button.js-confirm.negate.full(type="submit") {{_ 'delete'}} + unless currentUser.isWorker + p {{_ 'delete-user-confirm-popup'}} + button.js-confirm.negate.full(type="submit") {{_ 'delete'}} diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js index 5f36ef54..847d30fb 100644 --- a/client/components/users/userHeader.js +++ b/client/components/users/userHeader.js @@ -45,13 +45,31 @@ Template.memberMenuPopup.events({ Template.editProfilePopup.helpers({ allowEmailChange() { - return AccountSettings.findOne('accounts-allowEmailChange').booleanValue; + Meteor.call('AccountSettings.allowEmailChange', (_, result) => { + if (result) { + return true; + } else { + return false; + } + }); }, allowUserNameChange() { - return AccountSettings.findOne('accounts-allowUserNameChange').booleanValue; + Meteor.call('AccountSettings.allowUserNameChange', (_, result) => { + if (result) { + return true; + } else { + return false; + } + }); }, allowUserDelete() { - return AccountSettings.findOne('accounts-allowUserDelete').booleanValue; + Meteor.call('AccountSettings.allowUserDelete', (_, result) => { + if (result) { + return true; + } else { + return false; + } + }); }, }); diff --git a/client/lib/utils.js b/client/lib/utils.js index f4fc170a..39457208 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -24,18 +24,14 @@ Utils = { currentUser = Meteor.user(); if (currentUser) { return (currentUser.profile || {}).boardView; + } else if (cookies.get('boardView') === 'board-view-lists') { + return 'board-view-lists'; + } else if (cookies.get('boardView') === 'board-view-swimlanes') { + return 'board-view-swimlanes'; + } else if (cookies.get('boardView') === 'board-view-cal') { + return 'board-view-cal'; } else { - if (cookies.get('boardView') === 'board-view-lists') { - return 'board-view-lists'; - } else if ( - cookies.get('boardView') === 'board-view-swimlanes' - ) { - return 'board-view-swimlanes'; - } else if (cookies.get('boardView') === 'board-view-cal') { - return 'board-view-cal'; - } else { - return false; - } + return false; } }, @@ -43,8 +39,8 @@ Utils = { goBoardId(_id) { const board = Boards.findOne(_id); return ( - board - && FlowRouter.go('board', { + board && + FlowRouter.go('board', { id: board._id, slug: board.slug, }) @@ -55,8 +51,8 @@ Utils = { const card = Cards.findOne(_id); const board = Boards.findOne(card.boardId); return ( - board - && FlowRouter.go('card', { + board && + FlowRouter.go('card', { cardId: card._id, boardId: board._id, slug: board.slug, @@ -227,8 +223,8 @@ Utils = { }; if ( - 'ontouchstart' in window - || (window.DocumentTouch && document instanceof window.DocumentTouch) + 'ontouchstart' in window || + (window.DocumentTouch && document instanceof window.DocumentTouch) ) { return true; } @@ -249,8 +245,8 @@ Utils = { calculateTouchDistance(touchA, touchB) { return Math.sqrt( - Math.pow(touchA.screenX - touchB.screenX, 2) - + Math.pow(touchA.screenY - touchB.screenY, 2), + Math.pow(touchA.screenX - touchB.screenX, 2) + + Math.pow(touchA.screenY - touchB.screenY, 2), ); }, @@ -267,9 +263,9 @@ Utils = { }); $(document).on('touchend', selector, function(e) { if ( - touchStart - && lastTouch - && Utils.calculateTouchDistance(touchStart, lastTouch) <= 20 + touchStart && + lastTouch && + Utils.calculateTouchDistance(touchStart, lastTouch) <= 20 ) { e.preventDefault(); const clickEvent = document.createEvent('MouseEvents'); -- cgit v1.2.3-1-g7c22 From 5376bc7b7905c0dd99fae1aeae3f63b4583a3e3f Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 3 Jan 2020 13:27:27 +0200 Subject: Fix not being able to edit received date. Thanks to xet7 ! --- client/components/cards/cardDetails.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'client') diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index f0317e6a..f47b3824 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -332,12 +332,7 @@ BlazeComponent.extendComponent({ 'click .js-assignee': Popup.open('cardAssignee'), 'click .js-add-assignees': Popup.open('cardAssignees'), 'click .js-add-labels': Popup.open('cardLabels'), - 'click .js-received-date'(event) { - event.preventDefault(); - if (!Meteor.user().isWorker) { - Popup.open('editCardReceivedDate'); - } - }, + 'click .js-received-date': Popup.open('editCardReceivedDate'), 'click .js-start-date': Popup.open('editCardStartDate'), 'click .js-due-date': Popup.open('editCardDueDate'), 'click .js-end-date': Popup.open('editCardEndDate'), -- cgit v1.2.3-1-g7c22 From 27943796ade78ca3c503637a1340918bf06a1267 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 3 Jan 2020 16:02:31 +0200 Subject: Revert to Wekan v3.57 version of client and models directories, removing Worker role temporarily, because Worker role changes broke saving card. Thanks to xet7 ! --- client/components/cards/attachments.jade | 26 +-- client/components/cards/cardDate.js | 3 +- client/components/cards/cardDetails.jade | 283 ++++++++---------------- client/components/cards/cardDetails.js | 39 +--- client/components/cards/checklists.jade | 4 +- client/components/cards/checklists.js | 9 +- client/components/cards/subtasks.jade | 4 +- client/components/cards/subtasks.js | 9 +- client/components/lists/listBody.js | 3 +- client/components/lists/listHeader.jade | 47 +--- client/components/lists/listHeader.js | 7 +- client/components/settings/informationBody.jade | 8 +- client/components/settings/peopleBody.jade | 13 +- client/components/settings/peopleBody.styl | 2 +- client/components/settings/settingBody.jade | 25 +-- client/components/settings/settingBody.styl | 5 +- client/components/sidebar/sidebar.jade | 105 +++------ client/components/sidebar/sidebar.js | 25 +-- client/components/sidebar/sidebarArchives.jade | 54 ++--- client/components/sidebar/sidebarArchives.js | 9 - client/components/sidebar/sidebarFilters.jade | 15 +- client/components/swimlanes/swimlanes.jade | 33 ++- client/components/users/userAvatar.jade | 1 - client/components/users/userHeader.jade | 65 ++---- client/components/users/userHeader.js | 24 +- 25 files changed, 244 insertions(+), 574 deletions(-) (limited to 'client') diff --git a/client/components/cards/attachments.jade b/client/components/cards/attachments.jade index 10b767f4..2a96f4f4 100644 --- a/client/components/cards/attachments.jade +++ b/client/components/cards/attachments.jade @@ -38,20 +38,18 @@ template(name="attachmentsGalery") | {{_ 'download'}} if currentUser.isBoardMember unless currentUser.isCommentOnly - unless currentUser.isWorker - if isImage - a(class="{{#if $eq ../coverId _id}}js-remove-cover{{else}}js-add-cover{{/if}}") - i.fa.fa-thumb-tack - if($eq ../coverId _id) - | {{_ 'remove-cover'}} - else - | {{_ 'add-cover'}} - a.js-confirm-delete - i.fa.fa-close - | {{_ 'delete'}} + if isImage + a(class="{{#if $eq ../coverId _id}}js-remove-cover{{else}}js-add-cover{{/if}}") + i.fa.fa-thumb-tack + if($eq ../coverId _id) + | {{_ 'remove-cover'}} + else + | {{_ 'add-cover'}} + a.js-confirm-delete + i.fa.fa-close + | {{_ 'delete'}} if currentUser.isBoardMember unless currentUser.isCommentOnly - unless currentUser.isWorker - li.attachment-item.add-attachment - a.js-add-attachment {{_ 'add-attachment' }} + li.attachment-item.add-attachment + a.js-add-attachment {{_ 'add-attachment' }} diff --git a/client/components/cards/cardDate.js b/client/components/cards/cardDate.js index c4b5c6d8..cb54b033 100644 --- a/client/components/cards/cardDate.js +++ b/client/components/cards/cardDate.js @@ -97,8 +97,7 @@ Template.dateBadge.helpers({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() && - !Meteor.user().isWorker() + !Meteor.user().isCommentOnly() ); }, }); diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index a7aa64ce..2b4f44b9 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -1,7 +1,7 @@ template(name="cardDetails") section.card-details.js-card-details.js-perfect-scrollbar: .card-details-canvas .card-details-header(class='{{#if colorClass}}card-details-{{colorClass}}{{/if}}') - +inlinedForm(classNames="{{#if canModifyCardWorker}}js-card-details-title{{/if}}") + +inlinedForm(classNames="js-card-details-title") +editCardTitleForm else unless isMiniScreen @@ -13,11 +13,11 @@ template(name="cardDetails") if currentUser.isBoardMember a.fa.fa-navicon.card-details-menu-mobile-web.js-open-card-details-menu h2.card-details-title.js-card-title( - class="{{#if canModifyCardWorker}}js-open-inlined-form is-editable{{/if}}") + class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}") +viewer = getTitle - if isWatching - i.card-details-watch.fa.fa-eye + if isWatching + i.fa.fa-eye.card-details-watch .card-details-path each parentList |   >   @@ -37,66 +37,49 @@ template(name="cardDetails") .card-details-items .card-details-item.card-details-item-received - h3 - i.fa.fa-sign-out - card-details-item-title {{_ 'card-received'}} + h3.card-details-item-title {{_ 'card-received'}} if getReceived +cardReceivedDate else if canModifyCard - unless currentUser.isWorker - a.js-received-date {{_ 'add'}} + a.js-received-date {{_ 'add'}} .card-details-item.card-details-item-start - h3 - i.fa.fa-hourglass-start - card-details-item-title {{_ 'card-start'}} + h3.card-details-item-title {{_ 'card-start'}} if getStart +cardStartDate else if canModifyCard - unless currentUser.isWorker - a.js-start-date {{_ 'add'}} + a.js-start-date {{_ 'add'}} .card-details-item.card-details-item-due - h3 - i.fa.fa-sign-in - card-details-item-title {{_ 'card-due'}} + h3.card-details-item-title {{_ 'card-due'}} if getDue +cardDueDate else if canModifyCard - unless currentUser.isWorker - a.js-due-date {{_ 'add'}} + a.js-due-date {{_ 'add'}} .card-details-item.card-details-item-end - h3 - i.fa.fa-hourglass-end - card-details-item-title {{_ 'card-end'}} + h3.card-details-item-title {{_ 'card-end'}} if getEnd +cardEndDate else if canModifyCard - unless currentUser.isWorker - a.js-end-date {{_ 'add'}} + a.js-end-date {{_ 'add'}} .card-details-items .card-details-item.card-details-item-members - h3 - i.fa.fa-users - card-details-item-title {{_ 'members'}} + h3.card-details-item-title {{_ 'members'}} each getMembers +userAvatar(userId=this cardId=../_id) | {{! XXX Hack to hide syntaxic coloration /// }} if canModifyCard - unless currentUser.isWorker - a.member.add-member.card-details-item-add-button.js-add-members(title="{{_ 'card-members-title'}}") - i.fa.fa-plus + a.member.add-member.card-details-item-add-button.js-add-members(title="{{_ 'card-members-title'}}") + i.fa.fa-plus .card-details-item.card-details-item-assignees - h3 - i.fa.fa-user - card-details-item-title {{_ 'assignee'}} + h3.card-details-item-title {{_ 'assignee'}} each getAssignees +userAvatarAssignee(userId=this cardId=../_id) | {{! XXX Hack to hide syntaxic coloration /// }} @@ -106,18 +89,15 @@ template(name="cardDetails") i.fa.fa-plus .card-details-item.card-details-item-labels - h3 - i.fa.fa-tags - card-details-item-title {{_ 'labels'}} + h3.card-details-item-title {{_ 'labels'}} a(class="{{#if canModifyCard}}js-add-labels{{else}}is-disabled{{/if}}" title="{{_ 'card-labels-title'}}") each labels span.card-label(class="card-label-{{color}}" title=name) +viewer = name if canModifyCard - unless currentUser.isWorker - a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}") - i.fa.fa-plus + a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}") + i.fa.fa-plus .card-details-items each customFieldsWD @@ -138,29 +118,26 @@ template(name="cardDetails") //- XXX We should use "editable" to avoid repetiting ourselves if canModifyCard - unless currentUser.isWorker - h3 - i.fa.fa-align-left - card-details-item-title {{_ 'description'}} - +inlinedCardDescription(classNames="card-description js-card-description") - +editor(autofocus=true) - | {{getUnsavedValue 'cardDescription' _id getDescription}} - .edit-controls.clearfix - button.primary(type="submit") {{_ 'save'}} - a.fa.fa-times-thin.js-close-inlined-form - else - a.js-open-inlined-form - if getDescription - +viewer - = getDescription - else - | {{_ 'edit'}} - if (hasUnsavedValue 'cardDescription' _id) - p.quiet - | {{_ 'unsaved-description'}} - a.js-open-inlined-form {{_ 'view-it'}} - = ' - ' - a.js-close-inlined-form {{_ 'discard'}} + h3.card-details-item-title {{_ 'description'}} + +inlinedCardDescription(classNames="card-description js-card-description") + +editor(autofocus=true) + | {{getUnsavedValue 'cardDescription' _id getDescription}} + .edit-controls.clearfix + button.primary(type="submit") {{_ 'save'}} + a.fa.fa-times-thin.js-close-inlined-form + else + a.js-open-inlined-form + if getDescription + +viewer + = getDescription + else + | {{_ 'edit'}} + if (hasUnsavedValue 'cardDescription' _id) + p.quiet + | {{_ 'unsaved-description'}} + a.js-open-inlined-form {{_ 'view-it'}} + = ' - ' + a.js-close-inlined-form {{_ 'discard'}} else if getDescription h3.card-details-item-title {{_ 'description'}} +viewer @@ -168,39 +145,33 @@ template(name="cardDetails") .card-details-items .card-details-item.card-details-item-name - h3 - i.fa.fa-shopping-cart - card-details-item-title {{_ 'requested-by'}} + h3.card-details-item-title {{_ 'requested-by'}} if canModifyCard - unless currentUser.isWorker - +inlinedForm(classNames="js-card-details-requester") - +editCardRequesterForm - else - a.js-open-inlined-form - if getRequestedBy - +viewer - = getRequestedBy - else - | {{_ 'add'}} + +inlinedForm(classNames="js-card-details-requester") + +editCardRequesterForm + else + a.js-open-inlined-form + if getRequestedBy + +viewer + = getRequestedBy + else + | {{_ 'add'}} else if getRequestedBy +viewer = getRequestedBy .card-details-item.card-details-item-name - h3 - i.fa.fa-user-plus - card-details-item-title {{_ 'assigned-by'}} + h3.card-details-item-title {{_ 'assigned-by'}} if canModifyCard - unless currentUser.isWorker - +inlinedForm(classNames="js-card-details-assigner") - +editCardAssignerForm - else - a.js-open-inlined-form - if getAssignedBy - +viewer - = getAssignedBy - else - | {{_ 'add'}} + +inlinedForm(classNames="js-card-details-assigner") + +editCardAssignerForm + else + a.js-open-inlined-form + if getAssignedBy + +viewer + = getAssignedBy + else + | {{_ 'add'}} else if getRequestedBy +viewer = getAssignedBy @@ -222,9 +193,7 @@ template(name="cardDetails") hr unless currentUser.isNoComments .activity-title - h3 - i.fa.fa-history - | {{ _ 'activity'}} + h3 {{ _ 'activity'}} if currentUser.isBoardMember .material-toggle-switch span.toggle-switch-title {{_ 'hide-system-messages'}} @@ -266,79 +235,32 @@ template(name="editCardAssignerForm") template(name="cardDetailsActionsPopup") ul.pop-over-list - li - a.js-toggle-watch-card - if isWatching - i.fa.fa-eye - | {{_ 'unwatch'}} - else - i.fa.fa-eye-slash - | {{_ 'watch'}} + li: a.js-toggle-watch-card {{#if isWatching}}{{_ 'unwatch'}}{{else}}{{_ 'watch'}}{{/if}} if canModifyCard - unless currentUser.isWorker - hr - ul.pop-over-list - //li: a.js-members {{_ 'card-edit-members'}} - //li: a.js-labels {{_ 'card-edit-labels'}} - //li: a.js-attachments {{_ 'card-edit-attachments'}} - li - a.js-custom-fields - i.fa.fa-list-alt - | {{_ 'card-edit-custom-fields'}} - //li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}} - //li: a.js-start-date {{_ 'editCardStartDatePopup-title'}} - //li: a.js-due-date {{_ 'editCardDueDatePopup-title'}} - //li: a.js-end-date {{_ 'editCardEndDatePopup-title'}} - li - a.js-spent-time - i.fa.fa-clock-o - | {{_ 'editCardSpentTimePopup-title'}} - li - a.js-set-card-color - i.fa.fa-paint-brush - | {{_ 'setCardColorPopup-title'}} - hr + hr ul.pop-over-list - li - a.js-move-card-to-top - i.fa.fa-arrow-up - | {{_ 'moveCardToTop-title'}} - li - a.js-move-card-to-bottom - i.fa.fa-arrow-down - | {{_ 'moveCardToBottom-title'}} - unless currentUser.isWorker - hr - ul.pop-over-list - li - a.js-move-card - i.fa.fa-arrow-right - | {{_ 'moveCardPopup-title'}} - li - a.js-copy-card - i.fa.fa-copy - | {{_ 'copyCardPopup-title'}} - hr - ul.pop-over-list - li - a.js-copy-checklist-cards - i.fa.fa-list - i.fa.fa-copy - | {{_ 'copyChecklistToManyCardsPopup-title'}} + //li: a.js-members {{_ 'card-edit-members'}} + //li: a.js-labels {{_ 'card-edit-labels'}} + //li: a.js-attachments {{_ 'card-edit-attachments'}} + li: a.js-custom-fields {{_ 'card-edit-custom-fields'}} + //li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}} + //li: a.js-start-date {{_ 'editCardStartDatePopup-title'}} + //li: a.js-due-date {{_ 'editCardDueDatePopup-title'}} + //li: a.js-end-date {{_ 'editCardEndDatePopup-title'}} + li: a.js-spent-time {{_ 'editCardSpentTimePopup-title'}} + li: a.js-set-card-color {{_ 'setCardColorPopup-title'}} + hr + ul.pop-over-list + li: a.js-move-card-to-top {{_ 'moveCardToTop-title'}} + li: a.js-move-card-to-bottom {{_ 'moveCardToBottom-title'}} + hr + ul.pop-over-list + li: a.js-move-card {{_ 'moveCardPopup-title'}} + li: a.js-copy-card {{_ 'copyCardPopup-title'}} + li: a.js-copy-checklist-cards {{_ 'copyChecklistToManyCardsPopup-title'}} unless archived - hr - ul.pop-over-list - li - a.js-archive - i.fa.fa-arrow-right - i.fa.fa-archive - | {{_ 'archive-card'}} - hr - ul.pop-over-list - li - a.js-more - i.fa.fa-link - | {{_ 'cardMorePopup-title'}} + li: a.js-archive {{_ 'archive-card'}} + li: a.js-more {{_ 'cardMorePopup-title'}} template(name="moveCardPopup") +boardsAndLists @@ -390,27 +312,16 @@ template(name="cardMembersPopup") i.fa.fa-check template(name="cardAssigneesPopup") - unless currentUser.isWorker - ul.pop-over-list.js-card-assignee-list - each board.activeMembers - li.item(class="{{#if isCardAssignee}}active{{/if}}") - a.name.js-select-assignee(href="#") - +userAvatar(userId=user._id) - span.full-name - = user.profile.fullname - | ({{ user.username }}) - if isCardAssignee - i.fa.fa-check - if currentUser.isWorker - ul.pop-over-list.js-card-assignee-list - li.item(class="{{#if currentUser.isCardAssignee}}active{{/if}}") - a.name.js-select-assigneeWorker(href="#") - +userAvatar(userId=currentUser._id) - span.full-name - = currentUser.profile.fullname - | ({{ currentUser.username }}) - if currentUser.isCardAssignee - i.fa.fa-check + ul.pop-over-list.js-card-assignee-list + each board.activeMembers + li.item(class="{{#if isCardAssignee}}active{{/if}}") + a.name.js-select-assignee(href="#") + +userAvatar(userId=user._id) + span.full-name + = user.profile.fullname + | ({{ user.username }}) + if isCardAssignee + i.fa.fa-check template(name="userAvatarAssignee") a.assignee.js-assignee(title="{{userData.profile.fullname}} ({{userData.username}})") @@ -438,13 +349,11 @@ template(name="cardAssigneePopup") p.quiet @{{ user.username }} ul.pop-over-list if currentUser.isNotCommentOnly - unless currentUser.isWorker li: a.js-remove-assignee {{_ 'remove-member-from-card'}} - unless currentUser.isWorker - if $eq currentUser._id user._id - with currentUser - li: a.js-edit-profile {{_ 'edit-profile'}} + if $eq currentUser._id user._id + with currentUser + li: a.js-edit-profile {{_ 'edit-profile'}} template(name="userAvatarAssigneeInitials") svg.avatar.avatar-assignee-initials(viewBox="0 0 {{viewPortWidth}} 15") diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index f47b3824..67120043 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -26,7 +26,6 @@ BlazeComponent.extendComponent({ onCreated() { this.currentBoard = Boards.findOne(Session.get('currentBoard')); - this.currentUser = Meteor.user(); this.isLoaded = new ReactiveVar(false); const boardBody = this.parentComponent().parentComponent(); //in Miniview parent is Board, not BoardBody. @@ -56,15 +55,6 @@ BlazeComponent.extendComponent({ ); }, - canModifyCardWorker() { - return ( - Meteor.user() && - Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() && - !Meteor.user().isWorker() - ); - }, - scrollParentContainer() { const cardPanelWidth = 510; const bodyBoardComponent = this.parentComponent().parentComponent(); @@ -393,13 +383,6 @@ Template.cardDetails.helpers({ return user && user.isBoardAdmin() ? 'admin' : 'normal'; }, - isWorker() { - const currentBoard = Boards.findOne(Session.get('currentBoard')); - return ( - !currentBoard.hasAdmin(this.userId) && currentBoard.hasWorker(this.userId) - ); - }, - presenceStatusClassName() { const user = Users.findOne(this.userId); const userPresence = presences.findOne({ userId: this.userId }); @@ -476,15 +459,6 @@ Template.cardDetailsActionsPopup.helpers({ !Meteor.user().isCommentOnly() ); }, - - canModifyCardWorker() { - return ( - Meteor.user() && - Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() && - !Meteor.user().isWorker() - ); - }, }); Template.cardDetailsActionsPopup.events({ @@ -493,12 +467,7 @@ Template.cardDetailsActionsPopup.events({ 'click .js-labels': Popup.open('cardLabels'), 'click .js-attachments': Popup.open('cardAttachments'), 'click .js-custom-fields': Popup.open('cardCustomFields'), - 'click .js-received-date'(event) { - event.preventDefault(); - if (!Meteor.user().isWorker) { - Popup.open('editCardReceivedDate'); - } - }, + 'click .js-received-date': Popup.open('editCardReceivedDate'), 'click .js-start-date': Popup.open('editCardStartDate'), 'click .js-due-date': Popup.open('editCardDueDate'), 'click .js-end-date': Popup.open('editCardEndDate'), @@ -910,12 +879,6 @@ Template.cardAssigneesPopup.events({ card.toggleAssignee(assigneeId); event.preventDefault(); }, - 'click .js-select-assigneeWorker'(event) { - const card = Cards.findOne(Session.get('currentCard')); - const assigneeId = currentUser._id; - card.toggleAssignee(assigneeId); - event.preventDefault(); - }, }); Template.cardAssigneesPopup.helpers({ diff --git a/client/components/cards/checklists.jade b/client/components/cards/checklists.jade index 391769e9..279d3671 100644 --- a/client/components/cards/checklists.jade +++ b/client/components/cards/checklists.jade @@ -1,7 +1,5 @@ template(name="checklists") - h3 - i.fa.fa-check - | {{_ 'checklists'}} + h3 {{_ 'checklists'}} if toggleDeleteDialog.get .board-overlay#card-details-overlay +checklistDeleteDialog(checklist = checklistToDelete) diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index 27d1b1c9..57939eb8 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -67,8 +67,7 @@ BlazeComponent.extendComponent({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() && - !Meteor.user().isWorker() + !Meteor.user().isCommentOnly() ); }, }).register('checklistDetail'); @@ -121,8 +120,7 @@ BlazeComponent.extendComponent({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() && - !Meteor.user().isWorker() + !Meteor.user().isCommentOnly() ); }, @@ -230,8 +228,7 @@ Template.checklistItemDetail.helpers({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() && - !Meteor.user().isWorker() + !Meteor.user().isCommentOnly() ); }, }); diff --git a/client/components/cards/subtasks.jade b/client/components/cards/subtasks.jade index df35bed3..7e64e23f 100644 --- a/client/components/cards/subtasks.jade +++ b/client/components/cards/subtasks.jade @@ -1,7 +1,5 @@ template(name="subtasks") - h3 - i.fa.fa-sitemap - | {{_ 'subtasks'}} + h3 {{_ 'subtasks'}} if toggleDeleteDialog.get .board-overlay#card-details-overlay +subtaskDeleteDialog(subtask = subtaskToDelete) diff --git a/client/components/cards/subtasks.js b/client/components/cards/subtasks.js index 34348fe1..fab860bb 100644 --- a/client/components/cards/subtasks.js +++ b/client/components/cards/subtasks.js @@ -3,8 +3,7 @@ BlazeComponent.extendComponent({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() && - !Meteor.user().isWorker() + !Meteor.user().isCommentOnly() ); }, }).register('subtaskDetail'); @@ -56,8 +55,7 @@ BlazeComponent.extendComponent({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() && - !Meteor.user().isWorker() + !Meteor.user().isCommentOnly() ); }, @@ -156,8 +154,7 @@ Template.subtaskItemDetail.helpers({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() && - !Meteor.user().isWorker() + !Meteor.user().isCommentOnly() ); }, }); diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index 89c27ec7..b0974705 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -189,8 +189,7 @@ BlazeComponent.extendComponent({ !this.reachedWipLimit() && Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() && - !Meteor.user().isWorker() + !Meteor.user().isCommentOnly() ); }, diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index 686de845..631f68a0 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -56,47 +56,25 @@ template(name="editListTitleForm") template(name="listActionPopup") ul.pop-over-list - li - a.js-toggle-watch-list - if isWatching - i.fa.fa-eye - | {{_ 'unwatch'}} - else - i.fa.fa-eye-slash - | {{_ 'watch'}} + li: a.js-toggle-watch-list {{#if isWatching}}{{_ 'unwatch'}}{{else}}{{_ 'watch'}}{{/if}} unless currentUser.isCommentOnly - unless currentUser.isWorker - ul.pop-over-list - li - a.js-set-color-list - i.fa.fa-paint-brush - | {{_ 'set-color-list'}} + hr + ul.pop-over-list + li: a.js-set-color-list {{_ 'set-color-list'}} + hr ul.pop-over-list if cards.count - li - a.js-select-cards - i.fa.fa-check-square - | {{_ 'list-select-cards'}} + li: a.js-select-cards {{_ 'list-select-cards'}} + hr if currentUser.isBoardAdmin ul.pop-over-list - li - a.js-set-wip-limit - i.fa.fa-ban - | {{#if isWipLimitEnabled }}{{_ 'edit-wip-limit'}}{{else}}{{_ 'setWipLimitPopup-title'}}{{/if}} - unless currentUser.isWorker + li: a.js-set-wip-limit {{#if isWipLimitEnabled }}{{_ 'edit-wip-limit'}}{{else}}{{_ 'setWipLimitPopup-title'}}{{/if}} hr - ul.pop-over-list - li - a.js-close-list - i.fa.fa-arrow-right - i.fa.fa-archive - | {{_ 'archive-list'}} + ul.pop-over-list + li: a.js-close-list {{_ 'archive-list'}} hr ul.pop-over-list - li - a.js-more - i.fa.fa-link - | {{_ 'listMorePopup-title'}} + li: a.js-more {{_ 'listMorePopup-title'}} template(name="boardLists") ul.pop-over-list @@ -116,8 +94,7 @@ template(name="listMorePopup") input.inline-input(type="text" readonly value="{{ rootUrl }}") | {{_ 'added'}} span.date(title=list.createdAt) {{ moment createdAt 'LLL' }} - unless currentUser.isWorker - a.js-delete {{_ 'delete'}} + a.js-delete {{_ 'delete'}} template(name="listDeletePopup") p {{_ "list-delete-pop"}} diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index 46dbd748..07edade0 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -9,10 +9,9 @@ BlazeComponent.extendComponent({ canSeeAddCard() { const list = Template.currentData(); return ( - (!list.getWipLimit('enabled') || - list.getWipLimit('soft') || - !this.reachedWipLimit()) && - !Meteor.user().isWorker() + !list.getWipLimit('enabled') || + list.getWipLimit('soft') || + !this.reachedWipLimit() ); }, diff --git a/client/components/settings/informationBody.jade b/client/components/settings/informationBody.jade index 0f85dd9c..2c615ffd 100644 --- a/client/components/settings/informationBody.jade +++ b/client/components/settings/informationBody.jade @@ -4,16 +4,12 @@ template(name='information') | {{_ 'error-notAuthorized'}} else .content-title - span - i.fa.fa-info-circle - | {{_ 'info'}} + span {{_ 'info'}} .content-body .side-menu ul li.active - a.js-setting-menu(data-id="information-display") - i.fa.fa-info-circle - | {{_ 'info'}} + a.js-setting-menu(data-id="information-display") {{_ 'info'}} .main-body +statistics diff --git a/client/components/settings/peopleBody.jade b/client/components/settings/peopleBody.jade index b8a94337..d8f672b0 100644 --- a/client/components/settings/peopleBody.jade +++ b/client/components/settings/peopleBody.jade @@ -5,22 +5,16 @@ template(name="people") else .content-title.ext-box .ext-box-left - span - i.fa.fa-users - | {{_ 'people'}} + span {{_ 'people'}} input#searchInput(placeholder="{{_ 'search'}}") - button#searchButton - i.fa.fa-search - | {{_ 'search'}} + button#searchButton {{_ 'search'}} .ext-box-right span {{_ 'people-number'}} #{peopleNumber} .content-body .side-menu ul li.active - a.js-setting-menu(data-id="people-setting") - i.fa.fa-users - | {{_ 'people'}} + a.js-setting-menu(data-id="people-setting") {{_ 'people'}} .main-body if loading.get +spinner @@ -96,7 +90,6 @@ template(name="peopleRow") td {{_ userData.authenticationMethod }} td a.edit-user - i.fa.fa-edit | {{_ 'edit'}} template(name="editUserPopup") diff --git a/client/components/settings/peopleBody.styl b/client/components/settings/peopleBody.styl index c223e181..80387611 100644 --- a/client/components/settings/peopleBody.styl +++ b/client/components/settings/peopleBody.styl @@ -33,7 +33,7 @@ table padding: 0; button - min-width: 90px; + min-width: 60px; .content-wrapper margin-top: 10px diff --git a/client/components/settings/settingBody.jade b/client/components/settings/settingBody.jade index 877fe6e2..04b635e8 100644 --- a/client/components/settings/settingBody.jade +++ b/client/components/settings/settingBody.jade @@ -4,35 +4,22 @@ template(name="setting") | {{_ 'error-notAuthorized'}} else .content-title - i.fa.fa-cog span {{_ 'settings'}} .content-body .side-menu ul li.active - a.js-setting-menu(data-id="registration-setting") - i.fa.fa-sign-in - | {{_ 'registration'}} + a.js-setting-menu(data-id="registration-setting") {{_ 'registration'}} li - a.js-setting-menu(data-id="email-setting") - i.fa.fa-envelope - | {{_ 'email'}} + a.js-setting-menu(data-id="email-setting") {{_ 'email'}} li - a.js-setting-menu(data-id="account-setting") - i.fa.fa-users - | {{_ 'accounts'}} + a.js-setting-menu(data-id="account-setting") {{_ 'accounts'}} li - a.js-setting-menu(data-id="announcement-setting") - i.fa.fa-bullhorn - | {{_ 'admin-announcement'}} + a.js-setting-menu(data-id="announcement-setting") {{_ 'admin-announcement'}} li - a.js-setting-menu(data-id="layout-setting") - i.fa.fa-object-group - | {{_ 'layout'}} + a.js-setting-menu(data-id="layout-setting") {{_ 'layout'}} li - a.js-setting-menu(data-id="webhook-setting") - i.fa.fa-globe - | {{_ 'global-webhook'}} + a.js-setting-menu(data-id="webhook-setting") {{_ 'global-webhook'}} .main-body if loading.get +spinner diff --git a/client/components/settings/settingBody.styl b/client/components/settings/settingBody.styl index d6ac32b2..bcbd2ea1 100644 --- a/client/components/settings/settingBody.styl +++ b/client/components/settings/settingBody.styl @@ -41,18 +41,15 @@ &:hover background #fff box-shadow 0 1px 2px rgba(0,0,0,0.15); - a @extends .flex padding: 1rem 0 1rem 1rem width: 100% - 5rem + span font-size: 13px - i - margin-right: 20px - .main-body padding: 0.1em 1em -webkit-user-select: text // Safari 3.1+ diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index 19e32970..ccfadc0c 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -37,12 +37,11 @@ template(name='homeSidebar') template(name="membersWidget") .board-widget.board-widget-members h3 - i.fa.fa-users + i.fa.fa-user | {{_ 'members'}} unless currentUser.isCommentOnly - unless currentUser.isWorker - a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}").right - i.board-header-btn-icon.fa.fa-cog + a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}").right + i.board-header-btn-icon.fa.fa-cog .board-widget-content each currentBoard.activeMembers @@ -131,9 +130,7 @@ template(name="chooseBoardSource") template(name="archiveBoardPopup") p {{_ 'close-board-pop'}} - button.js-confirm.negate.full(type="submit") - i.fa.fa-archive - | {{_ 'archive'}} + button.js-confirm.negate.full(type="submit") {{_ 'archive'}} template(name="outgoingWebhooksPopup") each integrations @@ -165,80 +162,38 @@ template(name="outgoingWebhooksPopup") template(name="boardMenuPopup") ul.pop-over-list - if isNotWorker - li: a.js-custom-fields {{_ 'custom-fields'}} - li - a.js-open-archives - i.fa.fa-archive - | {{_ 'archived-items'}} + li: a.js-custom-fields {{_ 'custom-fields'}} + li: a.js-open-archives {{_ 'archived-items'}} if currentUser.isBoardAdmin - li - a.js-change-board-color - i.fa.fa-paint-brush - | {{_ 'board-change-color'}} - + li: a.js-change-board-color {{_ 'board-change-color'}} //- XXX Language should be handled by sandstorm, but for now display a language selection link in the board menu. This link is normally present in the header bar that is not displayed on sandstorm. if isSandstorm - li - a.js-change-language - i.fa.fa-flag - | {{_ 'language'}} + li: a.js-change-language {{_ 'language'}} unless isSandstorm if currentUser.isBoardAdmin hr ul.pop-over-list - li - a(href="{{exportUrl}}", download="{{exportFilename}}") - i.fa.fa-share-alt - | {{_ 'export-board'}} - li - a.js-outgoing-webhooks - i.fa.fa-globe - | {{_ 'outgoing-webhooks'}} - li - a.js-subtask-settings - i.fa.fa-sitemap - | {{_ 'subtask-settings'}} - unless currentBoard.isTemplatesBoard - hr - ul.pop-over-list - li - a.js-archive-board - i.fa.fa-arrow-right - i.fa.fa-archive - | {{_ 'archive-board'}} + li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}} + unless currentBoard.isTemplatesBoard + li: a.js-archive-board {{_ 'archive-board'}} + li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}} + hr + ul.pop-over-list + li: a.js-subtask-settings {{_ 'subtask-settings'}} if isSandstorm hr ul.pop-over-list - li - a(href="{{exportUrl}}", download="{{exportFilename}}") - i.fa.fa-share-alt - i.fa.fa-sign-out - | {{_ 'export-board'}} - li - a.js-import-board - i.fa.fa-share-alt - i.fa.fa-sign-in - | {{_ 'import-board-c'}} - li - a.js-archive-board - i.fa.fa-arrow-right - i.fa.fa-archive - | {{_ 'archive-board'}} - li - a.js-outgoing-webhooks - i.fa.fa-globe - | {{_ 'outgoing-webhooks'}} + li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}} + li: a.js-import-board {{_ 'import-board-c'}} + li: a.js-archive-board {{_ 'archive-board'}} + li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}} hr ul.pop-over-list - li - a.js-subtask-settings - i.fa.fa-sitemap - | {{_ 'subtask-settings'}} + li: a.js-subtask-settings {{_ 'subtask-settings'}} template(name="labelsWidget") .board-widget.board-widget-labels @@ -248,7 +203,7 @@ template(name="labelsWidget") .board-widget-content each currentBoard.labels a.card-label(class="card-label-{{color}}" - class="{{#if currentUser.isNotCommentOnly}}{{#if currentUser.isNotWorker}}js-label{{/if}}{{/if}}") + class="{{#if currentUser.isNotCommentOnly}}js-label{{/if}}") span.card-label-name +viewer = name @@ -277,12 +232,12 @@ template(name="memberPopup") a.js-change-role | {{_ 'change-permissions'}} span.quiet (#{memberType}) - unless currentUser.isWorker - li - if $eq currentUser._id userId - a.js-leave-member {{_ 'leave-board'}} - else if currentUser.isBoardAdmin - a.js-remove-member {{_ 'remove-from-board'}} + li + if $eq currentUser._id userId + a.js-leave-member {{_ 'leave-board'}} + else if currentUser.isBoardAdmin + a.js-remove-member {{_ 'remove-from-board'}} + template(name="removeMemberPopup") p {{_ 'remove-member-pop' name=user.profile.fullname username=user.username boardTitle=board.title}} @@ -346,12 +301,6 @@ template(name="changePermissionsPopup") if isCommentOnly i.fa.fa-check span.sub-name {{_ 'comment-only-desc'}} - li - a(class="{{#if isLastAdmin}}disabled{{else}}js-set-worker{{/if}}") - | {{_ 'worker'}} - if isWorker - i.fa.fa-check - span.sub-name {{_ 'worker-desc'}} if isLastAdmin hr p.quiet.bottom {{_ 'last-admin-desc'}} diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index e8f38b8c..9d9c597a 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -161,13 +161,10 @@ Template.memberPopup.helpers({ const currentBoard = Boards.findOne(Session.get('currentBoard')); const commentOnly = currentBoard.hasCommentOnly(this.userId); const noComments = currentBoard.hasNoComments(this.userId); - const worker = currentBoard.hasWorker(this.userId); if (commentOnly) { return TAPi18n.__('comment-only').toLowerCase(); } else if (noComments) { return TAPi18n.__('no-comments').toLowerCase(); - } else if (worker) { - return TAPi18n.__('worker').toLowerCase(); } else { return TAPi18n.__(type).toLowerCase(); } @@ -270,14 +267,6 @@ Template.membersWidget.helpers({ const user = Meteor.user(); return user && user.isInvitedTo(Session.get('currentBoard')); }, - isWorker() { - const user = Meteor.user(); - if (user) { - return Meteor.call(Boards.hasWorker(user.memberId)); - } else { - return false; - } - }, }); Template.membersWidget.events({ @@ -655,7 +644,7 @@ BlazeComponent.extendComponent({ }).register('addMemberPopup'); Template.changePermissionsPopup.events({ - 'click .js-set-admin, click .js-set-normal, click .js-set-no-comments, click .js-set-comment-only, click .js-set-worker'( + 'click .js-set-admin, click .js-set-normal, click .js-set-no-comments, click .js-set-comment-only'( event, ) { const currentBoard = Boards.findOne(Session.get('currentBoard')); @@ -665,13 +654,11 @@ Template.changePermissionsPopup.events({ 'js-set-comment-only', ); const isNoComments = $(event.currentTarget).hasClass('js-set-no-comments'); - const isWorker = $(event.currentTarget).hasClass('js-set-worker'); currentBoard.setMemberPermission( memberId, isAdmin, isNoComments, isCommentOnly, - isWorker, ); Popup.back(1); }, @@ -688,8 +675,7 @@ Template.changePermissionsPopup.helpers({ return ( !currentBoard.hasAdmin(this.userId) && !currentBoard.hasNoComments(this.userId) && - !currentBoard.hasCommentOnly(this.userId) && - !currentBoard.hasWorker(this.userId) + !currentBoard.hasCommentOnly(this.userId) ); }, @@ -709,13 +695,6 @@ Template.changePermissionsPopup.helpers({ ); }, - isWorker() { - const currentBoard = Boards.findOne(Session.get('currentBoard')); - return ( - !currentBoard.hasAdmin(this.userId) && currentBoard.hasWorker(this.userId) - ); - }, - isLastAdmin() { const currentBoard = Boards.findOne(Session.get('currentBoard')); return ( diff --git a/client/components/sidebar/sidebarArchives.jade b/client/components/sidebar/sidebarArchives.jade index 56423ad7..466d2cb0 100644 --- a/client/components/sidebar/sidebarArchives.jade +++ b/client/components/sidebar/sidebarArchives.jade @@ -2,60 +2,54 @@ template(name="archivesSidebar") if isArchiveReady.get +basicTabs(tabs=tabs) +tabContent(slug="cards") - unless isWorker - p.quiet - a.js-restore-all-cards {{_ 'restore-all'}} - | - - a.js-delete-all-cards {{_ 'delete-all'}} + p.quiet + a.js-restore-all-cards {{_ 'restore-all'}} + | - + a.js-delete-all-cards {{_ 'delete-all'}} each archivedCards .minicard-wrapper.js-minicard +minicard(this) if currentUser.isBoardMember - unless isWorker - p.quiet - a.js-restore-card {{_ 'restore'}} - | - - a.js-delete-card {{_ 'delete'}} + p.quiet + a.js-restore-card {{_ 'restore'}} + | - + a.js-delete-card {{_ 'delete'}} if cardIsInArchivedList p.quiet.small ({{_ 'warn-list-archived'}}) else p.no-items-message {{_ 'no-archived-cards'}} +tabContent(slug="lists") - unless isWorker - p.quiet - a.js-restore-all-lists {{_ 'restore-all'}} - | - - a.js-delete-all-lists {{_ 'delete-all'}} + p.quiet + a.js-restore-all-lists {{_ 'restore-all'}} + | - + a.js-delete-all-lists {{_ 'delete-all'}} ul.archived-lists each archivedLists li.archived-lists-item = title if currentUser.isBoardMember - unless isWorker - p.quiet - a.js-restore-list {{_ 'restore'}} - | - - a.js-delete-list {{_ 'delete'}} + p.quiet + a.js-restore-list {{_ 'restore'}} + | - + a.js-delete-list {{_ 'delete'}} else li.no-items-message {{_ 'no-archived-lists'}} +tabContent(slug="swimlanes") - unless isWorker - p.quiet - a.js-restore-all-swimlanes {{_ 'restore-all'}} - | - - a.js-delete-all-swimlanes {{_ 'delete-all'}} + p.quiet + a.js-restore-all-swimlanes {{_ 'restore-all'}} + | - + a.js-delete-all-swimlanes {{_ 'delete-all'}} ul.archived-lists each archivedSwimlanes li.archived-lists-item = title if currentUser.isBoardMember - unless isWorker - p.quiet - a.js-restore-swimlane {{_ 'restore'}} - | - - a.js-delete-swimlane {{_ 'delete'}} + p.quiet + a.js-restore-swimlane {{_ 'restore'}} + | - + a.js-delete-swimlane {{_ 'delete'}} else li.no-items-message {{_ 'no-archived-swimlanes'}} else diff --git a/client/components/sidebar/sidebarArchives.js b/client/components/sidebar/sidebarArchives.js index 75b694e9..a4846561 100644 --- a/client/components/sidebar/sidebarArchives.js +++ b/client/components/sidebar/sidebarArchives.js @@ -139,12 +139,3 @@ BlazeComponent.extendComponent({ ]; }, }).register('archivesSidebar'); - -Template.archivesSidebar.helpers({ - isWorker() { - const currentBoard = Boards.findOne(Session.get('currentBoard')); - return ( - !currentBoard.hasAdmin(this.userId) && currentBoard.hasWorker(this.userId) - ); - }, -}); diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade index 7f31dada..5f929cb9 100644 --- a/client/components/sidebar/sidebarFilters.jade +++ b/client/components/sidebar/sidebarFilters.jade @@ -117,14 +117,13 @@ template(name="multiselectionSidebar") i.fa.fa-check else if someSelectedElementHave 'member' _id i.fa.fa-ellipsis-h - unless currentUser.isWorker - hr - a.sidebar-btn.js-move-selection - i.fa.fa-share - span {{_ 'move-selection'}} - a.sidebar-btn.js-archive-selection - i.fa.fa-archive - span {{_ 'archive-selection'}} + hr + a.sidebar-btn.js-move-selection + i.fa.fa-share + span {{_ 'move-selection'}} + a.sidebar-btn.js-archive-selection + i.fa.fa-archive + span {{_ 'archive-selection'}} template(name="disambiguateMultiLabelPopup") p {{_ 'what-to-do'}} diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index 9b00d9e8..1dc23c59 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -43,20 +43,19 @@ template(name="listsGroup") +addListForm template(name="addListForm") - unless currentUser.isWorker - .list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}") - .list-header-add - +inlinedForm(autoclose=false) - input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}" - autocomplete="off" autofocus) - .edit-controls.clearfix - button.primary.confirm(type="submit") {{_ 'save'}} - unless currentBoard.isTemplatesBoard - unless currentBoard.isTemplateBoard - span.quiet - | {{_ 'or'}} - a.js-list-template {{_ 'template'}} - else - a.open-list-composer.js-open-inlined-form - i.fa.fa-plus - | {{_ 'add-list'}} + .list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}") + .list-header-add + +inlinedForm(autoclose=false) + input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}" + autocomplete="off" autofocus) + .edit-controls.clearfix + button.primary.confirm(type="submit") {{_ 'save'}} + unless currentBoard.isTemplatesBoard + unless currentBoard.isTemplateBoard + span.quiet + | {{_ 'or'}} + a.js-list-template {{_ 'template'}} + else + a.open-list-composer.js-open-inlined-form + i.fa.fa-plus + | {{_ 'add-list'}} diff --git a/client/components/users/userAvatar.jade b/client/components/users/userAvatar.jade index 7f2067ce..ebfa48ba 100644 --- a/client/components/users/userAvatar.jade +++ b/client/components/users/userAvatar.jade @@ -73,7 +73,6 @@ template(name="cardMemberPopup") p.quiet @{{ user.username }} ul.pop-over-list if currentUser.isNotCommentOnly - if currentUser.isNotWorker li: a.js-remove-member {{_ 'remove-member-from-card'}} if $eq currentUser._id user._id diff --git a/client/components/users/userHeader.jade b/client/components/users/userHeader.jade index 9306d21d..50a80396 100644 --- a/client/components/users/userHeader.jade +++ b/client/components/users/userHeader.jade @@ -13,46 +13,21 @@ template(name="headerUserBar") template(name="memberMenuPopup") ul.pop-over-list with currentUser - li - a.js-edit-profile - i.fa.fa-user - | {{_ 'edit-profile'}} - li - a.js-change-settings - i.fa.fa-cog - | {{_ 'change-settings'}} - li - a.js-change-avatar - i.fa.fa-picture-o - | {{_ 'edit-avatar'}} + li: a.js-edit-profile {{_ 'edit-profile'}} + li: a.js-change-settings {{_ 'change-settings'}} + li: a.js-change-avatar {{_ 'edit-avatar'}} unless isSandstorm - li - a.js-change-password - i.fa.fa-key - | {{_ 'changePasswordPopup-title'}} - li - a.js-change-language - i.fa.fa-flag - | {{_ 'changeLanguagePopup-title'}} + li: a.js-change-password {{_ 'changePasswordPopup-title'}} + li: a.js-change-language {{_ 'changeLanguagePopup-title'}} if currentUser.isAdmin - li - a.js-go-setting(href="{{pathFor 'setting'}}") - i.fa.fa-lock - | {{_ 'admin-panel'}} - unless currentUser.isWorker - hr - ul.pop-over-list - li - a(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}") - i.fa.fa-clone - | {{_ 'templates'}} + li: a.js-go-setting(href="{{pathFor 'setting'}}") {{_ 'admin-panel'}} + hr + ul.pop-over-list + li: a(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}") {{_ 'templates'}} unless isSandstorm hr ul.pop-over-list - li - a.js-logout - i.fa.fa-sign-out - | {{_ 'log-out'}} + li: a.js-logout {{_ 'log-out'}} template(name="editProfilePopup") form @@ -100,25 +75,21 @@ template(name="changeSettingsPopup") ul.pop-over-list li a.js-toggle-system-messages - i.fa.fa-comments-o | {{_ 'hide-system-messages'}} if hiddenSystemMessages i.fa.fa-check li a.js-toggle-desktop-drag-handles - i.fa.fa-arrows | {{_ 'show-desktop-drag-handles'}} if showDesktopDragHandles i.fa.fa-check - unless currentUser.isWorker - li - label.bold - i.fa.fa-sort-numeric-asc - | {{_ 'show-cards-minimum-count'}} - input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="0" max="99" onkeydown="return false") - input.js-apply-show-cards-at.left(type="submit" value="{{_ 'apply'}}") + li + label.bold + | {{_ 'show-cards-minimum-count'}} + input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="0" max="99" onkeydown="return false") + input.js-apply-show-cards-at.left(type="submit" value="{{_ 'apply'}}") + template(name="userDeletePopup") - unless currentUser.isWorker - p {{_ 'delete-user-confirm-popup'}} - button.js-confirm.negate.full(type="submit") {{_ 'delete'}} + p {{_ 'delete-user-confirm-popup'}} + button.js-confirm.negate.full(type="submit") {{_ 'delete'}} diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js index 847d30fb..5f36ef54 100644 --- a/client/components/users/userHeader.js +++ b/client/components/users/userHeader.js @@ -45,31 +45,13 @@ Template.memberMenuPopup.events({ Template.editProfilePopup.helpers({ allowEmailChange() { - Meteor.call('AccountSettings.allowEmailChange', (_, result) => { - if (result) { - return true; - } else { - return false; - } - }); + return AccountSettings.findOne('accounts-allowEmailChange').booleanValue; }, allowUserNameChange() { - Meteor.call('AccountSettings.allowUserNameChange', (_, result) => { - if (result) { - return true; - } else { - return false; - } - }); + return AccountSettings.findOne('accounts-allowUserNameChange').booleanValue; }, allowUserDelete() { - Meteor.call('AccountSettings.allowUserDelete', (_, result) => { - if (result) { - return true; - } else { - return false; - } - }); + return AccountSettings.findOne('accounts-allowUserDelete').booleanValue; }, }); -- cgit v1.2.3-1-g7c22 From cd253522a305523e3e36bb73313e8c4db500a717 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 3 Jan 2020 17:02:27 +0200 Subject: Add more Font Awesome icons. This was originally added at Wekan v3.58, removed at Wekan v3.60, and now added back at Wekan v3.61. Thanks to xet7 ! --- client/components/cards/cardDetails.jade | 117 +++++++++++++++++++----- client/components/cards/checklists.jade | 4 +- client/components/cards/subtasks.jade | 4 +- client/components/lists/listHeader.jade | 40 ++++++-- client/components/settings/informationBody.jade | 8 +- client/components/settings/peopleBody.jade | 13 ++- client/components/settings/peopleBody.styl | 2 +- client/components/settings/settingBody.jade | 25 +++-- client/components/settings/settingBody.styl | 5 +- client/components/sidebar/sidebar.jade | 78 ++++++++++++---- client/components/sidebar/sidebarFilters.jade | 15 +-- client/components/users/userAvatar.jade | 2 +- client/components/users/userHeader.jade | 44 +++++++-- client/components/users/userHeader.js | 24 ++++- 14 files changed, 293 insertions(+), 88 deletions(-) (limited to 'client') diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 2b4f44b9..d7c7ca59 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -16,8 +16,8 @@ template(name="cardDetails") class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}") +viewer = getTitle - if isWatching - i.fa.fa-eye.card-details-watch + if isWatching + i.card-details-watch.fa.fa-eye .card-details-path each parentList |   >   @@ -37,7 +37,9 @@ template(name="cardDetails") .card-details-items .card-details-item.card-details-item-received - h3.card-details-item-title {{_ 'card-received'}} + h3 + i.fa.fa-sign-out + card-details-item-title {{_ 'card-received'}} if getReceived +cardReceivedDate else @@ -45,7 +47,9 @@ template(name="cardDetails") a.js-received-date {{_ 'add'}} .card-details-item.card-details-item-start - h3.card-details-item-title {{_ 'card-start'}} + h3 + i.fa.fa-hourglass-start + card-details-item-title {{_ 'card-start'}} if getStart +cardStartDate else @@ -53,7 +57,9 @@ template(name="cardDetails") a.js-start-date {{_ 'add'}} .card-details-item.card-details-item-due - h3.card-details-item-title {{_ 'card-due'}} + h3 + i.fa.fa-sign-in + card-details-item-title {{_ 'card-due'}} if getDue +cardDueDate else @@ -61,7 +67,9 @@ template(name="cardDetails") a.js-due-date {{_ 'add'}} .card-details-item.card-details-item-end - h3.card-details-item-title {{_ 'card-end'}} + h3 + i.fa.fa-hourglass-end + card-details-item-title {{_ 'card-end'}} if getEnd +cardEndDate else @@ -70,7 +78,9 @@ template(name="cardDetails") .card-details-items .card-details-item.card-details-item-members - h3.card-details-item-title {{_ 'members'}} + h3 + i.fa.fa-users + card-details-item-title {{_ 'members'}} each getMembers +userAvatar(userId=this cardId=../_id) | {{! XXX Hack to hide syntaxic coloration /// }} @@ -79,7 +89,9 @@ template(name="cardDetails") i.fa.fa-plus .card-details-item.card-details-item-assignees - h3.card-details-item-title {{_ 'assignee'}} + h3 + i.fa.fa-user + card-details-item-title {{_ 'assignee'}} each getAssignees +userAvatarAssignee(userId=this cardId=../_id) | {{! XXX Hack to hide syntaxic coloration /// }} @@ -89,7 +101,9 @@ template(name="cardDetails") i.fa.fa-plus .card-details-item.card-details-item-labels - h3.card-details-item-title {{_ 'labels'}} + h3 + i.fa.fa-tags + card-details-item-title {{_ 'labels'}} a(class="{{#if canModifyCard}}js-add-labels{{else}}is-disabled{{/if}}" title="{{_ 'card-labels-title'}}") each labels span.card-label(class="card-label-{{color}}" title=name) @@ -118,7 +132,9 @@ template(name="cardDetails") //- XXX We should use "editable" to avoid repetiting ourselves if canModifyCard - h3.card-details-item-title {{_ 'description'}} + h3 + i.fa.fa-align-left + card-details-item-title {{_ 'description'}} +inlinedCardDescription(classNames="card-description js-card-description") +editor(autofocus=true) | {{getUnsavedValue 'cardDescription' _id getDescription}} @@ -145,7 +161,9 @@ template(name="cardDetails") .card-details-items .card-details-item.card-details-item-name - h3.card-details-item-title {{_ 'requested-by'}} + h3 + i.fa.fa-shopping-cart + card-details-item-title {{_ 'requested-by'}} if canModifyCard +inlinedForm(classNames="js-card-details-requester") +editCardRequesterForm @@ -161,7 +179,9 @@ template(name="cardDetails") = getRequestedBy .card-details-item.card-details-item-name - h3.card-details-item-title {{_ 'assigned-by'}} + h3 + i.fa.fa-user-plus + card-details-item-title {{_ 'assigned-by'}} if canModifyCard +inlinedForm(classNames="js-card-details-assigner") +editCardAssignerForm @@ -193,7 +213,9 @@ template(name="cardDetails") hr unless currentUser.isNoComments .activity-title - h3 {{ _ 'activity'}} + h3 + i.fa.fa-history + | {{ _ 'activity'}} if currentUser.isBoardMember .material-toggle-switch span.toggle-switch-title {{_ 'hide-system-messages'}} @@ -235,32 +257,77 @@ template(name="editCardAssignerForm") template(name="cardDetailsActionsPopup") ul.pop-over-list - li: a.js-toggle-watch-card {{#if isWatching}}{{_ 'unwatch'}}{{else}}{{_ 'watch'}}{{/if}} + li + a.js-toggle-watch-card + if isWatching + i.fa.fa-eye + | {{_ 'unwatch'}} + else + i.fa.fa-eye-slash + | {{_ 'watch'}} if canModifyCard hr ul.pop-over-list //li: a.js-members {{_ 'card-edit-members'}} //li: a.js-labels {{_ 'card-edit-labels'}} //li: a.js-attachments {{_ 'card-edit-attachments'}} - li: a.js-custom-fields {{_ 'card-edit-custom-fields'}} + li + a.js-custom-fields + i.fa.fa-list-alt + | {{_ 'card-edit-custom-fields'}} //li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}} //li: a.js-start-date {{_ 'editCardStartDatePopup-title'}} //li: a.js-due-date {{_ 'editCardDueDatePopup-title'}} //li: a.js-end-date {{_ 'editCardEndDatePopup-title'}} - li: a.js-spent-time {{_ 'editCardSpentTimePopup-title'}} - li: a.js-set-card-color {{_ 'setCardColorPopup-title'}} + li + a.js-spent-time + i.fa.fa-clock-o + | {{_ 'editCardSpentTimePopup-title'}} + li + a.js-set-card-color + i.fa.fa-paint-brush + | {{_ 'setCardColorPopup-title'}} hr ul.pop-over-list - li: a.js-move-card-to-top {{_ 'moveCardToTop-title'}} - li: a.js-move-card-to-bottom {{_ 'moveCardToBottom-title'}} + li + a.js-move-card-to-top + i.fa.fa-arrow-up + | {{_ 'moveCardToTop-title'}} + li + a.js-move-card-to-bottom + i.fa.fa-arrow-down + | {{_ 'moveCardToBottom-title'}} hr ul.pop-over-list - li: a.js-move-card {{_ 'moveCardPopup-title'}} - li: a.js-copy-card {{_ 'copyCardPopup-title'}} - li: a.js-copy-checklist-cards {{_ 'copyChecklistToManyCardsPopup-title'}} + li + a.js-move-card + i.fa.fa-arrow-right + | {{_ 'moveCardPopup-title'}} + li + a.js-copy-card + i.fa.fa-copy + | {{_ 'copyCardPopup-title'}} + hr + ul.pop-over-list + li + a.js-copy-checklist-cards + i.fa.fa-list + i.fa.fa-copy + | {{_ 'copyChecklistToManyCardsPopup-title'}} unless archived - li: a.js-archive {{_ 'archive-card'}} - li: a.js-more {{_ 'cardMorePopup-title'}} + hr + ul.pop-over-list + li + a.js-archive + i.fa.fa-arrow-right + i.fa.fa-archive + | {{_ 'archive-card'}} + hr + ul.pop-over-list + li + a.js-more + i.fa.fa-link + | {{_ 'cardMorePopup-title'}} template(name="moveCardPopup") +boardsAndLists @@ -349,7 +416,7 @@ template(name="cardAssigneePopup") p.quiet @{{ user.username }} ul.pop-over-list if currentUser.isNotCommentOnly - li: a.js-remove-assignee {{_ 'remove-member-from-card'}} + li: a.js-remove-assignee {{_ 'remove-member-from-card'}} if $eq currentUser._id user._id with currentUser diff --git a/client/components/cards/checklists.jade b/client/components/cards/checklists.jade index 279d3671..391769e9 100644 --- a/client/components/cards/checklists.jade +++ b/client/components/cards/checklists.jade @@ -1,5 +1,7 @@ template(name="checklists") - h3 {{_ 'checklists'}} + h3 + i.fa.fa-check + | {{_ 'checklists'}} if toggleDeleteDialog.get .board-overlay#card-details-overlay +checklistDeleteDialog(checklist = checklistToDelete) diff --git a/client/components/cards/subtasks.jade b/client/components/cards/subtasks.jade index 7e64e23f..df35bed3 100644 --- a/client/components/cards/subtasks.jade +++ b/client/components/cards/subtasks.jade @@ -1,5 +1,7 @@ template(name="subtasks") - h3 {{_ 'subtasks'}} + h3 + i.fa.fa-sitemap + | {{_ 'subtasks'}} if toggleDeleteDialog.get .board-overlay#card-details-overlay +subtaskDeleteDialog(subtask = subtaskToDelete) diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index 631f68a0..6468839d 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -56,25 +56,45 @@ template(name="editListTitleForm") template(name="listActionPopup") ul.pop-over-list - li: a.js-toggle-watch-list {{#if isWatching}}{{_ 'unwatch'}}{{else}}{{_ 'watch'}}{{/if}} + li + a.js-toggle-watch-list + if isWatching + i.fa.fa-eye + | {{_ 'unwatch'}} + else + i.fa.fa-eye-slash + | {{_ 'watch'}} unless currentUser.isCommentOnly - hr ul.pop-over-list - li: a.js-set-color-list {{_ 'set-color-list'}} - hr + li + a.js-set-color-list + i.fa.fa-paint-brush + | {{_ 'set-color-list'}} ul.pop-over-list if cards.count - li: a.js-select-cards {{_ 'list-select-cards'}} - hr + li + a.js-select-cards + i.fa.fa-check-square + | {{_ 'list-select-cards'}} if currentUser.isBoardAdmin ul.pop-over-list - li: a.js-set-wip-limit {{#if isWipLimitEnabled }}{{_ 'edit-wip-limit'}}{{else}}{{_ 'setWipLimitPopup-title'}}{{/if}} - hr + li + a.js-set-wip-limit + i.fa.fa-ban + | {{#if isWipLimitEnabled }}{{_ 'edit-wip-limit'}}{{else}}{{_ 'setWipLimitPopup-title'}}{{/if}} + hr ul.pop-over-list - li: a.js-close-list {{_ 'archive-list'}} + li + a.js-close-list + i.fa.fa-arrow-right + i.fa.fa-archive + | {{_ 'archive-list'}} hr ul.pop-over-list - li: a.js-more {{_ 'listMorePopup-title'}} + li + a.js-more + i.fa.fa-link + | {{_ 'listMorePopup-title'}} template(name="boardLists") ul.pop-over-list diff --git a/client/components/settings/informationBody.jade b/client/components/settings/informationBody.jade index 2c615ffd..0f85dd9c 100644 --- a/client/components/settings/informationBody.jade +++ b/client/components/settings/informationBody.jade @@ -4,12 +4,16 @@ template(name='information') | {{_ 'error-notAuthorized'}} else .content-title - span {{_ 'info'}} + span + i.fa.fa-info-circle + | {{_ 'info'}} .content-body .side-menu ul li.active - a.js-setting-menu(data-id="information-display") {{_ 'info'}} + a.js-setting-menu(data-id="information-display") + i.fa.fa-info-circle + | {{_ 'info'}} .main-body +statistics diff --git a/client/components/settings/peopleBody.jade b/client/components/settings/peopleBody.jade index d8f672b0..b8a94337 100644 --- a/client/components/settings/peopleBody.jade +++ b/client/components/settings/peopleBody.jade @@ -5,16 +5,22 @@ template(name="people") else .content-title.ext-box .ext-box-left - span {{_ 'people'}} + span + i.fa.fa-users + | {{_ 'people'}} input#searchInput(placeholder="{{_ 'search'}}") - button#searchButton {{_ 'search'}} + button#searchButton + i.fa.fa-search + | {{_ 'search'}} .ext-box-right span {{_ 'people-number'}} #{peopleNumber} .content-body .side-menu ul li.active - a.js-setting-menu(data-id="people-setting") {{_ 'people'}} + a.js-setting-menu(data-id="people-setting") + i.fa.fa-users + | {{_ 'people'}} .main-body if loading.get +spinner @@ -90,6 +96,7 @@ template(name="peopleRow") td {{_ userData.authenticationMethod }} td a.edit-user + i.fa.fa-edit | {{_ 'edit'}} template(name="editUserPopup") diff --git a/client/components/settings/peopleBody.styl b/client/components/settings/peopleBody.styl index 80387611..c223e181 100644 --- a/client/components/settings/peopleBody.styl +++ b/client/components/settings/peopleBody.styl @@ -33,7 +33,7 @@ table padding: 0; button - min-width: 60px; + min-width: 90px; .content-wrapper margin-top: 10px diff --git a/client/components/settings/settingBody.jade b/client/components/settings/settingBody.jade index 04b635e8..877fe6e2 100644 --- a/client/components/settings/settingBody.jade +++ b/client/components/settings/settingBody.jade @@ -4,22 +4,35 @@ template(name="setting") | {{_ 'error-notAuthorized'}} else .content-title + i.fa.fa-cog span {{_ 'settings'}} .content-body .side-menu ul li.active - a.js-setting-menu(data-id="registration-setting") {{_ 'registration'}} + a.js-setting-menu(data-id="registration-setting") + i.fa.fa-sign-in + | {{_ 'registration'}} li - a.js-setting-menu(data-id="email-setting") {{_ 'email'}} + a.js-setting-menu(data-id="email-setting") + i.fa.fa-envelope + | {{_ 'email'}} li - a.js-setting-menu(data-id="account-setting") {{_ 'accounts'}} + a.js-setting-menu(data-id="account-setting") + i.fa.fa-users + | {{_ 'accounts'}} li - a.js-setting-menu(data-id="announcement-setting") {{_ 'admin-announcement'}} + a.js-setting-menu(data-id="announcement-setting") + i.fa.fa-bullhorn + | {{_ 'admin-announcement'}} li - a.js-setting-menu(data-id="layout-setting") {{_ 'layout'}} + a.js-setting-menu(data-id="layout-setting") + i.fa.fa-object-group + | {{_ 'layout'}} li - a.js-setting-menu(data-id="webhook-setting") {{_ 'global-webhook'}} + a.js-setting-menu(data-id="webhook-setting") + i.fa.fa-globe + | {{_ 'global-webhook'}} .main-body if loading.get +spinner diff --git a/client/components/settings/settingBody.styl b/client/components/settings/settingBody.styl index bcbd2ea1..d6ac32b2 100644 --- a/client/components/settings/settingBody.styl +++ b/client/components/settings/settingBody.styl @@ -41,15 +41,18 @@ &:hover background #fff box-shadow 0 1px 2px rgba(0,0,0,0.15); + a @extends .flex padding: 1rem 0 1rem 1rem width: 100% - 5rem - span font-size: 13px + i + margin-right: 20px + .main-body padding: 0.1em 1em -webkit-user-select: text // Safari 3.1+ diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index ccfadc0c..e5adc0cd 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -37,7 +37,7 @@ template(name='homeSidebar') template(name="membersWidget") .board-widget.board-widget-members h3 - i.fa.fa-user + i.fa.fa-users | {{_ 'members'}} unless currentUser.isCommentOnly a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}").right @@ -130,7 +130,9 @@ template(name="chooseBoardSource") template(name="archiveBoardPopup") p {{_ 'close-board-pop'}} - button.js-confirm.negate.full(type="submit") {{_ 'archive'}} + button.js-confirm.negate.full(type="submit") + i.fa.fa-archive + | {{_ 'archive'}} template(name="outgoingWebhooksPopup") each integrations @@ -163,37 +165,78 @@ template(name="outgoingWebhooksPopup") template(name="boardMenuPopup") ul.pop-over-list li: a.js-custom-fields {{_ 'custom-fields'}} - li: a.js-open-archives {{_ 'archived-items'}} + li + a.js-open-archives + i.fa.fa-archive + | {{_ 'archived-items'}} if currentUser.isBoardAdmin - li: a.js-change-board-color {{_ 'board-change-color'}} + li + a.js-change-board-color + i.fa.fa-paint-brush + | {{_ 'board-change-color'}} + //- XXX Language should be handled by sandstorm, but for now display a language selection link in the board menu. This link is normally present in the header bar that is not displayed on sandstorm. if isSandstorm - li: a.js-change-language {{_ 'language'}} + li + a.js-change-language + i.fa.fa-flag + | {{_ 'language'}} unless isSandstorm if currentUser.isBoardAdmin hr ul.pop-over-list - li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}} - unless currentBoard.isTemplatesBoard - li: a.js-archive-board {{_ 'archive-board'}} - li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}} - hr - ul.pop-over-list - li: a.js-subtask-settings {{_ 'subtask-settings'}} + li + a(href="{{exportUrl}}", download="{{exportFilename}}") + i.fa.fa-share-alt + | {{_ 'export-board'}} + li + a.js-outgoing-webhooks + i.fa.fa-globe + | {{_ 'outgoing-webhooks'}} + li + a.js-subtask-settings + i.fa.fa-sitemap + | {{_ 'subtask-settings'}} + unless currentBoard.isTemplatesBoard + hr + ul.pop-over-list + li + a.js-archive-board + i.fa.fa-arrow-right + i.fa.fa-archive + | {{_ 'archive-board'}} if isSandstorm hr ul.pop-over-list - li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}} - li: a.js-import-board {{_ 'import-board-c'}} - li: a.js-archive-board {{_ 'archive-board'}} - li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}} + li + a(href="{{exportUrl}}", download="{{exportFilename}}") + i.fa.fa-share-alt + i.fa.fa-sign-out + | {{_ 'export-board'}} + li + a.js-import-board + i.fa.fa-share-alt + i.fa.fa-sign-in + | {{_ 'import-board-c'}} + li + a.js-archive-board + i.fa.fa-arrow-right + i.fa.fa-archive + | {{_ 'archive-board'}} + li + a.js-outgoing-webhooks + i.fa.fa-globe + | {{_ 'outgoing-webhooks'}} hr ul.pop-over-list - li: a.js-subtask-settings {{_ 'subtask-settings'}} + li + a.js-subtask-settings + i.fa.fa-sitemap + | {{_ 'subtask-settings'}} template(name="labelsWidget") .board-widget.board-widget-labels @@ -238,7 +281,6 @@ template(name="memberPopup") else if currentUser.isBoardAdmin a.js-remove-member {{_ 'remove-from-board'}} - template(name="removeMemberPopup") p {{_ 'remove-member-pop' name=user.profile.fullname username=user.username boardTitle=board.title}} button.js-confirm.negate.full(type="submit") {{_ 'remove-member'}} diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade index 5f929cb9..7f31dada 100644 --- a/client/components/sidebar/sidebarFilters.jade +++ b/client/components/sidebar/sidebarFilters.jade @@ -117,13 +117,14 @@ template(name="multiselectionSidebar") i.fa.fa-check else if someSelectedElementHave 'member' _id i.fa.fa-ellipsis-h - hr - a.sidebar-btn.js-move-selection - i.fa.fa-share - span {{_ 'move-selection'}} - a.sidebar-btn.js-archive-selection - i.fa.fa-archive - span {{_ 'archive-selection'}} + unless currentUser.isWorker + hr + a.sidebar-btn.js-move-selection + i.fa.fa-share + span {{_ 'move-selection'}} + a.sidebar-btn.js-archive-selection + i.fa.fa-archive + span {{_ 'archive-selection'}} template(name="disambiguateMultiLabelPopup") p {{_ 'what-to-do'}} diff --git a/client/components/users/userAvatar.jade b/client/components/users/userAvatar.jade index ebfa48ba..ff4a1ce6 100644 --- a/client/components/users/userAvatar.jade +++ b/client/components/users/userAvatar.jade @@ -73,7 +73,7 @@ template(name="cardMemberPopup") p.quiet @{{ user.username }} ul.pop-over-list if currentUser.isNotCommentOnly - li: a.js-remove-member {{_ 'remove-member-from-card'}} + li: a.js-remove-member {{_ 'remove-member-from-card'}} if $eq currentUser._id user._id with currentUser diff --git a/client/components/users/userHeader.jade b/client/components/users/userHeader.jade index 50a80396..aa567e91 100644 --- a/client/components/users/userHeader.jade +++ b/client/components/users/userHeader.jade @@ -13,21 +13,45 @@ template(name="headerUserBar") template(name="memberMenuPopup") ul.pop-over-list with currentUser - li: a.js-edit-profile {{_ 'edit-profile'}} - li: a.js-change-settings {{_ 'change-settings'}} - li: a.js-change-avatar {{_ 'edit-avatar'}} + li + a.js-edit-profile + i.fa.fa-user + | {{_ 'edit-profile'}} + li + a.js-change-settings + i.fa.fa-cog + | {{_ 'change-settings'}} + li + a.js-change-avatar + i.fa.fa-picture-o + | {{_ 'edit-avatar'}} unless isSandstorm - li: a.js-change-password {{_ 'changePasswordPopup-title'}} - li: a.js-change-language {{_ 'changeLanguagePopup-title'}} + li + a.js-change-password + i.fa.fa-key + | {{_ 'changePasswordPopup-title'}} + li + a.js-change-language + i.fa.fa-flag + | {{_ 'changeLanguagePopup-title'}} if currentUser.isAdmin - li: a.js-go-setting(href="{{pathFor 'setting'}}") {{_ 'admin-panel'}} + li + a.js-go-setting(href="{{pathFor 'setting'}}") + i.fa.fa-lock + | {{_ 'admin-panel'}} hr ul.pop-over-list - li: a(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}") {{_ 'templates'}} + li + a(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}") + i.fa.fa-clone + | {{_ 'templates'}} unless isSandstorm hr ul.pop-over-list - li: a.js-logout {{_ 'log-out'}} + li + a.js-logout + i.fa.fa-sign-out + | {{_ 'log-out'}} template(name="editProfilePopup") form @@ -75,21 +99,23 @@ template(name="changeSettingsPopup") ul.pop-over-list li a.js-toggle-system-messages + i.fa.fa-comments-o | {{_ 'hide-system-messages'}} if hiddenSystemMessages i.fa.fa-check li a.js-toggle-desktop-drag-handles + i.fa.fa-arrows | {{_ 'show-desktop-drag-handles'}} if showDesktopDragHandles i.fa.fa-check li label.bold + i.fa.fa-sort-numeric-asc | {{_ 'show-cards-minimum-count'}} input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="0" max="99" onkeydown="return false") input.js-apply-show-cards-at.left(type="submit" value="{{_ 'apply'}}") - template(name="userDeletePopup") p {{_ 'delete-user-confirm-popup'}} button.js-confirm.negate.full(type="submit") {{_ 'delete'}} diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js index 5f36ef54..847d30fb 100644 --- a/client/components/users/userHeader.js +++ b/client/components/users/userHeader.js @@ -45,13 +45,31 @@ Template.memberMenuPopup.events({ Template.editProfilePopup.helpers({ allowEmailChange() { - return AccountSettings.findOne('accounts-allowEmailChange').booleanValue; + Meteor.call('AccountSettings.allowEmailChange', (_, result) => { + if (result) { + return true; + } else { + return false; + } + }); }, allowUserNameChange() { - return AccountSettings.findOne('accounts-allowUserNameChange').booleanValue; + Meteor.call('AccountSettings.allowUserNameChange', (_, result) => { + if (result) { + return true; + } else { + return false; + } + }); }, allowUserDelete() { - return AccountSettings.findOne('accounts-allowUserDelete').booleanValue; + Meteor.call('AccountSettings.allowUserDelete', (_, result) => { + if (result) { + return true; + } else { + return false; + } + }); }, }); -- cgit v1.2.3-1-g7c22 From f6f7705f23ea18d7f1b8f8736b762eb89e00a3cf Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 5 Jan 2020 21:28:14 +0200 Subject: Add Worker role. This was originally added at Wekan v3.58, reverted at Wekan v3.60 because of bugs, and now after fixes added back. Thanks to xet7 ! Closes #2788 --- client/components/cards/attachments.jade | 26 +-- client/components/cards/cardDate.js | 3 +- client/components/cards/cardDetails.jade | 216 ++++++++++++++----------- client/components/cards/cardDetails.js | 3 +- client/components/cards/checklists.js | 9 +- client/components/cards/subtasks.js | 9 +- client/components/lists/listBody.js | 3 +- client/components/lists/listHeader.jade | 31 ++-- client/components/lists/listHeader.js | 7 +- client/components/sidebar/sidebar.jade | 35 ++-- client/components/sidebar/sidebar.js | 25 ++- client/components/sidebar/sidebarArchives.jade | 54 ++++--- client/components/sidebar/sidebarArchives.js | 9 ++ client/components/swimlanes/swimlanes.jade | 33 ++-- client/components/swimlanes/swimlanes.js | 15 +- client/components/users/userAvatar.jade | 3 +- client/components/users/userHeader.jade | 31 ++-- 17 files changed, 308 insertions(+), 204 deletions(-) (limited to 'client') diff --git a/client/components/cards/attachments.jade b/client/components/cards/attachments.jade index 2a96f4f4..10b767f4 100644 --- a/client/components/cards/attachments.jade +++ b/client/components/cards/attachments.jade @@ -38,18 +38,20 @@ template(name="attachmentsGalery") | {{_ 'download'}} if currentUser.isBoardMember unless currentUser.isCommentOnly - if isImage - a(class="{{#if $eq ../coverId _id}}js-remove-cover{{else}}js-add-cover{{/if}}") - i.fa.fa-thumb-tack - if($eq ../coverId _id) - | {{_ 'remove-cover'}} - else - | {{_ 'add-cover'}} - a.js-confirm-delete - i.fa.fa-close - | {{_ 'delete'}} + unless currentUser.isWorker + if isImage + a(class="{{#if $eq ../coverId _id}}js-remove-cover{{else}}js-add-cover{{/if}}") + i.fa.fa-thumb-tack + if($eq ../coverId _id) + | {{_ 'remove-cover'}} + else + | {{_ 'add-cover'}} + a.js-confirm-delete + i.fa.fa-close + | {{_ 'delete'}} if currentUser.isBoardMember unless currentUser.isCommentOnly - li.attachment-item.add-attachment - a.js-add-attachment {{_ 'add-attachment' }} + unless currentUser.isWorker + li.attachment-item.add-attachment + a.js-add-attachment {{_ 'add-attachment' }} diff --git a/client/components/cards/cardDate.js b/client/components/cards/cardDate.js index cb54b033..c4b5c6d8 100644 --- a/client/components/cards/cardDate.js +++ b/client/components/cards/cardDate.js @@ -97,7 +97,8 @@ Template.dateBadge.helpers({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, }); diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index d7c7ca59..de4e102a 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -44,7 +44,8 @@ template(name="cardDetails") +cardReceivedDate else if canModifyCard - a.js-received-date {{_ 'add'}} + unless currentUser.isWorker + a.js-received-date {{_ 'add'}} .card-details-item.card-details-item-start h3 @@ -54,7 +55,8 @@ template(name="cardDetails") +cardStartDate else if canModifyCard - a.js-start-date {{_ 'add'}} + unless currentUser.isWorker + a.js-start-date {{_ 'add'}} .card-details-item.card-details-item-due h3 @@ -64,7 +66,8 @@ template(name="cardDetails") +cardDueDate else if canModifyCard - a.js-due-date {{_ 'add'}} + unless currentUser.isWorker + a.js-due-date {{_ 'add'}} .card-details-item.card-details-item-end h3 @@ -74,7 +77,8 @@ template(name="cardDetails") +cardEndDate else if canModifyCard - a.js-end-date {{_ 'add'}} + unless currentUser.isWorker + a.js-end-date {{_ 'add'}} .card-details-items .card-details-item.card-details-item-members @@ -85,8 +89,9 @@ template(name="cardDetails") +userAvatar(userId=this cardId=../_id) | {{! XXX Hack to hide syntaxic coloration /// }} if canModifyCard - a.member.add-member.card-details-item-add-button.js-add-members(title="{{_ 'card-members-title'}}") - i.fa.fa-plus + unless currentUser.isWorker + a.member.add-member.card-details-item-add-button.js-add-members(title="{{_ 'card-members-title'}}") + i.fa.fa-plus .card-details-item.card-details-item-assignees h3 @@ -96,10 +101,14 @@ template(name="cardDetails") +userAvatarAssignee(userId=this cardId=../_id) | {{! XXX Hack to hide syntaxic coloration /// }} if canModifyCard + a.assignee.add-assignee.card-details-item-add-button.js-add-assignees(title="{{_ 'assignee'}}") + i.fa.fa-plus + if currentUser.isWorker unless assigneeSelected a.assignee.add-assignee.card-details-item-add-button.js-add-assignees(title="{{_ 'assignee'}}") i.fa.fa-plus + .card-details-item.card-details-item-labels h3 i.fa.fa-tags @@ -110,8 +119,9 @@ template(name="cardDetails") +viewer = name if canModifyCard - a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}") - i.fa.fa-plus + unless currentUser.isWorker + a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}") + i.fa.fa-plus .card-details-items each customFieldsWD @@ -132,28 +142,29 @@ template(name="cardDetails") //- XXX We should use "editable" to avoid repetiting ourselves if canModifyCard - h3 - i.fa.fa-align-left - card-details-item-title {{_ 'description'}} - +inlinedCardDescription(classNames="card-description js-card-description") - +editor(autofocus=true) - | {{getUnsavedValue 'cardDescription' _id getDescription}} - .edit-controls.clearfix - button.primary(type="submit") {{_ 'save'}} - a.fa.fa-times-thin.js-close-inlined-form - else - a.js-open-inlined-form - if getDescription - +viewer - = getDescription - else - | {{_ 'edit'}} - if (hasUnsavedValue 'cardDescription' _id) - p.quiet - | {{_ 'unsaved-description'}} - a.js-open-inlined-form {{_ 'view-it'}} - = ' - ' - a.js-close-inlined-form {{_ 'discard'}} + unless currentUser.isWorker + h3 + i.fa.fa-align-left + card-details-item-title {{_ 'description'}} + +inlinedCardDescription(classNames="card-description js-card-description") + +editor(autofocus=true) + | {{getUnsavedValue 'cardDescription' _id getDescription}} + .edit-controls.clearfix + button.primary(type="submit") {{_ 'save'}} + a.fa.fa-times-thin.js-close-inlined-form + else + a.js-open-inlined-form + if getDescription + +viewer + = getDescription + else + | {{_ 'edit'}} + if (hasUnsavedValue 'cardDescription' _id) + p.quiet + | {{_ 'unsaved-description'}} + a.js-open-inlined-form {{_ 'view-it'}} + = ' - ' + a.js-close-inlined-form {{_ 'discard'}} else if getDescription h3.card-details-item-title {{_ 'description'}} +viewer @@ -165,15 +176,16 @@ template(name="cardDetails") i.fa.fa-shopping-cart card-details-item-title {{_ 'requested-by'}} if canModifyCard - +inlinedForm(classNames="js-card-details-requester") - +editCardRequesterForm - else - a.js-open-inlined-form - if getRequestedBy - +viewer - = getRequestedBy - else - | {{_ 'add'}} + unless currentUser.isWorker + +inlinedForm(classNames="js-card-details-requester") + +editCardRequesterForm + else + a.js-open-inlined-form + if getRequestedBy + +viewer + = getRequestedBy + else + | {{_ 'add'}} else if getRequestedBy +viewer = getRequestedBy @@ -183,15 +195,16 @@ template(name="cardDetails") i.fa.fa-user-plus card-details-item-title {{_ 'assigned-by'}} if canModifyCard - +inlinedForm(classNames="js-card-details-assigner") - +editCardAssignerForm - else - a.js-open-inlined-form - if getAssignedBy - +viewer - = getAssignedBy - else - | {{_ 'add'}} + unless currentUser.isWorker + +inlinedForm(classNames="js-card-details-assigner") + +editCardAssignerForm + else + a.js-open-inlined-form + if getAssignedBy + +viewer + = getAssignedBy + else + | {{_ 'add'}} else if getRequestedBy +viewer = getAssignedBy @@ -266,28 +279,29 @@ template(name="cardDetailsActionsPopup") i.fa.fa-eye-slash | {{_ 'watch'}} if canModifyCard - hr - ul.pop-over-list - //li: a.js-members {{_ 'card-edit-members'}} - //li: a.js-labels {{_ 'card-edit-labels'}} - //li: a.js-attachments {{_ 'card-edit-attachments'}} - li - a.js-custom-fields - i.fa.fa-list-alt - | {{_ 'card-edit-custom-fields'}} - //li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}} - //li: a.js-start-date {{_ 'editCardStartDatePopup-title'}} - //li: a.js-due-date {{_ 'editCardDueDatePopup-title'}} - //li: a.js-end-date {{_ 'editCardEndDatePopup-title'}} - li - a.js-spent-time - i.fa.fa-clock-o - | {{_ 'editCardSpentTimePopup-title'}} - li - a.js-set-card-color - i.fa.fa-paint-brush - | {{_ 'setCardColorPopup-title'}} - hr + unless currentUser.isWorker + hr + ul.pop-over-list + //li: a.js-members {{_ 'card-edit-members'}} + //li: a.js-labels {{_ 'card-edit-labels'}} + //li: a.js-attachments {{_ 'card-edit-attachments'}} + li + a.js-custom-fields + i.fa.fa-list-alt + | {{_ 'card-edit-custom-fields'}} + //li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}} + //li: a.js-start-date {{_ 'editCardStartDatePopup-title'}} + //li: a.js-due-date {{_ 'editCardDueDatePopup-title'}} + //li: a.js-end-date {{_ 'editCardEndDatePopup-title'}} + li + a.js-spent-time + i.fa.fa-clock-o + | {{_ 'editCardSpentTimePopup-title'}} + li + a.js-set-card-color + i.fa.fa-paint-brush + | {{_ 'setCardColorPopup-title'}} + hr ul.pop-over-list li a.js-move-card-to-top @@ -297,16 +311,17 @@ template(name="cardDetailsActionsPopup") a.js-move-card-to-bottom i.fa.fa-arrow-down | {{_ 'moveCardToBottom-title'}} - hr - ul.pop-over-list - li - a.js-move-card - i.fa.fa-arrow-right - | {{_ 'moveCardPopup-title'}} - li - a.js-copy-card - i.fa.fa-copy - | {{_ 'copyCardPopup-title'}} + unless currentUser.isWorker + hr + ul.pop-over-list + li + a.js-move-card + i.fa.fa-arrow-right + | {{_ 'moveCardPopup-title'}} + li + a.js-copy-card + i.fa.fa-copy + | {{_ 'copyCardPopup-title'}} hr ul.pop-over-list li @@ -379,16 +394,27 @@ template(name="cardMembersPopup") i.fa.fa-check template(name="cardAssigneesPopup") - ul.pop-over-list.js-card-assignee-list - each board.activeMembers - li.item(class="{{#if isCardAssignee}}active{{/if}}") - a.name.js-select-assignee(href="#") - +userAvatar(userId=user._id) - span.full-name - = user.profile.fullname - | ({{ user.username }}) - if isCardAssignee - i.fa.fa-check + unless currentUser.isWorker + ul.pop-over-list.js-card-assignee-list + each board.activeMembers + li.item(class="{{#if isCardAssignee}}active{{/if}}") + a.name.js-select-assignee(href="#") + +userAvatar(userId=user._id) + span.full-name + = user.profile.fullname + | ({{ user.username }}) + if isCardAssignee + i.fa.fa-check + if currentUser.isWorker + ul.pop-over-list.js-card-assignee-list + li.item(class="{{#if currentUser.isCardAssignee}}active{{/if}}") + a.name.js-select-assignee(href="#") + +userAvatar(userId=currentUser._id) + span.full-name + = currentUser.profile.fullname + | ({{ currentUser.username }}) + if currentUser.isCardAssignee + i.fa.fa-check template(name="userAvatarAssignee") a.assignee.js-assignee(title="{{userData.profile.fullname}} ({{userData.username}})") @@ -416,11 +442,13 @@ template(name="cardAssigneePopup") p.quiet @{{ user.username }} ul.pop-over-list if currentUser.isNotCommentOnly - li: a.js-remove-assignee {{_ 'remove-member-from-card'}} + unless currentUser.isWorker + li: a.js-remove-assignee {{_ 'remove-member-from-card'}} - if $eq currentUser._id user._id - with currentUser - li: a.js-edit-profile {{_ 'edit-profile'}} + unless currentUser.isWorker + if $eq currentUser._id user._id + with currentUser + li: a.js-edit-profile {{_ 'edit-profile'}} template(name="userAvatarAssigneeInitials") svg.avatar.avatar-assignee-initials(viewBox="0 0 {{viewPortWidth}} 15") diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index 67120043..07dcac44 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -51,7 +51,8 @@ BlazeComponent.extendComponent({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index 57939eb8..27d1b1c9 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -67,7 +67,8 @@ BlazeComponent.extendComponent({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, }).register('checklistDetail'); @@ -120,7 +121,8 @@ BlazeComponent.extendComponent({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, @@ -228,7 +230,8 @@ Template.checklistItemDetail.helpers({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, }); diff --git a/client/components/cards/subtasks.js b/client/components/cards/subtasks.js index fab860bb..34348fe1 100644 --- a/client/components/cards/subtasks.js +++ b/client/components/cards/subtasks.js @@ -3,7 +3,8 @@ BlazeComponent.extendComponent({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, }).register('subtaskDetail'); @@ -55,7 +56,8 @@ BlazeComponent.extendComponent({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, @@ -154,7 +156,8 @@ Template.subtaskItemDetail.helpers({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, }); diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index b0974705..89c27ec7 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -189,7 +189,8 @@ BlazeComponent.extendComponent({ !this.reachedWipLimit() && Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index 6468839d..ec2c556f 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -10,7 +10,7 @@ template(name="listHeader") a.list-header-left-icon.fa.fa-angle-left.js-unselect-list h2.list-header-name( title="{{ moment modifiedAt 'LLL' }}" - class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}js-open-inlined-form is-editable{{/unless}}{{/if}}") + class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}{{#unless currentUser.isWorker}}js-open-inlined-form is-editable{{/unless}}{{/unless}}{{/if}}") +viewer = title if wipLimit.enabled @@ -65,11 +65,12 @@ template(name="listActionPopup") i.fa.fa-eye-slash | {{_ 'watch'}} unless currentUser.isCommentOnly - ul.pop-over-list - li - a.js-set-color-list - i.fa.fa-paint-brush - | {{_ 'set-color-list'}} + unless currentUser.isWorker + ul.pop-over-list + li + a.js-set-color-list + i.fa.fa-paint-brush + | {{_ 'set-color-list'}} ul.pop-over-list if cards.count li @@ -82,13 +83,14 @@ template(name="listActionPopup") a.js-set-wip-limit i.fa.fa-ban | {{#if isWipLimitEnabled }}{{_ 'edit-wip-limit'}}{{else}}{{_ 'setWipLimitPopup-title'}}{{/if}} - hr - ul.pop-over-list - li - a.js-close-list - i.fa.fa-arrow-right - i.fa.fa-archive - | {{_ 'archive-list'}} + unless currentUser.isWorker + hr + ul.pop-over-list + li + a.js-close-list + i.fa.fa-arrow-right + i.fa.fa-archive + | {{_ 'archive-list'}} hr ul.pop-over-list li @@ -114,7 +116,8 @@ template(name="listMorePopup") input.inline-input(type="text" readonly value="{{ rootUrl }}") | {{_ 'added'}} span.date(title=list.createdAt) {{ moment createdAt 'LLL' }} - a.js-delete {{_ 'delete'}} + unless currentUser.isWorker + a.js-delete {{_ 'delete'}} template(name="listDeletePopup") p {{_ "list-delete-pop"}} diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index 07edade0..46dbd748 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -9,9 +9,10 @@ BlazeComponent.extendComponent({ canSeeAddCard() { const list = Template.currentData(); return ( - !list.getWipLimit('enabled') || - list.getWipLimit('soft') || - !this.reachedWipLimit() + (!list.getWipLimit('enabled') || + list.getWipLimit('soft') || + !this.reachedWipLimit()) && + !Meteor.user().isWorker() ); }, diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index e5adc0cd..19e32970 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -40,8 +40,9 @@ template(name="membersWidget") i.fa.fa-users | {{_ 'members'}} unless currentUser.isCommentOnly - a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}").right - i.board-header-btn-icon.fa.fa-cog + unless currentUser.isWorker + a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}").right + i.board-header-btn-icon.fa.fa-cog .board-widget-content each currentBoard.activeMembers @@ -164,11 +165,12 @@ template(name="outgoingWebhooksPopup") template(name="boardMenuPopup") ul.pop-over-list - li: a.js-custom-fields {{_ 'custom-fields'}} - li - a.js-open-archives - i.fa.fa-archive - | {{_ 'archived-items'}} + if isNotWorker + li: a.js-custom-fields {{_ 'custom-fields'}} + li + a.js-open-archives + i.fa.fa-archive + | {{_ 'archived-items'}} if currentUser.isBoardAdmin li a.js-change-board-color @@ -246,7 +248,7 @@ template(name="labelsWidget") .board-widget-content each currentBoard.labels a.card-label(class="card-label-{{color}}" - class="{{#if currentUser.isNotCommentOnly}}js-label{{/if}}") + class="{{#if currentUser.isNotCommentOnly}}{{#if currentUser.isNotWorker}}js-label{{/if}}{{/if}}") span.card-label-name +viewer = name @@ -275,11 +277,12 @@ template(name="memberPopup") a.js-change-role | {{_ 'change-permissions'}} span.quiet (#{memberType}) - li - if $eq currentUser._id userId - a.js-leave-member {{_ 'leave-board'}} - else if currentUser.isBoardAdmin - a.js-remove-member {{_ 'remove-from-board'}} + unless currentUser.isWorker + li + if $eq currentUser._id userId + a.js-leave-member {{_ 'leave-board'}} + else if currentUser.isBoardAdmin + a.js-remove-member {{_ 'remove-from-board'}} template(name="removeMemberPopup") p {{_ 'remove-member-pop' name=user.profile.fullname username=user.username boardTitle=board.title}} @@ -343,6 +346,12 @@ template(name="changePermissionsPopup") if isCommentOnly i.fa.fa-check span.sub-name {{_ 'comment-only-desc'}} + li + a(class="{{#if isLastAdmin}}disabled{{else}}js-set-worker{{/if}}") + | {{_ 'worker'}} + if isWorker + i.fa.fa-check + span.sub-name {{_ 'worker-desc'}} if isLastAdmin hr p.quiet.bottom {{_ 'last-admin-desc'}} diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index 9d9c597a..e8f38b8c 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -161,10 +161,13 @@ Template.memberPopup.helpers({ const currentBoard = Boards.findOne(Session.get('currentBoard')); const commentOnly = currentBoard.hasCommentOnly(this.userId); const noComments = currentBoard.hasNoComments(this.userId); + const worker = currentBoard.hasWorker(this.userId); if (commentOnly) { return TAPi18n.__('comment-only').toLowerCase(); } else if (noComments) { return TAPi18n.__('no-comments').toLowerCase(); + } else if (worker) { + return TAPi18n.__('worker').toLowerCase(); } else { return TAPi18n.__(type).toLowerCase(); } @@ -267,6 +270,14 @@ Template.membersWidget.helpers({ const user = Meteor.user(); return user && user.isInvitedTo(Session.get('currentBoard')); }, + isWorker() { + const user = Meteor.user(); + if (user) { + return Meteor.call(Boards.hasWorker(user.memberId)); + } else { + return false; + } + }, }); Template.membersWidget.events({ @@ -644,7 +655,7 @@ BlazeComponent.extendComponent({ }).register('addMemberPopup'); Template.changePermissionsPopup.events({ - 'click .js-set-admin, click .js-set-normal, click .js-set-no-comments, click .js-set-comment-only'( + 'click .js-set-admin, click .js-set-normal, click .js-set-no-comments, click .js-set-comment-only, click .js-set-worker'( event, ) { const currentBoard = Boards.findOne(Session.get('currentBoard')); @@ -654,11 +665,13 @@ Template.changePermissionsPopup.events({ 'js-set-comment-only', ); const isNoComments = $(event.currentTarget).hasClass('js-set-no-comments'); + const isWorker = $(event.currentTarget).hasClass('js-set-worker'); currentBoard.setMemberPermission( memberId, isAdmin, isNoComments, isCommentOnly, + isWorker, ); Popup.back(1); }, @@ -675,7 +688,8 @@ Template.changePermissionsPopup.helpers({ return ( !currentBoard.hasAdmin(this.userId) && !currentBoard.hasNoComments(this.userId) && - !currentBoard.hasCommentOnly(this.userId) + !currentBoard.hasCommentOnly(this.userId) && + !currentBoard.hasWorker(this.userId) ); }, @@ -695,6 +709,13 @@ Template.changePermissionsPopup.helpers({ ); }, + isWorker() { + const currentBoard = Boards.findOne(Session.get('currentBoard')); + return ( + !currentBoard.hasAdmin(this.userId) && currentBoard.hasWorker(this.userId) + ); + }, + isLastAdmin() { const currentBoard = Boards.findOne(Session.get('currentBoard')); return ( diff --git a/client/components/sidebar/sidebarArchives.jade b/client/components/sidebar/sidebarArchives.jade index 466d2cb0..56423ad7 100644 --- a/client/components/sidebar/sidebarArchives.jade +++ b/client/components/sidebar/sidebarArchives.jade @@ -2,54 +2,60 @@ template(name="archivesSidebar") if isArchiveReady.get +basicTabs(tabs=tabs) +tabContent(slug="cards") - p.quiet - a.js-restore-all-cards {{_ 'restore-all'}} - | - - a.js-delete-all-cards {{_ 'delete-all'}} + unless isWorker + p.quiet + a.js-restore-all-cards {{_ 'restore-all'}} + | - + a.js-delete-all-cards {{_ 'delete-all'}} each archivedCards .minicard-wrapper.js-minicard +minicard(this) if currentUser.isBoardMember - p.quiet - a.js-restore-card {{_ 'restore'}} - | - - a.js-delete-card {{_ 'delete'}} + unless isWorker + p.quiet + a.js-restore-card {{_ 'restore'}} + | - + a.js-delete-card {{_ 'delete'}} if cardIsInArchivedList p.quiet.small ({{_ 'warn-list-archived'}}) else p.no-items-message {{_ 'no-archived-cards'}} +tabContent(slug="lists") - p.quiet - a.js-restore-all-lists {{_ 'restore-all'}} - | - - a.js-delete-all-lists {{_ 'delete-all'}} + unless isWorker + p.quiet + a.js-restore-all-lists {{_ 'restore-all'}} + | - + a.js-delete-all-lists {{_ 'delete-all'}} ul.archived-lists each archivedLists li.archived-lists-item = title if currentUser.isBoardMember - p.quiet - a.js-restore-list {{_ 'restore'}} - | - - a.js-delete-list {{_ 'delete'}} + unless isWorker + p.quiet + a.js-restore-list {{_ 'restore'}} + | - + a.js-delete-list {{_ 'delete'}} else li.no-items-message {{_ 'no-archived-lists'}} +tabContent(slug="swimlanes") - p.quiet - a.js-restore-all-swimlanes {{_ 'restore-all'}} - | - - a.js-delete-all-swimlanes {{_ 'delete-all'}} + unless isWorker + p.quiet + a.js-restore-all-swimlanes {{_ 'restore-all'}} + | - + a.js-delete-all-swimlanes {{_ 'delete-all'}} ul.archived-lists each archivedSwimlanes li.archived-lists-item = title if currentUser.isBoardMember - p.quiet - a.js-restore-swimlane {{_ 'restore'}} - | - - a.js-delete-swimlane {{_ 'delete'}} + unless isWorker + p.quiet + a.js-restore-swimlane {{_ 'restore'}} + | - + a.js-delete-swimlane {{_ 'delete'}} else li.no-items-message {{_ 'no-archived-swimlanes'}} else diff --git a/client/components/sidebar/sidebarArchives.js b/client/components/sidebar/sidebarArchives.js index a4846561..75b694e9 100644 --- a/client/components/sidebar/sidebarArchives.js +++ b/client/components/sidebar/sidebarArchives.js @@ -139,3 +139,12 @@ BlazeComponent.extendComponent({ ]; }, }).register('archivesSidebar'); + +Template.archivesSidebar.helpers({ + isWorker() { + const currentBoard = Boards.findOne(Session.get('currentBoard')); + return ( + !currentBoard.hasAdmin(this.userId) && currentBoard.hasWorker(this.userId) + ); + }, +}); diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index 1dc23c59..9b00d9e8 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -43,19 +43,20 @@ template(name="listsGroup") +addListForm template(name="addListForm") - .list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}") - .list-header-add - +inlinedForm(autoclose=false) - input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}" - autocomplete="off" autofocus) - .edit-controls.clearfix - button.primary.confirm(type="submit") {{_ 'save'}} - unless currentBoard.isTemplatesBoard - unless currentBoard.isTemplateBoard - span.quiet - | {{_ 'or'}} - a.js-list-template {{_ 'template'}} - else - a.open-list-composer.js-open-inlined-form - i.fa.fa-plus - | {{_ 'add-list'}} + unless currentUser.isWorker + .list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}") + .list-header-add + +inlinedForm(autoclose=false) + input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}" + autocomplete="off" autofocus) + .edit-controls.clearfix + button.primary.confirm(type="submit") {{_ 'save'}} + unless currentBoard.isTemplatesBoard + unless currentBoard.isTemplateBoard + span.quiet + | {{_ 'or'}} + a.js-list-template {{_ 'template'}} + else + a.open-list-composer.js-open-inlined-form + i.fa.fa-plus + | {{_ 'add-list'}} diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 6568036f..a379113d 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -94,7 +94,8 @@ function initSortable(boardComponent, $listsDom) { return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); } @@ -131,6 +132,15 @@ function initSortable(boardComponent, $listsDom) { // MultiSelection.isActive() || !userIsMember(), ); } + + $listsDom.sortable( + 'option', + 'disabled', + // Disable drag-dropping when user is not member + Meteor.user().isWorker(), + // Not disable drag-dropping while in multi-selection mode + // MultiSelection.isActive() || !userIsMember(), + ); }); } @@ -282,7 +292,8 @@ Template.swimlane.helpers({ return ( Meteor.user() && Meteor.user().isBoardMember() && - !Meteor.user().isCommentOnly() + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() ); }, }); diff --git a/client/components/users/userAvatar.jade b/client/components/users/userAvatar.jade index ff4a1ce6..7f2067ce 100644 --- a/client/components/users/userAvatar.jade +++ b/client/components/users/userAvatar.jade @@ -73,7 +73,8 @@ template(name="cardMemberPopup") p.quiet @{{ user.username }} ul.pop-over-list if currentUser.isNotCommentOnly - li: a.js-remove-member {{_ 'remove-member-from-card'}} + if currentUser.isNotWorker + li: a.js-remove-member {{_ 'remove-member-from-card'}} if $eq currentUser._id user._id with currentUser diff --git a/client/components/users/userHeader.jade b/client/components/users/userHeader.jade index aa567e91..9306d21d 100644 --- a/client/components/users/userHeader.jade +++ b/client/components/users/userHeader.jade @@ -39,12 +39,13 @@ template(name="memberMenuPopup") a.js-go-setting(href="{{pathFor 'setting'}}") i.fa.fa-lock | {{_ 'admin-panel'}} - hr - ul.pop-over-list - li - a(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}") - i.fa.fa-clone - | {{_ 'templates'}} + unless currentUser.isWorker + hr + ul.pop-over-list + li + a(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}") + i.fa.fa-clone + | {{_ 'templates'}} unless isSandstorm hr ul.pop-over-list @@ -109,13 +110,15 @@ template(name="changeSettingsPopup") | {{_ 'show-desktop-drag-handles'}} if showDesktopDragHandles i.fa.fa-check - li - label.bold - i.fa.fa-sort-numeric-asc - | {{_ 'show-cards-minimum-count'}} - input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="0" max="99" onkeydown="return false") - input.js-apply-show-cards-at.left(type="submit" value="{{_ 'apply'}}") + unless currentUser.isWorker + li + label.bold + i.fa.fa-sort-numeric-asc + | {{_ 'show-cards-minimum-count'}} + input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="0" max="99" onkeydown="return false") + input.js-apply-show-cards-at.left(type="submit" value="{{_ 'apply'}}") template(name="userDeletePopup") - p {{_ 'delete-user-confirm-popup'}} - button.js-confirm.negate.full(type="submit") {{_ 'delete'}} + unless currentUser.isWorker + p {{_ 'delete-user-confirm-popup'}} + button.js-confirm.negate.full(type="submit") {{_ 'delete'}} -- cgit v1.2.3-1-g7c22 From 8ce993921718f3e10c2daa5fabb145b939d789dd Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 6 Jan 2020 10:02:37 +0200 Subject: Fix: Unable to find Archive Card/List/Swimlane in board settings. Thanks to neobradley and xet7 ! Closes #2872 --- client/components/sidebar/sidebar.jade | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'client') diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index 19e32970..8e84cd61 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -165,12 +165,11 @@ template(name="outgoingWebhooksPopup") template(name="boardMenuPopup") ul.pop-over-list - if isNotWorker - li: a.js-custom-fields {{_ 'custom-fields'}} - li - a.js-open-archives - i.fa.fa-archive - | {{_ 'archived-items'}} + li: a.js-custom-fields {{_ 'custom-fields'}} + li + a.js-open-archives + i.fa.fa-archive + | {{_ 'archived-items'}} if currentUser.isBoardAdmin li a.js-change-board-color -- cgit v1.2.3-1-g7c22 From ddce0ada094e6450be260b4cda21fdfa09ae0133 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 6 Jan 2020 11:01:38 +0200 Subject: Removed Custom HTML feature that does not work. Thanks to xet7 ! Closes #2218 --- client/components/settings/settingBody.jade | 6 ------ client/components/settings/settingBody.js | 8 -------- 2 files changed, 14 deletions(-) (limited to 'client') diff --git a/client/components/settings/settingBody.jade b/client/components/settings/settingBody.jade index 877fe6e2..835a3b81 100644 --- a/client/components/settings/settingBody.jade +++ b/client/components/settings/settingBody.jade @@ -184,12 +184,6 @@ template(name='layoutSettings') .title {{_ 'custom-product-name'}} .form-group input.wekan-form-control#product-name(type="text", placeholder="" value="{{currentSetting.productName}}") - li.layout-form - .title {{_ 'add-custom-html-after-body-start'}} - textarea#customHTMLafterBodyStart.wekan-form-control= currentSetting.customHTMLafterBodyStart - li.layout-form - .title {{_ 'add-custom-html-before-body-end'}} - textarea#customHTMLbeforeBodyEnd.wekan-form-control= currentSetting.customHTMLbeforeBodyEnd li button.js-save-layout.primary {{_ 'save'}} diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js index 4ff5aedd..319c066b 100644 --- a/client/components/settings/settingBody.js +++ b/client/components/settings/settingBody.js @@ -171,20 +171,12 @@ BlazeComponent.extendComponent({ const displayAuthenticationMethod = $('input[name=displayAuthenticationMethod]:checked').val() === 'true'; const defaultAuthenticationMethod = $('#defaultAuthenticationMethod').val(); - const customHTMLafterBodyStart = $('#customHTMLafterBodyStart') - .val() - .trim(); - const customHTMLbeforeBodyEnd = $('#customHTMLbeforeBodyEnd') - .val() - .trim(); try { Settings.update(Settings.findOne()._id, { $set: { productName, hideLogo: hideLogoChange, - customHTMLafterBodyStart, - customHTMLbeforeBodyEnd, displayAuthenticationMethod, defaultAuthenticationMethod, }, -- cgit v1.2.3-1-g7c22 From 5058233509e44916296e38fb8a6c5dd591c46d8b Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 6 Jan 2020 20:12:35 +0200 Subject: Wider sidebar. Thanks to vjrj ! Closes #2218 --- client/components/sidebar/sidebar.styl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'client') diff --git a/client/components/sidebar/sidebar.styl b/client/components/sidebar/sidebar.styl index 740186b5..c1047277 100644 --- a/client/components/sidebar/sidebar.styl +++ b/client/components/sidebar/sidebar.styl @@ -109,7 +109,7 @@ color: darken(white, 40%) .board-sidebar - width: 248px + width: 548px right: -@width transition: top .1s, right .1s, width .1s -- cgit v1.2.3-1-g7c22 From d16a601c04aeb1d3550c5c541be02a67276a34cf Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Thu, 9 Jan 2020 23:22:27 +0200 Subject: More keyboard shortcuts: c for archive card Thanks to xet7 ! Related #1878 --- client/lib/keyboard.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'client') diff --git a/client/lib/keyboard.js b/client/lib/keyboard.js index d3f974be..da33f806 100755 --- a/client/lib/keyboard.js +++ b/client/lib/keyboard.js @@ -70,6 +70,30 @@ Mousetrap.bind('space', evt => { } }); +// XXX This shortcut should also work when hovering over a card in board view +Mousetrap.bind('c', evt => { + if (!Session.get('currentCard')) { + return; + } + + const currentUserId = Meteor.userId(); + if (currentUserId === null) { + return; + } + + if ( + Meteor.user().isBoardMember() && + !Meteor.user().isCommentOnly() && + !Meteor.user().isWorker() + ) { + const card = Cards.findOne(Session.get('currentCard')); + card.archive(); + // We should prevent scrolling in card when spacebar is clicked + // This should do it according to Mousetrap docs, but it doesn't + evt.preventDefault(); + } +}); + Template.keyboardShortcuts.helpers({ mapping: [ { @@ -104,5 +128,9 @@ Template.keyboardShortcuts.helpers({ keys: ['SPACE'], action: 'shortcut-assign-self', }, + { + keys: ['C'], + action: 'archive-card', + }, ], }); -- cgit v1.2.3-1-g7c22 From 5bece0dd1e8bb97d8ef07908179fb5735d097115 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 10 Jan 2020 04:09:40 +0200 Subject: Fix prettier. --- client/lib/textComplete.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'client') diff --git a/client/lib/textComplete.js b/client/lib/textComplete.js index 8b6dc1f7..e97d3853 100644 --- a/client/lib/textComplete.js +++ b/client/lib/textComplete.js @@ -48,6 +48,11 @@ $.fn.escapeableTextComplete = function(strategies, options, ...otherArgs) { return this; }; -EscapeActions.register('textcomplete', () => {}, () => dropdownMenuIsOpened, { - noClickEscapeOn: '.textcomplete-dropdown', -}); +EscapeActions.register( + 'textcomplete', + () => {}, + () => dropdownMenuIsOpened, + { + noClickEscapeOn: '.textcomplete-dropdown', + }, +); -- cgit v1.2.3-1-g7c22 From 3e2415631ffebeda6905323c3486bb85ce4b8bc7 Mon Sep 17 00:00:00 2001 From: tsia Date: Mon, 20 Jan 2020 11:23:08 +0100 Subject: Update header.styl --- client/components/main/header.styl | 3 +++ 1 file changed, 3 insertions(+) (limited to 'client') diff --git a/client/components/main/header.styl b/client/components/main/header.styl index e3c7618d..f77c2aca 100644 --- a/client/components/main/header.styl +++ b/client/components/main/header.styl @@ -218,6 +218,9 @@ padding: 10px margin: -10px 0 -10px -10px +.announcement .viewer + display: inline-block + .announcement, .offline-warning width: 100% -- cgit v1.2.3-1-g7c22 From 4b56bbfe6dd1c16ac8d2cc8da91dc55cff60177e Mon Sep 17 00:00:00 2001 From: Peter Verraedt Date: Wed, 22 Jan 2020 12:09:26 +0100 Subject: Add rule action to move cards to other boards Fixes #1996 --- client/components/rules/actions/boardActions.jade | 37 +++++++++++++++-------- client/components/rules/actions/boardActions.js | 30 +++++++++++++++--- 2 files changed, 50 insertions(+), 17 deletions(-) (limited to 'client') diff --git a/client/components/rules/actions/boardActions.jade b/client/components/rules/actions/boardActions.jade index 6034184c..fda15062 100644 --- a/client/components/rules/actions/boardActions.jade +++ b/client/components/rules/actions/boardActions.jade @@ -1,29 +1,42 @@ template(name="boardActions") div.trigger-item div.trigger-content - div.trigger-text + div.trigger-text | {{_'r-move-card-to'}} div.trigger-dropdown select(id="move-gen-action") option(value="top") {{_'r-top-of'}} option(value="bottom") {{_'r-bottom-of'}} - div.trigger-text + div.trigger-text | {{_'r-its-list'}} div.trigger-button.js-add-gen-move-action.js-goto-rules i.fa.fa-plus div.trigger-item div.trigger-content - div.trigger-text + div.trigger-text | {{_'r-move-card-to'}} div.trigger-dropdown select(id="move-spec-action") option(value="top") {{_'r-top-of'}} option(value="bottom") {{_'r-bottom-of'}} - div.trigger-text - | {{_'r-list'}} + div.trigger-text + | {{_'r-the-board'}} + div.trigger-dropdown + select(id="board-id") + each boards + if $eq _id currentBoard._id + option(value="{{_id}}" selected) {{_ 'current'}} + else + option(value="{{_id}}") {{title}} + div.trigger-text + | {{_'r-in-list'}} div.trigger-dropdown input(id="listName",type=text,placeholder="{{_'r-name'}}") + div.trigger-text + | {{_'r-in-swimlane'}} + div.trigger-dropdown + input(id="swimlaneName",type=text,placeholder="{{_'r-name'}}") div.trigger-button.js-add-spec-move-action.js-goto-rules i.fa.fa-plus @@ -33,14 +46,14 @@ template(name="boardActions") select(id="arch-action") option(value="archive") {{_'r-archive'}} option(value="unarchive") {{_'r-unarchive'}} - div.trigger-text + div.trigger-text | {{_'r-card'}} div.trigger-button.js-add-arch-action.js-goto-rules i.fa.fa-plus div.trigger-item div.trigger-content - div.trigger-text + div.trigger-text | {{_'r-add-swimlane'}} div.trigger-dropdown input(id="swimlane-name",type=text,placeholder="{{_'r-name'}}") @@ -49,15 +62,15 @@ template(name="boardActions") div.trigger-item div.trigger-content - div.trigger-text + div.trigger-text | {{_'r-create-card'}} div.trigger-dropdown input(id="card-name",type=text,placeholder="{{_'r-name'}}") - div.trigger-text + div.trigger-text | {{_'r-in-list'}} div.trigger-dropdown input(id="list-name",type=text,placeholder="{{_'r-name'}}") - div.trigger-text + div.trigger-text | {{_'r-in-swimlane'}} div.trigger-dropdown input(id="swimlane-name2",type=text,placeholder="{{_'r-name'}}") @@ -65,8 +78,8 @@ template(name="boardActions") i.fa.fa-plus - - + + diff --git a/client/components/rules/actions/boardActions.js b/client/components/rules/actions/boardActions.js index 8568d2bf..c2f2375a 100644 --- a/client/components/rules/actions/boardActions.js +++ b/client/components/rules/actions/boardActions.js @@ -1,6 +1,22 @@ BlazeComponent.extendComponent({ onCreated() {}, + boards() { + const boards = Boards.find( + { + archived: false, + 'members.userId': Meteor.userId(), + _id: { + $ne: Meteor.user().getTemplatesBoardId(), + }, + }, + { + sort: ['title'], + }, + ); + return boards; + }, + events() { return [ { @@ -52,15 +68,18 @@ BlazeComponent.extendComponent({ const ruleName = this.data().ruleName.get(); const trigger = this.data().triggerVar.get(); const actionSelected = this.find('#move-spec-action').value; - const listTitle = this.find('#listName').value; + const swimlaneName = this.find('#swimlaneName').value; + const listName = this.find('#listName').value; const boardId = Session.get('currentBoard'); + const destBoardId = this.find('#board-id').value; const desc = Utils.getTriggerActionDesc(event, this); if (actionSelected === 'top') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ actionType: 'moveCardToTop', - listTitle, - boardId, + listName, + swimlaneName, + boardId: destBoardId, desc, }); Rules.insert({ @@ -74,8 +93,9 @@ BlazeComponent.extendComponent({ const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ actionType: 'moveCardToBottom', - listTitle, - boardId, + listName, + swimlaneName, + boardId: destBoardId, desc, }); Rules.insert({ -- cgit v1.2.3-1-g7c22 From 0b00a8095ce34c753e5edac86d4b62e8aaa1b1e0 Mon Sep 17 00:00:00 2001 From: dollybean Date: Tue, 4 Feb 2020 02:28:45 -0800 Subject: Customize of some card's functions --- client/components/boards/boardHeader.js | 1 + client/components/cards/cardDetails.jade | 243 ++++++++++++---------- client/components/cards/cardDetails.js | 87 ++++++++ client/components/main/editor.js | 4 + client/components/rules/actions/boardActions.jade | 37 ++-- client/components/rules/actions/boardActions.js | 30 +-- client/components/sidebar/sidebar.jade | 29 +++ client/components/sidebar/sidebar.js | 125 +++++++++++ 8 files changed, 392 insertions(+), 164 deletions(-) (limited to 'client') diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index eea43bd3..8dea0f85 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -30,6 +30,7 @@ Template.boardMenuPopup.events({ 'click .js-outgoing-webhooks': Popup.open('outgoingWebhooks'), 'click .js-import-board': Popup.open('chooseBoardSource'), 'click .js-subtask-settings': Popup.open('boardSubtaskSettings'), + 'click .js-Date-settings': Popup.open('boardDateSettings') }); Template.boardMenuPopup.helpers({ diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index de4e102a..aec95486 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -8,10 +8,13 @@ template(name="cardDetails") a.fa.fa-times-thin.close-card-details.js-close-card-details if currentUser.isBoardMember a.fa.fa-navicon.card-details-menu.js-open-card-details-menu + input.inline-input(type="text" id="cardURL_copy" value="{{ absoluteUrl }}" autofocus="autofocus") + a.fa.fa-link.card-copy-button.js-copy-link if isMiniScreen a.fa.fa-times-thin.close-card-details-mobile-web.js-close-card-details if currentUser.isBoardMember a.fa.fa-navicon.card-details-menu-mobile-web.js-open-card-details-menu + a.fa.fa-link.card-copy-mobile-button h2.card-details-title.js-card-title( class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}") +viewer @@ -36,49 +39,41 @@ template(name="cardDetails") p.warning {{_ 'card-archived'}} .card-details-items - .card-details-item.card-details-item-received - h3 - i.fa.fa-sign-out - card-details-item-title {{_ 'card-received'}} - if getReceived - +cardReceivedDate - else - if canModifyCard - unless currentUser.isWorker - a.js-received-date {{_ 'add'}} - - .card-details-item.card-details-item-start - h3 - i.fa.fa-hourglass-start - card-details-item-title {{_ 'card-start'}} - if getStart - +cardStartDate - else - if canModifyCard - unless currentUser.isWorker - a.js-start-date {{_ 'add'}} - - .card-details-item.card-details-item-due - h3 - i.fa.fa-sign-in - card-details-item-title {{_ 'card-due'}} - if getDue - +cardDueDate - else - if canModifyCard - unless currentUser.isWorker - a.js-due-date {{_ 'add'}} - - .card-details-item.card-details-item-end - h3 - i.fa.fa-hourglass-end - card-details-item-title {{_ 'card-end'}} - if getEnd - +cardEndDate - else - if canModifyCard - unless currentUser.isWorker - a.js-end-date {{_ 'add'}} + if currentBoard.allowsReceivedDate + .card-details-item.card-details-item-received + h3 + i.fa.fa-sign-out + card-details-item-title {{_ 'card-received'}} + if getReceived + +cardReceivedDate + else + if canModifyCard + unless currentUser.isWorker + a.js-received-date {{_ 'add'}} + + if currentBoard.allowsStartDate + .card-details-item.card-details-item-start + h3 + i.fa.fa-hourglass-start + card-details-item-title {{_ 'card-start'}} + if getStart + +cardStartDate + else + if canModifyCard + unless currentUser.isWorker + a.js-start-date {{_ 'add'}} + + if currentBoard.allowsEndDate + .card-details-item.card-details-item-end + h3 + i.fa.fa-hourglass-end + card-details-item-title {{_ 'card-end'}} + if getEnd + +cardEndDate + else + if canModifyCard + unless currentUser.isWorker + a.js-end-date {{_ 'add'}} .card-details-items .card-details-item.card-details-item-members @@ -92,22 +87,34 @@ template(name="cardDetails") unless currentUser.isWorker a.member.add-member.card-details-item-add-button.js-add-members(title="{{_ 'card-members-title'}}") i.fa.fa-plus - - .card-details-item.card-details-item-assignees - h3 - i.fa.fa-user - card-details-item-title {{_ 'assignee'}} - each getAssignees - +userAvatarAssignee(userId=this cardId=../_id) - | {{! XXX Hack to hide syntaxic coloration /// }} - if canModifyCard - a.assignee.add-assignee.card-details-item-add-button.js-add-assignees(title="{{_ 'assignee'}}") - i.fa.fa-plus - if currentUser.isWorker - unless assigneeSelected + if currentBoard.allowsDueDate + .card-details-item.card-details-item-due + h3 + i.fa.fa-sign-in + card-details-item-title {{_ 'card-due'}} + if getDue + +cardDueDate + else + if canModifyCard + unless currentUser.isWorker + a.card-label.add-label.js-due-date + i.fa.fa-plus + + if assigngeeSelected + .card-details-item.card-details-item-assignees + h3 + i.fa.fa-user + card-details-item-title {{_ 'assignee'}} + each getAssignees + +userAvatarAssignee(userId=this cardId=../_id) + | {{! XXX Hack to hide syntaxic coloration /// }} + if canModifyCard a.assignee.add-assignee.card-details-item-add-button.js-add-assignees(title="{{_ 'assignee'}}") i.fa.fa-plus - + if currentUser.isWorker + unless assigneeSelected + a.assignee.add-assignee.card-details-item-add-button.js-add-assignees(title="{{_ 'assignee'}}") + i.fa.fa-plus .card-details-item.card-details-item-labels h3 @@ -143,9 +150,9 @@ template(name="cardDetails") //- XXX We should use "editable" to avoid repetiting ourselves if canModifyCard unless currentUser.isWorker - h3 - i.fa.fa-align-left - card-details-item-title {{_ 'description'}} + //h3 + //- i.fa.fa-align-left + //- card-details-item-title {{_ 'description'}} +inlinedCardDescription(classNames="card-description js-card-description") +editor(autofocus=true) | {{getUnsavedValue 'cardDescription' _id getDescription}} @@ -153,16 +160,16 @@ template(name="cardDetails") button.primary(type="submit") {{_ 'save'}} a.fa.fa-times-thin.js-close-inlined-form else - a.js-open-inlined-form + a.description-item.add-description.js-open-inlined-form if getDescription +viewer = getDescription else - | {{_ 'edit'}} + | {{_ 'addmore-detail'}} if (hasUnsavedValue 'cardDescription' _id) p.quiet | {{_ 'unsaved-description'}} - a.js-open-inlined-form {{_ 'view-it'}} + a.description-item.add-description.js-open-inlined-form {{_ 'view-it'}} = ' - ' a.js-close-inlined-form {{_ 'discard'}} else if getDescription @@ -171,57 +178,59 @@ template(name="cardDetails") = getDescription .card-details-items - .card-details-item.card-details-item-name - h3 - i.fa.fa-shopping-cart - card-details-item-title {{_ 'requested-by'}} - if canModifyCard - unless currentUser.isWorker - +inlinedForm(classNames="js-card-details-requester") - +editCardRequesterForm - else - a.js-open-inlined-form - if getRequestedBy - +viewer - = getRequestedBy - else - | {{_ 'add'}} - else if getRequestedBy - +viewer - = getRequestedBy - - .card-details-item.card-details-item-name - h3 - i.fa.fa-user-plus - card-details-item-title {{_ 'assigned-by'}} - if canModifyCard - unless currentUser.isWorker - +inlinedForm(classNames="js-card-details-assigner") - +editCardAssignerForm - else - a.js-open-inlined-form - if getAssignedBy - +viewer - = getAssignedBy - else - | {{_ 'add'}} - else if getRequestedBy - +viewer - = getAssignedBy - - hr - +checklists(cardId = _id) - - if currentBoard.allowsSubtasks - hr - +subtasks(cardId = _id) - - hr - h3 - i.fa.fa-paperclip - | {{_ 'attachments'}} + if requestBySelected + .card-details-item.card-details-item-name + h3 + i.fa.fa-shopping-cart + card-details-item-title {{_ 'requested-by'}} + if canModifyCard + unless currentUser.isWorker + +inlinedForm(classNames="js-card-details-requester") + +editCardRequesterForm + else + a.js-open-inlined-form + if getRequestedBy + +viewer + = getRequestedBy + else + | {{_ 'add'}} + else if getRequestedBy + +viewer + = getRequestedBy - +attachmentsGalery + if assigneeBySelected + .card-details-item.card-details-item-name + h3 + i.fa.fa-user-plus + card-details-item-title {{_ 'assigned-by'}} + if canModifyCard + unless currentUser.isWorker + +inlinedForm(classNames="js-card-details-assigner") + +editCardAssignerForm + else + a.js-open-inlined-form + if getAssignedBy + +viewer + = getAssignedBy + else + | {{_ 'add'}} + else if getRequestedBy + +viewer + = getAssignedBy + + .card-checklist-attachmentGalerys + .card-checklist-attachmentGalery.card-checklists + +checklists(cardId = _id) + if currentBoard.allowsSubtasks + hr + +subtasks(cardId = _id) + + //- hr + //- h3 + //- i.fa.fa-paperclip + //- | {{_ 'attachments'}} + .card-checklist-attachmentGalery.card-attachmentGalery + +attachmentsGalery hr unless currentUser.isNoComments @@ -239,7 +248,13 @@ template(name="cardDetails") label.toggle-label(for="toggleButton") if currentUser.isBoardMember unless currentUser.isNoComments - +commentForm + if canModifyCard + +inlinedForm(autoclose=false classNames="js-new-comment-form") + +commentForm + else + +userAvatar(userId=currentUser._id) + a.comment-item.add-comment.js-open-inlined-form + | {{_ 'Write Comment'}} unless currentUser.isNoComments if isLoaded.get if isLinkedCard diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index 07dcac44..231cbb10 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -279,6 +279,29 @@ BlazeComponent.extendComponent({ 'click .js-close-card-details'() { Utils.goBoardId(this.data().boardId); }, + 'click .js-copy-link'() { + StringToCopyElement = document.getElementById('cardURL_copy'); + StringToCopyElement.select(); + if (document.execCommand('copy')) { + StringToCopyElement.blur(); + } else { + document.getElementById('cardURL_copy').selectionStart = 0; + document.getElementById('cardURL_copy').selectionEnd = 999; + document.execCommand('copy'); + if (window.getSelection) { + if (window.getSelection().empty) { + // Chrome + window.getSelection().empty(); + } else if (window.getSelection().removeAllRanges) { + // Firefox + window.getSelection().removeAllRanges(); + } + } else if (document.selection) { + // IE? + document.selection.empty(); + } + } + }, 'click .js-open-card-details-menu': Popup.open('cardDetailsActions'), 'submit .js-card-description'(event) { event.preventDefault(); @@ -371,6 +394,54 @@ Template.cardDetails.helpers({ }); }, + receivedSelected() { + if (this.getReceived().length === 0) { + return false; + } else { + return true; + } + }, + + startSelected() { + if (this.getstart().length === 0) { + return false; + } else { + return true; + } + }, + + endSelected() { + if (this.getEnd().length === 0) { + return false; + } else { + return true; + } + }, + + dueSelected() { + if (this.getDue().length === 0) { + return false; + } else { + return true; + } + }, + + memberSelected() { + if (this.getMembers().length === 0) { + return false; + } else { + return true; + } + }, + + labelSelected() { + if (this.getLabels().length === 0) { + return false; + } else { + return true; + } + }, + assigneeSelected() { if (this.getAssignees().length === 0) { return false; @@ -379,6 +450,22 @@ Template.cardDetails.helpers({ } }, + requestBySelected() { + if (this.getRequestBy().length === 0) { + return false; + } else { + return true; + } + }, + + assigneeBySelected() { + if (this.getAssigneeBy().length === 0) { + return false; + } else { + return true; + } + }, + memberType() { const user = Users.findOne(this.userId); return user && user.isBoardAdmin() ? 'admin' : 'normal'; diff --git a/client/components/main/editor.js b/client/components/main/editor.js index 39c03aa9..6c5b72b7 100755 --- a/client/components/main/editor.js +++ b/client/components/main/editor.js @@ -120,6 +120,10 @@ Template.editor.onRendered(() => { autosize($textarea); $textarea.escapeableTextComplete(mentions); }; +<<<<<<< HEAD +======= + +>>>>>>> ac37e360b69b799c12f03e1c158cfc0367d26e55 if (Meteor.settings.public.RICHER_CARD_COMMENT_EDITOR !== false) { const isSmall = Utils.isMiniScreen(); const toolbar = isSmall diff --git a/client/components/rules/actions/boardActions.jade b/client/components/rules/actions/boardActions.jade index fda15062..6034184c 100644 --- a/client/components/rules/actions/boardActions.jade +++ b/client/components/rules/actions/boardActions.jade @@ -1,42 +1,29 @@ template(name="boardActions") div.trigger-item div.trigger-content - div.trigger-text + div.trigger-text | {{_'r-move-card-to'}} div.trigger-dropdown select(id="move-gen-action") option(value="top") {{_'r-top-of'}} option(value="bottom") {{_'r-bottom-of'}} - div.trigger-text + div.trigger-text | {{_'r-its-list'}} div.trigger-button.js-add-gen-move-action.js-goto-rules i.fa.fa-plus div.trigger-item div.trigger-content - div.trigger-text + div.trigger-text | {{_'r-move-card-to'}} div.trigger-dropdown select(id="move-spec-action") option(value="top") {{_'r-top-of'}} option(value="bottom") {{_'r-bottom-of'}} - div.trigger-text - | {{_'r-the-board'}} - div.trigger-dropdown - select(id="board-id") - each boards - if $eq _id currentBoard._id - option(value="{{_id}}" selected) {{_ 'current'}} - else - option(value="{{_id}}") {{title}} - div.trigger-text - | {{_'r-in-list'}} + div.trigger-text + | {{_'r-list'}} div.trigger-dropdown input(id="listName",type=text,placeholder="{{_'r-name'}}") - div.trigger-text - | {{_'r-in-swimlane'}} - div.trigger-dropdown - input(id="swimlaneName",type=text,placeholder="{{_'r-name'}}") div.trigger-button.js-add-spec-move-action.js-goto-rules i.fa.fa-plus @@ -46,14 +33,14 @@ template(name="boardActions") select(id="arch-action") option(value="archive") {{_'r-archive'}} option(value="unarchive") {{_'r-unarchive'}} - div.trigger-text + div.trigger-text | {{_'r-card'}} div.trigger-button.js-add-arch-action.js-goto-rules i.fa.fa-plus div.trigger-item div.trigger-content - div.trigger-text + div.trigger-text | {{_'r-add-swimlane'}} div.trigger-dropdown input(id="swimlane-name",type=text,placeholder="{{_'r-name'}}") @@ -62,15 +49,15 @@ template(name="boardActions") div.trigger-item div.trigger-content - div.trigger-text + div.trigger-text | {{_'r-create-card'}} div.trigger-dropdown input(id="card-name",type=text,placeholder="{{_'r-name'}}") - div.trigger-text + div.trigger-text | {{_'r-in-list'}} div.trigger-dropdown input(id="list-name",type=text,placeholder="{{_'r-name'}}") - div.trigger-text + div.trigger-text | {{_'r-in-swimlane'}} div.trigger-dropdown input(id="swimlane-name2",type=text,placeholder="{{_'r-name'}}") @@ -78,8 +65,8 @@ template(name="boardActions") i.fa.fa-plus - - + + diff --git a/client/components/rules/actions/boardActions.js b/client/components/rules/actions/boardActions.js index c2f2375a..8568d2bf 100644 --- a/client/components/rules/actions/boardActions.js +++ b/client/components/rules/actions/boardActions.js @@ -1,22 +1,6 @@ BlazeComponent.extendComponent({ onCreated() {}, - boards() { - const boards = Boards.find( - { - archived: false, - 'members.userId': Meteor.userId(), - _id: { - $ne: Meteor.user().getTemplatesBoardId(), - }, - }, - { - sort: ['title'], - }, - ); - return boards; - }, - events() { return [ { @@ -68,18 +52,15 @@ BlazeComponent.extendComponent({ const ruleName = this.data().ruleName.get(); const trigger = this.data().triggerVar.get(); const actionSelected = this.find('#move-spec-action').value; - const swimlaneName = this.find('#swimlaneName').value; - const listName = this.find('#listName').value; + const listTitle = this.find('#listName').value; const boardId = Session.get('currentBoard'); - const destBoardId = this.find('#board-id').value; const desc = Utils.getTriggerActionDesc(event, this); if (actionSelected === 'top') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ actionType: 'moveCardToTop', - listName, - swimlaneName, - boardId: destBoardId, + listTitle, + boardId, desc, }); Rules.insert({ @@ -93,9 +74,8 @@ BlazeComponent.extendComponent({ const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ actionType: 'moveCardToBottom', - listName, - swimlaneName, - boardId: destBoardId, + listTitle, + boardId, desc, }); Rules.insert({ diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index 8e84cd61..fc5ff3a6 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -72,6 +72,25 @@ template(name="boardChangeColorPopup") if isSelected i.fa.fa-check +template(name="boardDateSettingsPopup") + form.board-Date-settings + div.check-div + a.flex.js-field-has-receiveddate(class="{{#if allowsReceivedDate}}is-checked{{/if}}") + .materialCheckBox(class="{{#if allowsReceivedDate}}is-checked{{/if}}") + span {{_ 'show-receiveddate-field'}} + div.check-div + a.flex.js-field-has-startdate(class="{{#if allowsStartDate}}is-checked{{/if}}") + .materialCheckBox(class="{{#if allowsStartDate}}is-checked{{/if}}") + span {{_ 'show-startdate-field'}} + div.check-div + a.flex.js-field-has-enddate(class="{{#if allowsEndDate}}is-checked{{/if}}") + .materialCheckBox(class="{{#if allowsEndDate}}is-checked{{/if}}") + span {{_ 'show-enddate-field'}} + div.check-div + a.flex.js-field-has-duedate(class="{{#if allowsDueDate}}is-checked{{/if}}") + .materialCheckBox(class="{{#if allowsDueDate}}is-checked{{/if}}") + span {{_ 'show-duedate-field'}} + template(name="boardSubtaskSettingsPopup") form.board-subtask-settings h3 {{_ 'show-parent-in-minicard'}} @@ -201,6 +220,10 @@ template(name="boardMenuPopup") a.js-subtask-settings i.fa.fa-sitemap | {{_ 'subtask-settings'}} + li + a.js-Date-settings + i.fa.fa-calendar + | {{_ 'Date-settings'}} unless currentBoard.isTemplatesBoard hr ul.pop-over-list @@ -238,6 +261,12 @@ template(name="boardMenuPopup") a.js-subtask-settings i.fa.fa-sitemap | {{_ 'subtask-settings'}} + hr + ul.pop-over-list + li + a.js-Date-settings + i.fa.fa-calendar + | {{_ 'Date-settings'}} template(name="labelsWidget") .board-widget.board-widget-labels diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index e8f38b8c..d909a8ae 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -208,6 +208,7 @@ Template.boardMenuPopup.events({ 'click .js-outgoing-webhooks': Popup.open('outgoingWebhooks'), 'click .js-import-board': Popup.open('chooseBoardSource'), 'click .js-subtask-settings': Popup.open('boardSubtaskSettings'), + 'click .js-Date-settings': Popup.open('boardDateSettings') }); Template.boardMenuPopup.helpers({ @@ -585,6 +586,130 @@ BlazeComponent.extendComponent({ }, }).register('boardSubtaskSettingsPopup'); +BlazeComponent.extendComponent({ + onCreated(){ + this.currentBoard = Boards.findOne(Session.get('currentBoard')); + }, + + allowsReceivedDate(){ + return this.currentBoard.allowsReceivedDate; + }, + + allowsStartDate(){ + return this.currentBoard.allowsStartDate; + }, + + allowsEndDate(){ + return this.currentBoard.allowsEndDate; + }, + + allowsDueDate(){ + return this.currentBoard.allowsDueDate; + }, + + isBoardSelected(){ + return this.currentBoard.dateSettingsDefaultBoardID + }, + + isNullBoardSelected() { + return ( + this.currentBoard.dateSettingsDefaultBoardId === null || + this.currentBoard.dateSettingsDefaultBoardId === undefined + ); + }, + + boards() { + return Boards.find( + { + archived: false, + 'members.userId': Meteor.userId(), + }, + { + sort: ['title'], + }, + ); + }, + + lists() { + return Lists.find( + { + boardId: this.currentBoard._id, + archived: false, + }, + { + sort: ['title'], + }, + ); + }, + + hasLists() { + return this.lists().count() > 0; + }, + + isListSelected() { + return this.currentBoard.dateSettingsDefaultBoardId === this.currentData()._id; + }, + + events() { + return [ + { + 'click .js-field-has-receiveddate'(evt) { + evt.preventDefault(); + this.currentBoard.allowsReceivedDate = !this.currentBoard.allowsReceivedDate; + this.currentBoard.setAllowsReceivedDate(this.currentBoard.allowsReceivedDate); + $(`.js-field-has-receiveddate ${MCB}`).toggleClass( + CKCLS, + this.currentBoard.allowsReceivedDate, + ); + $('.js-field-has-receiveddate').toggleClass( + CKCLS, + this.currentBoard.allowsReceivedDate, + ); + }, + 'click .js-field-has-startdate'(evt) { + evt.preventDefault(); + this.currentBoard.allowsStartDate = !this.currentBoard.allowsStartDate; + this.currentBoard.setAllowsStartDate(this.currentBoard.allowsStartDate); + $(`.js-field-has-startdate ${MCB}`).toggleClass( + CKCLS, + this.currentBoard.allowsStartDate, + ); + $('.js-field-has-startdate').toggleClass( + CKCLS, + this.currentBoard.allowsStartDate, + ); + }, + 'click .js-field-has-enddate'(evt) { + evt.preventDefault(); + this.currentBoard.allowsEndDate = !this.currentBoard.allowsEndDate; + this.currentBoard.setAllowsEndDate(this.currentBoard.allowsEndDate); + $(`.js-field-has-enddate ${MCB}`).toggleClass( + CKCLS, + this.currentBoard.allowsEndDate, + ); + $('.js-field-has-enddate').toggleClass( + CKCLS, + this.currentBoard.allowsEndDate, + ); + }, + 'click .js-field-has-duedate'(evt) { + evt.preventDefault(); + this.currentBoard.allowsDueDate = !this.currentBoard.allowsDueDate; + this.currentBoard.setAllowsDueDate(this.currentBoard.allowsDueDate); + $(`.js-field-has-duedate ${MCB}`).toggleClass( + CKCLS, + this.currentBoard.allowsDueDate, + ); + $('.js-field-has-duedate').toggleClass( + CKCLS, + this.currentBoard.allowsDueDate, + ); + }, + }, + ]; + }, +}).register('boardDateSettingsPopup'); + BlazeComponent.extendComponent({ onCreated() { this.error = new ReactiveVar(''); -- cgit v1.2.3-1-g7c22 From 13506945388be72b65df630eb71aee9b026c1472 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 5 Feb 2020 01:18:01 +0200 Subject: Add Board Card Settings to Show on Card only some of it's fields. Default WYSIWYG comment editor not enabled, use markdown instead. --- client/components/boards/boardHeader.js | 2 +- client/components/sidebar/sidebar.js | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'client') diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index 8ab117f6..9040ed83 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -30,7 +30,7 @@ Template.boardMenuPopup.events({ 'click .js-outgoing-webhooks': Popup.open('outgoingWebhooks'), 'click .js-import-board': Popup.open('chooseBoardSource'), 'click .js-subtask-settings': Popup.open('boardSubtaskSettings'), - 'click .js-card-settings': Popup.open('boardCardSettings') + 'click .js-card-settings': Popup.open('boardCardSettings'), }); Template.boardMenuPopup.helpers({ diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index 678c16d2..4de7aa80 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -794,8 +794,11 @@ BlazeComponent.extendComponent({ }, 'click .js-field-has-assigned-by'(evt) { evt.preventDefault(); - this.currentBoard.allowsAssignedBy = !this.currentBoard.allowsAssignedBy; - this.currentBoard.setAllowsAssignedBy(this.currentBoard.allowsAssignedBy); + this.currentBoard.allowsAssignedBy = !this.currentBoard + .allowsAssignedBy; + this.currentBoard.setAllowsAssignedBy( + this.currentBoard.allowsAssignedBy, + ); $(`.js-field-has-assigned-by ${MCB}`).toggleClass( CKCLS, this.currentBoard.allowsAssignedBy, @@ -807,8 +810,11 @@ BlazeComponent.extendComponent({ }, 'click .js-field-has-requested-by'(evt) { evt.preventDefault(); - this.currentBoard.allowsRequestedBy = !this.currentBoard.allowsRequestedBy; - this.currentBoard.setAllowsRequestedBy(this.currentBoard.allowsRequestedBy); + this.currentBoard.allowsRequestedBy = !this.currentBoard + .allowsRequestedBy; + this.currentBoard.setAllowsRequestedBy( + this.currentBoard.allowsRequestedBy, + ); $(`.js-field-has-requested-by ${MCB}`).toggleClass( CKCLS, this.currentBoard.allowsRequestedBy, -- cgit v1.2.3-1-g7c22 From f22785dbcde42e425c9ead209ec224aef6e11c16 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 5 Feb 2020 19:47:08 +0200 Subject: - Fix adding comments. - Added some working layout changes from https://github.com/wekan/wekan/pull/2920. - Fixed Card Settings not working at Sandstorm. Thanks to 2020product xet7 ! Closes #2918, closes https://github.com/wekan/wekan/pull/2920 --- client/components/activities/activities.styl | 2 +- client/components/activities/comments.styl | 20 ++++++++++++++++++++ client/components/cards/cardDetails.jade | 25 +++++++++++-------------- client/components/sidebar/sidebar.jade | 12 ++++++------ 4 files changed, 38 insertions(+), 21 deletions(-) (limited to 'client') diff --git a/client/components/activities/activities.styl b/client/components/activities/activities.styl index 380e7b40..f3b1acdd 100644 --- a/client/components/activities/activities.styl +++ b/client/components/activities/activities.styl @@ -9,7 +9,7 @@ clear: both .activity - margin: 10px 0 + margin: 0.5px 0 display: flex .member diff --git a/client/components/activities/comments.styl b/client/components/activities/comments.styl index 22f9c482..ccf24b72 100644 --- a/client/components/activities/comments.styl +++ b/client/components/activities/comments.styl @@ -46,3 +46,23 @@ &:is-open cursor: auto + +.comment-item + background-color: #fff + border: 0 + box-shadow: 0 1px 2px rgba(0, 0, 0, .23) + color: #8c8c8c + height: 36px + margin: 4px 4px 6px 0 + width: 92% + + &:hover + background: darken(white, 12%) + + &.add-comment + display: flex + margin: 5px + + a + display: block + margin: auto diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 41ab8ca2..7a6ca7cf 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -9,7 +9,10 @@ template(name="cardDetails") if currentUser.isBoardMember a.fa.fa-navicon.card-details-menu.js-open-card-details-menu input.inline-input(type="hidden" id="cardURL_copy" value="{{ absoluteUrl }}") - a.fa.fa-link.card-copy-button.js-copy-link + a.fa.card-copy-button.js-copy-link( + class="fa-link" + title="{{_ 'copy-card-link-to-clipboard'}}" + ) if isMiniScreen a.fa.fa-times-thin.close-card-details-mobile-web.js-close-card-details if currentUser.isBoardMember @@ -157,9 +160,9 @@ template(name="cardDetails") //- XXX We should use "editable" to avoid repetiting ourselves if canModifyCard unless currentUser.isWorker - //h3 - // i.fa.fa-align-left - // card-details-item-title {{_ 'description'}} + h3 + i.fa.fa-align-left + card-details-item-title {{_ 'description'}} +inlinedCardDescription(classNames="card-description js-card-description") +editor(autofocus=true) | {{getUnsavedValue 'cardDescription' _id getDescription}} @@ -167,16 +170,16 @@ template(name="cardDetails") button.primary(type="submit") {{_ 'save'}} a.fa.fa-times-thin.js-close-inlined-form else - a.description-item.add-description.js-open-inlined-form + a.js-open-inlined-form if getDescription +viewer = getDescription else - | {{_ 'addmore-detail'}} + | {{_ 'edit'}} if (hasUnsavedValue 'cardDescription' _id) p.quiet | {{_ 'unsaved-description'}} - a.description-item.add-description.js-open-inlined-form {{_ 'view-it'}} + a.js-open-inlined-form {{_ 'view-it'}} = ' - ' a.js-close-inlined-form {{_ 'discard'}} else if getDescription @@ -257,13 +260,7 @@ template(name="cardDetails") if currentBoard.allowsComments if currentUser.isBoardMember unless currentUser.isNoComments - if canModifyCard - +inlinedForm(autoclose=false classNames="js-new-comment-form") - +commentForm - else - +userAvatar(userId=currentUser._id) - a.comment-item.add-comment.js-open-inlined-form - | {{_ 'Write Comment'}} + +commentForm unless currentUser.isNoComments if isLoaded.get if isLinkedCard diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index fe0810a5..51b09d72 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -321,15 +321,15 @@ template(name="boardMenuPopup") hr ul.pop-over-list li - a.js-subtask-settings - i.fa.fa-sitemap - | {{_ 'subtask-settings'}} + a.js-card-settings + i.fa.fa-id-card-o + | {{_ 'card-settings'}} hr ul.pop-over-list li - a.js-Date-settings - i.fa.fa-calendar - | {{_ 'Date-settings'}} + a.js-subtask-settings + i.fa.fa-sitemap + | {{_ 'subtask-settings'}} template(name="labelsWidget") .board-widget.board-widget-labels -- cgit v1.2.3-1-g7c22 From bf78b093bad7d463ee325ad96e8b485264d4a3be Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 7 Feb 2020 03:16:16 +0200 Subject: Try to disable dragging Swimlanes/Lists/Cards/Checklists/Subtasks on small mobile smartphones webbrowsers, and hide drag handles on mobile web. Thanks to xet7 ! --- client/components/boards/boardBody.js | 10 ++++------ client/components/cards/cardDetails.js | 6 ++++++ client/components/cards/checklists.js | 3 +++ client/components/cards/minicard.jade | 4 ++-- client/components/lists/list.js | 25 +++++++++++++++++++++--- client/components/lists/listHeader.jade | 4 ++-- client/components/swimlanes/swimlanes.js | 33 ++++++++++++++++++++++---------- client/lib/utils.js | 30 +++++++++++++++++++++++++++++ 8 files changed, 92 insertions(+), 23 deletions(-) (limited to 'client') diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js index 55b8c0a1..e70a9f67 100644 --- a/client/components/boards/boardBody.js +++ b/client/components/boards/boardBody.js @@ -205,21 +205,19 @@ BlazeComponent.extendComponent({ } else { showDesktopDragHandles = false; } - if ( - Utils.isMiniScreen() || - (!Utils.isMiniScreen() && showDesktopDragHandles) - ) { + if (!Utils.isMiniScreen() && showDesktopDragHandles) { $swimlanesDom.sortable({ handle: '.js-swimlane-header-handle', }); - } else { + } else if (!Utils.isMiniScreen() && !showDesktopDragHandles) { $swimlanesDom.sortable({ handle: '.swimlane-header', }); } - // Disable drag-dropping if the current user is not a board member or is comment only + // Disable drag-dropping if the current user is not a board member or is miniscreen $swimlanesDom.sortable('option', 'disabled', !userIsMember()); + $swimlanesDom.sortable('option', 'disabled', Utils.isMiniScreen()); }); function userIsMember() { diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index 92edec38..5fdc5579 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -253,6 +253,12 @@ BlazeComponent.extendComponent({ if ($subtasksDom.data('sortable')) { $subtasksDom.sortable('option', 'disabled', !userIsMember()); } + if ($checklistsDom.data('sortable')) { + $checklistsDom.sortable('option', 'disabled', Utils.isMiniScreen()); + } + if ($subtasksDom.data('sortable')) { + $subtasksDom.sortable('option', 'disabled', Utils.isMiniScreen()); + } }); }, diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index 27d1b1c9..c88fdd82 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -60,6 +60,9 @@ BlazeComponent.extendComponent({ if ($itemsDom.data('sortable')) { $(self.itemsDom).sortable('option', 'disabled', !userIsMember()); } + if ($itemsDom.data('sortable')) { + $(self.itemsDom).sortable('option', 'disabled', Utils.isMiniScreen()); + } }); }, diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade index 7dd220ee..a895c0a3 100644 --- a/client/components/cards/minicard.jade +++ b/client/components/cards/minicard.jade @@ -4,8 +4,8 @@ template(name="minicard") class="{{#if isLinkedBoard}}linked-board{{/if}}" class="minicard-{{colorClass}}") if isMiniScreen - .handle - .fa.fa-arrows + //.handle + // .fa.fa-arrows unless isMiniScreen if showDesktopDragHandles .handle diff --git a/client/components/lists/list.js b/client/components/lists/list.js index 0513f90f..8574caf7 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -133,14 +133,33 @@ BlazeComponent.extendComponent({ $cards.sortable({ handle: '.handle', }); - } else { + } else if (!Utils.isMiniScreen() && !showDesktopDragHandles) { $cards.sortable({ handle: '.minicard', }); } - // Disable drag-dropping if the current user is not a board member or is comment only - $cards.sortable('option', 'disabled', !userIsMember()); + if ($cards.data('sortable')) { + $cards.sortable( + 'option', + 'disabled', + // Disable drag-dropping when user is not member/is miniscreen + !userIsMember(), + // Not disable drag-dropping while in multi-selection mode + // MultiSelection.isActive() || !userIsMember(), + ); + } + + if ($cards.data('sortable')) { + $cards.sortable( + 'option', + 'disabled', + // Disable drag-dropping when user is not member/is miniscreen + Utils.isMiniScreen(), + // Not disable drag-dropping while in multi-selection mode + // MultiSelection.isActive() || !userIsMember(), + ); + } }); // We want to re-run this function any time a card is added. diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index ec2c556f..182fee9e 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -30,10 +30,10 @@ template(name="listHeader") if canSeeAddCard a.js-add-card.fa.fa-plus.list-header-plus-icon a.fa.fa-navicon.js-open-list-menu - a.list-header-handle.handle.fa.fa-arrows.js-list-handle + //a.list-header-handle.handle.fa.fa-arrows.js-list-handle else a.list-header-menu-icon.fa.fa-angle-right.js-select-list - a.list-header-handle.handle.fa.fa-arrows.js-list-handle + //a.list-header-handle.handle.fa.fa-arrows.js-list-handle else if currentUser.isBoardMember if isWatching i.list-header-watch-icon.fa.fa-eye diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index a379113d..b7a55ce6 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -115,7 +115,7 @@ function initSortable(boardComponent, $listsDom) { $listsDom.sortable({ handle: '.js-list-handle', }); - } else { + } else if (!Utils.isMiniScreen() && !showDesktopDragHandles) { $listsDom.sortable({ handle: '.js-list-header', }); @@ -126,21 +126,34 @@ function initSortable(boardComponent, $listsDom) { $listsDom.sortable( 'option', 'disabled', - // Disable drag-dropping when user is not member + // Disable drag-dropping when user is not member/is worker/is miniscreen !userIsMember(), // Not disable drag-dropping while in multi-selection mode // MultiSelection.isActive() || !userIsMember(), ); } - $listsDom.sortable( - 'option', - 'disabled', - // Disable drag-dropping when user is not member - Meteor.user().isWorker(), - // Not disable drag-dropping while in multi-selection mode - // MultiSelection.isActive() || !userIsMember(), - ); + if ($listDom.data('sortable')) { + $listsDom.sortable( + 'option', + 'disabled', + // Disable drag-dropping when user is not member/is worker/is miniscreen + Meteor.user().isWorker(), + // Not disable drag-dropping while in multi-selection mode + // MultiSelection.isActive() || !userIsMember(), + ); + } + + if ($listDom.data('sortable')) { + $listsDom.sortable( + 'option', + 'disabled', + // Disable drag-dropping when user is not member/is worker/is miniscreen + Utils.isMiniScreen(), + // Not disable drag-dropping while in multi-selection mode + // MultiSelection.isActive() || !userIsMember(), + ); + } }); } diff --git a/client/lib/utils.js b/client/lib/utils.js index 39457208..c921fddc 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -147,8 +147,38 @@ Utils = { // in a small window (even on desktop), Wekan run in compact mode. // we can easily debug with a small window of desktop browser. :-) isMiniScreen() { + // OLD WINDOW WIDTH DETECTION: this.windowResizeDep.depend(); return $(window).width() <= 800; + + // NEW TOUCH DEVICE DETECTION: + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent + + /* + var hasTouchScreen = false; + if ("maxTouchPoints" in navigator) { + hasTouchScreen = navigator.maxTouchPoints > 0; + } else if ("msMaxTouchPoints" in navigator) { + hasTouchScreen = navigator.msMaxTouchPoints > 0; + } else { + var mQ = window.matchMedia && matchMedia("(pointer:coarse)"); + if (mQ && mQ.media === "(pointer:coarse)") { + hasTouchScreen = !!mQ.matches; + } else if ('orientation' in window) { + hasTouchScreen = true; // deprecated, but good fallback + } else { + // Only as a last resort, fall back to user agent sniffing + var UA = navigator.userAgent; + hasTouchScreen = ( + /\b(BlackBerry|webOS|iPhone|IEMobile)\b/i.test(UA) || + /\b(Android|Windows Phone|iPad|iPod)\b/i.test(UA) + ); + } + } + */ + //if (hasTouchScreen) + // document.getElementById("exampleButton").style.padding="1em"; + //return false; }, calculateIndexData(prevData, nextData, nItems = 1) { -- cgit v1.2.3-1-g7c22 From 2fce02afbced07c6ff2b05786f159701c8b559e9 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 7 Feb 2020 13:58:43 +0200 Subject: Add Feature: Card Settings/Show on card/Activities. Fix: When in Card Settings hiding Comments, only adding new comment is hidden, not old comments. Thanks to xet7 ! Closes #2925 --- client/components/activities/activities.jade | 388 ++++++++++++++------------- client/components/cards/cardDetails.jade | 17 +- client/components/sidebar/sidebar.jade | 6 + client/components/sidebar/sidebar.js | 16 ++ 4 files changed, 226 insertions(+), 201 deletions(-) (limited to 'client') diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index deb73072..d7eff885 100644 --- a/client/components/activities/activities.jade +++ b/client/components/activities/activities.jade @@ -8,234 +8,236 @@ template(name="activities") +cardActivities template(name="boardActivities") - each currentBoard.activities - .activity - +userAvatar(userId=user._id) - p.activity-desc - +memberName(user=user) + if currentBoard.allowsActivities + each currentBoard.activities + .activity + +userAvatar(userId=user._id) + p.activity-desc + +memberName(user=user) - if($eq activityType 'deleteAttachment') - | {{{_ 'activity-delete-attach' cardLink}}}. + if($eq activityType 'deleteAttachment') + | {{{_ 'activity-delete-attach' cardLink}}}. - if($eq activityType 'addAttachment') - | {{{_ 'activity-attached' attachmentLink cardLink}}}. + if($eq activityType 'addAttachment') + | {{{_ 'activity-attached' attachmentLink cardLink}}}. - if($eq activityType 'addBoardMember') - | {{{_ 'activity-added' memberLink boardLabel}}}. + if($eq activityType 'addBoardMember') + | {{{_ 'activity-added' memberLink boardLabel}}}. - if($eq activityType 'addComment') - | {{{_ 'activity-on' cardLink}}} - a.activity-comment(href="{{ card.absoluteUrl }}") - +viewer - = comment.text + if($eq activityType 'addComment') + | {{{_ 'activity-on' cardLink}}} + a.activity-comment(href="{{ card.absoluteUrl }}") + +viewer + = comment.text - if($eq activityType 'addChecklist') - | {{{_ 'activity-checklist-added' cardLink}}}. - .activity-checklist(href="{{ card.absoluteUrl }}") - +viewer - = checklist.title - if($eq activityType 'removeChecklist') - | {{{_ 'activity-checklist-removed' cardLink}}}. + if($eq activityType 'addChecklist') + | {{{_ 'activity-checklist-added' cardLink}}}. + .activity-checklist(href="{{ card.absoluteUrl }}") + +viewer + = checklist.title + if($eq activityType 'removeChecklist') + | {{{_ 'activity-checklist-removed' cardLink}}}. - if($eq activityType 'checkedItem') - | {{{_ 'activity-checked-item' checkItem checklist.title cardLink}}}. + if($eq activityType 'checkedItem') + | {{{_ 'activity-checked-item' checkItem checklist.title cardLink}}}. - if($eq activityType 'uncheckedItem') - | {{{_ 'activity-unchecked-item' checkItem checklist.title cardLink}}}. + if($eq activityType 'uncheckedItem') + | {{{_ 'activity-unchecked-item' checkItem checklist.title cardLink}}}. - if($eq activityType 'checklistCompleted') - | {{{_ 'activity-checklist-completed' checklist.title cardLink}}}. + if($eq activityType 'checklistCompleted') + | {{{_ 'activity-checklist-completed' checklist.title cardLink}}}. - if($eq activityType 'checklistUncompleted') - | {{{_ 'activity-checklist-uncompleted' checklist.title cardLink}}}. + if($eq activityType 'checklistUncompleted') + | {{{_ 'activity-checklist-uncompleted' checklist.title cardLink}}}. - if($eq activityType 'addChecklistItem') - | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}. - .activity-checklist(href="{{ card.absoluteUrl }}") - +viewer - = checklistItem.title - if($eq activityType 'removedChecklistItem') - | {{{_ 'activity-checklist-item-removed' checklist.title cardLink}}}. + if($eq activityType 'addChecklistItem') + | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}. + .activity-checklist(href="{{ card.absoluteUrl }}") + +viewer + = checklistItem.title + if($eq activityType 'removedChecklistItem') + | {{{_ 'activity-checklist-item-removed' checklist.title cardLink}}}. - if($eq activityType 'archivedCard') - | {{{_ 'activity-archived' cardLink}}}. + if($eq activityType 'archivedCard') + | {{{_ 'activity-archived' cardLink}}}. - if($eq activityType 'archivedList') - | {{_ 'activity-archived' list.title}}. + if($eq activityType 'archivedList') + | {{_ 'activity-archived' list.title}}. - if($eq activityType 'archivedSwimlane') - | {{_ 'activity-archived' swimlane.title}}. + if($eq activityType 'archivedSwimlane') + | {{_ 'activity-archived' swimlane.title}}. - if($eq activityType 'createBoard') - | {{_ 'activity-created' boardLabel}}. + if($eq activityType 'createBoard') + | {{_ 'activity-created' boardLabel}}. - if($eq activityType 'createCard') - | {{{_ 'activity-added' cardLink boardLabel}}}. + if($eq activityType 'createCard') + | {{{_ 'activity-added' cardLink boardLabel}}}. - if($eq activityType 'createCustomField') - | {{_ 'activity-customfield-created' customField}}. + if($eq activityType 'createCustomField') + | {{_ 'activity-customfield-created' customField}}. - if($eq activityType 'createList') - | {{_ 'activity-added' list.title boardLabel}}. + if($eq activityType 'createList') + | {{_ 'activity-added' list.title boardLabel}}. - if($eq activityType 'createSwimlane') - | {{_ 'activity-added' swimlane.title boardLabel}}. + if($eq activityType 'createSwimlane') + | {{_ 'activity-added' swimlane.title boardLabel}}. - if($eq activityType 'removeList') - | {{_ 'activity-removed' title boardLabel}}. + if($eq activityType 'removeList') + | {{_ 'activity-removed' title boardLabel}}. - if($eq activityType 'importBoard') - | {{{_ 'activity-imported-board' boardLabel sourceLink}}}. + if($eq activityType 'importBoard') + | {{{_ 'activity-imported-board' boardLabel sourceLink}}}. - if($eq activityType 'importCard') - | {{{_ 'activity-imported' cardLink boardLabel sourceLink}}}. + if($eq activityType 'importCard') + | {{{_ 'activity-imported' cardLink boardLabel sourceLink}}}. - if($eq activityType 'importList') - | {{{_ 'activity-imported' listLabel boardLabel sourceLink}}}. + if($eq activityType 'importList') + | {{{_ 'activity-imported' listLabel boardLabel sourceLink}}}. - if($eq activityType 'joinMember') - if($eq user._id member._id) - | {{{_ 'activity-joined' cardLink}}}. - else - | {{{_ 'activity-added' memberLink cardLink}}}. + if($eq activityType 'joinMember') + if($eq user._id member._id) + | {{{_ 'activity-joined' cardLink}}}. + else + | {{{_ 'activity-added' memberLink cardLink}}}. - if($eq activityType 'moveCardBoard') - | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}. + if($eq activityType 'moveCardBoard') + | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}. - if($eq activityType 'moveCard') - | {{{_ 'activity-moved' cardLink oldList.title list.title}}}. + if($eq activityType 'moveCard') + | {{{_ 'activity-moved' cardLink oldList.title list.title}}}. - if($eq activityType 'removeBoardMember') - | {{{_ 'activity-excluded' memberLink boardLabel}}}. + if($eq activityType 'removeBoardMember') + | {{{_ 'activity-excluded' memberLink boardLabel}}}. - if($eq activityType 'restoredCard') - | {{{_ 'activity-sent' cardLink boardLabel}}}. + if($eq activityType 'restoredCard') + | {{{_ 'activity-sent' cardLink boardLabel}}}. - if($eq activityType 'addedLabel') - | {{{_ 'activity-added-label' lastLabel cardLink}}}. + if($eq activityType 'addedLabel') + | {{{_ 'activity-added-label' lastLabel cardLink}}}. - if($eq activityType 'removedLabel') - | {{{_ 'activity-removed-label' lastLabel cardLink}}}. + if($eq activityType 'removedLabel') + | {{{_ 'activity-removed-label' lastLabel cardLink}}}. - if($eq activityType 'setCustomField') - | {{{_ 'activity-set-customfield' lastCustomField lastCustomFieldValue cardLink}}}. + if($eq activityType 'setCustomField') + | {{{_ 'activity-set-customfield' lastCustomField lastCustomFieldValue cardLink}}}. - if($eq activityType 'unsetCustomField') - | {{{_ 'activity-unset-customfield' lastCustomField cardLink}}}. + if($eq activityType 'unsetCustomField') + | {{{_ 'activity-unset-customfield' lastCustomField cardLink}}}. - if($eq activityType 'unjoinMember') - if($eq user._id member._id) - | {{{_ 'activity-unjoined' cardLink}}}. - else - | {{{_ 'activity-removed' memberLink cardLink}}}. + if($eq activityType 'unjoinMember') + if($eq user._id member._id) + | {{{_ 'activity-unjoined' cardLink}}}. + else + | {{{_ 'activity-removed' memberLink cardLink}}}. - span(title=createdAt).activity-meta {{ moment createdAt }} + span(title=createdAt).activity-meta {{ moment createdAt }} template(name="cardActivities") - each currentCard.activities - .activity - +userAvatar(userId=user._id) - p.activity-desc - +memberName(user=user) - if($eq activityType 'createCard') - | {{_ 'activity-added' cardLabel listName}}. - if($eq activityType 'importCard') - | {{{_ 'activity-imported' cardLabel list.title sourceLink}}}. - if($eq activityType 'joinMember') - if($eq user._id member._id) - | {{_ 'activity-joined' cardLabel}}. - else - | {{{_ 'activity-added' memberLink cardLabel}}}. - if($eq activityType 'unjoinMember') - if($eq user._id member._id) - | {{_ 'activity-unjoined' cardLabel}}. - else - | {{{_ 'activity-removed' cardLabel memberLink}}}. - if($eq activityType 'archivedCard') - | {{_ 'activity-archived' cardLabel}}. - - if($eq activityType 'addedLabel') - | {{{_ 'activity-added-label-card' lastLabel }}}. - - if($eq activityType 'removedLabel') - | {{{_ 'activity-removed-label-card' lastLabel }}}. - - if($eq activityType 'removeChecklist') - | {{{_ 'activity-checklist-removed' cardLabel}}}. - - if($eq activityType 'checkedItem') - | {{{_ 'activity-checked-item-card' checkItem checklist.title }}}. - - if($eq activityType 'uncheckedItem') - | {{{_ 'activity-unchecked-item-card' checkItem checklist.title }}}. - - if($eq activityType 'checklistCompleted') - | {{{_ 'activity-checklist-completed-card' checklist.title }}}. - - if($eq activityType 'checklistUncompleted') - | {{{_ 'activity-checklist-uncompleted-card' checklist.title }}}. - - if($eq activityType 'restoredCard') - | {{_ 'activity-sent' cardLabel boardLabel}}. - if($eq activityType 'moveCard') - | {{_ 'activity-moved' cardLabel oldList.title list.title}}. - - if($eq activityType 'moveCardBoard') - | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}. - - if($eq activityType 'addAttachment') - | {{{_ 'activity-attached' attachmentLink cardLabel}}}. - if attachment.isImage - img.attachment-image-preview(src=attachment.url) - if($eq activityType 'deleteAttachment') - | {{{_ 'activity-delete-attach' cardLabel}}}. - if($eq activityType 'removedChecklist') - | {{{_ 'activity-checklist-removed' cardLabel}}}. - if($eq activityType 'addChecklist') - | {{{_ 'activity-checklist-added' cardLabel}}}. - .activity-checklist - +viewer - = checklist.title - if($eq activityType 'addChecklistItem') - | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}. - .activity-checklist(href="{{ card.absoluteUrl }}") - +viewer - = checklistItem.title - - if(currentData.timeKey) - | {{{_ activityType }}} - = ' ' - i(title=currentData.timeValue).activity-meta {{ moment currentData.timeValue 'LLL' }} - if (currentData.timeOldValue) - = ' ' - | {{{_ "previous_as" }}} - = ' ' - i(title=currentData.timeOldValue).activity-meta {{ moment currentData.timeOldValue 'LLL' }} - = ' @' - else if(currentData.timeValue) - | {{{_ activityType currentData.timeValue}}} - - - if($eq activityType 'deleteComment') - | {{{_ 'activity-deleteComment' currentData.commentId}}}. - if($eq activityType 'editComment') - | {{{_ 'activity-editComment' currentData.commentId}}}. - if($eq activityType 'addComment') - +inlinedForm(classNames='js-edit-comment') - +editor(autofocus=true) - = comment.text - .edit-controls - button.primary(type="submit") {{_ 'edit'}} - else - .activity-comment + if currentBoard.allowsComments + each currentCard.activities + .activity + +userAvatar(userId=user._id) + p.activity-desc + +memberName(user=user) + if($eq activityType 'createCard') + | {{_ 'activity-added' cardLabel listName}}. + if($eq activityType 'importCard') + | {{{_ 'activity-imported' cardLabel list.title sourceLink}}}. + if($eq activityType 'joinMember') + if($eq user._id member._id) + | {{_ 'activity-joined' cardLabel}}. + else + | {{{_ 'activity-added' memberLink cardLabel}}}. + if($eq activityType 'unjoinMember') + if($eq user._id member._id) + | {{_ 'activity-unjoined' cardLabel}}. + else + | {{{_ 'activity-removed' cardLabel memberLink}}}. + if($eq activityType 'archivedCard') + | {{_ 'activity-archived' cardLabel}}. + + if($eq activityType 'addedLabel') + | {{{_ 'activity-added-label-card' lastLabel }}}. + + if($eq activityType 'removedLabel') + | {{{_ 'activity-removed-label-card' lastLabel }}}. + + if($eq activityType 'removeChecklist') + | {{{_ 'activity-checklist-removed' cardLabel}}}. + + if($eq activityType 'checkedItem') + | {{{_ 'activity-checked-item-card' checkItem checklist.title }}}. + + if($eq activityType 'uncheckedItem') + | {{{_ 'activity-unchecked-item-card' checkItem checklist.title }}}. + + if($eq activityType 'checklistCompleted') + | {{{_ 'activity-checklist-completed-card' checklist.title }}}. + + if($eq activityType 'checklistUncompleted') + | {{{_ 'activity-checklist-uncompleted-card' checklist.title }}}. + + if($eq activityType 'restoredCard') + | {{_ 'activity-sent' cardLabel boardLabel}}. + if($eq activityType 'moveCard') + | {{_ 'activity-moved' cardLabel oldList.title list.title}}. + + if($eq activityType 'moveCardBoard') + | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}. + + if($eq activityType 'addAttachment') + | {{{_ 'activity-attached' attachmentLink cardLabel}}}. + if attachment.isImage + img.attachment-image-preview(src=attachment.url) + if($eq activityType 'deleteAttachment') + | {{{_ 'activity-delete-attach' cardLabel}}}. + if($eq activityType 'removedChecklist') + | {{{_ 'activity-checklist-removed' cardLabel}}}. + if($eq activityType 'addChecklist') + | {{{_ 'activity-checklist-added' cardLabel}}}. + .activity-checklist +viewer + = checklist.title + if($eq activityType 'addChecklistItem') + | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}. + .activity-checklist(href="{{ card.absoluteUrl }}") + +viewer + = checklistItem.title + + if(currentData.timeKey) + | {{{_ activityType }}} + = ' ' + i(title=currentData.timeValue).activity-meta {{ moment currentData.timeValue 'LLL' }} + if (currentData.timeOldValue) + = ' ' + | {{{_ "previous_as" }}} + = ' ' + i(title=currentData.timeOldValue).activity-meta {{ moment currentData.timeOldValue 'LLL' }} + = ' @' + else if(currentData.timeValue) + | {{{_ activityType currentData.timeValue}}} + + + if($eq activityType 'deleteComment') + | {{{_ 'activity-deleteComment' currentData.commentId}}}. + if($eq activityType 'editComment') + | {{{_ 'activity-editComment' currentData.commentId}}}. + if($eq activityType 'addComment') + +inlinedForm(classNames='js-edit-comment') + +editor(autofocus=true) = comment.text - span(title=createdAt).activity-meta {{ moment createdAt }} - if ($eq currentUser._id comment.userId) - = ' - ' - a.js-open-inlined-form {{_ "edit"}} - = ' - ' - a.js-delete-comment {{_ "delete"}} + .edit-controls + button.primary(type="submit") {{_ 'edit'}} + else + .activity-comment + +viewer + = comment.text + span(title=createdAt).activity-meta {{ moment createdAt }} + if ($eq currentUser._id comment.userId) + = ' - ' + a.js-open-inlined-form {{_ "edit"}} + = ' - ' + a.js-delete-comment {{_ "delete"}} - else - span(title=createdAt).activity-meta {{ moment createdAt }} + else + span(title=createdAt).activity-meta {{ moment createdAt }} diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 7a6ca7cf..cb1f375e 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -261,14 +261,15 @@ template(name="cardDetails") if currentUser.isBoardMember unless currentUser.isNoComments +commentForm - unless currentUser.isNoComments - if isLoaded.get - if isLinkedCard - +activities(card=this mode="linkedcard") - else if isLinkedBoard - +activities(card=this mode="linkedboard") - else - +activities(card=this mode="card") + if currentBoard.allowsActivities + unless currentUser.isNoComments + if isLoaded.get + if isLinkedCard + +activities(card=this mode="linkedcard") + else if isLinkedBoard + +activities(card=this mode="linkedboard") + else + +activities(card=this mode="card") template(name="editCardTitleForm") textarea.js-edit-card-title(rows='1' autofocus dir="auto") diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index 51b09d72..ae52dc4c 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -153,6 +153,12 @@ template(name="boardCardSettingsPopup") span i.fa.fa-comment-o | {{_ 'comment'}} + div.check-div + a.flex.js-field-has-comments(class="{{#if allowsActivities}}is-checked{{/if}}") + .materialCheckBox(class="{{#if allowsActivities}}is-checked{{/if}}") + span + i.fa.fa-history + | {{_ 'activities'}} template(name="boardSubtaskSettingsPopup") form.board-subtask-settings diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index 4de7aa80..c3c00b08 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -882,6 +882,22 @@ BlazeComponent.extendComponent({ this.currentBoard.allowsComments, ); }, + 'click .js-field-has-activities'(evt) { + evt.preventDefault(); + this.currentBoard.allowsActivities = !this.currentBoard + .allowsActivities; + this.currentBoard.setAllowsActivities( + this.currentBoard.allowsActivities, + ); + $(`.js-field-has-activities ${MCB}`).toggleClass( + CKCLS, + this.currentBoard.allowsActivities, + ); + $('.js-field-has-activities').toggleClass( + CKCLS, + this.currentBoard.allowsActivities, + ); + }, }, ]; }, -- cgit v1.2.3-1-g7c22 From 2a54218f3f68547032bd53a04a968b233be21e15 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 10 Feb 2020 17:25:27 +0200 Subject: Remove hiding comments and activities. --- client/components/activities/activities.jade | 388 +++++++++++++-------------- client/components/cards/cardDetails.jade | 17 +- client/components/sidebar/sidebar.jade | 24 +- 3 files changed, 213 insertions(+), 216 deletions(-) (limited to 'client') diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index d7eff885..8ecbdee8 100644 --- a/client/components/activities/activities.jade +++ b/client/components/activities/activities.jade @@ -8,236 +8,234 @@ template(name="activities") +cardActivities template(name="boardActivities") - if currentBoard.allowsActivities - each currentBoard.activities - .activity - +userAvatar(userId=user._id) - p.activity-desc - +memberName(user=user) + each currentBoard.activities + .activity + +userAvatar(userId=user._id) + p.activity-desc + +memberName(user=user) - if($eq activityType 'deleteAttachment') - | {{{_ 'activity-delete-attach' cardLink}}}. + if($eq activityType 'deleteAttachment') + | {{{_ 'activity-delete-attach' cardLink}}}. - if($eq activityType 'addAttachment') - | {{{_ 'activity-attached' attachmentLink cardLink}}}. + if($eq activityType 'addAttachment') + | {{{_ 'activity-attached' attachmentLink cardLink}}}. - if($eq activityType 'addBoardMember') - | {{{_ 'activity-added' memberLink boardLabel}}}. + if($eq activityType 'addBoardMember') + | {{{_ 'activity-added' memberLink boardLabel}}}. - if($eq activityType 'addComment') - | {{{_ 'activity-on' cardLink}}} - a.activity-comment(href="{{ card.absoluteUrl }}") - +viewer - = comment.text + if($eq activityType 'addComment') + | {{{_ 'activity-on' cardLink}}} + a.activity-comment(href="{{ card.absoluteUrl }}") + +viewer + = comment.text - if($eq activityType 'addChecklist') - | {{{_ 'activity-checklist-added' cardLink}}}. - .activity-checklist(href="{{ card.absoluteUrl }}") - +viewer - = checklist.title - if($eq activityType 'removeChecklist') - | {{{_ 'activity-checklist-removed' cardLink}}}. + if($eq activityType 'addChecklist') + | {{{_ 'activity-checklist-added' cardLink}}}. + .activity-checklist(href="{{ card.absoluteUrl }}") + +viewer + = checklist.title + if($eq activityType 'removeChecklist') + | {{{_ 'activity-checklist-removed' cardLink}}}. - if($eq activityType 'checkedItem') - | {{{_ 'activity-checked-item' checkItem checklist.title cardLink}}}. + if($eq activityType 'checkedItem') + | {{{_ 'activity-checked-item' checkItem checklist.title cardLink}}}. - if($eq activityType 'uncheckedItem') - | {{{_ 'activity-unchecked-item' checkItem checklist.title cardLink}}}. + if($eq activityType 'uncheckedItem') + | {{{_ 'activity-unchecked-item' checkItem checklist.title cardLink}}}. - if($eq activityType 'checklistCompleted') - | {{{_ 'activity-checklist-completed' checklist.title cardLink}}}. + if($eq activityType 'checklistCompleted') + | {{{_ 'activity-checklist-completed' checklist.title cardLink}}}. - if($eq activityType 'checklistUncompleted') - | {{{_ 'activity-checklist-uncompleted' checklist.title cardLink}}}. + if($eq activityType 'checklistUncompleted') + | {{{_ 'activity-checklist-uncompleted' checklist.title cardLink}}}. - if($eq activityType 'addChecklistItem') - | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}. - .activity-checklist(href="{{ card.absoluteUrl }}") - +viewer - = checklistItem.title - if($eq activityType 'removedChecklistItem') - | {{{_ 'activity-checklist-item-removed' checklist.title cardLink}}}. + if($eq activityType 'addChecklistItem') + | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}. + .activity-checklist(href="{{ card.absoluteUrl }}") + +viewer + = checklistItem.title + if($eq activityType 'removedChecklistItem') + | {{{_ 'activity-checklist-item-removed' checklist.title cardLink}}}. - if($eq activityType 'archivedCard') - | {{{_ 'activity-archived' cardLink}}}. + if($eq activityType 'archivedCard') + | {{{_ 'activity-archived' cardLink}}}. - if($eq activityType 'archivedList') - | {{_ 'activity-archived' list.title}}. + if($eq activityType 'archivedList') + | {{_ 'activity-archived' list.title}}. - if($eq activityType 'archivedSwimlane') - | {{_ 'activity-archived' swimlane.title}}. + if($eq activityType 'archivedSwimlane') + | {{_ 'activity-archived' swimlane.title}}. - if($eq activityType 'createBoard') - | {{_ 'activity-created' boardLabel}}. + if($eq activityType 'createBoard') + | {{_ 'activity-created' boardLabel}}. - if($eq activityType 'createCard') - | {{{_ 'activity-added' cardLink boardLabel}}}. + if($eq activityType 'createCard') + | {{{_ 'activity-added' cardLink boardLabel}}}. - if($eq activityType 'createCustomField') - | {{_ 'activity-customfield-created' customField}}. + if($eq activityType 'createCustomField') + | {{_ 'activity-customfield-created' customField}}. - if($eq activityType 'createList') - | {{_ 'activity-added' list.title boardLabel}}. + if($eq activityType 'createList') + | {{_ 'activity-added' list.title boardLabel}}. - if($eq activityType 'createSwimlane') - | {{_ 'activity-added' swimlane.title boardLabel}}. + if($eq activityType 'createSwimlane') + | {{_ 'activity-added' swimlane.title boardLabel}}. - if($eq activityType 'removeList') - | {{_ 'activity-removed' title boardLabel}}. + if($eq activityType 'removeList') + | {{_ 'activity-removed' title boardLabel}}. - if($eq activityType 'importBoard') - | {{{_ 'activity-imported-board' boardLabel sourceLink}}}. + if($eq activityType 'importBoard') + | {{{_ 'activity-imported-board' boardLabel sourceLink}}}. - if($eq activityType 'importCard') - | {{{_ 'activity-imported' cardLink boardLabel sourceLink}}}. + if($eq activityType 'importCard') + | {{{_ 'activity-imported' cardLink boardLabel sourceLink}}}. - if($eq activityType 'importList') - | {{{_ 'activity-imported' listLabel boardLabel sourceLink}}}. + if($eq activityType 'importList') + | {{{_ 'activity-imported' listLabel boardLabel sourceLink}}}. - if($eq activityType 'joinMember') - if($eq user._id member._id) - | {{{_ 'activity-joined' cardLink}}}. - else - | {{{_ 'activity-added' memberLink cardLink}}}. + if($eq activityType 'joinMember') + if($eq user._id member._id) + | {{{_ 'activity-joined' cardLink}}}. + else + | {{{_ 'activity-added' memberLink cardLink}}}. - if($eq activityType 'moveCardBoard') - | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}. + if($eq activityType 'moveCardBoard') + | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}. - if($eq activityType 'moveCard') - | {{{_ 'activity-moved' cardLink oldList.title list.title}}}. + if($eq activityType 'moveCard') + | {{{_ 'activity-moved' cardLink oldList.title list.title}}}. - if($eq activityType 'removeBoardMember') - | {{{_ 'activity-excluded' memberLink boardLabel}}}. + if($eq activityType 'removeBoardMember') + | {{{_ 'activity-excluded' memberLink boardLabel}}}. - if($eq activityType 'restoredCard') - | {{{_ 'activity-sent' cardLink boardLabel}}}. + if($eq activityType 'restoredCard') + | {{{_ 'activity-sent' cardLink boardLabel}}}. - if($eq activityType 'addedLabel') - | {{{_ 'activity-added-label' lastLabel cardLink}}}. + if($eq activityType 'addedLabel') + | {{{_ 'activity-added-label' lastLabel cardLink}}}. - if($eq activityType 'removedLabel') - | {{{_ 'activity-removed-label' lastLabel cardLink}}}. + if($eq activityType 'removedLabel') + | {{{_ 'activity-removed-label' lastLabel cardLink}}}. - if($eq activityType 'setCustomField') - | {{{_ 'activity-set-customfield' lastCustomField lastCustomFieldValue cardLink}}}. + if($eq activityType 'setCustomField') + | {{{_ 'activity-set-customfield' lastCustomField lastCustomFieldValue cardLink}}}. - if($eq activityType 'unsetCustomField') - | {{{_ 'activity-unset-customfield' lastCustomField cardLink}}}. + if($eq activityType 'unsetCustomField') + | {{{_ 'activity-unset-customfield' lastCustomField cardLink}}}. - if($eq activityType 'unjoinMember') - if($eq user._id member._id) - | {{{_ 'activity-unjoined' cardLink}}}. - else - | {{{_ 'activity-removed' memberLink cardLink}}}. + if($eq activityType 'unjoinMember') + if($eq user._id member._id) + | {{{_ 'activity-unjoined' cardLink}}}. + else + | {{{_ 'activity-removed' memberLink cardLink}}}. - span(title=createdAt).activity-meta {{ moment createdAt }} + span(title=createdAt).activity-meta {{ moment createdAt }} template(name="cardActivities") - if currentBoard.allowsComments - each currentCard.activities - .activity - +userAvatar(userId=user._id) - p.activity-desc - +memberName(user=user) - if($eq activityType 'createCard') - | {{_ 'activity-added' cardLabel listName}}. - if($eq activityType 'importCard') - | {{{_ 'activity-imported' cardLabel list.title sourceLink}}}. - if($eq activityType 'joinMember') - if($eq user._id member._id) - | {{_ 'activity-joined' cardLabel}}. - else - | {{{_ 'activity-added' memberLink cardLabel}}}. - if($eq activityType 'unjoinMember') - if($eq user._id member._id) - | {{_ 'activity-unjoined' cardLabel}}. - else - | {{{_ 'activity-removed' cardLabel memberLink}}}. - if($eq activityType 'archivedCard') - | {{_ 'activity-archived' cardLabel}}. - - if($eq activityType 'addedLabel') - | {{{_ 'activity-added-label-card' lastLabel }}}. - - if($eq activityType 'removedLabel') - | {{{_ 'activity-removed-label-card' lastLabel }}}. - - if($eq activityType 'removeChecklist') - | {{{_ 'activity-checklist-removed' cardLabel}}}. - - if($eq activityType 'checkedItem') - | {{{_ 'activity-checked-item-card' checkItem checklist.title }}}. - - if($eq activityType 'uncheckedItem') - | {{{_ 'activity-unchecked-item-card' checkItem checklist.title }}}. - - if($eq activityType 'checklistCompleted') - | {{{_ 'activity-checklist-completed-card' checklist.title }}}. - - if($eq activityType 'checklistUncompleted') - | {{{_ 'activity-checklist-uncompleted-card' checklist.title }}}. - - if($eq activityType 'restoredCard') - | {{_ 'activity-sent' cardLabel boardLabel}}. - if($eq activityType 'moveCard') - | {{_ 'activity-moved' cardLabel oldList.title list.title}}. - - if($eq activityType 'moveCardBoard') - | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}. - - if($eq activityType 'addAttachment') - | {{{_ 'activity-attached' attachmentLink cardLabel}}}. - if attachment.isImage - img.attachment-image-preview(src=attachment.url) - if($eq activityType 'deleteAttachment') - | {{{_ 'activity-delete-attach' cardLabel}}}. - if($eq activityType 'removedChecklist') - | {{{_ 'activity-checklist-removed' cardLabel}}}. - if($eq activityType 'addChecklist') - | {{{_ 'activity-checklist-added' cardLabel}}}. - .activity-checklist - +viewer - = checklist.title - if($eq activityType 'addChecklistItem') - | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}. - .activity-checklist(href="{{ card.absoluteUrl }}") + each currentCard.activities + .activity + +userAvatar(userId=user._id) + p.activity-desc + +memberName(user=user) + if($eq activityType 'createCard') + | {{_ 'activity-added' cardLabel listName}}. + if($eq activityType 'importCard') + | {{{_ 'activity-imported' cardLabel list.title sourceLink}}}. + if($eq activityType 'joinMember') + if($eq user._id member._id) + | {{_ 'activity-joined' cardLabel}}. + else + | {{{_ 'activity-added' memberLink cardLabel}}}. + if($eq activityType 'unjoinMember') + if($eq user._id member._id) + | {{_ 'activity-unjoined' cardLabel}}. + else + | {{{_ 'activity-removed' cardLabel memberLink}}}. + if($eq activityType 'archivedCard') + | {{_ 'activity-archived' cardLabel}}. + + if($eq activityType 'addedLabel') + | {{{_ 'activity-added-label-card' lastLabel }}}. + + if($eq activityType 'removedLabel') + | {{{_ 'activity-removed-label-card' lastLabel }}}. + + if($eq activityType 'removeChecklist') + | {{{_ 'activity-checklist-removed' cardLabel}}}. + + if($eq activityType 'checkedItem') + | {{{_ 'activity-checked-item-card' checkItem checklist.title }}}. + + if($eq activityType 'uncheckedItem') + | {{{_ 'activity-unchecked-item-card' checkItem checklist.title }}}. + + if($eq activityType 'checklistCompleted') + | {{{_ 'activity-checklist-completed-card' checklist.title }}}. + + if($eq activityType 'checklistUncompleted') + | {{{_ 'activity-checklist-uncompleted-card' checklist.title }}}. + + if($eq activityType 'restoredCard') + | {{_ 'activity-sent' cardLabel boardLabel}}. + if($eq activityType 'moveCard') + | {{_ 'activity-moved' cardLabel oldList.title list.title}}. + + if($eq activityType 'moveCardBoard') + | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}. + + if($eq activityType 'addAttachment') + | {{{_ 'activity-attached' attachmentLink cardLabel}}}. + if attachment.isImage + img.attachment-image-preview(src=attachment.url) + if($eq activityType 'deleteAttachment') + | {{{_ 'activity-delete-attach' cardLabel}}}. + if($eq activityType 'removedChecklist') + | {{{_ 'activity-checklist-removed' cardLabel}}}. + if($eq activityType 'addChecklist') + | {{{_ 'activity-checklist-added' cardLabel}}}. + .activity-checklist + +viewer + = checklist.title + if($eq activityType 'addChecklistItem') + | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}. + .activity-checklist(href="{{ card.absoluteUrl }}") + +viewer + = checklistItem.title + + if(currentData.timeKey) + | {{{_ activityType }}} + = ' ' + i(title=currentData.timeValue).activity-meta {{ moment currentData.timeValue 'LLL' }} + if (currentData.timeOldValue) + = ' ' + | {{{_ "previous_as" }}} + = ' ' + i(title=currentData.timeOldValue).activity-meta {{ moment currentData.timeOldValue 'LLL' }} + = ' @' + else if(currentData.timeValue) + | {{{_ activityType currentData.timeValue}}} + + + if($eq activityType 'deleteComment') + | {{{_ 'activity-deleteComment' currentData.commentId}}}. + if($eq activityType 'editComment') + | {{{_ 'activity-editComment' currentData.commentId}}}. + if($eq activityType 'addComment') + +inlinedForm(classNames='js-edit-comment') + +editor(autofocus=true) + = comment.text + .edit-controls + button.primary(type="submit") {{_ 'edit'}} + else + .activity-comment +viewer - = checklistItem.title - - if(currentData.timeKey) - | {{{_ activityType }}} - = ' ' - i(title=currentData.timeValue).activity-meta {{ moment currentData.timeValue 'LLL' }} - if (currentData.timeOldValue) - = ' ' - | {{{_ "previous_as" }}} - = ' ' - i(title=currentData.timeOldValue).activity-meta {{ moment currentData.timeOldValue 'LLL' }} - = ' @' - else if(currentData.timeValue) - | {{{_ activityType currentData.timeValue}}} - - - if($eq activityType 'deleteComment') - | {{{_ 'activity-deleteComment' currentData.commentId}}}. - if($eq activityType 'editComment') - | {{{_ 'activity-editComment' currentData.commentId}}}. - if($eq activityType 'addComment') - +inlinedForm(classNames='js-edit-comment') - +editor(autofocus=true) = comment.text - .edit-controls - button.primary(type="submit") {{_ 'edit'}} - else - .activity-comment - +viewer - = comment.text - span(title=createdAt).activity-meta {{ moment createdAt }} - if ($eq currentUser._id comment.userId) - = ' - ' - a.js-open-inlined-form {{_ "edit"}} - = ' - ' - a.js-delete-comment {{_ "delete"}} - - else span(title=createdAt).activity-meta {{ moment createdAt }} + if ($eq currentUser._id comment.userId) + = ' - ' + a.js-open-inlined-form {{_ "edit"}} + = ' - ' + a.js-delete-comment {{_ "delete"}} + + else + span(title=createdAt).activity-meta {{ moment createdAt }} diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index cb1f375e..7a6ca7cf 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -261,15 +261,14 @@ template(name="cardDetails") if currentUser.isBoardMember unless currentUser.isNoComments +commentForm - if currentBoard.allowsActivities - unless currentUser.isNoComments - if isLoaded.get - if isLinkedCard - +activities(card=this mode="linkedcard") - else if isLinkedBoard - +activities(card=this mode="linkedboard") - else - +activities(card=this mode="card") + unless currentUser.isNoComments + if isLoaded.get + if isLinkedCard + +activities(card=this mode="linkedcard") + else if isLinkedBoard + +activities(card=this mode="linkedboard") + else + +activities(card=this mode="card") template(name="editCardTitleForm") textarea.js-edit-card-title(rows='1' autofocus dir="auto") diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index ae52dc4c..07da476f 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -147,18 +147,18 @@ template(name="boardCardSettingsPopup") span i.fa.fa-paperclip | {{_ 'attachments'}} - div.check-div - a.flex.js-field-has-comments(class="{{#if allowsComments}}is-checked{{/if}}") - .materialCheckBox(class="{{#if allowsComments}}is-checked{{/if}}") - span - i.fa.fa-comment-o - | {{_ 'comment'}} - div.check-div - a.flex.js-field-has-comments(class="{{#if allowsActivities}}is-checked{{/if}}") - .materialCheckBox(class="{{#if allowsActivities}}is-checked{{/if}}") - span - i.fa.fa-history - | {{_ 'activities'}} + //div.check-div + // a.flex.js-field-has-comments(class="{{#if allowsComments}}is-checked{{/if}}") + // .materialCheckBox(class="{{#if allowsComments}}is-checked{{/if}}") + // span + // i.fa.fa-comment-o + // | {{_ 'comment'}} + //div.check-div + // a.flex.js-field-has-activities(class="{{#if allowsActivities}}is-checked{{/if}}") + // .materialCheckBox(class="{{#if allowsActivities}}is-checked{{/if}}") + // span + // i.fa.fa-history + // | {{_ 'activities'}} template(name="boardSubtaskSettingsPopup") form.board-subtask-settings -- cgit v1.2.3-1-g7c22 From 9a21b0a1c933e7f778e4e57a8258e150ccea1620 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 10 Feb 2020 18:47:03 +0200 Subject: Fix Copy Card Link to Clipboard button at card title did not work. Thanks to 2020product and xet7 ! Related https://github.com/wekan/wekan/pull/2922 --- client/components/cards/cardDetails.jade | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'client') diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 7a6ca7cf..e238823f 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -9,9 +9,10 @@ template(name="cardDetails") if currentUser.isBoardMember a.fa.fa-navicon.card-details-menu.js-open-card-details-menu input.inline-input(type="hidden" id="cardURL_copy" value="{{ absoluteUrl }}") - a.fa.card-copy-button.js-copy-link( + a.fa.fa-link.card-copy-button.js-copy-link( class="fa-link" title="{{_ 'copy-card-link-to-clipboard'}}" + value="{{ absoluteUrl }}" ) if isMiniScreen a.fa.fa-times-thin.close-card-details-mobile-web.js-close-card-details -- cgit v1.2.3-1-g7c22 From 4467a68b97a3fbf0fbae7f05177d978f2aa80287 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 10 Feb 2020 19:37:25 +0200 Subject: Part 2: Fix Copy Card Link to Clipboard button at card title did not work. Thanks to 2020product and xet7 ! Related https://github.com/wekan/wekan/pull/2922 --- client/components/cards/cardDetails.jade | 2 +- client/components/cards/cardDetails.styl | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'client') diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index e238823f..e8bb72a4 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -8,7 +8,7 @@ template(name="cardDetails") a.fa.fa-times-thin.close-card-details.js-close-card-details if currentUser.isBoardMember a.fa.fa-navicon.card-details-menu.js-open-card-details-menu - input.inline-input(type="hidden" id="cardURL_copy" value="{{ absoluteUrl }}") + input.inline-input(type="text" id="cardURL_copy" value="{{ absoluteUrl }}") a.fa.fa-link.card-copy-button.js-copy-link( class="fa-link" title="{{_ 'copy-card-link-to-clipboard'}}" diff --git a/client/components/cards/cardDetails.styl b/client/components/cards/cardDetails.styl index fd6122eb..80fa87c0 100644 --- a/client/components/cards/cardDetails.styl +++ b/client/components/cards/cardDetails.styl @@ -4,6 +4,12 @@ avatar-radius = 50% +#cardURL_copy + // Have clipboard text not visible by moving it to far left + position: absolute + left: -2000px + top: 0px + .assignee border-radius: 3px display: block -- cgit v1.2.3-1-g7c22 From e89965f6422fd95b4ad2112ae407b1dde4853510 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 12 Feb 2020 02:08:29 +0200 Subject: Remove card element grouping to create compact card layout. Card Settings / Show on Card: Description Title and Description Text. Thanks to e-stoniauk, 2020product and xet7 ! Fixes https://github.com/wekan/wekan/pull/2922 --- client/components/cards/attachments.jade | 6 ++- client/components/cards/cardDetails.jade | 73 +++++++++++++++++--------------- client/components/sidebar/sidebar.jade | 14 ++++++ client/components/sidebar/sidebar.js | 40 +++++++++++++++++ 4 files changed, 97 insertions(+), 36 deletions(-) (limited to 'client') diff --git a/client/components/cards/attachments.jade b/client/components/cards/attachments.jade index 10b767f4..b695ea41 100644 --- a/client/components/cards/attachments.jade +++ b/client/components/cards/attachments.jade @@ -53,5 +53,7 @@ template(name="attachmentsGalery") if currentUser.isBoardMember unless currentUser.isCommentOnly unless currentUser.isWorker - li.attachment-item.add-attachment - a.js-add-attachment {{_ 'add-attachment' }} + //li.attachment-item.add-attachment + a.js-add-attachment + i.fa.fa-paperclip + | {{_ 'add-attachment' }} diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index e8bb72a4..615ae1d5 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -95,7 +95,7 @@ template(name="cardDetails") a.card-label.add-label.js-end-date i.fa.fa-plus - .card-details-items + //.card-details-items if currentBoard.allowsMembers .card-details-item.card-details-item-members h3 @@ -141,7 +141,7 @@ template(name="cardDetails") a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}") i.fa.fa-plus - .card-details-items + //.card-details-items each customFieldsWD .card-details-item.card-details-item-customfield h3.card-details-item-title @@ -149,7 +149,7 @@ template(name="cardDetails") = definition.name +cardCustomField - .card-details-items + //.card-details-items if getSpentTime .card-details-item.card-details-item-spent if getIsOvertime @@ -158,37 +158,7 @@ template(name="cardDetails") h3.card-details-item-title {{_ 'spent-time-hours'}} +cardSpentTime - //- XXX We should use "editable" to avoid repetiting ourselves - if canModifyCard - unless currentUser.isWorker - h3 - i.fa.fa-align-left - card-details-item-title {{_ 'description'}} - +inlinedCardDescription(classNames="card-description js-card-description") - +editor(autofocus=true) - | {{getUnsavedValue 'cardDescription' _id getDescription}} - .edit-controls.clearfix - button.primary(type="submit") {{_ 'save'}} - a.fa.fa-times-thin.js-close-inlined-form - else - a.js-open-inlined-form - if getDescription - +viewer - = getDescription - else - | {{_ 'edit'}} - if (hasUnsavedValue 'cardDescription' _id) - p.quiet - | {{_ 'unsaved-description'}} - a.js-open-inlined-form {{_ 'view-it'}} - = ' - ' - a.js-close-inlined-form {{_ 'discard'}} - else if getDescription - h3.card-details-item-title {{_ 'description'}} - +viewer - = getDescription - - .card-details-items + //.card-details-items if currentBoard.allowsRequestedBy .card-details-item.card-details-item-name h3 @@ -229,6 +199,41 @@ template(name="cardDetails") +viewer = getAssignedBy + //- XXX We should use "editable" to avoid repetiting ourselves + if canModifyCard + unless currentUser.isWorker + if currentBoard.allowsDescriptionTitle + h3 + i.fa.fa-align-left + card-details-item-title {{_ 'description'}} + if currentBoard.allowsDescriptionText + +inlinedCardDescription(classNames="card-description js-card-description") + +editor(autofocus=true) + | {{getUnsavedValue 'cardDescription' _id getDescription}} + .edit-controls.clearfix + button.primary(type="submit") {{_ 'save'}} + a.fa.fa-times-thin.js-close-inlined-form + else + if currentBoard.allowsDescriptionText + a.js-open-inlined-form + if getDescription + +viewer + = getDescription + else + | {{_ 'edit'}} + if (hasUnsavedValue 'cardDescription' _id) + p.quiet + | {{_ 'unsaved-description'}} + a.js-open-inlined-form {{_ 'view-it'}} + = ' - ' + a.js-close-inlined-form {{_ 'discard'}} + else if getDescription + if currentBoard.allowsDescriptionTitle + h3.card-details-item-title {{_ 'description'}} + if currentBoard.allowsDescriptionText + +viewer + = getDescription + .card-checklist-attachmentGalerys .card-checklist-attachmentGalery.card-checklists if currentBoard.allowsChecklists diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index 07da476f..ebcd8486 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -129,6 +129,20 @@ template(name="boardCardSettingsPopup") span i.fa.fa-tags | {{_ 'labels'}} + div.check-div + a.flex.js-field-has-description-title(class="{{#if allowsDescriptionTitle}}is-checked{{/if}}") + .materialCheckBox(class="{{#if allowsDescriptionTitle}}is-checked{{/if}}") + span + i.fa.fa-align-left + | {{_ 'description'}} + | {{_ 'title'}} + div.check-div + a.flex.js-field-has-description-text(class="{{#if allowsDescriptionText}}is-checked{{/if}}") + .materialCheckBox(class="{{#if allowsDescriptionText}}is-checked{{/if}}") + span + i.fa.fa-align-left + | {{_ 'description'}} + | {{_ 'custom-field-text'}} div.check-div a.flex.js-field-has-checklists(class="{{#if allowsChecklists}}is-checked{{/if}}") .materialCheckBox(class="{{#if allowsChecklists}}is-checked{{/if}}") diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index c3c00b08..8e640564 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -647,6 +647,14 @@ BlazeComponent.extendComponent({ return this.currentBoard.allowsComments; }, + allowsDescriptionTitle() { + return this.currentBoard.allowsDescriptionTitle; + }, + + allowsDescriptionText() { + return this.currentBoard.allowsDescriptionText; + }, + isBoardSelected() { return this.currentBoard.dateSettingsDefaultBoardID; }, @@ -837,6 +845,38 @@ BlazeComponent.extendComponent({ this.currentBoard.allowsLabels, ); }, + 'click .js-field-has-description-title'(evt) { + evt.preventDefault(); + this.currentBoard.allowsDescriptionTitle = !this.currentBoard + .allowsDescriptionTitle; + this.currentBoard.setAllowsDescriptionTitle( + this.currentBoard.allowsDescriptionTitle, + ); + $(`.js-field-has-description-title ${MCB}`).toggleClass( + CKCLS, + this.currentBoard.allowsDescriptionTitle, + ); + $('.js-field-has-description-title').toggleClass( + CKCLS, + this.currentBoard.allowsDescriptionTitle, + ); + }, + 'click .js-field-has-description-text'(evt) { + evt.preventDefault(); + this.currentBoard.allowsDescriptionText = !this.currentBoard + .allowsDescriptionText; + this.currentBoard.setAllowsDescriptionText( + this.currentBoard.allowsDescriptionText, + ); + $(`.js-field-has-description-text ${MCB}`).toggleClass( + CKCLS, + this.currentBoard.allowsDescriptionText, + ); + $('.js-field-has-description-text').toggleClass( + CKCLS, + this.currentBoard.allowsDescriptionText, + ); + }, 'click .js-field-has-checklists'(evt) { evt.preventDefault(); this.currentBoard.allowsChecklists = !this.currentBoard -- cgit v1.2.3-1-g7c22