129 lines
3.2 KiB
JavaScript
129 lines
3.2 KiB
JavaScript
(function() {
|
|
// globals
|
|
MyApp.Utils = {};
|
|
|
|
|
|
// utility functions
|
|
MyApp.Utils.getUrlParameter = function(name) {
|
|
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
|
|
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
|
|
var results = regex.exec(location.search);
|
|
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
|
|
};
|
|
|
|
MyApp.Utils.removeURLParameter = function(url, parameter) {
|
|
//prefer to use l.search if you have a location/link object
|
|
var urlparts = url.split('?');
|
|
if (urlparts.length >= 2) {
|
|
|
|
var prefix = encodeURIComponent(parameter) + '=';
|
|
var pars = urlparts[1].split(/[&;]/g);
|
|
|
|
//reverse iteration as may be destructive
|
|
for (var i = pars.length; i-- > 0;) {
|
|
//idiom for string.startsWith
|
|
if (pars[i].lastIndexOf(prefix, 0) !== -1) {
|
|
pars.splice(i, 1);
|
|
}
|
|
}
|
|
|
|
return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : '');
|
|
}
|
|
return url;
|
|
};
|
|
|
|
|
|
// app functions
|
|
MyApp.renderShell = function() {
|
|
document.title = i18next.t('vanillaJS');
|
|
|
|
var d = $.Deferred();
|
|
|
|
//preload this template, so we can be sure the dom in rendered when we resolve
|
|
ejs.preloadTemplate('/templates/main.ejs')
|
|
.then(function(templateUrl) {
|
|
$('.js-main-content').html(ejs.rr(templateUrl));
|
|
d.resolve();
|
|
});
|
|
return d;
|
|
};
|
|
|
|
MyApp.renderHomePage = function() {
|
|
$('.js-page-container').html(ejs.rr('/templates/home.ejs'));
|
|
};
|
|
|
|
MyApp.renderTextPage = function() {
|
|
$('.js-page-container').html(ejs.rr('/templates/sometext.ejs', {
|
|
texts: [
|
|
{
|
|
id: 100,
|
|
description: 'Some text with id 100'
|
|
},
|
|
{
|
|
id: 200,
|
|
description: 'Some other text with id 200. Click it!'
|
|
}
|
|
]
|
|
}));
|
|
};
|
|
|
|
MyApp.renderAboutPage = function() {
|
|
$('.js-page-container').html(ejs.rr('/templates/about.ejs'));
|
|
};
|
|
|
|
// events
|
|
$(document).on('click', '.js-link', function(ev) {
|
|
var el = $(ev.currentTarget);
|
|
var linkId = el.attr('data-id');
|
|
PNotify.success('The text you clicked had id ' + linkId + '. Maybe next time I will do something with this id.');
|
|
});
|
|
|
|
|
|
// app startup
|
|
|
|
// set language
|
|
i18next
|
|
.use(i18nextBrowserLanguageDetector)
|
|
.use(i18nextXHRBackend)
|
|
.init({
|
|
detection: {
|
|
order: ['querystring', 'cookie', 'navigator'],
|
|
lookupQuerystring: 'lang',
|
|
lookupCookie: 'current-language',
|
|
caches: ['cookie'],
|
|
cookieMinutes: 5256000
|
|
},
|
|
whitelist: ['en', 'de', 'it'],
|
|
nonExplicitWhitelist: true,
|
|
fallbackLng: 'it',
|
|
backend: {
|
|
loadPath: '/i18n/{{lng}}.json'
|
|
}
|
|
})
|
|
.then(function() {
|
|
// language initialized
|
|
// if there is a lang query string parameter, remove it and reload: we save the language in a cookie so the url stays nice
|
|
if (MyApp.Utils.getUrlParameter('lang')) {
|
|
var newUrl = MyApp.Utils.removeURLParameter(window.location.toString(), 'lang');
|
|
//removeURLParameter does not return the hash. add it back if there is one.
|
|
newUrl = newUrl + window.location.hash;
|
|
window.location = newUrl;
|
|
return;
|
|
}
|
|
|
|
// render main shell
|
|
MyApp.renderShell()
|
|
.then(function() {
|
|
//setup routing
|
|
page('/', MyApp.renderHomePage);
|
|
page('/about', MyApp.renderAboutPage);
|
|
page('/text', MyApp.renderTextPage);
|
|
|
|
page({
|
|
hashbang: true
|
|
});
|
|
});
|
|
});
|
|
|
|
})();
|