// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
cr.define('options', function() {
/** @const */ var Tree = cr.ui.Tree;
/** @const */ var TreeItem = cr.ui.TreeItem;
/**
* Creates a new tree folder for certificate data.
* @param {Object=} data Data used to create a certificate tree folder.
* @constructor
* @extends {TreeItem}
*/
function CertificateTreeFolder(data) {
data.isCert = false;
var treeFolder = new TreeItem({
label: data.name,
data: data
});
treeFolder.__proto__ = CertificateTreeFolder.prototype;
if (data.icon)
treeFolder.icon = data.icon;
return treeFolder;
}
CertificateTreeFolder.prototype = {
__proto__: TreeItem.prototype,
/**
* The tree path id/.
* @type {string}
*/
get pathId() {
return this.data.id;
}
};
/**
* Creates a new tree item for certificate data.
* @param {Object=} data Data used to create a certificate tree item.
* @constructor
* @extends {TreeItem}
*/
function CertificateTreeItem(data) {
data.isCert = true;
// TODO(mattm): other columns
var treeItem = new TreeItem({
label: data.name,
data: data
});
treeItem.__proto__ = CertificateTreeItem.prototype;
if (data.icon)
treeItem.icon = data.icon;
if (data.untrusted) {
var badge = document.createElement('span');
badge.classList.add('cert-untrusted');
badge.textContent = loadTimeData.getString('badgeCertUntrusted');
treeItem.labelElement.insertBefore(
badge, treeItem.labelElement.firstChild);
}
if (data.policy) {
var policyIndicator = new options.ControlledSettingIndicator();
policyIndicator.controlledBy = 'policy';
policyIndicator.setAttribute(
'textpolicy', loadTimeData.getString('certPolicyInstalled'));
policyIndicator.classList.add('cert-policy');
treeItem.labelElement.appendChild(policyIndicator);
}
return treeItem;
}
CertificateTreeItem.prototype = {
__proto__: TreeItem.prototype,
/**
* The tree path id/.
* @type {string}
*/
get pathId() {
return this.parentItem.pathId + ',' + this.data.id;
}
};
/**
* Creates a new cookies tree.
* @param {Object=} opt_propertyBag Optional properties.
* @constructor
* @extends {Tree}
*/
var CertificatesTree = cr.ui.define('tree');
CertificatesTree.prototype = {
__proto__: Tree.prototype,
/** @override */
decorate: function() {
Tree.prototype.decorate.call(this);
this.treeLookup_ = {};
},
/** @override */
addAt: function(child, index) {
Tree.prototype.addAt.call(this, child, index);
if (child.data && child.data.id)
this.treeLookup_[child.data.id] = child;
},
/** @override */
remove: function(child) {
Tree.prototype.remove.call(this, child);
if (child.data && child.data.id)
delete this.treeLookup_[child.data.id];
},
/**
* Clears the tree.
*/
clear: function() {
// Remove all fields without recreating the object since other code
// references it.
for (var id in this.treeLookup_)
delete this.treeLookup_[id];
this.textContent = '';
},
/**
* Populate the tree.
* @param {Array} nodesData Nodes data array.
*/
populate: function(nodesData) {
this.clear();
for (var i = 0; i < nodesData.length; ++i) {
var subnodes = nodesData[i].subnodes;
delete nodesData[i].subnodes;
var item = new CertificateTreeFolder(nodesData[i]);
this.addAt(item, i);
for (var j = 0; j < subnodes.length; ++j) {
var subitem = new CertificateTreeItem(subnodes[j]);
item.addAt(subitem, j);
}
// Make tree expanded by default.
item.expanded = true;
}
cr.dispatchSimpleEvent(this, 'change');
},
};
return {
CertificatesTree: CertificatesTree
};
});