mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-04 04:12:45 +00:00 
			
		
		
		
	Remove a lot of code redundancy
This commit is contained in:
		@@ -1,106 +1,25 @@
 | 
			
		||||
class CorpusList extends List {
 | 
			
		||||
  constructor(idOrElement, subscriberList, options={}) {
 | 
			
		||||
    super(idOrElement, {...CorpusList.DEFAULT_OPTIONS, ...options});
 | 
			
		||||
class RessourceList extends List {
 | 
			
		||||
  constructor(idOrElement, subscriberList, dataMapper=null, options={}) {
 | 
			
		||||
    super(idOrElement, {...RessourceList.options, ...options});
 | 
			
		||||
    this.dataMapper = dataMapper;
 | 
			
		||||
    subscriberList.push(this);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  _init(corpora) {
 | 
			
		||||
    this.addCorpora(Object.values(corpora));
 | 
			
		||||
  _init(ressources) {
 | 
			
		||||
    this.addRessources(Object.values(ressources));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  _update(patch) {
 | 
			
		||||
    let item, corpusStatusElement, operation, pathArray;
 | 
			
		||||
    let item, pathArray;
 | 
			
		||||
 | 
			
		||||
    for (operation of patch) {
 | 
			
		||||
      /* "/corpusId/valueName" -> ["corpusId", "valueName"] */
 | 
			
		||||
    for (let operation of patch) {
 | 
			
		||||
      /* "/ressourceId/valueName" -> ["ressourceId", "valueName"] */
 | 
			
		||||
      pathArray = operation.path.split("/").slice(1);
 | 
			
		||||
      switch(operation.op) {
 | 
			
		||||
        case "add":
 | 
			
		||||
          this.addCorpora([operation.value]);
 | 
			
		||||
          break;
 | 
			
		||||
        case "remove":
 | 
			
		||||
          this.remove("id", pathArray[0]);
 | 
			
		||||
          break;
 | 
			
		||||
        case "replace":
 | 
			
		||||
          item = this.get("id", pathArray[0])[0];
 | 
			
		||||
          switch(pathArray[1]) {
 | 
			
		||||
            case "status":
 | 
			
		||||
              item.values({status: operation.value, _status: operation.value});
 | 
			
		||||
              break;
 | 
			
		||||
            default:
 | 
			
		||||
              break;
 | 
			
		||||
          }
 | 
			
		||||
        default:
 | 
			
		||||
          break;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  addCorpora(corpora) {
 | 
			
		||||
    let data = [];
 | 
			
		||||
    for (let corpus of corpora) {
 | 
			
		||||
      data.push({description: corpus.description,
 | 
			
		||||
                 id: corpus.id,
 | 
			
		||||
                 link: `/corpora/${corpus.id}`,
 | 
			
		||||
                 status: corpus.status,
 | 
			
		||||
                 title: corpus.title});
 | 
			
		||||
    }
 | 
			
		||||
    this.add(data);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
CorpusList.DEFAULT_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-small waves-effect waves-light link">View<i class="material-icons right">send</i>
 | 
			
		||||
           </td>
 | 
			
		||||
         </tr>`,
 | 
			
		||||
  page: 4,
 | 
			
		||||
  pagination: {innerWindow: 8, outerWindow: 1},
 | 
			
		||||
  valueNames: ["description",
 | 
			
		||||
               "title",
 | 
			
		||||
               {data: ["id"]},
 | 
			
		||||
               {name: "link", attr: "href"},
 | 
			
		||||
               {name: "status", attr: "data-status"}]};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class JobList extends List {
 | 
			
		||||
  constructor(idOrElement, subscriberList, options={}) {
 | 
			
		||||
    super(idOrElement, {...JobList.DEFAULT_OPTIONS, ...options});
 | 
			
		||||
    subscriberList.push(this);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  _init(jobs) {
 | 
			
		||||
    this.addJobs(Object.values(jobs));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  _update(patch) {
 | 
			
		||||
    let item, jobStatusElement, operation, pathArray;
 | 
			
		||||
 | 
			
		||||
    for (operation of patch) {
 | 
			
		||||
      /* "/jobId/valueName" -> ["jobId", "valueName"] */
 | 
			
		||||
      pathArray = operation.path.split("/").slice(1);
 | 
			
		||||
      switch(operation.op) {
 | 
			
		||||
        case "add":
 | 
			
		||||
          if (pathArray.includes("results")) {break;}
 | 
			
		||||
          this.addJobs([operation.value]);
 | 
			
		||||
          this.addRessources([operation.value]);
 | 
			
		||||
          break;
 | 
			
		||||
        case "remove":
 | 
			
		||||
          this.remove("id", pathArray[0]);
 | 
			
		||||
@@ -121,20 +40,29 @@ class JobList extends List {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  addJobs(jobs) {
 | 
			
		||||
    let data = [];
 | 
			
		||||
    for (let job of jobs) {
 | 
			
		||||
      data.push({description: job.description,
 | 
			
		||||
                 id: job.id,
 | 
			
		||||
                 link: `/jobs/${job.id}`,
 | 
			
		||||
                 service: job.service,
 | 
			
		||||
                 status: job.status,
 | 
			
		||||
                 title: job.title});
 | 
			
		||||
  addRessources(ressources) {
 | 
			
		||||
    if (this.dataMapper) {
 | 
			
		||||
      this.add(ressources.map(x => this.dataMapper(x)));
 | 
			
		||||
    } else {
 | 
			
		||||
      this.add(ressources);
 | 
			
		||||
    }
 | 
			
		||||
    this.add(data);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
JobList.DEFAULT_OPTIONS = {
 | 
			
		||||
RessourceList.dataMapper = {
 | 
			
		||||
  corpus: corpus => ({description: corpus.description,
 | 
			
		||||
                     id: corpus.id,
 | 
			
		||||
                     link: `/corpora/${corpus.id}`,
 | 
			
		||||
                     service: "corpus",
 | 
			
		||||
                     status: corpus.status,
 | 
			
		||||
                     title: corpus.title}),
 | 
			
		||||
  job: job => ({description: job.description,
 | 
			
		||||
               id: job.id,
 | 
			
		||||
               link: `/jobs/${job.id}`,
 | 
			
		||||
               service: job.service,
 | 
			
		||||
               status: job.status,
 | 
			
		||||
               title: job.title})
 | 
			
		||||
};
 | 
			
		||||
RessourceList.options = {
 | 
			
		||||
  item: `<tr>
 | 
			
		||||
           <td>
 | 
			
		||||
             <a class="btn-floating disabled">
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user