Browse Source

update jquery-visibility in files app

* ref #12877
Morris Jobke 8 years ago
parent
commit
51c3a3ddaf
2 changed files with 81 additions and 24 deletions
  1. 2 2
      apps/files/js/files.js
  2. 79 22
      apps/files/js/jquery-visibility.js

+ 2 - 2
apps/files/js/files.js

@@ -246,12 +246,12 @@
 				// Use jquery-visibility to de-/re-activate file stats sync
 				if ($.support.pageVisibility) {
 					$(document).on({
-						'show.visibility': function() {
+						'show': function() {
 							if (!updateStorageStatisticsIntervalId) {
 								updateStorageStatisticsIntervalId = setInterval(func, updateStorageStatisticsInterval);
 							}
 						},
-						'hide.visibility': function() {
+						'hide': function() {
 							clearInterval(updateStorageStatisticsIntervalId);
 							updateStorageStatisticsIntervalId = 0;
 						}

+ 79 - 22
apps/files/js/jquery-visibility.js

@@ -1,31 +1,88 @@
-/*! http://mths.be/visibility v1.0.5 by @mathias */
-(function (window, document, $, undefined) {
+/*!
+ * 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 prefix,
-		property,
-		// 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',
-		prefixes = ['', 'moz', 'ms', 'o', 'webkit'],
-		$support = $.support,
-		$event = $.event;
+	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';
 
-	while ((property = prefix = prefixes.pop()) != undefined) {
-		property = (prefix ? prefix + 'H' : 'h') + 'idden';
-		if ($support.pageVisibility = typeof document[property] == 'boolean') {
+	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;
 		}
 	}
 
-	$(/blur$/.test(eventName) ? window : document).on(eventName, function (event) {
-		var type = event.type,
-			originalEvent = event.originalEvent;
-		// 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) || originalEvent == undefined || (originalEvent.toElement == undefined && originalEvent.fromElement == undefined && originalEvent.relatedTarget == undefined)) {
-			$event.trigger((property && document[property] || /^(?:blur|focusout)$/.test(type) ? 'hide' : 'show') + '.visibility');
+	// normalize to and update document hidden property
+	function updateState() {
+		if (property !== 'hidden') {
+			document.hidden = $support.pageVisibility ? document[property] : undefined;
 		}
-	});
+	}
+	updateState();
 
-}(this, document, jQuery));
+	$(/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();
+	});
+}));