Ajout script de regénération des photos (vigettes, retailles, zoom).
[Portfolio.git] / skins / photo_film_viewer.js
index cf55fd9..70f8b99 100644 (file)
@@ -2,8 +2,8 @@
 * © 2008 Benoît Pin – Centre de recherche en informatique – École des mines de Paris
 * http://plinn.org
 * Licence Creative Commons http://creativecommons.org/licenses/by-nc/2.0/
 * © 2008 Benoît Pin – Centre de recherche en informatique – École des mines de Paris
 * http://plinn.org
 * Licence Creative Commons http://creativecommons.org/licenses/by-nc/2.0/
-* $Id: photo_film_viewer.js 1303 2009-08-21 22:19:05Z pin $
-* $URL: http://svn.luxia.fr/svn/labo/projects/zope/Portfolio/trunk/skins/photo_film_viewer.js $
+* 
+* 
 */
 
 var FilmSlider;
 */
 
 var FilmSlider;
@@ -92,18 +92,18 @@ FilmSlider.prototype.resizeSlider = function(evt) {
        var filmWidth = this.slideSize * this.filmLength;
        var sliderRatio = this.sliderRatio =  filmBarWidth / filmWidth;
        var sliderWidth = filmBarWidth * sliderRatio;
        var filmWidth = this.slideSize * this.filmLength;
        var sliderRatio = this.sliderRatio =  filmBarWidth / filmWidth;
        var sliderWidth = filmBarWidth * sliderRatio;
+       this.rail.style.width = filmBarWidth + 'px';
+       this.rail.style.display = 'block';
+       this.rail.style.visibility = 'visible';
        if (sliderRatio < 1) {
        if (sliderRatio < 1) {
-               this.rail.style.width = filmBarWidth + 'px';
                this.slider.style.width = Math.round(sliderWidth) + 'px';
                this.slider.style.width = Math.round(sliderWidth) + 'px';
-               this.rail.style.display = 'block';
-               this.rail.style.visibility = 'visible';
+               this.slider.style.visibility = 'visible';
        }
        else {
        }
        else {
-               this.rail.style.display = 'none';
-               this.rail.style.visibility = 'hidden';
+               this.slider.style.visibility = 'hidden';
        }
        
        }
        
-       this.winSize = {'width'  : getWindowWidth(),
+       this.winSize = {'width'  : getWindowWidth(),
                                        'height' : getWindowHeight()};
        this.maxRightPosition = filmBarWidth - sliderWidth
        this.sliderSpeedRatio = - (filmBarWidth - sliderWidth) / (filmWidth - filmBarWidth);
                                        'height' : getWindowHeight()};
        this.maxRightPosition = filmBarWidth - sliderWidth
        this.sliderSpeedRatio = - (filmBarWidth - sliderWidth) / (filmWidth - filmBarWidth);
@@ -122,9 +122,10 @@ FilmSlider.prototype.fitToScreen = function(evt) {
 
 FilmSlider.prototype._fitToScreen = function(evt) {
        var wh = getWindowHeight();
 
 FilmSlider.prototype._fitToScreen = function(evt) {
        var wh = getWindowHeight();
-       var ch = document.body.clientHeight;
+       var rb = getObjectTop(this.rail) + getObjectHeight(this.rail); // rail bottom
+       var delta = wh - rb
        var sh = getObjectHeight(this.stretchable);
        var sh = getObjectHeight(this.stretchable);
-       var newSize = sh + wh - ch;
+       var newSize = sh + delta;
        this.stretchable.style.height = newSize + 'px';
        
        var ratio = this.image.height / this.image.width;
        this.stretchable.style.height = newSize + 'px';
        
        var ratio = this.image.height / this.image.width;
@@ -304,12 +305,13 @@ FilmSlider.prototype.thumbnailClickHandler = function(evt) {
                disableDefault(evt);
                disablePropagation(evt);
                target.blur();
                disableDefault(evt);
                disablePropagation(evt);
                target.blur();
+        history.pushState(target.href, '', target.href);
                
                var imgBaseUrl = target.href;
                var canonicalImgUrl;
                if (this.ctxUrlTranslation[0])
                        canonicalImgUrl = imgBaseUrl.replace(this.ctxUrlTranslation[0],
                
                var imgBaseUrl = target.href;
                var canonicalImgUrl;
                if (this.ctxUrlTranslation[0])
                        canonicalImgUrl = imgBaseUrl.replace(this.ctxUrlTranslation[0],
-                                                                                                this.ctxUrlTranslation[1]);
+                                                                                                this.ctxUrlTranslation[1]);
                else
                        canonicalImgUrl = imgBaseUrl;
                
                else
                        canonicalImgUrl = imgBaseUrl;
                
@@ -570,8 +572,7 @@ FilmSlider.prototype.keyPressHandler = function(evt) {
        var target = getTargetedObject(evt);
        if (target.tagName == 'INPUT' || target.tagName== 'TEXTAREA')
                return;
        var target = getTargetedObject(evt);
        if (target.tagName == 'INPUT' || target.tagName== 'TEXTAREA')
                return;
-       var evt = evt = getEventObject(evt);
-       evt = getEventObject(evt);
+       var evt = getEventObject(evt);
        var charPress = String.fromCharCode((evt.keyCode) ? evt.keyCode : evt.which);
        switch(charPress) {
                case 'f':
        var charPress = String.fromCharCode((evt.keyCode) ? evt.keyCode : evt.which);
        switch(charPress) {
                case 'f':
@@ -620,30 +621,52 @@ FilmSlider.prototype.refreshImage = function() {
 };
 
 FilmSlider.prototype.startSlideShow = function() {
 };
 
 FilmSlider.prototype.startSlideShow = function() {
-       this.slideShowSlide = this.selectedSlide;
-       this.nextSlideShowSlide = this.selectedSlide;
+       this.slideShowSlide = this.pendingSlideShowSlide = this.selectedSlide;
        return this.slideShowSlide.href;
 };
 
 FilmSlider.prototype.slideShowNext = function() {
        return this.slideShowSlide.href;
 };
 
 FilmSlider.prototype.slideShowNext = function() {
-       this.slideShowSlide = this.nextSlideShowSlide;
        var nextSlide = this.slideShowSlide.parentNode.nextSibling;
        if (nextSlide && nextSlide.nodeType==3)
                nextSlide = nextSlide.nextSibling;      
 
        if (nextSlide) {
                nextSlide = nextSlide.getElementsByTagName('a')[0];
        var nextSlide = this.slideShowSlide.parentNode.nextSibling;
        if (nextSlide && nextSlide.nodeType==3)
                nextSlide = nextSlide.nextSibling;      
 
        if (nextSlide) {
                nextSlide = nextSlide.getElementsByTagName('a')[0];
-               this.nextSlideShowSlide = nextSlide;
-               return nextSlide.href;
+               this.pendingSlideShowSlide = nextSlide;
+               return this.pendingSlideShowSlide.href;
        }
        else {
                var row = this.slideShowSlide.parentNode.parentNode;
                var first = row.firstChild;
                if (first.nodeType==3)
                        first = first.nextSibling;
        }
        else {
                var row = this.slideShowSlide.parentNode.parentNode;
                var first = row.firstChild;
                if (first.nodeType==3)
                        first = first.nextSibling;
-               this.nextSlideShowSlide = first.getElementsByTagName('a')[0];
-               return this.nextSlideShowSlide.href;
+               this.pendingSlideShowSlide = first.getElementsByTagName('a')[0];
+               return this.pendingSlideShowSlide.href;
+       }
+};
+
+FilmSlider.prototype.slideShowPrevious = function() {
+       var previousSlide = this.slideShowSlide.parentNode.previousSibling;
+       if (previousSlide && previousSlide.nodeType==3)
+               previousSlide = previousSlide.previousSibling;
+
+       if (previousSlide) {
+               previousSlide = previousSlide.getElementsByTagName('a')[0];
+               this.pendingSlideShowSlide = previousSlide;
+               return this.pendingSlideShowSlide.href;
        }
        }
+       else {
+               var row = this.slideShowSlide.parentNode.parentNode;
+               var last = row.lastChild;
+               if (last.nodeType==3)
+                       last = last.previousSibling;
+               this.pendingSlideShowSlide = last.getElementsByTagName('a')[0];
+               return this.pendingSlideShowSlide.href;
+       }
+};
+
+FilmSlider.prototype.slideShowImageLoaded = function() {
+       this.slideShowSlide = this.pendingSlideShowSlide;
 };
 
 FilmSlider.prototype.stopSlideShow = function() {
 };
 
 FilmSlider.prototype.stopSlideShow = function() {