Comparing version 0.3.10 to 0.3.11
@@ -19,2 +19,36 @@ (function (root, factory) { | ||
function isStorageSupported($window, storageType) { | ||
// Some installations of IE, for an unknown reason, throw "SCRIPT5: Error: Access is denied" | ||
// when accessing window.localStorage. This happens before you try to do anything with it. Catch | ||
// that error and allow execution to continue. | ||
// fix 'SecurityError: DOM Exception 18' exception in Desktop Safari, Mobile Safari | ||
// when "Block cookies": "Always block" is turned on | ||
var supported; | ||
try { | ||
supported = $window[storageType]; | ||
} | ||
catch(err) { | ||
supported = false; | ||
} | ||
// When Safari (OS X or iOS) is in private browsing mode, it appears as though localStorage and sessionStorage | ||
// is available, but trying to call .setItem throws an exception below: | ||
// "QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to add something to storage that exceeded the quota." | ||
if(supported) { | ||
var key = '__' + Math.round(Math.random() * 1e7); | ||
try { | ||
$window[storageType].setItem(key, key); | ||
$window[storageType].removeItem(key, key); | ||
} | ||
catch(err) { | ||
supported = false; | ||
} | ||
} | ||
return supported; | ||
} | ||
/** | ||
@@ -46,2 +80,4 @@ * @ngdoc overview | ||
function _storageProvider(storageType) { | ||
var providerWebStorage = isStorageSupported(window, storageType); | ||
return function () { | ||
@@ -76,5 +112,9 @@ var storageKeyPrefix = 'ngStorage-'; | ||
this.supported = function() { | ||
return !!providerWebStorage; | ||
}; | ||
// Note: This is not very elegant at all. | ||
this.get = function (key) { | ||
return deserializer(window[storageType].getItem(storageKeyPrefix + key)); | ||
return providerWebStorage && deserializer(providerWebStorage.getItem(storageKeyPrefix + key)); | ||
}; | ||
@@ -84,5 +124,9 @@ | ||
this.set = function (key, value) { | ||
return window[storageType].setItem(storageKeyPrefix + key, serializer(value)); | ||
return providerWebStorage && providerWebStorage.setItem(storageKeyPrefix + key, serializer(value)); | ||
}; | ||
this.remove = function (key) { | ||
providerWebStorage && providerWebStorage.removeItem(storageKeyPrefix + key); | ||
} | ||
this.$get = [ | ||
@@ -102,36 +146,3 @@ '$rootScope', | ||
){ | ||
function isStorageSupported(storageType) { | ||
// Some installations of IE, for an unknown reason, throw "SCRIPT5: Error: Access is denied" | ||
// when accessing window.localStorage. This happens before you try to do anything with it. Catch | ||
// that error and allow execution to continue. | ||
// fix 'SecurityError: DOM Exception 18' exception in Desktop Safari, Mobile Safari | ||
// when "Block cookies": "Always block" is turned on | ||
var supported; | ||
try { | ||
supported = $window[storageType]; | ||
} | ||
catch (err) { | ||
supported = false; | ||
} | ||
// When Safari (OS X or iOS) is in private browsing mode, it appears as though localStorage | ||
// is available, but trying to call .setItem throws an exception below: | ||
// "QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to add something to storage that exceeded the quota." | ||
if (supported && storageType === 'localStorage') { | ||
var key = '__' + Math.round(Math.random() * 1e7); | ||
try { | ||
localStorage.setItem(key, key); | ||
localStorage.removeItem(key); | ||
} | ||
catch (err) { | ||
supported = false; | ||
} | ||
} | ||
return supported; | ||
} | ||
// The magic number 10 is used which only works for some keyPrefixes... | ||
@@ -142,3 +153,5 @@ // See https://github.com/gsklee/ngStorage/issues/137 | ||
// #9: Assign a placeholder object if Web Storage is unavailable to prevent breaking the entire AngularJS app | ||
var webStorage = isStorageSupported(storageType) || ($log.warn('This browser does not support Web Storage!'), {setItem: angular.noop, getItem: angular.noop, removeItem: angular.noop}), | ||
// Note: recheck mainly for testing (so we can use $window[storageType] rather than window[storageType]) | ||
var isSupported = isStorageSupported($window, storageType), | ||
webStorage = isSupported || ($log.warn('This browser does not support Web Storage!'), {setItem: angular.noop, getItem: angular.noop, removeItem: angular.noop}), | ||
$storage = { | ||
@@ -186,2 +199,5 @@ $default: function(items) { | ||
} | ||
}, | ||
$supported: function() { | ||
return !!isSupported; | ||
} | ||
@@ -188,0 +204,0 @@ }, |
@@ -1,1 +0,1 @@ | ||
/*! ngstorage 0.3.10 | Copyright (c) 2015 Gias Kay Lee | MIT License */!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["angular"],b):a.hasOwnProperty("angular")?b(a.angular):"object"==typeof exports&&(module.exports=b(require("angular")))}(this,function(a){"use strict";function b(b){return function(){var c="ngStorage-";this.setKeyPrefix=function(a){if("string"!=typeof a)throw new TypeError("[ngStorage] - "+b+"Provider.setKeyPrefix() expects a String.");c=a};var d=a.toJson,e=a.fromJson;this.setSerializer=function(a){if("function"!=typeof a)throw new TypeError("[ngStorage] - "+b+"Provider.setSerializer expects a function.");d=a},this.setDeserializer=function(a){if("function"!=typeof a)throw new TypeError("[ngStorage] - "+b+"Provider.setDeserializer expects a function.");e=a},this.get=function(a){return e(window[b].getItem(c+a))},this.set=function(a,e){return window[b].setItem(c+a,d(e))},this.$get=["$rootScope","$window","$log","$timeout","$document",function(f,g,h,i,j){function k(a){var b;try{b=g[a]}catch(c){b=!1}if(b&&"localStorage"===a){var d="__"+Math.round(1e7*Math.random());try{localStorage.setItem(d,d),localStorage.removeItem(d)}catch(c){b=!1}}return b}var l,m,n=c.length,o=k(b)||(h.warn("This browser does not support Web Storage!"),{setItem:a.noop,getItem:a.noop,removeItem:a.noop}),p={$default:function(b){for(var c in b)a.isDefined(p[c])||(p[c]=a.copy(b[c]));return p.$sync(),p},$reset:function(a){for(var b in p)"$"===b[0]||delete p[b]&&o.removeItem(c+b);return p.$default(a)},$sync:function(){for(var a,b=0,d=o.length;d>b;b++)(a=o.key(b))&&c===a.slice(0,n)&&(p[a.slice(n)]=e(o.getItem(a)))},$apply:function(){var b;if(m=null,!a.equals(p,l)){b=a.copy(l),a.forEach(p,function(e,f){a.isDefined(e)&&"$"!==f[0]&&(o.setItem(c+f,d(e)),delete b[f])});for(var e in b)o.removeItem(c+e);l=a.copy(p)}}};return p.$sync(),l=a.copy(p),f.$watch(function(){m||(m=i(p.$apply,100,!1))}),g.addEventListener&&g.addEventListener("storage",function(b){if(b.key){var d=j[0];d.hasFocus&&d.hasFocus()||c!==b.key.slice(0,n)||(b.newValue?p[b.key.slice(n)]=e(b.newValue):delete p[b.key.slice(n)],l=a.copy(p),f.$apply())}}),g.addEventListener&&g.addEventListener("beforeunload",function(){p.$apply()}),p}]}}return a=a&&a.module?a:window.angular,a.module("ngStorage",[]).provider("$localStorage",b("localStorage")).provider("$sessionStorage",b("sessionStorage"))}); | ||
/*! ngstorage 0.3.10 | Copyright (c) 2016 Gias Kay Lee | MIT License */!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["angular"],b):a.hasOwnProperty("angular")?b(a.angular):"object"==typeof exports&&(module.exports=b(require("angular")))}(this,function(a){"use strict";function b(a,b){var c;try{c=a[b]}catch(d){c=!1}if(c){var e="__"+Math.round(1e7*Math.random());try{a[b].setItem(e,e),a[b].removeItem(e,e)}catch(d){c=!1}}return c}function c(c){var d=b(window,c);return function(){var e="ngStorage-";this.setKeyPrefix=function(a){if("string"!=typeof a)throw new TypeError("[ngStorage] - "+c+"Provider.setKeyPrefix() expects a String.");e=a};var f=a.toJson,g=a.fromJson;this.setSerializer=function(a){if("function"!=typeof a)throw new TypeError("[ngStorage] - "+c+"Provider.setSerializer expects a function.");f=a},this.setDeserializer=function(a){if("function"!=typeof a)throw new TypeError("[ngStorage] - "+c+"Provider.setDeserializer expects a function.");g=a},this.supported=function(){return!!d},this.get=function(a){return d&&g(d.getItem(e+a))},this.set=function(a,b){return d&&d.setItem(e+a,f(b))},this.remove=function(a){d&&d.removeItem(e+a)},this.$get=["$rootScope","$window","$log","$timeout","$document",function(d,h,i,j,k){var l,m,n=e.length,o=b(h,c),p=o||(i.warn("This browser does not support Web Storage!"),{setItem:a.noop,getItem:a.noop,removeItem:a.noop}),q={$default:function(b){for(var c in b)a.isDefined(q[c])||(q[c]=a.copy(b[c]));return q.$sync(),q},$reset:function(a){for(var b in q)"$"===b[0]||delete q[b]&&p.removeItem(e+b);return q.$default(a)},$sync:function(){for(var a,b=0,c=p.length;c>b;b++)(a=p.key(b))&&e===a.slice(0,n)&&(q[a.slice(n)]=g(p.getItem(a)))},$apply:function(){var b;if(m=null,!a.equals(q,l)){b=a.copy(l),a.forEach(q,function(c,d){a.isDefined(c)&&"$"!==d[0]&&(p.setItem(e+d,f(c)),delete b[d])});for(var c in b)p.removeItem(e+c);l=a.copy(q)}},$supported:function(){return!!o}};return q.$sync(),l=a.copy(q),d.$watch(function(){m||(m=j(q.$apply,100,!1))}),h.addEventListener&&h.addEventListener("storage",function(b){if(b.key){var c=k[0];c.hasFocus&&c.hasFocus()||e!==b.key.slice(0,n)||(b.newValue?q[b.key.slice(n)]=g(b.newValue):delete q[b.key.slice(n)],l=a.copy(q),d.$apply())}}),h.addEventListener&&h.addEventListener("beforeunload",function(){q.$apply()}),q}]}}return a=a&&a.module?a:window.angular,a.module("ngStorage",[]).provider("$localStorage",c("localStorage")).provider("$sessionStorage",c("sessionStorage"))}); |
{ | ||
"name": "ngstorage", | ||
"version": "0.3.10", | ||
"version": "0.3.11", | ||
"author": "Gias Kay Lee", | ||
@@ -31,5 +31,5 @@ "licenses": [ | ||
"mocha": "^2.2.4", | ||
"phantomjs": "^1.9.17" | ||
"phantomjs-prebuilt": "^2.1.1" | ||
}, | ||
"dependencies": {} | ||
} |
@@ -38,2 +38,10 @@ ngStorage | ||
### nuget | ||
```bash | ||
Install-Package gsklee.ngStorage | ||
``` | ||
Or search for `Angular ngStorage` in the nuget package manager. <https://www.nuget.org/packages/gsklee.ngStorage> | ||
CDN | ||
@@ -235,2 +243,13 @@ === | ||
or better using `$scope.$evalAsync` as: | ||
```javascript | ||
$scope.$storage.school = theSchool; | ||
$log.debug("launching and saving the new value" + url); | ||
$scope.$evalAsync(function(){ | ||
var myWindow = $window.open("", "_self"); | ||
myWindow.document.write(response.data); | ||
}); | ||
``` | ||
And your new values will be persisted correctly. | ||
@@ -237,0 +256,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
22731
190
264