mirror of
https://github.com/wekan/wekan.git
synced 2025-12-22 18:30:13 +01:00
Even if a board is public and a user can view it, the user might want to log in to be able to edit the board. The button replaces the "public" permission indicator, because it is obvious (if the user is not logged in and can view the board, it has to be public).
209 lines
5.8 KiB
JavaScript
209 lines
5.8 KiB
JavaScript
Template.boardMenuPopup.events({
|
|
'click .js-rename-board': Popup.open('boardChangeTitle'),
|
|
'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');
|
|
}),
|
|
});
|
|
|
|
Template.boardMenuPopup.helpers({
|
|
exportUrl() {
|
|
const boardId = Session.get('currentBoard');
|
|
const loginToken = Accounts._storedLoginToken();
|
|
return FlowRouter.url(`api/boards/${boardId}?authToken=${loginToken}`);
|
|
},
|
|
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();
|
|
const newDesc = tpl.$('.js-board-desc').val().trim();
|
|
if (newTitle) {
|
|
this.rename(newTitle);
|
|
this.setDesciption(newDesc);
|
|
Popup.close();
|
|
}
|
|
evt.preventDefault();
|
|
},
|
|
});
|
|
|
|
BlazeComponent.extendComponent({
|
|
watchLevel() {
|
|
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
|
return currentBoard && currentBoard.getWatchLevel(Meteor.userId());
|
|
},
|
|
|
|
isStarred() {
|
|
const boardId = Session.get('currentBoard');
|
|
const user = Meteor.user();
|
|
return user && user.hasStarred(boardId);
|
|
},
|
|
|
|
isMiniScreen() {
|
|
return Utils.isMiniScreen();
|
|
},
|
|
|
|
// Only show the star counter if the number of star is greater than 2
|
|
showStarCounter() {
|
|
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
|
return currentBoard && currentBoard.stars >= 2;
|
|
},
|
|
|
|
events() {
|
|
return [{
|
|
'click .js-edit-board-title': Popup.open('boardChangeTitle'),
|
|
'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-filter-view'() {
|
|
Sidebar.setView('filter');
|
|
},
|
|
'click .js-filter-reset'(evt) {
|
|
evt.stopPropagation();
|
|
Sidebar.setView();
|
|
Filter.reset();
|
|
},
|
|
'click .js-multiselection-activate'() {
|
|
const currentCard = Session.get('currentCard');
|
|
MultiSelection.activate();
|
|
if (currentCard) {
|
|
MultiSelection.add(currentCard);
|
|
}
|
|
},
|
|
'click .js-multiselection-reset'(evt) {
|
|
evt.stopPropagation();
|
|
MultiSelection.disable();
|
|
},
|
|
'click .js-log-in'() {
|
|
FlowRouter.go('atSignIn');
|
|
},
|
|
}];
|
|
},
|
|
}).register('boardHeaderBar');
|
|
|
|
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.visibilityMenuIsOpen = new ReactiveVar(false);
|
|
this.visibility = new ReactiveVar('private');
|
|
},
|
|
|
|
visibilityCheck() {
|
|
return this.currentData() === this.visibility.get();
|
|
},
|
|
|
|
setVisibility(visibility) {
|
|
this.visibility.set(visibility);
|
|
this.visibilityMenuIsOpen.set(false);
|
|
},
|
|
|
|
toggleVisibilityMenu() {
|
|
this.visibilityMenuIsOpen.set(!this.visibilityMenuIsOpen.get());
|
|
},
|
|
|
|
onSubmit(evt) {
|
|
evt.preventDefault();
|
|
const title = this.find('.js-new-board-title').value;
|
|
const visibility = this.visibility.get();
|
|
|
|
const boardId = Boards.insert({
|
|
title,
|
|
permission: visibility,
|
|
});
|
|
|
|
Utils.goBoardId(boardId);
|
|
|
|
// Immediately star boards crated with the headerbar popup.
|
|
Meteor.user().toggleBoardStar(boardId);
|
|
},
|
|
|
|
events() {
|
|
return [{
|
|
'click .js-select-visibility'() {
|
|
this.setVisibility(this.currentData());
|
|
},
|
|
'click .js-change-visibility': this.toggleVisibilityMenu,
|
|
'click .js-import': Popup.open('boardImportBoard'),
|
|
submit: this.onSubmit,
|
|
}];
|
|
},
|
|
}).register('createBoardPopup');
|
|
|
|
BlazeComponent.extendComponent({
|
|
visibilityCheck() {
|
|
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
|
return this.currentData() === currentBoard.permission;
|
|
},
|
|
|
|
selectBoardVisibility() {
|
|
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
|
const visibility = this.currentData();
|
|
currentBoard.setVisibility(visibility);
|
|
Popup.close();
|
|
},
|
|
|
|
events() {
|
|
return [{
|
|
'click .js-select-visibility': this.selectBoardVisibility,
|
|
}];
|
|
},
|
|
}).register('boardChangeVisibilityPopup');
|
|
|
|
BlazeComponent.extendComponent({
|
|
watchLevel() {
|
|
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
|
return currentBoard.getWatchLevel(Meteor.userId());
|
|
},
|
|
|
|
watchCheck() {
|
|
return this.currentData() === this.watchLevel();
|
|
},
|
|
|
|
events() {
|
|
return [{
|
|
'click .js-select-watch'() {
|
|
const level = this.currentData();
|
|
Meteor.call('watch', 'board', Session.get('currentBoard'), level, (err, ret) => {
|
|
if (!err && ret) Popup.close();
|
|
});
|
|
},
|
|
}];
|
|
},
|
|
}).register('boardChangeWatchPopup');
|