angular.module('pascalprecht.translate') /** * @ngdoc object * @name pascalprecht.translate.$translateLocalStorage * @requires $window * * @description * Abstraction layer for localStorage. This service is used when telling angular-translate * to use localStorage as storage. * */ .factory('$translateLocalStorage', ['$window', '$translateCookieStorage', function ($window, $translateCookieStorage) { // Setup adapter var localStorageAdapter = (function(){ var langKey; return { /** * @ngdoc function * @name pascalprecht.translate.$translateLocalStorage#get * @methodOf pascalprecht.translate.$translateLocalStorage * * @description * Returns an item from localStorage by given name. * * @param {string} name Item name * @return {string} Value of item name */ get: function (name) { if(!langKey) { langKey = $window.localStorage.getItem(name); } return langKey; }, /** * @ngdoc function * @name pascalprecht.translate.$translateLocalStorage#set * @methodOf pascalprecht.translate.$translateLocalStorage * * @description * Sets an item in localStorage by given name. * * @param {string} name Item name * @param {string} value Item value */ set: function (name, value) { langKey=value; $window.localStorage.setItem(name, value); } }; }()); var hasLocalStorageSupport = 'localStorage' in $window && $window.localStorage !== null; if (hasLocalStorageSupport) { var testKey = 'pascalprecht.translate.storageTest'; try { $window.localStorage.setItem(testKey, 'foo'); $window.localStorage.removeItem(testKey); } catch (e){ hasLocalStorageSupport = false; } } var $translateLocalStorage = hasLocalStorageSupport ? localStorageAdapter : $translateCookieStorage; return $translateLocalStorage; }]);