From f948603e05219dc67c586509e9f8ed05d21f799c Mon Sep 17 00:00:00 2001 From: kngako Date: Wed, 22 Jun 2022 03:39:36 +0200 Subject: [PATCH] Add ability to remove translator --- server/router/translate/index.js | 198 ++++++++++++++++++ server/views/css/site.css | 8 + .../translate-chapter-translator-form.pug | 6 + .../translate-chapter-translator-remove.pug | 17 ++ server/views/translate-chapter.pug | 8 +- 5 files changed, 233 insertions(+), 4 deletions(-) create mode 100644 server/views/translate-chapter-translator-remove.pug diff --git a/server/router/translate/index.js b/server/router/translate/index.js index 6579a1a..7ec7d07 100644 --- a/server/router/translate/index.js +++ b/server/router/translate/index.js @@ -875,6 +875,21 @@ module.exports = function (options) { }, { association: db.TranslationChapter.TranslationChapterTranslators, + include: [ + { + association: db.TranslationChapterTranslator.Translator, + include: [ + { + association: db.Entity.EntityEmail, + include: [ + { + association: db.EntityEmail.Email + } + ] + } + ] + } + ] }, { association: db.TranslationChapter.TranslationChapterProofReaders, @@ -1068,5 +1083,188 @@ module.exports = function (options) { }) }) + router.route('/:id/chapter/:chapterId/translator/:translatorId') + .get(function(request, response, next) { + db.TranslationChapterTranslator.findByPk(request.params.translatorId, { + include: [ + { + association: db.TranslationChapterTranslator.TranslationChapter, + required: true, + include: [ + { + association: db.TranslationChapter.TranslationArtifactVersion, + required: true, + include: [ + { + association: db.TranslationArtifactVersion.ArtifactVersion, + required: true, + include: [ + { + association: db.ArtifactVersion.Artifact, + required: true, + include: [ + { + association: db.Artifact.Dialect + }, + { + association: db.Artifact.Owner, + required: true, + include: [ + { + association: db.Owner.OwnerEntities, + required: true, + include: [ + { + association: db.OwnerEntity.Entity, + required: true, + include: [ + { + association: db.Entity.EntityUsers, + required: true, + where: { + userId: request.user?.id ?? null + } + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + association: db.TranslationArtifactVersion.Dialect + }, + { + association: db.TranslationArtifactVersion.BackTranslationFrom + }, + { + association: db.TranslationArtifactVersion.TranslationArtifactVersionEditor, + } + ] + } + ] + }, + { + association: db.TranslationChapterTranslator.Translator, + include: [ + { + association: db.Entity.EntityEmail, + include: [ + { + association: db.EntityEmail.Email + } + ] + } + ] + } + ] + }).then(translationChapterTranslator => { + if (translationChapterTranslator) { + response.display("translate-chapter-translator-remove", { + user: request.user, + pageTitle: `Translator ${translationChapterTranslator.name}`, + translationChapterTranslator: translationChapterTranslator + }) + } else { + next() + } + }).catch(error => { + next(error) + }) + }) + .post(function(request, response, next) { + db.TranslationChapterTranslator.findByPk(request.params.translatorId, { + include: [ + { + association: db.TranslationChapterTranslator.TranslationChapter, + required: true, + include: [ + { + association: db.TranslationChapter.TranslationArtifactVersion, + required: true, + include: [ + { + association: db.TranslationArtifactVersion.ArtifactVersion, + required: true, + include: [ + { + association: db.ArtifactVersion.Artifact, + required: true, + include: [ + { + association: db.Artifact.Dialect + }, + { + association: db.Artifact.Owner, + required: true, + include: [ + { + association: db.Owner.OwnerEntities, + required: true, + include: [ + { + association: db.OwnerEntity.Entity, + required: true, + include: [ + { + association: db.Entity.EntityUsers, + required: true, + where: { + userId: request.user?.id ?? null + } + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + association: db.TranslationArtifactVersion.Dialect + }, + { + association: db.TranslationArtifactVersion.BackTranslationFrom + }, + { + association: db.TranslationArtifactVersion.TranslationArtifactVersionEditor, + } + ] + } + ] + }, + { + association: db.TranslationChapterTranslator.Translator, + include: [ + { + association: db.Entity.EntityEmail, + include: [ + { + association: db.EntityEmail.Email + } + ] + } + ] + } + ] + }).then(async (translationChapterTranslator) => { + if (translationChapterTranslator) { + await translationChapterTranslator.destroy() + response.redirect(`/translate/${translationChapterTranslator.translationChapter.translationArtifactVersion.id}/chapter/${translationChapterTranslator.translationChapter.id}`) + } else { + next() + } + }).catch(error => { + next(error) + }) + }) + return router; }; \ No newline at end of file diff --git a/server/views/css/site.css b/server/views/css/site.css index 5ee70ae..be6153c 100644 --- a/server/views/css/site.css +++ b/server/views/css/site.css @@ -73,4 +73,12 @@ html { vertical-align:middle; margin-right:1em; color:white; +} + +.chip .remove { + cursor: pointer; + float: right; + font-size: 16px; + line-height: 32px; + padding-left: 8px; } \ No newline at end of file diff --git a/server/views/translate-chapter-translator-form.pug b/server/views/translate-chapter-translator-form.pug index 6ff5fc2..61102f9 100644 --- a/server/views/translate-chapter-translator-form.pug +++ b/server/views/translate-chapter-translator-form.pug @@ -9,6 +9,12 @@ block content p.flow-text span.chip #{translationChapter.chapter.wordCount.toLocaleString()} words + if translationChapter.translationChapterTranslators.length > 0 + p.flow-text Translators + each translationChapterTranslator in translationChapter.translationChapterTranslators + span.chip= translatorDisplayName(translationChapterTranslator) + a(href=`/translate/${translationChapter.translationArtifactVersion.id}/chapter/${translationChapter.id}/translator/${translationChapterTranslator.id}`) + i.remove.material-icons close p.flow-text Add translator diff --git a/server/views/translate-chapter-translator-remove.pug b/server/views/translate-chapter-translator-remove.pug new file mode 100644 index 0000000..7adc219 --- /dev/null +++ b/server/views/translate-chapter-translator-remove.pug @@ -0,0 +1,17 @@ +extend templates/layout.pug + +block content + .container + .center + h1 #{translationChapterTranslator.translationChapter.translationArtifactVersion.artifactVersion.artifact.name} - #{translationChapterTranslator.translationChapter.translationArtifactVersion.artifactVersion.tag} + p.flow-text Remove #{translatorDisplayName(translationChapterTranslator)} + + .row + form.col.s12(action=`/translate/${translationChapterTranslator.translationChapter.translationArtifactVersion.id}/chapter/${translationChapterTranslator.translationChapter.id}/translator/${translationChapterTranslator.id}`, method="post") + .row + .input-field.col.s12 + input#confirmation(type="text", name="confirmation", pattern=translatorDisplayName(translationChapterTranslator).replace(/.+$/g, '\\$&'), placeholder="Confirm translator removal", required=true, autocomplete="off") + label(for="confirmation")= `Please type '${translatorDisplayName(translationChapterTranslator)}' to confirm removal` + .input-field.col.s12 + button.btn(type="submit") Remove Translator + diff --git a/server/views/translate-chapter.pug b/server/views/translate-chapter.pug index e30c1a5..20bb032 100644 --- a/server/views/translate-chapter.pug +++ b/server/views/translate-chapter.pug @@ -13,13 +13,13 @@ block content .col.s12.m4 p.flow-text - a.btn-flat.waves-effect.dropdown-trigger(href=`/translate/${translationChapter.translationArtifactVersion.id}/chapter/${translationChapter.id}/translator`) Translator ▼ + a.btn-flat.waves-effect.dropdown-trigger(href=`/translate/${translationChapter.translationArtifactVersion.id}/chapter/${translationChapter.id}/translator`) Translator ⚙ br if translationChapter.translationChapterTranslators.length > 0 each translationChapterTranslator in translationChapter.translationChapterTranslators - - - const translatorDisplayName = translationChapterTranslator.translator.entityEmail == null ? translationChapterTranslator.translator.name : translationChapterTranslator.translator.entityEmail.email.address - span.chip= translatorDisplayName + span.chip= translatorDisplayName(translationChapterTranslator) + a(href=`/translate/${translationChapter.translationArtifactVersion.id}/chapter/${translationChapter.id}/translator/${translationChapterTranslator.id}`) + i.remove.material-icons close else span No translators assigned yet .col.s12.m4