aboutsummaryrefslogtreecommitdiffstats
path: root/options/options.coffee
diff options
context:
space:
mode:
Diffstat (limited to 'options/options.coffee')
-rw-r--r--options/options.coffee90
1 files changed, 90 insertions, 0 deletions
diff --git a/options/options.coffee b/options/options.coffee
new file mode 100644
index 00000000..6300dbcd
--- /dev/null
+++ b/options/options.coffee
@@ -0,0 +1,90 @@
+$ = (id) -> document.getElementById id
+
+bgSettings = chrome.extension.getBackgroundPage().Settings
+
+editableFields = ["scrollStepSize", "excludedUrls", "linkHintCharacters", "userDefinedLinkHintCss",
+ "keyMappings", "filterLinkHints", "previousPatterns", "nextPatterns", "hideHud"]
+
+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
+
+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
+
+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")
+ event.preventDefault()