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

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: Base the list of keyboard layouts offered on the resolved locale, not the selected locale. 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..940feef29ed31cc9f0bc244e1cc1096786e89884 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,21 +997,10 @@ 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;
- } else {
- if (typeof(this.usualLeft) != 'undefined')
- this.left = this.usualLeft;
- if (typeof(this.usualTop) != 'undefined')
- this.top = this.usualTop;
+ this.makeSpaceForExpandedPod_();
+ } else if (typeof(this.usualLeft) != 'undefined') {
+ this.left = this.usualLeft;
}
var self = this;
@@ -1025,6 +1015,8 @@ cr.define('login', function() {
if (document.activeElement)
document.activeElement.dispatchEvent(new Event('focus'));
});
+ // Guard timer set to animation duration + 20ms.
+ ensureTransitionEndEvent(this, 200);
},
/** @override */
@@ -1061,6 +1053,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 +1076,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 +1132,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 +1177,54 @@ 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;
+ },
+
+ /**
+ * 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',
+ function observer() {
+ languageAndInputSection.removeEventListener('webkitTransitionEnd',
+ observer);
+ pod.classList.remove('transitioning-to-advanced');
+ pod.querySelector('.language-select').focus();
+ });
+ // Guard timer set to animation duration + 20ms.
+ ensureTransitionEndEvent(languageAndInputSection, 380);
+ }, 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() {
@@ -2087,11 +2185,10 @@ cr.define('login', function() {
pod.isActionBoxMenuHovered = true;
// Return focus back to single pod.
- if (this.alwaysFocusSinglePod) {
+ if (this.alwaysFocusSinglePod && !pod) {
this.focusPod(this.focusedPod_, true /* force */);
this.focusedPod_.userTypeBubbleElement.classList.remove('bubble-shown');
- if (!pod)
- this.focusedPod_.isActionBoxMenuHovered = false;
+ this.focusedPod_.isActionBoxMenuHovered = false;
}
},
« no previous file with comments | « chrome/browser/resources/login/user_pod_row.css ('k') | chrome/browser/resources/login/user_pod_template.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698