PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 4.13.2
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v4.13.2
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / node_modules / visibilityjs / lib / visibility.core.js
matomo / app / node_modules / visibilityjs / lib Last commit date
visibility.core.js 3 years ago visibility.fallback.js 3 years ago visibility.js 3 years ago visibility.timers.js 3 years ago
visibility.core.js
190 lines
1 ;(function (global) {
2 var lastId = -1;
3
4 // Visibility.js allow you to know, that your web page is in the background
5 // tab and thus not visible to the user. This library is wrap under
6 // Page Visibility API. It fix problems with different vendor prefixes and
7 // add high-level useful functions.
8 var self = {
9
10 // Call callback only when page become to visible for user or
11 // call it now if page is visible now or Page Visibility API
12 // doesn’t supported.
13 //
14 // Return false if API isn’t supported, true if page is already visible
15 // or listener ID (you can use it in `unbind` method) if page isn’t
16 // visible now.
17 //
18 // Visibility.onVisible(function () {
19 // startIntroAnimation();
20 // });
21 onVisible: function (callback) {
22 var support = self.isSupported();
23 if ( !support || !self.hidden() ) {
24 callback();
25 return support;
26 }
27
28 var listener = self.change(function (e, state) {
29 if ( !self.hidden() ) {
30 self.unbind(listener);
31 callback();
32 }
33 });
34 return listener;
35 },
36
37 // Call callback when visibility will be changed. First argument for
38 // callback will be original event object, second will be visibility
39 // state name.
40 //
41 // Return listener ID to unbind listener by `unbind` method.
42 //
43 // If Page Visibility API doesn’t supported method will be return false
44 // and callback never will be called.
45 //
46 // Visibility.change(function(e, state) {
47 // Statistics.visibilityChange(state);
48 // });
49 //
50 // It is just proxy to `visibilitychange` event, but use vendor prefix.
51 change: function (callback) {
52 if ( !self.isSupported() ) {
53 return false;
54 }
55 lastId += 1;
56 var number = lastId;
57 self._callbacks[number] = callback;
58 self._listen();
59 return number;
60 },
61
62 // Remove `change` listener by it ID.
63 //
64 // var id = Visibility.change(function(e, state) {
65 // firstChangeCallback();
66 // Visibility.unbind(id);
67 // });
68 unbind: function (id) {
69 delete self._callbacks[id];
70 },
71
72 // Call `callback` in any state, expect “prerender”. If current state
73 // is “prerender” it will wait until state will be changed.
74 // If Page Visibility API doesn’t supported, it will call `callback`
75 // immediately.
76 //
77 // Return false if API isn’t supported, true if page is already after
78 // prerendering or listener ID (you can use it in `unbind` method)
79 // if page is prerended now.
80 //
81 // Visibility.afterPrerendering(function () {
82 // Statistics.countVisitor();
83 // });
84 afterPrerendering: function (callback) {
85 var support = self.isSupported();
86 var prerender = 'prerender';
87
88 if ( !support || prerender != self.state() ) {
89 callback();
90 return support;
91 }
92
93 var listener = self.change(function (e, state) {
94 if ( prerender != state ) {
95 self.unbind(listener);
96 callback();
97 }
98 });
99 return listener;
100 },
101
102 // Return true if page now isn’t visible to user.
103 //
104 // if ( !Visibility.hidden() ) {
105 // VideoPlayer.play();
106 // }
107 //
108 // It is just proxy to `document.hidden`, but use vendor prefix.
109 hidden: function () {
110 return !!(self._doc.hidden || self._doc.webkitHidden);
111 },
112
113 // Return visibility state: 'visible', 'hidden' or 'prerender'.
114 //
115 // if ( 'prerender' == Visibility.state() ) {
116 // Statistics.pageIsPrerendering();
117 // }
118 //
119 // Don’t use `Visibility.state()` to detect, is page visible, because
120 // visibility states can extend in next API versions.
121 // Use more simpler and general `Visibility.hidden()` for this cases.
122 //
123 // It is just proxy to `document.visibilityState`, but use
124 // vendor prefix.
125 state: function () {
126 return self._doc.visibilityState ||
127 self._doc.webkitVisibilityState ||
128 'visible';
129 },
130
131 // Return true if browser support Page Visibility API.
132 // refs: https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API
133 //
134 // if ( Visibility.isSupported() ) {
135 // Statistics.startTrackingVisibility();
136 // Visibility.change(function(e, state)) {
137 // Statistics.trackVisibility(state);
138 // });
139 // }
140 isSupported: function () {
141 return self._doc.hidden !== undefined || self._doc.webkitHidden !== undefined;
142 },
143
144 // Link to document object to change it in tests.
145 _doc: document || {},
146
147 // Callbacks from `change` method, that wait visibility changes.
148 _callbacks: { },
149
150 // Listener for `visibilitychange` event.
151 _change: function(event) {
152 var state = self.state();
153
154 for ( var i in self._callbacks ) {
155 self._callbacks[i].call(self._doc, event, state);
156 }
157 },
158
159 // Set listener for `visibilitychange` event.
160 _listen: function () {
161 if ( self._init ) {
162 return;
163 }
164
165 var event = 'visibilitychange';
166 if ( self._doc.webkitVisibilityState ) {
167 event = 'webkit' + event;
168 }
169
170 var listener = function () {
171 self._change.apply(self, arguments);
172 };
173 if ( self._doc.addEventListener ) {
174 self._doc.addEventListener(event, listener);
175 } else {
176 self._doc.attachEvent(event, listener);
177 }
178 self._init = true;
179 }
180
181 };
182
183 if ( typeof(module) != 'undefined' && module.exports ) {
184 module.exports = self;
185 } else {
186 global.Visibility = self;
187 }
188
189 })(this);
190