/*! * jquery-visibility v1.0.12 * Page visibility shim for jQuery. * * Project Website: http://mths.be/visibility * * @version 1.0.12 * @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); } }(typeof window !== 'undefined' ? window : 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 it’s a `{focusin,focusout}` event (IE), `fromElement` and `toElement` // should both be `null` or `undefined`; else, the page visibility hasn’t // 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(); }); }));