diff options
-rw-r--r-- | CHANGELOG.md | 12 | ||||
-rw-r--r-- | client/components/cards/minicard.jade | 9 | ||||
-rw-r--r-- | client/components/lists/listBody.jade | 2 | ||||
-rw-r--r-- | client/components/lists/listBody.js | 13 | ||||
-rw-r--r-- | client/components/main/layouts.jade | 1 | ||||
-rw-r--r-- | client/components/settings/settingBody.jade | 34 | ||||
-rw-r--r-- | client/components/settings/settingBody.js | 14 | ||||
-rw-r--r-- | i18n/es.i18n.json | 14 | ||||
-rw-r--r-- | i18n/fr.i18n.json | 26 | ||||
-rw-r--r-- | models/cards.js | 8 | ||||
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | sandstorm-pkgdef.capnp | 6 |
12 files changed, 95 insertions, 46 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index d0cc802c..e9f31501 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +# v1.34 2018-08-22 Wekan release + +This release fixes the following bugs: + +- [Restored SMTP settings at Admin Panel, and disabled showing password](https://github.com/wekan/wekan/issues/1790); +- [Move color labels on minicard to bottom of minicard](https://github.com/wekan/wekan/issues/1842); +- [Fix and improve linked cards](https://github.com/wekan/wekan/pull/1849); +- [Allow Sandstorm to serve Wekan HTTP API](https://github.com/wekan/wekan/pull/1851); +- [Add Favicon for pinned tab on Safari browser](https://github.com/wekan/wekan/issues/1795). + +Thanks to GitHub users andresmanelli, ocdtrekkie, therampagerado, woodyart and xet7 for their contributions. + # v1.33 2018-08-16 Wekan release This release fixes the following bugs: diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade index 37f537db..738cb598 100644 --- a/client/components/cards/minicard.jade +++ b/client/components/cards/minicard.jade @@ -4,10 +4,6 @@ template(name="minicard") class="{{#if isLinkedBoard}}linked-board{{/if}}") if cover .minicard-cover(style="background-image: url('{{cover.url}}');") - if labels - .minicard-labels - each labels - .minicard-label(class="card-label-{{color}}" title="{{name}}") .minicard-title if $eq 'prefix-with-full-path' currentBoard.presentParentTask .parent-prefix @@ -80,3 +76,8 @@ template(name="minicard") .badge(class="{{#if checklistFinished}}is-finished{{/if}}") span.badge-icon.fa.fa-check-square-o span.badge-text.check-list-text {{checklistFinishedCount}}/{{checklistItemCount}} + + if labels + .minicard-labels + each labels + .minicard-label(class="card-label-{{color}}" title="{{name}}") diff --git a/client/components/lists/listBody.jade b/client/components/lists/listBody.jade index 8069717e..f2b3e941 100644 --- a/client/components/lists/listBody.jade +++ b/client/components/lists/listBody.jade @@ -70,7 +70,7 @@ template(name="linkCardPopup") label {{_ 'cards'}}: select.js-select-cards each cards - option(value="{{_id}}") {{title}} + option(value="{{getId}}") {{getTitle}} .edit-controls.clearfix input.primary.confirm.js-done(type="button" value="{{_ 'link'}}") diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index 83592a64..896bf178 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -333,21 +333,22 @@ BlazeComponent.extendComponent({ }, cards() { + const ownCardsIds = this.board.cards().map((card) => { return card.linkedId || card._id; }); return Cards.find({ boardId: this.selectedBoardId.get(), swimlaneId: this.selectedSwimlaneId.get(), listId: this.selectedListId.get(), archived: false, - linkedId: null, - _id: {$nin: this.board.cards().map((card) => { return card.linkedId || card._id; })}, + linkedId: {$nin: ownCardsIds}, + _id: {$nin: ownCardsIds}, }); }, events() { return [{ 'change .js-select-boards'(evt) { + subManager.subscribe('board', $(evt.currentTarget).val()); this.selectedBoardId.set($(evt.currentTarget).val()); - subManager.subscribe('board', this.selectedBoardId.get()); }, 'change .js-select-swimlanes'(evt) { this.selectedSwimlaneId.set($(evt.currentTarget).val()); @@ -438,14 +439,14 @@ BlazeComponent.extendComponent({ results() { const board = Boards.findOne(this.selectedBoardId.get()); - return board.searchCards(this.term.get(), true); + return board.searchCards(this.term.get(), false); }, events() { return [{ 'change .js-select-boards'(evt) { + subManager.subscribe('board', $(evt.currentTarget).val()); this.selectedBoardId.set($(evt.currentTarget).val()); - subManager.subscribe('board', this.selectedBoardId.get()); }, 'submit .js-search-term-form'(evt) { evt.preventDefault(); @@ -461,7 +462,7 @@ BlazeComponent.extendComponent({ boardId: this.boardId, sort: Lists.findOne(this.listId).cards().count(), type: 'cardType-linkedCard', - linkedId: card._id, + linkedId: card.linkedId || card._id, }); Filter.addException(_id); Popup.close(); diff --git a/client/components/main/layouts.jade b/client/components/main/layouts.jade index 911f23f4..b0024b33 100644 --- a/client/components/main/layouts.jade +++ b/client/components/main/layouts.jade @@ -9,6 +9,7 @@ head packages. link(rel="shortcut icon" href="/wekan-favicon.png") link(rel="apple-touch-icon" href="/wekan-favicon.png") + link(rel="mask-icon" href="/wekan-150.svg") link(rel="manifest" href="/wekan-manifest.json") template(name="userFormsLayout") diff --git a/client/components/settings/settingBody.jade b/client/components/settings/settingBody.jade index 1832894c..dcf71f4d 100644 --- a/client/components/settings/settingBody.jade +++ b/client/components/settings/settingBody.jade @@ -55,6 +55,40 @@ template(name="general") template(name='email') ul#email-setting.setting-detail + li.smtp-form + .title {{_ 'smtp-host'}} + .description {{_ 'smtp-host-description'}} + .form-group + input.form-control#mail-server-host(type="text", placeholder="smtp.domain.com" value="{{currentSetting.mailServer.host}}") + li.smtp-form + .title {{_ 'smtp-port'}} + .description {{_ 'smtp-port-description'}} + .form-group + input.form-control#mail-server-port(type="text", placeholder="25" value="{{currentSetting.mailServer.port}}") + li.smtp-form + .title {{_ 'smtp-username'}} + .form-group + input.form-control#mail-server-username(type="text", placeholder="{{_ 'username'}}" value="{{currentSetting.mailServer.username}}") + li.smtp-form + .title {{_ 'smtp-password'}} + .form-group + input.form-control#mail-server-password(type="text", placeholder="{{_ 'password'}}" value="") + li.smtp-form + .title {{_ 'smtp-tls'}} + .form-group + a.flex.js-toggle-tls + .materialCheckBox#mail-server-tls(class="{{#if currentSetting.mailServer.enableTLS}}is-checked{{/if}}") + + span {{_ 'smtp-tls-description'}} + + li.smtp-form + .title {{_ 'send-from'}} + .form-group + input.form-control#mail-server-from(type="email", placeholder="no-reply@domain.com" value="{{currentSetting.mailServer.from}}") + + li + button.js-save.primary {{_ 'save'}} + li button.js-send-smtp-test-email.primary {{_ 'send-smtp-test'}} diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js index de96c100..7230d893 100644 --- a/client/components/settings/settingBody.js +++ b/client/components/settings/settingBody.js @@ -20,7 +20,7 @@ BlazeComponent.extendComponent({ setLoading(w) { this.loading.set(w); }, - /* + checkField(selector) { const value = $(selector).val(); if (!value || value.trim() === '') { @@ -30,7 +30,7 @@ BlazeComponent.extendComponent({ return value; } }, -*/ + currentSetting() { return Settings.findOne(); }, @@ -55,11 +55,9 @@ BlazeComponent.extendComponent({ $('.invite-people').slideDown(); } }, - /* toggleTLS() { $('#mail-server-tls').toggleClass('is-checked'); }, -*/ switchMenu(event) { const target = $(event.target); if (!target.hasClass('active')) { @@ -101,13 +99,11 @@ BlazeComponent.extendComponent({ // if (!err) { // TODO - show more info to user // } - this.setLoading(false); }); } }, - /* saveMailServerInfo() { this.setLoading(true); $('li').removeClass('has-error'); @@ -132,7 +128,7 @@ BlazeComponent.extendComponent({ } }, -*/ + sendSMTPTestEmail() { Meteor.call('sendSMTPTestEmail', (err, ret) => { if (!err && ret) { /* eslint-disable no-console */ @@ -152,15 +148,11 @@ BlazeComponent.extendComponent({ events() { return [{ 'click a.js-toggle-registration': this.toggleRegistration, - /* 'click a.js-toggle-tls': this.toggleTLS, -*/ 'click a.js-setting-menu': this.switchMenu, 'click a.js-toggle-board-choose': this.checkBoard, 'click button.js-email-invite': this.inviteThroughEmail, - /* 'click button.js-save': this.saveMailServerInfo, -*/ 'click button.js-send-smtp-test-email': this.sendSMTPTestEmail, }]; }, diff --git a/i18n/es.i18n.json b/i18n/es.i18n.json index d2f42ed3..6088cab2 100644 --- a/i18n/es.i18n.json +++ b/i18n/es.i18n.json @@ -109,7 +109,7 @@ "bucket-example": "Como “Cosas por hacer” por ejemplo", "cancel": "Cancelar", "card-archived": "Esta tarjeta se ha enviado a la papelera de reciclaje.", - "board-archived": "This board is moved to Recycle Bin.", + "board-archived": "Este tablero se ha enviado a la papelera de reciclaje.", "card-comments-title": "Esta tarjeta tiene %s comentarios.", "card-delete-notice": "la eliminación es permanente. Perderás todas las acciones asociadas a esta tarjeta.", "card-delete-pop": "Se eliminarán todas las acciones del historial de actividades y no se podrá volver a abrir la tarjeta. Esta acción no puede deshacerse.", @@ -136,9 +136,9 @@ "cards": "Tarjetas", "cards-count": "Tarjetas", "casSignIn": "Iniciar sesión con CAS", - "cardType-card": "Card", - "cardType-linkedCard": "Linked Card", - "cardType-linkedBoard": "Linked Board", + "cardType-card": "Tarjeta", + "cardType-linkedCard": "Tarjeta enlazada", + "cardType-linkedBoard": "Tablero enlazado", "change": "Cambiar", "change-avatar": "Cambiar el avatar", "change-password": "Cambiar la contraseña", @@ -175,8 +175,8 @@ "confirm-subtask-delete-dialog": "¿Seguro que quieres eliminar la subtarea?", "confirm-checklist-delete-dialog": "¿Seguro que quieres eliminar la lista de verificación?", "copy-card-link-to-clipboard": "Copiar el enlace de la tarjeta al portapapeles", - "linkCardPopup-title": "Link Card", - "searchCardPopup-title": "Search Card", + "linkCardPopup-title": "Enlazar tarjeta", + "searchCardPopup-title": "Buscar tarjeta", "copyCardPopup-title": "Copiar la tarjeta", "copyChecklistToManyCardsPopup-title": "Copiar la plantilla de la lista de verificación en varias tarjetas", "copyChecklistToManyCardsPopup-instructions": "Títulos y descripciones de las tarjetas de destino en formato JSON", @@ -267,7 +267,7 @@ "headerBarCreateBoardPopup-title": "Crear tablero", "home": "Inicio", "import": "Importar", - "link": "Link", + "link": "Enlace", "import-board": "importar un tablero", "import-board-c": "Importar un tablero", "import-board-title-trello": "Importar un tablero desde Trello", diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json index 0468a7af..74b6034c 100644 --- a/i18n/fr.i18n.json +++ b/i18n/fr.i18n.json @@ -109,7 +109,7 @@ "bucket-example": "Comme « todo list » par exemple", "cancel": "Annuler", "card-archived": "Cette carte est déplacée vers la corbeille.", - "board-archived": "This board is moved to Recycle Bin.", + "board-archived": "Ce tableau a été déplacé dans la Corbeille.", "card-comments-title": "Cette carte a %s commentaires.", "card-delete-notice": "La suppression est permanente. Vous perdrez toutes les actions associées à cette carte.", "card-delete-pop": "Toutes les actions vont être supprimées du suivi d'activités et vous ne pourrez plus utiliser cette carte. Cette action est irréversible.", @@ -136,9 +136,9 @@ "cards": "Cartes", "cards-count": "Cartes", "casSignIn": "Se connecter avec CAS", - "cardType-card": "Card", - "cardType-linkedCard": "Linked Card", - "cardType-linkedBoard": "Linked Board", + "cardType-card": "Carte", + "cardType-linkedCard": "Carte liée", + "cardType-linkedBoard": "Tableau lié", "change": "Modifier", "change-avatar": "Modifier l'avatar", "change-password": "Modifier le mot de passe", @@ -175,8 +175,8 @@ "confirm-subtask-delete-dialog": "Êtes-vous sûr de vouloir supprimer la sous-tâche ?", "confirm-checklist-delete-dialog": "Êtes-vous sûr de vouloir supprimer la checklist ?", "copy-card-link-to-clipboard": "Copier le lien vers la carte dans le presse-papier", - "linkCardPopup-title": "Link Card", - "searchCardPopup-title": "Search Card", + "linkCardPopup-title": "Lier une Carte", + "searchCardPopup-title": "Chercher une Carte", "copyCardPopup-title": "Copier la carte", "copyChecklistToManyCardsPopup-title": "Copier le modèle de checklist vers plusieurs cartes", "copyChecklistToManyCardsPopup-instructions": "Titres et descriptions des cartes de destination dans ce format JSON", @@ -267,7 +267,7 @@ "headerBarCreateBoardPopup-title": "Créer un tableau", "home": "Accueil", "import": "Importer", - "link": "Link", + "link": "Lien", "import-board": "importer un tableau", "import-board-c": "Importer un tableau", "import-board-title-trello": "Importer le tableau depuis Trello", @@ -463,7 +463,7 @@ "OS_Platform": "OS Plate-forme", "OS_Release": "OS Version", "OS_Totalmem": "OS Mémoire totale", - "OS_Type": "OS Type", + "OS_Type": "Type d'OS", "OS_Uptime": "OS Durée de fonctionnement", "hours": "heures", "minutes": "minutes", @@ -473,7 +473,7 @@ "no": "Non", "accounts": "Comptes", "accounts-allowEmailChange": "Autoriser le changement d'adresse mail", - "accounts-allowUserNameChange": "Permettre la modification de l'identifiant", + "accounts-allowUserNameChange": "Autoriser le changement d'identifiant", "createdAt": "Créé le", "verified": "Vérifié", "active": "Actif", @@ -485,7 +485,7 @@ "editCardEndDatePopup-title": "Changer la date de fin", "assigned-by": "Assigné par", "requested-by": "Demandé par", - "board-delete-notice": "La suppression est définitive. Vous perdrez toutes vos listes, cartes et actions associées à ce tableau.", + "board-delete-notice": "La suppression est définitive. Vous perdrez toutes les listes, cartes et actions associées à ce tableau.", "delete-board-confirm-popup": "Toutes les listes, cartes, étiquettes et activités seront supprimées et vous ne pourrez pas retrouver le contenu du tableau. Il n'y a pas d'annulation possible.", "boardDeletePopup-title": "Supprimer le tableau ?", "delete-board": "Supprimer le tableau", @@ -497,11 +497,11 @@ "show-subtasks-field": "Les cartes peuvent avoir des sous-tâches", "deposit-subtasks-board": "Déposer des sous-tâches dans ce tableau :", "deposit-subtasks-list": "Liste de destination pour les sous-tâches déposées ici :", - "show-parent-in-minicard": "Voir le parent dans la mini-carte :", + "show-parent-in-minicard": "Voir la carte parente dans la mini-carte :", "prefix-with-full-path": "Préfixer avec le chemin complet", "prefix-with-parent": "Préfixer avec le parent", - "subtext-with-full-path": "Sous-texte avec le chemin complet", - "subtext-with-parent": "Sous-texte avec le parent", + "subtext-with-full-path": "Sous-titre avec le chemin complet", + "subtext-with-parent": "Sous-titre avec le parent", "change-card-parent": "Changer le parent de la carte", "parent-card": "Carte parente", "source-board": "Tableau source", diff --git a/models/cards.js b/models/cards.js index 21a7f2ad..302beddc 100644 --- a/models/cards.js +++ b/models/cards.js @@ -712,6 +712,14 @@ Cards.helpers({ } }, + getId() { + if (this.isLinked()) { + return this.linkedId; + } else { + return this._id; + } + }, + getTitle() { if (this.isLinkedCard()) { const card = Cards.findOne({ _id: this.linkedId }); diff --git a/package.json b/package.json index c3fc8d67..b39eacf6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "1.33.0", + "version": "1.34.0", "description": "The open-source kanban", "private": true, "scripts": { diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index cc871287..d6a35cb5 100644 --- a/sandstorm-pkgdef.capnp +++ b/sandstorm-pkgdef.capnp @@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = ( appTitle = (defaultText = "Wekan"), # The name of the app as it is displayed to the user. - appVersion = 118, + appVersion = 119, # Increment this for every release. - appMarketingVersion = (defaultText = "1.33.0~2018-08-16"), + appMarketingVersion = (defaultText = "1.34.0~2018-08-22"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, @@ -226,7 +226,7 @@ const pkgdef :Spk.PackageDefinition = ( verbPhrase = (defaultText = "removed from card"), ), ], ), - + apiPath = "/api", saveIdentityCaps = true, ), ); |