forked from mirrors/gecko-dev
MozReview-Commit-ID: H9gCEZS7U3N --HG-- extra : rebase_source : 95c23a122fa2c3830f9671334eb686d6a456bd6f
202 lines
4.9 KiB
JavaScript
202 lines
4.9 KiB
JavaScript
/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
|
|
/* 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/. */
|
|
const { utils: Cu } = Components;
|
|
|
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
|
|
"use strict";
|
|
|
|
let gSiteDataRemoveSelected = {
|
|
|
|
_tree: null,
|
|
|
|
init() {
|
|
let bundlePreferences = document.getElementById("bundlePreferences");
|
|
let acceptBtn = document.getElementById("SiteDataRemoveSelectedDialog")
|
|
.getButton("accept");
|
|
acceptBtn.label = bundlePreferences.getString("acceptRemove");
|
|
|
|
// Organize items for the tree from the argument
|
|
let hostsTable = window.arguments[0].hostsTable;
|
|
let visibleItems = [];
|
|
let itemsTable = new Map();
|
|
for (let [ baseDomain, hosts ] of hostsTable) {
|
|
// In the beginning, only display base domains in the topmost level.
|
|
visibleItems.push({
|
|
level: 0,
|
|
opened: false,
|
|
host: baseDomain
|
|
});
|
|
// Other hosts are in the second level.
|
|
let items = hosts.map(host => {
|
|
return { host, level: 1 };
|
|
});
|
|
items.sort(sortByHost);
|
|
itemsTable.set(baseDomain, items);
|
|
}
|
|
visibleItems.sort(sortByHost);
|
|
this._view.itemsTable = itemsTable;
|
|
this._view.visibleItems = visibleItems;
|
|
this._tree = document.getElementById("sitesTree");
|
|
this._tree.view = this._view;
|
|
|
|
function sortByHost(a, b) {
|
|
let aHost = a.host.toLowerCase();
|
|
let bHost = b.host.toLowerCase();
|
|
return aHost.localeCompare(bHost);
|
|
}
|
|
},
|
|
|
|
ondialogaccept() {
|
|
window.arguments[0].allowed = true;
|
|
},
|
|
|
|
ondialogcancel() {
|
|
window.arguments[0].allowed = false;
|
|
},
|
|
|
|
_view: {
|
|
_selection: null,
|
|
|
|
itemsTable: null,
|
|
|
|
visibleItems: null,
|
|
|
|
get rowCount() {
|
|
return this.visibleItems.length;
|
|
},
|
|
|
|
getCellText(index, column) {
|
|
let item = this.visibleItems[index];
|
|
return item ? item.host : "";
|
|
},
|
|
|
|
isContainer(index) {
|
|
let item = this.visibleItems[index];
|
|
if (item && item.level === 0) {
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
|
|
isContainerEmpty() {
|
|
return false;
|
|
},
|
|
|
|
isContainerOpen(index) {
|
|
let item = this.visibleItems[index];
|
|
if (item && item.level === 0) {
|
|
return item.opened;
|
|
}
|
|
return false;
|
|
},
|
|
|
|
getLevel(index) {
|
|
let item = this.visibleItems[index];
|
|
return item ? item.level : 0;
|
|
},
|
|
|
|
hasNextSibling(index, afterIndex) {
|
|
let item = this.visibleItems[index];
|
|
if (item) {
|
|
let thisLV = this.getLevel(index);
|
|
for (let i = afterIndex + 1; i < this.rowCount; ++i) {
|
|
let nextLV = this.getLevel(i);
|
|
if (nextLV == thisLV) {
|
|
return true;
|
|
}
|
|
if (nextLV < thisLV) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
|
|
getParentIndex(index) {
|
|
if (!this.isContainer(index)) {
|
|
for (let i = index - 1; i >= 0; --i) {
|
|
if (this.isContainer(i)) {
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
},
|
|
|
|
toggleOpenState(index) {
|
|
let item = this.visibleItems[index];
|
|
if (!this.isContainer(index)) {
|
|
return;
|
|
}
|
|
|
|
if (item.opened) {
|
|
item.opened = false;
|
|
|
|
let deleteCount = 0;
|
|
for (let i = index + 1; i < this.visibleItems.length; ++i) {
|
|
if (!this.isContainer(i)) {
|
|
++deleteCount;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (deleteCount) {
|
|
this.visibleItems.splice(index + 1, deleteCount);
|
|
this.treeBox.rowCountChanged(index + 1, -deleteCount);
|
|
}
|
|
} else {
|
|
item.opened = true;
|
|
|
|
let childItems = this.itemsTable.get(item.host);
|
|
for (let i = 0; i < childItems.length; ++i) {
|
|
this.visibleItems.splice(index + i + 1, 0, childItems[i]);
|
|
}
|
|
this.treeBox.rowCountChanged(index + 1, childItems.length);
|
|
}
|
|
this.treeBox.invalidateRow(index);
|
|
},
|
|
|
|
get selection() {
|
|
return this._selection;
|
|
},
|
|
set selection(v) {
|
|
this._selection = v;
|
|
return v;
|
|
},
|
|
setTree(treeBox) {
|
|
this.treeBox = treeBox;
|
|
},
|
|
isSeparator(index) {
|
|
return false;
|
|
},
|
|
isSorted(index) {
|
|
return false;
|
|
},
|
|
canDrop() {
|
|
return false;
|
|
},
|
|
drop() {},
|
|
getRowProperties() {},
|
|
getCellProperties() {},
|
|
getColumnProperties() {},
|
|
hasPreviousSibling(index) {},
|
|
getImageSrc() {},
|
|
getProgressMode() {},
|
|
getCellValue() {},
|
|
cycleHeader() {},
|
|
selectionChanged() {},
|
|
cycleCell() {},
|
|
isEditable() {},
|
|
isSelectable() {},
|
|
setCellValue() {},
|
|
setCellText() {},
|
|
performAction() {},
|
|
performActionOnRow() {},
|
|
performActionOnCell() {}
|
|
}
|
|
};
|