Fall back to localStorage, window.open when GM_* functions are not available.

This commit is contained in:
ccd0 2015-06-19 01:36:52 -07:00
parent 56b78d8c67
commit fb6359311f

View File

@ -221,9 +221,12 @@ $.event = (event, detail, root=d) ->
$.open = $.open =
<% if (type === 'userscript') { %> <% if (type === 'userscript') { %>
GM_openInTab if GM_openInTab?
GM_openInTab
else
(url) -> window.open url, '_blank'
<% } else { %> <% } else { %>
(URL) -> window.open URL, '_blank' (url) -> window.open url, '_blank'
<% } %> <% } %>
$.debounce = (wait, fn) -> $.debounce = (wait, fn) ->
@ -415,15 +418,39 @@ do ->
# http://wiki.greasespot.net/Main_Page # http://wiki.greasespot.net/Main_Page
$.oldValue = {} $.oldValue = {}
if GM_getValue?
$.getValue = GM_getValue
$.setValue = (key, val) ->
GM_setValue key, val
if key of $.syncing
$.oldValue[key] = val
localStorage[key] = val # for `storage` events
$.deleteValue = (key) ->
GM_deleteValue key
if key of $.syncing
delete $.oldValue[key]
delete localStorage[key] # for `storage` events
$.listValues = GM_listValues
else
$.getValue = (key) -> localStorage[key]
$.setValue = (key, val) ->
$.oldValue[key] = val if key of $.syncing
localStorage[key] = val
$.deleteValue = (key) ->
delete $.oldValue[key] if key of $.syncing
delete localStorage[key]
$.listValues = ->
key for key of localStorage when key[...g.NAMESPACE.length] is g.NAMESPACE
$.sync = (key, cb) -> $.sync = (key, cb) ->
key = g.NAMESPACE + key key = g.NAMESPACE + key
$.syncing[key] = cb $.syncing[key] = cb
$.oldValue[key] = GM_getValue key $.oldValue[key] = $.getValue key
do -> do ->
onChange = (key) -> onChange = (key) ->
return unless cb = $.syncing[key] return unless cb = $.syncing[key]
newValue = GM_getValue key newValue = $.getValue key
return if newValue is $.oldValue[key] return if newValue is $.oldValue[key]
if newValue? if newValue?
$.oldValue[key] = newValue $.oldValue[key] = newValue
@ -443,12 +470,7 @@ $.delete = (keys) ->
unless keys instanceof Array unless keys instanceof Array
keys = [keys] keys = [keys]
for key in keys for key in keys
key = g.NAMESPACE + key $.deleteValue g.NAMESPACE + key
GM_deleteValue key
if key of $.syncing
delete $.oldValue[key]
# for `storage` events
localStorage.removeItem key
return return
$.get = (key, val, cb) -> $.get = (key, val, cb) ->
@ -459,27 +481,18 @@ $.get = (key, val, cb) ->
cb = val cb = val
$.queueTask -> $.queueTask ->
for key of items for key of items
if val = GM_getValue g.NAMESPACE + key if val = $.getValue g.NAMESPACE + key
items[key] = JSON.parse val items[key] = JSON.parse val
cb items cb items
$.set = do -> $.set = (keys, val, cb) ->
set = (key, val) -> if typeof keys is 'string'
key = g.NAMESPACE + key $.setValue(g.NAMESPACE + keys, JSON.stringify val)
val = JSON.stringify val else
GM_setValue key, val for key, value of keys
if key of $.syncing $.setValue(g.NAMESPACE + key, JSON.stringify value)
$.oldValue[key] = val cb = val
# for `storage` events cb?()
localStorage.setItem key, val
(keys, val, cb) ->
if typeof keys is 'string'
set keys, val
else
set key, value for key, value of keys
cb = val
cb?()
$.clear = (cb) -> $.clear = (cb) ->
# XXX https://github.com/greasemonkey/greasemonkey/issues/2033 # XXX https://github.com/greasemonkey/greasemonkey/issues/2033
@ -490,7 +503,7 @@ $.clear = (cb) ->
boards.push 'qa' boards.push 'qa'
$.delete ("cooldown.#{board}" for board in boards) $.delete ("cooldown.#{board}" for board in boards)
try try
$.delete GM_listValues().map (key) -> key.replace g.NAMESPACE, '' $.delete $.listValues().map (key) -> key.replace g.NAMESPACE, ''
cb?() cb?()
<% } %> <% } %>