Skip to content
Snippets Groups Projects
Commit 07544fbd authored by Hakkel Tamás's avatar Hakkel Tamás
Browse files

add language switcher

parent 4776b496
Branches
No related tags found
No related merge requests found
......@@ -12,3 +12,15 @@ nav {
height: 2.5rem;
padding: 0rem 1rem 0rem 0rem;
}
#languages {
font-size: small;
margin-left: auto;
margin-right: 1rem;
}
#languages a {
color: rgba(0,0,0,.5);
}
#languages a:hover {
text-decoration: none;
color: rgba(0,0,0,.7);
}
\ No newline at end of file
/*!
* JavaScript Cookie v2.2.0
* https://github.com/js-cookie/js-cookie
*
* Copyright 2006, 2015 Klaus Hartl & Fagner Brack
* Released under the MIT license
*/
;(function (factory) {
var registeredInModuleLoader = false;
if (typeof define === 'function' && define.amd) {
define(factory);
registeredInModuleLoader = true;
}
if (typeof exports === 'object') {
module.exports = factory();
registeredInModuleLoader = true;
}
if (!registeredInModuleLoader) {
var OldCookies = window.Cookies;
var api = window.Cookies = factory();
api.noConflict = function () {
window.Cookies = OldCookies;
return api;
};
}
}(function () {
function extend () {
var i = 0;
var result = {};
for (; i < arguments.length; i++) {
var attributes = arguments[ i ];
for (var key in attributes) {
result[key] = attributes[key];
}
}
return result;
}
function init (converter) {
function api (key, value, attributes) {
var result;
if (typeof document === 'undefined') {
return;
}
// Write
if (arguments.length > 1) {
attributes = extend({
path: '/'
}, api.defaults, attributes);
if (typeof attributes.expires === 'number') {
var expires = new Date();
expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
attributes.expires = expires;
}
// We're using "expires" because "max-age" is not supported by IE
attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
try {
result = JSON.stringify(value);
if (/^[\{\[]/.test(result)) {
value = result;
}
} catch (e) {}
if (!converter.write) {
value = encodeURIComponent(String(value))
.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
} else {
value = converter.write(value, key);
}
key = encodeURIComponent(String(key));
key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
key = key.replace(/[\(\)]/g, escape);
var stringifiedAttributes = '';
for (var attributeName in attributes) {
if (!attributes[attributeName]) {
continue;
}
stringifiedAttributes += '; ' + attributeName;
if (attributes[attributeName] === true) {
continue;
}
stringifiedAttributes += '=' + attributes[attributeName];
}
return (document.cookie = key + '=' + value + stringifiedAttributes);
}
// Read
if (!key) {
result = {};
}
// To prevent the for loop in the first place assign an empty array
// in case there are no cookies at all. Also prevents odd result when
// calling "get()"
var cookies = document.cookie ? document.cookie.split('; ') : [];
var rdecode = /(%[0-9A-Z]{2})+/g;
var i = 0;
for (; i < cookies.length; i++) {
var parts = cookies[i].split('=');
var cookie = parts.slice(1).join('=');
if (!this.json && cookie.charAt(0) === '"') {
cookie = cookie.slice(1, -1);
}
try {
var name = parts[0].replace(rdecode, decodeURIComponent);
cookie = converter.read ?
converter.read(cookie, name) : converter(cookie, name) ||
cookie.replace(rdecode, decodeURIComponent);
if (this.json) {
try {
cookie = JSON.parse(cookie);
} catch (e) {}
}
if (key === name) {
result = cookie;
break;
}
if (!key) {
result[name] = cookie;
}
} catch (e) {}
}
return result;
}
api.set = api;
api.get = function (key) {
return api.call(api, key);
};
api.getJSON = function () {
return api.apply({
json: true
}, [].slice.call(arguments));
};
api.defaults = {};
api.remove = function (key, attributes) {
api(key, '', extend(attributes, {
expires: -1
}));
};
api.withConverter = init;
return api;
}
return init(function () {});
}));
\ No newline at end of file
......@@ -26,6 +26,7 @@ function js($to_be_included) {
else
$base_js = read_file(CURRENT_PATH.$to_be_included);
}
$base_js .= read_file(CORE_PATH.'cookies.js');
$functions = explode('// ------------------------',read_file(CORE_PATH.'functions.js'));
$first = true;
foreach($functions as $func) {
......
......@@ -3,6 +3,12 @@ var parts = location.href.split('?');
var url_parts = parts[0].split('/');
page = url_parts.pop() || url_parts.pop(); // handle potential trailing slash
shibboleth = parts[1];
function changeLanguage(newLanguage) {
if (language() == newLanguage) return;
Cookies.set("language", newLanguage, { expires: 365 });
location.reload();
}
// ------------------------
function languageSwitch() {
var matcher = new RegExp('\{([^|{}]*)[|]([^|{}]*)\}', 'g');
......@@ -96,7 +102,12 @@ function info(key, condition) {
}
// ------------------------
function language() {
return (navigator.languages ? navigator.languages[0] : (navigator.language || navigator.userLanguage)).substr(0,2);
var language = Cookies.get("language");
if (! language) {
language = (navigator.languages ? navigator.languages[0] : (navigator.language || navigator.userLanguage)).substr(0,2);
Cookies.set("language", language, { expires: 365 });
}
return language;
}
// ------------------------
function isMobile() {
......
......@@ -25,7 +25,11 @@ function navbar($menu) { ?>
</ul>
</div>
<?= function_exists('navbar_extra') ? navbar_extra() : '' ?>
<button class="navbar-toggler ml-auto" type="button" data-toggle="collapse" data-target="#navbarToggle" aria-controls="navbarToggle"
<div id="languages">
<div><a href="javascript:changeLanguage('en')">en</a></div>
<div><a href="javascript:changeLanguage('hu')">hu</a></div>
</div>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarToggle" aria-controls="navbarToggle"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment