| Index: third_party/polymer/v1_0/components-chromium/paper-drawer-panel/paper-drawer-panel-extracted.js
|
| diff --git a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/paper-drawer-panel-extracted.js b/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/paper-drawer-panel-extracted.js
|
| index 861e7f75d414a30575dae0a0599e8dcd77ca9c80..910830b5ddc39d31cd6512189f76e29eb21e4695 100644
|
| --- a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/paper-drawer-panel-extracted.js
|
| +++ b/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/paper-drawer-panel-extracted.js
|
| @@ -189,6 +189,25 @@
|
| },
|
|
|
| /**
|
| + * The CSS selector for the element that should receive focus when the drawer is open.
|
| + * By default, when the drawer opens, it focuses the first tabbable element. That is,
|
| + * the first element that can receive focus.
|
| + */
|
| + drawerFocusSelector: {
|
| + type: String,
|
| + value:
|
| + 'a[href]:not([tabindex="-1"]),'+
|
| + 'area[href]:not([tabindex="-1"]),'+
|
| + 'input:not([disabled]):not([tabindex="-1"]),'+
|
| + 'select:not([disabled]):not([tabindex="-1"]),'+
|
| + 'textarea:not([disabled]):not([tabindex="-1"]),'+
|
| + 'button:not([disabled]):not([tabindex="-1"]),'+
|
| + 'iframe:not([tabindex="-1"]),'+
|
| + '[tabindex]:not([tabindex="-1"]),'+
|
| + '[contentEditable=true]:not([tabindex="-1"])'
|
| + },
|
| +
|
| + /**
|
| * Whether the transition is enabled.
|
| */
|
| _transition: {
|
| @@ -202,13 +221,22 @@
|
| tap: '_onTap',
|
| track: '_onTrack',
|
| down: '_downHandler',
|
| - up: '_upHandler'
|
| + up: '_upHandler',
|
| + transitionend: '_onTransitionEnd'
|
| },
|
|
|
| observers: [
|
| - '_forceNarrowChanged(forceNarrow, defaultSelected)'
|
| + '_forceNarrowChanged(forceNarrow, defaultSelected)',
|
| + '_toggleFocusListener(selected)'
|
| ],
|
|
|
| + ready: function() {
|
| + // Avoid transition at the beginning e.g. page loads and enable
|
| + // transitions only after the element is rendered and ready.
|
| + this._transition = true;
|
| + this._boundFocusListener = this._didFocus.bind(this);
|
| + },
|
| +
|
| /**
|
| * Toggles the panel open and closed.
|
| *
|
| @@ -240,16 +268,19 @@
|
| this.selected = 'main';
|
| },
|
|
|
| - ready: function() {
|
| - // Avoid transition at the beginning e.g. page loads and enable
|
| - // transitions only after the element is rendered and ready.
|
| - this._transition = true;
|
| - },
|
| -
|
| - _onMainTransitionEnd: function (e) {
|
| - if (e.currentTarget === this.$.main && (e.propertyName === 'left' || e.propertyName === 'right')) {
|
| + _onTransitionEnd: function (e) {
|
| + var target = Polymer.dom(e).localTarget;
|
| + if (target !== this) {
|
| + // ignore events coming from the light dom
|
| + return;
|
| + }
|
| + if (e.propertyName === 'left' || e.propertyName === 'right') {
|
| this.notifyResize();
|
| }
|
| + if (e.propertyName === 'transform' && this.selected === 'drawer') {
|
| + var focusedChild = this._getAutoFocusedNode();
|
| + focusedChild && focusedChild.focus();
|
| + }
|
| },
|
|
|
| _computeIronSelectorClass: function(narrow, transition, dragging, rightDrawer, peeking) {
|
| @@ -302,15 +333,12 @@
|
| this._trackEnd(event);
|
| break;
|
| }
|
| -
|
| },
|
|
|
| _responsiveChange: function(narrow) {
|
| this._setNarrow(narrow);
|
|
|
| - if (this.narrow) {
|
| - this.selected = this.defaultSelected;
|
| - }
|
| + this.selected = this.narrow ? this.defaultSelected : null;
|
|
|
| this.setScrollDirection(this._swipeAllowed() ? 'y' : 'all');
|
| this.fire('paper-responsive-change', {narrow: this.narrow});
|
| @@ -446,14 +474,49 @@
|
| if (translateX === null) {
|
| return '';
|
| }
|
| -
|
| return this.hasWillChange ? 'translateX(' + translateX + 'px)' :
|
| 'translate3d(' + translateX + 'px, 0, 0)';
|
| },
|
|
|
| _moveDrawer: function(translateX) {
|
| this.transform(this._transformForTranslateX(translateX), this.$.drawer);
|
| - }
|
| + },
|
| +
|
| + _getDrawerContent: function() {
|
| + return Polymer.dom(this.$.drawerContent).getDistributedNodes()[0];
|
| + },
|
| +
|
| + _getAutoFocusedNode: function() {
|
| + var drawerContent = this._getDrawerContent();
|
| + return Polymer.dom(drawerContent).querySelector(this.drawerFocusSelector) || drawerContent;
|
| + },
|
| +
|
| + _toggleFocusListener: function(selected) {
|
| + if (selected === 'drawer') {
|
| + document.addEventListener('focus', this._boundFocusListener, true);
|
| + } else {
|
| + document.removeEventListener('focus', this._boundFocusListener, true);
|
| + }
|
| + },
|
| +
|
| + _didFocus: function(event) {
|
| + var path = Polymer.dom(event).path;
|
| + var focusedChild = path[0];
|
| + var drawerContent = this._getDrawerContent();
|
| + var focusedChildCameFromDrawer = false;
|
| + var autoFocusedNode = this._getAutoFocusedNode();
|
| +
|
| + while (!focusedChildCameFromDrawer && path[0] && path[0].hasAttribute) {
|
| + focusedChildCameFromDrawer = path.shift() === drawerContent;
|
| + }
|
| + if (!focusedChildCameFromDrawer && autoFocusedNode) {
|
| + autoFocusedNode.focus();
|
| + }
|
| + },
|
|
|
| + _isDrawerClosed: function(narrow, selected) {
|
| + return !narrow || selected !== 'drawer';
|
| + }
|
| });
|
| +
|
| }());
|
|
|