diff --git a/script/film.js b/script/film.js index ddbd960..bf4d6d5 100755 --- a/script/film.js +++ b/script/film.js @@ -7,7 +7,6 @@ function Film() this._ban = {status:false, reason:''}; this._timetable = {}; this.$Main = $('main'); - this.$Footer = $('footer'); this.ban = function(bStatus, sReason) { @@ -18,7 +17,7 @@ function Film() this._ban.status = true; this._ban.reason = sReason; this.error('Hidding "'+this.name()+'". Ban reason: '+this.ban().reason); - this.anchor().hide(); + this.anchor().addClass('banned'); } else this.error('setting ban status with no reason'); } @@ -66,22 +65,30 @@ function Film() else this.error('Trying to set an empty film attribute: '+sName); } }; - + /* this.removeSpinner = function() { this.anchor().find('.timetable').removeClass('fa fa-fw fa-spinner fa-spin'); } + */ + this.getRank = function() + { + var sEdito = this.edito() || ''; + var iRank = 0; + if(sEdito=='Nouveau') iRank += 10000000; + else if(sEdito.slice(-7)=='semaine') iRank += 100000*parseInt(sEdito.substr(0, sEdito.indexOf('รจ'))); + iRank += parseInt(this.id(), 10); + return iRank; + }; this.anchor = function() { if(Object.keys(this._anchor).length > 0) return this._anchor; else { - //Init page - this.onPageReady(); - //Add film to DOM - this._anchor = $('
', {'class':'film', 'id':'film_'+this.id()}) + this._anchor = $('
', {'class':'film', 'id':'film_'+this.getRank()}) + .data('rank', this.getRank()) //.append($('', {'class':'bg', 'src':this.poster()})) .append($('', {'class':'poster', 'src':this.poster()})) .append($('
', {'class':'info'}) @@ -94,7 +101,9 @@ function Film() .append($('', {'target':'_blank', 'href':this.trailer()}) .append($('', {'class':'fa fa-fw fa-icon fa-trailer'})) .append('Trailer'))) - .append($('
', {'class':'timetable fa fa-fw fa-spinner fa-spin'}))) + .append($('
', {'class':'timetable'}))) + //.append($('
', {'class':'timetable fa fa-fw fa-spinner fa-spin'}))) + .hide() .appendTo(this.$Main); } }; @@ -112,12 +121,6 @@ function Film() } }; - this.onPageReady = function() - { - this.$Main.find('#buffer').hide(); - this.$Footer.show(); - }; - this.renderTimetable = function(iCinemaId, asLang) { var sCinema = asCinemas[iCinemaId]; @@ -134,6 +137,9 @@ function Film() .append($('', {'class':'lang'}).text(sLang)) .appendTo(self.anchor().find('.timetable')); + + var test = self.timetable(iCinemaId, sLang); + if(!test) console.log('cinema '+iCinemaId+' lang '+sLang+' film '+self.id()); $.each(self.timetable(iCinemaId, sLang).sort(self.timeCompare), function(iKey, oTime){ $Timetable .append($('', {'class':'time', 'href':oTime.booking, 'target':'_blank'}).text(oTime.time)) @@ -150,7 +156,6 @@ function Film() this.error = function(sMsg) { - $('#feedback').show(); $('#feed_content').append($('

').text(sMsg)); }; } @@ -164,15 +169,48 @@ function Affiche(oDate) this.date.timestamp = this.date.today / 1; this._films = {}; + this._wip = 0; this.consts = { days:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], months:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]}; + this.$Main = $('main'); + this.$Footer = $('footer'); + this.$Feedback = $('#feedback'); + this.isLoaded = function() { //TODO return true; }; + this.wip = function(iProgress) + { + if(!iProgress) return this._wip; + else + { + this._wip += iProgress; + if(this._wip==0) this.onPostLoad(); + } + }; + + this.onPostLoad = function() + { + //Sort films + $Films = $('.film'); + $Films.sort(function(oFilm1, oFilm2) + { + return ($(oFilm1).data('rank') < $(oFilm2).data('rank'))?1:-1; + }); + + this.$Main.find('#buffer').hide(); + $Films + .detach() + .appendTo(this.$Main) + .not('.banned') + .show(); + this.$Footer.add(this.$Feedback).show(); + }; + this.loadCinemas = function() { //Today timestamp @@ -182,6 +220,7 @@ function Affiche(oDate) getUgcPage( 'filmsAjaxAction!getFilmsForPageCinema.action', {cinemaId:iCinemaId, cinemaCode:'', page:'7', filmId:'', filmId_widget:'', '_':Date.now()}, function(hDom){self.addCinema(iCinemaId, hDom)}, + function(){}, 'html'); }); }; @@ -190,6 +229,7 @@ function Affiche(oDate) { var $Page = $(hDom); var $Films = $Page.find('.FilmDiv'); + this.wip($Films.length); $Films.each(function() { var $Film = $(this); @@ -235,7 +275,8 @@ function Affiche(oDate) if(!(self.date.timestamp in jData.dates)) { self.error('No times today for "'+oFilm.name()+'" @'+asCinemas[iCinemaId]+' (first date available: '+jData.dates[Object.keys(jData.dates)[0]]+')'); - if(self.isLoaded()) oFilm.removeSpinner(); + //if(self.isLoaded()) oFilm.removeSpinner(); + self.wip(-1); } else { @@ -264,13 +305,23 @@ function Affiche(oDate) }); asLangs.push(sLang); oFilm.renderTimetable(iCinemaId, asLangs); - if(self.isLoaded()) oFilm.removeSpinner(); + //if(self.isLoaded()) oFilm.removeSpinner(); + self.wip(-1); + }, + function(){ + self.wip(-1); + self.error('Error detected on film "'+oFilm.name()+'" @'+asCinemas[iCinemaId]+'. UGC website Temporarily Unavailable'); }, 'html'); } }, + function(){ + self.wip(-1); + self.error('Error detected on film "'+oFilm.name()+'" @'+asCinemas[iCinemaId]+'. UGC website Temporarily Unavailable'); + }, 'json'); } + else self.wip(-1); }); }; @@ -292,13 +343,17 @@ function Affiche(oDate) this.error = function(sMsg) { - $('#feedback').show(); $('#feed_content').append($('

').text(sMsg)); }; } -function getUgcPage(sPath, asData, fOnSuccess, sType) +function getUgcPage(sPath, asData, fOnSuccess, fOnFail, sType) { var asParams = {'a':'get_page', 'type':sType, 'data':{'path':sPath, 'vars':asData}}; - $.get((new Film()).consts.process_url, asParams, fOnSuccess, sType); + $.ajax({ + url: (new Film()).consts.process_url, + data: asParams, + dataType: sType + }).done(fOnSuccess) + .fail(fOnFail); } \ No newline at end of file