mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2024-11-18 11:28:23 -07:00
158 lines
4.2 KiB
JavaScript
158 lines
4.2 KiB
JavaScript
define([], function () {
|
|
'use strict';
|
|
|
|
function parentWithAttribute(elem, name, value) {
|
|
|
|
while ((value ? elem.getAttribute(name) !== value : !elem.getAttribute(name))) {
|
|
elem = elem.parentNode;
|
|
|
|
if (!elem || !elem.getAttribute) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
return elem;
|
|
}
|
|
|
|
function parentWithTag(elem, tagNames) {
|
|
|
|
// accept both string and array passed in
|
|
if (!Array.isArray(tagNames)) {
|
|
tagNames = [tagNames];
|
|
}
|
|
|
|
while (tagNames.indexOf(elem.tagName || '') === -1) {
|
|
elem = elem.parentNode;
|
|
|
|
if (!elem) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
return elem;
|
|
}
|
|
|
|
function parentWithClass(elem, className) {
|
|
|
|
while (!elem.classList || !elem.classList.contains(className)) {
|
|
elem = elem.parentNode;
|
|
|
|
if (!elem) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
return elem;
|
|
}
|
|
|
|
var supportsCaptureOption = false;
|
|
try {
|
|
var opts = Object.defineProperty({}, 'capture', {
|
|
get: function () {
|
|
supportsCaptureOption = true;
|
|
}
|
|
});
|
|
window.addEventListener("test", null, opts);
|
|
} catch (e) { }
|
|
|
|
function addEventListenerWithOptions(target, type, handler, options) {
|
|
var optionsOrCapture = options;
|
|
if (!supportsCaptureOption) {
|
|
optionsOrCapture = options.capture;
|
|
}
|
|
target.addEventListener(type, handler, optionsOrCapture);
|
|
}
|
|
|
|
function removeEventListenerWithOptions(target, type, handler, options) {
|
|
var optionsOrCapture = options;
|
|
if (!supportsCaptureOption) {
|
|
optionsOrCapture = options.capture;
|
|
}
|
|
target.removeEventListener(type, handler, optionsOrCapture);
|
|
}
|
|
|
|
var windowSize;
|
|
var windowSizeEventsBound;
|
|
function clearWindowSize() {
|
|
windowSize = null;
|
|
}
|
|
|
|
function getWindowSize() {
|
|
if (!windowSize) {
|
|
windowSize = {
|
|
innerHeight: window.innerHeight,
|
|
innerWidth: window.innerWidth
|
|
};
|
|
|
|
if (!windowSizeEventsBound) {
|
|
windowSizeEventsBound = true;
|
|
addEventListenerWithOptions(window, "orientationchange", clearWindowSize, { passive: true });
|
|
addEventListenerWithOptions(window, 'resize', clearWindowSize, { passive: true });
|
|
}
|
|
}
|
|
|
|
return windowSize;
|
|
}
|
|
|
|
var _animationEvent;
|
|
function whichAnimationEvent() {
|
|
|
|
if (_animationEvent) {
|
|
return _animationEvent;
|
|
}
|
|
|
|
var t,
|
|
el = document.createElement("div");
|
|
var animations = {
|
|
"animation": "animationend",
|
|
"OAnimation": "oAnimationEnd",
|
|
"MozAnimation": "animationend",
|
|
"WebkitAnimation": "webkitAnimationEnd"
|
|
};
|
|
for (t in animations) {
|
|
if (el.style[t] !== undefined) {
|
|
_animationEvent = animations[t];
|
|
return animations[t];
|
|
}
|
|
}
|
|
|
|
_animationEvent = 'animationend';
|
|
return _animationEvent;
|
|
}
|
|
|
|
var _transitionEvent;
|
|
function whichTransitionEvent() {
|
|
if (_transitionEvent) {
|
|
return _transitionEvent;
|
|
}
|
|
|
|
var t,
|
|
el = document.createElement("div");
|
|
var transitions = {
|
|
"transition": "transitionend",
|
|
"OTransition": "oTransitionEnd",
|
|
"MozTransition": "transitionend",
|
|
"WebkitTransition": "webkitTransitionEnd"
|
|
};
|
|
for (t in transitions) {
|
|
if (el.style[t] !== undefined) {
|
|
_transitionEvent = transitions[t];
|
|
return transitions[t];
|
|
}
|
|
}
|
|
|
|
_transitionEvent = 'transitionend';
|
|
return _transitionEvent;
|
|
}
|
|
|
|
return {
|
|
parentWithAttribute: parentWithAttribute,
|
|
parentWithClass: parentWithClass,
|
|
parentWithTag: parentWithTag,
|
|
addEventListener: addEventListenerWithOptions,
|
|
removeEventListener: removeEventListenerWithOptions,
|
|
getWindowSize: getWindowSize,
|
|
whichTransitionEvent: whichTransitionEvent,
|
|
whichAnimationEvent: whichAnimationEvent
|
|
};
|
|
}); |