// 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 }; });