diff --git a/src/General/lib/$.coffee b/src/General/lib/$.coffee index 5afb18530..7578b27b0 100755 --- a/src/General/lib/$.coffee +++ b/src/General/lib/$.coffee @@ -293,42 +293,49 @@ $.localKeys = [ 'usercss' ] # https://developer.chrome.com/extensions/storage.html -$.delete = (keys) -> - chrome.storage.sync.remove keys -$.get = (key, val, cb) -> - if typeof cb is 'function' - items = $.item key, val - else - items = key - cb = val - - localItems = null - syncItems = null - for key, val of items - if key in $.localKeys - (localItems or= {})[key] = val - else - (syncItems or= {})[key] = val - - count = 0 - done = (item) -> - if chrome.runtime.lastError - c.error chrome.runtime.lastError.message - $.extend items, item - cb items unless --count - - if localItems - count++ - chrome.storage.local.get localItems, done - if syncItems - count++ - chrome.storage.sync.get syncItems, done -$.set = do -> +do -> items = - sync: {} local: {} - timeout = {} + sync: {} + $.delete = (keys) -> + if typeof keys is 'string' + keys = [keys] + for key in keys + delete items.local[key] + delete items.sync[key] + chrome.storage.sync.remove keys + + $.get = (key, val, cb) -> + if typeof cb is 'function' + data = $.item key, val + else + data = key + cb = val + + localItems = null + syncItems = null + for key, val of data + if key in $.localKeys + (localItems or= {})[key] = val + else + (syncItems or= {})[key] = val + + count = 0 + done = (result) -> + if chrome.runtime.lastError + c.error chrome.runtime.lastError.message + $.extend data, result + cb data unless --count + + if localItems + count++ + chrome.storage.local.get localItems, done + if syncItems + count++ + chrome.storage.sync.get syncItems, done + + timeout = {} setArea = (area) -> data = items[area] return if !Object.keys(data).length or timeout[area] @@ -342,11 +349,11 @@ $.set = do -> delete timeout[area] items[area] = {} - setAll = $.debounce 5 * $.SECOND, -> + setAll = $.debounce $.SECOND, -> setArea 'local' setArea 'sync' - (key, val) -> + $.set = (key, val) -> if typeof key is 'string' items.sync[key] = val else @@ -355,15 +362,18 @@ $.set = do -> items.local[key] = items.sync[key] delete items.sync[key] setAll() -$.clear = (cb) -> - count = 2 - done = -> - if chrome.runtime.lastError - c.error chrome.runtime.lastError.message - return - cb?() unless --count - chrome.storage.local.clear done - chrome.storage.sync.clear done + + $.clear = (cb) -> + items.local = {} + items.sync = {} + count = 2 + done = -> + if chrome.runtime.lastError + c.error chrome.runtime.lastError.message + return + cb?() unless --count + chrome.storage.local.clear done + chrome.storage.sync.clear done <% } else { %> # http://wiki.greasespot.net/Main_Page