Fix script storage on Opera.

This commit is contained in:
Nicolas Stepien 2013-02-17 18:11:05 +01:00
parent 6e11bfd8b5
commit 67c66a2d4c
2 changed files with 78 additions and 65 deletions

View File

@ -884,58 +884,62 @@
} }
}); });
$.extend($, typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null ? { if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) {
"delete": function(name) { $["delete"] = function(name) {
return GM_deleteValue(g.NAMESPACE + name); return GM_deleteValue(g.NAMESPACE + name);
}, };
get: function(name, defaultValue) { $.get = function(name, defaultValue) {
var value; var value;
if (value = GM_getValue(g.NAMESPACE + name)) { if (value = GM_getValue(g.NAMESPACE + name)) {
return JSON.parse(value); return JSON.parse(value);
} else { } else {
return defaultValue; return defaultValue;
} }
}, };
set: function(name, value) { $.set = function(name, value) {
name = g.NAMESPACE + name; name = g.NAMESPACE + name;
value = JSON.stringify(value); value = JSON.stringify(value);
localStorage.setItem(name, value); localStorage.setItem(name, value);
return GM_setValue(name, value); return GM_setValue(name, value);
} };
} : window.opera ? { } else if (window.opera) {
"delete": function(name) { (function() {
return delete opera.scriptStorage[g.NAMESPACE + name]; var scriptStorage;
}, scriptStorage = opera.scriptStorage;
get: function(name, defaultValue) { $["delete"] = function(name) {
var value; return delete scriptStorage[g.NAMESPACE + name];
if (value = opera.scriptStorage[g.NAMESPACE + name]) { };
return JSON.parse(value); $.get = function(name, defaultValue) {
} else { var value;
return defaultValue; if (value = scriptStorage[g.NAMESPACE + name]) {
} return JSON.parse(value);
}, } else {
set: function(name, value) { return defaultValue;
name = g.NAMESPACE + name; }
value = JSON.stringify(value); };
localStorage.setItem(name, value); return $.set = function(name, value) {
return opera.scriptStorage[name] = value; name = g.NAMESPACE + name;
} value = JSON.stringify(value);
} : { localStorage.setItem(name, value);
"delete": function(name) { return scriptStorage[name] = value;
};
})();
} else {
$["delete"] = function(name) {
return localStorage.removeItem(g.NAMESPACE + name); return localStorage.removeItem(g.NAMESPACE + name);
}, };
get: function(name, defaultValue) { $.get = function(name, defaultValue) {
var value; var value;
if (value = localStorage.getItem(g.NAMESPACE + name)) { if (value = localStorage.getItem(g.NAMESPACE + name)) {
return JSON.parse(value); return JSON.parse(value);
} else { } else {
return defaultValue; return defaultValue;
} }
}, };
set: function(name, value) { $.set = function(name, value) {
return localStorage.setItem(g.NAMESPACE + name, JSON.stringify(value)); return localStorage.setItem(g.NAMESPACE + name, JSON.stringify(value));
} };
}); }
Polyfill = { Polyfill = {
init: function() { init: function() {

View File

@ -192,42 +192,51 @@ $.extend $,
Math.round size Math.round size
"#{size} #{['B', 'KB', 'MB', 'GB'][unit]}" "#{size} #{['B', 'KB', 'MB', 'GB'][unit]}"
$.extend $, if GM_deleteValue?
if GM_deleteValue? $.delete = (name) ->
delete: (name) -> GM_deleteValue g.NAMESPACE + name
GM_deleteValue g.NAMESPACE + name $.get = (name, defaultValue) ->
get: (name, defaultValue) -> if value = GM_getValue g.NAMESPACE + name
if value = GM_getValue g.NAMESPACE + name JSON.parse value
else
defaultValue
$.set = (name, value) ->
name = g.NAMESPACE + name
value = JSON.stringify value
# for `storage` events
localStorage.setItem name, value
GM_setValue name, value
else if window.opera
(->
# http://www.opera.com/docs/userjs/specs/#scriptstorage
# http://www.opera.com/docs/userjs/using/#securepages
# >The scriptStorage object is available only during
# the main User JavaScript thread, being therefore
# accessible only in the main body of the user script.
# To access the storage object later, keep a reference
# to the object.
{scriptStorage} = opera
$.delete = (name) ->
delete scriptStorage[g.NAMESPACE + name]
$.get = (name, defaultValue) ->
if value = scriptStorage[g.NAMESPACE + name]
JSON.parse value JSON.parse value
else else
defaultValue defaultValue
set: (name, value) -> $.set = (name, value) ->
name = g.NAMESPACE + name name = g.NAMESPACE + name
value = JSON.stringify value value = JSON.stringify value
# for `storage` events # for `storage` events
localStorage.setItem name, value localStorage.setItem name, value
GM_setValue name, value scriptStorage[name] = value
else if window.opera )()
delete: (name)-> else
delete opera.scriptStorage[g.NAMESPACE + name] $.delete = (name) ->
get: (name, defaultValue) -> localStorage.removeItem g.NAMESPACE + name
if value = opera.scriptStorage[g.NAMESPACE + name] $.get = (name, defaultValue) ->
JSON.parse value if value = localStorage.getItem g.NAMESPACE + name
else JSON.parse value
defaultValue else
set: (name, value) -> defaultValue
name = g.NAMESPACE + name $.set = (name, value) ->
value = JSON.stringify value localStorage.setItem g.NAMESPACE + name, JSON.stringify value
# for `storage` events
localStorage.setItem name, value
opera.scriptStorage[name] = value
else
delete: (name) ->
localStorage.removeItem g.NAMESPACE + name
get: (name, defaultValue) ->
if value = localStorage.getItem g.NAMESPACE + name
JSON.parse value
else
defaultValue
set: (name, value) ->
localStorage.setItem g.NAMESPACE + name, JSON.stringify value