[Linpha-cvs] SF.net SVN: linpha: [4576] trunk/linpha2
Status: Inactive
Brought to you by:
bzrudi
From: <fan...@us...> - 2006-10-07 18:12:50
|
Revision: 4576 http://svn.sourceforge.net/linpha/?rev=4576&view=rev Author: fangehrn Date: 2006-10-07 11:12:35 -0700 (Sat, 07 Oct 2006) Log Message: ----------- 2006-10-07 flo * implementing lightbox in normal image view * preloading images and xml data * broken again.. :-/ Modified Paths: -------------- trunk/linpha2/ChangeLog trunk/linpha2/lib/js/LinImage.js trunk/linpha2/templates/default/css/view_img.css trunk/linpha2/templates/default/view_img.head.php trunk/linpha2/templates/default/view_img.html.php Modified: trunk/linpha2/ChangeLog =================================================================== --- trunk/linpha2/ChangeLog 2006-10-07 14:25:58 UTC (rev 4575) +++ trunk/linpha2/ChangeLog 2006-10-07 18:12:35 UTC (rev 4576) @@ -1,4 +1,9 @@ 2006-10-07 flo + * implementing lightbox in normal image view + * preloading images and xml data + * broken again.. :-/ + +2006-10-07 flo * adding javascript frameworks prototype and scriptaculous * implemented nice imageinfos Modified: trunk/linpha2/lib/js/LinImage.js =================================================================== --- trunk/linpha2/lib/js/LinImage.js 2006-10-07 14:25:58 UTC (rev 4575) +++ trunk/linpha2/lib/js/LinImage.js 2006-10-07 18:12:35 UTC (rev 4576) @@ -1,187 +1,297 @@ -var http_request = false; + +var errFunc = function(t) { + alert('Error ' + t.status + ' -- ' + t.statusText); +} + +var xmlDoc; +//var curImgId = startImgId; var img_width; var img_height; -var colorinfoactive; -var colorinfonotactive; +var borderSize = 0; +var resizeDuration = 0.5; +var LinImage = Class.create(); -function loadImage(imgid) { +LinImage.prototype = { + + // initialize() + // Constructor runs on completion of the DOM loading. + // + initialize: function() { + }, - http_request = false; + + loadStartData: function() { + // http://wiki.script.aculo.us/scriptaculous/show/Ajax.Request + new Ajax.Request(xmlUrl + '&id=' + startImgId + '&xml', {asynchronous:true, onSuccess:this.loadStartImage, onFailure:errFunc} ); - if (window.XMLHttpRequest) { // Mozilla, Safari,... - http_request = new XMLHttpRequest(); - if (http_request.overrideMimeType) { - http_request.overrideMimeType('text/xml'); - // zu dieser Zeile siehe weiter unten - } - } else if (window.ActiveXObject) { // IE - try { - http_request = new ActiveXObject("Msxml2.XMLHTTP"); - } catch (e) { - try { - http_request = new ActiveXObject("Microsoft.XMLHTTP"); - } catch (e) {} - } - } + }, - if (!http_request) { - alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen'); - return false; - } - http_request.onreadystatechange = loadImageData; - http_request.open('GET', imagedata_url + '&id=' + imgid + '&xml', true); - http_request.send(null); + loadStartImage: function(t) { + xmlDoc = t.responseXML.documentElement; + this.changeImage(); + }, -} + // + // changeImage() + // + changeImage: function(imgId) { + + alert('hallo'); -function loadImageData() { + /** + * hide meta text immediately + */ + hideImgInfoNow(); - if (http_request.readyState == 4) { - if (http_request.status == 200) - { - setImageData(); - } else { - alert('Bei dem Request ist ein Problem aufgetreten.'); - } - } -} // end function loadImageData() + // hide elements during transition + Element.show('divloading'); + Element.hide('mainImage'); -function setImageData() -{ -// alert(http_request.responseText); + /** + * set image width and height + */ + //var imgid = xmlDoc.getElementsByTagName('imgid').item(0).firstChild.data; + var orgWidth = xmlDoc.getElementsByTagName('imgwidth').item(0).firstChild.data; + var orgHeight = xmlDoc.getElementsByTagName('imgheight').item(0).firstChild.data; + var sizeArray = scaleToFit(orgWidth,orgHeight,imageSize,imageSize,1); + imgWidth = sizeArray[0]; + imgHeight = sizeArray[1]; - /** - * hide meta text immediately - */ - hideImgInfoNow(); + /** + * preload image + */ + imgPreloader = new Image(); + + // once image is preloaded, resize image container + imgPreloader.onload=function(){ + $('mainImage').src = image_src + imgid + '&max_width=' + imgWidth + '&max_height=' + imgHeight; + myLinImage.resizeImageContainer(imgWidth, imgHeight); + } + imgPreloader.src = image_src + imgid + '&max_width=' + imgWidth + '&max_height=' + imgHeight; + }, - var xmldoc = http_request.responseXML; + // + // resizeImageContainer() + // + resizeImageContainer: function( imgWidth, imgHeight) { - /** - * set image with source, width and height - */ - var imgid = xmldoc.getElementsByTagName('imgid').item(0).firstChild.data; - var orgwidth = xmldoc.getElementsByTagName('imgwidth').item(0).firstChild.data; - var orgheight = xmldoc.getElementsByTagName('imgheight').item(0).firstChild.data; - var sizearray = scaleToFit(orgwidth,orgheight,image_size,image_size,1); - imgwidth = sizearray[0]; - imgheight = sizearray[1]; - - var ElemImg = document.createElement("img"); - ElemImg.setAttribute('src',image_src + imgid + '&max_width=' + imgwidth + '&max_height=' + imgheight); - ElemImg.setAttribute('id','mainimage'); - ElemImg.setAttribute('width',imgwidth); - ElemImg.setAttribute('height',imgheight); + // get current height and width + this.wCur = $('mainImage').offsetWidth; + this.hCur = $('mainImage').offsetHeight; - $('divimage').innerHTML = ''; - $('divimage').appendChild(ElemImg); - - /** - * set title - */ - $('title').innerHTML = xmldoc.getElementsByTagName('title').item(0).firstChild.data; + // scalars based on change from old to new + this.xScale = ((imgWidth + (borderSize * 2)) / this.wCur) * 100; + this.yScale = ((imgHeight + (borderSize * 2)) / this.hCur) * 100; - /** - * set current thumb - */ - $('thumbnavi_currentthumb').innerHTML = '<a href="javascript:loadImage(' + imgid + ')"><img class="img_currentthumb" src="' + thumb_src + imgid + '" /></a>'; + // calculate size difference between new and old image, and resize if necessary + wDiff = (this.wCur - borderSize * 2) - imgWidth; + hDiff = (this.hCur - borderSize * 2) - imgHeight; - /** - * set prev thumbs - */ - $('thumbnavi_prevthumb').innerHTML = ''; - if(xmldoc.getElementsByTagName('prevthumb').length > 0) - { - for(var i = 0; i < xmldoc.getElementsByTagName('prevthumb').length; i++) - { - var prevThumbId = xmldoc.getElementsByTagName('prevthumb').item(i).firstChild.data; + if(!( hDiff == 0)){ new Effect.Scale('mainImage', this.yScale, {scaleX: false, duration: resizeDuration, queue: 'front'}); } + if(!( wDiff == 0)){ new Effect.Scale('mainImage', this.xScale, {scaleY: false, delay: resizeDuration, duration: resizeDuration}); } - var ElemImg = Builder.node('img', {className: 'img_prevnextthumb', src: thumb_src + prevThumbId}); - var ElemA = Builder.node('a', {href: 'javascript:loadImage(' + prevThumbId + ')'}); - var ElemDiv = Builder.node('div', {className: 'thumbnavi_prevnextthumb'}); - - ElemA.appendChild( ElemImg ); - ElemDiv.appendChild( ElemA ); - $('thumbnavi_prevthumb').appendChild(ElemDiv); + // if new and old image are same size and no scaling transition is necessary, + // do a quick pause to prevent image flicker. + if((hDiff == 0) && (wDiff == 0)){ + if (navigator.appVersion.indexOf("MSIE")!=-1){ pause(250); } else { pause(100);} } - } - /** - * set next thumbs - */ - $('thumbnavi_nextthumb').innerHTML = ''; - if(xmldoc.getElementsByTagName('nextthumb').length > 0) - { - for(var i = 0; i < xmldoc.getElementsByTagName('nextthumb').length; i++) - { - var nextThumbId = xmldoc.getElementsByTagName('nextthumb').item(i).firstChild.data; + + /*Element.setHeight('prevLink', imgHeight); + Element.setHeight('nextLink', imgHeight); + Element.setWidth( 'imageDataContainer', imgWidth + (borderSize * 2));*/ - var ElemImg = Builder.node('img', {className: 'img_prevnextthumb', src: thumb_src + nextThumbId}); - var ElemA = Builder.node('a', {href: 'javascript:loadImage(' + nextThumbId + ')'}); - var ElemDiv = Builder.node('div', {className: 'thumbnavi_prevnextthumb'}); - - ElemA.appendChild( ElemImg ); - ElemDiv.appendChild( ElemA ); - $('thumbnavi_nextthumb').appendChild(ElemDiv); - } - } + this.showImage(); + }, + + // + // showImage() + // Display image and begin preloading neighbors. + // + showImage: function(){ + Element.hide('divloading'); + new Effect.Appear('mainImage', { duration: 0.5, queue: 'end', afterFinish: function(){ myLinImage.setImageData(); } }); +// this.preloadNeighborImages(); + }, - /** - * set meta data - */ - if(xmldoc.getElementsByTagName('meta').length > 0) - { - $('divmeta').innerHTML = ''; - for(var i = 0; i < xmldoc.getElementsByTagName('meta').length; i++) + setImageData: function() { + + /** + * set title + */ + $('title').innerHTML = xmlDoc.getElementsByTagName('title').item(0).firstChild.data; + + /** + * set current thumb + */ + $('thumbnavi_currentthumb').innerHTML = '<a href="javascript:loadImage(' + imgid + ')"><img class="img_currentthumb" src="' + thumb_src + imgid + '" /></a>'; + + /** + * set prev thumbs + */ + $('thumbnavi_prevthumb').innerHTML = ''; + if(xmlDoc.getElementsByTagName('prevthumb').length > 0) { - var meta = xmldoc.getElementsByTagName('meta').item(i); - var metaname = document.createTextNode( meta.getElementsByTagName('name').item(0).firstChild.data + ': ' ); - var metavalue = document.createTextNode( meta.getElementsByTagName('value').item(0).firstChild.data ); - - $('divmeta').appendChild(metaname); - $('divmeta').appendChild(metavalue); - $('divmeta').appendChild( document.createElement("br") ); + for(var i = 0; i < xmlDoc.getElementsByTagName('prevthumb').length; i++) + { + var prevThumbId = xmlDoc.getElementsByTagName('prevthumb').item(i).firstChild.data; + + var ElemImg = Builder.node('img', {className: 'img_prevnextthumb', src: thumb_src + prevThumbId}); + var ElemA = Builder.node('a', {href: 'javascript:loadImage(' + prevThumbId + ')'}); + var ElemDiv = Builder.node('div', {className: 'thumbnavi_prevnextthumb'}); + + ElemA.appendChild( ElemImg ); + ElemDiv.appendChild( ElemA ); + $('thumbnavi_prevthumb').appendChild(ElemDiv); + } } - } - /** - * set comments - */ - $('divcomments').innerHTML = ''; - if(xmldoc.getElementsByTagName('comment').length > 0) - { - for(var i = 0; i < xmldoc.getElementsByTagName('comment').length; i++) + /** + * set next thumbs + */ + $('thumbnavi_nextthumb').innerHTML = ''; + if(xmlDoc.getElementsByTagName('nextthumb').length > 0) { - var comment = xmldoc.getElementsByTagName('comment').item(i); - var commenttime = document.createTextNode( comment.getElementsByTagName('time').item(0).firstChild.data + ' ' ); - var commentauthor = document.createTextNode( comment.getElementsByTagName('author').item(0).firstChild.data ); - var commenttext = document.createTextNode( comment.getElementsByTagName('text').item(0).firstChild.data ); + for(var i = 0; i < xmlDoc.getElementsByTagName('nextthumb').length; i++) + { + var nextThumbId = xmlDoc.getElementsByTagName('nextthumb').item(i).firstChild.data; + + var ElemImg = Builder.node('img', {className: 'img_prevnextthumb', src: thumb_src + nextThumbId}); + var ElemA = Builder.node('a', {href: 'javascript:loadImage(' + nextThumbId + ')'}); + var ElemDiv = Builder.node('div', {className: 'thumbnavi_prevnextthumb'}); + + ElemA.appendChild( ElemImg ); + ElemDiv.appendChild( ElemA ); + $('thumbnavi_nextthumb').appendChild(ElemDiv); + } + } + + /** + * set meta data + */ + if(xmlDoc.getElementsByTagName('meta').length > 0) + { + $('divmeta').innerHTML = ''; + + for(var i = 0; i < xmlDoc.getElementsByTagName('meta').length; i++) + { + var meta = xmlDoc.getElementsByTagName('meta').item(i); + var metaname = document.createTextNode( meta.getElementsByTagName('name').item(0).firstChild.data + ': ' ); + var metavalue = document.createTextNode( meta.getElementsByTagName('value').item(0).firstChild.data ); + + $('divmeta').appendChild(metaname); + $('divmeta').appendChild(metavalue); + $('divmeta').appendChild( document.createElement("br") ); + } + } + + /** + * set comments + */ + $('divcomments').innerHTML = ''; + if(xmlDoc.getElementsByTagName('comment').length > 0) + { + for(var i = 0; i < xmlDoc.getElementsByTagName('comment').length; i++) + { + var comment = xmlDoc.getElementsByTagName('comment').item(i); + var commenttime = document.createTextNode( comment.getElementsByTagName('time').item(0).firstChild.data + ' ' ); + var commentauthor = document.createTextNode( comment.getElementsByTagName('author').item(0).firstChild.data ); + var commenttext = document.createTextNode( comment.getElementsByTagName('text').item(0).firstChild.data ); + + var ElemDiv = document.createElement("div"); + ElemDiv.setAttribute('class','comments'); + ElemDiv.appendChild(commenttime); + ElemDiv.appendChild(commentauthor); + ElemDiv.appendChild( document.createElement("br") ); + ElemDiv.appendChild(commenttext); + ElemDiv.appendChild( document.createElement("br") ); + + $('divcomments').appendChild(ElemDiv); + } + } + + /** + * set positions of info link + */ + $('divinfolinks').style.top = $('mainImage').offsetTop + $('mainImage').offsetHeight; + $('divinfolinks').style.left = $('mainImage').offsetLeft + $('mainImage').offsetWidth - $('divinfolinks').offsetWidth; + + }, + // end function setImageData() + // + // + // + // enableKeyboardNav() + // + enableKeyboardNav: function() { + document.onkeydown = this.keyboardAction; + }, - var ElemDiv = document.createElement("div"); - ElemDiv.setAttribute('class','comments'); - ElemDiv.appendChild(commenttime); - ElemDiv.appendChild(commentauthor); - ElemDiv.appendChild( document.createElement("br") ); - ElemDiv.appendChild(commenttext); - ElemDiv.appendChild( document.createElement("br") ); + // + // disableKeyboardNav() + // + disableKeyboardNav: function() { + document.onkeydown = ''; + }, - $('divcomments').appendChild(ElemDiv); + // + // keyboardAction() + // + keyboardAction: function(e) { + if (e == null) { // ie + keycode = event.keyCode; + } else { // mozilla + keycode = e.which; } + + key = String.fromCharCode(keycode).toLowerCase(); + + if((key == 'x') || (key == 'o') || (key == 'c')){ // close lightbox + myLinImage.end(); + } else if(key == 'p'){ // display previous image + if(activeImage != 0){ + myLinImage.disableKeyboardNav(); + myLinImage.changeImage(activeImage - 1); + } + } else if(key == 'n'){ // display next image + if(activeImage != (imageArray.length - 1)){ + myLinImage.disableKeyboardNav(); + myLinImage.changeImage(activeImage + 1); + } + } + + + }, + + // + // preloadNeighborImages() + // Preload previous and next images. + // + preloadNeighborImages: function(){ + + if((imageArray.length - 1) > activeImage){ + preloadNextImage = new Image(); + preloadNextImage.src = setImageUrl(imageArray[activeImage + 1][0]); + } + if(activeImage > 0){ + preloadPrevImage = new Image(); + preloadPrevImage.src = setImageUrl(imageArray[activeImage - 1][0]); + } + } - - /** - * set positions of info link - */ - $('divinfolinks').style.top = $('mainimage').offsetTop + $('mainimage').offsetHeight; - $('divinfolinks').style.left = $('mainimage').offsetLeft + $('mainimage').offsetWidth - $('divinfolinks').offsetWidth; +} -} // end function setImageData() +// ----------------------------------------------------------------------------------- +var colorinfoactive; +var colorinfonotactive; + + var showhide = 'hide'; function showImgInfo() { @@ -195,14 +305,11 @@ /** * set position */ - $('divmeta').style.top = $('mainimage').offsetTop + 50; - $('divmeta').style.left = $('mainimage').offsetLeft + 50; + $('divmeta').style.top = $('mainImage').offsetTop + 50; + $('divmeta').style.left = $('mainImage').offsetLeft + 50; - /** - * fade in - */ - new Effect.Appear('divmeta', { duration: 0.5, from: 0.0, to: 1.0 }); - new Effect.Appear('divimage', { duration: 0.5, from: 1.0, to: 0.3 }); + new Effect.Appear('divmeta', { duration: 0.5 }); //, from: 0.0, to: 1.0 + new Effect.Fade('divimage', { duration: 0.5, from: 1.0, to: 0.2 }); $('hrefinfolinks').style.color = colorinfonotactive; } @@ -210,8 +317,8 @@ { showhide = 'hide'; - new Effect.Appear('divmeta', { duration: 0.5, from: 1.0, to: 0.0 }); - new Effect.Appear('divimage', { duration: 0.5, from: 0.3, to: 1.3 }); + new Effect.Fade('divmeta', { duration: 0.5 }); // , from: 1.0, to: 0.0 + new Effect.Appear('divimage', { duration: 0.5, from: 0.3, to: 1.0 }); $('hrefinfolinks').style.color = colorinfoactive; } @@ -277,4 +384,16 @@ } return returnarray; -} \ No newline at end of file +} + + +/** + * init on finished page load + */ +function initLinImage() +{ + setInfoColors(); + var myLinImage = new LinImage(); + myLinImage.loadStartData(); +} +Event.observe(window, 'load', initLinImage, false); Modified: trunk/linpha2/templates/default/css/view_img.css =================================================================== --- trunk/linpha2/templates/default/css/view_img.css 2006-10-07 14:25:58 UTC (rev 4575) +++ trunk/linpha2/templates/default/css/view_img.css 2006-10-07 18:12:35 UTC (rev 4576) @@ -21,10 +21,11 @@ #divmeta { position: absolute; text-align: left; + padding: 10px; + border: 1px solid black; } #divinfolinks { position: absolute; -/* border: 1px solid black;*/ } Modified: trunk/linpha2/templates/default/view_img.head.php =================================================================== --- trunk/linpha2/templates/default/view_img.head.php 2006-10-07 14:25:58 UTC (rev 4575) +++ trunk/linpha2/templates/default/view_img.head.php 2006-10-07 18:12:35 UTC (rev 4576) @@ -1,11 +1,12 @@ + <script language="JavaScript" type="text/javascript"> -var imagedata_url = '<?php echo convert_amp($GLOBALS['linpha']->template->URL_base); ?>'; -var image_src = '<?php echo LINPHA_DIR.'/get_image.php?id='; ?>'; -var thumb_src = '<?php echo LINPHA_DIR.'/get_thumb.php?id='; ?>'; -var image_size = <?php echo $GLOBALS['linpha']->sql->config->value['sys_style_image_size']; ?>; +var xmlUrl = '<?php echo convert_amp($GLOBALS['linpha']->template->URL_base); ?>'; +var imageSrc = '<?php echo LINPHA_DIR.'/get_image.php?id='; ?>'; +var thumbSrc = '<?php echo LINPHA_DIR.'/get_thumb.php?id='; ?>'; +var imageSize = <?php echo $GLOBALS['linpha']->sql->config->value['sys_style_image_size']; ?>; +var startImgId = <?php echo $GLOBALS['linpha']->imgview->id_current; ?>; </script> -<script type="text/javascript" language="javascript" src="<?php echo LINPHA_DIR; ?>/lib/js/LinImage.js"> </script> - <script type="text/javascript" language="javascript" src="<?php echo LINPHA_DIR; ?>/lib/js/prototype.js"></script> <script type="text/javascript" language="javascript" src="<?php echo LINPHA_DIR; ?>/lib/js/scriptaculous.js?load=effects,builder"></script> +<script type="text/javascript" language="javascript" src="<?php echo LINPHA_DIR; ?>/lib/js/LinImage.js"> </script> Modified: trunk/linpha2/templates/default/view_img.html.php =================================================================== --- trunk/linpha2/templates/default/view_img.html.php 2006-10-07 14:25:58 UTC (rev 4575) +++ trunk/linpha2/templates/default/view_img.html.php 2006-10-07 18:12:35 UTC (rev 4576) @@ -28,8 +28,14 @@ <noscript><h1><?php echo i18n("If you have just disabled Javascript, you will need to restart your browser."); ?></h1></noscript> <!-- show image --> - <div id="divimage"></div> + <div id="divimage"> + <img id="mainImage"> + </div> + <div id="divloading"> + <img src="<?php echo LINPHA_DIR; ?>/lib/classes/lightbox/images/loading.gif"> + </div> + <div id="divmeta" style="display: none;"></div> <div id="divinfolinks" style="color: grey;"> @@ -76,20 +82,3 @@ <img src="<?php echo LINPHA_DIR.'/templates/'.$GLOBALS['linpha']->template->template_name.'/images/bl.gif'; ?>" alt="" width="15" height="15" class="corner" style="display: none" /> </div> </div> - -<!-- -<div id="divright"> - <div class="roundtop"> - <img src="<?php echo LINPHA_DIR.'/templates/'.$GLOBALS['linpha']->template->template_name.'/images/tl.gif'; ?>" alt="" width="15" height="15" class="corner" style="display: none" /> - </div> - <div id="right"></div> - <div class="roundbottom"> - <img src="<?php echo LINPHA_DIR.'/templates/'.$GLOBALS['linpha']->template->template_name.'/images/bl.gif'; ?>" alt="" width="15" height="15" class="corner" style="display: none" /> - </div> -</div> ---> - -<script language="JavaScript" type="text/javascript"> -setInfoColors(); -loadImage(<?php echo $GLOBALS['linpha']->imgview->id_current; ?>); -</script> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |