From 019212f9997951c2e3127b7c55bfde3d2d48463f Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Tue, 17 Sep 2019 11:37:40 -0400 Subject: [PATCH] add some javascript for async file listing --- video_metadata/static/file_listing.js | 58 +++++++++++++++++++ video_metadata/templates/base.html | 1 + .../file_listing/folder_contents.html | 40 ++++++++----- video_metadata/views/file_listing.py | 13 +++-- 4 files changed, 94 insertions(+), 18 deletions(-) create mode 100644 video_metadata/static/file_listing.js diff --git a/video_metadata/static/file_listing.js b/video_metadata/static/file_listing.js new file mode 100644 index 0000000..598a235 --- /dev/null +++ b/video_metadata/static/file_listing.js @@ -0,0 +1,58 @@ +function logError(s) { + console.log(s); + let error_box = document.querySelector('#js_errors'); + let p = document.createElement('p'); + p.appendChild(document.createTextNode(s)); + error_box.appendChild(p); + error_box.style.display = 'block'; +} + +function fetchJSON(url, responseFunc, event) { + fetch(url) + .then(function(response) { + console.log('Response.url: ', response.url) + if (!response.ok) + throw Error(response.statusText); + + return response.json(); + }) + .then(function(json) { + responseFunc(json, event); + }) + .catch(function(error) { + logError('fetch error: ' + error); + return null; + }); +} + +function parseResponse(json, event) { + if (json.errors.length > 0) { + for (let err of json.errors) + logError(err); + } else { + for (let path of json.paths) { + console.log(event); + } + } +} + +window.onload = function() { + document.querySelector('#noscript').style.display = 'none'; + let error_box = document.querySelector('#js_errors'); + error_box.style.display = 'none'; + + if (!('fetch' in window)) { + logError('Unsupported Browser, No fetch API'); + return; + } + + // replace top level links with event listeners that fetch json directory listings + for (let link of document.querySelectorAll('#videolist > li > a')) { + let href = link.getAttribute('href') + + link.addEventListener('click', function(e) { + e.preventDefault(); + fetchJSON(window.location + href, parseResponse, e); + }); + } +} diff --git a/video_metadata/templates/base.html b/video_metadata/templates/base.html index dce219e..1a9ecb3 100644 --- a/video_metadata/templates/base.html +++ b/video_metadata/templates/base.html @@ -3,6 +3,7 @@ {% block title %}{% endblock %} - pvdb + {% block extra_js %}{% endblock %}