adding dates to pick from
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
function Film()
|
||||
function Film(oSettings)
|
||||
{
|
||||
var self = this;
|
||||
this.consts = {'ugc_url':'http://www.ugc.fr/', 'process_url':'index.php'};
|
||||
this.settings = oSettings;
|
||||
this._attr = {};
|
||||
this._anchor = {};
|
||||
this._ban = {status:false, reason:''};
|
||||
@@ -103,12 +104,12 @@ function Film()
|
||||
.append($('<div>', {'class':'info'})
|
||||
.append($('<p>', {'class':'title'})
|
||||
.append($('<a>', {'class':'name', 'target':'_blank', 'href':this.consts.ugc_url+'film.html?id='+this.id()})
|
||||
.append($('<i>', {'class':'fa fa-fw fa-icon fa-film'}))
|
||||
.append($('<i>', {'class':'fa fa-fw inline fa-film'}))
|
||||
.append(this.name()))
|
||||
.append($('<span>', {'class':'edito'+(this.edito()?' fa fa-edito':'')}).text(this.edito()?' '+this.edito():'')))
|
||||
.append($('<p>', {'class':'trailer'})
|
||||
.append($('<a>', {'target':'_blank', 'href':this.trailer()})
|
||||
.append($('<i>', {'class':'fa fa-fw fa-icon fa-trailer'}))
|
||||
.append($('<i>', {'class':'fa fa-fw inline fa-trailer'}))
|
||||
.append('Trailer')))
|
||||
.append($('<div>', {'class':'timetable'})))
|
||||
//.append($('<div>', {'class':'timetable fa fa-fw fa-spinner fa-spin'})))
|
||||
@@ -132,7 +133,7 @@ function Film()
|
||||
|
||||
this.renderTimetable = function(iCinemaId, asLang)
|
||||
{
|
||||
var sCinema = asCinemas[iCinemaId];
|
||||
var sCinema = self.settings.cinemas(iCinemaId);
|
||||
$.each(asLang, function(iKey, sLang)
|
||||
{
|
||||
if(sLang=='VF' && ('VOSTF' in self.timetable(iCinemaId))) self.feedback('Hiding VF of "'+self.name()+'" @'+sCinema+' (VOSTF available)');
|
||||
@@ -141,13 +142,11 @@ function Film()
|
||||
{
|
||||
var $Timetable = $('<p>')
|
||||
.append($('<a>', {'class':'cinema', 'target':'_blank', 'href':self.consts.ugc_url+'cinemaAction!execute.action?page=7&id='+iCinemaId})
|
||||
.append($('<i>', {'class':'fa fa-fw fa-icon fa-cinema'}))
|
||||
.append($('<i>', {'class':'fa fa-fw inline fa-cinema'}))
|
||||
.append($('<span>', {'class':'cinema_name'}).text(sCinema)))
|
||||
.append($('<span>', {'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($('<a>', {'class':'button', 'href':oTime.booking, 'target':'_blank', 'title':'Book screening'}).text(oTime.time))
|
||||
@@ -173,25 +172,41 @@ function Film()
|
||||
};
|
||||
}
|
||||
|
||||
function Affiche(oDate)
|
||||
function Ugc()
|
||||
{
|
||||
var self = this;
|
||||
this.date = {};
|
||||
this.date.now = oDate;
|
||||
this.date.today = new Date(this.date.now.getFullYear(), this.date.now.getMonth(), this.date.now.getDate());
|
||||
this.date.timestamp = this.date.today / 1;
|
||||
|
||||
this._cinemasList = {};
|
||||
this.settings = new Settings();
|
||||
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.$Header = $('header');
|
||||
this.$Main = $('main');
|
||||
this.$Footer = $('footer');
|
||||
this.$Feedback = $('#feedback');
|
||||
this.$Settings = $('#settings');
|
||||
|
||||
this.loadCinemas = function()
|
||||
{
|
||||
//Display buffer while loading
|
||||
buffer(true);
|
||||
|
||||
//Load Settings
|
||||
this.settings.init();
|
||||
|
||||
//Set Header
|
||||
$('#date')
|
||||
.attr('datetime', this.settings.date('html'))
|
||||
.append(this.settings.date('formal'))
|
||||
.append($('<sup>').text(this.settings.date('abbr')));
|
||||
|
||||
//Load cinemas
|
||||
$.each(this.settings.cinemas(), function(iCinemaId, sCinemaName){
|
||||
getUgcPage( 'filmsAjaxAction!getFilmsForPageCinema.action',
|
||||
{cinemaId:iCinemaId, cinemaCode:'', page:'7', filmId:'', filmId_widget:'', '_':Date.now()},
|
||||
function(hDom){self.addCinema(iCinemaId, hDom)},
|
||||
function(){},
|
||||
'html');
|
||||
});
|
||||
};
|
||||
|
||||
this.wip = function(iProgress)
|
||||
{
|
||||
@@ -207,9 +222,6 @@ function Affiche(oDate)
|
||||
{
|
||||
$Films = $('.film');
|
||||
|
||||
//Display Header
|
||||
this.$Header.css('visibility', 'visible');
|
||||
|
||||
//Sort films
|
||||
$Films.sort(function(oFilm1, oFilm2){return ($(oFilm1).data('rank') < $(oFilm2).data('rank'))?1:-1;}).detach();
|
||||
|
||||
@@ -224,25 +236,11 @@ function Affiche(oDate)
|
||||
}
|
||||
});
|
||||
|
||||
//Remove loading
|
||||
this.$Main.find('#buffer').hide();
|
||||
|
||||
//Add films (except bans)
|
||||
$Films.appendTo(this.$Main).not('.banned').slideDown('slow');
|
||||
this.$Footer.add(this.$Feedback).show();
|
||||
};
|
||||
|
||||
this.loadCinemas = function()
|
||||
{
|
||||
this.setHeader();
|
||||
$Films.appendTo(this.$Main);
|
||||
|
||||
$.each(asCinemas, function(iCinemaId, sCinemaName){
|
||||
getUgcPage( 'filmsAjaxAction!getFilmsForPageCinema.action',
|
||||
{cinemaId:iCinemaId, cinemaCode:'', page:'7', filmId:'', filmId_widget:'', '_':Date.now()},
|
||||
function(hDom){self.addCinema(iCinemaId, hDom)},
|
||||
function(){},
|
||||
'html');
|
||||
});
|
||||
//remove buffer
|
||||
buffer(false);
|
||||
};
|
||||
|
||||
this.addCinema = function(iCinemaId, hDom)
|
||||
@@ -258,7 +256,7 @@ function Affiche(oDate)
|
||||
|
||||
if(!oFilm)
|
||||
{
|
||||
oFilm = new Film();
|
||||
oFilm = new Film(self.settings);
|
||||
|
||||
//ID
|
||||
oFilm.id(iFilmId);
|
||||
@@ -284,7 +282,7 @@ function Affiche(oDate)
|
||||
//Ban if wrong edito
|
||||
if(sEdito=='Avant-première' || sEdito=='UGC Culte' || sEdito=='Soirée Club') oFilm.ban(true, sEdito);
|
||||
|
||||
//Append film to Affiche
|
||||
//Append film to Ugc
|
||||
self.film(iFilmId, oFilm);
|
||||
}
|
||||
|
||||
@@ -294,11 +292,11 @@ function Affiche(oDate)
|
||||
getUgcPage( 'filmsAfficheAction!loadDatesList.action',
|
||||
{filmId:oFilm.id(), cinemaId:iCinemaId, cinemaCode:'', day:''},
|
||||
function(jData){
|
||||
if(!(self.date.timestamp in jData.dates)) self.wip(-1);
|
||||
if(!(self.settings.date('midnight_timestamp') in jData.dates)) self.wip(-1);
|
||||
else
|
||||
{
|
||||
getUgcPage( 'filmsAfficheAction!reloadSeancesList.action',
|
||||
{filmId:oFilm.id(), cinemaId:iCinemaId, cinemaCode:'', day:self.date.timestamp},
|
||||
{filmId:oFilm.id(), cinemaId:iCinemaId, cinemaCode:'', day:self.settings.date('midnight_timestamp')},
|
||||
function(hData){
|
||||
var sLang = '';
|
||||
var asLangs = [];
|
||||
@@ -326,14 +324,14 @@ function Affiche(oDate)
|
||||
},
|
||||
function(){
|
||||
self.wip(-1);
|
||||
self.error('Ajax Error detected on movie "'+oFilm.name()+'" @'+asCinemas[iCinemaId]+'. UGC website Temporarily Unavailable');
|
||||
self.error('Ajax Error detected on movie "'+oFilm.name()+'" @'+self.settings.cinemas(iCinemaId)+'.');
|
||||
},
|
||||
'html');
|
||||
}
|
||||
},
|
||||
function(){
|
||||
self.wip(-1);
|
||||
self.error('Ajax Error detected on movie "'+oFilm.name()+'" @'+asCinemas[iCinemaId]+'. UGC website Temporarily Unavailable');
|
||||
self.error('Ajax Error detected on movie "'+oFilm.name()+'" @'+self.settings.cinemas(iCinemaId)+'.');
|
||||
},
|
||||
'json');
|
||||
}
|
||||
@@ -341,92 +339,6 @@ function Affiche(oDate)
|
||||
});
|
||||
};
|
||||
|
||||
this.setHeader = function()
|
||||
{
|
||||
//Date on top
|
||||
var iDay = this.date.today.getDate();
|
||||
$('#date')
|
||||
.attr('datetime', this.date.today.getFullYear()+'-'+(("0" + (this.date.today.getMonth() + 1)).slice(-2))+'-'+(("0" + iDay).slice(-2)))
|
||||
.append(this.consts.days[this.date.today.getDay()]+', '+this.consts.months[this.date.today.getMonth()]+' '+iDay)
|
||||
.append($('<sup>').text((iDay%10==1)?'st':((iDay%10==2)?'nd':((iDay%10==3)?'rd':'th'))));
|
||||
|
||||
//Load Settings
|
||||
this.setSettings();
|
||||
}
|
||||
|
||||
this.setSettings = function()
|
||||
{
|
||||
//Date
|
||||
this.setDates();
|
||||
|
||||
//Cinemas
|
||||
this.cinemas();
|
||||
|
||||
//Event
|
||||
this.$Header.find('#btn_settings').click(function(){
|
||||
self.$Settings.show();
|
||||
});
|
||||
this.$Main.click(function(){self.$Settings.hide();});
|
||||
$(window).keyup(function(e){if(e.keyCode == 27) self.$Settings.hide();});
|
||||
|
||||
//Validattion
|
||||
this.$Settings.find('#ok_settings').click(function(){
|
||||
|
||||
//Cinemas
|
||||
var asCines = {};
|
||||
self.$Settings.find('.include').each(function(iKey, oCinema){
|
||||
$Cine = $(oCinema);
|
||||
asCines[$Cine.data('id')] = $Cine.text();
|
||||
});
|
||||
self.cinemas(asCines);
|
||||
|
||||
//Day
|
||||
|
||||
location.reload();
|
||||
});
|
||||
};
|
||||
|
||||
this.setDates = function()
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
this.cinemas = function(asSetCinemas)
|
||||
{
|
||||
if(!asSetCinemas) //Set cookie/default cinemas and get list
|
||||
{
|
||||
var asCookieCinemas = Cookies.getJSON('cinemas');
|
||||
if(!asCookieCinemas) asCinemas = {'10':'Les Halles', '12':'Bercy', '20':'La Défense'};
|
||||
else asCinemas = asCookieCinemas;
|
||||
|
||||
getUgcPage( 'headerReservationAction!reloadCinemasList.action',
|
||||
{'regionsAndCinemasBean.region':'', 'regionsAndCinemasBean.cinema':'', '_':Date.now()},
|
||||
self.displaySettingsCinemas,
|
||||
function(){self.error('Error: Could not load cinema list');},
|
||||
'json');
|
||||
}
|
||||
else //Set new cinemas as cookie
|
||||
{
|
||||
Cookies.set('cinemas', asSetCinemas);
|
||||
asCinemas = asSetCinemas;
|
||||
}
|
||||
};
|
||||
|
||||
this.displaySettingsCinemas = function(jData)
|
||||
{
|
||||
this._cinemasList = jData.cinemas;
|
||||
var $Cinemas = self.$Settings.find('.cinemas');
|
||||
$.each(this._cinemasList, function(iKey, sCinemaName){
|
||||
var iCinemaId = $.trim(iKey);
|
||||
$Cinemas.append($('<li>', {'class':'cinema'})
|
||||
.attr('id', '_'+iCinemaId)
|
||||
.data('id', iCinemaId)
|
||||
.toggleClass('include', (iCinemaId in asCinemas))
|
||||
.click(function(){$(this).toggleClass('include')})
|
||||
.text(sCinemaName));
|
||||
});
|
||||
};
|
||||
|
||||
this.film = function(iFilmId, oFilm)
|
||||
{
|
||||
if(!iFilmId) return this._films;
|
||||
@@ -441,7 +353,193 @@ function Affiche(oDate)
|
||||
|
||||
this.error = function(sMsg)
|
||||
{
|
||||
console.log('Affiche Error: '+sMsg);
|
||||
console.log('Ugc Error: '+sMsg);
|
||||
};
|
||||
}
|
||||
|
||||
function Settings()
|
||||
{
|
||||
var self = this;
|
||||
this._ugcCinemas = {};
|
||||
this._cinemas = {};
|
||||
//this._ugcDates = [];
|
||||
this._date = null;
|
||||
|
||||
this.$Settings = $('#settings');
|
||||
this.$Header = $('header');
|
||||
this.$Main = $('main');
|
||||
|
||||
this.consts = { days:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
|
||||
months:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]};
|
||||
|
||||
this.init = function()
|
||||
{
|
||||
//Default date
|
||||
var iCookieTimestamp = parseInt(Cookies.get('date'));
|
||||
var oDate;
|
||||
if(isNaN(iCookieTimestamp) || iCookieTimestamp < this.timestamp()) // no cookie or in the past
|
||||
{
|
||||
oDate = new Date();
|
||||
if(oDate.getHours()==23) oDate = new Date(this.timestamp(oDate) + 24*60*60*1000); //Tomorrow
|
||||
}
|
||||
else oDate = new Date(iCookieTimestamp);
|
||||
this.date(oDate);
|
||||
|
||||
//UGC dates
|
||||
this.addUgcDatesToDom();
|
||||
|
||||
//Default cinemas
|
||||
var asCookieCinemas = Cookies.getJSON('cinemas');
|
||||
this.cinemas(asCookieCinemas?asCookieCinemas:{'10':'Les Halles', '12':'Bercy', '20':'La Défense'});
|
||||
|
||||
//UGC cinemas
|
||||
getUgcPage( 'headerReservationAction!reloadCinemasList.action',
|
||||
{'regionsAndCinemasBean.region':'', 'regionsAndCinemasBean.cinema':'', '_':this.date('timestamp')},
|
||||
function(jData){
|
||||
self.ugcCinemas(jData.cinemas);
|
||||
self.addUgcCinemasToDom();
|
||||
},
|
||||
function(){self.error('Error: Could not load cinema list');},
|
||||
'json');
|
||||
};
|
||||
|
||||
this.ugcCinemas = function(asCinemas)
|
||||
{
|
||||
if(!asCinemas) return this._ugcCinemas;
|
||||
else if($.isNumeric(asCinemas)) return this._ugcCinemas[asCinemas]; //Get Cinema name
|
||||
else this._ugcCinemas = asCinemas;
|
||||
};
|
||||
|
||||
this.cinemas = function(asCinemas)
|
||||
{
|
||||
if(!asCinemas) return this._cinemas;
|
||||
else if($.isNumeric(asCinemas)) return this._cinemas[asCinemas]; //Get Cinema name
|
||||
else this._cinemas = asCinemas;
|
||||
};
|
||||
|
||||
this.date = function(oDate)
|
||||
{
|
||||
if(!oDate) return this._date;
|
||||
else if($.type(oDate)=='string')
|
||||
{
|
||||
switch(oDate)
|
||||
{
|
||||
case 'timestamp':
|
||||
return this.timestamp(this._date);
|
||||
case 'today':
|
||||
return new Date(this._date.getFullYear(), this._date.getMonth(), this._date.getDate());
|
||||
case 'midnight_timestamp':
|
||||
return this.timestamp(this.date('today'));
|
||||
case 'day':
|
||||
return this._date.getDate();
|
||||
case 'weekday':
|
||||
return this._date.getDay();
|
||||
case 'month':
|
||||
return this._date.getMonth();
|
||||
case 'year':
|
||||
return this._date.getFullYear();
|
||||
case 'html':
|
||||
return this.date('year')+'-'+(("0" + (this.date('month') + 1)).slice(-2))+'-'+(("0" + this.date('day')).slice(-2));
|
||||
case 'formal':
|
||||
return this.consts.days[this.date('weekday')]+', '+this.consts.months[this.date('month')]+' '+this.date('day');
|
||||
case 'abbr':
|
||||
return (this.date('day')%10==1)?'st':((this.date('day')%10==2)?'nd':((this.date('day')%10==3)?'rd':'th'));
|
||||
default:
|
||||
return this._date;
|
||||
}
|
||||
}
|
||||
else this._date = oDate;
|
||||
};
|
||||
|
||||
this.addUgcDatesToDom = function()
|
||||
{
|
||||
//Build today at midnight
|
||||
var oNextDay = new Date();
|
||||
oNextDay = new Date(oNextDay.getFullYear(), oNextDay.getMonth(), oNextDay.getDate());
|
||||
|
||||
//Build available dates
|
||||
var $Select = $('#ugc_dates').find('select');
|
||||
var $List = $('#ugc_days');
|
||||
var iCount = 0;
|
||||
while(oNextDay.getDay() != 3)
|
||||
{
|
||||
if(iCount>5) break;
|
||||
var iTimestamp = this.timestamp(oNextDay);
|
||||
switch(iCount)
|
||||
{
|
||||
case 0: sDay = 'Today'; break;
|
||||
case 1: sDay = 'Tomorrow'; break;
|
||||
default: sDay = this.consts.days[oNextDay.getDay()];
|
||||
}
|
||||
$Select.append($('<option>', {'value':iTimestamp}).text(sDay));
|
||||
$List.append($('<a>', {'class':'button no_bg inline day', 'id':'day_'+iTimestamp}).data('timestamp', iTimestamp).text(sDay));
|
||||
oNextDay = new Date(this.timestamp(oNextDay) + 24*60*60*1000);
|
||||
iCount++;
|
||||
}
|
||||
|
||||
//Selecting right value
|
||||
$Select.val(this.date('midnight_timestamp'));
|
||||
$List.find('#day_'+this.date('midnight_timestamp')).addClass('clicked');
|
||||
|
||||
//event
|
||||
$Select.change(function(){
|
||||
Cookies.set('date', $(this).val(), {expires:6});
|
||||
reload();
|
||||
});
|
||||
$List.find('.day').click(function(){
|
||||
Cookies.set('date', $(this).data('timestamp'), {expires:6});
|
||||
reload();
|
||||
});
|
||||
};
|
||||
|
||||
this.addUgcCinemasToDom = function()
|
||||
{
|
||||
//Hide buffer
|
||||
self.$Settings.find('#buffer_settings').hide();
|
||||
|
||||
//Add cinemas
|
||||
var $Cinemas = self.$Settings.find('.cinemas');
|
||||
$.each(self.ugcCinemas(), function(iKey, sCinemaName){
|
||||
var iCinemaId = $.trim(iKey);
|
||||
$Cinemas.append($('<li>', {'class':'cinema'})
|
||||
.attr('id', 'cinema_'+iCinemaId)
|
||||
.data('id', iCinemaId)
|
||||
.toggleClass('include', (iCinemaId in self.cinemas()))
|
||||
.click(function(){$(this).toggleClass('include')})
|
||||
.text(sCinemaName));
|
||||
});
|
||||
|
||||
//Event: Show / Hide panel
|
||||
$('#btn_settings').click(function(){self.toggleSettings(true);});
|
||||
$('.background').click(function(){self.toggleSettings(false);});
|
||||
$(window).keyup(function(e){if(e.keyCode == 27) self.toggleSettings(false);});
|
||||
|
||||
//Event: Validation of cinemas selection
|
||||
this.$Settings.find('#ok_settings').click(function(){
|
||||
var asCines = {};
|
||||
self.$Settings.find('.include').each(function(iKey, oCinema){
|
||||
var $Cine = $(oCinema);
|
||||
asCines[$Cine.data('id')] = $Cine.text();
|
||||
});
|
||||
Cookies.set('cinemas', asCines);
|
||||
reload();
|
||||
});
|
||||
};
|
||||
|
||||
this.toggleSettings = function(bShow)
|
||||
{
|
||||
self.$Settings.add('.background').toggle((typeof bShow == 'undefined')?null:bShow);
|
||||
};
|
||||
|
||||
this.timestamp = function(oDate)
|
||||
{
|
||||
oDate = oDate || new Date();
|
||||
return oDate.getTime();
|
||||
}
|
||||
|
||||
this.error = function(sMsg)
|
||||
{
|
||||
console.log('Settings Error: '+sMsg);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -452,6 +550,44 @@ function getUgcPage(sPath, asData, fOnSuccess, fOnFail, sType)
|
||||
url: (new Film()).consts.process_url,
|
||||
data: asParams,
|
||||
dataType: sType
|
||||
}).done(fOnSuccess)
|
||||
.fail(fOnFail);
|
||||
})
|
||||
.done(function(oData){
|
||||
if(sType=='html')
|
||||
{
|
||||
var asMatches = oData.match(/<title>(.*?)<\/title>/);
|
||||
if(asMatches && asMatches[1] == 'Service Temporarily Unavailable')
|
||||
{
|
||||
console.log('UGC website Temporarily Unavailable. Reloading page');
|
||||
console.log(asParams);
|
||||
reload();
|
||||
}
|
||||
}
|
||||
fOnSuccess(oData);
|
||||
})
|
||||
.fail(function(){
|
||||
fOnFail();
|
||||
console.log('UGC website Temporarily Unavailable. Reloading page');
|
||||
console.log(asParams);
|
||||
reload();
|
||||
});
|
||||
}
|
||||
|
||||
function buffer(bActive)
|
||||
{
|
||||
if(bActive)
|
||||
{
|
||||
$('.film').add('header').fadeTo(0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('.film').not('.banned').add('header').fadeTo('slow', 1);
|
||||
}
|
||||
$('#buffer').toggle(bActive);
|
||||
$('footer').add('#feedback').toggle(!bActive);
|
||||
}
|
||||
|
||||
function reload()
|
||||
{
|
||||
buffer(true);
|
||||
location.reload();
|
||||
}
|
||||
Reference in New Issue
Block a user