From: Benoît Pin <benoit.pin@gmail.com>
Date: Mon, 7 Apr 2014 19:25:24 +0000 (+0200)
Subject: Une fois la page chargée, manifestement, toutes les tailles ne sont pas complètement... 
X-Git-Url: https://svn.cri.ensmp.fr/git/Portfolio.git/commitdiff_plain/572f5798d7d6d3e73cffe0bfabd6e85542fde43f

Une fois la page chargée, manifestement, toutes les tailles ne sont pas complètement stables… On ajoute un polling pour contourner le problème.
---

diff --git a/skins/photo_film_viewer.js b/skins/photo_film_viewer.js
index 2ebe6ca..5ba1b5b 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;
@@ -78,13 +79,8 @@ FilmSlider = function(filmBar, slider, ctxInfos, image, toolbar, breadcrumbs) {
 
 
 FilmSlider.prototype.resizeSlider = function(evt) {
-	var filmBarWidth = getObjectWidth(this.filmBar);
-	if (!filmBarWidth) {
-		var thisSlider = this;
-		addListener(window, 'load', function(evt){thisSlider.resizeSlider(evt);});
-		return;
-	}
-	
+	var filmBarWidth = this.filmBarWidth;
+	if (!filmBarWidth) { return; }
 	var filmWidth = this.slideSize * this.filmLength;
 	var sliderRatio = this.sliderRatio =  filmBarWidth / filmWidth;
 	var sliderWidth = filmBarWidth * sliderRatio;
@@ -110,6 +106,39 @@ 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();
+	}
+};
+
+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, this._checkSizeIntervalId;
+};
+
 FilmSlider.prototype.fitToScreen = function(evt) {
 	this._fitToScreen();
 	var thisSlider = this;
@@ -216,6 +245,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);