ref: Refactoring

This commit is contained in:
Maksim Eltyshev
2025-11-27 18:24:55 +01:00
parent 7be2343076
commit 54e230d4c1
80 changed files with 252 additions and 159 deletions
+2 -2
View File
@@ -23,10 +23,10 @@
* - name: before
* in: query
* required: false
* description: Pagination cursor (JSON object with id and listChangedAt)
* description: Pagination cursor (JSON object with listChangedAt and id)
* schema:
* type: string
* example: '{"id": "1357158568008091269", "listChangedAt": "2024-01-01T00:00:00.000Z"}'
* example: '{"listChangedAt": "2024-01-01T00:00:00.000Z", "id": "1357158568008091269"}'
* - name: search
* in: query
* required: false
+1 -1
View File
@@ -87,7 +87,7 @@ module.exports = {
},
type: {
type: 'string',
isIn: List.FINITE_TYPES,
isIn: List.KANBAN_TYPES,
required: true,
},
position: {
+1 -1
View File
@@ -100,7 +100,7 @@ module.exports = {
throw Errors.LIST_NOT_FOUND; // Forbidden
}
if (!sails.helpers.lists.isFinite(list)) {
if (!sails.helpers.lists.isKanban(list)) {
throw Errors.NOT_ENOUGH_RIGHTS;
}
+2 -2
View File
@@ -97,7 +97,7 @@ module.exports = {
boardId: idInput,
type: {
type: 'string',
isIn: List.FINITE_TYPES,
isIn: List.KANBAN_TYPES,
},
position: {
type: 'number',
@@ -146,7 +146,7 @@ module.exports = {
throw Errors.LIST_NOT_FOUND; // Forbidden
}
if (!sails.helpers.lists.isFinite(list)) {
if (!sails.helpers.lists.isKanban(list)) {
throw Errors.NOT_ENOUGH_RIGHTS;
}
+1 -1
View File
@@ -14,7 +14,7 @@
* operationId: getUsers
* responses:
* 200:
* description: List of users retrieved successfully
* description: Users retrieved successfully
* content:
* application/json:
* schema:
+1 -1
View File
@@ -14,7 +14,7 @@
* operationId: getWebhooks
* responses:
* 200:
* description: List of webhooks retrieved successfully
* description: Webhooks retrieved successfully
* content:
* application/json:
* schema:
+3 -3
View File
@@ -23,7 +23,7 @@ const buildBodyByFormat = (board, card, action, actorUser, t) => {
switch (action.type) {
case Action.Types.CREATE_CARD: {
const listName = sails.helpers.lists.makeName(action.data.list);
const listName = sails.helpers.lists.resolveName(action.data.list, t);
return {
text: t('%s created %s in %s on %s', actorUser.name, card.name, listName, board.name),
@@ -44,8 +44,8 @@ const buildBodyByFormat = (board, card, action, actorUser, t) => {
};
}
case Action.Types.MOVE_CARD: {
const fromListName = sails.helpers.lists.makeName(action.data.fromList);
const toListName = sails.helpers.lists.makeName(action.data.toList);
const fromListName = sails.helpers.lists.resolveName(action.data.fromList, t);
const toListName = sails.helpers.lists.resolveName(action.data.toList, t);
return {
text: t(
@@ -17,7 +17,7 @@ module.exports = {
async fn(inputs) {
return List.qm.getByBoardId(inputs.id, {
exceptIdOrIds: inputs.exceptListIdOrIds,
typeOrTypes: List.FINITE_TYPES,
typeOrTypes: List.KANBAN_TYPES,
});
},
};
+20 -6
View File
@@ -41,12 +41,26 @@ module.exports = {
async fn(inputs) {
const { values } = inputs;
if (sails.helpers.lists.isFinite(inputs.list)) {
if (values.list) {
const typeState = List.TYPE_STATE_BY_TYPE[values.list.type];
if (inputs.record.isClosed) {
if (typeState === List.TypeStates.OPENED) {
values.isClosed = false;
}
} else if (typeState === List.TypeStates.CLOSED) {
values.isClosed = true;
}
}
const list = values.list || inputs.list;
if (sails.helpers.lists.isFinite(list)) {
if (_.isUndefined(values.position)) {
throw 'positionMustBeInValues';
}
const cards = await Card.qm.getByListId(inputs.list.id);
const cards = await Card.qm.getByListId(list.id);
const { position, repositions } = sails.helpers.utils.insertToPositionables(
values.position,
@@ -84,7 +98,6 @@ module.exports = {
let card = await Card.qm.createOne({
..._.pick(inputs.record, [
'boardId',
'listId',
'prevListId',
'type',
'name',
@@ -95,6 +108,7 @@ module.exports = {
'isClosed',
]),
...values,
listId: list.id,
creatorUserId: values.creatorUser.id,
listChangedAt: new Date().toISOString(),
});
@@ -240,7 +254,7 @@ module.exports = {
included: {
projects: [inputs.project],
boards: [inputs.board],
lists: [inputs.list],
lists: [list],
cardMemberships: nextCardMemberships,
cardLabels: nextCardLabels,
taskLists: nextTaskLists,
@@ -277,19 +291,19 @@ module.exports = {
}
await sails.helpers.actions.createOne.with({
list,
webhooks,
values: {
card,
type: Action.Types.CREATE_CARD, // TODO: introduce separate type?
data: {
card: _.pick(card, ['name']),
list: _.pick(inputs.list, ['id', 'type', 'name']),
list: _.pick(list, ['id', 'type', 'name']),
},
user: values.creatorUser,
},
project: inputs.project,
board: inputs.board,
list: inputs.list,
});
return {
+1 -1
View File
@@ -25,7 +25,7 @@ module.exports = {
async fn(inputs) {
const { values } = inputs;
const lists = await sails.helpers.boards.getFiniteListsById(values.board.id);
const lists = await sails.helpers.boards.getKanbanListsById(values.board.id);
const { position, repositions } = sails.helpers.utils.insertToPositionables(
values.position,
@@ -3,7 +3,6 @@
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
// TODO: rename?
module.exports = {
sync: true,
@@ -15,6 +14,6 @@ module.exports = {
},
fn(inputs) {
return inputs.record.name || _.upperFirst(inputs.record.type);
return List.KANBAN_TYPES.includes(inputs.record.type);
},
};
+27
View File
@@ -0,0 +1,27 @@
/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
module.exports = {
sync: true,
inputs: {
record: {
type: 'ref',
required: true,
},
t: {
type: 'ref',
},
},
fn(inputs) {
if (inputs.record.name) {
return inputs.record.name;
}
const name = _.upperFirst(inputs.record.type);
return inputs.t ? inputs.t(name) : name;
},
};
+1 -1
View File
@@ -58,7 +58,7 @@ module.exports = {
const board = values.board || inputs.board;
if (!_.isUndefined(values.position)) {
const lists = await sails.helpers.boards.getFiniteListsById(board.id, inputs.record.id);
const lists = await sails.helpers.boards.getKanbanListsById(board.id, inputs.record.id);
const { position, repositions } = sails.helpers.utils.insertToPositionables(
values.position,
@@ -29,8 +29,8 @@ const buildBodyByFormat = (board, card, notification, actorUser, t) => {
switch (notification.type) {
case Notification.Types.MOVE_CARD: {
const fromListName = sails.helpers.lists.makeName(notification.data.fromList);
const toListName = sails.helpers.lists.makeName(notification.data.toList);
const fromListName = sails.helpers.lists.resolveName(notification.data.fromList, t);
const toListName = sails.helpers.lists.resolveName(notification.data.toList, t);
return {
text: t(
@@ -144,8 +144,8 @@ const buildEmail = (board, card, notification, actorUser, notifiableUser, t) =>
let html;
switch (notification.type) {
case Notification.Types.MOVE_CARD: {
const fromListName = sails.helpers.lists.makeName(notification.data.fromList);
const toListName = sails.helpers.lists.makeName(notification.data.toList);
const fromListName = sails.helpers.lists.resolveName(notification.data.fromList, t);
const toListName = sails.helpers.lists.resolveName(notification.data.toList, t);
html = `<p>${t(
'%s moved %s from %s to %s on %s',
@@ -243,10 +243,6 @@ module.exports = {
arrayOfValues.map((values) => {
const id = ids.shift();
const isCommentRelated =
values.type === Notification.Types.COMMENT_CARD ||
values.type === Notification.Types.MENTION_IN_COMMENT;
const nextValues = {
...values,
id,
@@ -254,10 +250,10 @@ module.exports = {
boardId: values.card.boardId,
cardId: values.card.id,
};
if (isCommentRelated) {
if (values.comment) {
nextValues.commentId = values.comment.id;
} else {
}
if (values.action) {
nextValues.actionId = values.action.id;
}
+14 -17
View File
@@ -29,8 +29,8 @@ const buildBodyByFormat = (board, card, notification, actorUser, t) => {
switch (notification.type) {
case Notification.Types.MOVE_CARD: {
const fromListName = sails.helpers.lists.makeName(notification.data.fromList);
const toListName = sails.helpers.lists.makeName(notification.data.toList);
const fromListName = sails.helpers.lists.resolveName(notification.data.fromList, t);
const toListName = sails.helpers.lists.resolveName(notification.data.toList, t);
return {
text: t(
@@ -152,8 +152,8 @@ const buildAndSendEmail = async (
let html;
switch (notification.type) {
case Notification.Types.MOVE_CARD: {
const fromListName = sails.helpers.lists.makeName(notification.data.fromList);
const toListName = sails.helpers.lists.makeName(notification.data.toList);
const fromListName = sails.helpers.lists.resolveName(notification.data.fromList, t);
const toListName = sails.helpers.lists.resolveName(notification.data.toList, t);
html = `<p>${t(
'%s moved %s from %s to %s on %s',
@@ -234,13 +234,11 @@ module.exports = {
async fn(inputs) {
const { values } = inputs;
const isCommentRelated =
values.type === Notification.Types.COMMENT_CARD ||
values.type === Notification.Types.MENTION_IN_COMMENT;
if (isCommentRelated) {
if (values.comment) {
values.commentId = values.comment.id;
} else {
}
if (values.action) {
values.actionId = values.action.id;
}
@@ -268,13 +266,12 @@ module.exports = {
boards: [inputs.board],
lists: [inputs.list],
cards: [values.card],
...(isCommentRelated
? {
comments: [values.comment],
}
: {
actions: [values.action],
}),
...(values.comment && {
comments: [values.comment],
}),
...(values.action && {
actions: [values.action],
}),
},
}),
user: values.creatorUser,
+1
View File
@@ -7,6 +7,7 @@ module.exports = {
inputs: {
roleOrRoles: {
type: 'json',
required: true,
},
},
@@ -56,19 +56,12 @@ const getIdsByEndlessListId = async (
const searchParts = buildSearchParts(search);
if (searchParts.length > 0) {
let ilikeValues = searchParts.map((searchPart) => {
const ilikeValues = searchParts.map((searchPart) => {
queryValues.push(searchPart);
return `'%' || $${queryValues.length} || '%'`;
});
query += ` AND ((card.name ILIKE ALL(ARRAY[${ilikeValues.join(', ')}]))`;
ilikeValues = searchParts.map((searchPart) => {
queryValues.push(searchPart);
return `'%' || $${queryValues.length} || '%'`;
});
query += ` OR (card.description ILIKE ALL(ARRAY[${ilikeValues.join(', ')}])))`;
query += ` AND ((card.name ILIKE ALL(ARRAY[${ilikeValues.join(', ')}])) OR (card.description ILIKE ALL(ARRAY[${ilikeValues.join(', ')}])))`;
}
}
}
+3
View File
@@ -95,6 +95,8 @@ const SortOrders = {
const FINITE_TYPES = [Types.ACTIVE, Types.CLOSED];
const KANBAN_TYPES = [Types.ACTIVE, Types.CLOSED];
const TYPE_STATE_BY_TYPE = {
[Types.ACTIVE]: TypeStates.OPENED,
[Types.CLOSED]: Types.CLOSED,
@@ -119,6 +121,7 @@ module.exports = {
SortFieldNames,
SortOrders,
FINITE_TYPES,
KANBAN_TYPES,
TYPE_STATE_BY_TYPE,
COLORS,
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "أرشيف",
"Card Created": "تم إنشاء البطاقة",
"Card Moved": "تم نقل البطاقة",
"New Comment": "تعليق جديد",
@@ -6,6 +7,7 @@
"This is a test text message!": "هذه رسالة نصية تجريبية!",
"This is a *test* **markdown** `message`!": "هذه *رسالة* **markdown** `تجريبية`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "هذه <i>رسالة</i> <b>html</b> <code>تجريبية</code>!",
"Trash": "سلة المهملات",
"You Were Added to Card": "تمت إضافتك إلى البطاقة",
"You Were Mentioned in Comment": "تم ذكرك في تعليق",
"%s added you to %s on %s": "%s أضافك إلى %s في %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Архив",
"Card Created": "Картата е създадена",
"Card Moved": "Картата е преместена",
"New Comment": "Нов коментар",
@@ -6,6 +7,7 @@
"This is a test text message!": "Това е тестово текстово съобщение!",
"This is a *test* **markdown** `message`!": "Това е *тестово* **markdown** `съобщение`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Това е <i>тестово</i> <b>html</b> <code>съобщение</code>!",
"Trash": "Кошче",
"You Were Added to Card": "Бяхте добавени към картата",
"You Were Mentioned in Comment": "Бяхте споменати в коментар",
"%s added you to %s on %s": "%s ви добави към %s на %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Arxivar",
"Card Created": "Targeta creada",
"Card Moved": "Targeta moguda",
"New Comment": "Comentari nou",
@@ -6,6 +7,7 @@
"This is a test text message!": "Aquest és un missatge de text de prova!",
"This is a *test* **markdown** `message`!": "Aquest és un *missatge* **markdown** `de prova`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Aquest és un <i>missatge</i> <b>html</b> <code>de prova</code>!",
"Trash": "Paperera",
"You Were Added to Card": "Has estat afegit a la targeta",
"You Were Mentioned in Comment": "Has estat mencionat en un comentari",
"%s added you to %s on %s": "%s t'ha afegit a %s el %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Archiv",
"Card Created": "Karta vytvořena",
"Card Moved": "Karta přesunuta",
"New Comment": "Nový komentář",
@@ -6,6 +7,7 @@
"This is a test text message!": "Toto je testovací textová zpráva!",
"This is a *test* **markdown** `message`!": "Toto je *testovací* **markdown** `zpráva`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Toto je <i>testovací</i> <b>html</b> <code>zpráva</code>!",
"Trash": "Koš",
"You Were Added to Card": "Byli jste přidáni ke kartě",
"You Were Mentioned in Comment": "Byli jste zmíněni v komentáři",
"%s added you to %s on %s": "%s vás přidal k %s dne %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Arkiv",
"Card Created": "Kort oprettet",
"Card Moved": "Kort flyttet",
"New Comment": "Ny kommentar",
@@ -6,6 +7,7 @@
"This is a test text message!": "Dette er en test tekstbesked!",
"This is a *test* **markdown** `message`!": "Dette er en *test* **markdown** `besked`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Dette er en <i>test</i> <b>html</b> <code>besked</code>!",
"Trash": "Papirkurv",
"You Were Added to Card": "Du blev tilføjet til kortet",
"You Were Mentioned in Comment": "Du blev nævnt i en kommentar",
"%s added you to %s on %s": "%s tilføjede dig til %s den %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Archiv",
"Card Created": "Karte erstellt",
"Card Moved": "Karte verschoben",
"New Comment": "Neuer Kommentar",
@@ -6,6 +7,7 @@
"This is a test text message!": "Dies ist eine Test-Textnachricht!",
"This is a *test* **markdown** `message`!": "Dies ist eine *Test*-**Markdown**-`Nachricht`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Dies ist eine <i>Test</i>-<b>HTML</b>-<code>Nachricht</code>!",
"Trash": "Papierkorb",
"You Were Added to Card": "Sie wurden zur Karte hinzugefügt",
"You Were Mentioned in Comment": "Sie wurden in einem Kommentar erwähnt",
"%s added you to %s on %s": "%s hat Sie zu %s am %s hinzugefügt",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Αρχείο",
"Card Created": "Η κάρτα δημιουργήθηκε",
"Card Moved": "Η κάρτα μετακινήθηκε",
"New Comment": "Νέο σχόλιο",
@@ -6,6 +7,7 @@
"This is a test text message!": "Αυτό είναι ένα δοκιμαστικό μήνυμα!",
"This is a *test* **markdown** `message`!": "Αυτό είναι ένα *δοκιμαστικό* **markdown** `μήνυμα`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Αυτό είναι ένα <i>δοκιμαστικό</i> <b>html</b> <code>μήνυμα</code>!",
"Trash": "Κάδος απορριμμάτων",
"You Were Added to Card": "Προστέθηκες στην κάρτα",
"You Were Mentioned in Comment": "Αναφέρθηκες σε σχόλιο",
"%s added you to %s on %s": "%s σε πρόσθεσε στο %s στο %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Archive",
"Card Created": "Card Created",
"Card Moved": "Card Moved",
"New Comment": "New Comment",
@@ -6,6 +7,7 @@
"This is a test text message!": "This is a test text message!",
"This is a *test* **markdown** `message`!": "This is a *test* **markdown** `message`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "This is a <i>test</i> <b>html</b> <code>message</code>!",
"Trash": "Trash",
"You Were Added to Card": "You Were Added to Card",
"You Were Mentioned in Comment": "You Were Mentioned in Comment",
"%s added you to %s on %s": "%s added you to %s on %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Archive",
"Card Created": "Card Created",
"Card Moved": "Card Moved",
"New Comment": "New Comment",
@@ -6,6 +7,7 @@
"This is a test text message!": "This is a test text message!",
"This is a *test* **markdown** `message`!": "This is a *test* **markdown** `message`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "This is a <i>test</i> <b>html</b> <code>message</code>!",
"Trash": "Trash",
"You Were Added to Card": "You Were Added to Card",
"You Were Mentioned in Comment": "You Were Mentioned in Comment",
"%s added you to %s on %s": "%s added you to %s on %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Archivo",
"Card Created": "Tarjeta creada",
"Card Moved": "Tarjeta movida",
"New Comment": "Nuevo comentario",
@@ -6,6 +7,7 @@
"This is a test text message!": "¡Este es un mensaje de texto de prueba!",
"This is a *test* **markdown** `message`!": "¡Este es un *mensaje* **markdown** `de prueba`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "¡Este es un <i>mensaje</i> <b>html</b> <code>de prueba</code>!",
"Trash": "Papelera",
"You Were Added to Card": "Fuiste añadido a la tarjeta",
"You Were Mentioned in Comment": "Fuiste mencionado en un comentario",
"%s added you to %s on %s": "%s te añadió a %s en %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Arhiiv",
"Card Created": "Kaart loodud",
"Card Moved": "Kaart liigutatud",
"New Comment": "Uus kommentaar",
@@ -6,6 +7,7 @@
"This is a test text message!": "See on testi tekstisõnum!",
"This is a *test* **markdown** `message`!": "See on *testi* **markdown** `sõnum`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "See on <i>testi</i> <b>html</b> <code>sõnum</code>!",
"Trash": "Prügikast",
"You Were Added to Card": "Teid lisati kaardile",
"You Were Mentioned in Comment": "Teid mainiti kommentaaris",
"%s added you to %s on %s": "%s lisas teid %s-le %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "بایگانی",
"Card Created": "کارت ایجاد شد",
"Card Moved": "کارت منتقل شد",
"New Comment": "نظر جدید",
@@ -6,6 +7,7 @@
"This is a test text message!": "این یک پیام متنی آزمایشی است!",
"This is a *test* **markdown** `message`!": "این یک *پیام* **markdown** `آزمایشی` است!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "این یک <i>پیام</i> <b>html</b> <code>آزمایشی</code> است!",
"Trash": "سطل زباله",
"You Were Added to Card": "شما به کارت اضافه شدید",
"You Were Mentioned in Comment": "در نظری از شما نام برده شد",
"%s added you to %s on %s": "%s شما را به %s در %s اضافه کرد",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Arkisto",
"Card Created": "Kortti luotu",
"Card Moved": "Kortti siirretty",
"New Comment": "Uusi kommentti",
@@ -6,6 +7,7 @@
"This is a test text message!": "Tämä on testiviesti!",
"This is a *test* **markdown** `message`!": "Tämä on *testi* **markdown** `viesti`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Tämä on <i>testi</i> <b>html</b> <code>viesti</code>!",
"Trash": "Roskakori",
"You Were Added to Card": "Sinut lisättiin korttiin",
"You Were Mentioned in Comment": "Sinut mainittiin kommentissa",
"%s added you to %s on %s": "%s lisäsi sinut kohteeseen %s kohteessa %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Archive",
"Card Created": "Carte créée",
"Card Moved": "Carte déplacée",
"New Comment": "Nouveau commentaire",
@@ -6,6 +7,7 @@
"This is a test text message!": "Ceci est un message texte de test !",
"This is a *test* **markdown** `message`!": "Ceci est un *message* **markdown** `de test` !",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Ceci est un <i>test</i> <b>html</b> <code>message</code>!",
"Trash": "Corbeille",
"You Were Added to Card": "Vous avez été ajouté à la carte",
"You Were Mentioned in Comment": "Vous avez été mentionné dans un commentaire",
"%s added you to %s on %s": "%s vous a ajouté à %s le %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Archívum",
"Card Created": "Kártya létrehozva",
"Card Moved": "Kártya áthelyezve",
"New Comment": "Új hozzászólás",
@@ -6,6 +7,7 @@
"This is a test text message!": "Ez itt egy szöveges teszt üzenet!",
"This is a *test* **markdown** `message`!": "Ez itt egy **markdown** formátumú *teszt* `üzenet`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Ez egy <b>html</b> formátumú <i>teszt</i> <code>üzenet</code>!",
"Trash": "Kuka",
"You Were Added to Card": "Hozzádrendeltek egy kártyát",
"You Were Mentioned in Comment": "Megemlítettek egy kártyán",
"%s added you to %s on %s": "%s hozzárendelt téged a(z) %s kártyához a(z) %s projektben",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Arsip",
"Card Created": "Kartu dibuat",
"Card Moved": "Kartu dipindahkan",
"New Comment": "Komentar baru",
@@ -6,6 +7,7 @@
"This is a test text message!": "Ini adalah pesan teks tes!",
"This is a *test* **markdown** `message`!": "Ini adalah *pesan* **markdown** `tes`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Ini adalah <i>pesan</i> <b>html</b> <code>tes</code>!",
"Trash": "Sampah",
"You Were Added to Card": "Anda ditambahkan ke kartu",
"You Were Mentioned in Comment": "Anda disebutkan dalam komentar",
"%s added you to %s on %s": "%s menambahkan Anda ke %s pada %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Archivio",
"Card Created": "Nuova task creata",
"Card Moved": "Task spostata",
"New Comment": "Nuovo commento",
@@ -6,6 +7,7 @@
"This is a test text message!": "Questo è un messaggio di testo di test!",
"This is a *test* **markdown** `message`!": "Questo è un *test* **markdown** `messaggio`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Questo è un <i>test</i> <b>html</b> <code>messaggio</code>!",
"Trash": "Cestino",
"You Were Added to Card": "Sei stato aggiunto alla task",
"You Were Mentioned in Comment": "Sei stato menzionato nel commento",
"%s created %s in %s on %s": "%s ha creato %s in %s in %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "アーカイブ",
"Card Created": "カードが作成されました",
"Card Moved": "カードが移動されました",
"New Comment": "新しいコメント",
@@ -6,6 +7,7 @@
"This is a test text message!": "これはテストテキストメッセージです!",
"This is a *test* **markdown** `message`!": "これは*テスト***markdown**`メッセージ`です!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "これは<i>テスト</i><b>html</b><code>メッセージ</code>です!",
"Trash": "ゴミ箱",
"You Were Added to Card": "カードに追加されました",
"You Were Mentioned in Comment": "コメントでメンションされました",
"%s added you to %s on %s": "%sが%sの%sにあなたを追加しました",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "보관함",
"Card Created": "카드가 생성됨",
"Card Moved": "카드가 이동됨",
"New Comment": "새 댓글",
@@ -6,6 +7,7 @@
"This is a test text message!": "이것은 테스트 텍스트 메시지입니다!",
"This is a *test* **markdown** `message`!": "이것은 *테스트* **markdown** `메시지`입니다!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "이것은 <i>테스트</i> <b>html</b> <code>메시지</code>입니다!",
"Trash": "휴지통",
"You Were Added to Card": "카드에 추가되었습니다",
"You Were Mentioned in Comment": "댓글에서 언급되었습니다",
"%s added you to %s on %s": "%s님이 %s의 %s에 당신을 추가했습니다",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Archief",
"Card Created": "Kaart aangemaakt",
"Card Moved": "Kaart verplaatst",
"New Comment": "Nieuwe reactie",
@@ -6,6 +7,7 @@
"This is a test text message!": "Dit is een test tekstbericht!",
"This is a *test* **markdown** `message`!": "Dit is een *test* **markdown** `bericht`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Dit is een <i>test</i> <b>html</b> <code>bericht</code>!",
"Trash": "Prullenbak",
"You Were Added to Card": "Je bent toegevoegd aan kaart",
"You Were Mentioned in Comment": "Je bent genoemd in reactie",
"%s added you to %s on %s": "%s heeft je toegevoegd aan %s op %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Archiwum",
"Card Created": "Karta utworzona",
"Card Moved": "Karta przeniesiona",
"New Comment": "Nowy komentarz",
@@ -6,6 +7,7 @@
"This is a test text message!": "To jest testowa wiadomość tekstowa!",
"This is a *test* **markdown** `message`!": "To jest *testowa* **markdown** `wiadomość`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "To jest <i>testowa</i> <b>html</b> <code>wiadomość</code>!",
"Trash": "Kosz",
"You Were Added to Card": "Zostałeś dodany do karty",
"You Were Mentioned in Comment": "Zostałeś wspomniany w komentarzu",
"%s added you to %s on %s": "%s dodał cię do %s w dniu %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Arquivo",
"Card Created": "Cartão criado",
"Card Moved": "Cartão movido",
"New Comment": "Novo comentário",
@@ -6,6 +7,7 @@
"This is a test text message!": "Esta é uma mensagem de texto de teste!",
"This is a *test* **markdown** `message`!": "Esta é uma *mensagem* **markdown** `de teste`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Esta é uma <i>mensagem</i> <b>html</b> <code>de teste</code>!",
"Trash": "Lixeira",
"You Were Added to Card": "Você foi adicionado ao cartão",
"You Were Mentioned in Comment": "Você foi mencionado em comentário",
"%s added you to %s on %s": "%s adicionou você a %s em %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Arquivo",
"Card Created": "Cartão criado",
"Card Moved": "Cartão movido",
"New Comment": "Novo comentário",
@@ -6,6 +7,7 @@
"This is a test text message!": "Esta é uma mensagem de texto de teste!",
"This is a *test* **markdown** `message`!": "Esta é uma *mensagem* **markdown** `de teste`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Esta é uma <i>mensagem</i> <b>html</b> <code>de teste</code>!",
"Trash": "Lixo",
"You Were Added to Card": "Foi adicionado ao cartão",
"You Were Mentioned in Comment": "Foi mencionado num comentário",
"%s added you to %s on %s": "%s adicionou-o a %s em %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Arhivă",
"Card Created": "Card creat",
"Card Moved": "Card mutat",
"New Comment": "Comentariu nou",
@@ -6,6 +7,7 @@
"This is a test text message!": "Acesta este un mesaj text de test!",
"This is a *test* **markdown** `message`!": "Acesta este un *mesaj* **markdown** `de test`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Acesta este un <i>mesaj</i> <b>html</b> <code>de test</code>!",
"Trash": "Coș de gunoi",
"You Were Added to Card": "Ați fost adăugat la card",
"You Were Mentioned in Comment": "Ați fost menționat într-un comentariu",
"%s added you to %s on %s": "%s v-a adăugat la %s pe %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Архив",
"Card Created": "Карточка создана",
"Card Moved": "Карточка перемещена",
"New Comment": "Новый комментарий",
@@ -6,6 +7,7 @@
"This is a test text message!": "Это тестовое сообщение!",
"This is a *test* **markdown** `message`!": "Это *тестовое* **markdown** `сообщение`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Это <i>тестовое</i> <b>html</b> <code>сообщение</code>!",
"Trash": "Корзина",
"You Were Added to Card": "Вы были добавлены к карточке",
"You Were Mentioned in Comment": "Вы были упомянуты в комментарии",
"%s added you to %s on %s": "%s добавил(а) вас к %s на %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Archív",
"Card Created": "Karta vytvorená",
"Card Moved": "Karta presunutá",
"New Comment": "Nový komentár",
@@ -6,6 +7,7 @@
"This is a test text message!": "Toto je testovacia textová správa!",
"This is a *test* **markdown** `message`!": "Toto je *testovacia* **markdown** `správa`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Toto je <i>testovacia</i> <b>html</b> <code>správa</code>!",
"Trash": "Kôš",
"You Were Added to Card": "Boli ste pridaní ku karte",
"You Were Mentioned in Comment": "Boli ste spomenutí v komentári",
"%s added you to %s on %s": "%s vás pridal k %s dňa %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Архива",
"Card Created": "Картица креирана",
"Card Moved": "Картица премештена",
"New Comment": "Нови коментар",
@@ -6,6 +7,7 @@
"This is a test text message!": "Ово је тест текстуална порука!",
"This is a *test* **markdown** `message`!": "Ово је *тест* **markdown** `порука`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Ово је <i>тест</i> <b>html</b> <code>порука</code>!",
"Trash": "Корпа за отпатке",
"You Were Added to Card": "Додати сте на картицу",
"You Were Mentioned in Comment": "Поменути сте у коментару",
"%s added you to %s on %s": "%s вас је додао на %s дана %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Arhiva",
"Card Created": "Kartica kreirana",
"Card Moved": "Kartica premeštena",
"New Comment": "Novi komentar",
@@ -6,6 +7,7 @@
"This is a test text message!": "Ovo je test tekstualna poruka!",
"This is a *test* **markdown** `message`!": "Ovo je *test* **markdown** `poruka`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Ovo je <i>test</i> <b>html</b> <code>poruka</code>!",
"Trash": "Korpa za otpatke",
"You Were Added to Card": "Dodati ste na karticu",
"You Were Mentioned in Comment": "Pomenuti ste u komentaru",
"%s added you to %s on %s": "%s vas je dodao na %s dana %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Arkiv",
"Card Created": "Kort skapat",
"Card Moved": "Kort flyttat",
"New Comment": "Ny kommentar",
@@ -6,6 +7,7 @@
"This is a test text message!": "Detta är ett test textmeddelande!",
"This is a *test* **markdown** `message`!": "Detta är ett *test* **markdown** `meddelande`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Detta är ett <i>test</i> <b>html</b> <code>meddelande</code>!",
"Trash": "Papperskorg",
"You Were Added to Card": "Du lades till på kort",
"You Were Mentioned in Comment": "Du nämndes i kommentar",
"%s added you to %s on %s": "%s lade till dig på %s den %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Arşiv",
"Card Created": "Kart oluşturuldu",
"Card Moved": "Kart taşındı",
"New Comment": "Yeni yorum",
@@ -6,6 +7,7 @@
"This is a test text message!": "Bu bir test metin mesajıdır!",
"This is a *test* **markdown** `message`!": "Bu bir *test* **markdown** `mesajı`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Bu bir <i>test</i> <b>html</b> <code>mesajı</code>!",
"Trash": "Çöp kutusu",
"You Were Added to Card": "Karta eklendiniz",
"You Were Mentioned in Comment": "Bir yorumda bahsedildiniz",
"%s added you to %s on %s": "%s sizi %s'ye %s tarihinde ekledi",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Архів",
"Card Created": "Картку створено",
"Card Moved": "Картку переміщено",
"New Comment": "Новий коментар",
@@ -6,6 +7,7 @@
"This is a test text message!": "Це нове повідомлення!",
"This is a *test* **markdown** `message`!": "Це *тестове* **markdown** `повідомлення`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Це <i>тестове</i> <b>html</b> <code>повідомлення</code>!",
"Trash": "Кошик",
"You Were Added to Card": "Вас було додано до картки",
"You Were Mentioned in Comment": "Вас було згадано у коментарі",
"%s added you to %s on %s": "%s додав(ла) вас до %s на %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "Arxiv",
"Card Created": "Karta yaratildi",
"Card Moved": "Karta ko'chirildi",
"New Comment": "Yangi izoh",
@@ -6,6 +7,7 @@
"This is a test text message!": "Bu test matn xabari!",
"This is a *test* **markdown** `message`!": "Bu *test* **markdown** `xabar`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Bu <i>test</i> <b>html</b> <code>xabar</code>!",
"Trash": "Chiqindi quti",
"You Were Added to Card": "Siz kartaga qo'shildingiz",
"You Were Mentioned in Comment": "Siz izohda eslatildingiz",
"%s added you to %s on %s": "%s sizni %s ga %s da qo'shdi",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "归档",
"Card Created": "卡片已创建",
"Card Moved": "卡片已移动",
"New Comment": "新评论",
@@ -6,6 +7,7 @@
"This is a test text message!": "这是一条测试文本消息!",
"This is a *test* **markdown** `message`!": "这是一条*测试***markdown**`消息`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "这是一条<i>测试</i><b>html</b><code>消息</code>!",
"Trash": "回收站",
"You Were Added to Card": "您已被添加到卡片",
"You Were Mentioned in Comment": "您在评论中被提及",
"%s added you to %s on %s": "%s 在 %s 将您添加到 %s",
+2
View File
@@ -1,4 +1,5 @@
{
"Archive": "封存",
"Card Created": "卡片已建立",
"Card Moved": "卡片已移動",
"New Comment": "新留言",
@@ -6,6 +7,7 @@
"This is a test text message!": "這是一則測試文字訊息!",
"This is a *test* **markdown** `message`!": "這是一則*測試***markdown**`訊息`!",
"This is a <i>test</i> <b>html</b> <code>message</code>!": "這是一則<i>測試</i><b>html</b><code>訊息</code>!",
"Trash": "垃圾桶",
"You Were Added to Card": "您已被加入卡片",
"You Were Mentioned in Comment": "您在留言中被提及",
"%s added you to %s on %s": "%s 在 %s 將您加入 %s",
+1
View File
@@ -16,6 +16,7 @@ const USERNAME_REGEX = /^[a-zA-Z0-9]+((_|\.)?[a-zA-Z0-9])*$/;
const isUrl = (value) =>
validator.isURL(value, {
protocols: ['http', 'https'],
require_tld: false,
require_protocol: true,
});