From 1706852291e1d17fd99f6451034d41324f5fe4f7 Mon Sep 17 00:00:00 2001 From: Stuart Longland Date: Sun, 25 Mar 2018 13:40:02 +1000 Subject: [PATCH] Port ClearSilver templates to Tornado. This is a first stab, and yes, things are *UGLY*, particularly the JavaScript, which was written almost 10 years ago. As such, it pre-dates versions of IE that play nice with web standards, Promises and lots of other advancements. My knowledge of JavaScript has also greatly improved since then. :-) --- .gitignore | 15 +++ LICENSE | 23 ++++ templates/gallery.thtml | 45 +++++++ templates/generator.thtml | 125 ++++++++++++++++++++ templates/images/back.png | Bin 0 -> 1625 bytes templates/images/configure.png | Bin 0 -> 1839 bytes templates/images/finish.png | Bin 0 -> 1634 bytes templates/images/forward.png | Bin 0 -> 1647 bytes templates/images/start.png | Bin 0 -> 1629 bytes templates/images/top.png | Bin 0 -> 1554 bytes templates/images/up.png | Bin 0 -> 1595 bytes templates/index.thtml | 19 +++ templates/lib.js | 208 +++++++++++++++++++++++++++++++++ templates/master.thtml | 13 +++ templates/photo.thtml | 162 +++++++++++++++++++++++++ templates/style.css | 86 ++++++++++++++ templates/wheellib.js | 25 ++++ 17 files changed, 721 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 templates/gallery.thtml create mode 100644 templates/generator.thtml create mode 100644 templates/images/back.png create mode 100644 templates/images/configure.png create mode 100644 templates/images/finish.png create mode 100644 templates/images/forward.png create mode 100644 templates/images/start.png create mode 100644 templates/images/top.png create mode 100644 templates/images/up.png create mode 100644 templates/index.thtml create mode 100644 templates/lib.js create mode 100644 templates/master.thtml create mode 100644 templates/photo.thtml create mode 100644 templates/style.css create mode 100644 templates/wheellib.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8edfd8e --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# Vim swapfiles +*.swp +.*.swp + +# Backup files +*~ + +# Python compiled files +*.pyc +*.pyo +__pycache__ + +# setuptools/distutils related +build +dist diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d3f871c --- /dev/null +++ b/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2018, Stuart Longland +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/templates/gallery.thtml b/templates/gallery.thtml new file mode 100644 index 0000000..d4a2d43 --- /dev/null +++ b/templates/gallery.thtml @@ -0,0 +1,45 @@ +{% extends "master.thtml" %} +{# vim: set ts=8 noet sw=8 syn=html fileencoding=utf-8: #} +{% block html_head %} + + Gallery: {{gallery_title}} +{% end %} +{% block html_body %} + + + + + + + + +
Index
+

{{gallery_title}}

+

{{gallery_desc}}

+
+ +

+ {% if photos %} + {% for p in photos %} + {% set hw = p.thumbwidth / 2 %} + {% set hh = p.thumbheight / 2 %} + {% set xpad = 60 - hw %} + {% set ypad = 60 - hh %} + {{p.annotation}} + {% end %} + {% end %} +

+{% end %} diff --git a/templates/generator.thtml b/templates/generator.thtml new file mode 100644 index 0000000..444bb4f --- /dev/null +++ b/templates/generator.thtml @@ -0,0 +1,125 @@ +{% extends "master.thtml" %} +{# vim: set ts=8 noet sw=8 syn=html fileencoding=utf-8: #} +{% block html_head %} + + Image: {{photo.annotation}} ?> ({{photo.name}}) + + + +{% end %} + +{% block html_body %} +
+
+
+ + +

+ Photo gallery images are being generated. Click the left photo + to view the last resized image. +

+{% end %} + +{% block html_body_args %}onload="main();"'{% end %} diff --git a/templates/images/back.png b/templates/images/back.png new file mode 100644 index 0000000000000000000000000000000000000000..60caccf0705b63ba8684555a228c74b3d98e4a20 GIT binary patch literal 1625 zcmV-f2B!ImP)SY;LP`Y!iH9QfrN|;Bv=S;06c7p$RT|WY4UxLu?k-)bwuWqj<4yL%UdQ&mz8^C@ z`0m<{?QDt)jP!r-oip?QpW~S`=fMAYXdlIR?9B8oP)9+I0;4F|w1=8O$r+?~$>Mw# zkm+<{PGuo(@BW7f!F5% zh;Jpb=@WeW!5sTPwTb(;Cx}Hv+nU@`jlceVmCNtKTh~me%-1IZ_ce=`z5|rf>9oJ0 zfOT>`3d#F<^uWJ(=wOP0O-9#fsXMm1JX_>vmrQOhEP!7I>CIT`+*g6c=1AyW$&Ca% zc5LJ6<7JM0ZV=ND_>va9@pg%9zQ*uOFRGWaYGjAUN?E<>V@bECtoK)=G62tRV8?MZiIdvq(13MF3xLV-8KBLXX&^7k& zjB~3bxxNgbK9l!$T^SN{*FzE98Pk^_faHFjJhV(Qk)T>@ze#iRRZbmAt^YoCB*pAM zt6l$|Zyil?^R~$c|0qMG|16RzzymzJ;eF;bsP7UV;;{z{>>b&J7pOM8pL1Hs*T%J* zPDgt$P$*z$O7dp5AH34GyxdzH(q^VC%W@kLQ1S^hlP#%U_KY}Goc61`SoAuQ10C&~ zN3zG{8>36SHerGudj!eLfNcPbeebPZz+qyW`O@xX{GbOv2wDkj*_HecS6A*z?)i%4 zl8Zuz*k-U7Mki}0_FB;kg|!GA1t2m=Dp{gpw|mo#{MA1%btPU{arkgW<7#fW@iAh9 zy#Qw4L11c4z$n1hK8XUVwN~#>AK!A%zR1BG`>2*2t$KMl$MBsmXQRjr^mG%ijmBIZ+xt zpp*ufMsrH8coA;f{{ONZ5RGdn9SU{~L#Y26+j;N@<4f6KpJ5ZnnBa4*gmG-nw`J=L&?Qw#a%bvXqZhej_tVN6J5)q`isThz*{}lvZC>59Z^l(o{vd3SrIsa6$qlm{}C~X*tY_3xO|NZjo z=u`k(2gqbHoE+0;^TPUyUn_4<4J7H02gHna{Bg3%*Q`X_=9i{#ceG!FU6bT*T(5ht zz5G+)CQxiXT^@n+3_x~1N6hf(jk+E2?D-pQ0=n7uMqOftM|M6}H+1qZ0>u!GdLWa@ zsFRkF&#MOtffUD=iZyl*MTnR>rmnT&&A*j7yuTNKAN(rc(ZwAO%Qmj ztgQ0R4Z(*CRcf9D>CfWiU$mkZrouya3#c}i-iHC@V-^6+{tC!jiV25xvYEJ(R X%}NILhgaSL00000NkvXXu0mjfNv;S( literal 0 HcmV?d00001 diff --git a/templates/images/configure.png b/templates/images/configure.png new file mode 100644 index 0000000000000000000000000000000000000000..11415643fb7ff59936c65b7a8b6c22e5cdb2bda0 GIT binary patch literal 1839 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
    HaI{W5SuC= z-i6t-AKe;4HwS|!HK^4hjbBbv$)SB g7jOc&YYnIW0@U`fAh7wW5;XnW@!>TsgvSX4k3}_fd~;28X#1SA|k3veQBW|SYXMm z`cPE}B%~lfNIVn?9!ghE38X^pLkkG?Atg$cwkehBNo}_&UyG8a&bsl(?z+1>vpX~Q z^02e^ZoO-#5X6=KTFstw=lsvPXU;hn{?AMKILgDLlRH2j0x<*(Aw|PG z`UFyZ5mkdo4@8ngq9)toOMG@~4uGNyXD;>QxK*gkfx7_G1EfRXK4$ToUjuF{BFZ{m zp8&wzOk~4NJhX3y-M4Juwyhn+BI>F=GxHVx@@|1w{t9niGN5$1CJ3r8SUmkLU@4tW z`|A=|Hm*e>ejE4heV=3dQzSO%ZKEYW@~T&+^Ze?p!3VRm;1@x7QVf)~vVV^AlKkX( zr=^~d@Qp)p25wH&lp{UIfdrs8MPPW;egNdRF?+dhUyhyq8}I_z7F$!%Cg#WXnSAe= z582bNtkRXh_LSgUrU$&GEm^TM->Xbruq>;(5&nhF9zC6!8x2IZ?c<7gl?CCA@-lD=A zGkq(5YnFRc8p;;D*np6SQ$RJ>@ z5YS>I%qqpu`?ubYwtVr&S>t0#4*W1ov9K*^Dz!XNg8>Awl_XSS#G_S86+x*Y{%hmQ z74Zi(<4R+p)H^{+1u*o+l3em4eCYT$zUQ}ZdFo1W7cMy`hOWy0-SAN-;+Iw!EDsZb zOTH2%TkIlR?Bd8zy&Gb*o&x~78s>uZKzbQK=wT6>LeVHWK8CgulrR5SG<3V>s_g~M z=e(A2qoLzCZZ&Mtl?)nQ&6@DeqG?cFKvlO~muGbX>lt6p{Q9acgugi(6ITTYXSnk? za~O(;skevgf$Obp{A)k+NSG_A?==(;oH-Ewv}K;Y3^?_83xt0PmCrBb=lNt`XIsw` zF$aK?564@|zxj(L60z2MGc%>y`TNC}&?o_p24LGZM~9W^tZIG5uN1eY5^;LWfSBGM zcUm2*3_SAGd|Q2|BFJ97QuAK$*(ciEOYhNht6^V(F7vg<)L_k?Bq{tS=>^67LsXd1~Z%aXlJPG;qdfO6wl z-nLDIBw|2fLf-ozTI?%hsx1%+$ zW+NjbN;tiC0zDIzBRes=_oGGzQH_DHrG~ZI%MesDRC9J%WJ*9GBv1nUR+rW5x}1j5 tFv5tKA!6Zw>T)py4{!k|guCA5^xwNOMyVNAeoO!W002ovPDHLkV1ig14io?Y literal 0 HcmV?d00001 diff --git a/templates/images/start.png b/templates/images/start.png new file mode 100644 index 0000000000000000000000000000000000000000..2a575fd9f240ca3213b99c9d9207d1e808fb53c3 GIT binary patch literal 1629 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 Ef_nDZn*aa+ literal 0 HcmV?d00001 diff --git a/templates/images/up.png b/templates/images/up.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b094412a4e62a90d9abe51d5438985e62fbe3d GIT binary patch literal 1595 zcmV-B2E_S^P)1Z)yX(u^>$oIw5(3m9M?i5rB1MFR28mXRib@d@FA#BCAP>A% zt&dj;||L6aG=X~eDPh6DsbRIi6c_YYuAVz^vq-dB!P9en-J6TsuZUXXwQ)c`e8=^z~NoyH+wAiQ@>`PXs4wJb|q6M?aVlRHt=*O1~~ zR1J)NFa|KfQMSdFxpQjRgt?Cv+~)&4HH(;ZB)y{MW#IqY_F-@K6`qwr(VG zZ<(>1d)tB@J-Jw`KfHHCOZ(D_%lJo2d^T0Aknru}CT~9i6sshZX7I0ef--@ovt`RR zUU)#TDXzB#KYk|5^AB#WeIGiOX8*4KmVQoIa`?jxr>FB35~all%+S$K0o$@Hx!RF$ zf)B9~p4{UQ>k3gU$rf7;4)FYgn>l_a+tOD^IIu6q@b&RZN2C8`AP$58wEF5No&fnQ z(IFn&m0`#B9$a6x*y-t&7Vv8Mg@i=H~9PDLedp89~wAh*R`HtX?N}M^LZy6iw*7^Nt4ip`<$U{IspsN65&wY6# zu$RaN?i*gj^PyPsn{0ZfxF&cbiRqbQZEUXK@lCpjM1#l%P_)rxY5xu&Qr%bkD*hQ@ zFt$v=Zay!rWZfSO-bmumu{1Lag8$5JsW%ul*mI!w?FPNCnqm#inMRK)(7e+_vq)(g1s2S(iX+T>;^c zu_MgoqcvN-qCKxvKrSo|Ty@sfB&y$v5-8yn>SEL`6TWj#wiL#b%?W4!pWIr#*8m~G zlNz9|iv&PO1=pvNs->F(L?}3frcg8rwui2TI%GTbngdbS>UG;G2PwLgLc^_~3HJn= z2IWOm_5X|dc13ICUJf#7IWs{NCj?+}B$edZFRH3F7p z$wY$jB+neMbC>QC8*d=qE!Qn|U%1>^xq^b7yHr`d_TC3T4gwbh#l?62h!#DWx;V={ zzxWxtwmuTQ9SFF-Lh9mta6?JIL6|I%1>BmqCnhH3Z_Q9TEpN;CLjBD`w#4v|fuU>Y zn$lt?|C?v;?e(kLtM8`U_EYgVJ(Z#8xKPf#X6na20n$L$vMhh~p7TtO98UTNLMui7 z{EuXY`|jwar>A{P{N?E7T0N|{Zqt0ez^9Wd6dkVuuD$;^;4+W_yrvsbpaQ08`a?`k zrsb_US7`TNn00W4%C-$EdPpUtvZg80Bl&fae@$m`J<$lB2Ch`^gB`Esi9|vLx{}_* zzryH$8ATfl>nhi8>f+WR!N5Qtn%2A>ecxqiDaZ6Bm2c;Ylw1MAJBO2g!werk8?5|F zxp$st*S#H8`u?6n-g1IWrL)GKFBPWrMoc?y>rV9;bmC tdZ0)&ut@MvtsQ3I0uEpY=B)KN{T?M~>ZuTwcHsa3002ovPDHLkV1g7T`5^!R literal 0 HcmV?d00001 diff --git a/templates/index.thtml b/templates/index.thtml new file mode 100644 index 0000000..a1e4adf --- /dev/null +++ b/templates/index.thtml @@ -0,0 +1,19 @@ +{% extends "master.thtml" %} +{# vim: set ts=8 noet sw=8 syn=html fileencoding=utf-8: #} +{% block html_head %} + {{site_name}} +{% end %} +{% block html_body %} +

    {{site_name}}

    + + {% if galleries %} + {% for g in galleries %} +
    +

    {{g.title}}

    +

    {{g.desc}}

    +
    +
    + {% end %} + {% end %} +{% end %} diff --git a/templates/lib.js b/templates/lib.js new file mode 100644 index 0000000..a1167e8 --- /dev/null +++ b/templates/lib.js @@ -0,0 +1,208 @@ +function getXHR() { + var httpRequest; + if (window.XMLHttpRequest) { // Mozilla, Safari, ... + httpRequest = new XMLHttpRequest(); + } else if (window.ActiveXObject) { // IE + httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); + } + return httpRequest; +} + +function fetchImage( width, height, rotation ) { + data = getData(); + xhr = getXHR(); + photo_obj = document.getElementById( 'photoimg' ); + + xhr.onreadystatechange = function() { + if ( xhr.readyState == 4) { + document.scroll_en = true; + if ( xhr.status == 200 ) { + eval( 'data=' + xhr.responseText ); + photo_obj.src = + data.uri + '/' + data.photo.resized; + document.data = data; + } + } + showPopupFor(3000, '

    Image Loaded' + +'

    ' + +'The image has been successfully retrieved.

    '); + document.scroll_en = true; + }; + + /* Cancel any existing timers */ + if ( document.zoom_timer ) + window.clearTimeout( document.zoom_timer ); + + /* Set a timer to fetch this data after a 3 second delay */ + url = document.location.protocol + "//" + + document.location.hostname + + document.location.pathname + + '?width=' + width + + '&height=' + height + + '&quality=' + data.settings.quality + + '&rotation=' + rotation + + '&json=1'; + + document.zoom_timer = window.setTimeout( function() { + document.scroll_en = false; + document.zoom_timer = false; + document.scroll_en = false; + showPopup('

    Loading Image' + +'

    ' + +'The requested image is being generated...' + +'Please Wait.

    '); + xhr.open('GET', url ); + xhr.send(null); + }, 3000 ); +} + +function setZoom( zoom ) { + data = getData(); + + /* Round zoom to 1% */ + zoom = Math.round( zoom*100 )/100; + + document.zoom = zoom; + width = Math.round(data.photo.origwidth*zoom); + height = Math.round(data.photo.origheight*zoom); + + document.getElementById( 'width' ).value = width; + document.getElementById( 'height' ).value = height; + + photo_obj = document.getElementById( 'photoimg' ); + if ( photo_obj ) { + photo_obj.width = width; + photo_obj.height = height; + + /* If the size is bigger than our present image, request a + * bigger one from the server. */ + if ( ( width > data.photo.width ) || + ( height > data.photo.height ) ) { + fetchImage( width, height, data.settings.rotation ); + } + } + showPopupFor(3000,'

    Zoom Image' + +'

    Zoom photo to '+zoom + +'x magnification.
    ' + +'Adjust using your mouse\'s scroll wheel then ' + +'wait a moment to see the result.

    '); +} + +function resetZoom() { + data = getData(); + if ( document.scroll_en ) + setZoom( document.defaultZoom ); +} + +function adjustZoom( amount ) { + data = getData(); + if ( document.zoom == null ) + document.zoom = data.photo.zoom; + if ( document.scroll_en ) + setZoom( document.zoom + amount ); +} + +function showPopup(body) { + if ( document.popupDiv ) + div = document.popupDiv; + else { + div = document.popupDiv + = document.createElement('div'); + + div.style.position='absolute'; + div.style.right='0px'; + div.style.top='0px'; + div.style.width='30em'; + div.style.height='100px'; + div.style.backgroundColor='#ccc'; + div.style.color='black'; + div.style.borderStyle='dotted'; + div.style.borderColor='black'; + div.style.borderWidth='2px'; + div.style.visibility='hidden'; + document.body.appendChild( div ); + } + div.innerHTML = body; + div.style.visibility='visible'; +} + +function showPopupFor(duration, body) { + showPopup( body ); + if ( document.popup_timer ) + window.clearTimeout( document.popup_timer ); + + document.popup_timer = window.setTimeout( function() { + hidePopup(); + }, duration); +} + +function hidePopup() { + document.popupDiv.style.visibility='hidden'; +} + +function setRotation( angle ) { + data = getData(); + + /* Display a preview */ + preview = document.location.protocol + "//" + + document.location.hostname + + data.CGI.ScriptName + + '/.rotate_preview' + + '?gallery=' + data.gallery.name + + '&photo=' + data.photo.name + + '&rotation=' + angle; + + if ( preview == document.rotationPreview ) + return; + + showPopup('preview' + +'

    Rotate Photo

    ' + +'

    Rotate photo by '+angle + +' degrees.
    ' + +'Adjust using your mouse\'s scroll wheel then ' + +'wait a moment to see the result.

    '); + + /* Schedule actual image fetch */ + fetchImage( data.photo.width, data.photo.height, angle ); + rotatefield = document.getElementById( 'rotate' ); + if ( rotatefield ) { + rotatefield.value = angle; + } + document.rotationPreview = preview; + document.rotation = angle; +} + +function adjustRotation(amount) { + data = getData(); + setRotation( parseFloat(document.rotation) + amount ); +} + +function wheelHandler( delta ) { + pan=Math.round(document.getElementById('wheelPan').value); + zoom=Math.round(document.getElementById('wheelZoom').value)/100; + angle=parseFloat(document.getElementById('wheelRotate').value); + + if ( document.getElementById('wheelActionZoom').checked ) + if ( document.scroll_en ) + adjustZoom( delta * zoom ); + if ( document.getElementById('wheelActionHPan').checked ) + window.scrollBy( -delta*pan, 0 ); + if ( document.getElementById('wheelActionVPan').checked ) + window.scrollBy( 0, -delta*pan ); + + if ( document.getElementById('wheelActionRotate').checked ) + if ( document.scroll_en ) + adjustRotation( -delta*angle ); +} +document.scroll_en = true; + +function toggleadj() { + if ( document.adjpanel ) { + document.getElementById('controls').appendChild(document.adjpanel); + delete( document.adjpanel ); + } else { + document.adjpanel = document.getElementById('adjpanel'); + document.getElementById('controls').deleteRow(2); + } +} diff --git a/templates/master.thtml b/templates/master.thtml new file mode 100644 index 0000000..5d84e82 --- /dev/null +++ b/templates/master.thtml @@ -0,0 +1,13 @@ + +{# vim: set ts=8 noet sw=8 syn=html fileencoding=utf-8: #} + + + + + {% block html_head %}{% end %} + + + {% block html_body %}{% end %} + + diff --git a/templates/photo.thtml b/templates/photo.thtml new file mode 100644 index 0000000..0b63009 --- /dev/null +++ b/templates/photo.thtml @@ -0,0 +1,162 @@ +{% extends "master.thtml" %} +{% from json import dumps %} +{# vim: set ts=8 noet sw=8 syn=html fileencoding=utf-8: #} +{% block html_head %} + + Image: {{photo.annotation}} ({{photo.name}}) + + + +{% end %} +{% block html_body %} + + + + + + + + + + + + + + + + +
    AlbumAdjustIndex
    + {{photo.annotation}} ({{photo.name}}) +
    +
    + + Resize: x + + Rotation: + + Quality: + (100% = PNG) + +
    + + Zoom: + [-0.1] + [-0.01] + [1.0] + [+0.01] + [+0.1] + [reset]
    + + Mouse wheel action: + + + by % + or + + + + + by pixels + + or + + + by degrees +
    +
    +

    {{photo.annotation}}

    + +
    + {{photo.description}} +
    +{% end %} + +{% block html_body_args %}onload="toggleadj();"{% end %} diff --git a/templates/style.css b/templates/style.css new file mode 100644 index 0000000..1defb15 --- /dev/null +++ b/templates/style.css @@ -0,0 +1,86 @@ +@media screen { +body { + margin: 10px; + background-color: #333; + color: white; +} + +.controls { + position: fixed; + background-color: #333; + left: 0px; + right: 0px; + top: 0px; +} + +.button { + display: block; + text-align: center; + background-color: #333; + border: 1px solid white; + color: white; + padding: 0.5em; + text-decoration: none; + font-size: large; +} + +.button:hover { + background-color: #666; + color: #fc9; +} + +td.firstlink, td.prevlink, td.nextlink, td.lastlink { + width: 10em; +} + +} + +a { + text-decoration: none; + color: #c96; +} + +a:hover { + color: #ffc; +} + +@media print { + +.controls { + visibility: hidden; + position: fixed; + height: 0px; + width: 0px; + left: 0px; + top: 0px; +} + +} + +.thumbnail { + border: 2px solid #ccc; +} + +.thumbnail:hover { + border: 2px solid #fec; +} + +.status { + text-align: center; +} + +li { + padding-top: 0.5em; + padding-bottom: 0.5em; +} + +.popuptitle { + text-align: center; + font-size: large; + height: 20px; +} + +.popupbody { + text-align: center; + height: 80px; +} diff --git a/templates/wheellib.js b/templates/wheellib.js new file mode 100644 index 0000000..d568b89 --- /dev/null +++ b/templates/wheellib.js @@ -0,0 +1,25 @@ +/* Source: http://adomas.org/javascript-mouse-wheel/ */ +function wheel(event){ + var delta = 0; + if (!event) /* For IE. */ + event = window.event; + if (event.wheelDelta) { /* IE/Opera. */ + delta = event.wheelDelta/120; + if (window.opera) + delta = -delta; + } else if (event.detail) { /** Mozilla case. */ + delta = -event.detail/3; + } + if (delta) + wheelHandler(delta); + if (event.preventDefault) + event.preventDefault(); + event.returnValue = false; +} + +if (window.addEventListener) + /** DOMMouseScroll is for mozilla. */ + window.addEventListener('DOMMouseScroll', wheel, false); +else + /** IE/Opera. */ + window.onmousewheel = document.onmousewheel = wheel;