mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2025-01-31 11:59:02 +00:00
128 lines
4.6 KiB
JavaScript
128 lines
4.6 KiB
JavaScript
class RessourceList {
|
|
constructor(idOrElement, options = {}) {
|
|
this.list = new List(idOrElement, {...RessourceList.options, ...options});
|
|
}
|
|
|
|
init(ressources) {
|
|
this.list.clear();
|
|
this.add(Object.values(ressources));
|
|
this.list.sort('id', {order: 'desc'});
|
|
}
|
|
|
|
|
|
update(patch) {
|
|
let item, pathArray;
|
|
|
|
for (let operation of patch) {
|
|
/*
|
|
* '/{ressourceName}/{ressourceId}/{valueName}' -> ['{ressourceId}', {valueName}]
|
|
* Example: '/jobs/1/status' -> ['1', 'status']
|
|
*/
|
|
let [id, valueName] = operation.path.split("/").slice(2);
|
|
switch(operation.op) {
|
|
case 'add':
|
|
this.add(operation.value);
|
|
break;
|
|
case 'remove':
|
|
this.remove(id);
|
|
break;
|
|
case 'replace':
|
|
this.replace(id, valueName, operation.value);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
add(values) {
|
|
/* WORKAROUND: Set a callback function ('() => {return;}') to force List.js
|
|
perform the add method asynchronous.
|
|
* https://listjs.com/api/#add
|
|
*/
|
|
this.list.add(values, () => {return;});
|
|
}
|
|
|
|
remove(id) {
|
|
this.list.remove('id', id);
|
|
}
|
|
|
|
replace(id, valueName, newValue) {
|
|
if (!this.list.valuesNames.includes(valueName)) {return;}
|
|
let item = this.list.get('id', id);
|
|
item.values({[valueName]: newValue});
|
|
}
|
|
}
|
|
|
|
|
|
RessourceList.options = {page: 5, pagination: [{innerWindow: 4, outerWindow: 1}]};
|
|
|
|
|
|
class CorpusList extends RessourceList {
|
|
constructor(idOrElement, options = {}) {
|
|
super(idOrElement, {...CorpusList.options, ...options});
|
|
nopaque.corporaSubscribers.push(this);
|
|
}
|
|
}
|
|
|
|
|
|
CorpusList.options = {
|
|
item: `<tr>
|
|
<td><a class="btn-floating disabled"><i class="material-icons">book</i></a></td>
|
|
<td><b class="title"></b><br><i class="description"></i></td>
|
|
<td><span class="badge new status" data-badge-caption=""></span></td>
|
|
<td class="right-align">
|
|
<a class="btn-floating delete red tooltipped waves-effect waves-light" data-position="top" data-tooltip="Delete"><i class="material-icons">delete</i></a>
|
|
<a class="btn-floating edit tooltipped waves-effect waves-light" data-position="top" data-tooltip="Edit"><i class="material-icons">edit</i></a>
|
|
<a class="analyse btn-floating tooltipped waves-effect waves-light" data-position="top" data-tooltip="Analyse"><i class="material-icons">search</i></a>
|
|
</td>
|
|
</tr>`,
|
|
valueNames: [{data: ['id']}, 'description', 'status', 'title']
|
|
};
|
|
|
|
|
|
class JobList extends RessourceList {
|
|
constructor(idOrElement, options = {}) {
|
|
super(idOrElement, {...JobList.options, ...options});
|
|
nopaque.jobsSubscribers.push(this);
|
|
}
|
|
}
|
|
|
|
|
|
JobList.options = {
|
|
item: `<tr>
|
|
<td><a class="btn-floating disabled"><i class="material-icons service"></i></a></td>
|
|
<td><b class="title"></b><br><i class="description"></i></td>
|
|
<td><span class="badge new status" data-badge-caption=""></span></td>
|
|
<td class="right-align">
|
|
<a class="btn-floating delete red tooltipped waves-effect waves-light" data-position="top" data-tooltip="Delete"><i class="material-icons">delete</i></a>
|
|
<a class="btn-floating tooltipped view waves-effect waves-light" data-position="top" data-tooltip="View"><i class="material-icons">send</i></a>
|
|
</td>
|
|
</tr>`,
|
|
valueNames: [{data: ['id']}, {name: 'service', attr: 'data-service'}, 'description', 'status', 'title']
|
|
};
|
|
|
|
|
|
class QueryResultList extends RessourceList {
|
|
constructor(idOrElement, options = {}) {
|
|
super(idOrElement, {...QueryResultList.options, ...options});
|
|
nopaque.queryResultsSubscribers.push(this);
|
|
}
|
|
}
|
|
|
|
|
|
QueryResultList.options = {
|
|
item: `<tr>
|
|
<td><b class="title"></b><br><i class="description"></i><br></td>
|
|
<td><span class="corpus_title"></span><br><span class="query"></span></td>
|
|
<td class="right-align">
|
|
<a class="btn-floating delete red tooltipped waves-effect waves-light" data-position="top" data-tooltip="Delete"><i class="material-icons">delete</i></a>
|
|
<a class="btn-floating tooltipped view waves-effect waves-light" data-position="top" data-tooltip="View"><i class="material-icons">send</i></a>
|
|
<a class="analyse btn-floating tooltipped waves-effect waves-light" data-position="top" data-tooltip="Analyse"><i class="material-icons">search</i></a>
|
|
</td>
|
|
</tr>`,
|
|
valueNames: [{data: ['id']}, 'corpus_title', 'description', 'query', 'title']
|
|
};
|
|
|
|
export { CorpusList, JobList, QueryResultList };
|