From cab5f7ea057e7e9b3f153df61c918d4ace6f85cb Mon Sep 17 00:00:00 2001 From: Patrick Jentsch Date: Thu, 5 Dec 2024 15:07:13 +0100 Subject: [PATCH] More js enhancements --- app/static/css/corpus-status-text.css | 4 ++ app/static/js/app/extensions/toaster.js | 49 ++++++++++--------- .../js/resource-displays/corpus-display.js | 19 ++++--- 3 files changed, 42 insertions(+), 30 deletions(-) diff --git a/app/static/css/corpus-status-text.css b/app/static/css/corpus-status-text.css index fca3d1d2..52be06d4 100644 --- a/app/static/css/corpus-status-text.css +++ b/app/static/css/corpus-status-text.css @@ -2,6 +2,10 @@ --corpus-status-content: "unprepared"; } +[data-corpus-status="SUBMITTED"] { + --corpus-status-content: "submitted"; +} + [data-corpus-status="QUEUED"] { --corpus-status-content: "queued"; } diff --git a/app/static/js/app/extensions/toaster.js b/app/static/js/app/extensions/toaster.js index 876fc7b3..6808ad8b 100644 --- a/app/static/js/app/extensions/toaster.js +++ b/app/static/js/app/extensions/toaster.js @@ -7,24 +7,43 @@ nopaque.app.extensions.Toaster = class Toaster { this.app.userHub.addEventListener('patch', (event) => {this.#onPatch(event.detail);}); } - #onPatch(patch) { - // Handle job updates - const jobRegExp = new RegExp(`^/users/([A-Za-z0-9]+)/jobs/([A-Za-z0-9]+)`); - const jobPatch = patch.filter((operation) => {return jobRegExp.test(operation.path);}); - - this.#onJobPatch(jobPatch); - + async #onPatch(patch) { // Handle corpus updates const corpusRegExp = new RegExp(`^/users/([A-Za-z0-9]+)/corpora/([A-Za-z0-9]+)`); const corpusPatch = patch.filter((operation) => {return corpusRegExp.test(operation.path);}); this.#onCorpusPatch(corpusPatch); + + // Handle job updates + const jobRegExp = new RegExp(`^/users/([A-Za-z0-9]+)/jobs/([A-Za-z0-9]+)`); + const jobPatch = patch.filter((operation) => {return jobRegExp.test(operation.path);}); + + this.#onJobPatch(jobPatch); + } + + async #onCorpusPatch(patch) { + return; + // Handle corpus status updates + const corpusStatusRegExp = new RegExp(`^/users/([A-Za-z0-9]+)/corpora/([A-Za-z0-9]+)/status$`); + const corpusStatusPatch = patch + .filter((operation) => {return corpusStatusRegExp.test(operation.path);}) + .filter((operation) => {return operation.op === 'replace';}); + + for (let operation of corpusStatusPatch) { + const [match, userId, corpusId] = operation.path.match(corpusStatusRegExp); + const user = await this.app.userHub.get(userId); + const corpus = user.corpora[corpusId]; + + this.app.ui.flash(`[${corpus.title}] New status: `, 'corpus'); + } } async #onJobPatch(patch) { // Handle job status updates const jobStatusRegExp = new RegExp(`^/users/([A-Za-z0-9]+)/jobs/([A-Za-z0-9]+)/status$`); - const jobStatusPatch = patch.filter((operation) => {return operation.op === 'replace';}); + const jobStatusPatch = patch + .filter((operation) => {return jobStatusRegExp.test(operation.path);}) + .filter((operation) => {return operation.op === 'replace';}); for (let operation of jobStatusPatch) { const [match, userId, jobId] = operation.path.match(jobStatusRegExp); @@ -34,18 +53,4 @@ nopaque.app.extensions.Toaster = class Toaster { this.app.ui.flash(`[${job.title}] New status: `, 'job'); } } - - async #onCorpusPatch(patch) { - // Handle job status updates - const corpusStatusRegExp = new RegExp(`^/users/([A-Za-z0-9]+)/corpora/([A-Za-z0-9]+)/status$`); - const corpusStatusPatch = patch.filter((operation) => {return operation.op === 'replace';}); - - for (let operation of corpusStatusPatch) { - const [match, userId, corpusId] = operation.path.match(corpusStatusRegExp); - const user = await this.app.userHub.get(userId); - const corpus = user.corpora[corpusId]; - - this.app.ui.flash(`[${corpus.title}] New status: `, 'job'); - } - } } diff --git a/app/static/js/resource-displays/corpus-display.js b/app/static/js/resource-displays/corpus-display.js index 40a7d996..82cd8897 100644 --- a/app/static/js/resource-displays/corpus-display.js +++ b/app/static/js/resource-displays/corpus-display.js @@ -52,22 +52,23 @@ nopaque.resource_displays.CorpusDisplay = class CorpusDisplay extends nopaque.re } } - setTitle(title) { - this.setElements(this.displayElement.querySelectorAll('.corpus-title'), title); + async setTitle(title) { + const corpusTitleElements = this.displayElement.querySelectorAll('.corpus-title'); + this.setElements(corpusTitleElements, title); } setNumTokens(numTokens) { - this.setElements( - this.displayElement.querySelectorAll('.corpus-token-ratio'), - `${numTokens}/${app.data.users[this.userId].corpora[this.corpusId].max_num_tokens}` - ); + const corpusTokenRatioElements = this.displayElement.querySelectorAll('.corpus-token-ratio'); + const maxNumTokens = 2147483647; + + this.setElements(corpusTokenRatioElements, `${numTokens}/${maxNumTokens}`); } setDescription(description) { this.setElements(this.displayElement.querySelectorAll('.corpus-description'), description); } - setStatus(status) { + async setStatus(status) { let elements = this.displayElement.querySelectorAll('.action-button[data-action="analyze"]'); for (let element of elements) { if (['BUILT', 'STARTING_ANALYSIS_SESSION', 'RUNNING_ANALYSIS_SESSION', 'CANCELING_ANALYSIS_SESSION'].includes(status)) { @@ -77,8 +78,10 @@ nopaque.resource_displays.CorpusDisplay = class CorpusDisplay extends nopaque.re } } elements = this.displayElement.querySelectorAll('.action-button[data-action="build-request"]'); + const user = await app.userHub.get(this.userId); + const corpusFiles = user.corpora[this.corpusId].files; for (let element of elements) { - if (['UNPREPARED', 'FAILED'].includes(status) && Object.values(app.data.users[this.userId].corpora[this.corpusId].files).length > 0) { + if (['UNPREPARED', 'FAILED'].includes(status) && Object.values(corpusFiles.length > 0)) { element.classList.remove('disabled'); } else { element.classList.add('disabled');