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 @@