/* Copyright 2011 Ville Rantanen This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ var maxThumb=10; var uagent = navigator.userAgent.toLowerCase(); var pathlist=[]; var pathimage=[]; var imagelist=[]; var filelist=[]; var imagedesc=[]; var imagetime=[]; var marklist=[] var currentimage=-1; var currentlist=-1; var originals=false; var preloader; var slideshowtimer; var slideshowinterval; function setup() { // Setup run at the load of page. if (notsupported()) { return; } //hidethumbs(); document.onkeydown=keypressed; slideshowinterval=request('auto'); if (slideshowinterval!=0) { slideshowtimer=setInterval('slidenext()',1000*Math.abs(slideshowinterval)); } var req=request('p'); if (req==-1) { req=request('q'); } if (req!=-1) { showimage(req); } else { thumblist(0,-1); subfolderbiglist(); } return; } function showimage(i) { // Main function to show a single image if (i>imagelist.length-1 || i<0) { return; } thumblist(i,i); showbigimage(i); preload(i); subfoldersmalllist(); currentimage=i; return; } function showbigimage(i) { // The medium version of image in the big image container if (i==-1) { return; } ob=document.getElementById('imagecontainer'); width=document.body.clientWidth-30; height=document.body.clientHeight-225; if (originals) { mediumstr=encodeURIComponent(imagelist[i]); } else { mediumstr='_med/med_'+encodeURIComponent(imagelist[i])+'.jpg'; } ob.innerHTML='
'; document.getElementById('imagesingle').style.maxWidth=width; ob.style.height=height; document.getElementById('imagesingle').style.maxHeight=height; dc=document.getElementById('desccontainer'); dc.innerHTML=currentlink(i)+imagedesc[i]; dc.style.display='block'; return; } function currentlink(i) { // gets the search term for this image index = location.href.split("?"); s='['+String(i+1)+'] '; return s; } function preload(i) { // preloads left and right images if (imagelist.length==0) { return; } ob=document.getElementById('preloadcontainer'); right=Math.max(0,i+1); right=Math.min(right,imagelist.length-1); left=Math.max(0,i-1); left=Math.min(left,imagelist.length-1); if (originals) { prestr=''; prestr+=''; } else { prestr=''; prestr+=''; } ob.innerHTML=prestr; preloadcheck(); preloader=setInterval('preloadcheck()',100); return; } function preloadcheck() { var imgs=document.getElementById('preloadcontainer').childNodes; var tob=document.getElementById('desccontainer'); var completed=preloadcheckcount(); var colorValue=32*completed/imgs.length + 223; tob.style.backgroundColor="rgb("+colorValue+","+colorValue+","+colorValue+")"; if (imgs.length==completed) { clearInterval(preloader); tob.style.backgroundColor="rgb(255,255,255)"; } return; } function preloadcheckcount() { var imgs=document.getElementById('preloadcontainer').childNodes; var completed=0; for (i=0;i
('+startI+')
'; rightstr='
('+(imagelist.length-endI)+')
'; menustr='all thumbnails'+ 'Order:name/'+ 'time/'+ 'reverse'+ 'Original:'+String(originals)+''; thumbstr='
Images'+menustr+'
'+leftstr; for (i=startI; i
'+nicestring((imagelist[i]))+''; } thumbstr+=rightstr+'
'; ob.innerHTML=thumbstr; if (curr>-1) { c=document.getElementById('n'+curr); if (c) {c.className="imagebox thumbbox rounded"; } } if (marklist.length>0) { for (m in marklist) { var mth=document.getElementById('n'+marklist[m]) if (mth!=null) { mth.className+=" marked"; } } } return; } function allthumbs() { // Shows all the thumbnails in the current folder ob=document.getElementById('thumbcontainer'); thumbstr='

Images

'; for (i=0; i
'+nicestring(imagelist[i])+''; } thumbstr+='
'; ob.innerHTML=thumbstr; ic=document.getElementById('imagecontainer'); ic.innerHTML=''; ic.style.height=0; dc=document.getElementById('desccontainer'); dc.style.display='none'; currentimage=-1; return; } function subfoldersmalllist() { // Shows a small subfolder list ob=document.getElementById('pathcontainer'); pathstr='Subfolders: '; pathstr+='(text icon list) '; for (p=0; p'+nicestring(pathlist[p][0])+'('+String(pathlist[p][1])+')/ '; } pathstr+=''; if (pathlist.length==0) { ob.innerHTML=''; } else { ob.innerHTML=pathstr; } return; } function subfolderbiglist() { // Shows a subfolder list with thumbnails ob=document.getElementById('pathcontainer'); pathstr='

Subfolders: (text icon list)

'; for (p=0; p0) { imgstr=''; } else { imgstr=''; } pathstr+=''+imgstr+''+nicestring(pathlist[p][0])+' ('+String(pathlist[p][1])+')'; } if (pathlist.length==0) { ob.innerHTML=''; } else { ob.innerHTML=pathstr; } return; } function subfolderdetaillist() { // Shows a subfolder list with thumbnails ob=document.getElementById('pathcontainer'); pathstr='

Subfolders: (text icon list)

'; for (p=0; p0) { imgstr=''; } else { imgstr=''; } pathstr+=''; } if (pathlist.length==0) { ob.innerHTML=''; } else { ob.innerHTML=pathstr; } return; } function sortlist(property) { // sorts the image list based on time or name, or reverse sort var templist=[] var tempmark=[] var tempcurrent=imagelist[currentimage]; for (i in imagelist) { templist.push({name:imagelist[i], time:imagetime[i], desc:imagedesc[i]}); } for (i in marklist) { tempmark.push(imagelist[marklist[i]]); } if (property=='time') { templist.sort(function(a,b) { return a.time-b.time }) } if (property=='alpha') { templist.sort(function(a, b){ if (a.name < b.name) return -1 if (a.name > b.name) return 1 return 0 }) } if (property=='rev') { templist.reverse(); } for (i in imagelist) { imagelist[i]=templist[i].name; imagetime[i]=templist[i].time; imagedesc[i]=templist[i].desc; if (imagelist[i] == tempcurrent) { currentimage=i; } } var markidx=0; marklist=[]; for (i in tempmark) { markidx=imagelist.indexOf(tempmark[i]); if (markidx!=-1) { marklist.push(markidx); } } thumblist(currentimage,currentimage); return; } function request(type) { // Check for URL queries var queries = location.search.substr(1).split("&"); for (que=0;que1 && query[1].length>0) { for (imname in imagelist) { if (imagelist[imname].indexOf(unescape(query[1])) != -1) { return parseInt(imname); break; } } } } if (type=="p") { // Fetch ?p=position request and return the integer if ((query[0]=="p") && query.length>1 && query[1].length>0) { var retval=parseInt(query[1]); if (isNaN(retval)) { return -1; } retval=Math.max(1,retval); retval=Math.min(retval,imagelist.length); return retval-1; } } if (type=="auto") { // Fetch ?auto=num seconds request and return the boolean if ((query[0]=="auto") && query.length>1 && query[1].length>0) { var retval=parseInt(query[1]); if (isNaN(retval)) { return 0; } return retval; } } } if (type=="auto") { return 0; } return -1; } function markitem(i) { // Adds an item in a list of selected images if (imagelist.length==0) { return; } if (i==-1) { return; } var lel=document.getElementById('listcontainer'); if (lel.innerHTML.length<4) { lel.innerHTML='
Marked:'+ 'edit'+ 'copy'+ '
'; } var existidx=marklist.indexOf(i); if (existidx==-1) { marklist.push(i); } else { marklist.splice(existidx,1); } marklisteditor(); showimage(i); return; } function unmarkitem(i) { // remove an item from selection list marklist.splice(i,1); marklisteditor(); showimage(currentimage); return; } function marklisteditor() { // print out an editor view of the selection list var mel=document.getElementById('marklist'); var liststr=''; var dlstr='X
'+ ''+imagelist[marklist[i]]+''; dlstr+=imagelist[marklist[i]]+'%0A'; } dlstr+='">Download as file'; liststr+='
'+ 'delete list'+ ''+ ''+dlstr+''+ '
'; mel.innerHTML=liststr; return; } function marklisttable() { // print out a copy-pastable text box of the selection list var mel=document.getElementById('marklist'); mel.innerHTML='
'; var cel=document.getElementById('marktable'); cel.onclick=marklistselect; cel.onblur=marklistblur; cel.cols=80; cel.hasfocus=false; for (i in marklist) { cel.value=cel.value+'"'+imagelist[marklist[i]]+'"\r\n'; } var rows=cel.value.split(/\r?\n|\r/).length + 1; cel.rows=rows; marklistselect(); return; } function deletemarklist() { // delete the selection list var answer = confirm("Delete your selection list?") if (answer) { var lel=document.getElementById('listcontainer'); lel.innerHTML=''; marklist=[]; showimage(currentimage); } return } function marklistselect() { // set focus to selection list text area var cel=document.getElementById('marktable'); cel.hasfocus=true; cel.select(); } function marklistblur() { // set blur to selection list text area var cel=document.getElementById('marktable'); cel.hasfocus=false; } function nicestring(s) { // Return a nice version of a string s=String(s); if (s.length<20) { return s; } s=s.replace(/_/g,' '); s=s.replace(/-/g,' '); if (s.length>30) { s=s.substring(0,26)+'..'+s.substring(s.length-4); } return s; } function titlestring(s) { // Return a nice version of a string for title attribute s=s.replace(/"/g,"""); s=s.replace(/<\/?[^>]+(>|$)/g, ""); return s; } function fliporiginals() { // Use original images / medium size jpegs if (originals) { originals=false; } else { originals=true; } showimage(currentimage); } function getmaxthumbs() { return Math.floor((document.body.clientWidth-30)/100)-2; } function hidethumbs() { // hide all thumbnails (obsolete) if (notsupported()) { return; } for (n=0; n(imagelist.length-1)) { currentimage=0; } } showimage(currentimage); } } function keypressed(e) { //if (currentimage==-1) { return; } if (document.getElementById('marklist')!=null) { if (document.getElementById('marklist').hasfocus) { return; } } var evtobj=window.event? event : e; //distinguish between IE's explicit event object (window.event) and Firefox's implicit. var unicode=evtobj.charCode? evtobj.charCode : evtobj.keyCode; maxThumb=getmaxthumbs(); var shift=evtobj.shiftKey; // shift end: move to last image if (unicode==35 && shift==1) { currentimage=imagelist.length-1; showimage(currentimage); } // shift home: move to first item if (unicode==36 && shift==1) { currentimage=0; showimage(currentimage); } // arrow left: move 1 left if (unicode==37 && shift==0) { currentimage-=1; if (currentimage<0) { currentimage=imagelist.length-1; } showimage(currentimage); } // shift arrow left: move 1 page left if (unicode==37 && shift==1) { currentimage-=maxThumb; if (currentimage<0) { currentimage=imagelist.length-1; } showimage(currentimage); } // arrow right: move 1 right if (unicode==39 && shift==0) { currentimage+=1; if (currentimage>(imagelist.length-1)) { currentimage=0; } showimage(currentimage); } // shift arrow right: move 1 page right if (unicode==39 && shift==1) { currentimage+=maxThumb; if (currentimage>(imagelist.length-1)) { currentimage=0; } showimage(currentimage); } // x: mark image if (unicode==88) { markitem(currentimage); } if (slideshowinterval!=0) { clearInterval(slideshowtimer); slideshowtimer=setInterval('slidenext()',1000*Math.abs(slideshowinterval)); } //Debug: //alert(unicode); return; } function notsupported() { // not supported devices (i.e. the javascript doesnt work properly ) if (uagent.search('series60')>-1) { return true; } if (uagent.search('opera mobi')>-1) { return true; } return false; }