diff --git a/src/open_inwoner/js/components/ckeditor/editor.js b/src/open_inwoner/js/admin/ckeditor/editor.js similarity index 100% rename from src/open_inwoner/js/components/ckeditor/editor.js rename to src/open_inwoner/js/admin/ckeditor/editor.js diff --git a/src/open_inwoner/js/components/ckeditor/index.js b/src/open_inwoner/js/admin/ckeditor/index.js similarity index 100% rename from src/open_inwoner/js/components/ckeditor/index.js rename to src/open_inwoner/js/admin/ckeditor/index.js diff --git a/src/open_inwoner/js/components/ckeditor/plugins/filer/adapter.js b/src/open_inwoner/js/admin/ckeditor/plugins/filer/adapter.js similarity index 100% rename from src/open_inwoner/js/components/ckeditor/plugins/filer/adapter.js rename to src/open_inwoner/js/admin/ckeditor/plugins/filer/adapter.js diff --git a/src/open_inwoner/js/components/ckeditor/plugins/filer/plugin.js b/src/open_inwoner/js/admin/ckeditor/plugins/filer/plugin.js similarity index 100% rename from src/open_inwoner/js/components/ckeditor/plugins/filer/plugin.js rename to src/open_inwoner/js/admin/ckeditor/plugins/filer/plugin.js diff --git a/src/open_inwoner/js/admin/treebeard/index.js b/src/open_inwoner/js/admin/treebeard/index.js new file mode 100644 index 0000000000..1ae92e87a3 --- /dev/null +++ b/src/open_inwoner/js/admin/treebeard/index.js @@ -0,0 +1,67 @@ +function collapseNode(node) { + const event = new CustomEvent('click', { + view: window, + bubbles: true, + detail: { system: true }, + }) + setTimeout(() => { + node.dispatchEvent(event) + }, 1) +} + +function updateNodeStatus() { + const buttons = document.querySelectorAll('a.collapse') + buttons.forEach((button) => { + button.addEventListener('click', (event) => { + if (event.detail.system) { + return + } + const buttonId = event.currentTarget.parentElement.parentElement.id + setTimeout(() => { + if (button.classList.contains('expanded')) { + window.localStorage.setItem(`${buttonId}-open`, true) + } else { + window.localStorage.removeItem(`${buttonId}-open`) + } + }, 100) + }) + }) +} + +function expandOpenNodes() { + const rows = document.querySelectorAll('#result_list tr') + rows.forEach((row) => { + const currentRowOpen = window.localStorage.getItem(`${row.id}-open`) + if (currentRowOpen) { + const button = row.querySelector('.collapse') + const event = new MouseEvent('click', { + view: window, + bubbles: true, + }) + setTimeout(() => { + button.dispatchEvent(event) + }, 1) + } + }) +} + +function main() { + const questionnairePage = document.querySelector( + ' .app-questionnaire, .model-questionnairestep, .change-list' + ) + + if (questionnairePage) { + // Collapse all expanded nodes when the page is loaded + ;[...document.querySelectorAll('a.collapse')] + .reverse() + .forEach(collapseNode) + + // Update local storage when the node is expanded + updateNodeStatus() + + // Expand all nodes which are saved as open in the local storage + expandOpenNodes() + } +} + +window.addEventListener('load', main) diff --git a/src/open_inwoner/js/ckeditor.js b/src/open_inwoner/js/ckeditor.js deleted file mode 100644 index 8a27b6f99c..0000000000 --- a/src/open_inwoner/js/ckeditor.js +++ /dev/null @@ -1 +0,0 @@ -import './components/ckeditor' diff --git a/src/open_inwoner/js/django-admin.js b/src/open_inwoner/js/django-admin.js new file mode 100644 index 0000000000..133f5526ed --- /dev/null +++ b/src/open_inwoner/js/django-admin.js @@ -0,0 +1,2 @@ +import './admin/ckeditor' +import './admin/treebeard' diff --git a/src/open_inwoner/templates/admin/base_site.html b/src/open_inwoner/templates/admin/base_site.html index 086e67b244..e5b1fcb6de 100644 --- a/src/open_inwoner/templates/admin/base_site.html +++ b/src/open_inwoner/templates/admin/base_site.html @@ -48,5 +48,5 @@

{{ block.super }} {# Load the custom JS #} - + {% endblock %} diff --git a/webpack.config.js b/webpack.config.js index 7f44bd5827..86e7b12edf 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -23,7 +23,7 @@ module.exports = { admin_overrides: `${__dirname}/${paths.scssSrcDir}/admin/admin_overrides.scss`, 'pdf-p': `${__dirname}/${paths.scssSrcDir}/pdf/pdf_portrait.scss`, - ckeditor: `${__dirname}/${paths.jsSrcDir}/ckeditor.js`, + 'django-admin': `${__dirname}/${paths.jsSrcDir}/django-admin.js`, }, // (Output) bundle locations.