summaryrefslogtreecommitdiffstats
path: root/mobile/android/chrome/content/config.js
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/chrome/content/config.js')
-rw-r--r--mobile/android/chrome/content/config.js673
1 files changed, 0 insertions, 673 deletions
diff --git a/mobile/android/chrome/content/config.js b/mobile/android/chrome/content/config.js
deleted file mode 100644
index 2c868f175..000000000
--- a/mobile/android/chrome/content/config.js
+++ /dev/null
@@ -1,673 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-"use strict";
-
-var {classes: Cc, interfaces: Ci, manager: Cm, utils: Cu} = Components;
-Cu.import("resource://gre/modules/Services.jsm");
-
-const VKB_ENTER_KEY = 13; // User press of VKB enter key
-const INITIAL_PAGE_DELAY = 500; // Initial pause on program start for scroll alignment
-const PREFS_BUFFER_MAX = 30; // Max prefs buffer size for getPrefsBuffer()
-const PAGE_SCROLL_TRIGGER = 200; // Triggers additional getPrefsBuffer() on user scroll-to-bottom
-const FILTER_CHANGE_TRIGGER = 200; // Delay between responses to filterInput changes
-const INNERHTML_VALUE_DELAY = 100; // Delay before providing prefs innerHTML value
-
-var gStringBundle = Services.strings.createBundle("chrome://browser/locale/config.properties");
-var gClipboardHelper = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);
-
-
-/* ============================== NewPrefDialog ==============================
- *
- * New Preference Dialog Object and methods
- *
- * Implements User Interfaces for creation of a single(new) Preference setting
- *
- */
-var NewPrefDialog = {
-
- _prefsShield: null,
-
- _newPrefsDialog: null,
- _newPrefItem: null,
- _prefNameInputElt: null,
- _prefTypeSelectElt: null,
-
- _booleanValue: null,
- _booleanToggle: null,
- _stringValue: null,
- _intValue: null,
-
- _positiveButton: null,
-
- get type() {
- return this._prefTypeSelectElt.value;
- },
-
- set type(aType) {
- this._prefTypeSelectElt.value = aType;
- switch(this._prefTypeSelectElt.value) {
- case "boolean":
- this._prefTypeSelectElt.selectedIndex = 0;
- break;
- case "string":
- this._prefTypeSelectElt.selectedIndex = 1;
- break;
- case "int":
- this._prefTypeSelectElt.selectedIndex = 2;
- break;
- }
-
- this._newPrefItem.setAttribute("typestyle", aType);
- },
-
- // Init the NewPrefDialog
- init: function AC_init() {
- this._prefsShield = document.getElementById("prefs-shield");
-
- this._newPrefsDialog = document.getElementById("new-pref-container");
- this._newPrefItem = document.getElementById("new-pref-item");
- this._prefNameInputElt = document.getElementById("new-pref-name");
- this._prefTypeSelectElt = document.getElementById("new-pref-type");
-
- this._booleanValue = document.getElementById("new-pref-value-boolean");
- this._stringValue = document.getElementById("new-pref-value-string");
- this._intValue = document.getElementById("new-pref-value-int");
-
- this._positiveButton = document.getElementById("positive-button");
- },
-
- // Called to update positive button to display text ("Create"/"Change), and enabled/disabled status
- // As new pref name is initially displayed, re-focused, or modifed during user input
- _updatePositiveButton: function AC_updatePositiveButton(aPrefName) {
- this._positiveButton.textContent = gStringBundle.GetStringFromName("newPref.createButton");
- this._positiveButton.setAttribute("disabled", true);
- if (aPrefName == "") {
- return;
- }
-
- // If item already in list, it's being changed, else added
- let item = AboutConfig._list.filter(i => { return i.name == aPrefName });
- if (item.length) {
- this._positiveButton.textContent = gStringBundle.GetStringFromName("newPref.changeButton");
- } else {
- this._positiveButton.removeAttribute("disabled");
- }
- },
-
- // When we want to cancel/hide an existing, or show a new pref dialog
- toggleShowHide: function AC_toggleShowHide() {
- if (this._newPrefsDialog.classList.contains("show")) {
- this.hide();
- } else {
- this._show();
- }
- },
-
- // When we want to show the new pref dialog / shield the prefs list
- _show: function AC_show() {
- this._newPrefsDialog.classList.add("show");
- this._prefsShield.setAttribute("shown", true);
-
- // Initial default field values
- this._prefNameInputElt.value = "";
- this._updatePositiveButton(this._prefNameInputElt.value);
-
- this.type = "boolean";
- this._booleanValue.value = "false";
- this._stringValue.value = "";
- this._intValue.value = "";
-
- this._prefNameInputElt.focus();
-
- window.addEventListener("keypress", this.handleKeypress, false);
- },
-
- // When we want to cancel/hide the new pref dialog / un-shield the prefs list
- hide: function AC_hide() {
- this._newPrefsDialog.classList.remove("show");
- this._prefsShield.removeAttribute("shown");
-
- window.removeEventListener("keypress", this.handleKeypress, false);
- },
-
- // Watch user key input so we can provide Enter key action, commit input values
- handleKeypress: function AC_handleKeypress(aEvent) {
- // Close our VKB on new pref enter key press
- if (aEvent.keyCode == VKB_ENTER_KEY)
- aEvent.target.blur();
- },
-
- // New prefs create dialog only allows creating a non-existing preference, doesn't allow for
- // Changing an existing one on-the-fly, tap existing/displayed line item pref for that
- create: function AC_create(aEvent) {
- if (this._positiveButton.getAttribute("disabled") == "true") {
- return;
- }
-
- switch(this.type) {
- case "boolean":
- Services.prefs.setBoolPref(this._prefNameInputElt.value, (this._booleanValue.value == "true") ? true : false);
- break;
- case "string":
- Services.prefs.setCharPref(this._prefNameInputElt.value, this._stringValue.value);
- break;
- case "int":
- Services.prefs.setIntPref(this._prefNameInputElt.value, this._intValue.value);
- break;
- }
-
- // Ensure pref adds flushed to disk immediately
- Services.prefs.savePrefFile(null);
-
- this.hide();
- },
-
- // Display proper positive button text/state on new prefs name input focus
- focusName: function AC_focusName(aEvent) {
- this._updatePositiveButton(aEvent.target.value);
- },
-
- // Display proper positive button text/state as user changes new prefs name
- updateName: function AC_updateName(aEvent) {
- this._updatePositiveButton(aEvent.target.value);
- },
-
- // In new prefs dialog, bool prefs are <input type="text">, as they aren't yet tied to an
- // Actual Services.prefs.*etBoolPref()
- toggleBoolValue: function AC_toggleBoolValue() {
- this._booleanValue.value = (this._booleanValue.value == "true" ? "false" : "true");
- }
-}
-
-
-/* ============================== AboutConfig ==============================
- *
- * Main AboutConfig object and methods
- *
- * Implements User Interfaces for maintenance of a list of Preference settings
- *
- */
-var AboutConfig = {
-
- contextMenuLINode: null,
- filterInput: null,
- _filterPrevInput: null,
- _filterChangeTimer: null,
- _prefsContainer: null,
- _loadingContainer: null,
- _list: null,
-
- // Init the main AboutConfig dialog
- init: function AC_init() {
- this.filterInput = document.getElementById("filter-input");
- this._prefsContainer = document.getElementById("prefs-container");
- this._loadingContainer = document.getElementById("loading-container");
-
- let list = Services.prefs.getChildList("");
- this._list = list.sort().map( function AC_getMapPref(aPref) {
- return new Pref(aPref);
- }, this);
-
- // Support filtering about:config via a ?filter=<string> param
- let match = /[?&]filter=([^&]+)/i.exec(window.location.href);
- if (match) {
- this.filterInput.value = decodeURIComponent(match[1]);
- }
-
- // Display the current prefs list (retains searchFilter value)
- this.bufferFilterInput();
-
- // Setup the prefs observers
- Services.prefs.addObserver("", this, false);
- },
-
- // Uninit the main AboutConfig dialog
- uninit: function AC_uninit() {
- // Remove the prefs observer
- Services.prefs.removeObserver("", this);
- },
-
- // Clear the filterInput value, to display the entire list
- clearFilterInput: function AC_clearFilterInput() {
- this.filterInput.value = "";
- this.bufferFilterInput();
- },
-
- // Buffer down rapid changes in filterInput value from keyboard
- bufferFilterInput: function AC_bufferFilterInput() {
- if (this._filterChangeTimer) {
- clearTimeout(this._filterChangeTimer);
- }
-
- this._filterChangeTimer = setTimeout((function() {
- this._filterChangeTimer = null;
- // Display updated prefs list when filterInput value settles
- this._displayNewList();
- }).bind(this), FILTER_CHANGE_TRIGGER);
- },
-
- // Update displayed list when filterInput value changes
- _displayNewList: function AC_displayNewList() {
- // This survives the search filter value past a page refresh
- this.filterInput.setAttribute("value", this.filterInput.value);
-
- // Don't start new filter search if same as last
- if (this.filterInput.value == this._filterPrevInput) {
- return;
- }
- this._filterPrevInput = this.filterInput.value;
-
- // Clear list item selection / context menu, prefs list, get first buffer, set scrolling on
- this.selected = "";
- this._clearPrefsContainer();
- this._addMorePrefsToContainer();
- window.onscroll = this.onScroll.bind(this);
-
- // Pause for screen to settle, then ensure at top
- setTimeout((function() {
- window.scrollTo(0, 0);
- }).bind(this), INITIAL_PAGE_DELAY);
- },
-
- // Clear the displayed preferences list
- _clearPrefsContainer: function AC_clearPrefsContainer() {
- // Quick clear the prefsContainer list
- let empty = this._prefsContainer.cloneNode(false);
- this._prefsContainer.parentNode.replaceChild(empty, this._prefsContainer);
- this._prefsContainer = empty;
-
- // Quick clear the prefs li.HTML list
- this._list.forEach(function(item) {
- delete item.li;
- });
- },
-
- // Get a small manageable block of prefs items, and add them to the displayed list
- _addMorePrefsToContainer: function AC_addMorePrefsToContainer() {
- // Create filter regex
- let filterExp = this.filterInput.value ?
- new RegExp(this.filterInput.value, "i") : null;
-
- // Get a new block for the display list
- let prefsBuffer = [];
- for (let i = 0; i < this._list.length && prefsBuffer.length < PREFS_BUFFER_MAX; i++) {
- if (!this._list[i].li && this._list[i].test(filterExp)) {
- prefsBuffer.push(this._list[i]);
- }
- }
-
- // Add the new block to the displayed list
- for (let i = 0; i < prefsBuffer.length; i++) {
- this._prefsContainer.appendChild(prefsBuffer[i].getOrCreateNewLINode());
- }
-
- // Determine if anything left to add later by scrolling
- let anotherPrefsBufferRemains = false;
- for (let i = 0; i < this._list.length; i++) {
- if (!this._list[i].li && this._list[i].test(filterExp)) {
- anotherPrefsBufferRemains = true;
- break;
- }
- }
-
- if (anotherPrefsBufferRemains) {
- // If still more could be displayed, show the throbber
- this._loadingContainer.style.display = "block";
- } else {
- // If no more could be displayed, hide the throbber, and stop noticing scroll events
- this._loadingContainer.style.display = "none";
- window.onscroll = null;
- }
- },
-
- // If scrolling at the bottom, maybe add some more entries
- onScroll: function AC_onScroll(aEvent) {
- if (this._prefsContainer.scrollHeight - (window.pageYOffset + window.innerHeight) < PAGE_SCROLL_TRIGGER) {
- if (!this._filterChangeTimer) {
- this._addMorePrefsToContainer();
- }
- }
- },
-
-
- // Return currently selected list item node
- get selected() {
- return document.querySelector(".pref-item.selected");
- },
-
- // Set list item node as selected
- set selected(aSelection) {
- let currentSelection = this.selected;
- if (aSelection == currentSelection) {
- return;
- }
-
- // Clear any previous selection
- if (currentSelection) {
- currentSelection.classList.remove("selected");
- currentSelection.removeEventListener("keypress", this.handleKeypress, false);
- }
-
- // Set any current selection
- if (aSelection) {
- aSelection.classList.add("selected");
- aSelection.addEventListener("keypress", this.handleKeypress, false);
- }
- },
-
- // Watch user key input so we can provide Enter key action, commit input values
- handleKeypress: function AC_handleKeypress(aEvent) {
- if (aEvent.keyCode == VKB_ENTER_KEY)
- aEvent.target.blur();
- },
-
- // Return the target list item node of an action event
- getLINodeForEvent: function AC_getLINodeForEvent(aEvent) {
- let node = aEvent.target;
- while (node && node.nodeName != "li") {
- node = node.parentNode;
- }
-
- return node;
- },
-
- // Return a pref of a list item node
- _getPrefForNode: function AC_getPrefForNode(aNode) {
- let pref = aNode.getAttribute("name");
-
- return new Pref(pref);
- },
-
- // When list item name or value are tapped
- selectOrToggleBoolPref: function AC_selectOrToggleBoolPref(aEvent) {
- let node = this.getLINodeForEvent(aEvent);
-
- // If not already selected, just do so
- if (this.selected != node) {
- this.selected = node;
- return;
- }
-
- // If already selected, and value is boolean, toggle it
- let pref = this._getPrefForNode(node);
- if (pref.type != Services.prefs.PREF_BOOL) {
- return;
- }
-
- this.toggleBoolPref(aEvent);
- },
-
- // When finalizing list input values due to blur
- setIntOrStringPref: function AC_setIntOrStringPref(aEvent) {
- let node = this.getLINodeForEvent(aEvent);
-
- // Skip if locked
- let pref = this._getPrefForNode(node);
- if (pref.locked) {
- return;
- }
-
- // Boolean inputs blur to remove focus from "button"
- if (pref.type == Services.prefs.PREF_BOOL) {
- return;
- }
-
- // String and Int inputs change / commit on blur
- pref.value = aEvent.target.value;
- },
-
- // When we reset a pref to it's default value (note resetting a user created pref will delete it)
- resetDefaultPref: function AC_resetDefaultPref(aEvent) {
- let node = this.getLINodeForEvent(aEvent);
-
- // If not already selected, do so
- if (this.selected != node) {
- this.selected = node;
- }
-
- // Reset will handle any locked condition
- let pref = this._getPrefForNode(node);
- pref.reset();
-
- // Ensure pref reset flushed to disk immediately
- Services.prefs.savePrefFile(null);
- },
-
- // When we want to toggle a bool pref
- toggleBoolPref: function AC_toggleBoolPref(aEvent) {
- let node = this.getLINodeForEvent(aEvent);
-
- // Skip if locked, or not boolean
- let pref = this._getPrefForNode(node);
- if (pref.locked) {
- return;
- }
-
- // Toggle, and blur to remove field focus
- pref.value = !pref.value;
- aEvent.target.blur();
- },
-
- // When Int inputs have their Up or Down arrows toggled
- incrOrDecrIntPref: function AC_incrOrDecrIntPref(aEvent, aInt) {
- let node = this.getLINodeForEvent(aEvent);
-
- // Skip if locked
- let pref = this._getPrefForNode(node);
- if (pref.locked) {
- return;
- }
-
- pref.value += aInt;
- },
-
- // Observe preference changes
- observe: function AC_observe(aSubject, aTopic, aPrefName) {
- let pref = new Pref(aPrefName);
-
- // Ignore uninteresting changes, and avoid "private" preferences
- if (aTopic != "nsPref:changed") {
- return;
- }
-
- // If pref type invalid, refresh display as user reset/removed an item from the list
- if (pref.type == Services.prefs.PREF_INVALID) {
- document.location.reload();
- return;
- }
-
- // If pref onscreen, update in place.
- let item = document.querySelector(".pref-item[name=\"" + CSS.escape(pref.name) + "\"]");
- if (item) {
- item.setAttribute("value", pref.value);
- let input = item.querySelector("input");
- input.setAttribute("value", pref.value);
- input.value = pref.value;
-
- pref.default ?
- item.querySelector(".reset").setAttribute("disabled", "true") :
- item.querySelector(".reset").removeAttribute("disabled");
- return;
- }
-
- // If pref not already in list, refresh display as it's being added
- let anyWhere = this._list.filter(i => { return i.name == pref.name });
- if (!anyWhere.length) {
- document.location.reload();
- }
- },
-
- // Quick context menu helpers for about:config
- clipboardCopy: function AC_clipboardCopy(aField) {
- let pref = this._getPrefForNode(this.contextMenuLINode);
- if (aField == 'name') {
- gClipboardHelper.copyString(pref.name);
- } else {
- gClipboardHelper.copyString(pref.value);
- }
- }
-}
-
-
-/* ============================== Pref ==============================
- *
- * Individual Preference object / methods
- *
- * Defines a Pref object, a document list item tied to Preferences Services
- * And the methods by which they interact.
- *
- */
-function Pref(aName) {
- this.name = aName;
-}
-
-Pref.prototype = {
- get type() {
- return Services.prefs.getPrefType(this.name);
- },
-
- get value() {
- switch (this.type) {
- case Services.prefs.PREF_BOOL:
- return Services.prefs.getBoolPref(this.name);
- case Services.prefs.PREF_INT:
- return Services.prefs.getIntPref(this.name);
- case Services.prefs.PREF_STRING:
- default:
- return Services.prefs.getCharPref(this.name);
- }
-
- },
- set value(aPrefValue) {
- switch (this.type) {
- case Services.prefs.PREF_BOOL:
- Services.prefs.setBoolPref(this.name, aPrefValue);
- break;
- case Services.prefs.PREF_INT:
- Services.prefs.setIntPref(this.name, aPrefValue);
- break;
- case Services.prefs.PREF_STRING:
- default:
- Services.prefs.setCharPref(this.name, aPrefValue);
- }
-
- // Ensure pref change flushed to disk immediately
- Services.prefs.savePrefFile(null);
- },
-
- get default() {
- return !Services.prefs.prefHasUserValue(this.name);
- },
-
- get locked() {
- return Services.prefs.prefIsLocked(this.name);
- },
-
- reset: function AC_reset() {
- Services.prefs.clearUserPref(this.name);
- },
-
- test: function AC_test(aValue) {
- return aValue ? aValue.test(this.name) : true;
- },
-
- // Get existing or create new LI node for the pref
- getOrCreateNewLINode: function AC_getOrCreateNewLINode() {
- if (!this.li) {
- this.li = document.createElement("li");
-
- this.li.className = "pref-item";
- this.li.setAttribute("name", this.name);
-
- // Click callback to ensure list item selected even on no-action tap events
- this.li.addEventListener("click",
- function(aEvent) {
- AboutConfig.selected = AboutConfig.getLINodeForEvent(aEvent);
- },
- false
- );
-
- // Contextmenu callback to identify selected list item
- this.li.addEventListener("contextmenu",
- function(aEvent) {
- AboutConfig.contextMenuLINode = AboutConfig.getLINodeForEvent(aEvent);
- },
- false
- );
-
- this.li.setAttribute("contextmenu", "prefs-context-menu");
-
- // Create list item outline, bind to object actions
- this.li.innerHTML =
- "<div class='pref-name' " +
- "onclick='AboutConfig.selectOrToggleBoolPref(event);'>" +
- this.name +
- "</div>" +
- "<div class='pref-item-line'>" +
- "<input class='pref-value' value='' " +
- "onblur='AboutConfig.setIntOrStringPref(event);' " +
- "onclick='AboutConfig.selectOrToggleBoolPref(event);'>" +
- "</input>" +
- "<div class='pref-button reset' " +
- "onclick='AboutConfig.resetDefaultPref(event);'>" +
- gStringBundle.GetStringFromName("pref.resetButton") +
- "</div>" +
- "<div class='pref-button toggle' " +
- "onclick='AboutConfig.toggleBoolPref(event);'>" +
- gStringBundle.GetStringFromName("pref.toggleButton") +
- "</div>" +
- "<div class='pref-button up' " +
- "onclick='AboutConfig.incrOrDecrIntPref(event, 1);'>" +
- "</div>" +
- "<div class='pref-button down' " +
- "onclick='AboutConfig.incrOrDecrIntPref(event, -1);'>" +
- "</div>" +
- "</div>";
-
- // Delay providing the list item values, until the LI is returned and added to the document
- setTimeout(this._valueSetup.bind(this), INNERHTML_VALUE_DELAY);
- }
-
- return this.li;
- },
-
- // Initialize list item object values
- _valueSetup: function AC_valueSetup() {
-
- this.li.setAttribute("type", this.type);
- this.li.setAttribute("value", this.value);
-
- let valDiv = this.li.querySelector(".pref-value");
- valDiv.value = this.value;
-
- switch(this.type) {
- case Services.prefs.PREF_BOOL:
- valDiv.setAttribute("type", "button");
- this.li.querySelector(".up").setAttribute("disabled", true);
- this.li.querySelector(".down").setAttribute("disabled", true);
- break;
- case Services.prefs.PREF_STRING:
- valDiv.setAttribute("type", "text");
- this.li.querySelector(".up").setAttribute("disabled", true);
- this.li.querySelector(".down").setAttribute("disabled", true);
- this.li.querySelector(".toggle").setAttribute("disabled", true);
- break;
- case Services.prefs.PREF_INT:
- valDiv.setAttribute("type", "number");
- this.li.querySelector(".toggle").setAttribute("disabled", true);
- break;
- }
-
- this.li.setAttribute("default", this.default);
- if (this.default) {
- this.li.querySelector(".reset").setAttribute("disabled", true);
- }
-
- if (this.locked) {
- valDiv.setAttribute("disabled", this.locked);
- this.li.querySelector(".pref-name").setAttribute("locked", true);
- }
- }
-}
-