This repository has been archived on 2022-01-02. You can view files and clone it, but cannot push or open issues/pull-requests.
AriaNg/src/scripts/services/ariaNgLanguageLoader.js

114 lines
3.4 KiB
JavaScript

(function () {
'use strict';
angular.module('ariaNg').factory('ariaNgLanguageLoader', ['$http', '$q', 'localStorageService', 'ariaNgConstants', 'ariaNgLanguages', function ($http, $q, localStorageService, ariaNgConstants, ariaNgLanguages) {
var getKeyValuePair = function (line) {
var equalSignPos = line.indexOf('=');
if (equalSignPos > 0) {
return {
key: line.substring(0, equalSignPos),
value: line.substring(equalSignPos + 1, line.length)
};
} else {
return {
value: line
};
}
};
var getCategory = function (langObj, category) {
var currentCategory = langObj;
if (!category) {
return currentCategory;
}
if (category[0] === '[' && category[category.length - 1] === ']') {
category = category.substring(1, category.length - 1);
}
if (category === 'default') {
return currentCategory;
}
var categoryNames = category.split('.');
for (var i = 0; i < categoryNames.length; i++) {
var categoryName = categoryNames[i];
if (!currentCategory[categoryName]) {
currentCategory[categoryName] = {};
}
currentCategory = currentCategory[categoryName];
}
return currentCategory;
};
var getLanguageObject = function (languageContent) {
var langObj = {};
if (!languageContent) {
return langObj;
}
var lines = languageContent.split('\n');
var currentCatagory = langObj;
for (var i = 0; i < lines.length; i++) {
var line = lines[i];
if (!line) {
continue;
}
if (/^\[.+\]$/.test(line)) {
currentCatagory = getCategory(langObj, line);
continue;
}
var pair = getKeyValuePair(line);
if (pair && pair.key) {
currentCatagory[pair.key] = pair.value;
}
}
return langObj;
};
return function (options) {
var deferred = $q.defer();
if (!ariaNgLanguages[options.key]) {
deferred.reject(options.key);
return deferred.promise;
}
var languageKey = ariaNgConstants.languageStorageKeyPrefix + '.' + options.key;
var languageResource = localStorageService.get(languageKey);
if (languageResource) {
deferred.resolve(languageResource);
}
var languagePath = ariaNgConstants.languagePath + '/' + options.key + ariaNgConstants.languageFileExtension;
$http({
url: languagePath,
method: 'GET'
}).success(function (data) {
var languageObject = getLanguageObject(data);
localStorageService.set(languageKey, languageObject);
return deferred.resolve(languageObject);
}).error(function (data) {
return deferred.reject(options.key);
});
return deferred.promise;
};
}]);
}());