text-aid-too
Version:
Edit web inputs (including on GMail) with your favourite native text editor; and (experimentally) use markdown.
109 lines (86 loc) • 3.6 kB
text/coffeescript
$ = (id) -> document.getElementById id
document.addEventListener "DOMContentLoaded", ->
versionElement = $("version")
versionElement.textContent = chrome.runtime.getManifest().version
portElement = $("port")
secretElement = $("secret")
commandElement = $("command")
escape = (str) ->
str = str.replace /\\/g, "\\\\"
str = str.replace /"/g, "\\\""
maintainServerCommand = ->
command = "\n"
command += " # Set your editor, something like...\n"
command += " export TEXT_AID_TOO_EDITOR=\"gvim -f\"\n\n"
command += " export TEXT_AID_TOO_SECRET=\"#{escape secretElement.value.trim()}\"\n\n" if secretElement.value.trim()
command +=
if portElement.value.trim() == Common.default.port
" text-aid-too\n"
else
" text-aid-too --port #{portElement.value.trim()}\n"
command += "\n"
commandElement.textContent = command
chrome.storage.sync.get [ "port", "secret" ], (items) ->
unless chrome.runtime.lastError
port.value = items.port if items.port?
secret.value = items.secret if items.secret?
maintainServerCommand()
for element in [ portElement, secretElement ]
do (element) ->
element.addEventListener "change", ->
value = element.value.trim()
# Ensure that port is a number.
if element == portElement and not /^[1-9][0-9]*$/.test value
element.value = value = Common.default.port
obj = {}
obj[element.id] = value
chrome.storage.sync.set obj
maintainServerCommand()
element.addEventListener "keydown", (event) ->
element.blur() if event.keyCode == 27
element.addEventListener "change", maintainServerCommand
chrome.storage.sync.get "key", (items) ->
unless chrome.runtime.lastError
batchUpdate = false
keys = [ "ctrlKey", "altKey", "shiftKey" ]
key = items.key
$("keyCode").textContent = key.keyCode
$("setKey").value = "Set keyboard shortcut"
saveKey = ->
newKey = {}
newKey[k] = $(k).checked for k in keys
newKey.keyCode = parseInt $("keyCode").textContent
chrome.storage.sync.set key: newKey
for k in keys
do (k) ->
$(k).checked = key[k]
$(k).addEventListener "change", ->
saveKey() unless batchUpdate
$("setKey").addEventListener "click", ->
$("setKey").disabled = true
$("setKey").value = "Type your keyboard shortcut..."
cancel = ->
window.removeEventListener "keydown", keydown
window.removeEventListener "keyup", keyup
$("setKey").disabled = false
$("setKey").value = "Set keyboard shortcut"
window.addEventListener "keydown", keydown = (event) ->
return if event.repeat
if event.keyCode not in [16..18] # Ctrl, Alt and Shift.
batchUpdate = true
$(k).checked = event[k] for k in keys
$("keyCode").textContent = event.keyCode
saveKey()
batchUpdate = false
cancel()
window.addEventListener "keyup", keyup = -> cancel()
maintainStatus = do ->
status = $("status")
messageTexts = true: "connected", false: "cannot connect"
messageColours = true: "Green", false: "Red"
->
chrome.runtime.sendMessage { name: "ping" }, (response) ->
status.textContent = messageTexts[response.isUp]
status.style.color = messageColours[response.isUp]
Common.setTimeout 1000, maintainStatus
maintainStatus()