This repository was archived by the owner on Mar 26, 2021. It is now read-only.
forked from fredricrylander/angular-webstorage
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathangular-webstorage.min.js
More file actions
1 lines (1 loc) · 7.13 KB
/
angular-webstorage.min.js
File metadata and controls
1 lines (1 loc) · 7.13 KB
1
var webStorageModule=angular.module("webStorageModule",[]);webStorageModule.constant("defaultSettings",{prefix:"",order:["local","session","memory"],errorName:"webStorage.notification.error"});webStorageModule.factory("webStorage",["$rootScope","defaultSettings",function($rootScope,defaultSettings){"use strict";var errorName=defaultSettings.errorName;var hasLocalStorage=testLocalStorage();var hasSessionStorage=testSessionStorage();var order=defaultSettings.order;var prefix=defaultSettings.prefix;var ram={};var webStorage={isSupported:hasLocalStorage||hasSessionStorage,local:{isSupported:hasLocalStorage,add:addToLocal,get:getFromLocal,has:hasInLocal,remove:removeFromLocal,clear:clearLocal},session:{isSupported:hasSessionStorage,add:addToSession,get:getFromSession,has:hasInSession,remove:removeFromSession,clear:clearSession},memory:{isSupported:true,add:addToMemory,get:getFromMemory,has:hasInMemory,remove:removeFromMemory,clear:clearMemory}};webStorage.add=function(key,value,allEngines){allEngines=typeof allEngines!=="undefined"?!!allEngines:false;var result=false;var length=order.length;for(var ith=0;ith<length;++ith){var engine=webStorage[order[ith]];if(engine.isSupported){result=engine.add(key,value)||result;if(!allEngines)return result}}return result};webStorage.get=function(key,allEngines){allEngines=typeof allEngines!=="undefined"?!!allEngines:true;var length=order.length;for(var ith=0;ith<length;++ith){var engine=webStorage[order[ith]];if(engine.isSupported){var value=engine.get(key);if(!allEngines||value!==null)return value}}return null};webStorage.has=function(key,allEngines){return null!==webStorage.get(key,allEngines)};webStorage.remove=function(key,allEngines){allEngines=typeof allEngines!=="undefined"?!!allEngines:true;var result=false;var length=order.length;for(var ith=0;ith<length;++ith){var engine=webStorage[order[ith]];if(engine.isSupported){result=engine.remove(key)||result;if(!allEngines)return result}}return result};webStorage.clear=function(allEngines){allEngines=typeof allEngines!=="undefined"?!!allEngines:true;var result=false;var length=order.length;for(var ith=0;ith<length;++ith){var engine=webStorage[order[ith]];if(engine.isSupported){result=engine.clear()||result;if(!allEngines)return result}}return result};webStorage.errorName=function(newErrorName){var result=errorName;if(typeof newErrorName!=="undefined"){if(typeof newErrorName!=="string")return false;errorName=newErrorName}return result};webStorage.order=function(newOrder){var result=angular.copy(order);if(typeof newOrder!=="undefined"){order=[];for(var ith in newOrder)if(/^(local|session|memory)$/.test(newOrder[ith]))order.push(newOrder[ith])}return result};webStorage.prefix=function(newPrefix){var result=prefix;if(typeof newPrefix!=="undefined"){if(typeof newPrefix!=="string")return false;prefix=newPrefix}return result};function addToLocal(key,value){if(hasLocalStorage){try{localStorage.setItem(prefix+key,JSON.stringify(value))}catch(e){return croak(e)}return true}return false}function addToSession(key,value){if(hasSessionStorage){try{sessionStorage.setItem(prefix+key,JSON.stringify(value))}catch(e){return croak(e)}return true}return false}function addToMemory(key,value){ram[key]=value;return true}function getFromLocal(key){if(hasLocalStorage){try{var value=localStorage.getItem(prefix+key);return value&&JSON.parse(value)}catch(e){croak(e);return null}}return null}function getFromSession(key){if(hasSessionStorage){try{var value=sessionStorage.getItem(prefix+key);return value&&JSON.parse(value)}catch(e){croak(e);return null}}return null}function getFromMemory(key){return key in ram?ram[key]:null}function hasInLocal(key){return null!==getFromLocal(key)}function hasInSession(key){return null!==getFromSession(key)}function hasInMemory(key){return null!==getFromMemory(key)}function removeFromLocal(key){if(hasLocalStorage){try{localStorage.removeItem(prefix+key)}catch(e){return croak(e)}return true}return false}function removeFromSession(key){if(hasSessionStorage){try{sessionStorage.removeItem(prefix+key)}catch(e){return croak(e)}return true}return false}function removeFromMemory(key){delete ram[key];return true}function clearLocal(){if(!hasLocalStorage)return false;if(!!prefix){var prefixLength=prefix.length;try{for(var key in localStorage)if(key.substr(0,prefixLength)===prefix)localStorage.removeItem(key)}catch(e){return croak(e)}return true}try{localStorage.clear()}catch(e){return croak(e)}return true}function clearSession(){if(!hasSessionStorage)return false;if(!!prefix){var prefixLength=prefix.length;try{for(var key in sessionStorage)if(key.substr(0,prefixLength)===prefix)sessionStorage.removeItem(key)}catch(e){return croak(e)}return true}try{sessionStorage.clear()}catch(e){return croak(e)}return true}function clearMemory(){ram={};return true}function testLocalStorage(){try{localStorage.setItem(prefix+"angular.webStorage.test",true);localStorage.removeItem(prefix+"angular.webStorage.test");return true}catch(e){return false}}function testSessionStorage(){try{sessionStorage.setItem(prefix+"angular.webStorage.test",true);sessionStorage.removeItem(prefix+"angular.webStorage.test");return true}catch(e){return false}}function croak(error){$rootScope.$broadcast(errorName,error.title+": "+error.message);return false}return webStorage}]);try{if(!window.localStorage){window.localStorage={getItem:function(sKey){if(!sKey||!this.hasOwnProperty(sKey)){return null}return unescape(document.cookie.replace(new RegExp("(?:^|.*;\\s*)"+escape(sKey).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"),"$1"))},key:function(nKeyId){return unescape(document.cookie.replace(/\s*\=(?:.(?!;))*$/,"").split(/\s*\=(?:[^;](?!;))*[^;]?;\s*/)[nKeyId])},setItem:function(sKey,sValue){if(!sKey){return}document.cookie=escape(sKey)+"="+escape(sValue)+"; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";this.length=document.cookie.match(/\=/g).length},length:0,removeItem:function(sKey){if(!sKey||!this.hasOwnProperty(sKey)){return}document.cookie=escape(sKey)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";this.length--},hasOwnProperty:function(sKey){return new RegExp("(?:^|;\\s*)"+escape(sKey).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=").test(document.cookie)}};window.localStorage.length=(document.cookie.match(/\=/g)||window.localStorage).length}if(!window.sessionStorage){window.sessionStorage={getItem:function(sKey){if(!sKey||!this.hasOwnProperty(sKey)){return null}return unescape(document.cookie.replace(new RegExp("(?:^|.*;\\s*)"+escape(sKey).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"),"$1"))},key:function(nKeyId){return unescape(document.cookie.replace(/\s*\=(?:.(?!;))*$/,"").split(/\s*\=(?:[^;](?!;))*[^;]?;\s*/)[nKeyId])},setItem:function(sKey,sValue){if(!sKey){return}document.cookie=escape(sKey)+"="+escape(sValue)+"; path=/";this.length=document.cookie.match(/\=/g).length},length:0,removeItem:function(sKey){if(!sKey||!this.hasOwnProperty(sKey)){return}document.cookie=escape(sKey)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";this.length--},hasOwnProperty:function(sKey){return new RegExp("(?:^|;\\s*)"+escape(sKey).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=").test(document.cookie)}};window.sessionStorage.length=(document.cookie.match(/\=/g)||window.sessionStorage).length}}catch(e){}