| 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;
|
| }
|
| },
|
|
|
|
|