mirror of
https://github.com/wekan/wekan.git
synced 2026-01-22 01:06:09 +01:00
Merge branch 'devel'
This commit is contained in:
commit
05020241aa
7 changed files with 151 additions and 167 deletions
|
|
@ -1,3 +1,11 @@
|
|||
# v1.01 2018-05-23 Wekan release
|
||||
|
||||
This release possibly fixes the following bugs, please test:
|
||||
|
||||
* [Possible quickfix for all customFields Import errors, please test](https://github.com/wekan/wekan/pull/1653).
|
||||
|
||||
Thanks to GitHub users feuerball11 and xet7 for their contributions.
|
||||
|
||||
# v1.00 2018-05-21 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
|
|
|||
|
|
@ -86,18 +86,17 @@ class AdvancedFilter {
|
|||
constructor() {
|
||||
this._dep = new Tracker.Dependency();
|
||||
this._filter = '';
|
||||
this._lastValide={};
|
||||
this._lastValide = {};
|
||||
}
|
||||
|
||||
set(str)
|
||||
{
|
||||
set(str) {
|
||||
this._filter = str;
|
||||
this._dep.changed();
|
||||
}
|
||||
|
||||
reset() {
|
||||
this._filter = '';
|
||||
this._lastValide={};
|
||||
this._lastValide = {};
|
||||
this._dep.changed();
|
||||
}
|
||||
|
||||
|
|
@ -106,75 +105,63 @@ class AdvancedFilter {
|
|||
return this._filter !== '';
|
||||
}
|
||||
|
||||
_filterToCommands(){
|
||||
_filterToCommands() {
|
||||
const commands = [];
|
||||
let current = '';
|
||||
let string = false;
|
||||
let wasString = false;
|
||||
let ignore = false;
|
||||
for (let i = 0; i < this._filter.length; i++)
|
||||
{
|
||||
for (let i = 0; i < this._filter.length; i++) {
|
||||
const char = this._filter.charAt(i);
|
||||
if (ignore)
|
||||
{
|
||||
if (ignore) {
|
||||
ignore = false;
|
||||
continue;
|
||||
}
|
||||
if (char === '\'')
|
||||
{
|
||||
if (char === '\'') {
|
||||
string = !string;
|
||||
if (string) wasString = true;
|
||||
continue;
|
||||
}
|
||||
if (char === '\\')
|
||||
{
|
||||
if (char === '\\') {
|
||||
ignore = true;
|
||||
continue;
|
||||
}
|
||||
if (char === ' ' && !string)
|
||||
{
|
||||
commands.push({'cmd':current, 'string':wasString});
|
||||
if (char === ' ' && !string) {
|
||||
commands.push({ 'cmd': current, 'string': wasString });
|
||||
wasString = false;
|
||||
current = '';
|
||||
continue;
|
||||
}
|
||||
current += char;
|
||||
}
|
||||
if (current !== '')
|
||||
{
|
||||
commands.push({'cmd':current, 'string':wasString});
|
||||
if (current !== '') {
|
||||
commands.push({ 'cmd': current, 'string': wasString });
|
||||
}
|
||||
return commands;
|
||||
}
|
||||
|
||||
_fieldNameToId(field)
|
||||
{
|
||||
const found = CustomFields.findOne({'name':field});
|
||||
_fieldNameToId(field) {
|
||||
const found = CustomFields.findOne({ 'name': field });
|
||||
return found._id;
|
||||
}
|
||||
|
||||
_arrayToSelector(commands)
|
||||
{
|
||||
_arrayToSelector(commands) {
|
||||
try {
|
||||
//let changed = false;
|
||||
this._processSubCommands(commands);
|
||||
}
|
||||
catch (e){return this._lastValide;}
|
||||
this._lastValide = {$or: commands};
|
||||
return {$or: commands};
|
||||
catch (e) { return this._lastValide; }
|
||||
this._lastValide = { $or: commands };
|
||||
return { $or: commands };
|
||||
}
|
||||
|
||||
_processSubCommands(commands)
|
||||
{
|
||||
_processSubCommands(commands) {
|
||||
const subcommands = [];
|
||||
let level = 0;
|
||||
let start = -1;
|
||||
for (let i = 0; i < commands.length; i++)
|
||||
{
|
||||
if (commands[i].cmd)
|
||||
{
|
||||
switch (commands[i].cmd)
|
||||
{
|
||||
for (let i = 0; i < commands.length; i++) {
|
||||
if (commands[i].cmd) {
|
||||
switch (commands[i].cmd) {
|
||||
case '(':
|
||||
{
|
||||
level++;
|
||||
|
|
@ -190,8 +177,7 @@ class AdvancedFilter {
|
|||
}
|
||||
default:
|
||||
{
|
||||
if (level > 0)
|
||||
{
|
||||
if (level > 0) {
|
||||
subcommands.push(commands[i]);
|
||||
commands.splice(i, 1);
|
||||
i--;
|
||||
|
|
@ -201,8 +187,7 @@ class AdvancedFilter {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (start !== -1)
|
||||
{
|
||||
if (start !== -1) {
|
||||
this._processSubCommands(subcommands);
|
||||
if (subcommands.length === 1)
|
||||
commands.splice(start, 0, subcommands[0]);
|
||||
|
|
@ -213,22 +198,18 @@ class AdvancedFilter {
|
|||
this._processLogicalOperators(commands);
|
||||
}
|
||||
|
||||
_processConditions(commands)
|
||||
{
|
||||
for (let i = 0; i < commands.length; i++)
|
||||
{
|
||||
if (!commands[i].string && commands[i].cmd)
|
||||
{
|
||||
switch (commands[i].cmd)
|
||||
{
|
||||
_processConditions(commands) {
|
||||
for (let i = 0; i < commands.length; i++) {
|
||||
if (!commands[i].string && commands[i].cmd) {
|
||||
switch (commands[i].cmd) {
|
||||
case '=':
|
||||
case '==':
|
||||
case '===':
|
||||
{
|
||||
const field = commands[i-1].cmd;
|
||||
const str = commands[i+1].cmd;
|
||||
commands[i] = {'customFields._id':this._fieldNameToId(field), 'customFields.value':str};
|
||||
commands.splice(i-1, 1);
|
||||
const field = commands[i - 1].cmd;
|
||||
const str = commands[i + 1].cmd;
|
||||
commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': str };
|
||||
commands.splice(i - 1, 1);
|
||||
commands.splice(i, 1);
|
||||
//changed = true;
|
||||
i--;
|
||||
|
|
@ -237,10 +218,10 @@ class AdvancedFilter {
|
|||
case '!=':
|
||||
case '!==':
|
||||
{
|
||||
const field = commands[i-1].cmd;
|
||||
const str = commands[i+1].cmd;
|
||||
commands[i] = {'customFields._id':this._fieldNameToId(field), 'customFields.value': { $not: str }};
|
||||
commands.splice(i-1, 1);
|
||||
const field = commands[i - 1].cmd;
|
||||
const str = commands[i + 1].cmd;
|
||||
commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $not: str } };
|
||||
commands.splice(i - 1, 1);
|
||||
commands.splice(i, 1);
|
||||
//changed = true;
|
||||
i--;
|
||||
|
|
@ -251,10 +232,10 @@ class AdvancedFilter {
|
|||
case 'Gt':
|
||||
case 'GT':
|
||||
{
|
||||
const field = commands[i-1].cmd;
|
||||
const str = commands[i+1].cmd;
|
||||
commands[i] = {'customFields._id':this._fieldNameToId(field), 'customFields.value': { $gt: str } };
|
||||
commands.splice(i-1, 1);
|
||||
const field = commands[i - 1].cmd;
|
||||
const str = commands[i + 1].cmd;
|
||||
commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $gt: str } };
|
||||
commands.splice(i - 1, 1);
|
||||
commands.splice(i, 1);
|
||||
//changed = true;
|
||||
i--;
|
||||
|
|
@ -266,10 +247,10 @@ class AdvancedFilter {
|
|||
case 'Gte':
|
||||
case 'GTE':
|
||||
{
|
||||
const field = commands[i-1].cmd;
|
||||
const str = commands[i+1].cmd;
|
||||
commands[i] = {'customFields._id':this._fieldNameToId(field), 'customFields.value': { $gte: str } };
|
||||
commands.splice(i-1, 1);
|
||||
const field = commands[i - 1].cmd;
|
||||
const str = commands[i + 1].cmd;
|
||||
commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $gte: str } };
|
||||
commands.splice(i - 1, 1);
|
||||
commands.splice(i, 1);
|
||||
//changed = true;
|
||||
i--;
|
||||
|
|
@ -280,10 +261,10 @@ class AdvancedFilter {
|
|||
case 'Lt':
|
||||
case 'LT':
|
||||
{
|
||||
const field = commands[i-1].cmd;
|
||||
const str = commands[i+1].cmd;
|
||||
commands[i] = {'customFields._id':this._fieldNameToId(field), 'customFields.value': { $lt: str } };
|
||||
commands.splice(i-1, 1);
|
||||
const field = commands[i - 1].cmd;
|
||||
const str = commands[i + 1].cmd;
|
||||
commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $lt: str } };
|
||||
commands.splice(i - 1, 1);
|
||||
commands.splice(i, 1);
|
||||
//changed = true;
|
||||
i--;
|
||||
|
|
@ -295,10 +276,10 @@ class AdvancedFilter {
|
|||
case 'Lte':
|
||||
case 'LTE':
|
||||
{
|
||||
const field = commands[i-1].cmd;
|
||||
const str = commands[i+1].cmd;
|
||||
commands[i] = {'customFields._id':this._fieldNameToId(field), 'customFields.value': { $lte: str } };
|
||||
commands.splice(i-1, 1);
|
||||
const field = commands[i - 1].cmd;
|
||||
const str = commands[i + 1].cmd;
|
||||
commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $lte: str } };
|
||||
commands.splice(i - 1, 1);
|
||||
commands.splice(i, 1);
|
||||
//changed = true;
|
||||
i--;
|
||||
|
|
@ -310,24 +291,20 @@ class AdvancedFilter {
|
|||
}
|
||||
}
|
||||
|
||||
_processLogicalOperators(commands)
|
||||
{
|
||||
for (let i = 0; i < commands.length; i++)
|
||||
{
|
||||
if (!commands[i].string && commands[i].cmd)
|
||||
{
|
||||
switch (commands[i].cmd)
|
||||
{
|
||||
_processLogicalOperators(commands) {
|
||||
for (let i = 0; i < commands.length; i++) {
|
||||
if (!commands[i].string && commands[i].cmd) {
|
||||
switch (commands[i].cmd) {
|
||||
case 'or':
|
||||
case 'Or':
|
||||
case 'OR':
|
||||
case '|':
|
||||
case '||':
|
||||
{
|
||||
const op1 = commands[i-1];
|
||||
const op2 = commands[i+1];
|
||||
commands[i] = {$or: [op1, op2]};
|
||||
commands.splice(i-1, 1);
|
||||
const op1 = commands[i - 1];
|
||||
const op2 = commands[i + 1];
|
||||
commands[i] = { $or: [op1, op2] };
|
||||
commands.splice(i - 1, 1);
|
||||
commands.splice(i, 1);
|
||||
//changed = true;
|
||||
i--;
|
||||
|
|
@ -339,10 +316,10 @@ class AdvancedFilter {
|
|||
case '&':
|
||||
case '&&':
|
||||
{
|
||||
const op1 = commands[i-1];
|
||||
const op2 = commands[i+1];
|
||||
commands[i] = {$and: [op1, op2]};
|
||||
commands.splice(i-1, 1);
|
||||
const op1 = commands[i - 1];
|
||||
const op2 = commands[i + 1];
|
||||
commands[i] = { $and: [op1, op2] };
|
||||
commands.splice(i - 1, 1);
|
||||
commands.splice(i, 1);
|
||||
//changed = true;
|
||||
i--;
|
||||
|
|
@ -354,9 +331,9 @@ class AdvancedFilter {
|
|||
case 'NOT':
|
||||
case '!':
|
||||
{
|
||||
const op1 = commands[i+1];
|
||||
commands[i] = {$not: op1};
|
||||
commands.splice(i+1, 1);
|
||||
const op1 = commands[i + 1];
|
||||
commands[i] = { $not: op1 };
|
||||
commands.splice(i + 1, 1);
|
||||
//changed = true;
|
||||
i--;
|
||||
break;
|
||||
|
|
@ -412,12 +389,10 @@ Filter = {
|
|||
this._fields.forEach((fieldName) => {
|
||||
const filter = this[fieldName];
|
||||
if (filter._isActive()) {
|
||||
if (filter.subField !== '')
|
||||
{
|
||||
if (filter.subField !== '') {
|
||||
filterSelector[`${fieldName}.${filter.subField}`] = filter._getMongoSelector();
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
filterSelector[fieldName] = filter._getMongoSelector();
|
||||
}
|
||||
emptySelector[fieldName] = filter._getEmptySelector();
|
||||
|
|
@ -427,7 +402,7 @@ Filter = {
|
|||
}
|
||||
});
|
||||
|
||||
const exceptionsSelector = {_id: {$in: this._exceptions}};
|
||||
const exceptionsSelector = { _id: { $in: this._exceptions } };
|
||||
this._exceptionsDep.depend();
|
||||
|
||||
const selectors = [exceptionsSelector];
|
||||
|
|
@ -438,7 +413,7 @@ Filter = {
|
|||
if (includeEmptySelectors) selectors.push(emptySelector);
|
||||
if (this.advanced._isActive()) selectors.push(this.advanced._getMongoSelector());
|
||||
|
||||
return {$or: selectors};
|
||||
return { $or: selectors };
|
||||
},
|
||||
|
||||
mongoSelector(additionalSelector) {
|
||||
|
|
@ -446,7 +421,7 @@ Filter = {
|
|||
if (_.isUndefined(additionalSelector))
|
||||
return filterSelector;
|
||||
else
|
||||
return {$and: [filterSelector, additionalSelector]};
|
||||
return { $and: [filterSelector, additionalSelector] };
|
||||
},
|
||||
|
||||
reset() {
|
||||
|
|
|
|||
|
|
@ -28,10 +28,10 @@
|
|||
"activities": "Aktivitäten",
|
||||
"activity": "Aktivität",
|
||||
"activity-added": "hat %s zu %s hinzugefügt",
|
||||
"activity-archived": "%s in den Papierkorb verschoben",
|
||||
"activity-archived": "hat %s in den Papierkorb verschoben",
|
||||
"activity-attached": "hat %s an %s angehängt",
|
||||
"activity-created": "hat %s erstellt",
|
||||
"activity-customfield-created": "Benutzerdefiniertes Feld erstellen %s",
|
||||
"activity-customfield-created": "hat das benutzerdefinierte Feld %s erstellt",
|
||||
"activity-excluded": "hat %s von %s ausgeschlossen",
|
||||
"activity-imported": "hat %s in %s von %s importiert",
|
||||
"activity-imported-board": "hat %s von %s importiert",
|
||||
|
|
@ -184,7 +184,7 @@
|
|||
"custom-field-dropdown-options-placeholder": "Drücken Sie die Eingabetaste, um weitere Optionen hinzuzufügen",
|
||||
"custom-field-dropdown-unknown": "(unbekannt)",
|
||||
"custom-field-number": "Zahl",
|
||||
"custom-field-text": "Test",
|
||||
"custom-field-text": "Text",
|
||||
"custom-fields": "Benutzerdefinierte Felder",
|
||||
"date": "Datum",
|
||||
"decline": "Ablehnen",
|
||||
|
|
@ -378,7 +378,7 @@
|
|||
"starred-boards-description": "Markierte Boards erscheinen oben in ihrer Boardliste.",
|
||||
"subscribe": "Abonnieren",
|
||||
"team": "Team",
|
||||
"this-board": "dieses Board",
|
||||
"this-board": "diesem Board",
|
||||
"this-card": "diese Karte",
|
||||
"spent-time-hours": "Aufgewendete Zeit (Stunden)",
|
||||
"overtime-hours": "Mehrarbeit (Stunden)",
|
||||
|
|
|
|||
|
|
@ -3,17 +3,17 @@
|
|||
"act-activity-notify": "[Wekan] Notificação de Atividade",
|
||||
"act-addAttachment": "anexo __attachment__ de __card__",
|
||||
"act-addChecklist": "added checklist __checklist__ no __card__",
|
||||
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
|
||||
"act-addChecklistItem": "adicionado __checklistitem__ para a lista de checagem __checklist__ em __card__",
|
||||
"act-addComment": "comentou em __card__: __comment__",
|
||||
"act-createBoard": "criou __board__",
|
||||
"act-createCard": "__card__ adicionado à __list__",
|
||||
"act-createCustomField": "created custom field __customField__",
|
||||
"act-createCustomField": "criado campo customizado __customField__",
|
||||
"act-createList": "__list__ adicionada à __board__",
|
||||
"act-addBoardMember": "__member__ adicionado à __board__",
|
||||
"act-archivedBoard": "__board__ moved to Recycle Bin",
|
||||
"act-archivedCard": "__card__ moved to Recycle Bin",
|
||||
"act-archivedList": "__list__ moved to Recycle Bin",
|
||||
"act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
|
||||
"act-archivedBoard": "__board__ movido para a lixeira",
|
||||
"act-archivedCard": "__card__ movido para a lixeira",
|
||||
"act-archivedList": "__list__ movido para a lixeira",
|
||||
"act-archivedSwimlane": "__swimlane__ movido para a lixeira",
|
||||
"act-importBoard": "__board__ importado",
|
||||
"act-importCard": "__card__ importado",
|
||||
"act-importList": "__list__ importada",
|
||||
|
|
@ -28,10 +28,10 @@
|
|||
"activities": "Atividades",
|
||||
"activity": "Atividade",
|
||||
"activity-added": "adicionou %s a %s",
|
||||
"activity-archived": "%s moved to Recycle Bin",
|
||||
"activity-archived": "%s movido para a lixeira",
|
||||
"activity-attached": "anexou %s a %s",
|
||||
"activity-created": "criou %s",
|
||||
"activity-customfield-created": "created custom field %s",
|
||||
"activity-customfield-created": "criado campo customizado %s",
|
||||
"activity-excluded": "excluiu %s de %s",
|
||||
"activity-imported": "importado %s em %s de %s",
|
||||
"activity-imported-board": "importado %s de %s",
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
"add-attachment": "Adicionar Anexos",
|
||||
"add-board": "Adicionar Quadro",
|
||||
"add-card": "Adicionar Cartão",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-swimlane": "Adicionar Swimlane",
|
||||
"add-checklist": "Adicionar Checklist",
|
||||
"add-checklist-item": "Adicionar um item à lista de verificação",
|
||||
"add-cover": "Adicionar Capa",
|
||||
|
|
@ -66,19 +66,19 @@
|
|||
"and-n-other-card_plural": "E __count__ outros cartões",
|
||||
"apply": "Aplicar",
|
||||
"app-is-offline": "O Wekan está carregando, por favor espere. Recarregar a página irá causar perda de dado. Se o Wekan não carregar por favor verifique se o servidor Wekan não está parado.",
|
||||
"archive": "Move to Recycle Bin",
|
||||
"archive-all": "Move All to Recycle Bin",
|
||||
"archive-board": "Move Board to Recycle Bin",
|
||||
"archive-card": "Move Card to Recycle Bin",
|
||||
"archive-list": "Move List to Recycle Bin",
|
||||
"archive-swimlane": "Move Swimlane to Recycle Bin",
|
||||
"archive-selection": "Move selection to Recycle Bin",
|
||||
"archiveBoardPopup-title": "Move Board to Recycle Bin?",
|
||||
"archived-items": "Recycle Bin",
|
||||
"archived-boards": "Boards in Recycle Bin",
|
||||
"archive": "Mover para a lixeira",
|
||||
"archive-all": "Mover tudo para a lixeira",
|
||||
"archive-board": "Mover quadro para a lixeira",
|
||||
"archive-card": "Mover cartão para a lixeira",
|
||||
"archive-list": "Mover lista para a lixeira",
|
||||
"archive-swimlane": "Mover Swimlane para a lixeira",
|
||||
"archive-selection": "Mover seleção para a lixeira",
|
||||
"archiveBoardPopup-title": "Mover o quadro para a lixeira?",
|
||||
"archived-items": "Lixeira",
|
||||
"archived-boards": "Quadros na lixeira",
|
||||
"restore-board": "Restaurar Quadro",
|
||||
"no-archived-boards": "No Boards in Recycle Bin.",
|
||||
"archives": "Recycle Bin",
|
||||
"no-archived-boards": "Não há quadros na lixeira",
|
||||
"archives": "Lixeira",
|
||||
"assign-member": "Atribuir Membro",
|
||||
"attached": "anexado",
|
||||
"attachment": "Anexo",
|
||||
|
|
@ -104,16 +104,16 @@
|
|||
"board-view-lists": "Listas",
|
||||
"bucket-example": "\"Bucket List\", por exemplo",
|
||||
"cancel": "Cancelar",
|
||||
"card-archived": "This card is moved to Recycle Bin.",
|
||||
"card-archived": "Este cartão foi movido para a lixeira",
|
||||
"card-comments-title": "Este cartão possui %s comentários.",
|
||||
"card-delete-notice": "A exclusão será permanente. Você perderá todas as ações associadas a este cartão.",
|
||||
"card-delete-pop": "Todas as ações serão removidas da lista de Atividades e vocês não poderá re-abrir o cartão. Não há como desfazer.",
|
||||
"card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
|
||||
"card-delete-suggest-archive": "Você pode mover um cartão para fora da lixeira e movê-lo para o quadro e preservar a atividade.",
|
||||
"card-due": "Data fim",
|
||||
"card-due-on": "Finaliza em",
|
||||
"card-spent": "Tempo Gasto",
|
||||
"card-edit-attachments": "Editar anexos",
|
||||
"card-edit-custom-fields": "Edit custom fields",
|
||||
"card-edit-custom-fields": "Editar campos customizados",
|
||||
"card-edit-labels": "Editar etiquetas",
|
||||
"card-edit-members": "Editar membros",
|
||||
"card-labels-title": "Alterar etiquetas do cartão.",
|
||||
|
|
@ -121,8 +121,8 @@
|
|||
"card-start": "Data início",
|
||||
"card-start-on": "Começa em",
|
||||
"cardAttachmentsPopup-title": "Anexar a partir de",
|
||||
"cardCustomField-datePopup-title": "Change date",
|
||||
"cardCustomFieldsPopup-title": "Edit custom fields",
|
||||
"cardCustomField-datePopup-title": "Mudar data",
|
||||
"cardCustomFieldsPopup-title": "Editar campos customizados",
|
||||
"cardDeletePopup-title": "Excluir Cartão?",
|
||||
"cardDetailsActionsPopup-title": "Ações do cartão",
|
||||
"cardLabelsPopup-title": "Etiquetas",
|
||||
|
|
@ -146,7 +146,7 @@
|
|||
"clipboard": "Área de Transferência ou arraste e solte",
|
||||
"close": "Fechar",
|
||||
"close-board": "Fechar Quadro",
|
||||
"close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
|
||||
"close-board-pop": "Você poderá restaurar o quadro clicando no botão lixeira no cabeçalho da página inicial",
|
||||
"color-black": "preto",
|
||||
"color-blue": "azul",
|
||||
"color-green": "verde",
|
||||
|
|
@ -172,25 +172,25 @@
|
|||
"createBoardPopup-title": "Criar Quadro",
|
||||
"chooseBoardSourcePopup-title": "Importar quadro",
|
||||
"createLabelPopup-title": "Criar Etiqueta",
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"createCustomField": "Criar campo",
|
||||
"createCustomFieldPopup-title": "Criar campo",
|
||||
"current": "atual",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-delete-pop": "Não existe desfazer. Isso irá remover o campo customizado de todos os cartões e destruir seu histórico",
|
||||
"custom-field-checkbox": "Caixa de seleção",
|
||||
"custom-field-date": "Data",
|
||||
"custom-field-dropdown": "Dropdown List",
|
||||
"custom-field-dropdown-none": "(none)",
|
||||
"custom-field-dropdown-options": "List Options",
|
||||
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
|
||||
"custom-field-dropdown-unknown": "(unknown)",
|
||||
"custom-field-number": "Number",
|
||||
"custom-field-text": "Text",
|
||||
"custom-fields": "Custom Fields",
|
||||
"custom-field-dropdown": "Lista suspensa",
|
||||
"custom-field-dropdown-none": "(nada)",
|
||||
"custom-field-dropdown-options": "Lista de opções",
|
||||
"custom-field-dropdown-options-placeholder": "Pressione enter para adicionar mais opções",
|
||||
"custom-field-dropdown-unknown": "(desconhecido)",
|
||||
"custom-field-number": "Número",
|
||||
"custom-field-text": "Texto",
|
||||
"custom-fields": "Campos customizados",
|
||||
"date": "Data",
|
||||
"decline": "Rejeitar",
|
||||
"default-avatar": "Avatar padrão",
|
||||
"delete": "Excluir",
|
||||
"deleteCustomFieldPopup-title": "Delete Custom Field?",
|
||||
"deleteCustomFieldPopup-title": "Deletar campo customizado?",
|
||||
"deleteLabelPopup-title": "Excluir Etiqueta?",
|
||||
"description": "Descrição",
|
||||
"disambiguateMultiLabelPopup-title": "Desambiguar ações de etiquetas",
|
||||
|
|
@ -205,7 +205,7 @@
|
|||
"soft-wip-limit": "Limite de WIP",
|
||||
"editCardStartDatePopup-title": "Altera data de início",
|
||||
"editCardDueDatePopup-title": "Altera data fim",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"editCustomFieldPopup-title": "Editar campo",
|
||||
"editCardSpentTimePopup-title": "Editar tempo gasto",
|
||||
"editLabelPopup-title": "Alterar Etiqueta",
|
||||
"editNotificationPopup-title": "Editar Notificações",
|
||||
|
|
@ -242,12 +242,12 @@
|
|||
"filter-clear": "Limpar filtro",
|
||||
"filter-no-label": "Sem labels",
|
||||
"filter-no-member": "Sem membros",
|
||||
"filter-no-custom-fields": "No Custom Fields",
|
||||
"filter-no-custom-fields": "Não há campos customizados",
|
||||
"filter-on": "Filtro está ativo",
|
||||
"filter-on-desc": "Você está filtrando cartões neste quadro. Clique aqui para editar o filtro.",
|
||||
"filter-to-selection": "Filtrar esta seleção",
|
||||
"advanced-filter-label": "Advanced Filter",
|
||||
"advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
|
||||
"advanced-filter-label": "Filtro avançado",
|
||||
"advanced-filter-description": "Um Filtro Avançado permite escrever uma string contendo os seguintes operadores: == != <= >= && || () Um espaço é utilizado como separador entre os operadores. Você pode filtrar todos os campos customizados digitando seus nomes e valores. Por exemplo: campo1 == valor1. Nota: se campos ou valores contém espaços, você precisa encapsular eles em aspas simples. Por exemplo: 'campo 1' == 'valor 1'. Você também pode combinar múltiplas condições. Por exemplo: F1 == V1 || F1 == V2. Normalmente todos os operadores são interpretados da esquerda para a direita. Você pode mudar a ordem ao incluir parênteses. Por exemplo: F1 == V1 e (F2 == V2 || F2 == V3)",
|
||||
"fullname": "Nome Completo",
|
||||
"header-logo-title": "Voltar para a lista de quadros.",
|
||||
"hide-system-messages": "Esconde mensagens de sistema",
|
||||
|
|
@ -287,17 +287,17 @@
|
|||
"leave-board-pop": "Tem a certeza de que pretende sair de __boardTitle__? Você será removido de todos os cartões neste quadro.",
|
||||
"leaveBoardPopup-title": "Sair do Quadro ?",
|
||||
"link-card": "Vincular a este cartão",
|
||||
"list-archive-cards": "Move all cards in this list to Recycle Bin",
|
||||
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
|
||||
"list-archive-cards": "Mover todos os cartões nesta lista para a lixeira",
|
||||
"list-archive-cards-pop": "Isso irá remover todos os cartões nesta lista do quadro. Para visualizar cartões na lixeira e trazê-los de volta ao quadro, clique em \"Menu\" > \"Lixeira\".",
|
||||
"list-move-cards": "Mover todos os cartões desta lista",
|
||||
"list-select-cards": "Selecionar todos os cartões nesta lista",
|
||||
"listActionPopup-title": "Listar Ações",
|
||||
"swimlaneActionPopup-title": "Swimlane Actions",
|
||||
"swimlaneActionPopup-title": "Ações de Swimlane",
|
||||
"listImportCardPopup-title": "Importe um cartão do Trello",
|
||||
"listMorePopup-title": "Mais",
|
||||
"link-list": "Vincular a esta lista",
|
||||
"list-delete-pop": "Todas as ações serão removidas da lista de atividades e você não poderá recuperar a lista. Não há como desfazer.",
|
||||
"list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve the activity.",
|
||||
"list-delete-suggest-archive": "Você pode mover a lista para a lixeira para removê-la do quadro e preservar a atividade.",
|
||||
"lists": "Listas",
|
||||
"swimlanes": "Swimlanes",
|
||||
"log-out": "Sair",
|
||||
|
|
@ -317,9 +317,9 @@
|
|||
"muted-info": "Você nunca receberá qualquer notificação desse board",
|
||||
"my-boards": "Meus Quadros",
|
||||
"name": "Nome",
|
||||
"no-archived-cards": "No cards in Recycle Bin.",
|
||||
"no-archived-lists": "No lists in Recycle Bin.",
|
||||
"no-archived-swimlanes": "No swimlanes in Recycle Bin.",
|
||||
"no-archived-cards": "Não há cartões na lixeira",
|
||||
"no-archived-lists": "Não há listas na lixeira",
|
||||
"no-archived-swimlanes": "Não há swimlanes na lixeira",
|
||||
"no-results": "Nenhum resultado.",
|
||||
"normal": "Normal",
|
||||
"normal-desc": "Pode ver e editar cartões. Não pode alterar configurações.",
|
||||
|
|
@ -384,12 +384,12 @@
|
|||
"overtime-hours": "Tempo extras (Horas)",
|
||||
"overtime": "Tempo extras",
|
||||
"has-overtime-cards": "Tem cartões de horas extras",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"has-spenttime-cards": "Gastou cartões de tempo",
|
||||
"time": "Tempo",
|
||||
"title": "Título",
|
||||
"tracking": "Tracking",
|
||||
"tracking-info": "Você será notificado se houver qualquer alteração em cards em que você é o criador ou membro",
|
||||
"type": "Type",
|
||||
"type": "Tipo",
|
||||
"unassign-member": "Membro não associado",
|
||||
"unsaved-description": "Você possui uma descrição não salva",
|
||||
"unwatch": "Deixar de observar",
|
||||
|
|
@ -398,12 +398,12 @@
|
|||
"uploaded-avatar": "Avatar carregado",
|
||||
"username": "Nome de usuário",
|
||||
"view-it": "Visualizar",
|
||||
"warn-list-archived": "warning: this card is in an list at Recycle Bin",
|
||||
"warn-list-archived": "Aviso: este cartão está em uma lista na lixeira",
|
||||
"watch": "Observar",
|
||||
"watching": "Observando",
|
||||
"watching-info": "Você será notificado em qualquer alteração desse board",
|
||||
"welcome-board": "Board de Boas Vindas",
|
||||
"welcome-swimlane": "Milestone 1",
|
||||
"welcome-swimlane": "Marco 1",
|
||||
"welcome-list1": "Básico",
|
||||
"welcome-list2": "Avançado",
|
||||
"what-to-do": "O que você gostaria de fazer?",
|
||||
|
|
@ -454,19 +454,19 @@
|
|||
"hours": "horas",
|
||||
"minutes": "minutos",
|
||||
"seconds": "segundos",
|
||||
"show-field-on-card": "Show this field on card",
|
||||
"show-field-on-card": "Mostrar este campo no cartão",
|
||||
"yes": "Sim",
|
||||
"no": "Não",
|
||||
"accounts": "Contas",
|
||||
"accounts-allowEmailChange": "Permitir Mudança de Email",
|
||||
"accounts-allowUserNameChange": "Allow Username Change",
|
||||
"accounts-allowUserNameChange": "Permitir alteração de nome de usuário",
|
||||
"createdAt": "Criado em",
|
||||
"verified": "Verificado",
|
||||
"active": "Ativo",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
"card-end-on": "Ends on",
|
||||
"editCardReceivedDatePopup-title": "Change received date",
|
||||
"editCardEndDatePopup-title": "Change end date"
|
||||
"card-received": "Recebido",
|
||||
"card-received-on": "Recebido em",
|
||||
"card-end": "Fim",
|
||||
"card-end-on": "Termina em",
|
||||
"editCardReceivedDatePopup-title": "Modificar data de recebimento",
|
||||
"editCardEndDatePopup-title": "Mudar data de fim"
|
||||
}
|
||||
|
|
@ -220,6 +220,7 @@ Cards.helpers({
|
|||
}).fetch();
|
||||
|
||||
// match right definition to each field
|
||||
if (!this.customFields) return [];
|
||||
return this.customFields.map((customField) => {
|
||||
return {
|
||||
_id: customField._id,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "wekan",
|
||||
"version": "1.00.0",
|
||||
"version": "1.01.0",
|
||||
"description": "The open-source Trello-like kanban",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
|
|
|||
|
|
@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
|
|||
appTitle = (defaultText = "Wekan"),
|
||||
# The name of the app as it is displayed to the user.
|
||||
|
||||
appVersion = 85,
|
||||
appVersion = 86,
|
||||
# Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "1.00.0~2018-05-21"),
|
||||
appMarketingVersion = (defaultText = "1.01.0~2018-05-23"),
|
||||
# Human-readable presentation of the app version.
|
||||
|
||||
minUpgradableAppVersion = 0,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue