"use strict"; /** * Created by igor.samulenko on 4/18/2014. */ (function () { 'use strict'; angular.module('l10nModule') .factory('l10nModel', ['l10nService', '$log', '$q', function (l10nService, $log, $q) { var l10nModel = { localizedMessagesDictionary: {}, messagesLoaded: false, messageLoadPending: false }; /** * Public functions */ /** * Get localized message by id * * @param {String} messageId * @returns {String} localized message */ l10nModel.getLocalizedMessage = function (messageId) { return l10nModel.localizedMessagesDictionary[messageId]; }; /** * Load system messages. * @returns {*} */ l10nModel.loadSystemMessages = function () { if (l10nModel.messagesLoaded || l10nModel.messageLoadPending) { return $q.when(1); } if (!l10nModel.messageLoadPending) { l10nModel.messageLoadPending = true; } var params = { messageType: LocalizedMessageVO.prototype.SOCIAL_MESSAGE, locale: window.myitsmLocale }; return l10nModel.loadMessages(params); }; /** * Load localized messages. * * @param {Object} params * @returns {*} HTTP request promise */ l10nModel.loadMessages = function (params) { var promise = l10nService.getMessages(params).$promise; promise .then(processMessages) .catch(function () { $log.error('Error getting localized messages.'); }); return promise; }; /** * Private functions */ /** * Process message list data from server. * * @param {Array} data */ function processMessages(data) { //$log.debug("Processing localized message data:"); //$log.debug(data); var items = data[0].items || []; if (!items.length) { $log.warn('Localized messages data returned from server is empty or malformed'); } l10nModel.localizedMessages = items.map(parseLocalizedMessage); l10nModel.localizedMessagesDictionary = _.indexBy(l10nModel.localizedMessages, 'messageId'); l10nModel.messagesLoaded = true; } /** * Transform raw data into localized message item. * * @param {Object} data * @returns {LocalizedMessageVO} localized message item */ function parseLocalizedMessage(data) { return new LocalizedMessageVO().build(data); } return l10nModel; }]); })();