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

Unified Diff: chrome/browser/resources/login/user_pod_row.js

Issue 398543002: Add language and keyboard layout pickers to public session pods (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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/login/user_pod_row.js
diff --git a/chrome/browser/resources/login/user_pod_row.js b/chrome/browser/resources/login/user_pod_row.js
index 1e2ddefbe04666010de6a8067a78ebe3bef38555..9f18b730e355438093364621740e62f82112b694 100644
--- a/chrome/browser/resources/login/user_pod_row.js
+++ b/chrome/browser/resources/login/user_pod_row.js
@@ -50,6 +50,7 @@ cr.define('login', function() {
*/
var POD_WIDTH = 180;
var PUBLIC_EXPANDED_BASIC_WIDTH = 500;
+ var PUBLIC_EXPANDED_ADVANCED_WIDTH = 610;
var CROS_POD_HEIGHT = 213;
var DESKTOP_POD_HEIGHT = 226;
var POD_ROW_PADDING = 10;
@@ -996,16 +997,9 @@ cr.define('login', function() {
this.resetTabOrder();
this.classList.toggle('expanded', expanded);
if (expanded) {
- var isDesktopUserManager = Oobe.getInstance().displayType ==
- DISPLAY_TYPE.DESKTOP_USER_MANAGER;
- var rowPadding = isDesktopUserManager ? DESKTOP_ROW_PADDING :
- POD_ROW_PADDING;
this.usualLeft = this.left;
this.usualTop = this.top;
- if (this.left + PUBLIC_EXPANDED_BASIC_WIDTH >
- $('pod-row').offsetWidth - rowPadding)
- this.left = $('pod-row').offsetWidth - rowPadding -
- PUBLIC_EXPANDED_BASIC_WIDTH;
+ this.makeSpaceForExpandedPod_();
} else {
if (typeof(this.usualLeft) != 'undefined')
this.left = this.usualLeft;
@@ -1061,6 +1055,22 @@ cr.define('login', function() {
learnMore.addEventListener('click', this.handleLearnMoreEvent);
learnMore.addEventListener('keydown', this.handleLearnMoreEvent);
+ var languageSelect = this.querySelector('.language-select');
+ languageSelect.tabIndex = UserPodTabOrder.POD_INPUT;
+ languageSelect.addEventListener('change', function() {
+ chrome.send('getPublicSessionKeyboardLayouts', [
+ this.user.username,
+ languageSelect.options[languageSelect.selectedIndex].value]);
+ }.bind(this));
+
+ this.querySelector('.keyboard-select').tabIndex =
+ UserPodTabOrder.POD_INPUT;
+
+ var languageAndInput = this.querySelector('.language-and-input');
+ languageAndInput.tabIndex = UserPodTabOrder.POD_INPUT;
+ languageAndInput.addEventListener('click',
+ this.transitionToAdvanced_.bind(this));
+
this.enterButtonElement.addEventListener('click', (function(e) {
this.enterButtonElement.disabled = true;
chrome.send('launchPublicAccount', [this.user.username]);
@@ -1068,6 +1078,35 @@ cr.define('login', function() {
},
/** @override **/
+ initialize: function() {
+ UserPod.prototype.initialize.call(this);
+
+ var id = this.user.username + '-language';
+ this.querySelector('.language-select-label').htmlFor = id;
+ var languageSelect = this.querySelector('.language-select');
+ languageSelect.setAttribute('id', id);
+ var list = this.user.initialLocales;
+ languageSelect.innerHTML = '';
+ var group = languageSelect;
+ for (var i = 0; i < list.length; ++i) {
+ var item = list[i];
+ if (item.optionGroupName) {
+ group = document.createElement('optgroup');
+ group.label = item.optionGroupName;
+ languageSelect.appendChild(group);
+ } else {
+ group.appendChild(
+ new Option(item.title, item.value, item.selected, item.selected));
+ }
+ }
+
+ id = this.user.username + '-keyboard';
+ this.querySelector('.keyboard-select-label').htmlFor = id;
+ this.querySelector('.keyboard-select').setAttribute('id', id);
+ this.populateKeyboardSelect_(this.user.initialKeyboardLayouts);
+ },
+
+ /** @override **/
update: function() {
UserPod.prototype.update.call(this);
this.querySelector('.expanded-pane-name').textContent =
@@ -1095,8 +1134,10 @@ cr.define('login', function() {
/** @override */
activate: function(e) {
- this.expanded = true;
- this.focusInput();
+ if (!this.expanded) {
+ this.expanded = true;
+ this.focusInput();
+ }
return true;
},
@@ -1138,6 +1179,52 @@ cr.define('login', function() {
chrome.send('launchHelpApp', [HELP_TOPIC_PUBLIC_SESSION]);
stopEventPropagation(event);
},
+
+ makeSpaceForExpandedPod_: function() {
+ var width = this.classList.contains('advanced') ?
+ PUBLIC_EXPANDED_ADVANCED_WIDTH : PUBLIC_EXPANDED_BASIC_WIDTH;
+ var isDesktopUserManager = Oobe.getInstance().displayType ==
+ DISPLAY_TYPE.DESKTOP_USER_MANAGER;
+ var rowPadding = isDesktopUserManager ? DESKTOP_ROW_PADDING :
+ POD_ROW_PADDING;
+ if (this.left + width > $('pod-row').offsetWidth - rowPadding)
+ this.left = $('pod-row').offsetWidth - rowPadding - width;
dzhioev (left Google) 2014/07/21 14:57:48 I can't find where you change 'left' back, when po
dzhioev (left Google) 2014/07/21 14:57:48 If we have a single public pod on screen, it is ex
bartfab (slow) 2014/07/21 16:50:04 I did not change the logic that makes space for ex
bartfab (slow) 2014/07/21 16:50:04 I did not change the logic that preserves the pod'
+ },
+
+ /**
+ * Transition the expanded pod from the basic to the advanced view.
+ */
+ transitionToAdvanced_: function() {
+ var pod = this;
+ var languageAndInputSection =
+ this.querySelector('.language-and-input-section');
+ this.classList.add('transitioning-to-advanced');
+ setTimeout(function() {
+ pod.classList.add('advanced');
+ pod.makeSpaceForExpandedPod_();
+ languageAndInputSection.addEventListener('webkitTransitionEnd',
dzhioev (left Google) 2014/07/21 14:57:48 Probably you want to add 'ensureTransitionEndEvent
bartfab (slow) 2014/07/21 16:50:04 Ugh. Is that a blink bug or by design? Either way
Nikita (slow) 2014/07/21 17:08:50 This is by design. https://developer.mozilla.org/e
+ function observer() {
+ languageAndInputSection.removeEventListener('webkitTransitionEnd',
+ observer);
+ pod.classList.remove('transitioning-to-advanced');
+ pod.querySelector('.language-select').focus();
+ });
+ }, 0);
+ },
+
+ /**
+ * Populates the keyboard layout "select" element with a list of layouts.
+ * @param {!Object} list List of available keyboard layouts
+ */
+ populateKeyboardSelect_: function(list) {
+ var keyboardSelect = this.querySelector('.keyboard-select');
+ keyboardSelect.innerHTML = '';
+ for (var i = 0; i < list.length; ++i) {
+ var item = list[i];
+ keyboardSelect.appendChild(
+ new Option(item.title, item.value, item.selected, item.selected));
+ }
+ }
};
/**
@@ -1733,6 +1820,17 @@ cr.define('login', function() {
},
/**
+ * Updates the list of available keyboard layouts for a public session pod.
+ * @param {string} userID The user ID of the public session
+ * @param {!Object} list List of available keyboard layouts
+ */
+ setPublicSessionKeyboardLayouts: function(userID, list) {
+ var pod = this.getPodWithUsername_(userID);
+ if (pod != null)
+ pod.populateKeyboardSelect_(list);
+ },
+
+ /**
* Called when window was resized.
*/
onWindowResize: function() {

Powered by Google App Engine
This is Rietveld 408576698