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

View File

@ -192,42 +192,51 @@ $.extend $,
Math.round size
"#{size} #{['B', 'KB', 'MB', 'GB'][unit]}"
$.extend $,
if GM_deleteValue?
delete: (name) ->
GM_deleteValue g.NAMESPACE + name
get: (name, defaultValue) ->
if value = GM_getValue g.NAMESPACE + name
if GM_deleteValue?
$.delete = (name) ->
GM_deleteValue g.NAMESPACE + name
$.get = (name, defaultValue) ->
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
else
defaultValue
set: (name, value) ->
$.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
delete: (name)->
delete opera.scriptStorage[g.NAMESPACE + name]
get: (name, defaultValue) ->
if value = opera.scriptStorage[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
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
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