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() { |