class RessourceList { /* A wrapper class for the list.js list. * This class is not meant to be used directly, instead it should be used as * a base class for concrete ressource list implementations. */ static autoInit() { CorpusList.autoInit(); CorpusFileList.autoInit(); JobList.autoInit(); JobInputList.autoInit(); JobResultList.autoInit(); PublicUserList.autoInit(); SpaCyNLPPipelineModelList.autoInit(); TesseractOCRPipelineModelList.autoInit(); UserList.autoInit(); } static options = {page: 5, pagination: {innerWindow: 2, outerWindow: 2}}; constructor(listElement, options = {}) { if (!(listElement.hasAttribute('id'))) { let i; for (i = 0; true; i++) { if (document.querySelector(`#ressource-list-${i}`)) {continue;} listElement.id = `ressource-list-${i}`; break; } } options = { ...RessourceList.options, ...options } if ('ressourceMapper' in options && typeof options.ressourceMapper === 'function') { this.ressourceMapper = options.ressourceMapper; delete options.ressourceMapper; } if ('initialHtmlGenerator' in options && typeof options.initialHtmlGenerator === 'function') { this.initialHtmlGenerator = options.initialHtmlGenerator; listElement.innerHTML = this.initialHtmlGenerator(listElement.id); delete options.initialHtmlGenerator; } if ('sortArgs' in options) { this.sortArgs = options.sortArgs; delete options.sortArgs; } this.listjs = new List(listElement, {...RessourceList.options, ...options}); this.listjs.list.innerHTML = `
 
Waiting for data...

This list is not initialized yet.

`.trim(); this.userId = this.listjs.listContainer.dataset.userId; this.listjs.list.addEventListener('click', (event) => {this.onClick(event)}); this.isInitialized = false; if (this.userId) { app.subscribeUser(this.userId) .then((response) => { app.socket.on('PATCH', (patch) => { if (this.isInitialized) {this.onPatch(patch);} }); }); app.getUser(this.userId) .then((user) => { this.init(user); this.isInitialized = true; }); } } _init(ressources) { this.listjs.clear(); this.add(Object.values(ressources)); this.listjs.list.insertAdjacentHTML( 'afterbegin', ` file_downloadNothing here...

No ressource available.

`.trim() ); } init(user) {throw 'Not implemented';} onClick(event) {throw 'Not implemented';} onPatch(patch) {throw 'Not implemented';} add(ressources) { let values = Array.isArray(ressources) ? ressources : [ressources]; if ('ressourceMapper' in this) { values = values.map((value) => {return this.ressourceMapper(value);}); } this.listjs.add(values, () => { if ('sortArgs' in this) { this.listjs.sort(...this.sortArgs); } }); } remove(id) { this.listjs.remove('id', id); } replace(id, valueName, newValue) { this.listjs.get('id', id)[0].values({[valueName]: newValue}); } }