/*
-* © 2008 Benoît Pin – Centre de recherche en informatique – École des mines de Paris
+* © 2008-2014 Benoît Pin – Centre de recherche en informatique – MINES ParisTech
* 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;
this.buttons = new Array();
this.toolbar = toolbar;
- var bcElements = breadcrumbs.getElementsByTagName('a');
- this.lastBCElement = bcElements[bcElements.length-1];
- var imgSrcParts = image.src.split('/');
- this.lastBCElement.innerHTML = imgSrcParts[imgSrcParts.length-2];
+ if (breadcrumbs) {
+ var bcElements = breadcrumbs.getElementsByTagName('a');
+ this.lastBCElement = bcElements[bcElements.length-1];
+ var imgSrcParts = image.src.split('/');
+ this.lastBCElement.innerHTML = imgSrcParts[imgSrcParts.length-2];
+ this.hasBreadcrumbs = true;
+ }
+ else {
+ this.hasBreadcrumbs = false;
+ }
var buttons = toolbar.getElementsByTagName('img');
var b, name;
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) {
- this.rail.style.width = filmBarWidth + '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 {
- 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);
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 newSize = sh + wh - ch;
+ var newSize = sh + delta;
this.stretchable.style.height = newSize + 'px';
var ratio = this.image.height / this.image.width;
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],
- this.ctxUrlTranslation[1]);
+ this.ctxUrlTranslation[1]);
else
canonicalImgUrl = imgBaseUrl;
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':
switch (element.nodeName) {
case 'fragment' :
var dest = document.getElementById(element.getAttribute('id'));
- dest.innerHTML = element.firstChild.nodeValue;
+ if (dest) { dest.innerHTML = element.firstChild.nodeValue; }
break;
case 'imageattributes' :
var link = this.buttons['back_to_portfolio'].parentNode;
else if(buyable == 'False')
link.className = 'hidden';
this.image.alt = element.getAttribute('alt');
- this.lastBCElement.href = element.getAttribute('lastBcUrl');
- this.lastBCElement.innerHTML = element.getAttribute('img_id');
+ this.updateBreadcrumbs(element.getAttribute('lastBcUrl'),
+ element.getAttribute('img_id'));
break;
}
}
this.image.parentNode.className = '';
};
+FilmSlider.prototype.updateBreadcrumbs = function(url, title) {
+ if (this.hasBreadcrumbs) {
+ this.lastBCElement.href = element.getAttribute('lastBcUrl');
+ this.lastBCElement.innerHTML = element.getAttribute('img_id');
+ }
+};
+
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() {
- 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];
- 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;
- 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() {
raiseMouseEvent(this.slideShowSlide, 'click');
var index = parseInt(this.selectedSlide.getAttribute('portfolio:position'));