mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-04 04:12:45 +00:00 
			
		
		
		
	Updated URL Logic for admin package
This commit is contained in:
		@@ -1,114 +1,6 @@
 | 
			
		||||
{% extends "limited_width.html.j2" %}
 | 
			
		||||
 | 
			
		||||
{% block page_content %}
 | 
			
		||||
<script>
 | 
			
		||||
  {% if job.creator == current_user %}
 | 
			
		||||
  var foreignJobFlag = false;
 | 
			
		||||
  {% else %}
 | 
			
		||||
  var foreignJobFlag = true;
 | 
			
		||||
  socket.emit('subscribe_foreign_user_ressources', {{ job.user_id }});
 | 
			
		||||
  {% endif %}
 | 
			
		||||
 | 
			
		||||
  class InformationUpdater {
 | 
			
		||||
    constructor(jobId) {
 | 
			
		||||
      this.jobId = jobId;
 | 
			
		||||
      if (foreignJobFlag) {
 | 
			
		||||
        foreignJobsSubscribers.push(this);
 | 
			
		||||
      } else {
 | 
			
		||||
        jobsSubscribers.push(this);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _init() {
 | 
			
		||||
      if (foreignJobFlag) {
 | 
			
		||||
        this.job = foreignJobs[this.jobId];
 | 
			
		||||
      } else {
 | 
			
		||||
        this.job = jobs[this.jobId];
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // End date
 | 
			
		||||
      this.setEndDate(this.job.end_date);
 | 
			
		||||
      // Status
 | 
			
		||||
      this.setStatus(this.job.status);
 | 
			
		||||
      // End date
 | 
			
		||||
      if (this.job.end_date) {this.setEndDate(this.job.end_date);}
 | 
			
		||||
      // Input results
 | 
			
		||||
      for (let input of this.job.inputs) {
 | 
			
		||||
        for (let result of input.results) {
 | 
			
		||||
          this.setResult(result);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _update(patch) {
 | 
			
		||||
      var pathArray;
 | 
			
		||||
 | 
			
		||||
      for (let operation of patch) {
 | 
			
		||||
        /* "/jobId/valueName" -> ["jobId", "valueName"] */
 | 
			
		||||
        pathArray = operation.path.split("/").slice(1);
 | 
			
		||||
        if (pathArray[0] != this.jobId) {continue;}
 | 
			
		||||
        switch(operation.op) {
 | 
			
		||||
          case "add":
 | 
			
		||||
            if (pathArray[1] === "inputs" && pathArray[3] === "results") {
 | 
			
		||||
              this.setResult(operation.value);
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
          case "delete":
 | 
			
		||||
            location.reload();
 | 
			
		||||
            break;
 | 
			
		||||
          case "replace":
 | 
			
		||||
            if (pathArray[1] === "end_date") {
 | 
			
		||||
              this.setEndDate(operation.value);
 | 
			
		||||
            } else if (pathArray[1] === "status") {
 | 
			
		||||
              this.setStatus(operation.value);
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
          default:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setEndDate(timestamp) {
 | 
			
		||||
      var end_date;
 | 
			
		||||
      if (timestamp === null) {
 | 
			
		||||
        end_date = "N.a.";
 | 
			
		||||
      } else {
 | 
			
		||||
        end_date = new Date(timestamp * 1000).toLocaleString("en-US");
 | 
			
		||||
      }
 | 
			
		||||
      document.getElementById("end-date").value = end_date;
 | 
			
		||||
      M.updateTextFields();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setResult(result) {
 | 
			
		||||
      var resultsElement, resultDownloadButtonElement,
 | 
			
		||||
          resultDownloadButtonIconElement;
 | 
			
		||||
      resultsElement = document.getElementById(`input-${result.job_input_id}-results`);
 | 
			
		||||
      resultDownloadButtonElement = document.createElement("a");
 | 
			
		||||
      resultDownloadButtonElement.classList.add("waves-effect", "waves-light", "btn-small");
 | 
			
		||||
      resultDownloadButtonElement.href = `/jobs/${this.jobId}/results/${result.id}/download`;
 | 
			
		||||
      resultDownloadButtonElement.innerText = result.filename.split(".").reverse()[0];
 | 
			
		||||
      resultDownloadButtonElement.setAttribute("download", "");
 | 
			
		||||
      resultDownloadButtonIconElement = document.createElement("i");
 | 
			
		||||
      resultDownloadButtonIconElement.classList.add("material-icons", "left");
 | 
			
		||||
      resultDownloadButtonIconElement.innerText = "file_download";
 | 
			
		||||
      resultDownloadButtonElement.prepend(resultDownloadButtonIconElement);
 | 
			
		||||
      resultsElement.append(resultDownloadButtonElement);
 | 
			
		||||
      resultsElement.append(" ");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setStatus(status) {
 | 
			
		||||
      var statusElement;
 | 
			
		||||
      statusElement = document.getElementById("status");
 | 
			
		||||
      statusElement.classList.remove(...Object.values(JobList.STATUS_COLORS));
 | 
			
		||||
      statusElement.classList.add(JobList.STATUS_COLORS[status] || JobList.STATUS_COLORS['default']);
 | 
			
		||||
      statusElement.innerText = status;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var informationUpdater = new InformationUpdater({{ job.id }});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<div class="col s12 m4">
 | 
			
		||||
  <h3 id="title">{{ job.title }}</h3>
 | 
			
		||||
  <p id="description">{{ job.description }}</p>
 | 
			
		||||
@@ -210,6 +102,7 @@
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Modals -->
 | 
			
		||||
<div id="delete-job-modal" class="modal">
 | 
			
		||||
  <div class="modal-content">
 | 
			
		||||
@@ -221,4 +114,108 @@
 | 
			
		||||
    <a class="modal-close waves-effect waves-green btn red" href="{{ url_for('jobs.delete_job', job_id=job.id) }}">Confirm<i class="material-icons right">send</i></a>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
  class InformationUpdater {
 | 
			
		||||
    constructor(jobId, foreignJobFlag) {
 | 
			
		||||
      this.jobId = jobId;
 | 
			
		||||
      this.foreignJobFlag = foreignJobFlag;
 | 
			
		||||
      if (this.foreignJobFlag) {
 | 
			
		||||
        foreignJobsSubscribers.push(this);
 | 
			
		||||
      } else {
 | 
			
		||||
        jobsSubscribers.push(this);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _init() {
 | 
			
		||||
      var job = this.foreignJobFlag ? foreignJobs[this.jobId] : jobs[this.jobId];
 | 
			
		||||
 | 
			
		||||
      // End date
 | 
			
		||||
      this.setEndDate(job.end_date);
 | 
			
		||||
      // Status
 | 
			
		||||
      this.setStatus(job.status);
 | 
			
		||||
      // End date
 | 
			
		||||
      if (job.end_date) {this.setEndDate(job.end_date);}
 | 
			
		||||
      // Input results
 | 
			
		||||
      for (let input of job.inputs) {
 | 
			
		||||
        for (let result of input.results) {
 | 
			
		||||
          this.setResult(result);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _update(patch) {
 | 
			
		||||
      var pathArray;
 | 
			
		||||
 | 
			
		||||
      for (let operation of patch) {
 | 
			
		||||
        /* "/jobId/valueName" -> ["jobId", "valueName"] */
 | 
			
		||||
        pathArray = operation.path.split("/").slice(1);
 | 
			
		||||
        if (pathArray[0] != this.jobId) {continue;}
 | 
			
		||||
        switch(operation.op) {
 | 
			
		||||
          case "add":
 | 
			
		||||
            if (pathArray[1] === "inputs" && pathArray[3] === "results") {
 | 
			
		||||
              this.setResult(operation.value);
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
          case "delete":
 | 
			
		||||
            location.reload();
 | 
			
		||||
            break;
 | 
			
		||||
          case "replace":
 | 
			
		||||
            if (pathArray[1] === "end_date") {
 | 
			
		||||
              this.setEndDate(operation.value);
 | 
			
		||||
            } else if (pathArray[1] === "status") {
 | 
			
		||||
              this.setStatus(operation.value);
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
          default:
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setEndDate(timestamp) {
 | 
			
		||||
      var end_date;
 | 
			
		||||
      if (timestamp === null) {
 | 
			
		||||
        end_date = "N.a.";
 | 
			
		||||
      } else {
 | 
			
		||||
        end_date = new Date(timestamp * 1000).toLocaleString("en-US");
 | 
			
		||||
      }
 | 
			
		||||
      document.getElementById("end-date").value = end_date;
 | 
			
		||||
      M.updateTextFields();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setResult(result) {
 | 
			
		||||
      var resultsElement, resultDownloadButtonElement,
 | 
			
		||||
          resultDownloadButtonIconElement;
 | 
			
		||||
      resultsElement = document.getElementById(`input-${result.job_input_id}-results`);
 | 
			
		||||
      resultDownloadButtonElement = document.createElement("a");
 | 
			
		||||
      resultDownloadButtonElement.classList.add("waves-effect", "waves-light", "btn-small");
 | 
			
		||||
      resultDownloadButtonElement.href = `/jobs/${this.jobId}/results/${result.id}/download`;
 | 
			
		||||
      resultDownloadButtonElement.innerText = result.filename.split(".").reverse()[0];
 | 
			
		||||
      resultDownloadButtonElement.setAttribute("download", "");
 | 
			
		||||
      resultDownloadButtonIconElement = document.createElement("i");
 | 
			
		||||
      resultDownloadButtonIconElement.classList.add("material-icons", "left");
 | 
			
		||||
      resultDownloadButtonIconElement.innerText = "file_download";
 | 
			
		||||
      resultDownloadButtonElement.prepend(resultDownloadButtonIconElement);
 | 
			
		||||
      resultsElement.append(resultDownloadButtonElement);
 | 
			
		||||
      resultsElement.append(" ");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setStatus(status) {
 | 
			
		||||
      var statusElement;
 | 
			
		||||
      statusElement = document.getElementById("status");
 | 
			
		||||
      statusElement.classList.remove(...Object.values(JobList.STATUS_COLORS));
 | 
			
		||||
      statusElement.classList.add(JobList.STATUS_COLORS[status] || JobList.STATUS_COLORS['default']);
 | 
			
		||||
      statusElement.innerText = status;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  {% if job.creator == current_user %}
 | 
			
		||||
  var informationUpdater = new InformationUpdater({{ job.id }}, false);
 | 
			
		||||
  {% else %}
 | 
			
		||||
  var informationUpdater = new InformationUpdater({{ job.id }}, true);
 | 
			
		||||
  socket.emit('subscribe_foreign_user_ressources', {{ job.user_id }});
 | 
			
		||||
  {% endif %}
 | 
			
		||||
</script>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user