summaryrefslogtreecommitdiff
path: root/slideshow.js
diff options
context:
space:
mode:
authorpdp8 <pdp8@pdp8.info>2022-08-24 16:54:43 +0200
committerpdp8 <pdp8@pdp8.info>2022-08-24 16:54:43 +0200
commit084bc97124f0bbab5de4f1e32ed30b148f39f4ae (patch)
treee8e89b961f65fb1c68f66fceb51bf297f17a95b4 /slideshow.js
initial commit
Diffstat (limited to 'slideshow.js')
-rw-r--r--slideshow.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/slideshow.js b/slideshow.js
new file mode 100644
index 0000000..4ed2ef8
--- /dev/null
+++ b/slideshow.js
@@ -0,0 +1,80 @@
+selection = []
+visited = []
+current = 0
+playing = 1
+
+document.addEventListener('keyup', function(event) {
+ if(event.keyCode == 37) { prev() } // left
+ else if(event.keyCode == 39) { next() } // right
+ else if(event.keyCode == 32) {
+ toggle_play()
+ } // space
+ else if(event.keyCode == 13) { new_selection() } // enter
+});
+
+function new_selection() {
+ images = Object.keys(distances)
+ start = images[Math.floor(Math.random()*images.length)]
+ sortable = []
+ for (file in distances[start]) {
+ if (visited.indexOf(file) == -1) { // not in visited
+ sortable.push([file,distances[start][file]]) // objects cannot be sorted in js, use array instead
+ }
+ }
+ n = 6
+ selection = []
+ sorted = sortable.sort(function(a, b) { return a[1] - b[1]; }).slice(0,n); // sort by distance, get first n elements
+ sorted.forEach(function(img,index) {
+ selection.push(img[0])
+ visited.push(img[0])
+ })
+ selection = selection.sort(() => Math.random() - 0.5); // shuffle
+ current = 0
+ update()
+}
+
+function src(id,path) { document.getElementById(id).src = path }
+function onclick(id,fun) { document.getElementById(id).onclick = fun }
+
+function hide_controls() {
+ document.getElementById("prev").style.display = "none"
+ document.getElementById("next").style.display = "none"
+}
+
+function show_controls() {
+ document.getElementById("prev").style.display = "block"
+ document.getElementById("next").style.display = "block"
+}
+
+function toggle_play() { playing == 1 ? stop() : play() }
+
+function play() {
+ playing = 1
+ interval = setInterval(function () { next() }, 3000);
+ document.getElementById("play-indicator").title = "Pause slideshow"
+ document.getElementById("play-indicator").innerText = "\u23F8"
+ hide_controls()
+}
+
+function stop() {
+ playing = 0
+ clearInterval(interval)
+ document.getElementById("play-indicator").title = "Play slideshow"
+ document.getElementById("play-indicator").innerText = "\u23F5"
+ show_controls()
+}
+
+function prev() {
+ current = (current-1+selection.length) % selection.length // js % cannot handle negative values
+ update()
+}
+
+function next() {
+ current = (current+1) % selection.length
+ update()
+}
+
+function update() {
+ src('image',"/pictures/"+selection[current])
+}
+