Trust Greasemonkey's value instead of the value from the storage event.
Also fix $.set and $.delete breaking check on whether sync is needed.
This commit is contained in:
parent
2700afe9d7
commit
5e971532b4
@ -409,37 +409,41 @@ do ->
|
|||||||
<% } else { %>
|
<% } else { %>
|
||||||
|
|
||||||
# http://wiki.greasespot.net/Main_Page
|
# http://wiki.greasespot.net/Main_Page
|
||||||
|
$.oldValue = {}
|
||||||
|
|
||||||
|
$.sync = (key, cb) ->
|
||||||
|
key = g.NAMESPACE + key
|
||||||
|
$.syncing[key] = cb
|
||||||
|
$.oldValue[key] = GM_getValue key
|
||||||
|
|
||||||
do ->
|
do ->
|
||||||
oldValue = {}
|
onChange = (key) ->
|
||||||
onChange = ({key, newValue}) ->
|
return unless cb = $.syncing[key]
|
||||||
if cb = $.syncing[key]
|
newValue = GM_getValue key
|
||||||
if newValue?
|
return if newValue is $.oldValue[key]
|
||||||
oldValue[key] = newValue
|
if newValue?
|
||||||
cb JSON.parse(newValue), key
|
$.oldValue[key] = newValue
|
||||||
else
|
cb JSON.parse(newValue), key
|
||||||
delete oldValue[key]
|
else
|
||||||
cb undefined, key
|
delete $.oldValue[key]
|
||||||
$.on window, 'storage', onChange
|
cb undefined, key
|
||||||
$.sync = (key, cb) ->
|
$.on window, 'storage', ({key}) -> onChange key
|
||||||
key = g.NAMESPACE + key
|
|
||||||
$.syncing[key] = cb
|
|
||||||
oldValue[key] = GM_getValue key
|
|
||||||
$.forceSync = (key) ->
|
$.forceSync = (key) ->
|
||||||
# Storage events don't work across origins
|
# Storage events don't work across origins
|
||||||
# e.g. http://boards.4chan.org and https://boards.4chan.org
|
# e.g. http://boards.4chan.org and https://boards.4chan.org
|
||||||
# so force a check for changes to avoid lost data.
|
# so force a check for changes to avoid lost data.
|
||||||
key = g.NAMESPACE + key
|
onChange g.NAMESPACE + key
|
||||||
newValue = GM_getValue key
|
|
||||||
if newValue isnt oldValue[key]
|
|
||||||
onChange {key, newValue}
|
|
||||||
|
|
||||||
$.delete = (keys) ->
|
$.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
|
key = g.NAMESPACE + key
|
||||||
localStorage.removeItem key
|
|
||||||
GM_deleteValue 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) ->
|
||||||
@ -458,10 +462,11 @@ $.set = do ->
|
|||||||
set = (key, val) ->
|
set = (key, val) ->
|
||||||
key = g.NAMESPACE + key
|
key = g.NAMESPACE + key
|
||||||
val = JSON.stringify val
|
val = JSON.stringify val
|
||||||
|
GM_setValue key, val
|
||||||
if key of $.syncing
|
if key of $.syncing
|
||||||
|
$.oldValue[key] = val
|
||||||
# for `storage` events
|
# for `storage` events
|
||||||
localStorage.setItem key, val
|
localStorage.setItem key, val
|
||||||
GM_setValue key, val
|
|
||||||
(keys, val) ->
|
(keys, val) ->
|
||||||
if typeof keys is 'string'
|
if typeof keys is 'string'
|
||||||
set keys, val
|
set keys, val
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user