1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
$ = (id) -> document.getElementById id
bgSettings = chrome.extension.getBackgroundPage().Settings
editableFields = ["scrollStepSize", "excludedUrls", "linkHintCharacters", "userDefinedLinkHintCss",
"keyMappings", "filterLinkHints", "previousPatterns", "nextPatterns", "hideHud", "regexFindMode"]
canBeEmptyFields = ["excludedUrls", "keyMappings", "userDefinedLinkHintCss"]
postSaveHooks = keyMappings: (value) ->
commands = chrome.extension.getBackgroundPage().Commands
commands.clearKeyMappingsAndSetDefaults()
commands.parseCustomKeyMappings value
chrome.extension.getBackgroundPage().refreshCompletionKeysAfterMappingSave()
document.addEventListener "DOMContentLoaded", ->
populateOptions()
for field in editableFields
$(field).addEventListener "keyup", onOptionKeyup, false
$(field).addEventListener "change", enableSaveButton, false
$(field).addEventListener "change", onDataLoaded, false
$("advancedOptions").addEventListener "click", openAdvancedOptions, false
$("showCommands").addEventListener "click", (->
showHelpDialog chrome.extension.getBackgroundPage().helpDialogHtml(true, true, "Command Listing"), frameId
), false
document.getElementById("restoreSettings").addEventListener "click", restoreToDefaults
document.getElementById("saveOptions").addEventListener "click", saveOptions
window.onbeforeunload = -> "You have unsaved changes to options." unless $("saveOptions").disabled
onOptionKeyup = (event) ->
if (event.target.getAttribute("type") isnt "checkbox" and
event.target.getAttribute("savedValue") isnt event.target.value)
enableSaveButton()
onDataLoaded = ->
$("linkHintCharacters").readOnly = $("filterLinkHints").checked
enableSaveButton = ->
$("saveOptions").removeAttribute "disabled"
# Saves options to localStorage.
saveOptions = ->
# If the value is unchanged from the default, delete the preference from localStorage; this gives us
# the freedom to change the defaults in the future.
for fieldName in editableFields
field = $(fieldName)
if field.getAttribute("type") is "checkbox"
fieldValue = field.checked
else
fieldValue = field.value.trim()
field.value = fieldValue
# If it's empty and not a field that we allow to be empty, restore to the default value
if not fieldValue and canBeEmptyFields.indexOf(fieldName) is -1
bgSettings.clear fieldName
fieldValue = bgSettings.get(fieldName)
else
bgSettings.set fieldName, fieldValue
$(fieldName).value = fieldValue
$(fieldName).setAttribute "savedValue", fieldValue
postSaveHooks[fieldName] fieldValue if postSaveHooks[fieldName]
$("saveOptions").disabled = true
# Restores select box state to saved value from localStorage.
populateOptions = ->
for field in editableFields
val = bgSettings.get(field) or ""
setFieldValue $(field), val
onDataLoaded()
restoreToDefaults = ->
for field in editableFields
val = bgSettings.defaults[field] or ""
setFieldValue $(field), val
onDataLoaded()
enableSaveButton()
setFieldValue = (field, value) ->
unless field.getAttribute("type") is "checkbox"
field.value = value
field.setAttribute "savedValue", value
else
field.checked = value
openAdvancedOptions = (event) ->
elements = document.getElementsByClassName("advancedOption")
for element in elements
element.style.display = (if (element.style.display is "table-row") then "none" else "table-row")
showOrHideLink = $("advancedOptions")
if showOrHideLink.innerHTML.match(/^Show/)?
showOrHideLink.innerHTML = "Hide advanced options…"
else
showOrHideLink.innerHTML = "Show advanced options…"
event.preventDefault()
|