2018-10-15 20:52:39 +00:00
|
|
|
const DEFAULT_LANG = 'pt';
|
2018-12-20 03:02:54 +00:00
|
|
|
var longpress = 400;
|
|
|
|
var current = null
|
2018-10-15 20:52:39 +00:00
|
|
|
var data = {};
|
|
|
|
var prepared_data = {};
|
2018-10-16 04:36:39 +00:00
|
|
|
var language_name_matrix = {
|
|
|
|
'pt':{
|
|
|
|
'pt': 'Português',
|
|
|
|
'en': 'Portuguese',
|
|
|
|
'es': 'Portugués',
|
|
|
|
},
|
|
|
|
'en':{
|
|
|
|
'pt': 'Inglês',
|
|
|
|
'en': 'English',
|
|
|
|
'es': 'Inglés',
|
|
|
|
},
|
|
|
|
'es': {
|
|
|
|
'pt': 'Espanhol',
|
|
|
|
'en': 'Spanish',
|
|
|
|
'es': 'Español',
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var language_textual_date_ranges = {
|
|
|
|
'pt': "{0} ({1}), das {2}:{3} às {4}:{5}",
|
|
|
|
'en': "{0} ({1}), from {2}:{3} to {4}:{5}",
|
|
|
|
'es': "{0} ({1}), de las {2}:{3} a las {4}:{5}",
|
|
|
|
}
|
2018-10-15 20:52:39 +00:00
|
|
|
|
2018-10-16 01:26:30 +00:00
|
|
|
function escapeHtml(unsafe) {
|
2018-10-16 04:36:39 +00:00
|
|
|
return String(unsafe)
|
2018-12-20 03:02:54 +00:00
|
|
|
.replace(/&/g, "&")
|
|
|
|
.replace(/</g, "<")
|
|
|
|
.replace(/>/g, ">")
|
|
|
|
.replace(/"/g, """)
|
|
|
|
.replace(/'/g, "'");
|
|
|
|
}
|
2018-10-16 01:26:30 +00:00
|
|
|
|
2018-10-16 04:36:39 +00:00
|
|
|
class TextualJoiner{
|
|
|
|
constructor(language){
|
|
|
|
this.middleconnector = ', ';
|
|
|
|
this.endconnector = ' e ';
|
|
|
|
if(language=='en'){
|
|
|
|
this.endconnector = ' and ';
|
|
|
|
}else if(language=='es'){
|
|
|
|
this.endconnector = ' y ';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
join(list){
|
|
|
|
list = list.map(v=>String(v));
|
|
|
|
if(list.length<1) return '';
|
|
|
|
if(list.length==1) return list[0];
|
|
|
|
var last = list.pop();
|
|
|
|
var blast = list.pop();
|
|
|
|
list.push(blast+this.endconnector+last);
|
|
|
|
return list.join(this.middleconnector);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function LocalizeWeekdays(lang){
|
|
|
|
return {
|
2018-10-22 03:50:21 +00:00
|
|
|
'pt': ['Domingo', 'Segunda', 'Terça', 'Quata', 'Quinta', 'Sexta', 'Sábado'],
|
|
|
|
'en': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
|
|
|
|
'es': ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
|
2018-10-16 04:36:39 +00:00
|
|
|
}[lang]
|
|
|
|
}
|
|
|
|
|
2018-10-15 20:52:39 +00:00
|
|
|
function prepare_convention_series(data){
|
|
|
|
prepared_data[data.statute.uuid]={'kind': 'statute', ...data.statute};
|
|
|
|
prepare_string(data.name);
|
|
|
|
for(var edition of data.editions) prepare_convention_edition(edition);
|
|
|
|
}
|
|
|
|
|
|
|
|
function prepare_string(data){
|
|
|
|
prepared_data[data.uuid]={'kind': 'string', ...data};
|
|
|
|
}
|
|
|
|
|
|
|
|
function prepare_convention_edition(data){
|
|
|
|
prepared_data[data.uuid]={'kind': 'convention_edition', ...data};
|
|
|
|
prepare_string(data.name);
|
|
|
|
prepare_string(data.theme);
|
2018-10-16 01:26:30 +00:00
|
|
|
for(var rt of data.registration_tiers) prepare_registration_tier(rt);
|
2018-10-15 20:52:39 +00:00
|
|
|
for(var tag of data.tags) prepare_tag(tag);
|
|
|
|
for(var place of data.places) prepare_place(place);
|
2018-10-16 04:36:39 +00:00
|
|
|
for(var event of data.events) prepare_event(event, data.language);
|
2018-10-15 20:52:39 +00:00
|
|
|
}
|
|
|
|
|
2018-10-16 01:26:30 +00:00
|
|
|
function prepare_registration_tier(data){
|
|
|
|
prepared_data[data.uuid]={'kind': 'registration_tier', ...data};
|
|
|
|
prepare_string(data.tier);
|
|
|
|
}
|
|
|
|
|
2018-10-16 04:36:39 +00:00
|
|
|
function prepare_event(data, con_lang){
|
2018-10-16 01:26:30 +00:00
|
|
|
data = JSON.parse(JSON.stringify(data)) //deep copy, as we will change it
|
|
|
|
prepare_string(data.title);
|
|
|
|
if(data.subtitle.uuid) prepare_string(data.subtitle);
|
|
|
|
prepare_string(data.description);
|
|
|
|
if(data.picture.uuid) prepare_string(data.picture);
|
|
|
|
data.attendable_by = data.attendable_by.map(it => prepared_data[it]);
|
|
|
|
data.categories = data.categories.map(it => prepared_data[it]);
|
|
|
|
data.places = data.places.map(it => prepared_data[it]);
|
2018-10-16 04:36:39 +00:00
|
|
|
prepared_data[data.uuid]={'kind': 'event', 'con_lang': con_lang, ...data};
|
2018-10-15 20:52:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function prepare_place(data){
|
2018-10-16 01:26:30 +00:00
|
|
|
prepared_data[data.uuid]={'kind': 'place', ...data};
|
|
|
|
prepare_string(data.label);
|
|
|
|
prepare_color(data.color);
|
2018-10-15 20:52:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function prepare_tag(data){
|
2018-10-16 01:26:30 +00:00
|
|
|
prepared_data[data.uuid]={'kind': 'tag', ...data};
|
|
|
|
prepare_string(data.label);
|
|
|
|
prepare_color(data.color);
|
|
|
|
}
|
|
|
|
|
|
|
|
function prepare_color(data){
|
|
|
|
prepared_data[data.uuid]={'kind': 'color', ...data};
|
2018-10-15 20:52:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function re_render_everything(){
|
|
|
|
document.body.innerHTML = '';
|
2018-10-16 01:26:30 +00:00
|
|
|
document.title = data.name[get_language()];
|
|
|
|
document.body.innerHTML = ""+render_header()+render_page();
|
2018-10-15 20:52:39 +00:00
|
|
|
}
|
|
|
|
|
2018-10-16 01:26:30 +00:00
|
|
|
function render_header(){
|
|
|
|
var s = '';
|
|
|
|
s+='<nav class="langchgr">';
|
2018-10-22 04:56:41 +00:00
|
|
|
s+='<a class="button blockybtn" href="'+generate_language_changer_link('pt')+'">PT</a>';
|
|
|
|
s+='<a class="button blockybtn" href="'+generate_language_changer_link('en')+'">EN</a>';
|
|
|
|
s+='<a class="button blockybtn" href="'+generate_language_changer_link('es')+'">ES</a>';
|
2018-10-16 01:26:30 +00:00
|
|
|
s+='</nav>';
|
|
|
|
return s;
|
2018-10-15 20:52:39 +00:00
|
|
|
}
|
|
|
|
|
2018-10-22 04:56:41 +00:00
|
|
|
function render_label_with_pill(place_or_category){
|
|
|
|
var v = place_or_category;
|
|
|
|
return escapeHtml(v.label[get_language()])+
|
|
|
|
' <span class="badge badge-pill" style="color: '+v.color.color+'; background-color: '+v.color.color+';">.</span>'
|
|
|
|
}
|
|
|
|
|
|
|
|
function render_page_convention_eventrow_popover(intent){
|
|
|
|
var s = '';
|
2018-10-22 05:04:08 +00:00
|
|
|
s+='<h5>'
|
|
|
|
s+=escapeHtml(intent.title[get_language()])
|
|
|
|
s+='</h5>'
|
|
|
|
s+='<div>'
|
|
|
|
s+=escapeHtml(intent.description[get_language()])
|
|
|
|
s+='</div>'
|
|
|
|
s+='<hr class="my-0 py-0 mt-1">'
|
2018-10-22 04:56:41 +00:00
|
|
|
s+=escapeHtml(language_textual_date_ranges[get_language()]
|
2018-12-20 03:02:54 +00:00
|
|
|
.replace('{0}', LocalizeWeekdays(get_language())[intent.time_start.wd])
|
|
|
|
.replace('{1}', intent.time_start.dy)
|
|
|
|
.replace('{2}', ('0'+intent.time_start.hr).slice(-2))
|
|
|
|
.replace('{3}', ('0'+intent.time_start.mn).slice(-2))
|
|
|
|
.replace('{4}', ('0'+intent.time_end.hr).slice(-2))
|
|
|
|
.replace('{5}', ('0'+intent.time_end.mn).slice(-2))
|
|
|
|
)
|
|
|
|
if(intent.categories.length){
|
|
|
|
s+='<hr class="my-0 py-0 mt-1">'
|
|
|
|
s+=intent.categories.map(v=>render_label_with_pill(v)).join(', ')
|
|
|
|
}
|
|
|
|
if(intent.places.length){
|
|
|
|
s+='<hr class="my-0 py-0 mt-1">'
|
|
|
|
s+=intent.places.map(v=>render_label_with_pill(v)).join(', ')
|
|
|
|
}
|
|
|
|
return s
|
|
|
|
}
|
|
|
|
|
|
|
|
function registerLongPressCallback(element, callback){
|
|
|
|
var timer;
|
|
|
|
element.addEventListener('mouseup', function (e) { clearTimeout(timer); });
|
|
|
|
element.addEventListener('mouseout', function (e) { clearTimeout(timer); });
|
|
|
|
element.addEventListener('mousedown', function (e) {
|
|
|
|
function trigger() {
|
|
|
|
e.preventDefault()
|
|
|
|
callback()
|
|
|
|
}
|
|
|
|
timer = setTimeout(trigger, longpress);
|
|
|
|
}, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
function render_page_convention_eventrow_daychange(intent){
|
|
|
|
var s = ''
|
|
|
|
s+='<tr>'
|
|
|
|
s+='<td colspan="3" class="bg-dark text-light" style="padding: 0.45em;">'
|
|
|
|
s+=escapeHtml(LocalizeWeekdays(get_language())[intent.time_start.wd])
|
|
|
|
s+=', '
|
|
|
|
s+=escapeHtml(intent.time_start.dy)
|
|
|
|
s+='</td>'
|
|
|
|
s+='</tr>'
|
2018-10-22 04:56:41 +00:00
|
|
|
return s
|
|
|
|
}
|
|
|
|
|
2018-10-16 01:26:30 +00:00
|
|
|
function render_page_convention_eventrow(intent){
|
|
|
|
var s = '';
|
2018-10-22 03:50:21 +00:00
|
|
|
var color = null;
|
|
|
|
if(color===null) for(var cat of intent.categories){
|
|
|
|
color = cat.color.color;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if(color===null) for(var plc of intent.places){
|
|
|
|
color = plc.color.color;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if(color===null) color = '#CCCCCC';
|
2018-12-20 03:02:54 +00:00
|
|
|
s+='<tr id="uuid'+escapeHtml(intent.uuid)+'" style="background-image: linear-gradient(to right, '+color+'06, '+color+'44)">';
|
2018-10-16 05:50:05 +00:00
|
|
|
s+='<td class="hr_col">';
|
2018-10-16 04:36:39 +00:00
|
|
|
s+='<a href="'+generate_page_changer_link(intent.uuid)+'">';
|
2018-10-16 05:50:05 +00:00
|
|
|
s+='<div class="dy">';
|
2018-10-22 03:50:21 +00:00
|
|
|
s+=escapeHtml(LocalizeWeekdays(get_language())[intent.time_start.wd].slice(0, 3));
|
2018-10-16 04:36:39 +00:00
|
|
|
s+='</div>';
|
2018-10-16 05:50:05 +00:00
|
|
|
s+='<div class="tm tms">';
|
2018-10-16 04:36:39 +00:00
|
|
|
s+=('0'+escapeHtml(intent.time_start.hr)).slice(-2)+':'+('0'+escapeHtml(intent.time_start.mn)).slice(-2);
|
|
|
|
s+='</div>';
|
2018-10-16 05:50:05 +00:00
|
|
|
s+='<div class="tm tme">';
|
2018-10-16 04:36:39 +00:00
|
|
|
s+=('0'+escapeHtml(intent.time_end.hr)).slice(-2)+':'+('0'+escapeHtml(intent.time_end.mn)).slice(-2);
|
|
|
|
s+='</div>';
|
|
|
|
s+='</a>'
|
|
|
|
s+='</td>';
|
2018-10-16 05:50:05 +00:00
|
|
|
s+='<td class="lb_col">';
|
2018-10-16 04:36:39 +00:00
|
|
|
s+='<a href="'+generate_page_changer_link(intent.uuid)+'">';
|
2018-10-22 04:56:41 +00:00
|
|
|
s+='<div data-toggle="popover" data-content="'+escapeHtml(
|
|
|
|
render_page_convention_eventrow_popover(intent)
|
|
|
|
)+'" data-trigger="hover" data-html="true" data-placement="bottom" data-delay="200">';
|
2018-10-16 05:50:05 +00:00
|
|
|
s+='<div class="prim">';
|
2018-10-16 04:36:39 +00:00
|
|
|
s+=escapeHtml(intent.title[get_language()])
|
|
|
|
s+='</div>';
|
2018-10-16 05:50:05 +00:00
|
|
|
s+='<div class="sec">';
|
2018-10-16 04:36:39 +00:00
|
|
|
if(intent.subtitle.uuid){
|
|
|
|
s+=escapeHtml((intent.subtitle||{})[get_language()]||'')
|
|
|
|
}else{
|
|
|
|
s+=escapeHtml((new TextualJoiner(get_language())).join(intent.places.map(each=>each.label[get_language()])))
|
|
|
|
}
|
|
|
|
s+='</div>';
|
2018-10-22 04:56:41 +00:00
|
|
|
s+='</div>';
|
2018-10-16 04:36:39 +00:00
|
|
|
s+='</a>';
|
|
|
|
s+='</td>';
|
2018-10-22 03:50:21 +00:00
|
|
|
s+='<td style="width: .4em; background-color: '+color+';">';
|
|
|
|
s+='</td>';
|
2018-10-16 01:26:30 +00:00
|
|
|
s+='</tr>';
|
2018-12-20 03:02:54 +00:00
|
|
|
// setTimeout(()=>{
|
|
|
|
// var element = document.getElementById('uuid'+intent.uuid)
|
|
|
|
// registerLongPressCallback(element, ()=>{
|
|
|
|
// $("#uuid"+intent.uuid+' [data-toggle="popover"]').popover('toggle')
|
|
|
|
// //document.querySelector("#uuid"+intent.uuid+" a").click()
|
|
|
|
// })
|
|
|
|
// }, 100);
|
2018-10-16 01:26:30 +00:00
|
|
|
return s;
|
|
|
|
}
|
2018-10-15 20:52:39 +00:00
|
|
|
|
2018-10-16 01:26:30 +00:00
|
|
|
function render_page_convention(intent){
|
|
|
|
var s='';
|
|
|
|
document.title = intent.theme[get_language()]+' | '+intent.name[get_language()];
|
|
|
|
s+='<h1>'+intent.name[get_language()]+'</h1>';
|
|
|
|
s+='<h2>'+intent.theme[get_language()]+'</h2>';
|
|
|
|
s+='<table class="eventstable">';
|
2018-10-16 04:36:39 +00:00
|
|
|
var events = JSON.parse(JSON.stringify(intent.events));
|
|
|
|
events.reverse();
|
2018-12-20 03:02:54 +00:00
|
|
|
var previousEventDay = null
|
|
|
|
for(var event of events){
|
|
|
|
event = prepared_data[event.uuid]
|
|
|
|
var thisEventDay = event.time_start.dy
|
|
|
|
if(previousEventDay != thisEventDay){
|
|
|
|
previousEventDay = thisEventDay;
|
|
|
|
s+=render_page_convention_eventrow_daychange(event);
|
|
|
|
}
|
|
|
|
s+=render_page_convention_eventrow(event);
|
|
|
|
}
|
2018-10-16 01:26:30 +00:00
|
|
|
s+='</table>';
|
|
|
|
return s;
|
2018-10-15 20:52:39 +00:00
|
|
|
}
|
|
|
|
|
2018-10-16 04:36:39 +00:00
|
|
|
function render_page_event_keypair(key, value){
|
|
|
|
s='';
|
|
|
|
s+='<div style="padding-top: 0.3em; padding-bottom: 0.3em;">';
|
|
|
|
s+='<span style="margin: 0.2em; padding: 0.2em; margin-left: 0.5em; border-radius: 0.2em; background-color: #BBBBBB; font-weight: bold; box-shadow: 0px 2px 3px #707070;">';
|
|
|
|
s+=escapeHtml(key);
|
|
|
|
s+='</span>';
|
|
|
|
s+='<div style="margin: 0.2em; padding: 0.2em; margin-top: -0.5em; padding-top: 1em; border-radius: 0.2em; background-color: #DDDDDD; box-shadow: 0px 2px 3px #909090;">';
|
|
|
|
s+=escapeHtml(value);
|
|
|
|
s+='</div>';
|
|
|
|
s+='</div>';
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
|
|
|
|
function render_page_event(intent){
|
2018-10-16 05:27:41 +00:00
|
|
|
document.title = intent.title[get_language()] + ' | ' + document.title;
|
2018-12-20 03:02:54 +00:00
|
|
|
scrollToElementId('uuid'+intent.uuid)
|
2018-10-16 04:36:39 +00:00
|
|
|
var s = '';
|
2018-12-20 03:02:54 +00:00
|
|
|
s+='<div id="uuid'+current.uuid+'" style="width: 100%; padding-top: 30%; padding-bottom: 2%; color: white; font-size: 2em; ';
|
2018-10-16 04:36:39 +00:00
|
|
|
if(intent.picture.uuid)
|
2018-12-20 03:02:54 +00:00
|
|
|
s+='background-size: cover; background-image: url(\'.'+intent.picture[get_language()]+'\');';
|
2018-10-16 04:36:39 +00:00
|
|
|
else
|
2018-12-20 03:02:54 +00:00
|
|
|
s+='background-image: linear-gradient(transparent, black);';
|
2018-10-16 04:36:39 +00:00
|
|
|
s+='">';
|
|
|
|
s+='<span style="display: block; padding-left: 2%; padding-right: 2%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">';
|
|
|
|
s+=escapeHtml(intent.title[get_language()]);
|
|
|
|
s+='</span>';
|
|
|
|
s+='</div>';
|
2018-10-16 05:05:06 +00:00
|
|
|
var lbl_atv = {'pt': 'Atividade', 'en': 'Activity', 'es': 'Actividad'}[get_language()]
|
|
|
|
var lbl_dtl = {'pt': 'Detalhe', 'en': 'Detail', 'es': 'Detalle'}[get_language()]
|
|
|
|
var lbl_qnd = {'pt': 'Quando', 'en': 'When', 'es': 'Cuando'}[get_language()]
|
|
|
|
var lbl_plc = {'pt': 'Lugar', 'en': 'Place', 'es': 'Lugar'}[get_language()]
|
|
|
|
var lbl_lng = {'pt': 'Idioma', 'en': 'Language', 'es': 'Idioma'}[get_language()]
|
|
|
|
var lbl_dsc = {'pt': 'Descrição', 'en': 'Description', 'es': 'Descripción'}[get_language()]
|
|
|
|
var lbl_cat = {'pt': 'Categoria', 'en': 'Category', 'es': 'Categoría'}[get_language()]
|
|
|
|
var lbl_cbp = {'pt': 'Na página do conbook', 'en': 'Conbook\'s page', 'es': 'En la página del conbook'}[get_language()]
|
|
|
|
var lbl_cbi = {'pt': 'Identificado no conbook como', 'en': 'Identified on conbook as', 'es': 'Identificado en el conbook como'}[get_language()]
|
|
|
|
var lbl_elg = {'pt': 'Inscrições elegíveis', 'en': 'Eligible tiers', 'es': 'Registros elegibles'}[get_language()]
|
2018-10-16 04:36:39 +00:00
|
|
|
s+=render_page_event_keypair(lbl_atv, intent.title[get_language()]);
|
|
|
|
if(intent.subtitle.uuid)s+=render_page_event_keypair(lbl_dtl, intent.subtitle[get_language()]);
|
2018-12-20 03:02:54 +00:00
|
|
|
s+=render_page_event_keypair(
|
|
|
|
lbl_qnd, language_textual_date_ranges[get_language()]
|
2018-10-16 04:36:39 +00:00
|
|
|
.replace('{0}', LocalizeWeekdays(get_language())[intent.time_start.wd])
|
|
|
|
.replace('{1}', intent.time_start.dy)
|
|
|
|
.replace('{2}', ('0'+intent.time_start.hr).slice(-2))
|
|
|
|
.replace('{3}', ('0'+intent.time_start.mn).slice(-2))
|
|
|
|
.replace('{4}', ('0'+intent.time_end.hr).slice(-2))
|
|
|
|
.replace('{5}', ('0'+intent.time_end.mn).slice(-2))
|
|
|
|
);
|
|
|
|
if(intent.places.length>0)s+=render_page_event_keypair(lbl_plc, new TextualJoiner(get_language()).join(intent.places.map(v=>v.label[get_language()])));
|
|
|
|
if(intent.language!=intent.con_lang)s+=render_page_event_keypair(lbl_lng, language_name_matrix[intent.language][get_language()]);
|
|
|
|
s+=render_page_event_keypair(lbl_dsc, intent.description[get_language()]);
|
|
|
|
if(intent.categories.length>0)s+=render_page_event_keypair(lbl_cat, new TextualJoiner(get_language()).join(intent.categories.map(v=>v.label[get_language()])));
|
|
|
|
s+=render_page_event_keypair(lbl_cbp, new TextualJoiner(get_language()).join(intent.conbook_pages));
|
|
|
|
s+=render_page_event_keypair(lbl_cbi, intent.conbook_key);
|
|
|
|
s+=render_page_event_keypair(lbl_elg, new TextualJoiner(get_language()).join(intent.attendable_by.map(v=>v.tier[get_language()])));
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
|
2018-10-16 01:26:30 +00:00
|
|
|
function render_page(){
|
|
|
|
var intent = prepared_data[get_pageuuid()];
|
2018-12-20 03:02:54 +00:00
|
|
|
current = intent
|
2018-10-16 01:26:30 +00:00
|
|
|
var s='';
|
|
|
|
s+='<main>';
|
|
|
|
if(false){}
|
|
|
|
else if(intent.kind === 'convention_edition') s+=render_page_convention(intent);
|
2018-10-16 04:36:39 +00:00
|
|
|
else if(intent.kind === 'event') s+=render_page_event(intent);
|
|
|
|
else s+='There is no view for this kind of content.';
|
2018-10-16 01:26:30 +00:00
|
|
|
s+='</main>';
|
2018-10-22 04:56:41 +00:00
|
|
|
setTimeout(()=>{$('[data-toggle="popover"]').popover();}, 250);
|
2018-10-16 01:26:30 +00:00
|
|
|
return s;
|
2018-10-15 20:52:39 +00:00
|
|
|
}
|
|
|
|
|
2018-10-16 01:26:30 +00:00
|
|
|
var get_language = () => document.location.hash.split('#')[1] || "";
|
|
|
|
var get_pageuuid = () => document.location.hash.split('#')[2] || "";
|
|
|
|
var generate_language_changer_link = lang => "#"+lang+"#"+get_pageuuid()
|
|
|
|
var generate_page_changer_link = page => "#"+get_language()+"#"+page
|
|
|
|
var change_page = page => window.history.replaceState({}, "", generate_page_changer_link(page));
|
|
|
|
var change_language = lang => window.history.replaceState({}, "", generate_language_changer_link(lang));
|
2018-10-15 20:52:39 +00:00
|
|
|
|
2018-10-16 01:26:30 +00:00
|
|
|
function init(){
|
2018-10-15 20:52:39 +00:00
|
|
|
prepare_convention_series(data);
|
2018-10-16 04:36:39 +00:00
|
|
|
if(get_pageuuid()==='' || !(get_pageuuid() in prepared_data))
|
2018-12-20 03:02:54 +00:00
|
|
|
change_page(data.featured || data.editions[0]);
|
2018-10-15 20:52:39 +00:00
|
|
|
re_render_everything();
|
|
|
|
}
|
|
|
|
|
2018-12-20 03:02:54 +00:00
|
|
|
function scrollToElementId(elementId){
|
|
|
|
setTimeout(()=>{
|
|
|
|
var elem = document.getElementById(elementId)
|
|
|
|
if(elem !== null){
|
|
|
|
elem.scrollIntoView({
|
|
|
|
behavior: "smooth",
|
|
|
|
block: "center",
|
|
|
|
inline: "center"
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}, 100)
|
|
|
|
}
|
|
|
|
|
2018-10-15 20:52:39 +00:00
|
|
|
window.onpopstate = (event) => {
|
2018-12-20 03:02:54 +00:00
|
|
|
scrollToElementId("uuid"+((current||{}).uuid||""))
|
2018-10-15 20:52:39 +00:00
|
|
|
re_render_everything();
|
|
|
|
}
|
|
|
|
|
2018-12-20 03:02:54 +00:00
|
|
|
|
2018-10-15 20:52:39 +00:00
|
|
|
(() => {
|
|
|
|
if(
|
|
|
|
((document.location.hash.split('#')[1] || "") === "")
|
|
|
|
){
|
|
|
|
change_language(DEFAULT_LANG);
|
|
|
|
}
|
|
|
|
})();
|
|
|
|
|
|
|
|
jQuery.getJSON(
|
2018-10-16 05:05:06 +00:00
|
|
|
'./static/data.json',
|
2018-10-15 20:52:39 +00:00
|
|
|
(resp) => {
|
|
|
|
document.body.innerHTML = '';
|
|
|
|
data = resp;
|
|
|
|
init();
|
|
|
|
}
|
|
|
|
);
|