Fixed front page on mobile and improved city lookup
This commit is contained in:
+283
-237
@@ -1,244 +1,290 @@
|
||||
(function() {
|
||||
window.onerror = function(message, url, lineNumber) {
|
||||
//save error and send to server for example.
|
||||
var request = new XMLHttpRequest();
|
||||
request.open('POST', '/js_error', true);
|
||||
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
|
||||
request.send(
|
||||
'message=' + encodeURI(message) +
|
||||
'&url=' + encodeURI(url) +
|
||||
'&lineNumber=' + encodeURI(lineNumber) +
|
||||
'&location=' + encodeURI(window.location.href)
|
||||
);
|
||||
return false;
|
||||
};
|
||||
window.forEach = function(a, f) { Array.prototype.forEach.call(a, f) };
|
||||
window.forEachElement = function(s, f, p) { forEach((p || document).querySelectorAll(s), f) };
|
||||
|
||||
var overlay = document.getElementById('content-overlay');
|
||||
if (overlay) {
|
||||
var body = document.querySelector('body');
|
||||
var primaryContent = document.getElementById('primary-content');
|
||||
primaryContent.addEventListener('keydown', function(event) {
|
||||
if (body.classList.contains('has-overlay')) {
|
||||
event.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
document.addEventListener('focus', function(event) {
|
||||
if (overlay.querySelector('.dlg.open') && !overlay.querySelector('.dlg.open :focus')) {
|
||||
overlay.querySelector('.dlg.open').focus();
|
||||
}
|
||||
}, true);
|
||||
window.openOverlay = function(dlg, primaryContent, body) {
|
||||
primaryContent.setAttribute('aria-hidden', 'true');
|
||||
body.classList.add('has-overlay');
|
||||
var type = dlg.getAttribute('data-type');
|
||||
if (type) {
|
||||
body.classList.add('is-' + type + '-dlg');
|
||||
}
|
||||
dlg.removeAttribute('aria-hidden');
|
||||
dlg.setAttribute('role', 'alertdialog');
|
||||
dlg.setAttribute('tabindex', '0');
|
||||
dlg.focus();
|
||||
setTimeout(function() { dlg.classList.add('open'); }, 100);
|
||||
}
|
||||
window.closeOverlay = function(dlg, primaryContent, body) {
|
||||
setTimeout(function() {
|
||||
body.classList.remove('has-overlay');
|
||||
body.removeAttribute('style');
|
||||
}, 250);
|
||||
var type = dlg.getAttribute('data-type');
|
||||
if (type) {
|
||||
body.classList.remove('is-' + type + '-dlg');
|
||||
}
|
||||
primaryContent.removeAttribute('aria-hidden');
|
||||
dlg.setAttribute('aria-hidden', 'true');
|
||||
dlg.removeAttribute('tabindex');
|
||||
dlg.classList.remove('open');
|
||||
dlg.removeAttribute('role');
|
||||
}
|
||||
window.onerror = function(message, url, lineNumber) {
|
||||
//save error and send to server for example.
|
||||
var request = new XMLHttpRequest();
|
||||
request.open('POST', '/js_error', true);
|
||||
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
|
||||
request.send(
|
||||
'message=' + encodeURI(message) +
|
||||
'&url=' + encodeURI(url) +
|
||||
'&lineNumber=' + encodeURI(lineNumber) +
|
||||
'&location=' + encodeURI(window.location.href)
|
||||
);
|
||||
return false;
|
||||
};
|
||||
window.forEach = function(a, f) { Array.prototype.forEach.call(a, f) };
|
||||
window.forEachElement = function(s, f, p) { forEach((p || document).querySelectorAll(s), f) };
|
||||
|
||||
var overlay = document.getElementById('content-overlay');
|
||||
if (overlay) {
|
||||
var body = document.querySelector('body');
|
||||
var primaryContent = document.getElementById('primary-content');
|
||||
primaryContent.addEventListener('keydown', function(event) {
|
||||
if (body.classList.contains('has-overlay')) {
|
||||
event.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
document.addEventListener('focus', function(event) {
|
||||
if (overlay.querySelector('.dlg.open') && !overlay.querySelector('.dlg.open :focus')) {
|
||||
overlay.querySelector('.dlg.open').focus();
|
||||
}
|
||||
}, true);
|
||||
window.openOverlay = function(dlg, primaryContent, body) {
|
||||
primaryContent.setAttribute('aria-hidden', 'true');
|
||||
body.classList.add('has-overlay');
|
||||
var type = dlg.getAttribute('data-type');
|
||||
if (type) {
|
||||
body.classList.add('is-' + type + '-dlg');
|
||||
}
|
||||
dlg.removeAttribute('aria-hidden');
|
||||
dlg.setAttribute('role', 'alertdialog');
|
||||
dlg.setAttribute('tabindex', '0');
|
||||
dlg.focus();
|
||||
setTimeout(function() { dlg.classList.add('open'); }, 100);
|
||||
}
|
||||
window.closeOverlay = function(dlg, primaryContent, body) {
|
||||
setTimeout(function() {
|
||||
body.classList.remove('has-overlay');
|
||||
body.removeAttribute('style');
|
||||
}, 250);
|
||||
var type = dlg.getAttribute('data-type');
|
||||
if (type) {
|
||||
body.classList.remove('is-' + type + '-dlg');
|
||||
}
|
||||
primaryContent.removeAttribute('aria-hidden');
|
||||
dlg.setAttribute('aria-hidden', 'true');
|
||||
dlg.removeAttribute('tabindex');
|
||||
dlg.classList.remove('open');
|
||||
dlg.removeAttribute('role');
|
||||
}
|
||||
|
||||
function openDlg(dlg, link) {
|
||||
document.getElementById('overlay').onclick =
|
||||
dlg.querySelector('.close').onclick = function() { closeDlg(dlg); };
|
||||
body.setAttribute('style', 'width: ' + body.clientWidth + 'px');
|
||||
var msg = link.querySelector('.message');
|
||||
if (msg) {
|
||||
dlg.querySelector('.message').innerHTML = msg.innerHTML
|
||||
}
|
||||
if (link.dataset.infoTitle) {
|
||||
dlg.querySelector('.title').innerHTML = decodeURI(link.dataset.infoTitle);
|
||||
}
|
||||
confirmBtn = dlg.querySelector('.confirm');
|
||||
if (confirmBtn) {
|
||||
confirmBtn.addEventListener('click', function(event) {
|
||||
event.preventDefault();
|
||||
if (link.tagName == 'BUTTON') {
|
||||
var form = link.parentElement
|
||||
while (form && form.tagName != 'FORM') {
|
||||
var form = form.parentElement
|
||||
}
|
||||
if (form) {
|
||||
var input = document.createElement('input');
|
||||
input.type = 'hidden';
|
||||
input.name = 'button';
|
||||
input.value = link.value;
|
||||
form.appendChild(input);
|
||||
form.submit();
|
||||
}
|
||||
} else {
|
||||
window.location.href = link.getAttribute('href');
|
||||
}
|
||||
});
|
||||
}
|
||||
window.openOverlay(dlg, primaryContent, body);
|
||||
}
|
||||
function closeDlg(dlg) {
|
||||
window.closeOverlay(dlg, primaryContent, body);
|
||||
}
|
||||
function openDlg(dlg, link) {
|
||||
document.getElementById('overlay').onclick =
|
||||
dlg.querySelector('.close').onclick = function() { closeDlg(dlg); };
|
||||
body.setAttribute('style', 'width: ' + body.clientWidth + 'px');
|
||||
var msg = link.querySelector('.message');
|
||||
if (msg) {
|
||||
dlg.querySelector('.message').innerHTML = msg.innerHTML
|
||||
}
|
||||
if (link.dataset.infoTitle) {
|
||||
dlg.querySelector('.title').innerHTML = decodeURI(link.dataset.infoTitle);
|
||||
}
|
||||
confirmBtn = dlg.querySelector('.confirm');
|
||||
if (confirmBtn) {
|
||||
confirmBtn.addEventListener('click', function(event) {
|
||||
event.preventDefault();
|
||||
if (link.tagName == 'BUTTON') {
|
||||
var form = link.parentElement
|
||||
while (form && form.tagName != 'FORM') {
|
||||
var form = form.parentElement
|
||||
}
|
||||
if (form) {
|
||||
var input = document.createElement('input');
|
||||
input.type = 'hidden';
|
||||
input.name = 'button';
|
||||
input.value = link.value;
|
||||
form.appendChild(input);
|
||||
form.submit();
|
||||
}
|
||||
} else {
|
||||
window.location.href = link.getAttribute('href');
|
||||
}
|
||||
});
|
||||
}
|
||||
window.openOverlay(dlg, primaryContent, body);
|
||||
}
|
||||
function closeDlg(dlg) {
|
||||
window.closeOverlay(dlg, primaryContent, body);
|
||||
}
|
||||
|
||||
var confirmationDlg = document.getElementById('confirmation-dlg');
|
||||
forEachElement('[data-confirmation]', function(link) {
|
||||
link.addEventListener('click', function(event) {
|
||||
event.preventDefault();
|
||||
openDlg(confirmationDlg, link);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
var infoDlg = document.getElementById('info-dlg');
|
||||
forEachElement('[data-info-text]', function(link) {
|
||||
link.addEventListener('click', function(event) {
|
||||
event.preventDefault();
|
||||
openDlg(infoDlg, link);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
var loginDlg = document.getElementById('login-dlg');
|
||||
forEachElement('[data-sign-in]', function(link) {
|
||||
link.addEventListener('click', function(event) {
|
||||
event.preventDefault();
|
||||
openDlg(loginDlg, link);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
var contactDlg = document.getElementById('contact-dlg');
|
||||
var contactLink = document.getElementById('contact-link');
|
||||
contactLink.addEventListener('click', function(event) {
|
||||
event.preventDefault();
|
||||
openDlg(contactDlg, contactLink);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
var htmlNode = document.documentElement;
|
||||
document.addEventListener('keydown', function(event) {
|
||||
if (htmlNode.dataset.input != 'kb' &&
|
||||
((["input", "textarea", "select", "option"].indexOf(event.target.nodeName.toLowerCase()) < 0 &&
|
||||
!event.target.attributes.contenteditable) || event.key == "Tab")) {
|
||||
htmlNode.setAttribute('data-input', 'kb');
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('mousemove', function(event) {
|
||||
if (htmlNode.dataset.input != 'mouse' && (event.movementX || event.movementY)) {
|
||||
htmlNode.setAttribute('data-input', 'mouse');
|
||||
}
|
||||
});
|
||||
var confirmationDlg = document.getElementById('confirmation-dlg');
|
||||
forEachElement('[data-confirmation]', function(link) {
|
||||
link.addEventListener('click', function(event) {
|
||||
event.preventDefault();
|
||||
openDlg(confirmationDlg, link);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
var infoDlg = document.getElementById('info-dlg');
|
||||
forEachElement('[data-info-text]', function(link) {
|
||||
link.addEventListener('click', function(event) {
|
||||
event.preventDefault();
|
||||
openDlg(infoDlg, link);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
var loginDlg = document.getElementById('login-dlg');
|
||||
forEachElement('[data-sign-in]', function(link) {
|
||||
link.addEventListener('click', function(event) {
|
||||
event.preventDefault();
|
||||
openDlg(loginDlg, link);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
var contactDlg = document.getElementById('contact-dlg');
|
||||
var contactLink = document.getElementById('contact-link');
|
||||
contactLink.addEventListener('click', function(event) {
|
||||
event.preventDefault();
|
||||
openDlg(contactDlg, contactLink);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
var htmlNode = document.documentElement;
|
||||
document.addEventListener('keydown', function(event) {
|
||||
if (htmlNode.dataset.input != 'kb' &&
|
||||
((["input", "textarea", "select", "option"].indexOf(event.target.nodeName.toLowerCase()) < 0 &&
|
||||
!event.target.attributes.contenteditable) || event.key == "Tab")) {
|
||||
htmlNode.setAttribute('data-input', 'kb');
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('mousemove', function(event) {
|
||||
if (htmlNode.dataset.input != 'mouse' && (event.movementX || event.movementY)) {
|
||||
htmlNode.setAttribute('data-input', 'mouse');
|
||||
}
|
||||
});
|
||||
|
||||
var errorField = document.querySelector('.input-field.has-error input, .input-field.has-error textarea');
|
||||
if (errorField) {
|
||||
errorField.focus();
|
||||
}
|
||||
|
||||
window.initNodeFunctions = [ function(node) {
|
||||
forEachElement('.number-field,.email-field,.text-field,.password-field,.search-field', function(field) {
|
||||
var input = field.querySelector('input');
|
||||
var positionLabel = function(input) {
|
||||
field.classList[input.value ? 'remove' : 'add']('empty');
|
||||
}
|
||||
positionLabel(input);
|
||||
input.addEventListener('keyup', function(event) {
|
||||
positionLabel(event.target);
|
||||
});
|
||||
input.addEventListener('blur', function(event) {
|
||||
positionLabel(event.target);
|
||||
field.classList.remove('focused');
|
||||
});
|
||||
input.addEventListener('focus', function(event) {
|
||||
field.classList.add('focused');
|
||||
});
|
||||
}, node || document);
|
||||
forEachElement('form.js-xhr', function(form) {
|
||||
if (form.addEventListener) {
|
||||
form.addEventListener('submit', function(event) {
|
||||
event.preventDefault();
|
||||
form.classList.add('requesting');
|
||||
var data = new FormData(form);
|
||||
var request = new XMLHttpRequest();
|
||||
request.onreadystatechange = function() {
|
||||
if (request.readyState == 4) {
|
||||
form.classList.remove('requesting');
|
||||
if (request.status == 200) {
|
||||
var response = JSON.parse(request.responseText);
|
||||
for (var i = 0; i < response.length; i++) {
|
||||
var element;
|
||||
if (response[i].selector) {
|
||||
element = form.querySelector(response[i].selector);
|
||||
}
|
||||
if (response[i].globalSelector) {
|
||||
element = document.querySelector(response[i].globalSelector);
|
||||
}
|
||||
var errorField = document.querySelector('.input-field.has-error input, .input-field.has-error textarea');
|
||||
if (errorField) {
|
||||
errorField.focus();
|
||||
}
|
||||
|
||||
window.initNodeFunctions = [ function(node) {
|
||||
forEachElement('.number-field,.email-field,.text-field,.password-field,.search-field', function(field) {
|
||||
var input = field.querySelector('input');
|
||||
var positionLabel = function(input) {
|
||||
field.classList[input.value ? 'remove' : 'add']('empty');
|
||||
}
|
||||
positionLabel(input);
|
||||
input.addEventListener('keyup', function(event) {
|
||||
positionLabel(event.target);
|
||||
});
|
||||
input.addEventListener('blur', function(event) {
|
||||
positionLabel(event.target);
|
||||
field.classList.remove('focused');
|
||||
});
|
||||
input.addEventListener('focus', function(event) {
|
||||
field.classList.add('focused');
|
||||
});
|
||||
}, node || document);
|
||||
forEachElement('form.js-xhr', function(form) {
|
||||
if (form.addEventListener) {
|
||||
form.addEventListener('submit', function(event) {
|
||||
event.preventDefault();
|
||||
form.classList.add('requesting');
|
||||
var data = new FormData(form);
|
||||
var request = new XMLHttpRequest();
|
||||
request.onreadystatechange = function() {
|
||||
if (request.readyState == 4) {
|
||||
form.classList.remove('requesting');
|
||||
if (request.status == 200) {
|
||||
var response = JSON.parse(request.responseText);
|
||||
for (var i = 0; i < response.length; i++) {
|
||||
var element;
|
||||
if (response[i].selector) {
|
||||
element = form.querySelector(response[i].selector);
|
||||
}
|
||||
if (response[i].globalSelector) {
|
||||
element = document.querySelector(response[i].globalSelector);
|
||||
}
|
||||
|
||||
if (response[i].html) {
|
||||
element.innerHTML = response[i].html;
|
||||
window.initNode(element);
|
||||
}
|
||||
if (response[i].className) {
|
||||
element.className = response[i].className;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
request.open('POST', form.getAttribute('action'), true);
|
||||
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
||||
request.send(data);
|
||||
}, false);
|
||||
}
|
||||
}, node || document);
|
||||
forEachElement('[data-opens]', function(control) {
|
||||
control.addEventListener('click', function(event) {
|
||||
var opens = document.querySelector(control.getAttribute('data-opens'));
|
||||
if (!opens.classList.contains('open')){
|
||||
event.preventDefault();
|
||||
opens.className += ' open';
|
||||
if (control.getAttribute('data-focus')) {
|
||||
var input = opens.querySelector(control.getAttribute('data-focus'));
|
||||
if (input) {
|
||||
input.focus();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
} ];
|
||||
window.initNode = function(node) {
|
||||
forEach(initNodeFunctions, function(fn) {
|
||||
fn(node);
|
||||
});
|
||||
};
|
||||
initNode();
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var errors = document.getElementsByClassName('has-error');
|
||||
if (errors.length <= 0) {
|
||||
errors = document.getElementsByClassName('info-message');
|
||||
}
|
||||
|
||||
if (errors.length > 0) {
|
||||
errors[0].scrollIntoView();
|
||||
}
|
||||
});
|
||||
if (response[i].html) {
|
||||
element.innerHTML = response[i].html;
|
||||
window.initNode(element);
|
||||
}
|
||||
if (response[i].className) {
|
||||
element.className = response[i].className;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
request.open('POST', form.getAttribute('action'), true);
|
||||
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
||||
request.send(data);
|
||||
}, false);
|
||||
}
|
||||
}, node || document);
|
||||
forEachElement('[data-opens]', function(control) {
|
||||
control.addEventListener('click', function(event) {
|
||||
var opens = document.querySelector(control.getAttribute('data-opens'));
|
||||
if (!opens.classList.contains('open')){
|
||||
event.preventDefault();
|
||||
opens.className += ' open';
|
||||
if (control.getAttribute('data-focus')) {
|
||||
var input = opens.querySelector(control.getAttribute('data-focus'));
|
||||
if (input) {
|
||||
input.focus();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
} ];
|
||||
window.initNode = function(node) {
|
||||
forEach(initNodeFunctions, function(fn) {
|
||||
fn(node);
|
||||
});
|
||||
};
|
||||
initNode();
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var errors = document.getElementsByClassName('has-error');
|
||||
if (errors.length <= 0) {
|
||||
errors = document.getElementsByClassName('info-message');
|
||||
}
|
||||
|
||||
if (errors.length > 0) {
|
||||
errors[0].scrollIntoView();
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
function generateScreenshot() {
|
||||
var css = '';
|
||||
var svgs = document.getElementsByTagName('svg');
|
||||
for (var i = 0; i < document.styleSheets.length; i++) {
|
||||
if (document.styleSheets[i].href && !document.styleSheets[i].href.match(/web\-fonts/)) {
|
||||
var rules = document.styleSheets[i].rules || document.styleSheets[i].cssRules;
|
||||
for (var j = 0; j < rules.length; j++) {
|
||||
cssText = rules[j].cssText;
|
||||
if (rules[j].selectorText) {
|
||||
if (rules[j].selectorText.match(/(^|\s)svg[^\w]/) || cssText.match(/\s(fill|stroke(\-width)?):/)) {
|
||||
css += cssText;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < svgs.length; i++) {
|
||||
var svg = svgs[i];
|
||||
// svg.innerHTML = '<style type="text/css"><![CDATA[' + css + ']]></style>' + svg.innerHTML;
|
||||
svg.innerHTML = '<style type="text/css"><![CDATA[' + css + ']]></style>' + svg.innerHTML;
|
||||
svg.setAttribute('height', svg.clientHeight);
|
||||
svg.setAttribute('width', svg.clientWidth);
|
||||
var canvas = document.createElement('canvas');
|
||||
canvg(canvas, svg.outerHTML);
|
||||
console.log(svg.outerHTML);
|
||||
svg.style.backgroundImage = 'url(' + encodeURI(canvas.toDataURL('image/png')) + ')';
|
||||
}
|
||||
|
||||
html2canvas(document.body, {
|
||||
logging: true,
|
||||
profile: true,
|
||||
useCORS: true}).then(function(canvas) {
|
||||
var data = canvas.toDataURL('image/jpeg', 0.9);
|
||||
var src = encodeURI(data);
|
||||
|
||||
window.open(src, '_blank');
|
||||
|
||||
// reset the svg height and width
|
||||
for (var i = 0; i < svgs.length; i++) {
|
||||
var svg = svgs[i];
|
||||
svg.removeAttribute('height');
|
||||
svg.removeAttribute('width');
|
||||
svg.removeAttribute('style');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ html, body {
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: $white;
|
||||
padding-bottom: 20vw;
|
||||
}
|
||||
|
||||
@@ -1807,6 +1808,7 @@ ul.warnings {
|
||||
a {
|
||||
color: inherit;
|
||||
padding: 0 0.333em;
|
||||
display: inline-block;
|
||||
|
||||
&:hover {
|
||||
@include after {
|
||||
@@ -2946,6 +2948,9 @@ a.logo {
|
||||
|
||||
.conference-banner {
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
margin: 0 -1em 2em;
|
||||
width: auto;
|
||||
|
||||
.title {
|
||||
font-size: 5vw;
|
||||
@@ -2964,6 +2969,10 @@ a.logo {
|
||||
font-size: 0.85em;
|
||||
line-height: 2em;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.conference-details {
|
||||
@@ -4653,15 +4662,6 @@ html[data-ontop] {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// .nav a.register, .nav button {
|
||||
// @include before-and-after {
|
||||
// background-color: $colour-2;
|
||||
// }
|
||||
// &:focus, &:active {
|
||||
// @include _(transform, none);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
#banner {
|
||||
@@ -4674,6 +4674,9 @@ html[data-ontop] {
|
||||
}
|
||||
|
||||
.conference-banner {
|
||||
margin: 0 auto;
|
||||
width: 100%;
|
||||
|
||||
.title {
|
||||
font-size: 1.9em;
|
||||
margin: 0 0 1em;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"and_chr": ["54"],
|
||||
"chrome": ["54"],
|
||||
"edge": ["13"],
|
||||
"firefox": ["44"],
|
||||
"firefox": ["48"],
|
||||
"ie": ["11"],
|
||||
"ios_saf": ["8", "9"]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user