diff --git a/README.md b/README.md index 268a4bc..febdcef 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +# slidedown + local html page, that shows a slideshow of local files with a counter overlay diff --git a/slideshow.css b/slideshow.css index 49fa7c9..3b1d52f 100644 --- a/slideshow.css +++ b/slideshow.css @@ -3,7 +3,7 @@ body, html { background-color: black; } -#mainImage{ +img{ position: fixed; display: none; margin-left: auto; diff --git a/slideshow.html b/slideshow.html index 91af4a0..e41f389 100644 --- a/slideshow.html +++ b/slideshow.html @@ -12,7 +12,7 @@ - + @@ -22,6 +22,7 @@ + diff --git a/slideshow.js b/slideshow.js index 9d0136c..41b320a 100644 --- a/slideshow.js +++ b/slideshow.js @@ -1,24 +1,70 @@ -function displayImage(list,domelem,delay){ -console.log("next image:") - let file = list.splice(0,1)[0]//pop first - - if(file === undefined){ - console.log("done") - document.getElementById("mainImage").style.display="none" - document.getElementById("config").style.display="block" +function makeCache(list,size){ + let cache = []; + var size = size ||10; + function fillCache(){ + while (cache.length < size && list.length>0){ + let file = list.shift();//pop first + console.log("caching file:"+file.name) + let reader = new FileReader(); + reader.readAsDataURL(file); + + reader.domelem = undefined; + reader.name = file.name; + /*reader.onload=function(e){ + console.log("created img tag for:"+reader.name) + reader.domelem = document.createElement("img"); + reader.domelem.setAttribute('src', reader.result); + reader.domelem.setAttribute('id', "mainImage"); + reader.domelem.setAttribute('style', "display:block"); + }*/ + cache.push(reader); + } } - else{ - console.log(file) - let reader = new FileReader(); - reader.onload = function(event) { - domelem.src=event.target.result - setTimeout(displayImage,delay,list,domelem,delay) + function next(){ + fillCache(); + let reader = cache.shift() + if (reader === undefined){ + return undefined; + } + if(reader.readyState === FileReader.DONE){ + return reader; + } + else{ + console.log("warning: file not loaded"); + cache.unshift(reader); + return null; } - reader.readAsDataURL(file); + } + function test(){ + console.log(list); + console.log(size); + console.log(cache); + } + fillCache()//initialize cache + return {"next":next,"test":test}; +}; + +function displayImage(cache,domelem,delay){ + let reader = cache.next(); + if(reader === undefined){ + console.log("done"); + domelem.style.display="none"; + document.getElementById("config").style.display="block"; + } + else{ + if(reader){//if cache ready + //domelem.replaceWith(reader.domelem); + //setTimeout(displayImage,delay,cache,reader.domelem,delay); + domelem.src=reader.result; + setTimeout(displayImage,delay,cache,domelem,delay); + } + else{ + console.log("waiting") + setTimeout(displayImage,delay,cache,domelem,delay); + } } - } Date.prototype.addHours= function(h){ @@ -30,31 +76,48 @@ Date.prototype.addHours= function(h){ document.getElementById('datePicker').defaultValue = (new Date).addHours(1).toISOString().slice(0,-5); document.getElementById("filePicker").onchange=function(){ - //files = Array.from(document.getElementById("fileInput").files) - //fl.forEach((file)=>{console.log(file.name)}) - let files=Array.from(this.files); - let names= files.map(file => file.name) - document.getElementById("fileNames").innerText = "filenames:\n"+names.join("\n") - console.log(names) + let names= files.map(file => file.name); + document.getElementById("fileNames").innerText = "filenames:\n"+names.join("\n"); + console.log(names); }; document.getElementById("startButton").onclick=function(){ -console.log("starting") -let dateInput = document.getElementById("datePicker") -console.log("date valid:"+dateInput.checkValidity()) -console.log(dateInput.value) +console.log("starting"); +let dateInput = document.getElementById("datePicker"); +console.log("date valid:"+dateInput.checkValidity()); +console.log(dateInput.value); -document.getElementById("mainImage").style.display="block" -document.getElementById("config").style.display="none" +document.getElementById("mainImage").style.display="block"; +document.getElementById("config").style.display="none"; -let list = Array.from(document.getElementById("filePicker").files) -let img = document.getElementById("mainImage") -let delay = document.getElementById("delayPicker").value -setTimeout(displayImage,100,list,img,delay) +let files = Array.from(document.getElementById("filePicker").files); +let img = document.getElementById("mainImage"); +let delay = document.getElementById("delayPicker").value; +let cache = makeCache(files,10); + +setTimeout(displayImage,delay,cache,img,delay); }; +/*snippets +reader = new FileReader(); +reader.readAsDataURL(Array.from(document.getElementById("filePicker").files)[0]); + +files=Array.from(document.getElementById("filePicker").files); +files.forEach((file)=>{console.log(file.name)}) + + + +c=makeCache(Array.from(document.getElementById("filePicker").files),10) +c.next() + +tag= document.createElement("img"); +tag.setAttribute('id', "mainImage"); +tag.setAttribute('src', "testimages/1.jpg"); +tag.setAttribute('style', "display:block"); +document.getElementById("mainImage").replaceWith(tag) +*/