Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(242)

Side by Side Diff: chrome/browser/resources/chromeos/login/oobe_i18n_dropdown.js

Issue 2189733006: ChromeOS: Implement Language Selection screen of material design OOBE. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update after review. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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
5 /**
6 * Polymer class definition for 'oobe-i18n-dropdown'.
7 */
8 (function() {
9
10
11 /**
12 * Languages/keyboard descriptor to display
13 * @type {!OobeTypes.LanguageDsc|!OobeTypes.IMEDsc}
14 */
15 var I18nMenuItem;
16
17 Polymer({
18 is: 'oobe-i18n-dropdown',
19
20 properties: {
21 /**
22 * List of languages/keyboards to display
23 * @type {!Array<I18nMenuItem>}
24 */
25 items: {
26 type: Array,
27 observer: 'onItemsChanged_',
28 },
29
30 /**
31 * Accessibility label.
32 * @type {!string}
michaelpg 2016/08/04 07:56:45 type not needed when it's the same as below
33 */
34 label: {
35 type: String,
36 },
37 },
38
39 /**
40 * This flag prevents recursive calls of observers and callbacks.
41 */
42 observersDisabled_: false,
43
44 /**
45 * @param {!{detail: !{item: { item: {!I18nMenuItem}}}}} event
46 * @private
47 */
48 onSelect_: function(event) {
49 if (this.observersDisabled_)
50 return;
51
52 var selectedModel = this.$.domRepeat.modelForElement(event.detail.item);
53 if (!selectedModel.item)
54 return;
55
56 selectedModel.set('item.selected', true);
57 this.fire('select-item', selectedModel.item);
58 },
59
60 onDeselect_: function(event) {
61 if (this.observersDisabled_)
62 return;
63
64 var deSelectedModel = this.$.domRepeat.modelForElement(event.detail.item);
65 if (!deSelectedModel.item)
66 return;
67
68 deSelectedModel.set('item.selected', false);
69 },
70
71 onItemsChanged_: function(items) {
72 if (this.observersDisabled_)
73 return;
74
75 if (!items)
76 return;
77
78 this.observersDisabled_ = true;
79
80 var index = items.findIndex(function(item) { return item.selected; });
81 if (index != -1) {
82 // This is needed for selectIndex() to pick up values from updated
83 // this.items (for example, translated into other language).
84 Polymer.dom.flush();
85
86 if (this.$.listboxDropdown.selected == index) {
87 // This is to force update real <input> element value even if selection
88 // index has not changed.
89 this.$.listboxDropdown.selectIndex(null);
90 }
91 this.$.listboxDropdown.selectIndex(index);
92 }
93
94 this.observersDisabled_ = false;
95 },
96 });
97 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698