X-Git-Url: https://svn.cri.ensmp.fr/git/Portfolio.git/blobdiff_plain/c41e535e2e805f096dfe6554c0ab760350bb3729..1a28edcbf9b0c46fbab9bcc9fff0b065349f8f24:/skins/photo_film_viewer.js

diff --git a/skins/photo_film_viewer.js b/skins/photo_film_viewer.js
index c9615fb..566984a 100644
--- a/skins/photo_film_viewer.js
+++ b/skins/photo_film_viewer.js
@@ -17,6 +17,7 @@ var DEFAULT_IMAGE_SIZES = [500, 600, 800];
 FilmSlider = function(filmBar, slider, ctxInfos, image, toolbar, breadcrumbs) {
 	var thisSlider = this;
 	this.filmBar = filmBar;
+	this.filmBarWidth = getObjectWidth(this.filmBar);
 	var film = filmBar.firstChild;
 	if (film.nodeType === 3) { film = film.nextSibling; }
 	this.film = film;
@@ -72,42 +73,82 @@ FilmSlider = function(filmBar, slider, ctxInfos, image, toolbar, breadcrumbs) {
 					   'out' :	function(evt){thisSlider.mouseOutHandler(evt);}
 					  };
 
-	this.resizeSlider();
+	if (browser.isMobile) {
+		this.rail.className = 'hidden';
+	}
+	else { 
+		this.resizeSlider();
+	}
 	this.addEventListeners();
 };
 
-
-FilmSlider.prototype.resizeSlider = function(evt) {
-	var filmBarWidth = getObjectWidth(this.filmBar);
-	if (!filmBarWidth) {
-		var thisSlider = this;
-		addListener(window, 'load', function(evt){thisSlider.resizeSlider(evt);});
-		return;
-	}
+if (!browser.isMobile) {
+	FilmSlider.prototype.resizeSlider = function(evt) {
+		var filmBarWidth = this.filmBarWidth;
+		if (!filmBarWidth) { return; }
+		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.slider.style.width = Math.round(sliderWidth) + 'px';
+			this.slider.style.visibility = 'visible';
+		}
+		else {
+			this.slider.style.visibility = 'hidden';
+		}
 	
-	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.slider.style.width = Math.round(sliderWidth) + 'px';
-		this.slider.style.visibility = 'visible';
-	}
-	else {
-		this.slider.style.visibility = 'hidden';
+		this.winSize = {'width'	 : getWindowWidth(),
+						'height' : getWindowHeight()};
+		this.maxRightPosition = filmBarWidth - sliderWidth;
+		this.sliderSpeedRatio = - (filmBarWidth - sliderWidth) / (filmWidth - filmBarWidth);
+		if (!this.initialized) {
+			this.centerSlide(this.center);
+			this.selectedSlide = this.filmBar.getElementsByTagName('img')[this.center].parentNode;
+			this.initialized = true;
+		}
+	};
+}
+
+else {
+	// pas de barre de scroll horizontal pour les tablettes
+	FilmSlider.prototype.resizeSlider = function(evt) {};
+}
+
+FilmSlider.prototype._checkSizeAfterLoad = function(evt) {
+	this._barSizes = [];
+	this.filmBarWidth = this._barSizes[this._barSizes.length] = getObjectWidth(this.filmBar);
+	this.resizeSlider();
+	var self = this;
+	this._checkSizeIntervalId = setInterval(function(evt){self._checkSize(evt);}, 25);
+	setTimeout(function(evt){self._checkSizeStability();}, 250);
+};
+
+FilmSlider.prototype._checkSize = function(evt) {
+	this._barSizes[this._barSizes.length] = getObjectWidth(this.filmBar);
+	if (this._barSizes.length >= 2 &&
+		this._barSizes[this._barSizes.length-2] !== this._barSizes[this._barSizes.length-1]) {
+		this.filmBarWidth = this._barSizes[this._barSizes.length-1];
+		this.initialized = false;
+		this.resizeSlider();
 	}
-	
-	this.winSize = {'width'	 : getWindowWidth(),
-					'height' : getWindowHeight()};
-	this.maxRightPosition = filmBarWidth - sliderWidth;
-	this.sliderSpeedRatio = - (filmBarWidth - sliderWidth) / (filmWidth - filmBarWidth);
-	if (!this.initialized) {
-		this.centerSlide(this.center);
-		this.selectedSlide = this.filmBar.getElementsByTagName('img')[this.center].parentNode;
-		this.initialized = true;
+};
+
+FilmSlider.prototype._checkSizeStability = function(evt) {
+	var self = this;
+	var i;
+	for (i=0 ; i<this._barSizes.length - 1 ; i++) {
+		if (this._barSizes[i] !== this._barSizes[i+1]) {
+			this._barSizes = [];
+			setTimeout(function(evt){self._checkSizeStability();}, 250);
+			return;
+		}
 	}
+	clearInterval(this._checkSizeIntervalId);
+	delete this._barSizes;
+	delete this._checkSizeIntervalId;
 };
 
 FilmSlider.prototype.fitToScreen = function(evt) {
@@ -118,7 +159,12 @@ FilmSlider.prototype.fitToScreen = function(evt) {
 
 FilmSlider.prototype._fitToScreen = function(evt) {
 	var wh = getWindowHeight();
-	var rb = getObjectTop(this.rail) + getObjectHeight(this.rail); // rail bottom
+	if (!browser.isMobile) {
+		var rb = getObjectTop(this.rail) + getObjectHeight(this.rail); // rail bottom
+	}
+	else {
+		var rb = getObjectTop(this.filmBar) + getObjectHeight(this.filmBar); // film bottom
+	}
 	var delta = wh - rb;
 	var sh = getObjectHeight(this.stretchable);
 	var newSize = sh + delta;
@@ -216,6 +262,7 @@ FilmSlider.prototype.addEventListeners = function() {
 	addListener(this.filmBar, 'click', function(evt){thisSlider.thumbnailClickHandler(evt);});
 	addListener(this.toolbar, 'click', function(evt){thisSlider.toolbarClickHandler(evt);});
 	addListener(window, 'load', function(evt){thisSlider.fitToScreen(evt);});
+	addListener(window, 'load', function(evt){thisSlider._checkSizeAfterLoad(evt);});
 	
 	// dd listeners
 	addListener(this.slider, 'mousedown', this.ddHandlers.down);
@@ -230,6 +277,11 @@ FilmSlider.prototype.addEventListeners = function() {
 	else if (browser.isIE6up) {
 		addListener(this.filmBar, 'mousewheel', function(evt){thisSlider.mouseWheelHandler(evt);});
 	}
+	if (browser.isMobile) {
+		this.filmBar.addEventListener('touchstart', function(evt){thisSlider.touchStartHandler(evt);}, false);
+		this.filmBar.addEventListener('touchmove', function(evt){thisSlider.touchMoveHandler(evt);}, false);
+		this.filmBar.addEventListener('touchend', function(evt){thisSlider.touchEndHandler(evt);}, false);
+	}
 	
 	addListener(document, 'keydown', function(evt){thisSlider.keyDownHandler(evt);});
 	addListener(document, 'keypress', function(evt){thisSlider.keyPressHandler(evt);});
@@ -357,7 +409,7 @@ FilmSlider.prototype.thumbnailClickHandler = function(evt) {
 					break;
 				case 4 :
 					hideProgressImage();
-					if (req.status === '200') { thisFS.populateViewer(req); }
+					if (req.status === 200) { thisFS.populateViewer(req); }
 					break;
 			}
 		};
@@ -533,6 +585,22 @@ else if (browser.isIE6up) {
 	};
 }
 
+FilmSlider.prototype.touchStartHandler = function(evt) {
+	this.filmStartX = parseInt(this.film.style.left, 10);
+	this.touchStartX = evt.pageX;
+};
+
+FilmSlider.prototype.touchMoveHandler = function(evt) {
+	var delta = this.touchStartX - evt.pageX;
+	var posX = Math.min(0, this.filmStartX - delta);
+	this.film.style.left = String(posX) + 'px';
+};
+
+FilmSlider.prototype.touchEndHandler = function(evt) {
+	this.touchStartX = undefined;
+};
+
+
 FilmSlider.prototype.keyDownHandler = function(evt) {
 	evt = getEventObject(evt);
 	switch (evt.keyCode) {
@@ -573,13 +641,13 @@ FilmSlider.prototype.populateViewer = function(req) {
 				break;
 			case 'imageattributes' :
 				var link = this.buttons.back_to_portfolio.parentNode;
-				link.href = element.getAttribute('backToContextUrl');
+				link.href = element.getAttribute('back_to_context_url');
 				link = this.buttons.show_buyable.parentNode;
 				var buyable = element.getAttribute('buyable');
 				if(buyable === 'True') { link.className = null; }
 				else if(buyable === 'False') { link.className = 'hidden'; }
 				this.image.alt = element.getAttribute('alt');
-				this.updateBreadcrumbs(element.getAttribute('lastBcUrl'),
+				this.updateBreadcrumbs(element.getAttribute('last_bc_url'),
 									   element.getAttribute('img_id'));
 				break;
 		}