mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-06 09:05:45 +00:00
88 lines
3.2 KiB
JavaScript
88 lines
3.2 KiB
JavaScript
// -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*-
|
|
/* 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 SanitizeUI = {
|
|
_sanitizer: null,
|
|
|
|
_privDataElement: null,
|
|
get _privData() {
|
|
if (this._privDataElement === null) {
|
|
this._privDataElement = document.getElementById("prefs-privdata");
|
|
}
|
|
return this._privDataElement;
|
|
},
|
|
|
|
init: function () {
|
|
this._sanitizer = new Sanitizer();
|
|
this._privData.addEventListener("CheckboxStateChange", this, true);
|
|
},
|
|
|
|
_clearNotificationTimeout: null,
|
|
onSanitize: function onSanitize() {
|
|
let button = document.getElementById("prefs-clear-data");
|
|
let clearNotificationDeck = document.getElementById("clear-notification");
|
|
let clearNotificationEmpty = document.getElementById("clear-notification-empty");
|
|
let clearNotificationClearing = document.getElementById("clear-notification-clearing");
|
|
let clearNotificationDone = document.getElementById("clear-notification-done");
|
|
let allCheckboxes = SanitizeUI._privData.querySelectorAll("checkbox");
|
|
let allSelected = SanitizeUI._privData.querySelectorAll(
|
|
"#prefs-privdata-history[checked], " +
|
|
"#prefs-privdata-other[checked] + #prefs-privdata-subitems .privdata-subitem-item[checked]");
|
|
|
|
// disable button and checkboxes temporarily to indicate something is happening
|
|
button.disabled = true;
|
|
for (let checkbox of allCheckboxes) {
|
|
checkbox.disabled = true;
|
|
}
|
|
clearNotificationDeck.selectedPanel = clearNotificationClearing;
|
|
document.getElementById("clearprivacythrobber").enabled = true;
|
|
|
|
// Run asynchronously to let UI update
|
|
setTimeout(function() {
|
|
for (let item of allSelected) {
|
|
let itemName = item.getAttribute("itemName");
|
|
|
|
try {
|
|
SanitizeUI._sanitizer.clearItem(itemName);
|
|
} catch(e) {
|
|
Components.utils.reportError("Error sanitizing " + itemName + ": " + e);
|
|
}
|
|
}
|
|
|
|
button.disabled = false;
|
|
for (let checkbox of allCheckboxes) {
|
|
checkbox.disabled = false;
|
|
}
|
|
clearNotificationDeck.selectedPanel = clearNotificationDone;
|
|
document.getElementById("clearprivacythrobber").enabled = false;
|
|
|
|
// Clear notifications after 4 seconds
|
|
clearTimeout(SanitizeUI._clearNotificationTimeout);
|
|
SanitizeUI._clearNotificationTimeout = setTimeout(function() {
|
|
clearNotificationDeck.selectedPanel = clearNotificationEmpty;
|
|
}, 4000);
|
|
}, 0);
|
|
},
|
|
|
|
/* Disable the clear button when nothing is selected */
|
|
_onCheckboxChange: function _onCheckboxChange() {
|
|
let anySelected = SanitizeUI._privData.querySelector(
|
|
"#prefs-privdata-history[checked], " +
|
|
"#prefs-privdata-other[checked] + #prefs-privdata-subitems .privdata-subitem-item[checked]");
|
|
|
|
let clearButton = document.getElementById("prefs-clear-data");
|
|
clearButton.disabled = !anySelected;
|
|
},
|
|
|
|
handleEvent: function (aEvent) {
|
|
switch (aEvent.type) {
|
|
case "CheckboxStateChange":
|
|
this._onCheckboxChange();
|
|
break;
|
|
}
|
|
},
|
|
}; |