From 1b974f0bbc02586d640be5b9d079b3c59ef58796 Mon Sep 17 00:00:00 2001 From: Patrick Jentsch Date: Fri, 6 Oct 2023 15:04:36 +0200 Subject: [PATCH 1/3] Fix Requests usage again --- .../CorpusAnalysis/CorpusAnalysisStaticVisualization.js | 2 +- app/static/js/ResourceLists/AdminUserList.js | 2 +- app/static/js/ResourceLists/CorpusFileList.js | 8 ++++---- app/static/js/ResourceLists/CorpusFollowerList.js | 6 +++--- app/static/js/ResourceLists/CorpusList.js | 8 ++++---- app/static/js/ResourceLists/JobList.js | 4 ++-- app/static/js/ResourceLists/SpacyNLPPipelineModelList.js | 4 ++-- .../js/ResourceLists/TesseractOCRPipelineModelList.js | 4 ++-- app/static/js/resource-displays/corpus-display.js | 2 +- 9 files changed, 20 insertions(+), 20 deletions(-) diff --git a/app/static/js/CorpusAnalysis/CorpusAnalysisStaticVisualization.js b/app/static/js/CorpusAnalysis/CorpusAnalysisStaticVisualization.js index bdebb152..38c48c3c 100644 --- a/app/static/js/CorpusAnalysis/CorpusAnalysisStaticVisualization.js +++ b/app/static/js/CorpusAnalysis/CorpusAnalysisStaticVisualization.js @@ -75,7 +75,7 @@ class CorpusAnalysisStaticVisualization { getStopwords() { this.data.promises.getStopwords = new Promise((resolve, reject) => { - Requestscorpora.entity.getStopwords() + Requests.corpora.entity.getStopwords() .then((response) => { response.json() .then((json) => { diff --git a/app/static/js/ResourceLists/AdminUserList.js b/app/static/js/ResourceLists/AdminUserList.js index 3bbd73ca..0b8f0c16 100644 --- a/app/static/js/ResourceLists/AdminUserList.js +++ b/app/static/js/ResourceLists/AdminUserList.js @@ -91,7 +91,7 @@ class AdminUserList extends ResourceList { let listAction = listActionElement === null ? 'view' : listActionElement.dataset.listAction; switch (listAction) { case 'delete': { - Requestsusers.entity.delete(itemId); + Requests.users.entity.delete(itemId); if (itemId === currentUserId) {window.location.href = '/';} break; } diff --git a/app/static/js/ResourceLists/CorpusFileList.js b/app/static/js/ResourceLists/CorpusFileList.js index af718a4d..9997b061 100644 --- a/app/static/js/ResourceLists/CorpusFileList.js +++ b/app/static/js/ResourceLists/CorpusFileList.js @@ -153,12 +153,12 @@ class CorpusFileList extends ResourceList { let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]'); confirmElement.addEventListener('click', (event) => { if (currentUserId != this.userId) { - Requestscorpora.entity.files.ent.delete(this.corpusId, itemId) + Requests.corpora.entity.files.ent.delete(this.corpusId, itemId) .then(() => { window.location.reload(); }); } else { - Requestscorpora.entity.files.ent.delete(this.corpusId, itemId) + Requests.corpora.entity.files.ent.delete(this.corpusId, itemId) } }); modal.open(); @@ -250,12 +250,12 @@ class CorpusFileList extends ResourceList { confirmElement.addEventListener('click', (event) => { this.selectedItemIds.forEach(selectedItemId => { if (currentUserId != this.userId) { - Requestscorpora.entity.files.ent.delete(this.corpusId, selectedItemId) + Requests.corpora.entity.files.ent.delete(this.corpusId, selectedItemId) .then(() => { window.location.reload(); }); } else { - Requestscorpora.entity.files.ent.delete(this.corpusId, selectedItemId); + Requests.corpora.entity.files.ent.delete(this.corpusId, selectedItemId); } }); this.selectedItemIds.clear(); diff --git a/app/static/js/ResourceLists/CorpusFollowerList.js b/app/static/js/ResourceLists/CorpusFollowerList.js index d4950a06..ca70a6c7 100644 --- a/app/static/js/ResourceLists/CorpusFollowerList.js +++ b/app/static/js/ResourceLists/CorpusFollowerList.js @@ -124,7 +124,7 @@ class CorpusFollowerList extends ResourceList { case 'update-role': { let followerId = listItemElement.dataset.followerId; let roleName = event.target.value; - Requestscorpora.entity.followers.entity.role.update(this.corpusId, followerId, roleName); + Requests.corpora.entity.followers.entity.role.update(this.corpusId, followerId, roleName); break; } default: { @@ -144,12 +144,12 @@ class CorpusFollowerList extends ResourceList { case 'unfollow-request': { let followerId = listItemElement.dataset.followerId; if (currentUserId != this.userId) { - Requestscorpora.entity.followers.entity.delete(this.corpusId, followerId) + Requests.corpora.entity.followers.entity.delete(this.corpusId, followerId) .then(() => { window.location.reload(); }); } else { - Requestscorpora.entity.followers.entity.delete(this.corpusId, followerId); + Requests.corpora.entity.followers.entity.delete(this.corpusId, followerId); } break; } diff --git a/app/static/js/ResourceLists/CorpusList.js b/app/static/js/ResourceLists/CorpusList.js index 0906eaac..985ff1d1 100644 --- a/app/static/js/ResourceLists/CorpusList.js +++ b/app/static/js/ResourceLists/CorpusList.js @@ -171,12 +171,12 @@ class CorpusList extends ResourceList { let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]'); confirmElement.addEventListener('click', (event) => { if (!values['is-owner']) { - Requestscorpora.entity.followers.entity.delete(itemId, currentUserId) + Requests.corpora.entity.followers.entity.delete(itemId, currentUserId) .then((response) => { window.location.reload(); }); } else { - Requestscorpora.entity.delete(itemId); + Requests.corpora.entity.delete(itemId); } }); modal.open(); @@ -272,9 +272,9 @@ class CorpusList extends ResourceList { let listItem = this.listjs.get('id', selectedItemId)[0].elm; let values = this.listjs.get('id', listItem.dataset.id)[0].values(); if (values['is-owner']) { - Requestscorpora.entity.delete(selectedItemId); + Requests.corpora.entity.delete(selectedItemId); } else { - Requestscorpora.entity.followers.entity.delete(selectedItemId, currentUserId); + Requests.corpora.entity.followers.entity.delete(selectedItemId, currentUserId); setTimeout(() => { window.location.reload(); }, 1000); diff --git a/app/static/js/ResourceLists/JobList.js b/app/static/js/ResourceLists/JobList.js index eb9d7b7a..1cb3ea60 100644 --- a/app/static/js/ResourceLists/JobList.js +++ b/app/static/js/ResourceLists/JobList.js @@ -143,7 +143,7 @@ class JobList extends ResourceList { ); let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]'); confirmElement.addEventListener('click', (event) => { - Requestsjobs.entity.delete(itemId); + Requests.jobs.entity.delete(itemId); }); modal.open(); break; @@ -228,7 +228,7 @@ class JobList extends ResourceList { let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]'); confirmElement.addEventListener('click', (event) => { this.selectedItemIds.forEach(selectedItemId => { - Requestsjobs.entity.delete(selectedItemId); + Requests.jobs.entity.delete(selectedItemId); }); this.selectedItemIds.clear(); this.renderingItemSelection(); diff --git a/app/static/js/ResourceLists/SpacyNLPPipelineModelList.js b/app/static/js/ResourceLists/SpacyNLPPipelineModelList.js index 4cb58e2f..46d3739d 100644 --- a/app/static/js/ResourceLists/SpacyNLPPipelineModelList.js +++ b/app/static/js/ResourceLists/SpacyNLPPipelineModelList.js @@ -120,7 +120,7 @@ class SpaCyNLPPipelineModelList extends ResourceList { switch (listAction) { case 'toggle-is-public': { let newIsPublicValue = listActionElement.checked; - Requestscontributions.spacy_nlp_pipeline_models.entity.isPublic.update(itemId, newIsPublicValue) + Requests.contributions.spacy_nlp_pipeline_models.entity.isPublic.update(itemId, newIsPublicValue) .catch((response) => { listActionElement.checked = !newIsPublicValue; }); @@ -169,7 +169,7 @@ class SpaCyNLPPipelineModelList extends ResourceList { ); let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]'); confirmElement.addEventListener('click', (event) => { - Requestscontributions.spacy_nlp_pipeline_models.entity.delete(itemId); + Requests.contributions.spacy_nlp_pipeline_models.entity.delete(itemId); }); modal.open(); break; diff --git a/app/static/js/ResourceLists/TesseractOCRPipelineModelList.js b/app/static/js/ResourceLists/TesseractOCRPipelineModelList.js index 83156320..765f44a6 100644 --- a/app/static/js/ResourceLists/TesseractOCRPipelineModelList.js +++ b/app/static/js/ResourceLists/TesseractOCRPipelineModelList.js @@ -129,7 +129,7 @@ class TesseractOCRPipelineModelList extends ResourceList { switch (listAction) { case 'toggle-is-public': { let newIsPublicValue = listActionElement.checked; - Requestscontributions.tesseract_ocr_pipeline_models.entity.isPublic.update(itemId, newIsPublicValue) + Requests.contributions.tesseract_ocr_pipeline_models.entity.isPublic.update(itemId, newIsPublicValue) .catch((response) => { listActionElement.checked = !newIsPublicValue; }); @@ -178,7 +178,7 @@ class TesseractOCRPipelineModelList extends ResourceList { ); let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]'); confirmElement.addEventListener('click', (event) => { - Requestscontributions.tesseract_ocr_pipeline_models.entity.delete(itemId); + Requests.contributions.tesseract_ocr_pipeline_models.entity.delete(itemId); }); modal.open(); break; diff --git a/app/static/js/resource-displays/corpus-display.js b/app/static/js/resource-displays/corpus-display.js index 52b08fbf..f68977c7 100644 --- a/app/static/js/resource-displays/corpus-display.js +++ b/app/static/js/resource-displays/corpus-display.js @@ -5,7 +5,7 @@ ResourceDisplays.CorpusDisplay = class CorpusDisplay extends ResourceDisplays.Ba this.displayElement .querySelector('.action-button[data-action="build-request"]') .addEventListener('click', (event) => { - Requestscorpora.entity.build(this.corpusId); + Requests.corpora.entity.build(this.corpusId); }); } From e20dd01710a93c7e784f5e7ff04fa6591cc81d5d Mon Sep 17 00:00:00 2001 From: Patrick Jentsch Date: Mon, 9 Oct 2023 14:21:31 +0200 Subject: [PATCH 2/3] Better auto initialization method for forms and resource displays --- .../js/forms/create-contribution-form.js | 7 +----- .../js/forms/create-corpus-file-form.js | 7 +----- app/static/js/forms/create-job-form.js | 7 +----- app/static/js/forms/index.js | 13 ++++++++--- .../js/resource-displays/corpus-display.js | 2 ++ app/static/js/resource-displays/index.js | 22 +++++++++++++++++++ .../js/resource-displays/job-display.js | 2 ++ app/templates/_scripts.html.j2 | 1 + app/templates/corpora/corpus.html.j2 | 4 +--- app/templates/jobs/job.html.j2 | 3 +-- 10 files changed, 42 insertions(+), 26 deletions(-) diff --git a/app/static/js/forms/create-contribution-form.js b/app/static/js/forms/create-contribution-form.js index 68003796..4474ff89 100644 --- a/app/static/js/forms/create-contribution-form.js +++ b/app/static/js/forms/create-contribution-form.js @@ -1,10 +1,5 @@ Forms.CreateContributionForm = class CreateContributionForm extends Forms.BaseForm { - static autoInit() { - let createContributionFormElements = document.querySelectorAll('.create-contribution-form'); - for (let createContributionFormElement of createContributionFormElements) { - new Forms.CreateContributionForm(createContributionFormElement); - } - } + static htmlClass = 'create-contribution-form'; constructor(formElement) { super(formElement); diff --git a/app/static/js/forms/create-corpus-file-form.js b/app/static/js/forms/create-corpus-file-form.js index 6cbc8a3a..beec4ee2 100644 --- a/app/static/js/forms/create-corpus-file-form.js +++ b/app/static/js/forms/create-corpus-file-form.js @@ -1,10 +1,5 @@ Forms.CreateCorpusFileForm = class CreateCorpusFileForm extends Forms.BaseForm { - static autoInit() { - let createCorpusFileFormElements = document.querySelectorAll('.create-corpus-file-form'); - for (let createCorpusFileFormElement of createCorpusFileFormElements) { - new Forms.CreateCorpusFileForm(createCorpusFileFormElement); - } - } + static htmlClass = 'create-corpus-file-form'; constructor(formElement) { super(formElement); diff --git a/app/static/js/forms/create-job-form.js b/app/static/js/forms/create-job-form.js index 0ee64e3a..6e6c7c01 100644 --- a/app/static/js/forms/create-job-form.js +++ b/app/static/js/forms/create-job-form.js @@ -1,10 +1,5 @@ Forms.CreateJobForm = class CreateJobForm extends Forms.BaseForm { - static autoInit() { - let createJobFormElements = document.querySelectorAll('.create-job-form'); - for (let createJobFormElement of createJobFormElements) { - new Forms.CreateJobForm(createJobFormElement); - } - } + static htmlClass = 'create-job-form'; constructor(formElement) { super(formElement); diff --git a/app/static/js/forms/index.js b/app/static/js/forms/index.js index b3bd9224..0e7529f6 100644 --- a/app/static/js/forms/index.js +++ b/app/static/js/forms/index.js @@ -3,15 +3,22 @@ var Forms = {}; Forms.autoInit = () => { for (let propertyName in Forms) { let property = Forms[propertyName]; - // Call the autoInit method of all properties that are subclasses of Forms.BaseForm + // Call autoInit of all properties that are subclasses of Forms.BaseForm. + // This does not include Forms.BaseForm itself. if (property.prototype instanceof Forms.BaseForm) { - property.autoInit(); + // Check if the static htmlClass property is defined. + if (property.htmlClass === undefined) {return;} + // Gather all HTML elements that have the `this.htmlClass` class + // and do not have the no-autoinit class. + let formElements = document.querySelectorAll(`.${property.htmlClass}:not(.no-autoinit)`); + // Create an instance of this class for each form element. + for (let formElement of formElements) {new property(formElement);} } } }; Forms.BaseForm = class BaseForm { - static autoInit() {throw 'Not implemented';} + static htmlClass; constructor(formElement) { this.formElement = formElement; diff --git a/app/static/js/resource-displays/corpus-display.js b/app/static/js/resource-displays/corpus-display.js index f68977c7..906b17ac 100644 --- a/app/static/js/resource-displays/corpus-display.js +++ b/app/static/js/resource-displays/corpus-display.js @@ -1,4 +1,6 @@ ResourceDisplays.CorpusDisplay = class CorpusDisplay extends ResourceDisplays.BaseDisplay { + static htmlClass = 'corpus-display'; + constructor(displayElement) { super(displayElement); this.corpusId = displayElement.dataset.corpusId; diff --git a/app/static/js/resource-displays/index.js b/app/static/js/resource-displays/index.js index 75c68987..4f52860a 100644 --- a/app/static/js/resource-displays/index.js +++ b/app/static/js/resource-displays/index.js @@ -1,6 +1,28 @@ var ResourceDisplays = {}; +ResourceDisplays.autoInit = () => { + console.log('ResourceDisplays.autoInit'); + for (let propertyName in ResourceDisplays) { + let property = ResourceDisplays[propertyName]; + // Call autoInit of all properties that are subclasses of `ResourceDisplays.BaseDisplay`. + // This does not include `ResourceDisplays.BaseDisplay` itself. + if (property.prototype instanceof ResourceDisplays.BaseDisplay) { + console.log(property); + // Check if the static `htmlClass` property is defined. + if (property.htmlClass === undefined) {return;} + // Gather all HTML elements that have the `this.htmlClass` class + // and do not have the `no-autoinit` class. + let displayElements = document.querySelectorAll(`.${property.htmlClass}:not(.no-autoinit)`); + console.log(displayElements); + // Create an instance of this class for each display element. + for (let displayElement of displayElements) {new property(displayElement);} + } + } +} + ResourceDisplays.BaseDisplay = class BaseDisplay { + static htmlClass; + constructor(displayElement) { this.displayElement = displayElement; this.userId = this.displayElement.dataset.userId; diff --git a/app/static/js/resource-displays/job-display.js b/app/static/js/resource-displays/job-display.js index d52f0b0e..4ab370e2 100644 --- a/app/static/js/resource-displays/job-display.js +++ b/app/static/js/resource-displays/job-display.js @@ -1,4 +1,6 @@ ResourceDisplays.JobDisplay = class JobDisplay extends ResourceDisplays.BaseDisplay { + static htmlClass = 'job-display'; + constructor(displayElement) { super(displayElement); this.jobId = this.displayElement.dataset.jobId; diff --git a/app/templates/_scripts.html.j2 b/app/templates/_scripts.html.j2 index de457973..6213e3df 100644 --- a/app/templates/_scripts.html.j2 +++ b/app/templates/_scripts.html.j2 @@ -140,6 +140,7 @@ document.querySelectorAll('#nav-more-dropdown-trigger'), {alignment: 'right', constrainWidth: false, coverTrigger: false} ); + ResourceDisplays.autoInit(); ResourceList.autoInit(); Forms.autoInit(); diff --git a/app/templates/corpora/corpus.html.j2 b/app/templates/corpora/corpus.html.j2 index 7539f420..b6e600b9 100644 --- a/app/templates/corpora/corpus.html.j2 +++ b/app/templates/corpora/corpus.html.j2 @@ -5,7 +5,7 @@ {% block page_content %}
-
+

{{ corpus.title }}

@@ -237,8 +237,6 @@ {% block scripts %} {{ super() }}