1// Copyright 2014 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. 4 5cr.define('options.supervisedUserOptions', function() { 6 /** @const */ var List = cr.ui.List; 7 /** @const */ var ListItem = cr.ui.ListItem; 8 /** @const */ var ListSingleSelectionModel = cr.ui.ListSingleSelectionModel; 9 10 /** 11 * Create a new supervised user list item. 12 * @param {Object} entry The supervised user this item represents. 13 * It has the following form: 14 * supervisedUser = { 15 * id: "Supervised User ID", 16 * name: "Supervised User Name", 17 * iconURL: "chrome://path/to/icon/image", 18 * onCurrentDevice: true or false, 19 * needAvatar: true or false 20 * } 21 * @constructor 22 * @extends {cr.ui.ListItem} 23 */ 24 function SupervisedUserListItem(entry) { 25 var el = cr.doc.createElement('div'); 26 el.supervisedUser_ = entry; 27 el.__proto__ = SupervisedUserListItem.prototype; 28 el.decorate(); 29 return el; 30 } 31 32 SupervisedUserListItem.prototype = { 33 __proto__: ListItem.prototype, 34 35 /** 36 * @type {string} the ID of this supervised user list item. 37 */ 38 get id() { 39 return this.supervisedUser_.id; 40 }, 41 42 /** 43 * @type {string} the name of this supervised user list item. 44 */ 45 get name() { 46 return this.supervisedUser_.name; 47 }, 48 49 /** 50 * @type {string} the path to the avatar icon of this supervised 51 * user list item. 52 */ 53 get iconURL() { 54 return this.supervisedUser_.iconURL; 55 }, 56 57 /** @override */ 58 decorate: function() { 59 ListItem.prototype.decorate.call(this); 60 var supervisedUser = this.supervisedUser_; 61 62 // Add the avatar. 63 var iconElement = this.ownerDocument.createElement('img'); 64 iconElement.className = 'profile-img'; 65 iconElement.style.content = getProfileAvatarIcon(supervisedUser.iconURL); 66 this.appendChild(iconElement); 67 68 // Add the profile name. 69 var nameElement = this.ownerDocument.createElement('div'); 70 nameElement.className = 'profile-name'; 71 nameElement.textContent = supervisedUser.name; 72 this.appendChild(nameElement); 73 74 if (supervisedUser.onCurrentDevice) { 75 iconElement.className += ' profile-img-disabled'; 76 nameElement.className += ' profile-name-disabled'; 77 78 // Add "(already on this device)" message. 79 var alreadyOnDeviceElement = this.ownerDocument.createElement('div'); 80 alreadyOnDeviceElement.className = 81 'profile-name-disabled already-on-this-device'; 82 alreadyOnDeviceElement.textContent = 83 loadTimeData.getString('supervisedUserAlreadyOnThisDevice'); 84 this.appendChild(alreadyOnDeviceElement); 85 } 86 }, 87 }; 88 89 /** 90 * Create a new supervised users list. 91 * @constructor 92 * @extends {cr.ui.List} 93 */ 94 var SupervisedUserList = cr.ui.define('list'); 95 96 SupervisedUserList.prototype = { 97 __proto__: List.prototype, 98 99 /** 100 * @override 101 * @param {Object} entry 102 */ 103 createItem: function(entry) { 104 return new SupervisedUserListItem(entry); 105 }, 106 107 /** @override */ 108 decorate: function() { 109 List.prototype.decorate.call(this); 110 this.selectionModel = new ListSingleSelectionModel(); 111 this.autoExpands = true; 112 }, 113 }; 114 115 return { 116 SupervisedUserListItem: SupervisedUserListItem, 117 SupervisedUserList: SupervisedUserList, 118 }; 119}); 120