mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-10-31 18:42:45 +00:00 
			
		
		
		
	Merge branch 'query-builder' of gitlab.ub.uni-bielefeld.de:sfb1288inf/nopaque into query-builder
This commit is contained in:
		| @@ -75,7 +75,7 @@ class CorpusAnalysisStaticVisualization { | |||||||
|  |  | ||||||
|   getStopwords() { |   getStopwords() { | ||||||
|     this.data.promises.getStopwords = new Promise((resolve, reject) => { |     this.data.promises.getStopwords = new Promise((resolve, reject) => { | ||||||
|       Requestscorpora.entity.getStopwords() |       Requests.corpora.entity.getStopwords() | ||||||
|         .then((response) => { |         .then((response) => { | ||||||
|           response.json() |           response.json() | ||||||
|             .then((json) => { |             .then((json) => { | ||||||
|   | |||||||
| @@ -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': { | ||||||
|         Requestsusers.entity.delete(itemId); |         Requests.users.entity.delete(itemId); | ||||||
|         if (itemId === currentUserId) {window.location.href = '/';} |         if (itemId === currentUserId) {window.location.href = '/';} | ||||||
|         break; |         break; | ||||||
|       } |       } | ||||||
|   | |||||||
| @@ -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) { | ||||||
|             Requestscorpora.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 { | ||||||
|             Requestscorpora.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) { | ||||||
|               Requestscorpora.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 { | ||||||
|               Requestscorpora.entity.files.ent.delete(this.corpusId, selectedItemId); |               Requests.corpora.entity.files.ent.delete(this.corpusId, selectedItemId); | ||||||
|             } |             } | ||||||
|           }); |           }); | ||||||
|           this.selectedItemIds.clear(); |           this.selectedItemIds.clear(); | ||||||
|   | |||||||
| @@ -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; | ||||||
|         Requestscorpora.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) { | ||||||
|           Requestscorpora.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 { | ||||||
|           Requestscorpora.entity.followers.entity.delete(this.corpusId, followerId); |           Requests.corpora.entity.followers.entity.delete(this.corpusId, followerId); | ||||||
|         } |         } | ||||||
|         break; |         break; | ||||||
|       } |       } | ||||||
|   | |||||||
| @@ -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']) { | ||||||
|             Requestscorpora.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 { | ||||||
|             Requestscorpora.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']) { | ||||||
|               Requestscorpora.entity.delete(selectedItemId); |               Requests.corpora.entity.delete(selectedItemId); | ||||||
|             } else { |             } else { | ||||||
|               Requestscorpora.entity.followers.entity.delete(selectedItemId, currentUserId); |               Requests.corpora.entity.followers.entity.delete(selectedItemId, currentUserId); | ||||||
|               setTimeout(() => { |               setTimeout(() => { | ||||||
|                 window.location.reload(); |                 window.location.reload(); | ||||||
|               }, 1000); |               }, 1000); | ||||||
|   | |||||||
| @@ -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) => { | ||||||
|           Requestsjobs.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 => { | ||||||
|             Requestsjobs.entity.delete(selectedItemId); |             Requests.jobs.entity.delete(selectedItemId); | ||||||
|           }); |           }); | ||||||
|           this.selectedItemIds.clear(); |           this.selectedItemIds.clear(); | ||||||
|           this.renderingItemSelection(); |           this.renderingItemSelection(); | ||||||
|   | |||||||
| @@ -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; | ||||||
|         Requestscontributions.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) => { | ||||||
|           Requestscontributions.spacy_nlp_pipeline_models.entity.delete(itemId); |           Requests.contributions.spacy_nlp_pipeline_models.entity.delete(itemId); | ||||||
|         }); |         }); | ||||||
|         modal.open(); |         modal.open(); | ||||||
|         break; |         break; | ||||||
|   | |||||||
| @@ -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; | ||||||
|         Requestscontributions.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) => { | ||||||
|           Requestscontributions.tesseract_ocr_pipeline_models.entity.delete(itemId); |           Requests.contributions.tesseract_ocr_pipeline_models.entity.delete(itemId); | ||||||
|         }); |         }); | ||||||
|         modal.open(); |         modal.open(); | ||||||
|         break; |         break; | ||||||
|   | |||||||
| @@ -1,10 +1,5 @@ | |||||||
| Forms.CreateContributionForm = class CreateContributionForm extends Forms.BaseForm { | Forms.CreateContributionForm = class CreateContributionForm extends Forms.BaseForm { | ||||||
|   static autoInit() { |   static htmlClass = 'create-contribution-form'; | ||||||
|     let createContributionFormElements = document.querySelectorAll('.create-contribution-form'); |  | ||||||
|     for (let createContributionFormElement of createContributionFormElements) { |  | ||||||
|       new Forms.CreateContributionForm(createContributionFormElement); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   constructor(formElement) { |   constructor(formElement) { | ||||||
|     super(formElement); |     super(formElement); | ||||||
|   | |||||||
| @@ -1,10 +1,5 @@ | |||||||
| Forms.CreateCorpusFileForm = class CreateCorpusFileForm extends Forms.BaseForm { | Forms.CreateCorpusFileForm = class CreateCorpusFileForm extends Forms.BaseForm { | ||||||
|   static autoInit() { |   static htmlClass = 'create-corpus-file-form'; | ||||||
|     let createCorpusFileFormElements = document.querySelectorAll('.create-corpus-file-form'); |  | ||||||
|     for (let createCorpusFileFormElement of createCorpusFileFormElements) { |  | ||||||
|       new Forms.CreateCorpusFileForm(createCorpusFileFormElement); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   constructor(formElement) { |   constructor(formElement) { | ||||||
|     super(formElement); |     super(formElement); | ||||||
|   | |||||||
| @@ -1,10 +1,5 @@ | |||||||
| Forms.CreateJobForm = class CreateJobForm extends Forms.BaseForm { | Forms.CreateJobForm = class CreateJobForm extends Forms.BaseForm { | ||||||
|   static autoInit() { |   static htmlClass = 'create-job-form'; | ||||||
|     let createJobFormElements = document.querySelectorAll('.create-job-form'); |  | ||||||
|     for (let createJobFormElement of createJobFormElements) { |  | ||||||
|       new Forms.CreateJobForm(createJobFormElement); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   constructor(formElement) { |   constructor(formElement) { | ||||||
|     super(formElement); |     super(formElement); | ||||||
|   | |||||||
| @@ -3,15 +3,22 @@ var Forms = {}; | |||||||
| Forms.autoInit = () => { | Forms.autoInit = () => { | ||||||
|   for (let propertyName in Forms) { |   for (let propertyName in Forms) { | ||||||
|     let property = Forms[propertyName]; |     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) { |     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 { | Forms.BaseForm = class BaseForm { | ||||||
|   static autoInit() {throw 'Not implemented';} |   static htmlClass; | ||||||
|  |  | ||||||
|   constructor(formElement) { |   constructor(formElement) { | ||||||
|     this.formElement = formElement; |     this.formElement = formElement; | ||||||
|   | |||||||
| @@ -1,11 +1,13 @@ | |||||||
| ResourceDisplays.CorpusDisplay = class CorpusDisplay extends ResourceDisplays.BaseDisplay { | ResourceDisplays.CorpusDisplay = class CorpusDisplay extends ResourceDisplays.BaseDisplay { | ||||||
|  |   static htmlClass = 'corpus-display'; | ||||||
|  |  | ||||||
|   constructor(displayElement) { |   constructor(displayElement) { | ||||||
|     super(displayElement); |     super(displayElement); | ||||||
|     this.corpusId = displayElement.dataset.corpusId; |     this.corpusId = displayElement.dataset.corpusId; | ||||||
|     this.displayElement |     this.displayElement | ||||||
|       .querySelector('.action-button[data-action="build-request"]') |       .querySelector('.action-button[data-action="build-request"]') | ||||||
|       .addEventListener('click', (event) => { |       .addEventListener('click', (event) => { | ||||||
|         Requestscorpora.entity.build(this.corpusId); |         Requests.corpora.entity.build(this.corpusId); | ||||||
|       }); |       }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,25 @@ | |||||||
| var ResourceDisplays = {}; | var ResourceDisplays = {}; | ||||||
|  |  | ||||||
|  | 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) { | ||||||
|  |       // 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)`); | ||||||
|  |       // Create an instance of this class for each display element. | ||||||
|  |       for (let displayElement of displayElements) {new property(displayElement);} | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| ResourceDisplays.BaseDisplay = class BaseDisplay { | ResourceDisplays.BaseDisplay = class BaseDisplay { | ||||||
|  |   static htmlClass; | ||||||
|  |  | ||||||
|   constructor(displayElement) { |   constructor(displayElement) { | ||||||
|     this.displayElement = displayElement; |     this.displayElement = displayElement; | ||||||
|     this.userId = this.displayElement.dataset.userId; |     this.userId = this.displayElement.dataset.userId; | ||||||
|   | |||||||
| @@ -1,4 +1,6 @@ | |||||||
| ResourceDisplays.JobDisplay = class JobDisplay extends ResourceDisplays.BaseDisplay { | ResourceDisplays.JobDisplay = class JobDisplay extends ResourceDisplays.BaseDisplay { | ||||||
|  |   static htmlClass = 'job-display'; | ||||||
|  |  | ||||||
|   constructor(displayElement) { |   constructor(displayElement) { | ||||||
|     super(displayElement); |     super(displayElement); | ||||||
|     this.jobId = this.displayElement.dataset.jobId; |     this.jobId = this.displayElement.dataset.jobId; | ||||||
|   | |||||||
| @@ -140,6 +140,7 @@ | |||||||
|     document.querySelectorAll('#nav-more-dropdown-trigger'), |     document.querySelectorAll('#nav-more-dropdown-trigger'), | ||||||
|     {alignment: 'right', constrainWidth: false, coverTrigger: false} |     {alignment: 'right', constrainWidth: false, coverTrigger: false} | ||||||
|   ); |   ); | ||||||
|  |   ResourceDisplays.autoInit(); | ||||||
|   ResourceList.autoInit(); |   ResourceList.autoInit(); | ||||||
|   Forms.autoInit(); |   Forms.autoInit(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| {% block page_content %} | {% block page_content %} | ||||||
| <div class="container"> | <div class="container"> | ||||||
|   <div class="row" data-corpus-id="{{ corpus.hashid }}" data-user-id="{{ corpus.user.hashid }}" id="corpus-display"> |   <div class="row corpus-display" data-corpus-id="{{ corpus.hashid }}" data-user-id="{{ corpus.user.hashid }}"> | ||||||
|     <div class="col s12"> |     <div class="col s12"> | ||||||
|       <h1>{{ corpus.title }}</h1> |       <h1>{{ corpus.title }}</h1> | ||||||
|     </div> |     </div> | ||||||
| @@ -237,8 +237,6 @@ | |||||||
| {% block scripts %} | {% block scripts %} | ||||||
| {{ super() }} | {{ super() }} | ||||||
| <script> | <script> | ||||||
| let corpusDisplay = new ResourceDisplays.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', () => { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| {% block page_content %} | {% block page_content %} | ||||||
| <div class="container"> | <div class="container"> | ||||||
|   <div class="row"> |   <div class="row"> | ||||||
|     <div class="col s12" data-job-id="{{ job.hashid }}" data-user-id="{{ job.user.hashid }}" id="job-display"> |     <div class="col s12 job-display" data-job-id="{{ job.hashid }}" data-user-id="{{ job.user.hashid }}"> | ||||||
|       <div class="row"> |       <div class="row"> | ||||||
|         <div class="col s8 m9 l10"> |         <div class="col s8 m9 l10"> | ||||||
|           <h1 id="title"><i style="font-size: inherit;" class="nopaque-icons service-icons" data-service="{{ job.service }}"></i> <span class="job-title"></span></h1> |           <h1 id="title"><i style="font-size: inherit;" class="nopaque-icons service-icons" data-service="{{ job.service }}"></i> <span class="job-title"></span></h1> | ||||||
| @@ -150,7 +150,6 @@ | |||||||
| {% block scripts %} | {% block scripts %} | ||||||
| {{ super() }} | {{ super() }} | ||||||
| <script> | <script> | ||||||
|   let jobDisplay = new ResourceDisplays.JobDisplay(document.querySelector('#job-display')); |  | ||||||
|   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) => { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user