Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / resources / options / browser_options_profile_list.js
blob96adf2fec7bfb27a87dde2c92f426e7a1a3b07cd
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 cr.define('options.browser_options', function() {
6   /** @const */ var DeletableItem = options.DeletableItem;
7   /** @const */ var DeletableItemList = options.DeletableItemList;
8   /** @const */ var ListSingleSelectionModel = cr.ui.ListSingleSelectionModel;
10   /**
11    * Creates a new profile list item.
12    * @param {Object} profileInfo The profile this item represents.
13    * @constructor
14    * @extends {options.DeletableItem}
15    */
16   function ProfileListItem(profileInfo) {
17     var el = cr.doc.createElement('div');
18     el.profileInfo_ = profileInfo;
19     ProfileListItem.decorate(el);
20     return el;
21   }
23   /**
24    * Decorates an element as a profile list item.
25    * @param {!HTMLElement} el The element to decorate.
26    */
27   ProfileListItem.decorate = function(el) {
28     el.__proto__ = ProfileListItem.prototype;
29     el.decorate();
30   };
32   ProfileListItem.prototype = {
33     __proto__: DeletableItem.prototype,
35     /**
36      * @type {string} the file path of this profile list item.
37      */
38     get profilePath() {
39       return this.profileInfo_.filePath;
40     },
42     /** @override */
43     decorate: function() {
44       DeletableItem.prototype.decorate.call(this);
46       var profileInfo = this.profileInfo_;
48       var containerEl = this.ownerDocument.createElement('div');
49       containerEl.className = 'profile-container';
51       var iconEl = this.ownerDocument.createElement('img');
52       iconEl.className = 'profile-img';
53       iconEl.style.content = getProfileAvatarIcon(profileInfo.iconURL);
54       iconEl.alt = '';
55       containerEl.appendChild(iconEl);
57       var nameEl = this.ownerDocument.createElement('div');
58       nameEl.className = 'profile-name';
59       if (profileInfo.isCurrentProfile)
60         nameEl.classList.add('profile-item-current');
61       containerEl.appendChild(nameEl);
63       var displayName = profileInfo.name;
64       if (profileInfo.isCurrentProfile) {
65         displayName = loadTimeData.getStringF('profilesListItemCurrent',
66                                               profileInfo.name);
67       }
68       nameEl.textContent = displayName;
70       if (profileInfo.isSupervised) {
71         var supervisedEl = this.ownerDocument.createElement('div');
72         supervisedEl.className = 'profile-supervised';
73         supervisedEl.textContent = profileInfo.isChild ?
74             loadTimeData.getString('childLabel') :
75             loadTimeData.getString('supervisedUserLabel');
76         containerEl.appendChild(supervisedEl);
77       }
79       this.contentElement.appendChild(containerEl);
81       // Ensure that the button cannot be tabbed to for accessibility reasons.
82       this.closeButtonElement.tabIndex = -1;
83     },
84   };
86   var ProfileList = cr.ui.define('list');
88   ProfileList.prototype = {
89     __proto__: DeletableItemList.prototype,
91     /** @override */
92     decorate: function() {
93       DeletableItemList.prototype.decorate.call(this);
94       this.selectionModel = new ListSingleSelectionModel();
95     },
97     /** @override */
98     createItem: function(pageInfo) {
99       var item = new ProfileListItem(pageInfo);
100       item.deletable = this.canDeleteItems_;
101       return item;
102     },
104     /** @override */
105     deleteItemAtIndex: function(index) {
106       ManageProfileOverlay.showDeleteDialog(this.dataModel.item(index));
107     },
109     /** @override */
110     activateItemAtIndex: function(index) {
111       // Don't allow the user to edit a profile that is not current.
112       var profileInfo = this.dataModel.item(index);
113       if (profileInfo.isCurrentProfile)
114         ManageProfileOverlay.showManageDialog(profileInfo);
115     },
117     /**
118      * Sets whether items in this list are deletable.
119      */
120     set canDeleteItems(value) {
121       this.canDeleteItems_ = value;
122     },
124     /**
125      * @type {boolean} whether the items in this list are deletable.
126      */
127     get canDeleteItems() {
128       return this.canDeleteItems_;
129     },
131     /**
132      * If false, items in this list will not be deletable.
133      * @private
134      */
135     canDeleteItems_: true,
136   };
138   return {
139     ProfileList: ProfileList
140   };