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

Unified 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, 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/chromeos/login/oobe_i18n_dropdown.js
diff --git a/chrome/browser/resources/chromeos/login/oobe_i18n_dropdown.js b/chrome/browser/resources/chromeos/login/oobe_i18n_dropdown.js
new file mode 100644
index 0000000000000000000000000000000000000000..e03068877d3fa00d65b5537fdcafaab5f3b2e57b
--- /dev/null
+++ b/chrome/browser/resources/chromeos/login/oobe_i18n_dropdown.js
@@ -0,0 +1,115 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * Polymer class definition for 'oobe-i18n-dropdown'.
+ */
+Polymer({
+ is: 'oobe-i18n-dropdown',
+
+ properties: {
+ /**
+ * List of languages/keyboards to display
+ */
+ items: {
+ 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.
+ value: null,
+ observer: 'onItemsChanged_',
+ },
+ },
+
+ listeners: {
+ '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.
+ },
+
+ /**
+ * This flag prevents recursive calls of observers and callbacks.
+ */
+ observers_disabled_: false,
michaelpg 2016/07/29 06:26:50 camelCase: observersDisabled_
Alexander Alekseev 2016/07/30 00:52:50 Done.
+
+ /**
+ * It is not possible to modify "selected" attribute of paper-dropdown
+ * from inside regular observer. So this setting is delayed until
+ * list is rebuilt, and then set in onDomChanged_() callback.
+ */
+ 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.
+
+ 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.
+ if (this.observers_disabled_)
+ return;
+
+ var selected = event.detail.item.item;
+ if (!selected)
+ return;
+
+ this.observers_disabled_ = true;
+
+ // To mimic regular <select> element, we need to modify "selected" attribute
+ // of a dropdown item. But modifying element itself doesn't lead to
+ // 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.
+ var items = [];
+ var changed = false;
+ for (var i = 0; i < this.items.length; ++i) {
+ var item = this.items[i];
+ if (item.value) {
+ var isSelected = null;
+ // "selected" attribute only appears as "null" or "true".
+ if (item.value == selected.value)
+ isSelected = true;
+
+ if (item.selected != isSelected) {
+ item.selected = isSelected;
+ changed = true;
+ }
+ }
+ items.push(item);
+ }
+ if (changed)
+ this.items = items; // This triggers onItemsChanged_()
+
+ this.observers_disabled_ = false;
+ this.fire('select-item', selected);
+ },
+
+ onItemsChanged_: function(items) {
+ if (this.observers_disabled_)
+ return;
+
+ if (!items)
+ return;
+
+ this.observers_disabled_ = true;
+
+ // If no items have "selected" attribute, default to zero item.
+ // This is needed to mimic behavior of regular HTML <select> dropdown.
+ this.selectIndex_ = 0;
+
+ for (var i = 0; i < items.length; ++i) {
+ if (!items[i].selected)
+ continue;
+
+ // Delay update.
+ this.selectIndex_ = i;
+ break;
+ }
+
+ this.observers_disabled_ = false;
+ },
+
+ onDomChange_: function() {
+ this.observers_disabled_ = true;
+ if (this.selectIndex_ != null) {
+ var i = this.selectIndex_;
+ this.selectIndex_ = null;
+
+ // This forces dropdown to reset input element value.
+ // Otherwise, if list of elements is replaced (probably translated into
+ // another language), but selectin index is still tha same,
+ // displayed value will not be updated (i.e. it will use old value).
+ 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.
+ this.$.listboxDropdown.selectIndex(i); // This triggers onSelect_()
+ }
+ this.observers_disabled_ = false;
+ },
+});

Powered by Google App Engine
This is Rietveld 408576698