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

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: Use translatable string for OK button text 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 Polymer({
9 is: 'oobe-i18n-dropdown',
10
11 properties: {
12 /**
13 * List of languages/keyboards to display
14 */
15 items: {
16 type: Array,
stevenjb 2016/07/29 16:11:52 Array of what? Ideally this should be typed in the
Alexander Alekseev 2016/08/01 22:21:42 Done.
17 value: null,
18 observer: 'onItemsChanged_',
19 },
20 },
21
22 listeners: {
23 'iron-select': 'onSelect_',
michaelpg 2016/07/29 06:26:50 prefer declarative listeners: <paper-listbox on-ir
Alexander Alekseev 2016/07/30 00:52:50 Done.
24 },
25
26 /**
27 * This flag prevents recursive calls of observers and callbacks.
28 */
29 observers_disabled_: false,
michaelpg 2016/07/29 06:26:50 camelCase: observersDisabled_
Alexander Alekseev 2016/07/30 00:52:50 Done.
30
31 /**
32 * It is not possible to modify "selected" attribute of paper-dropdown
33 * from inside regular observer. So this setting is delayed until
34 * list is rebuilt, and then set in onDomChanged_() callback.
35 */
36 selectIndex_: null,
stevenjb 2016/07/29 16:11:52 The use of observersDisabled_ and selectIndex_ see
Alexander Alekseev 2016/07/30 00:52:51 Done.
37
38 onSelect_: function(event) {
stevenjb 2016/07/29 16:11:52 Document. e.g.: /** * @param {!{detail: !{item: {
Alexander Alekseev 2016/08/01 22:21:42 Done.
39 if (this.observers_disabled_)
40 return;
41
42 var selected = event.detail.item.item;
43 if (!selected)
44 return;
45
46 this.observers_disabled_ = true;
47
48 // To mimic regular <select> element, we need to modify "selected" attribute
49 // of a dropdown item. But modifying element itself doesn't lead to
50 // DOM update, so we need to replace items completely.
michaelpg 2016/07/29 06:26:50 have you tried using this.set? See example in http
Alexander Alekseev 2016/07/30 00:52:50 Done.
51 var items = [];
52 var changed = false;
53 for (var i = 0; i < this.items.length; ++i) {
54 var item = this.items[i];
55 if (item.value) {
56 var isSelected = null;
57 // "selected" attribute only appears as "null" or "true".
58 if (item.value == selected.value)
59 isSelected = true;
60
61 if (item.selected != isSelected) {
62 item.selected = isSelected;
63 changed = true;
64 }
65 }
66 items.push(item);
67 }
68 if (changed)
69 this.items = items; // This triggers onItemsChanged_()
70
71 this.observers_disabled_ = false;
72 this.fire('select-item', selected);
73 },
74
75 onItemsChanged_: function(items) {
76 if (this.observers_disabled_)
77 return;
78
79 if (!items)
80 return;
81
82 this.observers_disabled_ = true;
83
84 // If no items have "selected" attribute, default to zero item.
85 // This is needed to mimic behavior of regular HTML <select> dropdown.
86 this.selectIndex_ = 0;
87
88 for (var i = 0; i < items.length; ++i) {
89 if (!items[i].selected)
90 continue;
91
92 // Delay update.
93 this.selectIndex_ = i;
94 break;
95 }
96
97 this.observers_disabled_ = false;
98 },
99
100 onDomChange_: function() {
101 this.observers_disabled_ = true;
102 if (this.selectIndex_ != null) {
103 var i = this.selectIndex_;
104 this.selectIndex_ = null;
105
106 // This forces dropdown to reset input element value.
107 // Otherwise, if list of elements is replaced (probably translated into
108 // another language), but selectin index is still tha same,
109 // displayed value will not be updated (i.e. it will use old value).
110 this.$.listboxDropdown.selectIndex(null);
michaelpg 2016/07/29 06:26:50 you should be able to this in onItemsChanged_, and
Alexander Alekseev 2016/07/30 00:52:50 Done.
111 this.$.listboxDropdown.selectIndex(i); // This triggers onSelect_()
112 }
113 this.observers_disabled_ = false;
114 },
115 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698