OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * @fileoverview Oobe network screen implementation. | 6 * @fileoverview Oobe network screen implementation. |
7 */ | 7 */ |
8 | 8 |
9 cr.define('oobe', function() { | 9 cr.define('oobe', function() { |
10 /** | 10 /** |
11 * Creates a new DropDown div. | |
12 * @constructor | |
13 * @extends {HTMLDivElement} | |
14 */ | |
15 var DropDown = cr.ui.define('div'); | |
16 | |
17 DropDown.prototype = { | |
18 __proto__: HTMLDivElement.prototype, | |
19 | |
20 /** @inheritDoc */ | |
21 decorate: function() { | |
22 this.isShown = false; | |
23 this.appendChild(this.createTitle_()); | |
24 | |
25 // Create menu items container. | |
26 var container = document.createElement('div') | |
xiyuan
2011/08/06 00:16:34
nit: document -> this.ownerDocument
Nikita (slow)
2011/08/06 16:41:16
Done.
| |
27 container.id = 'dropdownMenu'; | |
28 container.classList.add('dropdown-container'); | |
29 container.hidden = !this.isShown; | |
30 this.appendChild(container); | |
31 }, | |
32 | |
33 /** | |
34 * Sets title and icon. | |
35 * @param {string} title Text on dropdown. | |
36 * @param {string} icon Icon in dataURL format. | |
37 */ | |
38 setTitle: function(title, icon) { | |
39 // TODO(nkostylev): Icon support for dropdown title. | |
40 $('dropdownTitle').innerText = title; | |
xiyuan
2011/08/06 00:16:34
nit: innerText -> textContent
Nikita (slow)
2011/08/06 16:41:16
Done.
| |
41 }, | |
42 | |
43 /** | |
44 * Sets dropdown items. | |
45 * @param {Array} items Dropdown items array. | |
46 */ | |
47 setItems: function(items) { | |
48 var container = $('dropdownMenu'); | |
xiyuan
2011/08/06 00:16:34
nit: container = this.lastElementChild; And if we
Nikita (slow)
2011/08/06 16:41:16
Done.
| |
49 container.innerHTML = ''; | |
50 for (var i = 0; i < items.length; ++i) { | |
51 var item = items[i]; | |
52 if ('sub' in item) { | |
53 // Workaround for submenus, add items on top level. | |
54 // TODO(altimofeev): support submenus. | |
55 for (var j = 0; j < item.sub.length; ++j) | |
56 this.createItem_(container, item.sub[j]); | |
57 continue; | |
58 } | |
59 this.createItem_(container, item); | |
60 } | |
61 }, | |
62 | |
63 /** | |
64 * Creates dropdown item element and adds into container. | |
65 * @param {HTMLElement} container Container where item is added. | |
66 * @param {!Object} item Item to be added. | |
67 * @private | |
68 */ | |
69 createItem_ : function(container, item) { | |
70 var itemContentElement; | |
71 var className = 'dropdown-item'; | |
72 if (item.id == -2) { | |
xiyuan
2011/08/06 00:16:34
nit: give -2 a constant name?
Nikita (slow)
2011/08/06 16:41:16
Done.
| |
73 className = 'dropdown-divider'; | |
74 itemContentElement = document.createElement('hr'); | |
xiyuan
2011/08/06 00:16:34
nit: document -> this.ownerDocument
Nikita (slow)
2011/08/06 16:41:16
Done.
| |
75 } else { | |
76 var span = document.createElement('span'); | |
xiyuan
2011/08/06 00:16:34
ditto
Nikita (slow)
2011/08/06 16:41:16
Done.
| |
77 if ('bold' in item && item.bold) { | |
78 var bold = document.createElement('b'); | |
xiyuan
2011/08/06 00:16:34
nit: I would prefer to use CSS instead of create a
Nikita (slow)
2011/08/06 16:41:16
Done.
| |
79 bold.textContent = item.label; | |
80 span.appendChild(bold); | |
81 } else { | |
82 span.textContent = item.label; | |
83 } | |
84 itemContentElement = span; | |
85 var image = document.createElement('img'); | |
86 if (item.icon) | |
87 image.src = item.icon; | |
88 } | |
89 | |
90 var itemElement = document.createElement('div'); | |
xiyuan
2011/08/06 00:16:34
nit: document -> this.ownerDocument
Nikita (slow)
2011/08/06 16:41:16
Done.
| |
91 itemElement.classList.add(className); | |
92 itemElement.appendChild(itemContentElement); | |
93 itemElement.iid = item.id; | |
94 itemElement.controller = this; | |
95 var enabled = 'enabled' in item && item.enabled; | |
96 if (!enabled) | |
97 itemElement.classList.add('disabled-item'); | |
98 | |
99 if (item.id > 0) { | |
100 var wrapperDiv = document.createElement('div'); | |
xiyuan
2011/08/06 00:16:34
nit: document -> this.ownerDocument
Nikita (slow)
2011/08/06 16:41:16
Done.
| |
101 wrapperDiv.classList.add('dropdown-item-container'); | |
102 var imageDiv = document.createElement('div'); | |
xiyuan
2011/08/06 00:16:34
nit: document -> this.ownerDocument
Nikita (slow)
2011/08/06 16:41:16
Done.
| |
103 imageDiv.classList.add('dropdown-image'); | |
104 imageDiv.appendChild(image); | |
105 wrapperDiv.appendChild(imageDiv); | |
106 wrapperDiv.appendChild(itemElement); | |
107 wrapperDiv.addEventListener('click', function f(e) { | |
108 var item = this.childNodes[1]; | |
109 if (item.iid < -1 || item.classList.contains('disabled-item')) | |
110 return; | |
111 item.controller.isShown = !item.controller.isShown; | |
112 item.controller.childNodes[1].hidden = !item.controller.isShown; | |
xiyuan
2011/08/06 00:16:34
seems like we can make isShown a property.
get is
Nikita (slow)
2011/08/06 16:41:16
Done.
| |
113 if (item.iid >= 0) | |
114 chrome.send('networkItemChosen', [item.iid]); | |
115 }); | |
116 itemElement = wrapperDiv; | |
117 } | |
118 container.appendChild(itemElement); | |
119 }, | |
120 | |
121 /** | |
122 * Creates dropdown title element. | |
123 * @type {HTMLElement} | |
124 * @private | |
125 */ | |
126 createTitle_: function() { | |
127 var el = document.createElement('button'); | |
xiyuan
2011/08/06 00:16:34
nit: document -> this.ownerDocument
Nikita (slow)
2011/08/06 16:41:16
Done.
| |
128 el.id = 'dropdownTitle'; | |
129 el.classList.add('dropdown-title'); | |
130 el.iid = -1; | |
131 el.controller = this; | |
132 el.addEventListener('click', function f(e) { | |
133 this.controller.isShown = !this.controller.isShown; | |
134 this.controller.childNodes[1].hidden = !this.controller.isShown; | |
135 }); | |
136 return el; | |
137 } | |
138 }; | |
139 | |
140 /** | |
11 * Creates a new oobe screen div. | 141 * Creates a new oobe screen div. |
12 * @constructor | 142 * @constructor |
13 * @extends {HTMLDivElement} | 143 * @extends {HTMLDivElement} |
14 */ | 144 */ |
15 var NetworkScreen = cr.ui.define('div'); | 145 var NetworkScreen = cr.ui.define('div'); |
16 | 146 |
17 /** | 147 /** |
18 * Registers with Oobe. | 148 * Registers with Oobe. |
19 */ | 149 */ |
20 NetworkScreen.register = function() { | 150 NetworkScreen.register = function() { |
21 var screen = $('connect'); | 151 var screen = $('connect'); |
22 NetworkScreen.decorate(screen); | 152 NetworkScreen.decorate(screen); |
23 Oobe.getInstance().registerScreen(screen); | 153 Oobe.getInstance().registerScreen(screen); |
24 }; | 154 }; |
25 | 155 |
26 NetworkScreen.prototype = { | 156 NetworkScreen.prototype = { |
27 __proto__: HTMLDivElement.prototype, | 157 __proto__: HTMLDivElement.prototype, |
28 | 158 |
159 /** | |
160 * Dropdown element for networks selection. | |
161 */ | |
162 dropdown_: null, | |
163 | |
29 /** @inheritDoc */ | 164 /** @inheritDoc */ |
30 decorate: function() { | 165 decorate: function() { |
31 Oobe.setupSelect($('language-select'), | 166 Oobe.setupSelect($('language-select'), |
32 templateData.languageList, | 167 templateData.languageList, |
33 'networkOnLanguageChanged'); | 168 'networkOnLanguageChanged'); |
34 | 169 |
35 Oobe.setupSelect($('keyboard-select'), | 170 Oobe.setupSelect($('keyboard-select'), |
36 templateData.inputMethodsList, | 171 templateData.inputMethodsList, |
37 'networkOnInputMethodChanged'); | 172 'networkOnInputMethodChanged'); |
38 }, | 173 |
174 this.dropdown_ = $('networks-list'); | |
175 DropDown.decorate(this.dropdown_); | |
176 }, | |
177 | |
178 /** | |
179 * Updates network list in dropdown. | |
180 * @param {Array} items Dropdown items array. | |
181 */ | |
182 updateNetworks: function(data) { | |
183 this.dropdown_.setItems(data); | |
184 }, | |
185 | |
186 /** | |
187 * Updates dropdown title and icon. | |
188 * @param {string} title Text on dropdown. | |
189 * @param {string} icon Icon in dataURL format. | |
190 */ | |
191 updateNetworkTitle: function(title, icon) { | |
192 this.dropdown_.setTitle(title, icon); | |
193 }, | |
39 | 194 |
40 /** | 195 /** |
41 * Header text of the screen. | 196 * Header text of the screen. |
42 * @type {string} | 197 * @type {string} |
43 */ | 198 */ |
44 get header() { | 199 get header() { |
45 return localStrings.getString('networkScreenTitle'); | 200 return localStrings.getString('networkScreenTitle'); |
46 }, | 201 }, |
47 | 202 |
48 /** | 203 /** |
49 * Buttons in oobe wizard's button strip. | 204 * Buttons in oobe wizard's button strip. |
50 * @type {array} Array of Buttons. | 205 * @type {array} Array of Buttons. |
51 */ | 206 */ |
52 get buttons() { | 207 get buttons() { |
53 var buttons = []; | 208 var buttons = []; |
54 | 209 |
55 var continueButton = this.ownerDocument.createElement('button'); | 210 var continueButton = this.ownerDocument.createElement('button'); |
56 continueButton.id = 'continue-button'; | 211 continueButton.id = 'continue-button'; |
57 continueButton.textContent = localStrings.getString('continueButton'); | 212 continueButton.textContent = localStrings.getString('continueButton'); |
58 continueButton.addEventListener('click', function(e) { | 213 continueButton.addEventListener('click', function(e) { |
59 chrome.send('networkOnExit', []); | 214 chrome.send('networkOnExit', []); |
60 }); | 215 }); |
61 buttons.push(continueButton); | 216 buttons.push(continueButton); |
62 | 217 |
63 return buttons; | 218 return buttons; |
64 } | 219 } |
65 }; | 220 }; |
66 | 221 |
222 NetworkScreen.updateNetworks = function(data) { | |
223 $('connect').updateNetworks(data); | |
224 }; | |
225 | |
226 NetworkScreen.updateNetworkTitle = function(title, icon) { | |
227 $('connect').updateNetworkTitle(title, icon); | |
228 }; | |
229 | |
67 return { | 230 return { |
68 NetworkScreen: NetworkScreen | 231 NetworkScreen: NetworkScreen |
69 }; | 232 }; |
70 }); | 233 }); |
OLD | NEW |