|
@@ -1,49 +1,3 @@
|
|
|
-Template.boardMenuPopup.events({
|
|
|
- 'click .js-rename-board': Popup.open('boardChangeTitle'),
|
|
|
- 'click .js-custom-fields'() {
|
|
|
- Sidebar.setView('customFields');
|
|
|
- Popup.close();
|
|
|
- },
|
|
|
- 'click .js-open-archives'() {
|
|
|
- Sidebar.setView('archives');
|
|
|
- Popup.close();
|
|
|
- },
|
|
|
- 'click .js-change-board-color': Popup.open('boardChangeColor'),
|
|
|
- 'click .js-change-language': Popup.open('changeLanguage'),
|
|
|
- 'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function() {
|
|
|
- const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
|
|
- currentBoard.archive();
|
|
|
- // XXX We should have some kind of notification on top of the page to
|
|
|
- // confirm that the board was successfully archived.
|
|
|
- FlowRouter.go('home');
|
|
|
- }),
|
|
|
- 'click .js-delete-board': Popup.afterConfirm('deleteBoard', function() {
|
|
|
- const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
|
|
- Popup.close();
|
|
|
- Boards.remove(currentBoard._id);
|
|
|
- FlowRouter.go('home');
|
|
|
- }),
|
|
|
- 'click .js-outgoing-webhooks': Popup.open('outgoingWebhooks'),
|
|
|
- 'click .js-import-board': Popup.open('chooseBoardSource'),
|
|
|
- 'click .js-subtask-settings': Popup.open('boardSubtaskSettings'),
|
|
|
-});
|
|
|
-
|
|
|
-Template.boardMenuPopup.helpers({
|
|
|
- exportUrl() {
|
|
|
- const params = {
|
|
|
- boardId: Session.get('currentBoard'),
|
|
|
- };
|
|
|
- const queryParams = {
|
|
|
- authToken: Accounts._storedLoginToken(),
|
|
|
- };
|
|
|
- return FlowRouter.path('/api/boards/:boardId/export', params, queryParams);
|
|
|
- },
|
|
|
- exportFilename() {
|
|
|
- const boardId = Session.get('currentBoard');
|
|
|
- return `wekan-export-board-${boardId}.json`;
|
|
|
- },
|
|
|
-});
|
|
|
-
|
|
|
Template.boardChangeTitlePopup.events({
|
|
|
submit(evt, tpl) {
|
|
|
const newTitle = tpl.$('.js-board-name').val().trim();
|
|
@@ -81,12 +35,8 @@ BlazeComponent.extendComponent({
|
|
|
'click .js-star-board'() {
|
|
|
Meteor.user().toggleBoardStar(Session.get('currentBoard'));
|
|
|
},
|
|
|
- 'click .js-open-board-menu': Popup.open('boardMenu'),
|
|
|
'click .js-change-visibility': Popup.open('boardChangeVisibility'),
|
|
|
'click .js-watch-board': Popup.open('boardChangeWatch'),
|
|
|
- 'click .js-open-archived-board'() {
|
|
|
- Modal.open('archivedBoards');
|
|
|
- },
|
|
|
'click .js-toggle-board-view'() {
|
|
|
const currentUser = Meteor.user();
|
|
|
if (currentUser.profile.boardView === 'board-view-swimlanes') {
|
|
@@ -97,6 +47,9 @@ BlazeComponent.extendComponent({
|
|
|
currentUser.setBoardView('board-view-lists');
|
|
|
}
|
|
|
},
|
|
|
+ 'click .js-toggle-sidebar'() {
|
|
|
+ Sidebar.toggle();
|
|
|
+ },
|
|
|
'click .js-open-filter-view'() {
|
|
|
Sidebar.setView('filter');
|
|
|
},
|
|
@@ -135,124 +88,6 @@ Template.boardHeaderBar.helpers({
|
|
|
},
|
|
|
});
|
|
|
|
|
|
-BlazeComponent.extendComponent({
|
|
|
- backgroundColors() {
|
|
|
- return Boards.simpleSchema()._schema.color.allowedValues;
|
|
|
- },
|
|
|
-
|
|
|
- isSelected() {
|
|
|
- const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
|
|
- return currentBoard.color === this.currentData().toString();
|
|
|
- },
|
|
|
-
|
|
|
- events() {
|
|
|
- return [{
|
|
|
- 'click .js-select-background'(evt) {
|
|
|
- const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
|
|
- const newColor = this.currentData().toString();
|
|
|
- currentBoard.setColor(newColor);
|
|
|
- evt.preventDefault();
|
|
|
- },
|
|
|
- }];
|
|
|
- },
|
|
|
-}).register('boardChangeColorPopup');
|
|
|
-
|
|
|
-BlazeComponent.extendComponent({
|
|
|
- onCreated() {
|
|
|
- this.currentBoard = Boards.findOne(Session.get('currentBoard'));
|
|
|
- },
|
|
|
-
|
|
|
- allowsSubtasks() {
|
|
|
- return this.currentBoard.allowsSubtasks;
|
|
|
- },
|
|
|
-
|
|
|
- isBoardSelected() {
|
|
|
- return this.currentBoard.subtasksDefaultBoardId === this.currentData()._id;
|
|
|
- },
|
|
|
-
|
|
|
- isNullBoardSelected() {
|
|
|
- return (this.currentBoard.subtasksDefaultBoardId === null) || (this.currentBoard.subtasksDefaultBoardId === 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.subtasksDefaultBoardId === this.currentData()._id;
|
|
|
- },
|
|
|
-
|
|
|
- presentParentTask() {
|
|
|
- let result = this.currentBoard.presentParentTask;
|
|
|
- if ((result === null) || (result === undefined)) {
|
|
|
- result = 'no-parent';
|
|
|
- }
|
|
|
- return result;
|
|
|
- },
|
|
|
-
|
|
|
- events() {
|
|
|
- return [{
|
|
|
- 'click .js-field-has-subtasks'(evt) {
|
|
|
- evt.preventDefault();
|
|
|
- this.currentBoard.allowsSubtasks = !this.currentBoard.allowsSubtasks;
|
|
|
- this.currentBoard.setAllowsSubtasks(this.currentBoard.allowsSubtasks);
|
|
|
- $('.js-field-has-subtasks .materialCheckBox').toggleClass('is-checked', this.currentBoard.allowsSubtasks);
|
|
|
- $('.js-field-has-subtasks').toggleClass('is-checked', this.currentBoard.allowsSubtasks);
|
|
|
- $('.js-field-deposit-board').prop('disabled', !this.currentBoard.allowsSubtasks);
|
|
|
- },
|
|
|
- 'change .js-field-deposit-board'(evt) {
|
|
|
- let value = evt.target.value;
|
|
|
- if (value === 'null') {
|
|
|
- value = null;
|
|
|
- }
|
|
|
- this.currentBoard.setSubtasksDefaultBoardId(value);
|
|
|
- evt.preventDefault();
|
|
|
- },
|
|
|
- 'change .js-field-deposit-list'(evt) {
|
|
|
- this.currentBoard.setSubtasksDefaultListId(evt.target.value);
|
|
|
- evt.preventDefault();
|
|
|
- },
|
|
|
- 'click .js-field-show-parent-in-minicard'(evt) {
|
|
|
- const value = evt.target.id || $(evt.target).parent()[0].id || $(evt.target).parent()[0].parent()[0].id;
|
|
|
- const options = [
|
|
|
- 'prefix-with-full-path',
|
|
|
- 'prefix-with-parent',
|
|
|
- 'subtext-with-full-path',
|
|
|
- 'subtext-with-parent',
|
|
|
- 'no-parent'];
|
|
|
- options.forEach(function(element) {
|
|
|
- if (element !== value) {
|
|
|
- $(`#${element} .materialCheckBox`).toggleClass('is-checked', false);
|
|
|
- $(`#${element}`).toggleClass('is-checked', false);
|
|
|
- }
|
|
|
- });
|
|
|
- $(`#${value} .materialCheckBox`).toggleClass('is-checked', true);
|
|
|
- $(`#${value}`).toggleClass('is-checked', true);
|
|
|
- this.currentBoard.setPresentParentTask(value);
|
|
|
- evt.preventDefault();
|
|
|
- },
|
|
|
- }];
|
|
|
- },
|
|
|
-}).register('boardSubtaskSettingsPopup');
|
|
|
-
|
|
|
const CreateBoard = BlazeComponent.extendComponent({
|
|
|
template() {
|
|
|
return 'createBoard';
|
|
@@ -301,20 +136,11 @@ const CreateBoard = BlazeComponent.extendComponent({
|
|
|
this.setVisibility(this.currentData());
|
|
|
},
|
|
|
'click .js-change-visibility': this.toggleVisibilityMenu,
|
|
|
- 'click .js-import': Popup.open('boardImportBoard'),
|
|
|
- submit: this.onSubmit,
|
|
|
- 'click .js-import-board': Popup.open('chooseBoardSource'),
|
|
|
'click .js-board-template': Popup.open('searchElement'),
|
|
|
}];
|
|
|
},
|
|
|
}).register('createBoardPopup');
|
|
|
|
|
|
-BlazeComponent.extendComponent({
|
|
|
- template() {
|
|
|
- return 'chooseBoardSource';
|
|
|
- },
|
|
|
-}).register('chooseBoardSourcePopup');
|
|
|
-
|
|
|
(class HeaderBarCreateBoard extends CreateBoard {
|
|
|
onSubmit(evt) {
|
|
|
super.onSubmit(evt);
|
|
@@ -364,50 +190,3 @@ BlazeComponent.extendComponent({
|
|
|
}];
|
|
|
},
|
|
|
}).register('boardChangeWatchPopup');
|
|
|
-
|
|
|
-BlazeComponent.extendComponent({
|
|
|
- integrations() {
|
|
|
- const boardId = Session.get('currentBoard');
|
|
|
- return Integrations.find({ boardId: `${boardId}` }).fetch();
|
|
|
- },
|
|
|
-
|
|
|
- integration(id) {
|
|
|
- const boardId = Session.get('currentBoard');
|
|
|
- return Integrations.findOne({ _id: id, boardId: `${boardId}` });
|
|
|
- },
|
|
|
-
|
|
|
- events() {
|
|
|
- return [{
|
|
|
- 'submit'(evt) {
|
|
|
- evt.preventDefault();
|
|
|
- const url = evt.target.url.value;
|
|
|
- const boardId = Session.get('currentBoard');
|
|
|
- let id = null;
|
|
|
- let integration = null;
|
|
|
- if (evt.target.id) {
|
|
|
- id = evt.target.id.value;
|
|
|
- integration = this.integration(id);
|
|
|
- if (url) {
|
|
|
- Integrations.update(integration._id, {
|
|
|
- $set: {
|
|
|
- url: `${url}`,
|
|
|
- },
|
|
|
- });
|
|
|
- } else {
|
|
|
- Integrations.remove(integration._id);
|
|
|
- }
|
|
|
- } else if (url) {
|
|
|
- Integrations.insert({
|
|
|
- userId: Meteor.userId(),
|
|
|
- enabled: true,
|
|
|
- type: 'outgoing-webhooks',
|
|
|
- url: `${url}`,
|
|
|
- boardId: `${boardId}`,
|
|
|
- activities: ['all'],
|
|
|
- });
|
|
|
- }
|
|
|
- Popup.close();
|
|
|
- },
|
|
|
- }];
|
|
|
- },
|
|
|
-}).register('outgoingWebhooksPopup');
|