text-aid-too
Version:
Edit web inputs (including on GMail) with your favourite native text editor; and (experimentally) use markdown.
94 lines (75 loc) • 2.83 kB
text/coffeescript
getOrSet = (key, value, callback = null) ->
chrome.storage.sync.get key, (items) ->
unless chrome.runtime.lastError
if items[key]?
callback? items[key]
else
obj = {}
obj[key] = value
chrome.storage.sync.set obj
callback? value
for key in [ "key", "port", "secret" ]
getOrSet key, Common.default[key]
launchEdit = (request) ->
Common.log request
getOrSet "port", Common.default.port, (port) ->
port = parseInt port
url = "ws://localhost:#{port}/"
getOrSet "secret", Common.default.secret, (secret) ->
request.secret = secret
Common.log "send: #{request.tabId} #{request.id} #{url} #{secret} length=#{request.text?.length}"
socket = new WebSocket url
socket.onerror = socket.onclose = ->
Common.log " done: #{request.tabId} #{request.id} #{url} #{secret}"
socket.close()
socket.onopen = ->
socket.send JSON.stringify request
socket.onmessage = (message) ->
response = JSON.parse message.data
Common.log " recv: #{request.tabId} #{request.id} #{url} #{secret} length=#{response.text?.length}"
chrome.tabs.sendMessage response.tabId, response
false # We will not be calling sendResponse.
launchPing = (request, sender, sendResponse) ->
getOrSet "port", Common.default.port, (port) ->
port = parseInt port
url = "ws://localhost:#{port}/"
getOrSet "secret", Common.default.secret, (secret) ->
request.secret = secret
Common.log "ping..."
exit = (isUp) ->
socket.onerror = socket.onclose = socket.onmessage = null
Common.log " #{isUp}"
sendResponse { isUp }
socket.close()
socket = new WebSocket url
socket.onerror = socket.onclose = -> exit false
socket.onopen = -> socket.send JSON.stringify request
socket.onmessage = (message) ->
response = JSON.parse message.data
exit response.isOk
true # We *will* be calling sendResponse.
updateIcon = (request, sender) ->
Common.log "icon", request.showing
if request.showing
chrome.pageAction.show sender.tab.id
else
chrome.pageAction.hide sender.tab.id
false # We will not be calling sendResponse.
handlers =
edit: launchEdit
ping: launchPing
icon: updateIcon
chrome.runtime.onMessage.addListener do ->
extensionVersion = chrome.runtime.getManifest().version
(request, sender, sendResponse) ->
console.log extensionVersion
Common.log "request", request.name, handlers[request.name]?
if sender.tab?.id?
Common.extend request,
tabId: sender.tab.id
url: sender.tab.url
isChromeStoreVersion: Common.isChromeStoreVersion
extensionVersion: extensionVersion
handlers[request.name]? request, sender, sendResponse
else
false