()
| 377 | // is that needed? What problem was that solving? |
| 378 | // to make sure this runs in the next animation tick? |
| 379 | open() { |
| 380 | let dropHeight, above, below, direction, dkTop, dkBottom; |
| 381 | let dk = this.data.elem; |
| 382 | let dkOptsList = dk.lastChild; |
| 383 | // Using MDNs suggestion for crossbrowser scrollY: |
| 384 | // https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY |
| 385 | let supportPageOffset = window.pageXOffset !== undefined; |
| 386 | let isCSS1Compat = ((document.compatMode || "") === "CSS1Compat"); |
| 387 | let scrollY = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop; |
| 388 | |
| 389 | dkTop = _.offset( dk ).top - scrollY; |
| 390 | dkBottom = window.innerHeight - ( dkTop + dk.offsetHeight ); |
| 391 | |
| 392 | if ( this.isOpen || this.multiple ) { return false; } |
| 393 | |
| 394 | dkOptsList.style.display = "block"; |
| 395 | dropHeight = dkOptsList.offsetHeight; |
| 396 | dkOptsList.style.display = ""; |
| 397 | |
| 398 | above = dkTop > dropHeight; |
| 399 | below = dkBottom > dropHeight; |
| 400 | direction = above && !below ? "-up" : "-down"; |
| 401 | |
| 402 | this.isOpen = true; |
| 403 | _.addClass( dk, "dk-select-open" + direction ); |
| 404 | dkOptsList.setAttribute( "aria-expanded", "true" ); |
| 405 | this._scrollTo( this.options.length - 1 ); |
| 406 | this._scrollTo( this.selectedIndex ); |
| 407 | |
| 408 | this.data.settings.open.call( this ); |
| 409 | } |
| 410 | |
| 411 | /** |
| 412 | * Disables or enables an option; if only a boolean is passed (or nothing), |
no test coverage detected