diff --git a/uhr-de.js b/uhr-de.js
index f8030a5..9ff1298 100644
--- a/uhr-de.js
+++ b/uhr-de.js
@@ -67,4 +67,4 @@ var layout = {
"12": {9:[7,8,9,10,11]}
}
};
-window._uhr.languages['de'] = layout;
+window,_uhr.register('de', layout);
diff --git a/uhr-de_CH.js b/uhr-de_CH.js
index 1bb4be2..d5d2bd3 100644
--- a/uhr-de_CH.js
+++ b/uhr-de_CH.js
@@ -93,4 +93,4 @@ var layout = {
}
};
// Das Layout bei der Uhr unter dem Code "de_CH" registrieren.
-window._uhr.languages['de_CH'] = layout;
+window,_uhr.register('de_CH', layout);
diff --git a/uhr-de_CH_genau.js b/uhr-de_CH_genau.js
index f9cf0e8..32f98cd 100644
--- a/uhr-de_CH_genau.js
+++ b/uhr-de_CH_genau.js
@@ -68,4 +68,4 @@ var layout = {
"12": {10:[1,2,3,4,5,6]}
}
};
-window._uhr.languages['de_CH_genau'] = layout;
+window,_uhr.register('de_CH_genau', layout);
diff --git a/uhr-en.js b/uhr-en.js
index 5be556d..51ea61f 100644
--- a/uhr-en.js
+++ b/uhr-en.js
@@ -88,4 +88,4 @@ var layout = {
return hour;
}
};
-window._uhr.languages['en'] = layout;
+window,_uhr.register('en', layout);
diff --git a/uhr.js b/uhr.js
index 850f48e..8578bc2 100644
--- a/uhr.js
+++ b/uhr.js
@@ -13,7 +13,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
(function($) {
- "use strict";
+ 'use strict';
if (window._uhr !== undefined) {
return;
@@ -22,7 +22,17 @@ along with this program. If not, see .
window._uhr = {
id: 0,
languages: [],
- themes: []
+ themes: [],
+ register: function(code, language) {
+ for (var i = 0; i < this.languages.length; i++) {
+ if (code == this.languages[i].code) {
+ console.error('Error: Language code ' + code + ' cannot be registered for language "' + language.language + '" because it is already registered for language "' + this.languages[i].language + '"!');
+ return false;
+ }
+ }
+ language.code = code;
+ this.languages.push(language);
+ }
};
// auto-detect themes
var styleSheets = $('head link[rel=stylesheet]');
@@ -148,7 +158,14 @@ along with this program. If not, see .
}
},
_language: function() {
- return window._uhr.languages[this.options.language];
+ for (var i = 0; i < window._uhr.languages.length; i++) {
+ var language = window._uhr.languages[i];
+ if (language.code == this.options.language) {
+ return language;
+ }
+ }
+ // fallback: return empty object
+ return {};
},
_highlight: function(itemClass) {
this.element.find('.item.' + itemClass).addClass('active');
@@ -228,17 +245,11 @@ along with this program. If not, see .
e.after(toggleSwitch);
// language chooser
- var options = [];
- for (var code in window._uhr.languages) {
- if (window._uhr.languages.hasOwnProperty(code)) {
- var language = window._uhr.languages[code];
- options.push('');
- }
- }
- if (options.length > 1) {
+ if (window._uhr.languages.length > 1) {
var languageChooser = $('');
- for (var i = 0; i < options.length; i++) {
- languageChooser.append(options[i]);
+ for (var i = 0; i < window._uhr.languages.length; i++) {
+ var language = window._uhr.languages[i];
+ languageChooser.append('');
}
e.after(languageChooser);
}
@@ -282,6 +293,24 @@ along with this program. If not, see .
if (selectedLanguage == undefined || this.options.force) {
selectedLanguage = this.options.language;
}
+ var found = false;
+ for (var i = 0; i < window._uhr.languages.length; i++) {
+ var code = window._uhr.languages[i].code;
+ if (selectedLanguage == code) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ var fallback;
+ if (window._uhr.languages.length > 0) {
+ fallback = window._uhr.languages[0].code;
+ } else {
+ fallback = '';
+ }
+ console.warn("Language " + selectedLanguage + " not found! Using fallback: " + fallback);
+ selectedLanguage = fallback;
+ }
languageChooser.val(selectedLanguage);
this.options.language = "";
this.language(selectedLanguage);
@@ -295,7 +324,7 @@ along with this program. If not, see .
if (selectedTheme == undefined || this.options.force) {
selectedTheme = this.options.theme;
}
- var found = false;
+ found = false;
for (var i = 0; i < window._uhr.themes.length; i++) {
var styleClass = window._uhr.themes[i].styleClass;
if (selectedTheme == styleClass) {