| 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
100
101
102
103
104
105
106
107
108
109
110
111
112
 | $ = function(id) { return document.getElementById(id); };
var bgSettings = chrome.extension.getBackgroundPage().Settings;
var editableFields = ["scrollStepSize", "excludedUrls", "linkHintCharacters", "userDefinedLinkHintCss",
                      "keyMappings", "filterLinkHints", "previousPatterns", "nextPatterns", "hideHud"];
var canBeEmptyFields = ["excludedUrls", "keyMappings", "userDefinedLinkHintCss"];
var postSaveHooks = {
  keyMappings: function (value) {
    commands = chrome.extension.getBackgroundPage().Commands;
    commands.clearKeyMappingsAndSetDefaults();
    commands.parseCustomKeyMappings(value);
    chrome.extension.getBackgroundPage().refreshCompletionKeysAfterMappingSave();
  }
};
document.addEventListener("DOMContentLoaded", function() {
  populateOptions();
  for (var i = 0; i < editableFields.length; i++) {
    $(editableFields[i]).addEventListener("keyup", onOptionKeyup, false);
    $(editableFields[i]).addEventListener("change", enableSaveButton, false);
    $(editableFields[i]).addEventListener("change", onDataLoaded, false);
  }
  $("advancedOptions").addEventListener("click", openAdvancedOptions, false);
  $("showCommands").addEventListener("click", function () {
    showHelpDialog(
      chrome.extension.getBackgroundPage().helpDialogHtml(true, true, "Command Listing"), frameId);
  }, false);
  document.getElementById("restoreSettings").addEventListener("click", restoreToDefaults);
  document.getElementById("saveOptions").addEventListener("click", saveOptions);
});
function onOptionKeyup(event) {
  if (event.target.getAttribute("type") !== "checkbox" &&
      event.target.getAttribute("savedValue") != event.target.value)
    enableSaveButton();
}
function onDataLoaded() {
  $("linkHintCharacters").readOnly = $("filterLinkHints").checked;
}
function enableSaveButton() { $("saveOptions").removeAttribute("disabled"); }
// Saves options to localStorage.
function 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 (var i = 0; i < editableFields.length; i++) {
    var fieldName = editableFields[i];
    var field = $(fieldName);
    var fieldValue;
    if (field.getAttribute("type") == "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 (!fieldValue && canBeEmptyFields.indexOf(fieldName) == -1) {
      bgSettings.clear(fieldName);
      fieldValue = bgSettings.get(fieldName);
    } else
      bgSettings.set(fieldName, fieldValue);
    $(fieldName).value = fieldValue;
    $(fieldName).setAttribute("savedValue", fieldValue);
    if (postSaveHooks[fieldName]) { postSaveHooks[fieldName](fieldValue); }
  }
  $("saveOptions").disabled = true;
}
// Restores select box state to saved value from localStorage.
function populateOptions() {
  for (var i = 0; i < editableFields.length; i++) {
    var val = bgSettings.get(editableFields[i]) || "";
    setFieldValue($(editableFields[i]), val);
  }
  onDataLoaded();
}
function restoreToDefaults() {
  for (var i = 0; i < editableFields.length; i++) {
    var val = bgSettings.defaults[editableFields[i]] || "";
    setFieldValue($(editableFields[i]), val);
  }
  onDataLoaded();
  enableSaveButton();
}
function setFieldValue(field, value) {
  if (field.getAttribute('type') == 'checkbox')
    field.checked = value;
  else {
    field.value = value;
    field.setAttribute("savedValue", value);
  }
}
function openAdvancedOptions(event) {
  var elements = document.getElementsByClassName("advancedOption");
  for (var i = 0; i < elements.length; i++)
    elements[i].style.display = (elements[i].style.display == "table-row") ? "none" : "table-row";
  event.preventDefault();
}
 |