Przeglądaj źródła

Merge branch 'master' into devel

Maxime Quandalle 9 lat temu
rodzic
commit
0f014c954c

+ 5 - 5
History.md

@@ -13,15 +13,15 @@ security. It also features the following improvements:
   by Sandstorm);
 * Cards multi-selection to facilitate batch actions such as moving all the cards
   of selection, or attaching a label or a member to them;
+* Automatic drafts saving synced with the server;
 * Keyboard navigation, press `?` to read the list of available shortcuts;
 * The possibility to restore archived boards, lists, and cards.
 
 Starting from this release we will also distribute official docker images on
-both the
-[GitHub release page](https://github.com/wekan/wekan/releases)
-and on the
-[DockerHub](https://hub.docker.com/r/mquandalle/wekan). We also improved
-Sandstorm integration with the support of its build-in sharing model.
+both the [GitHub release page](https://github.com/wekan/wekan/releases) and on
+the [DockerHub](https://hub.docker.com/r/mquandalle/wekan). We also configured
+Heroku one-click install and improved Sandstorm integration with the integration
+of its build-in sharing model.
 
 New languages supported: Chinese, Finnish, Spanish, Korean, and Russian.
 

+ 25 - 14
README.md

@@ -1,27 +1,38 @@
 # Wekan
 
-[![Join the chat at https://gitter.im/wekan/wekan](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/wekan/wekan?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+[![Join the chat][gitter_badge]][gitter_chat]
 
-<!-- XXX Need to improve this introduction -->
+Wekan is an open-source and collaborative kanban board application.
 
-Wekan is an open-source *kanban* board that let you organize things in cards,
-and cards in lists. You can use it alone, or with your team and family thanks to
-our real-time synchronisation feature. Wekan is a land of liberty and you can
-implement all sort of workflows on it using tags, comments, member assignation,
-and many more.
+Whether you’re maintaining a personal todo list, planning your holidays with
+some friends, or working in a team on your next revolutionary idea, Kanban
+boards are an unbeatable tool to keep your things organized. They give you a
+visual overview of the current state of your project, and make you productive by
+allowing you to focus on the few items that matter the most.
 
-[![Our roadmap is self-hosted on LibreBoard][thumbnail]][roadmap]
+[![Our roadmap is self-hosted on Wekan][screenshot]][roadmap]
+
+Wekan supports most features you would expect of it including a real-time user
+interface, cards comments, member assignations, customizable labels, filtered
+views, and more.
 
 Since it is a free software, you don’t have to trust us with your data and can
 install Wekan on your own computer or server. In fact we encourage you to do
-that by providing one-click installation for the
-[Sandstorm](https://sandstorm.io) platform and verified
-[Docker](https://www.docker.com) images.
+that by providing one-click installation on Heroku or [Sandstorm]
+[sandstorm_market] platforms and verified [Docker][docker_image] images.
+
+[![Deploy][heroku_button]][heroku_deploy]
 
 Wekan is released under the very permissive [MIT license](LICENSE), and made
 with [Meteor](https://www.meteor.com).
 
-[Our roadmap is self-hosted on LibreBoard][roadmap]
+[Our roadmap is self-hosted on Wekan][roadmap]
 
-[thumbnail]: http://i.imgur.com/IIdHUmW.png
-[roadmap]: http://libreboard.com/boards/MeSsFJaSqeuo9M6bs/libreboard-roadmap
+[screenshot]: http://i.imgur.com/cI4jW2h.png
+[gitter_badge]: https://badges.gitter.im/Join%20Chat.svg
+[gitter_chat]: https://gitter.im/wekan/wekan
+[roadmap]: http://try.wekan.io/b/MeSsFJaSqeuo9M6bs/wekan-roadmap
+[sandstorm_market]: https://oasis.sandstorm.io/appdemo/m86q05rdvj14yvn78ghaxynqz7u2svw6rnttptxx49g1785cdv1h
+[docker_image]: https://hub.docker.com/r/mquandalle/wekan/
+[heroku_button]: https://www.herokucdn.com/deploy/button.png
+[heroku_deploy]: https://heroku.com/deploy?template=https://github.com/wekan/wekan/tree/master

+ 19 - 0
app.json

@@ -0,0 +1,19 @@
+{
+  "name": "Wekan",
+  "description": "The open-source Trello-like kanban",
+  "repository": "https://github.com/wekan/wekan",
+  "logo": "https://raw.githubusercontent.com/wekan/wekan/master/meta/icons/wekan-150.png",
+  "keywords": ["productivity", "tool", "team", "kanban"],
+  "website": "http://wekan.io",
+  "env": {
+    "BUILDPACK_URL": "https://github.com/AdmitHub/meteor-buildpack-horse.git",
+    "ROOT_URL": {
+      "description": "IMPORTANT! Please replace <App Name> with the value provided on the top. This will be the full URL of your Wekan app.",
+      "value": "https://<App Name>.herokuapp.com"
+    }
+  },
+  "addons": [
+    "mongolab",
+    "logentries"
+  ]
+}

+ 7 - 1
client/components/boards/boardBody.js

@@ -68,7 +68,13 @@ BlazeComponent.extendComponent({
 
       // Click-and-drag action
       'mousedown .board-canvas'(evt) {
-        if ($(evt.target).closest('a,.js-list-header').length === 0) {
+        // Translating the board canvas using the click-and-drag action can
+        // conflict with the build-in browser mechanism to select text. We
+        // define a list of elements in which we disable the dragging because
+        // the user will legitimately expect to be able to select some text with
+        // his mouse.
+        const noDragInside = ['a', 'input', 'textarea', 'p', '.js-list-header'];
+        if ($(evt.target).closest(noDragInside.join(',')).length === 0) {
           this._isDragging = true;
           this._lastDragPositionX = evt.clientX;
         }

+ 3 - 0
client/components/cards/cardDetails.js

@@ -96,6 +96,9 @@ BlazeComponent.extendComponent({
   _getUnsavedEditKey() {
     return {
       fieldName: 'cardDescription',
+      // XXX Recovering the currentCard identifier form a session variable is
+      // fragile because this variable may change for instance if the route
+      // change. We should use some component props instead.
       docId: Session.get('currentCard'),
     };
   }

+ 1 - 1
client/components/sidebar/sidebar.jade

@@ -42,7 +42,7 @@ template(name="labelsWidget")
     .board-widget-content
       each currentBoard.labels
           a.card-label(class="card-label-{{color}}"
-            class="{{#if currentUser.isBoardMember}}js-add-labels{{/if}}")
+            class="{{#if currentUser.isBoardMember}}js-label{{/if}}")
             span.card-label-name= name
       if currentUser.isBoardAdmin
         a.card-label.add-label.js-add-label

+ 2 - 2
client/config/router.js

@@ -40,11 +40,11 @@ FlowRouter.route('/b/:id/:slug', {
 FlowRouter.route('/b/:boardId/:slug/:cardId', {
   name: 'card',
   action(params) {
+    EscapeActions.executeUpTo('inlinedForm');
+
     Session.set('currentBoard', params.boardId);
     Session.set('currentCard', params.cardId);
 
-    EscapeActions.executeUpTo('inlinedForm');
-
     BlazeLayout.render('defaultLayout', { content: 'board' });
   },
 });

+ 3 - 3
i18n/fr.i18n.json

@@ -24,7 +24,7 @@
     "added": "Ajouté",
     "addMemberPopup-title": "Membres",
     "admin": "Admin",
-    "admin-desc": "Peut voir et éditer les cartes, supprimer des membres, et changer les paramètres du tableau.",
+    "admin-desc": "Peut voir et éditer les cartes, supprimer des membres et changer les paramètres du tableau.",
     "all-boards": "Tous les tableaux",
     "and-n-other-card": "Et __count__ autre carte",
     "and-n-other-card_plural": "Et __count__ autres cartes",
@@ -43,7 +43,7 @@
     "attachment-delete-pop": "La suppression d'une pièce jointe est définitive. Elle ne peut être annulée.",
     "attachmentDeletePopup-title": "Supprimer la pièce jointe ?",
     "attachments": "Pièces jointes",
-    "avatar-too-big": "L’avatar est trop gros (70Kb max)",
+    "avatar-too-big": "La taille du fichier de l’avatar est trop importante (70 Ko au maximum)",
     "back": "Retour",
     "board-change-color": "Changer la couleur",
     "board-nb-stars": "%s étoiles",
@@ -195,6 +195,6 @@
     "uploaded-avatar": "Avatar téléchargé",
     "username": "Nom d'utilisateur",
     "view-it": "Le voir",
-    "warn-list-archived": "attention: cette carte est dans une liste archivée",
+    "warn-list-archived": "Attention : cette carte est dans une liste archivée",
     "what-to-do": "Que voulez-vous faire ?"
 }

+ 34 - 34
i18n/pt-BR.i18n.json

@@ -1,6 +1,6 @@
 {
     "actions": "Ações",
-    "activities": "Activities",
+    "activities": "Atividades",
     "activity": "Atividade",
     "activity-added": "adicionou %s a %s",
     "activity-archived": "arquivou %s",
@@ -14,30 +14,30 @@
     "activity-sent": "enviou %s de %s",
     "activity-unjoined": "deixou %s",
     "add": "Novo",
-    "add-attachment": "Add an attachment",
+    "add-attachment": "Adicionar um anexo",
     "add-board": "Criar um quadro novo",
-    "add-card": "Add a card",
+    "add-card": "Adicionar um cartão",
     "add-cover": "Adicionar Capa",
-    "add-label": "Add the label",
-    "add-list": "Add a list",
-    "add-members": "Add Members",
+    "add-label": "Adicionar a Etiqueta",
+    "add-list": "Adicionar uma lista",
+    "add-members": "Adicionar Membros",
     "added": "Criado",
     "addMemberPopup-title": "Membros",
     "admin": "Administrador",
     "admin-desc": "Pode ver e editar cartões, remover membros e alterar configurações do quadro.",
-    "all-boards": "All boards",
+    "all-boards": "Todos os quadros",
     "and-n-other-card": "And __count__ other card",
     "and-n-other-card_plural": "And __count__ other cards",
     "archive": "Arquivar",
     "archive-all": "Arquivar Tudo",
-    "archive-board": "Archive Board",
-    "archive-card": "Archive Card",
+    "archive-board": "Arquivar Quadro",
+    "archive-card": "Arquivar Cartão",
     "archive-list": "Arquivar esta lista",
-    "archive-selection": "Archive selection",
+    "archive-selection": "Arquivar seleção",
     "archiveBoardPopup-title": "Fechar Quadro?",
     "archived-items": "Itens Arquivados",
-    "archives": "Archives",
-    "assign-member": "Assign member",
+    "archives": "Arquivos",
+    "assign-member": "Atribuir Membro",
     "attached": "anexado",
     "attachment": "Anexo",
     "attachment-delete-pop": "Excluir um anexo é permanente. Não será possível recuperá-lo.",
@@ -45,15 +45,15 @@
     "attachments": "Anexos",
     "avatar-too-big": "The avatar is too large (70Kb max)",
     "back": "Voltar",
-    "board-change-color": "Change color",
+    "board-change-color": "Alterar cor",
     "board-nb-stars": "%s stars",
     "board-not-found": "Quadro não encontrado",
-    "board-private-info": "This board will be <strong>private</strong>.",
+    "board-private-info": "Este quadro será <strong>privado</strong>.",
     "board-public-info": "Este quadro será <strong>público</strong>.",
-    "boardChangeColorPopup-title": "Change Board Background",
+    "boardChangeColorPopup-title": "Alterar Tela de Fundo",
     "boardChangeTitlePopup-title": "Renomear Quadro",
     "boardChangeVisibilityPopup-title": "Alterar Visibilidade",
-    "boardMenuPopup-title": "Board Menu",
+    "boardMenuPopup-title": "Menu do Quadro",
     "boards": "Quadros",
     "bucket-example": "Like “Bucket List” for example",
     "cancel": "Cancelar",
@@ -62,21 +62,21 @@
     "card-delete-notice": "A exclusão será permanente. Você perderá todas as ações associadas a este cartão.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
     "card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
-    "card-edit-attachments": "Edit attachments",
-    "card-edit-labels": "Edit labels",
-    "card-edit-members": "Edit members",
+    "card-edit-attachments": "Editar anexos",
+    "card-edit-labels": "Editar etiquetas",
+    "card-edit-members": "Editar membros",
     "card-labels-title": "Alterar etiquetas do cartão.",
     "card-members-title": "Acrescentar ou remover membros do quadro deste cartão.",
-    "cardAttachmentsPopup-title": "Attach From",
+    "cardAttachmentsPopup-title": "Anexar a partir de",
     "cardDeletePopup-title": "Excluir Cartão?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Etiquetas",
     "cardMembersPopup-title": "Membros",
     "cardMorePopup-title": "Mais",
-    "cards": "Cards",
+    "cards": "Cartões",
     "change-avatar": "Alterar Avatar",
     "change-password": "Alterar Senha",
-    "change-permissions": "Change permissions",
+    "change-permissions": "Alterar permissões",
     "changeAvatarPopup-title": "Alterar Avatar",
     "changeLanguagePopup-title": "Alterar Idioma",
     "changePasswordPopup-title": "Alterar Senha",
@@ -84,10 +84,10 @@
     "click-to-star": "Marcar quadro como favorito.",
     "click-to-unstar": "Remover quadro dos favoritos.",
     "close": "Fechar",
-    "close-board": "Close Board",
+    "close-board": "Fechar Quadro",
     "close-board-pop": "Você pode reabrir um quadro clicando em “Quadros” no menu no cabeçalho, selecionando “Exibir Quadros Fechados”, encontrando-o e clicando em “Reabrir”.",
     "comment": "Comentário",
-    "comment-placeholder": "Write a comment",
+    "comment-placeholder": "Escrever um comentário",
     "computer": "Computador",
     "create": "Criar",
     "createBoardPopup-title": "Criar Quadro",
@@ -103,21 +103,21 @@
     "download": "Baixar",
     "edit": "Editar",
     "edit-avatar": "Alterar Avatar",
-    "edit-profile": "Edit Profile",
+    "edit-profile": "Editar Perfil",
     "editLabelPopup-title": "Alterar Etiqueta",
-    "editProfilePopup-title": "Edit Profile",
+    "editProfilePopup-title": "Editar Perfil",
     "email": "E-mail",
-    "filter": "Filter",
+    "filter": "Filtrar",
     "filter-cards": "Filtrar Cartões",
-    "filter-clear": "Clear filter",
-    "filter-on": "Filter is on",
+    "filter-clear": "Limpar filtro",
+    "filter-on": "Filtro está ativo",
     "filter-on-desc": "Você está filtrando cartões neste quadro. Clique aqui para editar o filtro.",
     "filter-to-selection": "Filter to selection",
     "fullname": "Nome Completo",
     "header-logo-title": "Voltar para a lista de quadros.",
     "home": "Início",
     "info": "Informações",
-    "initials": "Initials",
+    "initials": "Iniciais",
     "joined": "juntou-se",
     "keyboard-shortcuts": "Keyboard shortcuts",
     "label-create": "Criar uma nova etiqueta",
@@ -126,7 +126,7 @@
     "labels": "Etiquetas",
     "language": "Idioma",
     "last-admin-desc": "Você não pode alterar funções porque deve existir pelo menos um administrador.",
-    "leave-board": "Leave Board",
+    "leave-board": "Sair do Quadro",
     "link-card": "Vincular a este cartão",
     "list-archive-cards": "Archive all cards in this list",
     "list-archive-cards-pop": "Isto removerá todos os cartões desta lista do quadro. Para visualizar os cartões arquivados e trazê-los de volta para o quadro, clique em “Menu” > “Itens Arquivados”.",
@@ -135,13 +135,13 @@
     "listActionPopup-title": "Listar Ações",
     "listArchiveCardsPopup-title": "Arquivar Todos Os Cartões Nesta Lista?",
     "listMoveCardsPopup-title": "Mover Todos Os Cartões Nesta Lista",
-    "lists": "Lists",
+    "lists": "Listas",
     "log-out": "Sair",
     "loginPopup-title": "Entrar",
     "memberMenuPopup-title": "Member Settings",
     "members": "Membros",
     "menu": "Menu",
-    "moveCardPopup-title": "Move Card",
+    "moveCardPopup-title": "Mover Cartão",
     "multi-selection": "Multi-Selection",
     "my-boards": "Meus Quadros",
     "name": "Nome",
@@ -169,7 +169,7 @@
     "removeMemberPopup-title": "Remover Membro?",
     "rename": "Renomear",
     "rename-board": "Renomear Quadro",
-    "restore": "Restore",
+    "restore": "Restaurar",
     "save": "Salvar",
     "search": "Buscar",
     "select-color": "Selecione uma cor",

BIN
meta/icons/wekan-150.png


+ 1 - 1
sandstorm-pkgdef.capnp

@@ -25,7 +25,7 @@ const pkgdef :Spk.PackageDefinition = (
     appVersion = 5,
     # Increment this for every release.
 
-    appMarketingVersion = (defaultText = "0.9.0-rc2"),
+    appMarketingVersion = (defaultText = "0.9.0"),
     # Human-readable presentation of the app version.
 
     minUpgradableAppVersion = 0,