From 9f58b515506c5b7629a6847b0b2498e110d2162c Mon Sep 17 00:00:00 2001 From: Johannes Wilm Date: Sun, 15 Sep 2024 08:17:22 +0200 Subject: [PATCH] add tests, fiduswriter/fiduswriter#1273 fiduswriter/fiduswriter#1274 --- .../book/static/js/modules/books/actions.js | 75 +++++++++---------- .../book/static/js/modules/books/menu.js | 32 +++++++- .../book/static/js/modules/books/templates.js | 2 + fiduswriter/book/tests/test_book.py | 67 ++++++++++++++++- fiduswriter/book/urls.py | 4 +- 5 files changed, 135 insertions(+), 45 deletions(-) diff --git a/fiduswriter/book/static/js/modules/books/actions.js b/fiduswriter/book/static/js/modules/books/actions.js index 91780fc..d59f171 100644 --- a/fiduswriter/book/static/js/modules/books/actions.js +++ b/fiduswriter/book/static/js/modules/books/actions.js @@ -397,6 +397,41 @@ export class BookActions { selectFolders: false }) fileSelector.init() + + dialog.dialogEl.querySelector("#input-docx-template").addEventListener("change", event => { + const file = event.target.files[0] + return postJson( + "/api/book/docx_template/save/", + {id: book.id, file} + ).then(({status, json}) => { + if (status !== 200) { + return + } + book.docx_template = json.docx_template + const docxTemplateRow = document.getElementById("docx-template-row") + if (docxTemplateRow) { + docxTemplateRow.innerHTML = bookDOCXDataRowTemplate({book}) + } + }) + }) + + dialog.dialogEl.querySelector("#input-odt-template").addEventListener("change", event => { + const file = event.target.files[0] + return postJson( + "/api/book/odt_template/save/", + {id: book.id, file} + ).then(({status, json}) => { + if (status !== 200) { + return + } + book.odt_template = json.odt_template + const odtTemplateRow = document.getElementById("odt-template-row") + if (odtTemplateRow) { + odtTemplateRow.innerHTML = bookODTDataRowTemplate({book}) + } + }) + }) + } // Handle tab link clicking @@ -549,48 +584,12 @@ export class BookActions { break } case findTarget(event, "#select-docx-template", el): { - const fileSelector = document.createElement("input") - fileSelector.type = "file" - fileSelector.accept = ".docx" - fileSelector.addEventListener("change", event => { - const file = event.target.files[0] - return postJson( - "/api/book/docx_template/save/", - {id: book.id, file} - ).then(({status, json}) => { - if (status !== 200) { - return - } - book.docx_template = json.docx_template - const docxTemplateRow = document.getElementById("docx-template-row") - if (docxTemplateRow) { - docxTemplateRow.innerHTML = bookDOCXDataRowTemplate({book}) - } - }) - }) + const fileSelector = document.querySelector("#input-docx-template") fileSelector.click() break } case findTarget(event, "#select-odt-template", el): { - const fileSelector = document.createElement("input") - fileSelector.type = "file" - fileSelector.accept = ".odt" - fileSelector.addEventListener("change", event => { - const file = event.target.files[0] - return postJson( - "/api/book/odt_template/save/", - {id: book.id, file} - ).then(({status, json}) => { - if (status !== 200) { - return - } - book.odt_template = json.odt_template - const odtTemplateRow = document.getElementById("odt-template-row") - if (odtTemplateRow) { - odtTemplateRow.innerHTML = bookODTDataRowTemplate({book}) - } - }) - }) + const fileSelector = document.querySelector("#input-odt-template") fileSelector.click() break } diff --git a/fiduswriter/book/static/js/modules/books/menu.js b/fiduswriter/book/static/js/modules/books/menu.js index 53a4eab..77c36c8 100644 --- a/fiduswriter/book/static/js/modules/books/menu.js +++ b/fiduswriter/book/static/js/modules/books/menu.js @@ -342,7 +342,18 @@ export const bulkMenuModel = () => ({ const ids = overview.getSelected() ids.forEach(id => { const book = overview.bookList.find(book => book.id === id) - exportDOCX(book, overview) + if (book.docx_template) { + exportDOCX(book, overview) + } else { + addAlert( + "error", + book.title + + ": " + + gettext( + "This book does not have a DOCX template." + ) + ) + } }) }, disabled: overview => !overview.getSelected().length @@ -354,7 +365,18 @@ export const bulkMenuModel = () => ({ const ids = overview.getSelected() ids.forEach(id => { const book = overview.bookList.find(book => book.id === id) - exportODT(book, overview) + if (book.odt_template) { + exportODT(book, overview) + } else { + addAlert( + "error", + book.title + + ": " + + gettext( + "This book does not have an ODT template." + ) + ) + } }) }, disabled: overview => !overview.getSelected().length @@ -422,7 +444,8 @@ export const exportMenuModel = () => ({ tooltip: gettext("Export book as DOCX."), action: ({saveBook, book, overview}) => { saveBook().then(() => exportDOCX(book, overview)) - } + }, + disabled: book => !book.docx_template }, { @@ -431,7 +454,8 @@ export const exportMenuModel = () => ({ tooltip: gettext("Export book as ODT."), action: ({saveBook, book, overview}) => { saveBook().then(() => exportODT(book, overview)) - } + }, + disabled: book => !book.odt_template }, { type: "action", diff --git a/fiduswriter/book/static/js/modules/books/templates.js b/fiduswriter/book/static/js/modules/books/templates.js index 905ca7f..eac4c4b 100644 --- a/fiduswriter/book/static/js/modules/books/templates.js +++ b/fiduswriter/book/static/js/modules/books/templates.js @@ -360,6 +360,7 @@ export const bookODTDataRowTemplate = ({book}) => title="${gettext("Select an ODT template file")}"> ${gettext("Select ODT template file")} + ${ book.odt_template ? ` + ${ book.docx_template ? `