nextcloud/apps/files/js/jquery-visibility.js

89 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!
* jquery-visibility v1.0.11
* Page visibility shim for jQuery.
*
* Project Website: http://mths.be/visibility
*
* @version 1.0.11
* @license MIT.
* @author Mathias Bynens - @mathias
* @author Jan Paepke - @janpaepke
*/
;(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], function ($) {
return factory(root, $);
});
} else if (typeof exports === 'object') {
// Node/CommonJS
module.exports = factory(root, require('jquery'));
} else {
// Browser globals
factory(root, jQuery);
}
}(this, function(window, $, undefined) {
"use strict";
var
document = window.document,
property, // property name of document, that stores page visibility
vendorPrefixes = ['webkit', 'o', 'ms', 'moz', ''],
$support = $.support || {},
// In Opera, `'onfocusin' in document == true`, hence the extra `hasFocus` check to detect IE-like behavior
eventName = 'onfocusin' in document && 'hasFocus' in document ?
'focusin focusout' :
'focus blur';
var prefix;
while ((prefix = vendorPrefixes.pop()) !== undefined) {
property = (prefix ? prefix + 'H': 'h') + 'idden';
$support.pageVisibility = document[property] !== undefined;
if ($support.pageVisibility) {
eventName = prefix + 'visibilitychange';
break;
}
}
// normalize to and update document hidden property
function updateState() {
if (property !== 'hidden') {
document.hidden = $support.pageVisibility ? document[property] : undefined;
}
}
updateState();
$(/blur$/.test(eventName) ? window : document).on(eventName, function(event) {
var type = event.type;
var originalEvent = event.originalEvent;
// Avoid errors from triggered native events for which `originalEvent` is
// not available.
if (!originalEvent) {
return;
}
var toElement = originalEvent.toElement;
// If its a `{focusin,focusout}` event (IE), `fromElement` and `toElement`
// should both be `null` or `undefined`; else, the page visibility hasnt
// changed, but the user just clicked somewhere in the doc. In IE9, we need
// to check the `relatedTarget` property instead.
if (
!/^focus./.test(type) || (
toElement === undefined &&
originalEvent.fromElement === undefined &&
originalEvent.relatedTarget === undefined
)
) {
$(document).triggerHandler(
property && document[property] || /^(?:blur|focusout)$/.test(type) ?
'hide' :
'show'
);
}
// and update the current state
updateState();
});
}));