-conflits resolve

This commit is contained in:
Emile NDAGIJIMANA 2021-06-14 15:11:21 +02:00
parent 688ef08cd5
commit 080fcb9c62
141 changed files with 4856 additions and 931 deletions

View file

@ -125,7 +125,7 @@ template(name="cardCustomField-stringtemplate")
+inlinedForm(classNames="js-card-customfield-stringtemplate")
each item in stringtemplateItems.get
input.js-card-customfield-stringtemplate-item(type="text" value=item placeholder="")
input.js-card-customfield-stringtemplate-item.last(type="text" value="" placeholder="{{_ 'custom-field-stringtemplate-item-placeholder'}}")
input.js-card-customfield-stringtemplate-item.last(type="text" value="" placeholder="{{_ 'custom-field-stringtemplate-item-placeholder'}}" autofocus)
.edit-controls.clearfix
button.primary(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form

View file

@ -23,7 +23,6 @@
background-color: #fff
border: 0
box-shadow: 0 1px 2px rgba(0, 0, 0, .23)
color: #8c8c8c
height: 36px
margin: 4px 4px 6px 0
padding: 9px 11px

File diff suppressed because it is too large Load diff

View file

@ -54,6 +54,10 @@ BlazeComponent.extendComponent({
return Meteor.user().hasHiddenSystemMessages();
},
cardMaximized() {
return Meteor.user().hasCardMaximized();
},
canModifyCard() {
return (
Meteor.user() &&
@ -361,6 +365,16 @@ BlazeComponent.extendComponent({
this.data().setRequestedBy('');
}
},
'submit .js-card-details-sort'(event) {
event.preventDefault();
const sort = parseFloat(this.currentComponent()
.getValue()
.trim());
if (!Number.isNaN(sort)) {
let card = this.data();
card.move(card.boardId, card.swimlaneId, card.listId, sort);
}
},
'click .js-go-to-linked-card'() {
Utils.goCardId(this.data().linkedId);
},
@ -398,6 +412,14 @@ BlazeComponent.extendComponent({
'click #toggleButton'() {
Meteor.call('toggleSystemMessages');
},
'click #js-maximize-card-details'() {
Meteor.call('toggleCardMaximized');
autosize($('.card-details'));
},
'click #js-minimize-card-details'() {
Meteor.call('toggleCardMaximized');
autosize($('.card-details'));
},
'click .js-vote'(e) {
const forIt = $(e.target).hasClass('js-vote-positive');
let newState = null;
@ -489,6 +511,47 @@ BlazeComponent.extendComponent({
},
}).register('cardDetails');
BlazeComponent.extendComponent({
template() {
return 'exportCard';
},
withApi() {
return Template.instance().apiEnabled.get();
},
exportUrlCardPDF() {
const params = {
boardId: Session.get('currentBoard'),
listId: this.listId,
cardId: this.cardId,
};
const queryParams = {
authToken: Accounts._storedLoginToken(),
};
return FlowRouter.path(
'/api/boards/:boardId/lists/:listId/cards/:cardId/exportPDF',
params,
queryParams,
);
},
exportFilenameCardPDF() {
//const boardId = Session.get('currentBoard');
//return `export-card-pdf-${boardId}.xlsx`;
return `export-card.pdf`;
},
}).register('exportCardPopup');
// only allow number input
Template.editCardSortOrderForm.onRendered(function() {
this.$('input').on("keypress paste", function(event) {
let keyCode = event.keyCode;
let charCode = String.fromCharCode(keyCode);
let regex = new RegExp('[-0-9.]');
let ret = regex.test(charCode);
// only working here, defining in events() doesn't handle the return value correctly
return ret;
});
});
// We extends the normal InlinedForm component to support UnsavedEdits draft
// feature.
(class extends InlinedForm {
@ -549,6 +612,7 @@ Template.cardDetailsActionsPopup.helpers({
});
Template.cardDetailsActionsPopup.events({
'click .js-export-card': Popup.open('exportCard'),
'click .js-members': Popup.open('cardMembers'),
'click .js-assignees': Popup.open('cardAssignees'),
'click .js-labels': Popup.open('cardLabels'),

View file

@ -86,21 +86,62 @@ avatar-radius = 50%
// Other card details
.card-details
padding: 0
flex-shrink: 0
flex-basis: 600px
will-change: flex-basis
overflow-y: scroll
overflow-x: hidden
background: darken(white, 3%)
border-radius: bottom 3px
z-index: 20 !important
animation: flexGrowIn 0.1s
box-shadow: 0 0 7px 0 darken(white, 30%)
transition: flex-basis 0.1s
box-sizing: border-box
unless isMiniScreen
if cardMaximized
.card-details
padding: 0
flex-shrink: 0
flex-basis: calc(100% - 20px)
will-change: flex-basis
overflow-y: scroll
overflow-x: scroll
background: darken(white, 3%)
border-radius: bottom 3px
z-index: 1000 !important
animation: flexGrowIn 0.1s
box-shadow: 0 0 7px 0 darken(white, 30%)
transition: flex-basis 0.1s
box-sizing: border-box
position: absolute
top: 0
left: 0
height: calc(100% - 20px)
width: calc(100% - 20px)
float: left
.card-details-left
position: absolute
float: left
top: 60px
left: 20px
width: 47%
.card-details-right
position: absolute
float: right
top: 20px
left: 50%
.card-details-header
width: 47%
if isMiniScreen
.card-details
padding: 0
flex-shrink: 0
flex-basis: 600px
will-change: flex-basis
overflow-y: scroll
overflow-x: hidden
background: darken(white, 3%)
border-radius: bottom 3px
z-index: 20 !important
animation: flexGrowIn 0.1s
box-shadow: 0 0 7px 0 darken(white, 30%)
transition: flex-basis 0.1s
box-sizing: border-box
.card-details
.mCustomScrollBox
padding-left: 0
@ -110,11 +151,13 @@ avatar-radius = 50%
.card-details-header
margin: 0 -20px 5px
padding 7px 20px
padding: 7px 20px
background: darken(white, 7%)
border-bottom: 1px solid darken(white, 14%)
.close-card-details,
.maximize-card-details,
.minimize-card-details,
.card-details-menu,
.card-copy-button,
.card-copy-mobile-button,
@ -122,7 +165,9 @@ avatar-radius = 50%
.card-details-menu-mobile-web
float: right
.close-card-details
.close-card-details,
.maximize-card-details,
.minimize-card-details
font-size: 24px
padding: 5px
margin-right: -8px
@ -260,7 +305,13 @@ input[type="submit"].attachment-add-link-submit
margin-right: 0px
.card-details-menu
margin-right: 10px
margin-right: 40px
.maximize-card-details
margin-right: 40px
.minimize-card-details
margin-right: 40px
card-details-color(background, color...)
background: background !important

View file

@ -44,9 +44,20 @@
align-items: center
justify-content: center
.card-label-white
background-color: #ffffff
color: #000000 //Black text for better visibility
border: 1px solid #c0c0c0
.card-label-white:hover
color: #aaaaaa //grey text for better visibility
.card-label-green
background-color: #3cb500
.card-label-green:hover
color: #000000 //Black hover text for better visibility
.card-label-yellow
background-color: #fad900
color: #000000 //Black text for better visibility

View file

@ -139,3 +139,7 @@ template(name="minicard")
span.badge-icon.fa.fa-sitemap
span.badge-text.check-list-text {{subtasksFinishedCount}}/{{allSubtasksCount}}
//{{subtasksFinishedCount}}/{{subtasksCount}} does not work because when a subtaks is archived, the count goes down
if currentBoard.allowsCardSortingByNumber
.badge
span.badge-icon.fa.fa-sort
span.badge-text {{ sort }}

View file

@ -23,14 +23,10 @@ template(name="listBody")
i.fa.fa-plus
template(name="spinnerList")
.sk-spinner.sk-spinner-wave.sk-spinner-list(
class=currentBoard.colorClass
.sk-spinner.sk-spinner-list(
class="{{currentBoard.colorClass}} {{getSkSpinnerName}}"
id="showMoreResults")
.sk-rect1
.sk-rect2
.sk-rect3
.sk-rect4
.sk-rect5
+spinnerRaw
template(name="addCardForm")
.minicard.minicard-composer.js-composer

View file

@ -1,3 +1,5 @@
import { Spinner } from '/client/lib/spinner';
const subManager = new SubsManager();
const InfiniteScrollIter = 10;
@ -116,8 +118,6 @@ BlazeComponent.extendComponent({
if (position === 'bottom') {
this.scrollToBottom();
}
formComponent.reset();
}
},
@ -698,7 +698,7 @@ BlazeComponent.extendComponent({
},
}).register('searchElementPopup');
BlazeComponent.extendComponent({
(class extends Spinner {
onCreated() {
this.cardlimit = this.parentComponent().cardlimit;
@ -726,7 +726,7 @@ BlazeComponent.extendComponent({
.parentComponent()
.data()._id;
}
},
}
onRendered() {
this.spinner = this.find('.sk-spinner-list');
@ -741,47 +741,58 @@ BlazeComponent.extendComponent({
);
this.updateList();
},
}
onDestroyed() {
$(this.container).off(`scroll.spinner_${this.swimlaneId}_${this.listId}`);
$(window).off(`resize.spinner_${this.swimlaneId}_${this.listId}`);
},
}
checkIdleTime() {
return window.requestIdleCallback ||
function(handler) {
const startTime = Date.now();
return setTimeout(function() {
handler({
didTimeout: false,
timeRemaining() {
return Math.max(0, 50.0 - (Date.now() - startTime));
},
});
}, 1);
};
}
updateList() {
// Use fallback when requestIdleCallback is not available on iOS and Safari
// https://www.afasterweb.com/2017/11/20/utilizing-idle-moments/
checkIdleTime =
window.requestIdleCallback ||
function(handler) {
const startTime = Date.now();
return setTimeout(function() {
handler({
didTimeout: false,
timeRemaining() {
return Math.max(0, 50.0 - (Date.now() - startTime));
},
});
}, 1);
};
if (this.spinnerInView()) {
this.cardlimit.set(this.cardlimit.get() + InfiniteScrollIter);
checkIdleTime(() => this.updateList());
this.checkIdleTime(() => this.updateList());
}
},
}
spinnerInView() {
const parentViewHeight = this.container.clientHeight;
const bottomViewPosition = this.container.scrollTop + parentViewHeight;
const threshold = this.spinner.offsetTop;
// spinner deleted
if (!this.spinner.offsetTop) {
return false;
}
return bottomViewPosition > threshold;
},
}).register('spinnerList');
const parentViewHeight = this.container.clientHeight;
const bottomViewPosition = this.container.scrollTop + parentViewHeight;
let spinnerOffsetTop = this.spinner.offsetTop;
const addCard = $(this.container).find("a.open-minicard-composer").first()[0];
if (addCard !== undefined) {
spinnerOffsetTop -= addCard.clientHeight;
}
return bottomViewPosition > spinnerOffsetTop;
}
getSkSpinnerName() {
return "sk-spinner-" + super.getSpinnerName().toLowerCase();
}
}.register('spinnerList'));

View file

@ -0,0 +1,5 @@
template(name="spinner")
+Template.dynamic(template=getSpinnerTemplate)
template(name="spinnerRaw")
+Template.dynamic(template=getSpinnerTemplateRaw)

View file

@ -0,0 +1,11 @@
import { Spinner } from '/client/lib/spinner';
(class extends Spinner {
}.register('spinner'));
(class extends Spinner {
getSpinnerTemplateRaw() {
let ret = super.getSpinnerTemplate() + 'Raw';
return ret;
}
}.register('spinnerRaw'));

View file

@ -1,6 +0,0 @@
.sk-spinner.sk-spinner-wave(class=currentBoard.colorClass)
.sk-rect1
.sk-rect2
.sk-rect3
.sk-rect4
.sk-rect5

View file

@ -0,0 +1,11 @@
template(name="spinnerBounce")
.sk-spinner.sk-spinner-bounce(class=currentBoard.colorClass)
+spinnerBounceRaw
template(name="spinnerBounceRaw")
.sk-bounce1
|  
.sk-bounce2
|  
.sk-bounce3
|  

View file

@ -0,0 +1,44 @@
@import 'nib'
// From https://github.com/tobiasahlin/SpinKit
.sk-spinner-bounce {
margin: 100px auto 0;
width: 70px;
text-align: center;
div {
width: 18px;
height: 18px;
background-color: #333;
border-radius: 100%;
display: inline-block;
-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
animation: sk-bouncedelay 1.4s infinite ease-in-out both;
}
.sk-bounce1 {
-webkit-animation-delay: -0.32s;
animation-delay: -0.32s;
}
.sk-bounce2 {
-webkit-animation-delay: -0.16s;
animation-delay: -0.16s;
}
}
@-webkit-keyframes sk-bouncedelay {
0%, 80%, 100% { -webkit-transform: scale(0) }
40% { -webkit-transform: scale(1.0) }
}
@keyframes sk-bouncedelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
} 40% {
-webkit-transform: scale(1.0);
transform: scale(1.0);
}
}

View file

@ -0,0 +1,8 @@
template(name="spinnerCube")
.sk-spinner.sk-spinner-cube(class=currentBoard.colorClass)
+spinnerCubeRaw
template(name="spinnerCubeRaw")
.sk-cube1
.sk-cube2
.sk-cube3

View file

@ -0,0 +1,52 @@
@import 'nib'
// From https://github.com/tobiasahlin/SpinKit
.sk-spinner-cube {
margin: 100px auto;
width: 40px;
height: 40px;
position: relative;
}
.sk-cube1, .sk-cube2 {
background-color: #333;
width: 15px;
height: 15px;
position: absolute;
top: 0;
left: 0;
-webkit-animation: sk-cubemove 1.8s infinite ease-in-out;
animation: sk-cubemove 1.8s infinite ease-in-out;
}
.sk-cube2 {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}
@-webkit-keyframes sk-cubemove {
25% { -webkit-transform: translateX(35px) rotate(-90deg) scale(0.5) }
50% { -webkit-transform: translateX(35px) translateY(35px) rotate(-180deg) }
75% { -webkit-transform: translateX(0px) translateY(35px) rotate(-270deg) scale(0.5) }
100% { -webkit-transform: rotate(-360deg) }
}
@keyframes sk-cubemove {
25% {
transform: translateX(35px) rotate(-90deg) scale(0.5);
-webkit-transform: translateX(35px) rotate(-90deg) scale(0.5);
} 50% {
transform: translateX(35px) translateY(35px) rotate(-179deg);
-webkit-transform: translateX(35px) translateY(35px) rotate(-179deg);
} 50.1% {
transform: translateX(35px) translateY(35px) rotate(-180deg);
-webkit-transform: translateX(35px) translateY(35px) rotate(-180deg);
} 75% {
transform: translateX(0px) translateY(35px) rotate(-270deg) scale(0.5);
-webkit-transform: translateX(0px) translateY(35px) rotate(-270deg) scale(0.5);
} 100% {
transform: rotate(-360deg);
-webkit-transform: rotate(-360deg);
}
}

View file

@ -0,0 +1,14 @@
template(name="spinnerCubeGrid")
.sk-spinner.sk-spinner-cube-grid(class=currentBoard.colorClass)
+spinnerCubeGridRaw
template(name="spinnerCubeGridRaw")
.sk-cube-grid.sk-cube-grid1
.sk-cube-grid.sk-cube-grid2
.sk-cube-grid.sk-cube-grid3
.sk-cube-grid.sk-cube-grid4
.sk-cube-grid.sk-cube-grid5
.sk-cube-grid.sk-cube-grid6
.sk-cube-grid.sk-cube-grid7
.sk-cube-grid.sk-cube-grid8
.sk-cube-grid.sk-cube-grid9

View file

@ -0,0 +1,64 @@
@import 'nib'
// From https://github.com/tobiasahlin/SpinKit
.sk-spinner-cube-grid {
width: 40px;
height: 40px;
margin: 100px auto;
}
.sk-spinner-cube-grid .sk-cube-grid {
width: 33%;
height: 33%;
background-color: #333;
float: left;
-webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out;
animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out;
}
.sk-spinner-cube-grid .sk-cube-grid1 {
-webkit-animation-delay: 0.2s;
animation-delay: 0.2s; }
.sk-spinner-cube-grid .sk-cube-grid2 {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s; }
.sk-spinner-cube-grid .sk-cube-grid3 {
-webkit-animation-delay: 0.4s;
animation-delay: 0.4s; }
.sk-spinner-cube-grid .sk-cube-grid4 {
-webkit-animation-delay: 0.1s;
animation-delay: 0.1s; }
.sk-spinner-cube-grid .sk-cube-grid5 {
-webkit-animation-delay: 0.2s;
animation-delay: 0.2s; }
.sk-spinner-cube-grid .sk-cube-grid6 {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s; }
.sk-spinner-cube-grid .sk-cube-grid7 {
-webkit-animation-delay: 0s;
animation-delay: 0s; }
.sk-spinner-cube-grid .sk-cube-grid8 {
-webkit-animation-delay: 0.1s;
animation-delay: 0.1s; }
.sk-spinner-cube-grid .sk-cube-grid9 {
-webkit-animation-delay: 0.2s;
animation-delay: 0.2s; }
@-webkit-keyframes sk-cubeGridScaleDelay {
0%, 70%, 100% {
-webkit-transform: scale3D(1, 1, 1);
transform: scale3D(1, 1, 1);
} 35% {
-webkit-transform: scale3D(0, 0, 1);
transform: scale3D(0, 0, 1);
}
}
@keyframes sk-cubeGridScaleDelay {
0%, 70%, 100% {
-webkit-transform: scale3D(1, 1, 1);
transform: scale3D(1, 1, 1);
} 35% {
-webkit-transform: scale3D(0, 0, 1);
transform: scale3D(0, 0, 1);
}
}

View file

@ -0,0 +1,7 @@
template(name="spinnerDot")
.sk-spinner.sk-spinner-dot(class=currentBoard.colorClass)
+spinnerDotRaw
template(name="spinnerDotRaw")
.sk-dot1
.sk-dot2

View file

@ -0,0 +1,51 @@
@import 'nib'
// From https://github.com/tobiasahlin/SpinKit
.sk-spinner-dot {
margin: 100px auto;
width: 40px;
height: 40px;
position: relative;
text-align: center;
-webkit-animation: sk-rotate 2.0s infinite linear;
animation: sk-rotate 2.0s infinite linear;
}
.sk-dot1, .sk-dot2 {
width: 40%;
height: 40%;
display: inline-block;
position: absolute;
top: 0;
background-color: #333;
border-radius: 100%;
-webkit-animation: sk-bounce 2.0s infinite ease-in-out;
animation: sk-bounce 2.0s infinite ease-in-out;
}
.sk-dot2 {
top: auto;
bottom: 0;
-webkit-animation-delay: -1.0s;
animation-delay: -1.0s;
}
@-webkit-keyframes sk-rotate { 100% { -webkit-transform: rotate(360deg) }}
@keyframes sk-rotate { 100% { transform: rotate(360deg); -webkit-transform: rotate(360deg) }}
@-webkit-keyframes sk-bounce {
0%, 100% { -webkit-transform: scale(0.0) }
50% { -webkit-transform: scale(1.0) }
}
@keyframes sk-bounce {
0%, 100% {
transform: scale(0.0);
-webkit-transform: scale(0.0);
} 50% {
transform: scale(1.0);
-webkit-transform: scale(1.0);
}
}

View file

@ -0,0 +1,7 @@
template(name="spinnerDoubleBounce")
.sk-spinner.sk-spinner-double-bounce(class=currentBoard.colorClass)
+spinnerDoubleBounceRaw
template(name="spinnerDoubleBounceRaw")
.sk-double-bounce1
.sk-double-bounce2

View file

@ -0,0 +1,44 @@
@import 'nib'
// From https://github.com/tobiasahlin/SpinKit
.sk-spinner-double-bounce {
width: 40px;
height: 40px;
position: relative;
margin: 100px auto;
}
.sk-double-bounce1, .sk-double-bounce2 {
width: 100%;
height: 100%;
border-radius: 50%;
background-color: #333;
opacity: 0.6;
position: absolute;
top: 0;
left: 0;
-webkit-animation: sk-bounce 2.0s infinite ease-in-out;
animation: sk-bounce 2.0s infinite ease-in-out;
}
.sk-double-bounce2 {
-webkit-animation-delay: -1.0s;
animation-delay: -1.0s;
}
@-webkit-keyframes sk-bounce {
0%, 100% { -webkit-transform: scale(0.0) }
50% { -webkit-transform: scale(1.0) }
}
@keyframes sk-bounce {
0%, 100% {
transform: scale(0.0);
-webkit-transform: scale(0.0);
} 50% {
transform: scale(1.0);
-webkit-transform: scale(1.0);
}
}

View file

@ -0,0 +1,6 @@
template(name="spinnerRotateplane")
.sk-spinner.sk-spinner-rotateplane(class=currentBoard.colorClass)
+spinnerRotateplaneRaw
template(name="spinnerRotateplaneRaw")
.sk-rotateplane1

View file

@ -0,0 +1,38 @@
@import 'nib'
// From https://github.com/tobiasahlin/SpinKit
.sk-spinner-rotateplane {
width: 40px;
height: 40px;
text-align: center;
margin: 100px auto;
-webkit-animation: sk-rotateplane 1.2s infinite ease-in-out;
animation: sk-rotateplane 1.2s infinite ease-in-out;
div {
background-color: #333;
height: 100%;
width: 100%;
display: inline-block;
}
}
@-webkit-keyframes sk-rotateplane {
0% { -webkit-transform: perspective(120px) }
50% { -webkit-transform: perspective(120px) rotateY(180deg) }
100% { -webkit-transform: perspective(120px) rotateY(180deg) rotateX(180deg) }
}
@keyframes sk-rotateplane {
0% {
transform: perspective(120px) rotateX(0deg) rotateY(0deg);
-webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg)
} 50% {
transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
-webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg)
} 100% {
transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
-webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
}
}

View file

@ -0,0 +1,6 @@
template(name="spinnerScaleout")
.sk-spinner.sk-spinner-scaleout(class=currentBoard.colorClass)
+spinnerScaleoutRaw
template(name="spinnerScaleoutRaw")
.sk-scaleout1

View file

@ -0,0 +1,40 @@
@import 'nib'
// From https://github.com/tobiasahlin/SpinKit
.sk-spinner-scaleout {
width: 40px;
height: 40px;
text-align: center;
margin: 100px auto;
border-radius: 100%;
-webkit-animation: sk-scaleout 1.0s infinite ease-in-out;
animation: sk-scaleout 1.0s infinite ease-in-out;
div {
background-color: #333;
height: 100%;
width: 100%;
display: inline-block;
}
}
@-webkit-keyframes sk-scaleout {
0% { -webkit-transform: scale(0) }
100% {
-webkit-transform: scale(1.0);
opacity: 0;
}
}
@keyframes sk-scaleout {
0% {
-webkit-transform: scale(0);
transform: scale(0);
} 100% {
-webkit-transform: scale(1.0);
transform: scale(1.0);
opacity: 0;
}
}

View file

@ -0,0 +1,15 @@
template(name="spinnerWave")
.sk-spinner.sk-spinner-wave(class=currentBoard.colorClass)
+spinnerWaveRaw
template(name="spinnerWaveRaw")
.sk-rect1
|  
.sk-rect2
|  
.sk-rect3
|  
.sk-rect4
|  
.sk-rect5
|  

View file

@ -1,21 +1,7 @@
@import 'nib'
/*
* From https://github.com/tobiasahlin/SpinKit
*
* Usage:
*
* <div class="sk-spinner sk-spinner-wave">
* <div class="sk-rect1"></div>
* <div class="sk-rect2"></div>
* <div class="sk-rect3"></div>
* <div class="sk-rect4"></div>
* <div class="sk-rect5"></div>
* </div>
*
*/
.sk-spinner {
// From https://github.com/tobiasahlin/SpinKit
.sk-spinner-wave {
width: 50px;
height: 50px;
margin: auto;

View file

@ -531,6 +531,9 @@ template(name="settingsOrgPopup")
ul.pop-over-list
li
form
label#deleteOrgWarningMessage.hide
| {{_ 'delete-org-warning-message'}}
br
label
| {{_ 'delete-org-confirm-popup'}}
br
@ -552,6 +555,9 @@ template(name="settingsTeamPopup")
ul.pop-over-list
li
form
label#deleteTeamWarningMessage.hide
| {{_ 'delete-team-warning-message'}}
br
label
| {{_ 'delete-team-confirm-popup'}}
br

View file

@ -329,8 +329,13 @@ Template.newUserPopup.helpers({
},
isSelected(match) {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
return selected === match;
if(userId){
const selected = Users.findOne(userId).authenticationMethod;
return selected === match;
}
else{
false;
}
},
isLdap() {
const userId = Template.instance().data.userId;
@ -515,15 +520,13 @@ Template.editUserPopup.events({
const isAdmin = templateInstance.find('.js-profile-isadmin').value.trim();
const isActive = templateInstance.find('.js-profile-isactive').value.trim();
const email = templateInstance.find('.js-profile-email').value.trim();
const verified = templateInstance
.find('.js-profile-email-verified')
.value.trim();
const authentication = templateInstance
.find('.js-authenticationMethod')
.value.trim();
const importUsernames = templateInstance
.find('.js-import-usernames')
.value.trim();
const verified = templateInstance.find('.js-profile-email-verified').value.trim();
const authentication = templateInstance.find('.js-authenticationMethod').value.trim();
const importUsernames = templateInstance.find('.js-import-usernames').value.trim();
const userOrgs = templateInstance.find('.js-userOrgs').value.trim();
const userOrgsIds = templateInstance.find('.js-userOrgIds').value.trim();
const userTeams = templateInstance.find('.js-userteams').value.trim();
const userTeamsIds = templateInstance.find('.js-userteamIds').value.trim();
const isChangePassword = password.length > 0;
const isChangeUserName = username !== user.username;
@ -555,12 +558,24 @@ Template.editUserPopup.events({
let userTeamsList = userTeams.split(",");
let userTeamsIdsList = userTeamsIds.split(",");
let userTms = [];
<<<<<<< HEAD
for(let i = 0; i < userTeamsList.length; i++){
userTms.push({
"teamId": userTeamsIdsList[i],
"teamDisplayName": userTeamsList[i],
})
}
=======
if(userTeams != ''){
for(let i = 0; i < userTeamsList.length; i++){
userTms.push({
"teamId": userTeamsIdsList[i],
"teamDisplayName": userTeamsList[i],
})
}
}
>>>>>>> feature/250f95de
Users.update(this.userId, {
$set:{
teams: userTms
@ -570,12 +585,24 @@ Template.editUserPopup.events({
let userOrgsList = userOrgs.split(",");
let userOrgsIdsList = userOrgsIds.split(",");
let userOrganizations = [];
<<<<<<< HEAD
for(let i = 0; i < userOrgsList.length; i++){
userOrganizations.push({
"orgId": userOrgsIdsList[i],
"orgDisplayName": userOrgsList[i],
})
}
=======
if(userOrgs != ''){
for(let i = 0; i < userOrgsList.length; i++){
userOrganizations.push({
"orgId": userOrgsIdsList[i],
"orgDisplayName": userOrgsList[i],
})
}
}
>>>>>>> feature/250f95de
Users.update(this.userId, {
$set:{
orgs: userOrganizations
@ -725,7 +752,11 @@ UpdateUserOrgsOrTeamsElement = function(isNewUser = false){
lstInputValuesIds = [];
}
index = lstInputValues.indexOf(selectedEltValue);
<<<<<<< HEAD
indexId = lstInputValuesIds.indexOf(selectedEltValue);
=======
indexId = lstInputValuesIds.indexOf(selectedEltValueId);
>>>>>>> feature/250f95de
if(userOrgsTeamsAction == "addOrg" || userOrgsTeamsAction == "addTeam"){
if(index <= -1 && selectedEltValueId != "-1"){
lstInputValues.push(selectedEltValue);
@ -883,6 +914,8 @@ Template.newUserPopup.events({
},
'click #addUserOrgNewUser'(event) {
event.preventDefault();
<<<<<<< HEAD
=======
userOrgsTeamsAction = "addOrg";
document.getElementById("jsOrgsNewUser").style.display = 'block';
@ -918,6 +951,75 @@ Template.newUserPopup.events({
UpdateUserOrgsOrTeamsElement(true);
},
});
>>>>>>> feature/250f95de
userOrgsTeamsAction = "addOrg";
document.getElementById("jsOrgsNewUser").style.display = 'block';
document.getElementById("jsTeamsNewUser").style.display = 'none';
},
'click #removeUserOrgNewUser'(event) {
event.preventDefault();
<<<<<<< HEAD
=======
if(Users.find({"orgs.orgId": this.orgId}).count() > 0)
{
let orgClassList = document.getElementById("deleteOrgWarningMessage").classList;
if(orgClassList.contains('hide'))
{
orgClassList.remove('hide');
document.getElementById("deleteOrgWarningMessage").style.color = "red";
}
return;
}
Org.remove(this.orgId);
Popup.close();
}
});
>>>>>>> feature/250f95de
userOrgsTeamsAction = "removeOrg";
document.getElementById("jsOrgsNewUser").style.display = 'block';
document.getElementById("jsTeamsNewUser").style.display = 'none';
},
'click #addUserTeamNewUser'(event) {
event.preventDefault();
<<<<<<< HEAD
userOrgsTeamsAction = "addTeam";
document.getElementById("jsTeamsNewUser").style.display = 'block';
document.getElementById("jsOrgsNewUser").style.display = 'none';
},
'click #removeUserTeamNewUser'(event) {
event.preventDefault();
userOrgsTeamsAction = "removeTeam";
document.getElementById("jsTeamsNewUser").style.display = 'block';
document.getElementById("jsOrgsNewUser").style.display = 'none';
},
'change #jsOrgsNewUser'(event) {
event.preventDefault();
UpdateUserOrgsOrTeamsElement(true);
},
'change #jsTeamsNewUser'(event) {
event.preventDefault();
UpdateUserOrgsOrTeamsElement(true);
},
=======
if(Users.find({"teams.teamId": this.teamId}).count() > 0)
{
let teamClassList = document.getElementById("deleteTeamWarningMessage").classList;
if(teamClassList.contains('hide'))
{
teamClassList.remove('hide');
document.getElementById("deleteTeamWarningMessage").style.color = "red";
}
return;
}
Team.remove(this.teamId);
Popup.close();
}
>>>>>>> feature/250f95de
});
Template.settingsUserPopup.events({
'click .impersonate-user'(event) {

View file

@ -173,6 +173,9 @@ template(name='layoutSettings')
li.layout-form
.title {{_ 'default-authentication-method'}}
+selectAuthenticationMethod(authenticationMethod=currentSetting.defaultAuthenticationMethod)
li.layout-form
.title {{_ 'wait-spinner'}}
+selectSpinnerName(spinnerName=currentSetting.spinnerName)
li.layout-form
.title {{_ 'custom-product-name'}}
.form-group
@ -222,3 +225,11 @@ template(name='selectAuthenticationMethod')
option(value="{{value}}" selected) {{_ value}}
else
option(value="{{value}}") {{_ value}}
template(name='selectSpinnerName')
select#spinnerName
each spinner in spinners
if isSelected spinner
option(value="{{spinner}}" selected) {{_ spinner}}
else
option(value="{{spinner}}") {{_ spinner}}

View file

@ -1,3 +1,5 @@
import { ALLOWED_WAIT_SPINNERS } from '/config/const';
BlazeComponent.extendComponent({
onCreated() {
this.error = new ReactiveVar('');
@ -199,6 +201,8 @@ BlazeComponent.extendComponent({
$('input[name=displayAuthenticationMethod]:checked').val() === 'true';
const defaultAuthenticationMethod = $('#defaultAuthenticationMethod').val();
const spinnerName = $('#spinnerName').val();
try {
Settings.update(Settings.findOne()._id, {
$set: {
@ -213,6 +217,7 @@ BlazeComponent.extendComponent({
displayAuthenticationMethod,
defaultAuthenticationMethod,
automaticLinkedUrlSchemes,
spinnerName,
},
});
} catch (e) {
@ -384,3 +389,12 @@ Template.selectAuthenticationMethod.helpers({
return Template.instance().data.authenticationMethod === match;
},
});
Template.selectSpinnerName.helpers({
spinners() {
return ALLOWED_WAIT_SPINNERS;
},
isSelected(match) {
return Template.instance().data.spinnerName === match;
},
});

View file

@ -133,6 +133,12 @@ template(name="boardCardSettingsPopup")
span
i.fa.fa-user-plus
| {{_ 'requested-by'}}
div.check-div
a.flex.js-field-has-card-sorting-by-number(class="{{#if allowsCardSortingByNumber}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsCardSortingByNumber}}is-checked{{/if}}")
span
i.fa.fa-sort
| {{_ 'card-sorting-by-number'}}
div.check-div
a.flex.js-field-has-labels(class="{{#if allowsLabels}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsLabels}}is-checked{{/if}}")

View file

@ -754,6 +754,10 @@ BlazeComponent.extendComponent({
return this.currentBoard.allowsRequestedBy;
},
allowsCardSortingByNumber() {
return this.currentBoard.allowsCardSortingByNumber;
},
allowsLabels() {
return this.currentBoard.allowsLabels;
},
@ -968,6 +972,22 @@ BlazeComponent.extendComponent({
this.currentBoard.allowsRequestedBy,
);
},
'click .js-field-has-card-sorting-by-number'(evt) {
evt.preventDefault();
this.currentBoard.allowsCardSortingByNumber = !this.currentBoard
.allowsCardSortingByNumber;
this.currentBoard.setAllowsCardSortingByNumber(
this.currentBoard.allowsCardSortingByNumber,
);
$(`.js-field-has-card-sorting-by-number ${MCB}`).toggleClass(
CKCLS,
this.currentBoard.allowsCardSortingByNumber,
);
$('.js-field-has-card-sorting-by-number').toggleClass(
CKCLS,
this.currentBoard.allowsCardSortingByNumber,
);
},
'click .js-field-has-labels'(evt) {
evt.preventDefault();
this.currentBoard.allowsLabels = !this.currentBoard.allowsLabels;