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