From 8762e623d0878ceafe60b3713eccc3f294df9d71 Mon Sep 17 00:00:00 2001 From: Kgothatso Ngako Date: Sun, 26 Dec 2021 00:59:02 +0200 Subject: [PATCH] Add ability to fork translationEntryVersions --- server/router/fork/index.js | 61 ++++++++++++++++++++++ server/router/index.js | 2 + server/router/versions/index.js | 3 ++ server/views/translation-entry-version.pug | 16 +++++- 4 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 server/router/fork/index.js diff --git a/server/router/fork/index.js b/server/router/fork/index.js new file mode 100644 index 0000000..8d7dd21 --- /dev/null +++ b/server/router/fork/index.js @@ -0,0 +1,61 @@ +const express = require('express'); + +module.exports = function (options) { + const db = options.db; + var router = express.Router(); + + router.route('/t/:id') + .post(function(request, response, next) { + db.TranslationEntryVersion.findByPk(request.params.id, { + }).then(async (translationEntryVersion) => { + if (translationEntryVersion) { + // fork... + const forkedTranslationEntryVersion = await db.TranslationEntryVersion.create({ + name: translationEntryVersion.name, + entryVersionId: translationEntryVersion.entryVersionId, + userId: request.user.id, + dialectId: translationEntryVersion.dialectId, + forkedFromId: translationEntryVersion.id + }) + if (forkedTranslationEntryVersion) { + return response.redirect(`/v/${forkedTranslationEntryVersion.entryVersionId}/translations/${forkedTranslationEntryVersion.id}`) + } else { + next() + } + } else { + next() + } + }).catch(error => { + next(error) + }) + }) + + router.route('/e/:id') + .get(function(request, response, next) { + db.TranslationEntryVersion.findByPk(request.params.id, { + }).then(translationEntryVersion => { + if (translationEntryVersion) { + // choose a dialect + next() + } else { + next() + } + }).catch(error => { + next(error) + }) + }) + .post(function(request, response, next) { + db.TranslationEntryVersion.findByPk(request.params.id, { + }).then(translationEntryVersion => { + if (translationEntryVersion) { + // fork... + next() + } else { + next() + } + }).catch(error => { + next(error) + }) + }) + return router; +}; \ No newline at end of file diff --git a/server/router/index.js b/server/router/index.js index 6a29673..0903ab8 100644 --- a/server/router/index.js +++ b/server/router/index.js @@ -24,6 +24,7 @@ module.exports = function (options) { var apiRouter = require('./api/')(options); var translateRouter = require('./translate/')(options); var versionsRouter = require('./versions')(options); + var forkRouter = require('./fork')(options); router.use('/library', libraryRouter); router.use('/pledges', pledgesRouter); @@ -32,6 +33,7 @@ module.exports = function (options) { router.use('/api', apiRouter); router.use('/translate', translateRouter); router.use('/v', versionsRouter); + router.use('/fork', forkRouter); return router; }; \ No newline at end of file diff --git a/server/router/versions/index.js b/server/router/versions/index.js index cb2116c..14a82ad 100644 --- a/server/router/versions/index.js +++ b/server/router/versions/index.js @@ -168,6 +168,9 @@ module.exports = function (options) { association: db.EntryVersion.Entry } ] + }, + { + association: db.TranslationEntryVersion.ForkedFrom } ] }).then(translationEntryVersion => { diff --git a/server/views/translation-entry-version.pug b/server/views/translation-entry-version.pug index f38be3b..0130390 100644 --- a/server/views/translation-entry-version.pug +++ b/server/views/translation-entry-version.pug @@ -6,4 +6,18 @@ block content h1= translationEntryVersion.name h2= translationEntryVersion.entryVersion.entry.name - a.btn.black(href=`/translate/${translationEntryVersion.id}`) Translate \ No newline at end of file + if translationEntryVersion.forkedFrom + p.flow-text is a + a(href=`/v/${translationEntryVersion.forkedFrom.entryVersionId}/translations/${translationEntryVersion.forkedFrom.id}`) fork + + //- TODO: Condition to show translate button + .row + .col.s12 + a.btn.black(href=`/translate/${translationEntryVersion.id}`) Translate + //- TODO: Condition to show fork button + .row + .col.s12 + form(action=`/fork/t/${translationEntryVersion.id}`, method="post") + button.btn.black(type="submit") fork + + //- TODO: Give summary of chapters...