diff options
author | Andrés Manelli <andresmanelli@gmail.com> | 2019-02-22 22:59:19 +0100 |
---|---|---|
committer | Andrés Manelli <andresmanelli@gmail.com> | 2019-02-24 00:05:00 +0100 |
commit | 0a53ee87b94232608b5131f47dd77d2fa4bbc5ba (patch) | |
tree | ac51a29923f3adfb936ea9d6ef0ed86b24e9f81a | |
parent | ef85b71ee41e8a7a02e48363ff83bb05fd02a38e (diff) | |
download | wekan-0a53ee87b94232608b5131f47dd77d2fa4bbc5ba.tar.gz wekan-0a53ee87b94232608b5131f47dd77d2fa4bbc5ba.tar.bz2 wekan-0a53ee87b94232608b5131f47dd77d2fa4bbc5ba.zip |
Add first draft of data model and user interface. No actions.
-rw-r--r-- | client/components/boards/boardArchive.js | 6 | ||||
-rw-r--r-- | client/components/boards/boardsList.jade | 3 | ||||
-rw-r--r-- | client/components/boards/boardsList.js | 16 | ||||
-rw-r--r-- | client/components/cards/cardDetails.jade | 3 | ||||
-rw-r--r-- | client/components/cards/cardDetails.js | 3 | ||||
-rw-r--r-- | client/components/users/userHeader.jade | 3 | ||||
-rw-r--r-- | client/components/users/userHeader.js | 9 | ||||
-rw-r--r-- | i18n/en.i18n.json | 6 | ||||
-rw-r--r-- | models/boards.js | 10 | ||||
-rw-r--r-- | models/cards.js | 6 | ||||
-rw-r--r-- | models/lists.js | 11 | ||||
-rw-r--r-- | models/swimlanes.js | 11 | ||||
-rw-r--r-- | models/users.js | 48 | ||||
-rw-r--r-- | server/publications/boards.js | 1 |
14 files changed, 129 insertions, 7 deletions
diff --git a/client/components/boards/boardArchive.js b/client/components/boards/boardArchive.js index 8f4d5434..c8bbb341 100644 --- a/client/components/boards/boardArchive.js +++ b/client/components/boards/boardArchive.js @@ -1,9 +1,3 @@ -Template.boardListHeaderBar.events({ - 'click .js-open-archived-board'() { - Modal.open('archivedBoards'); - }, -}); - BlazeComponent.extendComponent({ onCreated() { this.subscribe('archivedBoards'); diff --git a/client/components/boards/boardsList.jade b/client/components/boards/boardsList.jade index 89852570..e36b8fc6 100644 --- a/client/components/boards/boardsList.jade +++ b/client/components/boards/boardsList.jade @@ -36,3 +36,6 @@ template(name="boardListHeaderBar") a.board-header-btn.js-open-archived-board i.fa.fa-archive span {{_ 'archives'}} + a.board-header-btn(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}") + i.fa.fa-clone + span {{_ 'templates'}} diff --git a/client/components/boards/boardsList.js b/client/components/boards/boardsList.js index 1ed88146..70dd1143 100644 --- a/client/components/boards/boardsList.js +++ b/client/components/boards/boardsList.js @@ -1,5 +1,20 @@ const subManager = new SubsManager(); +Template.boardListHeaderBar.events({ + 'click .js-open-archived-board'() { + Modal.open('archivedBoards'); + }, +}); + +Template.boardListHeaderBar.helpers({ + templatesBoardId() { + return Meteor.user().getTemplatesBoard().id; + }, + templatesBoardSlug() { + return Meteor.user().getTemplatesBoard().slug; + }, +}); + BlazeComponent.extendComponent({ onCreated() { Meteor.subscribe('setting'); @@ -9,6 +24,7 @@ BlazeComponent.extendComponent({ return Boards.find({ archived: false, 'members.userId': Meteor.userId(), + type: 'board', }, { sort: ['title'], }); diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 25316d04..4d9b2e08 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -247,6 +247,9 @@ template(name="cardDetailsActionsPopup") unless archived li: a.js-archive {{_ 'archive-card'}} li: a.js-more {{_ 'cardMorePopup-title'}} + hr + ul.pop-over-list + li: a.js-template-card {{_ 'cardTemplatePopup-title'}} template(name="moveCardPopup") +boardsAndLists diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index a571e21a..489f28ae 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -365,6 +365,9 @@ Template.cardDetailsActionsPopup.events({ if (!err && ret) Popup.close(); }); }, + 'click .js-template-card' () { + console.log('REMOVE Creating template card'); + }, }); Template.editCardTitleForm.onRendered(function () { diff --git a/client/components/users/userHeader.jade b/client/components/users/userHeader.jade index b6e10d8a..a4704933 100644 --- a/client/components/users/userHeader.jade +++ b/client/components/users/userHeader.jade @@ -21,6 +21,9 @@ template(name="memberMenuPopup") 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'}} + hr + ul.pop-over-list li: a.js-logout {{_ 'log-out'}} template(name="editProfilePopup") diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js index 63cbb14f..0978ec75 100644 --- a/client/components/users/userHeader.js +++ b/client/components/users/userHeader.js @@ -3,6 +3,15 @@ Template.headerUserBar.events({ 'click .js-change-avatar': Popup.open('changeAvatar'), }); +Template.memberMenuPopup.helpers({ + templatesBoardId() { + return Meteor.user().getTemplatesBoard().id; + }, + templatesBoardSlug() { + return Meteor.user().getTemplatesBoard().slug; + }, +}); + Template.memberMenuPopup.events({ 'click .js-edit-profile': Popup.open('editProfile'), 'click .js-change-settings': Popup.open('changeSettings'), diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index d4e817ea..4c3f5943 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -92,6 +92,7 @@ "restore-board": "Restore Board", "no-archived-boards": "No Boards in Archive.", "archives": "Archive", + "templates": "Templates", "assign-member": "Assign member", "attached": "attached", "attachment": "Attachment", @@ -143,6 +144,7 @@ "cardLabelsPopup-title": "Labels", "cardMembersPopup-title": "Members", "cardMorePopup-title": "More", + "cardTemplatePopup-title": "Create template", "cards": "Cards", "cards-count": "Cards", "casSignIn" : "Sign In with CAS", @@ -453,6 +455,10 @@ "welcome-swimlane": "Milestone 1", "welcome-list1": "Basics", "welcome-list2": "Advanced", + "templates-board": "Templates Board", + "card-templates-swimlane": "Card Templates Swimlane", + "list-templates-swimlane": "List Templates Swimlane", + "board-templates-swimlane": "Board Templates Swimlane", "what-to-do": "What do you want to do?", "wipLimitErrorPopup-title": "Invalid WIP Limit", "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.", diff --git a/models/boards.js b/models/boards.js index 71831a63..a2f4c0a8 100644 --- a/models/boards.js +++ b/models/boards.js @@ -304,6 +304,13 @@ Boards.attachSchema(new SimpleSchema({ defaultValue: false, optional: true, }, + type: { + /** + * The type of board + */ + type: String, + defaultValue: 'board', + }, })); @@ -559,6 +566,9 @@ Boards.helpers({ }); }, + isTemplateBoard() { + return this.type === 'template-board'; + }, }); diff --git a/models/cards.js b/models/cards.js index ff19a9a0..e9fc453e 100644 --- a/models/cards.js +++ b/models/cards.js @@ -246,7 +246,7 @@ Cards.attachSchema(new SimpleSchema({ * type of the card */ type: String, - defaultValue: '', + defaultValue: 'cardType-card', }, linkedId: { /** @@ -930,6 +930,10 @@ Cards.helpers({ return this.assignedBy; } }, + + isTemplateCard() { + return this.type === 'template-card'; + }, }); Cards.mutations({ diff --git a/models/lists.js b/models/lists.js index 54e7d037..e0040752 100644 --- a/models/lists.js +++ b/models/lists.js @@ -107,6 +107,13 @@ Lists.attachSchema(new SimpleSchema({ 'saddlebrown', 'paleturquoise', 'mistyrose', 'indigo', ], }, + type: { + /** + * The type of list + */ + type: String, + defaultValue: 'list', + }, })); Lists.allow({ @@ -169,6 +176,10 @@ Lists.helpers({ return this.color; return ''; }, + + isTemplateList() { + return this.type === 'template-list'; + }, }); Lists.mutations({ diff --git a/models/swimlanes.js b/models/swimlanes.js index e2c3925c..bdc9a691 100644 --- a/models/swimlanes.js +++ b/models/swimlanes.js @@ -78,6 +78,13 @@ Swimlanes.attachSchema(new SimpleSchema({ } }, }, + type: { + /** + * The type of swimlane + */ + type: String, + defaultValue: 'swimlane', + }, })); Swimlanes.allow({ @@ -114,6 +121,10 @@ Swimlanes.helpers({ return this.color; return ''; }, + + isTemplateSwimlane() { + return this.type === 'template-swimlane'; + }, }); Swimlanes.mutations({ diff --git a/models/users.js b/models/users.js index 0fdf21a8..7bc9e5bf 100644 --- a/models/users.js +++ b/models/users.js @@ -159,6 +159,13 @@ Users.attachSchema(new SimpleSchema({ 'board-view-cal', ], }, + 'profile.templatesBoardId': { + /** + * Reference to the templates board + */ + type: String, + defaultValue: '', + }, services: { /** * services field of the user @@ -328,6 +335,13 @@ Users.helpers({ const profile = this.profile || {}; return profile.language || 'en'; }, + + getTemplatesBoard() { + return { + id: this.profile.templatesBoardId, + slug: Boards.findOne(this.profile.templatesBoardId).slug, + }; + }, }); Users.mutations({ @@ -701,6 +715,40 @@ if (Meteor.isServer) { Lists.insert({title: TAPi18n.__(title), boardId, sort: titleIndex}, fakeUser); }); }); + + Boards.insert({ + title: TAPi18n.__('templates-board'), + permission: 'private', + type: 'template-container' + }, fakeUser, (err, boardId) => { + + // Insert the reference to our templates board + Users.update(fakeUserId.get(), {$set: {'profile.templatesBoardId': boardId}}); + + // Insert the card templates swimlane + Swimlanes.insert({ + title: TAPi18n.__('card-templates-swimlane'), + boardId, + sort: 1, + type: 'template-container', + }, fakeUser); + + // Insert the list templates swimlane + Swimlanes.insert({ + title: TAPi18n.__('list-templates-swimlane'), + boardId, + sort: 2, + type: 'template-container', + }, fakeUser); + + // Insert the board templates swimlane + Swimlanes.insert({ + title: TAPi18n.__('board-templates-swimlane'), + boardId, + sort: 3, + type: 'template-container', + }, fakeUser); + }); }); }); } diff --git a/server/publications/boards.js b/server/publications/boards.js index fb4c8c84..71c53612 100644 --- a/server/publications/boards.js +++ b/server/publications/boards.js @@ -32,6 +32,7 @@ Meteor.publish('boards', function() { color: 1, members: 1, permission: 1, + type: 1, }, }); }); |