"use strict"; $(function () { 'use strict'; var supportedLanguages = ['de', 'en', 'es', 'fr', 'he', 'it', 'ja', 'ko', 'pt', 'ru', 'zh'], rtlLanguages = ['he'], defaultLocale = 'en', nav = window.navigator, locale = (!window.navigator.userAgent.match(/Trident\/7\./) && (nav.languages && nav.languages[0] || nav.language)) || $.cookie('myitsm_locale'), localeForChangeCalendar = defaultLocale, localeForAngularResources = defaultLocale; jQuery.ajaxSetup({ cache: true }); initAppWithMaps(); // 1. Load Map API configuration function initAppWithMaps() { $.getJSON('/smartit/rest/map_api_properties').always(function (data) { // init specific adapter accoding to the api properties bmcMaps.adapters.init(data) .always(function () { initLocale(); }); }); } // 2. Get correct browser locale information function initLocale() { if (locale) { localeForAngularResources = locale; locale = normalizeLocale(locale); initApplication(); } else { $.ajax('/smartit/rest/serverstates/acceptLanguage', { cache: false, success: function (data) { locale = localeFromAcceptLanguage(data); initApplication(); } }); } } // 3. Save locale information and bootstrap Angular app function initApplication() { window.myitsmLocale = locale; window.showMeridian = shouldShowMeridian(locale); $('html').attr('lang', locale); if (/(msie) ([\w.]+)/.exec(navigator.userAgent.toLowerCase())) { $.cookie('myitsm_locale', locale, { expires: 31 }); } if (rtlLanguages.indexOf(locale) > -1) { window.isRtl = true; loadRtlCss(); } $.when($.getScript(getAngularLocaleUrl(localeForAngularResources.toLowerCase())), $.getJSON('scripts/app/i18n/resources-locale_' + locale + '.json'), $.getScript(getAngularCustomLocaleUrl(localeForChangeCalendar.toLowerCase()))) .fail(function () { return $.when($.getScript(getAngularLocaleUrl(defaultLocale)), $.getJSON('scripts/app/i18n/resources-locale_' + defaultLocale + '.json'), $.getScript(getAngularCustomLocaleUrl(defaultLocale))).then(startApp); }) .then(startApp); } // loads RTL styles function loadRtlCss() { var rtlStyles = { development: [ 'styles/vendor/bootstrap/bootstrap-rtl.css', 'styles/css/smart-it-rtl.css' ], distribution: [ 'styles/vendor/css/vendor-rtl.min.css', 'styles/css/smart-it-rtl.min.css' ] }, styles = ''; if (window.ENV) { $.each(rtlStyles[window.ENV], function (i, css) { styles += ''; }); $('head').append(styles); } } function localeFromAcceptLanguage(acceptLanguage) { // e.g. acceptLanguage = 'en-US,en;q=0.8,en-GB;q=0.6,es;q=0.4,es-419;q=0.2' if (!acceptLanguage) { return defaultLocale; } var localesStr = acceptLanguage.trim().toLowerCase().split(';'); for (var i = 0; i < localesStr.length; i++) { var locales = localesStr[i].split(','); for (var j = 0; j < locales.length; j++) { var locale = locales[j]; // skip 'q=' param from Accept-Language Header if (locale.search('q=') === -1) { // try full locale e.g. 'en-us' if (supportedLanguages.indexOf(locale) !== -1) { localeForAngularResources = localeForChangeCalendar = locale; return locale; } // try short locale e.g. 'en' var localeLang = locale.substr(0, 2); if (supportedLanguages.indexOf(localeLang) !== -1) { localeForAngularResources = locale; localeForChangeCalendar = locale.toLowerCase() === 'en-au' ? locale : localeLang; return localeLang; } } } } return defaultLocale; } function normalizeLocale(locale) { if (locale) { // try if we support long locale e.g. 'es-es' if (supportedLanguages.indexOf(locale) !== -1) { localeForChangeCalendar = locale; return locale; } // try if we support short one e.g. 'es' var localeLang = locale.substr(0, 2); if (supportedLanguages.indexOf(localeLang) !== -1) { localeForChangeCalendar = locale.toLowerCase() === 'en-us' ? locale : localeLang; return localeLang; } } return defaultLocale; } function startApp() { window.appLocalilzation = arguments[1][0]; //resource locale JSON angular.bootstrap(document.documentElement, ['myitsmApp']); } function getAngularLocaleUrl(lang) { moment.locale(lang); return 'scripts/vendor/angular-i18n/angular-locale_' + lang + '.js'; } function getAngularCustomLocaleUrl(lang) { return 'scripts/app/i18n-custom/angular-custom-locale_' + lang + '.js'; } function shouldShowMeridian(locale) { var d1 = new Date(); var d2 = new Date(d1); d2.setHours(d1.getHours() + 12); d1 = d1.toLocaleTimeString(locale).match(/\d+/); d2 = d2.toLocaleTimeString(locale).match(/\d+/); return !(d1[0] == 0 || d1[0] > 12 || d2[0] == 0 || d2[0] > 12); //jshint ignore:line } if (typeof String.prototype.trimLeft !== 'function') { String.prototype.trimLeft = function () { return this.replace(/^\s+/g, ''); }; } if (typeof String.prototype.trim !== 'function') { String.prototype.trim = function () { return this.replace(/^\s+|\s+$/g, ''); }; } if (typeof String.prototype.trimRight !== 'function') { String.prototype.trimRight = function () { return this.replace(/\s+$/g, ''); }; } });