From 74c863e0f7e10dd8303bf8673b26b05f38b59011 Mon Sep 17 00:00:00 2001
From: Patrick Jentsch
Date: Mon, 19 Aug 2019 17:09:01 +0200
Subject: [PATCH] Only handle difference of changes to the job list.
---
app/static/js/jobs.js | 10 +++-----
app/static/js/polls.js | 9 ++++---
app/templates/main/dashboard.html.j2 | 38 +++++++++++++++++++++++++---
3 files changed, 42 insertions(+), 15 deletions(-)
diff --git a/app/static/js/jobs.js b/app/static/js/jobs.js
index 97fd1afa..fbdb993e 100644
--- a/app/static/js/jobs.js
+++ b/app/static/js/jobs.js
@@ -14,24 +14,20 @@ const STATUS_COLORS = {"pending": "amber",
function createJobElement(job) {
jobElement = document.createElement("a");
jobElement.classList.add("avatar", "collection-item");
- jobElement.dataset.key = "id";
- jobElement.dataset.value = job.id;
+ jobElement.dataset.id = job.id;
jobElement.href = `/jobs/${job.id}`;
jobDescriptionElement = document.createElement("p");
- jobDescriptionElement.dataset.key = "description";
+ jobDescriptionElement.classList.add("description");
jobDescriptionElement.innerText = job.description;
jobServiceElement = document.createElement("i");
- jobServiceElement.classList.add("circle", "material-icons", SERVICE_COLORS[job.service]);
- jobServiceElement.dataset.key = "service";
+ jobServiceElement.classList.add("circle", "material-icons", "service-icon", SERVICE_COLORS[job.service]);
jobServiceElement.innerText = SERVICE_ICONS[job.service];
jobStatusElement = document.createElement("span");
jobStatusElement.classList.add("badge", "new", "status", STATUS_COLORS[job.status]);
jobStatusElement.dataset.badgeCaption = "";
- jobStatusElement.dataset.key = "status";
jobStatusElement.innerText = job.status;
jobTitleElement = document.createElement("span");
jobTitleElement.classList.add("title");
- jobTitleElement.dataset.key = "title";
jobTitleElement.innerText = job.title;
jobElement.appendChild(jobServiceElement);
diff --git a/app/static/js/polls.js b/app/static/js/polls.js
index c8e8ce34..a4ae2c00 100644
--- a/app/static/js/polls.js
+++ b/app/static/js/polls.js
@@ -39,11 +39,12 @@ function getJobs() {
.then(function(response) {
return response.json();
})
- .then(function(data) {
- if (JSON.stringify(jobs) != JSON.stringify(data)) {
- jobs = data;
+ .then(function(json) {
+ var delta = jsondiffpatch.diff(jobs, json);
+ if (delta) {
+ jobs = json;
for (subscriber of subscribers.jobs) {
- subscriber();
+ subscriber(delta);
}
}
})
diff --git a/app/templates/main/dashboard.html.j2 b/app/templates/main/dashboard.html.j2
index 94c97662..d77865ff 100644
--- a/app/templates/main/dashboard.html.j2
+++ b/app/templates/main/dashboard.html.j2
@@ -76,14 +76,44 @@