Compare commits

...

4 Commits

Author SHA1 Message Date
Patrick Jentsch
53f4400731 rename Requests namespace to requests 2023-10-04 14:07:39 +02:00
Patrick Jentsch
f36600f06c downgrade python to v3.10.13 2023-10-04 13:48:32 +02:00
Patrick Jentsch
068211a72b add missing semicolons 2023-10-04 13:48:10 +02:00
Patrick Jentsch
f566e276a1 use better js naming conventions 2023-10-04 12:32:27 +02:00
32 changed files with 254 additions and 254 deletions

View File

@ -1,4 +1,4 @@
FROM python:3.11.5-slim-bookworm FROM python:3.10.13-slim-bookworm
LABEL authors="Patrick Jentsch <p.jentsch@uni-bielefeld.de>" LABEL authors="Patrick Jentsch <p.jentsch@uni-bielefeld.de>"

View File

@ -75,7 +75,7 @@ class CorpusAnalysisStaticVisualization {
getStopwords() { getStopwords() {
this.data.promises.getStopwords = new Promise((resolve, reject) => { this.data.promises.getStopwords = new Promise((resolve, reject) => {
Requests.corpora.entity.getStopwords() requests.corpora.entity.getStopwords()
.then((response) => { .then((response) => {
response.json() response.json()
.then((json) => { .then((json) => {

View File

@ -1,5 +0,0 @@
/*****************************************************************************
* Contributions *
* Fetch requests for /contributions routes *
*****************************************************************************/
Requests.contributions = {};

View File

@ -1,26 +0,0 @@
/*****************************************************************************
* SpaCy NLP Pipeline Models *
* Fetch requests for /contributions/spacy-nlp-pipeline-models routes *
*****************************************************************************/
Requests.contributions.spacy_nlp_pipeline_models = {};
Requests.contributions.spacy_nlp_pipeline_models.entity = {};
Requests.contributions.spacy_nlp_pipeline_models.entity.delete = (spacyNlpPipelineModelId) => {
let input = `/contributions/spacy-nlp-pipeline-models/${spacyNlpPipelineModelId}`;
let init = {
method: 'DELETE'
};
return Requests.JSONfetch(input, init);
};
Requests.contributions.spacy_nlp_pipeline_models.entity.isPublic = {};
Requests.contributions.spacy_nlp_pipeline_models.entity.isPublic.update = (spacyNlpPipelineModelId, value) => {
let input = `/contributions/spacy-nlp-pipeline-models/${spacyNlpPipelineModelId}/is_public`;
let init = {
method: 'PUT',
body: JSON.stringify(value)
};
return Requests.JSONfetch(input, init);
};

View File

@ -1,26 +0,0 @@
/*****************************************************************************
* Tesseract OCR Pipeline Models *
* Fetch requests for /contributions/tesseract-ocr-pipeline-models routes *
*****************************************************************************/
Requests.contributions.tesseract_ocr_pipeline_models = {};
Requests.contributions.tesseract_ocr_pipeline_models.entity = {};
Requests.contributions.tesseract_ocr_pipeline_models.entity.delete = (tesseractOcrPipelineModelId) => {
let input = `/contributions/tesseract-ocr-pipeline-models/${tesseractOcrPipelineModelId}`;
let init = {
method: 'DELETE'
};
return Requests.JSONfetch(input, init);
};
Requests.contributions.tesseract_ocr_pipeline_models.entity.isPublic = {};
Requests.contributions.tesseract_ocr_pipeline_models.entity.isPublic.update = (tesseractOcrPipelineModelId, value) => {
let input = `/contributions/tesseract-ocr-pipeline-models/${tesseractOcrPipelineModelId}/is_public`;
let init = {
method: 'PUT',
body: JSON.stringify(value)
};
return Requests.JSONfetch(input, init);
};

View File

@ -1,53 +0,0 @@
/*****************************************************************************
* Corpora *
* Fetch requests for /corpora routes *
*****************************************************************************/
Requests.corpora = {};
Requests.corpora.entity = {};
Requests.corpora.entity.delete = (corpusId) => {
let input = `/corpora/${corpusId}`;
let init = {
method: 'DELETE'
};
return Requests.JSONfetch(input, init);
};
Requests.corpora.entity.build = (corpusId) => {
let input = `/corpora/${corpusId}/build`;
let init = {
method: 'POST',
};
return Requests.JSONfetch(input, init);
};
Requests.corpora.entity.generateShareLink = (corpusId, role, expiration) => {
let input = `/corpora/${corpusId}/generate-share-link`;
let init = {
method: 'POST',
body: JSON.stringify({role: role, expiration: expiration})
};
return Requests.JSONfetch(input, init);
};
Requests.corpora.entity.getStopwords = () => {
let input = `/corpora/stopwords`;
let init = {
method: 'GET'
};
return Requests.JSONfetch(input, init);
};
Requests.corpora.entity.isPublic = {};
Requests.corpora.entity.isPublic.update = (corpusId, isPublic) => {
let input = `/corpora/${corpusId}/is_public`;
let init = {
method: 'PUT',
body: JSON.stringify(isPublic)
};
return Requests.JSONfetch(input, init);
};

View File

@ -1,15 +0,0 @@
/*****************************************************************************
* Corpora *
* Fetch requests for /corpora/<entity>/files routes *
*****************************************************************************/
Requests.corpora.entity.files = {};
Requests.corpora.entity.files.ent = {};
Requests.corpora.entity.files.ent.delete = (corpusId, corpusFileId) => {
let input = `/corpora/${corpusId}/files/${corpusFileId}`;
let init = {
method: 'DELETE',
};
return Requests.JSONfetch(input, init);
};

View File

@ -1,35 +0,0 @@
/*****************************************************************************
* Corpora *
* Fetch requests for /corpora/<entity>/followers routes *
*****************************************************************************/
Requests.corpora.entity.followers = {};
Requests.corpora.entity.followers.add = (corpusId, usernames) => {
let input = `/corpora/${corpusId}/followers`;
let init = {
method: 'POST',
body: JSON.stringify(usernames)
};
return Requests.JSONfetch(input, init);
};
Requests.corpora.entity.followers.entity = {};
Requests.corpora.entity.followers.entity.delete = (corpusId, followerId) => {
let input = `/corpora/${corpusId}/followers/${followerId}`;
let init = {
method: 'DELETE',
};
return Requests.JSONfetch(input, init);
};
Requests.corpora.entity.followers.entity.role = {};
Requests.corpora.entity.followers.entity.role.update = (corpusId, followerId, value) => {
let input = `/corpora/${corpusId}/followers/${followerId}/role`;
let init = {
method: 'PUT',
body: JSON.stringify(value)
};
return Requests.JSONfetch(input, init);
};

View File

@ -1,17 +0,0 @@
/*****************************************************************************
* Settings *
* Fetch requests for /users/<entity>/settings routes *
*****************************************************************************/
Requests.users.entity.settings = {};
Requests.users.entity.settings.profilePrivacy = {};
Requests.users.entity.settings.profilePrivacy.update = (userId, profilePrivacySetting, enabled) => {
let input = `/users/${userId}/settings/profile-privacy/${profilePrivacySetting}`;
let init = {
method: 'PUT',
body: JSON.stringify(enabled)
};
return Requests.JSONfetch(input, init);
};

View File

@ -5,7 +5,7 @@ class CorpusDisplay extends ResourceDisplay {
this.displayElement this.displayElement
.querySelector('.action-button[data-action="build-request"]') .querySelector('.action-button[data-action="build-request"]')
.addEventListener('click', (event) => { .addEventListener('click', (event) => {
Requests.corpora.entity.build(this.corpusId); requests.corpora.entity.build(this.corpusId);
}); });
} }

View File

@ -91,7 +91,7 @@ class AdminUserList extends ResourceList {
let listAction = listActionElement === null ? 'view' : listActionElement.dataset.listAction; let listAction = listActionElement === null ? 'view' : listActionElement.dataset.listAction;
switch (listAction) { switch (listAction) {
case 'delete': { case 'delete': {
Requests.users.entity.delete(itemId); requests.users.entity.delete(itemId);
if (itemId === currentUserId) {window.location.href = '/';} if (itemId === currentUserId) {window.location.href = '/';}
break; break;
} }

View File

@ -153,12 +153,12 @@ class CorpusFileList extends ResourceList {
let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]'); let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]');
confirmElement.addEventListener('click', (event) => { confirmElement.addEventListener('click', (event) => {
if (currentUserId != this.userId) { if (currentUserId != this.userId) {
Requests.corpora.entity.files.ent.delete(this.corpusId, itemId) requests.corpora.entity.files.ent.delete(this.corpusId, itemId)
.then(() => { .then(() => {
window.location.reload(); window.location.reload();
}); });
} else { } else {
Requests.corpora.entity.files.ent.delete(this.corpusId, itemId) requests.corpora.entity.files.ent.delete(this.corpusId, itemId)
} }
}); });
modal.open(); modal.open();
@ -250,12 +250,12 @@ class CorpusFileList extends ResourceList {
confirmElement.addEventListener('click', (event) => { confirmElement.addEventListener('click', (event) => {
this.selectedItemIds.forEach(selectedItemId => { this.selectedItemIds.forEach(selectedItemId => {
if (currentUserId != this.userId) { if (currentUserId != this.userId) {
Requests.corpora.entity.files.ent.delete(this.corpusId, selectedItemId) requests.corpora.entity.files.ent.delete(this.corpusId, selectedItemId)
.then(() => { .then(() => {
window.location.reload(); window.location.reload();
}); });
} else { } else {
Requests.corpora.entity.files.ent.delete(this.corpusId, selectedItemId); requests.corpora.entity.files.ent.delete(this.corpusId, selectedItemId);
} }
}); });
this.selectedItemIds.clear(); this.selectedItemIds.clear();

View File

@ -124,7 +124,7 @@ class CorpusFollowerList extends ResourceList {
case 'update-role': { case 'update-role': {
let followerId = listItemElement.dataset.followerId; let followerId = listItemElement.dataset.followerId;
let roleName = event.target.value; let roleName = event.target.value;
Requests.corpora.entity.followers.entity.role.update(this.corpusId, followerId, roleName); requests.corpora.entity.followers.entity.role.update(this.corpusId, followerId, roleName);
break; break;
} }
default: { default: {
@ -144,12 +144,12 @@ class CorpusFollowerList extends ResourceList {
case 'unfollow-request': { case 'unfollow-request': {
let followerId = listItemElement.dataset.followerId; let followerId = listItemElement.dataset.followerId;
if (currentUserId != this.userId) { if (currentUserId != this.userId) {
Requests.corpora.entity.followers.entity.delete(this.corpusId, followerId) requests.corpora.entity.followers.entity.delete(this.corpusId, followerId)
.then(() => { .then(() => {
window.location.reload(); window.location.reload();
}); });
} else { } else {
Requests.corpora.entity.followers.entity.delete(this.corpusId, followerId); requests.corpora.entity.followers.entity.delete(this.corpusId, followerId);
} }
break; break;
} }

View File

@ -171,12 +171,12 @@ class CorpusList extends ResourceList {
let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]'); let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]');
confirmElement.addEventListener('click', (event) => { confirmElement.addEventListener('click', (event) => {
if (!values['is-owner']) { if (!values['is-owner']) {
Requests.corpora.entity.followers.entity.delete(itemId, currentUserId) requests.corpora.entity.followers.entity.delete(itemId, currentUserId)
.then((response) => { .then((response) => {
window.location.reload(); window.location.reload();
}); });
} else { } else {
Requests.corpora.entity.delete(itemId); requests.corpora.entity.delete(itemId);
} }
}); });
modal.open(); modal.open();
@ -272,9 +272,9 @@ class CorpusList extends ResourceList {
let listItem = this.listjs.get('id', selectedItemId)[0].elm; let listItem = this.listjs.get('id', selectedItemId)[0].elm;
let values = this.listjs.get('id', listItem.dataset.id)[0].values(); let values = this.listjs.get('id', listItem.dataset.id)[0].values();
if (values['is-owner']) { if (values['is-owner']) {
Requests.corpora.entity.delete(selectedItemId); requests.corpora.entity.delete(selectedItemId);
} else { } else {
Requests.corpora.entity.followers.entity.delete(selectedItemId, currentUserId); requests.corpora.entity.followers.entity.delete(selectedItemId, currentUserId);
setTimeout(() => { setTimeout(() => {
window.location.reload(); window.location.reload();
}, 1000); }, 1000);

View File

@ -143,7 +143,7 @@ class JobList extends ResourceList {
); );
let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]'); let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]');
confirmElement.addEventListener('click', (event) => { confirmElement.addEventListener('click', (event) => {
Requests.jobs.entity.delete(itemId); requests.jobs.entity.delete(itemId);
}); });
modal.open(); modal.open();
break; break;
@ -228,7 +228,7 @@ class JobList extends ResourceList {
let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]'); let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]');
confirmElement.addEventListener('click', (event) => { confirmElement.addEventListener('click', (event) => {
this.selectedItemIds.forEach(selectedItemId => { this.selectedItemIds.forEach(selectedItemId => {
Requests.jobs.entity.delete(selectedItemId); requests.jobs.entity.delete(selectedItemId);
}); });
this.selectedItemIds.clear(); this.selectedItemIds.clear();
this.renderingItemSelection(); this.renderingItemSelection();

View File

@ -120,7 +120,7 @@ class SpaCyNLPPipelineModelList extends ResourceList {
switch (listAction) { switch (listAction) {
case 'toggle-is-public': { case 'toggle-is-public': {
let newIsPublicValue = listActionElement.checked; let newIsPublicValue = listActionElement.checked;
Requests.contributions.spacy_nlp_pipeline_models.entity.isPublic.update(itemId, newIsPublicValue) requests.contributions.spacy_nlp_pipeline_models.entity.isPublic.update(itemId, newIsPublicValue)
.catch((response) => { .catch((response) => {
listActionElement.checked = !newIsPublicValue; listActionElement.checked = !newIsPublicValue;
}); });
@ -169,7 +169,7 @@ class SpaCyNLPPipelineModelList extends ResourceList {
); );
let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]'); let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]');
confirmElement.addEventListener('click', (event) => { confirmElement.addEventListener('click', (event) => {
Requests.contributions.spacy_nlp_pipeline_models.entity.delete(itemId); requests.contributions.spacy_nlp_pipeline_models.entity.delete(itemId);
}); });
modal.open(); modal.open();
break; break;

View File

@ -129,7 +129,7 @@ class TesseractOCRPipelineModelList extends ResourceList {
switch (listAction) { switch (listAction) {
case 'toggle-is-public': { case 'toggle-is-public': {
let newIsPublicValue = listActionElement.checked; let newIsPublicValue = listActionElement.checked;
Requests.contributions.tesseract_ocr_pipeline_models.entity.isPublic.update(itemId, newIsPublicValue) requests.contributions.tesseract_ocr_pipeline_models.entity.isPublic.update(itemId, newIsPublicValue)
.catch((response) => { .catch((response) => {
listActionElement.checked = !newIsPublicValue; listActionElement.checked = !newIsPublicValue;
}); });
@ -178,7 +178,7 @@ class TesseractOCRPipelineModelList extends ResourceList {
); );
let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]'); let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]');
confirmElement.addEventListener('click', (event) => { confirmElement.addEventListener('click', (event) => {
Requests.contributions.tesseract_ocr_pipeline_models.entity.delete(itemId); requests.contributions.tesseract_ocr_pipeline_models.entity.delete(itemId);
}); });
modal.open(); modal.open();
break; break;

View File

@ -1,6 +1,5 @@
/***************************************************************************** /*****************************************************************************
* Admin * * Requests for /admin routes *
* Fetch requests for /admin routes *
*****************************************************************************/ *****************************************************************************/
Requests.admin = {}; Requests.admin = {};

View File

@ -0,0 +1,58 @@
/*****************************************************************************
* Requests for /contributions routes *
*****************************************************************************/
Requests.contributions = {};
/*****************************************************************************
* Requests for /contributions/spacy-nlp-pipeline-models routes *
*****************************************************************************/
Requests.contributions.spacy_nlp_pipeline_models = {};
Requests.contributions.spacy_nlp_pipeline_models.entity = {};
Requests.contributions.spacy_nlp_pipeline_models.entity.delete = (spacyNlpPipelineModelId) => {
let input = `/contributions/spacy-nlp-pipeline-models/${spacyNlpPipelineModelId}`;
let init = {
method: 'DELETE'
};
return Requests.JSONfetch(input, init);
};
Requests.contributions.spacy_nlp_pipeline_models.entity.isPublic = {};
Requests.contributions.spacy_nlp_pipeline_models.entity.isPublic.update = (spacyNlpPipelineModelId, value) => {
let input = `/contributions/spacy-nlp-pipeline-models/${spacyNlpPipelineModelId}/is_public`;
let init = {
method: 'PUT',
body: JSON.stringify(value)
};
return Requests.JSONfetch(input, init);
};
/*****************************************************************************
* Requests for /contributions/tesseract-ocr-pipeline-models routes *
*****************************************************************************/
Requests.contributions.tesseract_ocr_pipeline_models = {};
Requests.contributions.tesseract_ocr_pipeline_models.entity = {};
Requests.contributions.tesseract_ocr_pipeline_models.entity.delete = (tesseractOcrPipelineModelId) => {
let input = `/contributions/tesseract-ocr-pipeline-models/${tesseractOcrPipelineModelId}`;
let init = {
method: 'DELETE'
};
return Requests.JSONfetch(input, init);
};
Requests.contributions.tesseract_ocr_pipeline_models.entity.isPublic = {};
Requests.contributions.tesseract_ocr_pipeline_models.entity.isPublic.update = (tesseractOcrPipelineModelId, value) => {
let input = `/contributions/tesseract-ocr-pipeline-models/${tesseractOcrPipelineModelId}/is_public`;
let init = {
method: 'PUT',
body: JSON.stringify(value)
};
return Requests.JSONfetch(input, init);
};

View File

@ -0,0 +1,102 @@
/*****************************************************************************
* Requests for /corpora routes *
*****************************************************************************/
Requests.corpora = {};
Requests.corpora.entity = {};
Requests.corpora.entity.delete = (corpusId) => {
let input = `/corpora/${corpusId}`;
let init = {
method: 'DELETE'
};
return Requests.JSONfetch(input, init);
};
Requests.corpora.entity.build = (corpusId) => {
let input = `/corpora/${corpusId}/build`;
let init = {
method: 'POST',
};
return Requests.JSONfetch(input, init);
};
Requests.corpora.entity.generateShareLink = (corpusId, role, expiration) => {
let input = `/corpora/${corpusId}/generate-share-link`;
let init = {
method: 'POST',
body: JSON.stringify({role: role, expiration: expiration})
};
return Requests.JSONfetch(input, init);
};
Requests.corpora.entity.getStopwords = () => {
let input = `/corpora/stopwords`;
let init = {
method: 'GET'
};
return Requests.JSONfetch(input, init);
};
Requests.corpora.entity.isPublic = {};
Requests.corpora.entity.isPublic.update = (corpusId, isPublic) => {
let input = `/corpora/${corpusId}/is_public`;
let init = {
method: 'PUT',
body: JSON.stringify(isPublic)
};
return Requests.JSONfetch(input, init);
};
/*****************************************************************************
* Requests for /corpora/<entity>/files routes *
*****************************************************************************/
Requests.corpora.entity.files = {};
Requests.corpora.entity.files.ent = {};
Requests.corpora.entity.files.ent.delete = (corpusId, corpusFileId) => {
let input = `/corpora/${corpusId}/files/${corpusFileId}`;
let init = {
method: 'DELETE',
};
return Requests.JSONfetch(input, init);
};
/*****************************************************************************
* Requests for /corpora/<entity>/followers routes *
*****************************************************************************/
Requests.corpora.entity.followers = {};
Requests.corpora.entity.followers.add = (corpusId, usernames) => {
let input = `/corpora/${corpusId}/followers`;
let init = {
method: 'POST',
body: JSON.stringify(usernames)
};
return Requests.JSONfetch(input, init);
};
Requests.corpora.entity.followers.entity = {};
Requests.corpora.entity.followers.entity.delete = (corpusId, followerId) => {
let input = `/corpora/${corpusId}/followers/${followerId}`;
let init = {
method: 'DELETE',
};
return Requests.JSONfetch(input, init);
};
Requests.corpora.entity.followers.entity.role = {};
Requests.corpora.entity.followers.entity.role.update = (corpusId, followerId, value) => {
let input = `/corpora/${corpusId}/followers/${followerId}/role`;
let init = {
method: 'PUT',
body: JSON.stringify(value)
};
return Requests.JSONfetch(input, init);
};

View File

@ -1,4 +1,4 @@
let Requests = {}; var Requests = {};
Requests.JSONfetch = (input, init={}) => { Requests.JSONfetch = (input, init={}) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {

View File

@ -1,6 +1,5 @@
/***************************************************************************** /*****************************************************************************
* Jobs * * Requests for /jobs routes *
* Fetch requests for /jobs routes *
*****************************************************************************/ *****************************************************************************/
Requests.jobs = {}; Requests.jobs = {};
@ -12,7 +11,7 @@ Requests.jobs.entity.delete = (jobId) => {
method: 'DELETE' method: 'DELETE'
}; };
return Requests.JSONfetch(input, init); return Requests.JSONfetch(input, init);
} };
Requests.jobs.entity.log = (jobId) => { Requests.jobs.entity.log = (jobId) => {
let input = `/jobs/${jobId}/log`; let input = `/jobs/${jobId}/log`;
@ -20,7 +19,7 @@ Requests.jobs.entity.log = (jobId) => {
method: 'GET' method: 'GET'
}; };
return Requests.JSONfetch(input, init); return Requests.JSONfetch(input, init);
} };
Requests.jobs.entity.restart = (jobId) => { Requests.jobs.entity.restart = (jobId) => {
let input = `/jobs/${jobId}/restart`; let input = `/jobs/${jobId}/restart`;
@ -28,4 +27,4 @@ Requests.jobs.entity.restart = (jobId) => {
method: 'POST' method: 'POST'
}; };
return Requests.JSONfetch(input, init); return Requests.JSONfetch(input, init);
} };

View File

@ -22,7 +22,6 @@ Requests.users.entity.acceptTermsOfUse = () => {
return Requests.JSONfetch(input, init); return Requests.JSONfetch(input, init);
}; };
Requests.users.entity.avatar = {}; Requests.users.entity.avatar = {};
Requests.users.entity.avatar.delete = (userId) => { Requests.users.entity.avatar.delete = (userId) => {
@ -33,3 +32,20 @@ Requests.users.entity.avatar.delete = (userId) => {
return Requests.JSONfetch(input, init); return Requests.JSONfetch(input, init);
} }
/*****************************************************************************
* Requests for /users/<entity>/settings routes *
*****************************************************************************/
Requests.users.entity.settings = {};
Requests.users.entity.settings.profilePrivacy = {};
Requests.users.entity.settings.profilePrivacy.update = (userId, profilePrivacySetting, enabled) => {
let input = `/users/${userId}/settings/profile-privacy/${profilePrivacySetting}`;
let init = {
method: 'PUT',
body: JSON.stringify(enabled)
};
return Requests.JSONfetch(input, init);
};

View File

@ -4,23 +4,6 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/plotly.js/2.24.2/plotly.min.js" integrity="sha512-dAXqGCq94D0kgLSPnfvd/pZpCMoJQpGj2S2XQmFQ9Ay1+96kbjss02ISEh+TBNXMggGg/1qoMcOHcxg+Op/Jmw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/plotly.js/2.24.2/plotly.min.js" integrity="sha512-dAXqGCq94D0kgLSPnfvd/pZpCMoJQpGj2S2XQmFQ9Ay1+96kbjss02ISEh+TBNXMggGg/1qoMcOHcxg+Op/Jmw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pako/2.1.0/pako_inflate.min.js" integrity="sha512-mlnC6JeOvg9V4vBpWMxGKscsCdScB6yvGVCeFF2plnQMRmwH69s9F8SHPbC0oirqfePmRBhqx2s3Bx7WIvHfWg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/pako/2.1.0/pako_inflate.min.js" integrity="sha512-mlnC6JeOvg9V4vBpWMxGKscsCdScB6yvGVCeFF2plnQMRmwH69s9F8SHPbC0oirqfePmRBhqx2s3Bx7WIvHfWg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
{%- assets
filters='rjsmin',
output='gen/cqi.%(version)s.js',
'js/cqi/package.js',
'js/cqi/errors.js',
'js/cqi/status.js',
'js/cqi/api/package.js',
'js/cqi/api/client.js',
'js/cqi/models/package.js',
'js/cqi/models/resource.js',
'js/cqi/models/attributes.js',
'js/cqi/models/subcorpora.js',
'js/cqi/models/corpora.js',
'js/cqi/client.js'
%}
<script src="{{ ASSET_URL }}"></script>
{%- endassets %}
{%- assets {%- assets
filters='rjsmin', filters='rjsmin',
output='gen/app.%(version)s.js', output='gen/app.%(version)s.js',
@ -30,6 +13,25 @@
%} %}
<script src="{{ ASSET_URL }}"></script> <script src="{{ ASSET_URL }}"></script>
{%- endassets %} {%- endassets %}
{%- assets
filters='rjsmin',
output='gen/cqi.%(version)s.js',
'js/cqi/index.js',
'js/cqi/errors.js',
'js/cqi/status.js',
'js/cqi/api/index.js',
'js/cqi/api/client.js',
'js/cqi/models/index.js',
'js/cqi/models/resource.js',
'js/cqi/models/attributes.js',
'js/cqi/models/subcorpora.js',
'js/cqi/models/corpora.js',
'js/cqi/client.js'
%}
<script src="{{ ASSET_URL }}"></script>
{%- endassets %}
{%- assets {%- assets
filters='rjsmin', filters='rjsmin',
output='gen/Forms.%(version)s.js', output='gen/Forms.%(version)s.js',
@ -40,6 +42,7 @@
%} %}
<script src="{{ ASSET_URL }}"></script> <script src="{{ ASSET_URL }}"></script>
{%- endassets %} {%- endassets %}
{%- assets {%- assets
filters='rjsmin', filters='rjsmin',
output='gen/ResourceDisplays.%(version)s.js', output='gen/ResourceDisplays.%(version)s.js',
@ -49,6 +52,7 @@
%} %}
<script src="{{ ASSET_URL }}"></script> <script src="{{ ASSET_URL }}"></script>
{%- endassets %} {%- endassets %}
{%- assets {%- assets
filters='rjsmin', filters='rjsmin',
output='gen/ResourceLists.%(version)s.js', output='gen/ResourceLists.%(version)s.js',
@ -70,23 +74,20 @@
%} %}
<script src="{{ ASSET_URL }}"></script> <script src="{{ ASSET_URL }}"></script>
{%- endassets %} {%- endassets %}
{%- assets {%- assets
filters='rjsmin', filters='rjsmin',
output='gen/Requests.%(version)s.js', output='gen/requests.%(version)s.js',
'js/Requests/Requests.js', 'js/requests/index.js',
'js/Requests/admin/admin.js', 'js/requests/admin.js',
'js/Requests/contributions/contributions.js', 'js/requests/contributions.js',
'js/Requests/contributions/spacy_nlp_pipeline_models.js', 'js/requests/corpora.js',
'js/Requests/contributions/tesseract_ocr_pipeline_models.js', 'js/requests/jobs.js',
'js/Requests/corpora/corpora.js', 'js/requests/users.js'
'js/Requests/corpora/files.js',
'js/Requests/corpora/followers.js',
'js/Requests/jobs/jobs.js',
'js/Requests/users/users.js',
'js/Requests/users/settings.js'
%} %}
<script src="{{ ASSET_URL }}"></script> <script src="{{ ASSET_URL }}"></script>
{%- endassets %} {%- endassets %}
{%- assets {%- assets
filters='rjsmin', filters='rjsmin',
output='gen/CorpusAnalysis.%(version)s.js', output='gen/CorpusAnalysis.%(version)s.js',
@ -102,7 +103,9 @@
%} %}
<script src="{{ ASSET_URL }}"></script> <script src="{{ ASSET_URL }}"></script>
{%- endassets %} {%- endassets %}
<script> <script>
// TODO: Implement an app.run method and use this for all of the following
const app = new App(); const app = new App();
{%- if current_user.is_authenticated %} {%- if current_user.is_authenticated %}
const currentUserId = {{ current_user.hashid|tojson }}; const currentUserId = {{ current_user.hashid|tojson }};
@ -167,7 +170,7 @@
{ {
dismissible: false, dismissible: false,
onCloseEnd: () => { onCloseEnd: () => {
Requests.users.entity.acceptTermsOfUse(); requests.users.entity.acceptTermsOfUse();
} }
} }
); );

View File

@ -57,7 +57,7 @@
let userConfirmedSwitchElement = document.querySelector('#user-confirmed-switch'); let userConfirmedSwitchElement = document.querySelector('#user-confirmed-switch');
userConfirmedSwitchElement.addEventListener('change', (event) => { userConfirmedSwitchElement.addEventListener('change', (event) => {
let newConfirmed = userConfirmedSwitchElement.checked; let newConfirmed = userConfirmedSwitchElement.checked;
Requests.admin.users.entity.confirmed.update({{ user.hashid|tojson }}, newConfirmed) requests.admin.users.entity.confirmed.update({{ user.hashid|tojson }}, newConfirmed)
.catch((response) => { .catch((response) => {
userConfirmedSwitchElement.checked = !userConfirmedSwitchElement; userConfirmedSwitchElement.checked = !userConfirmedSwitchElement;
}); });

View File

@ -242,7 +242,7 @@ let corpusDisplay = new CorpusDisplay(document.querySelector('#corpus-display'))
{# {% if current_user.is_following_corpus(corpus) %} {# {% if current_user.is_following_corpus(corpus) %}
let unfollowRequestElement = document.querySelector('.action-button[data-action="unfollow-request"]'); let unfollowRequestElement = document.querySelector('.action-button[data-action="unfollow-request"]');
unfollowRequestElement.addEventListener('click', () => { unfollowRequestElement.addEventListener('click', () => {
Requests.corpora.entity.followers.entity.delete({{ corpus.hashid|tojson }}, {{ current_user.hashid|tojson }}) requests.corpora.entity.followers.entity.delete({{ corpus.hashid|tojson }}, {{ current_user.hashid|tojson }})
.then((response) => { .then((response) => {
window.location.reload(); window.location.reload();
}); });
@ -254,7 +254,7 @@ let corpusDisplay = new CorpusDisplay(document.querySelector('#corpus-display'))
{# let publishingModalIsPublicSwitchElement = document.querySelector('#publishing-modal-is-public-switch'); {# let publishingModalIsPublicSwitchElement = document.querySelector('#publishing-modal-is-public-switch');
publishingModalIsPublicSwitchElement.addEventListener('change', (event) => { publishingModalIsPublicSwitchElement.addEventListener('change', (event) => {
let newIsPublic = publishingModalIsPublicSwitchElement.checked; let newIsPublic = publishingModalIsPublicSwitchElement.checked;
Requests.corpora.entity.isPublic.update({{ corpus.hashid|tojson }}, newIsPublic) requests.corpora.entity.isPublic.update({{ corpus.hashid|tojson }}, newIsPublic)
.catch((response) => { .catch((response) => {
publishingModalIsPublicSwitchElement.checked = !newIsPublic; publishingModalIsPublicSwitchElement.checked = !newIsPublic;
}); });
@ -264,7 +264,7 @@ publishingModalIsPublicSwitchElement.addEventListener('change', (event) => {
// #region Delete // #region Delete
let deleteModalDeleteButtonElement = document.querySelector('#delete-modal-delete-button'); let deleteModalDeleteButtonElement = document.querySelector('#delete-modal-delete-button');
deleteModalDeleteButtonElement.addEventListener('click', (event) => { deleteModalDeleteButtonElement.addEventListener('click', (event) => {
Requests.corpora.entity.delete({{ corpus.hashid|tojson }}) requests.corpora.entity.delete({{ corpus.hashid|tojson }})
.then((response) => { .then((response) => {
window.location.href = {{ url_for('main.dashboard')|tojson }}; window.location.href = {{ url_for('main.dashboard')|tojson }};
}); });
@ -314,7 +314,7 @@ M.Modal.init(
inviteUserModalInviteButtonElement.addEventListener('click', (event) => { inviteUserModalInviteButtonElement.addEventListener('click', (event) => {
let usernames = inviteUserModalSearch.chipsData.map((chipData) => chipData.tag); let usernames = inviteUserModalSearch.chipsData.map((chipData) => chipData.tag);
Requests.corpora.entity.followers.add({{ corpus.hashid|tojson }}, usernames); requests.corpora.entity.followers.add({{ corpus.hashid|tojson }}, usernames);
}); });
// #endregion Invite user // #endregion Invite user
@ -359,7 +359,7 @@ M.Modal.init(
shareLinkModalCreateButtonElement.addEventListener('click', (event) => { shareLinkModalCreateButtonElement.addEventListener('click', (event) => {
let role = shareLinkModalCorpusFollowerRoleSelectElement.value; let role = shareLinkModalCorpusFollowerRoleSelectElement.value;
let expiration = shareLinkModalExpirationDateDatepickerElement.value let expiration = shareLinkModalExpirationDateDatepickerElement.value
Requests.corpora.entity.generateShareLink({{ corpus.hashid|tojson }}, role, expiration) requests.corpora.entity.generateShareLink({{ corpus.hashid|tojson }}, role, expiration)
.then((response) => { .then((response) => {
response.json() response.json()
.then((json) => { .then((json) => {

View File

@ -273,7 +273,7 @@ publicCorpusFollowerList.add(
{% if cfr.has_permission('MANAGE_FILES') %} {% if cfr.has_permission('MANAGE_FILES') %}
let followerBuildRequest = document.querySelector('#follower-build-request'); let followerBuildRequest = document.querySelector('#follower-build-request');
followerBuildRequest.addEventListener('click', () => { followerBuildRequest.addEventListener('click', () => {
Requests.corpora.entity.build({{ corpus.hashid|tojson }}) requests.corpora.entity.build({{ corpus.hashid|tojson }})
.then((response) => { .then((response) => {
window.location.reload(); window.location.reload();
}); });
@ -285,7 +285,7 @@ followerBuildRequest.addEventListener('click', () => {
{% if current_user.is_following_corpus(corpus) %} {% if current_user.is_following_corpus(corpus) %}
let unfollowRequestElement = document.querySelector('.action-button[data-action="unfollow-request"]'); let unfollowRequestElement = document.querySelector('.action-button[data-action="unfollow-request"]');
unfollowRequestElement.addEventListener('click', () => { unfollowRequestElement.addEventListener('click', () => {
Requests.corpora.entity.followers.entity.delete({{ corpus.hashid|tojson }}, {{ current_user.hashid|tojson }}) requests.corpora.entity.followers.entity.delete({{ corpus.hashid|tojson }}, {{ current_user.hashid|tojson }})
.then((response) => { .then((response) => {
window.location.reload(); window.location.reload();
}); });
@ -335,7 +335,7 @@ M.Modal.init(
inviteUserModalInviteButtonElement.addEventListener('click', (event) => { inviteUserModalInviteButtonElement.addEventListener('click', (event) => {
let usernames = inviteUserModalSearch.chipsData.map((chipData) => chipData.tag); let usernames = inviteUserModalSearch.chipsData.map((chipData) => chipData.tag);
Requests.corpora.entity.followers.add({{ corpus.hashid|tojson }}, usernames) requests.corpora.entity.followers.add({{ corpus.hashid|tojson }}, usernames)
.then((response) => { .then((response) => {
window.location.reload(); window.location.reload();
}); });
@ -383,7 +383,7 @@ M.Modal.init(
shareLinkModalCreateButtonElement.addEventListener('click', (event) => { shareLinkModalCreateButtonElement.addEventListener('click', (event) => {
let role = shareLinkModalCorpusFollowerRoleSelectElement.value; let role = shareLinkModalCorpusFollowerRoleSelectElement.value;
let expiration = shareLinkModalExpirationDateDatepickerElement.value let expiration = shareLinkModalExpirationDateDatepickerElement.value
Requests.corpora.entity.generateShareLink({{ corpus.hashid|tojson }}, role, expiration) requests.corpora.entity.generateShareLink({{ corpus.hashid|tojson }}, role, expiration)
.then((response) => { .then((response) => {
response.json() response.json()
.then((json) => { .then((json) => {

View File

@ -154,16 +154,16 @@
let deleteJobRequestElement = document.querySelector('#delete-job-request'); let deleteJobRequestElement = document.querySelector('#delete-job-request');
let restartJobRequestElement = document.querySelector('#restart-job-request'); let restartJobRequestElement = document.querySelector('#restart-job-request');
deleteJobRequestElement.addEventListener('click', (event) => { deleteJobRequestElement.addEventListener('click', (event) => {
Requests.jobs.entity.delete({{ job.hashid|tojson }}); requests.jobs.entity.delete({{ job.hashid|tojson }});
}); });
restartJobRequestElement.addEventListener('click', (event) => { restartJobRequestElement.addEventListener('click', (event) => {
Requests.jobs.entity.restart({{ job.hashid|tojson }}); requests.jobs.entity.restart({{ job.hashid|tojson }});
}); });
if ({{ current_user.is_administrator()|tojson }}) { if ({{ current_user.is_administrator()|tojson }}) {
let jobLogButtonElement = document.querySelector('#job-log-button'); let jobLogButtonElement = document.querySelector('#job-log-button');
jobLogButtonElement.addEventListener('click', (event) => { jobLogButtonElement.addEventListener('click', (event) => {
Requests.jobs.entity.log({{ job.hashid|tojson }}) requests.jobs.entity.log({{ job.hashid|tojson }})
.then( .then(
(response) => { (response) => {
response.json() response.json()

View File

@ -221,7 +221,7 @@ avatarUploadElement.addEventListener('change', () => {
}); });
document.querySelector('#delete-avatar').addEventListener('click', () => { document.querySelector('#delete-avatar').addEventListener('click', () => {
Requests.users.entity.avatar.delete({{ user.hashid|tojson }}) requests.users.entity.avatar.delete({{ user.hashid|tojson }})
.then( .then(
(response) => { (response) => {
avatarPreviewElement.src = {{ url_for('static', filename='images/user_avatar.png')|tojson }}; avatarPreviewElement.src = {{ url_for('static', filename='images/user_avatar.png')|tojson }};
@ -230,7 +230,7 @@ document.querySelector('#delete-avatar').addEventListener('click', () => {
}); #} }); #}
document.querySelector('#delete-user').addEventListener('click', (event) => { document.querySelector('#delete-user').addEventListener('click', (event) => {
Requests.users.entity.delete({{ user.hashid|tojson }}) requests.users.entity.delete({{ user.hashid|tojson }})
.then((response) => {window.location.href = '/';}); .then((response) => {window.location.href = '/';});
}); });
@ -255,7 +255,7 @@ for (let collapsibleElement of document.querySelectorAll('.collapsible.no-autoin
let profilePrivacySettingCheckboxElements = document.querySelectorAll('.profile-privacy-setting-checkbox'); let profilePrivacySettingCheckboxElements = document.querySelectorAll('.profile-privacy-setting-checkbox');
profileIsPublicSwitchElement.addEventListener('change', (event) => { profileIsPublicSwitchElement.addEventListener('change', (event) => {
let newEnabled = profileIsPublicSwitchElement.checked; let newEnabled = profileIsPublicSwitchElement.checked;
Requests.users.entity.settings.profilePrivacy.update({{ user.hashid|tojson }}, 'is-public', newEnabled) requests.users.entity.settings.profilePrivacy.update({{ user.hashid|tojson }}, 'is-public', newEnabled)
.then( .then(
(response) => { (response) => {
for (let profilePrivacySettingCheckboxElement of document.querySelectorAll('.profile-privacy-setting-checkbox')) { for (let profilePrivacySettingCheckboxElement of document.querySelectorAll('.profile-privacy-setting-checkbox')) {
@ -271,7 +271,7 @@ for (let profilePrivacySettingCheckboxElement of profilePrivacySettingCheckboxEl
profilePrivacySettingCheckboxElement.addEventListener('change', (event) => { profilePrivacySettingCheckboxElement.addEventListener('change', (event) => {
let newEnabled = profilePrivacySettingCheckboxElement.checked; let newEnabled = profilePrivacySettingCheckboxElement.checked;
let valueName = profilePrivacySettingCheckboxElement.dataset.profilePrivacySettingName; let valueName = profilePrivacySettingCheckboxElement.dataset.profilePrivacySettingName;
Requests.users.entity.settings.profilePrivacy.update({{ user.hashid|tojson }}, valueName, newEnabled) requests.users.entity.settings.profilePrivacy.update({{ user.hashid|tojson }}, valueName, newEnabled)
.catch((response) => { .catch((response) => {
profilePrivacySettingCheckboxElement.checked = !newEnabled; profilePrivacySettingCheckboxElement.checked = !newEnabled;
}); });