Chromium Code Reviews| Index: chrome/browser/resources/extensions/extensions.js |
| diff --git a/chrome/browser/resources/extensions/extensions.js b/chrome/browser/resources/extensions/extensions.js |
| index c7f9bb5d37f7fc05f773247edf34ac48c81b737a..9c3bc1d9322e76ad1a05106d87fe7c22a3398f45 100644 |
| --- a/chrome/browser/resources/extensions/extensions.js |
| +++ b/chrome/browser/resources/extensions/extensions.js |
| @@ -137,14 +137,19 @@ cr.define('extensions', function() { |
| var extensionLoader = extensions.ExtensionLoader.getInstance(); |
| - $('toggle-dev-on').addEventListener('change', |
| - this.handleToggleDevMode_.bind(this)); |
| - $('dev-controls').addEventListener('webkitTransitionEnd', |
| - this.handleDevControlsTransitionEnd_.bind(this)); |
| + $('toggle-dev-on').addEventListener('change', function(e) { |
| + this.updateDevControlsVisibility_(true); |
| + chrome.send('extensionSettingsToggleDeveloperMode', |
| + [$('toggle-dev-on').checked]); |
|
Dan Beam
2015/01/30 19:41:31
sending a true/false arg makes it harder for the J
|
| + }.bind(this)); |
| + |
| + window.addEventListener('resize', function() { |
|
Dan Beam
2015/01/30 19:41:31
this happens when zoomed
|
| + this.updateDevControlsVisibility_(false); |
| + }.bind(this)); |
| // Set up the three dev mode buttons (load unpacked, pack and update). |
| $('load-unpacked').addEventListener('click', function(e) { |
| - extensionLoader.loadUnpacked(); |
| + extensionLoader.loadUnpacked(); |
| }); |
| $('pack-extension').addEventListener('click', |
| this.handlePackExtension_.bind(this)); |
| @@ -155,8 +160,11 @@ cr.define('extensions', function() { |
| $('apps-developer-tools-promo').querySelector('.close-button'). |
| addEventListener('click', function(e) { |
| this.displayPromo_ = false; |
| - this.updatePromoVisibility_(); |
| + this.updateDevControlsVisibility_(true); |
| chrome.send('extensionSettingsDismissADTPromo'); |
| + |
| + if (cr.ui.FocusOutlineManager.forDocument(document).visible) |
| + $('update-extensions-now').focus(); |
|
Dan Beam
2015/01/30 19:41:30
this moves the focus if the keyboard was used to h
|
| }.bind(this)); |
| if (!loadTimeData.getBoolean('offStoreInstallEnabled')) { |
| @@ -208,26 +216,6 @@ cr.define('extensions', function() { |
| }, |
| /** |
| - * Updates the Chrome Apps and Extensions Developer Tools promotion's |
| - * visibility. |
| - * @private |
| - */ |
| - updatePromoVisibility_: function() { |
|
Dan Beam
2015/01/30 19:41:31
combined updatePromoVisibility_ and handleToggleDe
|
| - var extensionSettings = $('extension-settings'); |
| - var visible = extensionSettings.classList.contains('dev-mode') && |
| - this.displayPromo_; |
| - |
| - var adtPromo = $('apps-developer-tools-promo'); |
| - var controls = adtPromo.querySelectorAll('a, button'); |
| - Array.prototype.forEach.call(controls, function(control) { |
| - control[visible ? 'removeAttribute' : 'setAttribute']('tabindex', '-1'); |
| - }); |
| - |
| - adtPromo.setAttribute('aria-hidden', !visible); |
| - extensionSettings.classList.toggle('adt-promo', visible); |
| - }, |
| - |
| - /** |
| * Handles the Pack Extension button. |
| * @param {Event} e Change event. |
| * @private |
| @@ -267,34 +255,37 @@ cr.define('extensions', function() { |
| }, |
| /** |
| - * Handles the Toggle Dev Mode button. |
| - * @param {Event} e Change event. |
| + * Updates the visibility of the developer controls based on whether the |
| + * [x] Developer mode checkbox is checked. Also called if a user dismisses |
| + * the apps developer tools promo. |
| + * @param {boolean} animated Whether to animate any updates. |
| * @private |
| */ |
| - handleToggleDevMode_: function(e) { |
| - if ($('toggle-dev-on').checked) { |
| - $('dev-controls').hidden = false; |
| - window.setTimeout(function() { |
| - $('extension-settings').classList.add('dev-mode'); |
| - }, 0); |
| - } else { |
| - $('extension-settings').classList.remove('dev-mode'); |
| - } |
| - window.setTimeout(this.updatePromoVisibility_.bind(this), 0); |
| + updateDevControlsVisibility_: function(animated) { |
| + var showDevControls = $('toggle-dev-on').checked; |
| + $('extension-settings').classList.toggle('dev-mode', showDevControls); |
| - chrome.send('extensionSettingsToggleDeveloperMode'); |
| - }, |
| + var devControls = $('dev-controls'); |
| + devControls.classList.toggle('animated', animated); |
| - /** |
| - * Called when a transition has ended for #dev-controls. |
| - * @param {Event} e webkitTransitionEnd event. |
| - * @private |
| - */ |
| - handleDevControlsTransitionEnd_: function(e) { |
| - if (e.propertyName == 'height' && |
| - !$('extension-settings').classList.contains('dev-mode')) { |
| - $('dev-controls').hidden = true; |
| - } |
| + var buttons = devControls.querySelector('.button-container'); |
| + var adtPromo = $('apps-developer-tools-promo'); |
| + [ |
| + {root: buttons, focusable: showDevControls}, |
| + {root: adtPromo, focusable: showDevControls && this.displayPromo_}, |
| + ].forEach(function(entry) { |
| + var controls = entry.root.querySelectorAll('a, button'); |
| + Array.prototype.forEach.call(controls, function(control) { |
| + control.tabIndex = entry.focusable ? 0 : -1; |
| + }); |
| + entry.root.setAttribute('aria-hidden', !entry.focusable); |
| + }); |
| + |
| + window.requestAnimationFrame(function() { |
| + devControls.style.height = !showDevControls ? '' : |
| + (this.displayPromo_ ? adtPromo.offsetHeight : 0) + |
| + buttons.offsetHeight + 'px'; |
| + }.bind(this)); |
| }, |
| }; |
| @@ -329,36 +320,19 @@ cr.define('extensions', function() { |
| }); |
| } |
| - var pageDiv = $('extension-settings'); |
| - var marginTop = 0; |
| - if (extensionsData.profileIsSupervised) { |
| - pageDiv.classList.add('profile-is-supervised'); |
| - } else { |
| - pageDiv.classList.remove('profile-is-supervised'); |
| - } |
| - if (extensionsData.profileIsSupervised) { |
| - pageDiv.classList.add('showing-banner'); |
| - $('toggle-dev-on').disabled = true; |
| - marginTop += 45; |
| - } else { |
| - pageDiv.classList.remove('showing-banner'); |
| - $('toggle-dev-on').disabled = false; |
| - } |
| + var supervised = extensionsData.profileIsSupervised; |
| - pageDiv.style.marginTop = marginTop + 'px'; |
| + var pageDiv = $('extension-settings'); |
| + pageDiv.classList.toggle('profile-is-supervised', supervised); |
| + pageDiv.classList.toggle('showing-banner', supervised); |
| - if (extensionsData.developerMode) { |
| - pageDiv.classList.add('dev-mode'); |
| - $('toggle-dev-on').checked = true; |
| - $('dev-controls').hidden = false; |
| - } else { |
| - pageDiv.classList.remove('dev-mode'); |
| - $('toggle-dev-on').checked = false; |
| - } |
| + var devControlsCheckbox = $('toggle-dev-on'); |
| + devControlsCheckbox.checked = extensionsData.developerMode; |
| + devControlsCheckbox.disabled = supervised; |
| - ExtensionSettings.getInstance().displayPromo_ = |
| - extensionsData.promoteAppsDevTools; |
| - ExtensionSettings.getInstance().updatePromoVisibility_(); |
| + var instance = ExtensionSettings.getInstance(); |
| + instance.displayPromo_ = extensionsData.promoteAppsDevTools; |
| + instance.updateDevControlsVisibility_(false); |
|
Dan Beam
2015/01/30 19:41:30
most of this is purely simplifications or moving f
|
| $('load-unpacked').disabled = extensionsData.loadUnpackedDisabled; |