From bb027261b2df068fd49b6750b603311d5a987a1d Mon Sep 17 00:00:00 2001 From: Manuel Friedli Date: Sat, 28 Jun 2014 16:40:24 +0200 Subject: [PATCH] register languages with help of a function. that enables advances functionality with fallback-language and makes it generally more robust. this commit concludes the refactoring of the layout definition. --- uhr-de.js | 2 +- uhr-de_CH.js | 2 +- uhr-de_CH_genau.js | 2 +- uhr-en.js | 2 +- uhr.js | 57 ++++++++++++++++++++++++++++++++++------------ 5 files changed, 47 insertions(+), 18 deletions(-) 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) {