| OLD | NEW |
| 1 (function() { | 1 (function() { |
| 2 'use strict'; | 2 'use strict'; |
| 3 | 3 |
| 4 // this would be the only `paper-drawer-panel` in | 4 // this would be the only `paper-drawer-panel` in |
| 5 // the whole app that can be in `dragging` state | 5 // the whole app that can be in `dragging` state |
| 6 var sharedPanel = null; | 6 var sharedPanel = null; |
| 7 | 7 |
| 8 function classNames(obj) { | 8 function classNames(obj) { |
| 9 var classes = []; | 9 var classes = []; |
| 10 for (var key in obj) { | 10 for (var key in obj) { |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 /** | 182 /** |
| 183 * The attribute on elements that should toggle the drawer on tap, als
o elements will | 183 * The attribute on elements that should toggle the drawer on tap, als
o elements will |
| 184 * automatically be hidden in wide layout. | 184 * automatically be hidden in wide layout. |
| 185 */ | 185 */ |
| 186 drawerToggleAttribute: { | 186 drawerToggleAttribute: { |
| 187 type: String, | 187 type: String, |
| 188 value: 'paper-drawer-toggle' | 188 value: 'paper-drawer-toggle' |
| 189 }, | 189 }, |
| 190 | 190 |
| 191 /** | 191 /** |
| 192 * The CSS selector for the element that should receive focus when the
drawer is open. |
| 193 * By default, when the drawer opens, it focuses the first tabbable el
ement. That is, |
| 194 * the first element that can receive focus. |
| 195 */ |
| 196 drawerFocusSelector: { |
| 197 type: String, |
| 198 value: |
| 199 'a[href]:not([tabindex="-1"]),'+ |
| 200 'area[href]:not([tabindex="-1"]),'+ |
| 201 'input:not([disabled]):not([tabindex="-1"]),'+ |
| 202 'select:not([disabled]):not([tabindex="-1"]),'+ |
| 203 'textarea:not([disabled]):not([tabindex="-1"]),'+ |
| 204 'button:not([disabled]):not([tabindex="-1"]),'+ |
| 205 'iframe:not([tabindex="-1"]),'+ |
| 206 '[tabindex]:not([tabindex="-1"]),'+ |
| 207 '[contentEditable=true]:not([tabindex="-1"])' |
| 208 }, |
| 209 |
| 210 /** |
| 192 * Whether the transition is enabled. | 211 * Whether the transition is enabled. |
| 193 */ | 212 */ |
| 194 _transition: { | 213 _transition: { |
| 195 type: Boolean, | 214 type: Boolean, |
| 196 value: false | 215 value: false |
| 197 }, | 216 }, |
| 198 | 217 |
| 199 }, | 218 }, |
| 200 | 219 |
| 201 listeners: { | 220 listeners: { |
| 202 tap: '_onTap', | 221 tap: '_onTap', |
| 203 track: '_onTrack', | 222 track: '_onTrack', |
| 204 down: '_downHandler', | 223 down: '_downHandler', |
| 205 up: '_upHandler' | 224 up: '_upHandler', |
| 225 transitionend: '_onTransitionEnd' |
| 206 }, | 226 }, |
| 207 | 227 |
| 208 observers: [ | 228 observers: [ |
| 209 '_forceNarrowChanged(forceNarrow, defaultSelected)' | 229 '_forceNarrowChanged(forceNarrow, defaultSelected)', |
| 230 '_toggleFocusListener(selected)' |
| 210 ], | 231 ], |
| 211 | 232 |
| 233 ready: function() { |
| 234 // Avoid transition at the beginning e.g. page loads and enable |
| 235 // transitions only after the element is rendered and ready. |
| 236 this._transition = true; |
| 237 this._boundFocusListener = this._didFocus.bind(this); |
| 238 }, |
| 239 |
| 212 /** | 240 /** |
| 213 * Toggles the panel open and closed. | 241 * Toggles the panel open and closed. |
| 214 * | 242 * |
| 215 * @method togglePanel | 243 * @method togglePanel |
| 216 */ | 244 */ |
| 217 togglePanel: function() { | 245 togglePanel: function() { |
| 218 if (this._isMainSelected()) { | 246 if (this._isMainSelected()) { |
| 219 this.openDrawer(); | 247 this.openDrawer(); |
| 220 } else { | 248 } else { |
| 221 this.closeDrawer(); | 249 this.closeDrawer(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 233 | 261 |
| 234 /** | 262 /** |
| 235 * Closes the drawer. | 263 * Closes the drawer. |
| 236 * | 264 * |
| 237 * @method closeDrawer | 265 * @method closeDrawer |
| 238 */ | 266 */ |
| 239 closeDrawer: function() { | 267 closeDrawer: function() { |
| 240 this.selected = 'main'; | 268 this.selected = 'main'; |
| 241 }, | 269 }, |
| 242 | 270 |
| 243 ready: function() { | 271 _onTransitionEnd: function (e) { |
| 244 // Avoid transition at the beginning e.g. page loads and enable | 272 var target = Polymer.dom(e).localTarget; |
| 245 // transitions only after the element is rendered and ready. | 273 if (target !== this) { |
| 246 this._transition = true; | 274 // ignore events coming from the light dom |
| 247 }, | 275 return; |
| 248 | 276 } |
| 249 _onMainTransitionEnd: function (e) { | 277 if (e.propertyName === 'left' || e.propertyName === 'right') { |
| 250 if (e.currentTarget === this.$.main && (e.propertyName === 'left' || e
.propertyName === 'right')) { | |
| 251 this.notifyResize(); | 278 this.notifyResize(); |
| 252 } | 279 } |
| 280 if (e.propertyName === 'transform' && this.selected === 'drawer') { |
| 281 var focusedChild = this._getAutoFocusedNode(); |
| 282 focusedChild && focusedChild.focus(); |
| 283 } |
| 253 }, | 284 }, |
| 254 | 285 |
| 255 _computeIronSelectorClass: function(narrow, transition, dragging, rightD
rawer, peeking) { | 286 _computeIronSelectorClass: function(narrow, transition, dragging, rightD
rawer, peeking) { |
| 256 return classNames({ | 287 return classNames({ |
| 257 dragging: dragging, | 288 dragging: dragging, |
| 258 'narrow-layout': narrow, | 289 'narrow-layout': narrow, |
| 259 'right-drawer': rightDrawer, | 290 'right-drawer': rightDrawer, |
| 260 'left-drawer': !rightDrawer, | 291 'left-drawer': !rightDrawer, |
| 261 transition: transition, | 292 transition: transition, |
| 262 peeking: peeking | 293 peeking: peeking |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 case 'start': | 326 case 'start': |
| 296 this._trackStart(event); | 327 this._trackStart(event); |
| 297 break; | 328 break; |
| 298 case 'track': | 329 case 'track': |
| 299 this._trackX(event); | 330 this._trackX(event); |
| 300 break; | 331 break; |
| 301 case 'end': | 332 case 'end': |
| 302 this._trackEnd(event); | 333 this._trackEnd(event); |
| 303 break; | 334 break; |
| 304 } | 335 } |
| 305 | |
| 306 }, | 336 }, |
| 307 | 337 |
| 308 _responsiveChange: function(narrow) { | 338 _responsiveChange: function(narrow) { |
| 309 this._setNarrow(narrow); | 339 this._setNarrow(narrow); |
| 310 | 340 |
| 311 if (this.narrow) { | 341 this.selected = this.narrow ? this.defaultSelected : null; |
| 312 this.selected = this.defaultSelected; | |
| 313 } | |
| 314 | 342 |
| 315 this.setScrollDirection(this._swipeAllowed() ? 'y' : 'all'); | 343 this.setScrollDirection(this._swipeAllowed() ? 'y' : 'all'); |
| 316 this.fire('paper-responsive-change', {narrow: this.narrow}); | 344 this.fire('paper-responsive-change', {narrow: this.narrow}); |
| 317 }, | 345 }, |
| 318 | 346 |
| 319 _onQueryMatchesChanged: function(event) { | 347 _onQueryMatchesChanged: function(event) { |
| 320 this._responsiveChange(event.detail.value); | 348 this._responsiveChange(event.detail.value); |
| 321 }, | 349 }, |
| 322 | 350 |
| 323 _forceNarrowChanged: function() { | 351 _forceNarrowChanged: function() { |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 } else { | 467 } else { |
| 440 this[xDirection ? 'openDrawer' : 'closeDrawer'](); | 468 this[xDirection ? 'openDrawer' : 'closeDrawer'](); |
| 441 } | 469 } |
| 442 } | 470 } |
| 443 }, | 471 }, |
| 444 | 472 |
| 445 _transformForTranslateX: function(translateX) { | 473 _transformForTranslateX: function(translateX) { |
| 446 if (translateX === null) { | 474 if (translateX === null) { |
| 447 return ''; | 475 return ''; |
| 448 } | 476 } |
| 449 | |
| 450 return this.hasWillChange ? 'translateX(' + translateX + 'px)' : | 477 return this.hasWillChange ? 'translateX(' + translateX + 'px)' : |
| 451 'translate3d(' + translateX + 'px, 0, 0)'; | 478 'translate3d(' + translateX + 'px, 0, 0)'; |
| 452 }, | 479 }, |
| 453 | 480 |
| 454 _moveDrawer: function(translateX) { | 481 _moveDrawer: function(translateX) { |
| 455 this.transform(this._transformForTranslateX(translateX), this.$.drawer
); | 482 this.transform(this._transformForTranslateX(translateX), this.$.drawer
); |
| 483 }, |
| 484 |
| 485 _getDrawerContent: function() { |
| 486 return Polymer.dom(this.$.drawerContent).getDistributedNodes()[0]; |
| 487 }, |
| 488 |
| 489 _getAutoFocusedNode: function() { |
| 490 var drawerContent = this._getDrawerContent(); |
| 491 return Polymer.dom(drawerContent).querySelector(this.drawerFocusSelect
or) || drawerContent; |
| 492 }, |
| 493 |
| 494 _toggleFocusListener: function(selected) { |
| 495 if (selected === 'drawer') { |
| 496 document.addEventListener('focus', this._boundFocusListener, true); |
| 497 } else { |
| 498 document.removeEventListener('focus', this._boundFocusListener, true
); |
| 499 } |
| 500 }, |
| 501 |
| 502 _didFocus: function(event) { |
| 503 var path = Polymer.dom(event).path; |
| 504 var focusedChild = path[0]; |
| 505 var drawerContent = this._getDrawerContent(); |
| 506 var focusedChildCameFromDrawer = false; |
| 507 var autoFocusedNode = this._getAutoFocusedNode(); |
| 508 |
| 509 while (!focusedChildCameFromDrawer && path[0] && path[0].hasAttribute)
{ |
| 510 focusedChildCameFromDrawer = path.shift() === drawerContent; |
| 511 } |
| 512 if (!focusedChildCameFromDrawer && autoFocusedNode) { |
| 513 autoFocusedNode.focus(); |
| 514 } |
| 515 }, |
| 516 |
| 517 _isDrawerClosed: function(narrow, selected) { |
| 518 return !narrow || selected !== 'drawer'; |
| 456 } | 519 } |
| 520 }); |
| 457 | 521 |
| 458 }); | |
| 459 }()); | 522 }()); |
| OLD | NEW |