visibilityjs 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/{ChangeLog → ChangeLog.md} +20 -14
- data/LICENSE +20 -165
- data/README.md +20 -20
- data/lib/assets/javascripts/visibility.core.js +20 -38
- data/lib/assets/javascripts/visibility.fallback.js +2 -21
- data/lib/assets/javascripts/visibility.js +169 -170
- data/lib/assets/javascripts/visibility.timers.js +149 -150
- metadata +19 -23
@@ -1,21 +1,3 @@
|
|
1
|
-
/*
|
2
|
-
* Copyright 2012 Andrey “A.I.” Sitnik <andrey@sitnik.ru>,
|
3
|
-
* sponsored by Evil Martians.
|
4
|
-
*
|
5
|
-
* This program is free software: you can redistribute it and/or modify
|
6
|
-
* it under the terms of the GNU Lesser General Public License as published by
|
7
|
-
* the Free Software Foundation, either version 3 of the License, or
|
8
|
-
* (at your option) any later version.
|
9
|
-
*
|
10
|
-
* This program is distributed in the hope that it will be useful,
|
11
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
* GNU Lesser General Public License for more details.
|
14
|
-
*
|
15
|
-
* You should have received a copy of the GNU Lesser General Public License
|
16
|
-
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
-
*/
|
18
|
-
|
19
1
|
;(function () {
|
20
2
|
"use strict";
|
21
3
|
|
@@ -27,138 +9,155 @@
|
|
27
9
|
|
28
10
|
var timers = {
|
29
11
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
12
|
+
// Run callback every `interval` milliseconds if page is visible and
|
13
|
+
// every `hiddenInterval` milliseconds if page is hidden.
|
14
|
+
//
|
15
|
+
// Visibility.every(60 * 1000, 5 * 60 * 1000, function () {
|
16
|
+
// checkNewMails();
|
17
|
+
// });
|
18
|
+
//
|
19
|
+
// You can skip `hiddenInterval` and callback will be called only if
|
20
|
+
// page is visible.
|
21
|
+
//
|
22
|
+
// Visibility.every(1000, function () {
|
23
|
+
// updateCountdown();
|
24
|
+
// });
|
25
|
+
//
|
26
|
+
// It is analog of `setInterval(callback, interval)` but use visibility
|
27
|
+
// state.
|
28
|
+
//
|
29
|
+
// It return timer ID, that you can use in `Visibility.stop(id)` to stop
|
30
|
+
// timer (`clearInterval` analog).
|
31
|
+
// Warning: timer ID is different from interval ID from `setInterval`,
|
32
|
+
// so don’t use it in `clearInterval`.
|
33
|
+
//
|
34
|
+
// On change state from hidden to visible timers will be execute.
|
35
|
+
every: function (interval, hiddenInterval, callback) {
|
36
|
+
self._time();
|
37
|
+
|
38
|
+
if ( !defined(callback) ) {
|
39
|
+
callback = hiddenInterval;
|
40
|
+
hiddenInterval = null;
|
41
|
+
}
|
42
|
+
|
43
|
+
self._lastTimer += 1;
|
44
|
+
var number = self._lastTimer;
|
45
|
+
|
46
|
+
self._timers[number] = {
|
47
|
+
visible: interval,
|
48
|
+
hidden: hiddenInterval,
|
49
|
+
callback: callback
|
50
|
+
};
|
51
|
+
self._run(number, false);
|
52
|
+
|
53
|
+
if ( self.isSupported() ) {
|
54
|
+
self._listen();
|
55
|
+
}
|
56
|
+
return number;
|
57
|
+
},
|
58
|
+
|
59
|
+
// Stop timer from `every` method by it ID (`every` method return it).
|
60
|
+
//
|
61
|
+
// slideshow = Visibility.every(5 * 1000, function () {
|
62
|
+
// changeSlide();
|
63
|
+
// });
|
64
|
+
// $('.stopSlideshow').click(function () {
|
65
|
+
// Visibility.stop(slideshow);
|
66
|
+
// });
|
67
|
+
stop: function(id) {
|
68
|
+
var timer = self._timers[id]
|
69
|
+
if ( !defined(timer) ) {
|
70
|
+
return false;
|
71
|
+
}
|
72
|
+
self._stop(id);
|
73
|
+
delete self._timers[id];
|
74
|
+
return timer;
|
75
|
+
},
|
76
|
+
|
77
|
+
// Last timer number.
|
78
|
+
_lastTimer: -1,
|
79
|
+
|
80
|
+
// Callbacks and intervals added by `every` method.
|
81
|
+
_timers: { },
|
82
|
+
|
83
|
+
// Is setInterval method detected and listener is binded.
|
84
|
+
_timed: false,
|
85
|
+
|
86
|
+
// Initialize variables on page loading.
|
87
|
+
_time: function () {
|
88
|
+
if ( self._timed ) {
|
89
|
+
return;
|
90
|
+
}
|
91
|
+
self._timed = true;
|
92
|
+
|
93
|
+
self.change(function () {
|
94
|
+
self._stopRun()
|
95
|
+
});
|
96
|
+
},
|
97
|
+
|
98
|
+
// Try to run timer from every method by it’s ID. It will be use
|
99
|
+
// `interval` or `hiddenInterval` depending on visibility state.
|
100
|
+
// If page is hidden and `hiddenInterval` is null,
|
101
|
+
// it will not run timer.
|
102
|
+
//
|
103
|
+
// Argument `runNow` say, that timers must be execute now too.
|
104
|
+
_run: function (id, runNow) {
|
105
|
+
var interval,
|
106
|
+
timer = self._timers[id];
|
107
|
+
if ( self.hidden() ) {
|
108
|
+
if ( null === timer.hidden ) {
|
109
|
+
return;
|
110
|
+
}
|
111
|
+
interval = timer.hidden;
|
112
|
+
} else {
|
113
|
+
interval = timer.visible;
|
114
|
+
}
|
115
|
+
|
116
|
+
var runner = function () {
|
117
|
+
timer.last = new Date();
|
118
|
+
timer.callback.call(window);
|
119
|
+
}
|
120
|
+
|
121
|
+
if ( runNow ) {
|
122
|
+
var now = new Date();
|
123
|
+
var last = now - timer.last ;
|
124
|
+
|
125
|
+
if ( interval > last ) {
|
126
|
+
timer.delay = setTimeout(function () {
|
127
|
+
runner();
|
128
|
+
timer.id = setInterval(runner, interval);
|
129
|
+
}, interval - last);
|
130
|
+
} else {
|
131
|
+
runner();
|
132
|
+
timer.id = setInterval(runner, interval);
|
133
|
+
}
|
134
|
+
|
135
|
+
} else {
|
136
|
+
timer.id = setInterval(runner, interval);
|
137
|
+
}
|
138
|
+
},
|
139
|
+
|
140
|
+
// Stop timer from `every` method by it’s ID.
|
141
|
+
_stop: function (id) {
|
142
|
+
var timer = self._timers[id];
|
143
|
+
clearInterval(timer.id);
|
144
|
+
clearTimeout(timer.delay);
|
145
|
+
delete timer.id;
|
146
|
+
delete timer.delay;
|
147
|
+
},
|
148
|
+
|
149
|
+
// Listener for `visibilitychange` event.
|
150
|
+
_stopRun: function (event) {
|
151
|
+
var isHidden = self.hidden(),
|
152
|
+
wasHidden = self._wasHidden;
|
153
|
+
|
154
|
+
if ( (isHidden && !wasHidden) || (!isHidden && wasHidden) ) {
|
155
|
+
for ( var i in self._timers ) {
|
156
|
+
self._stop(i);
|
157
|
+
self._run(i, !isHidden);
|
158
|
+
}
|
159
|
+
}
|
160
|
+
}
|
162
161
|
|
163
162
|
};
|
164
163
|
|
metadata
CHANGED
@@ -1,75 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: visibilityjs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
|
-
- Andrey
|
7
|
+
- Andrey Sitnik
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-01-06 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: sprockets
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '2'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '2'
|
30
27
|
description: Visibility.js allow you to determine whether your web page is visible
|
31
28
|
to an user, is hidden in background tab or is prerendering. It allows you use the
|
32
29
|
page visibility state in JavaScript logic and improve browser performance or improve
|
33
30
|
user interface experience.
|
34
|
-
email:
|
35
|
-
- andrey@sitnik.ru
|
31
|
+
email: andrey@sitnik.ru
|
36
32
|
executables: []
|
37
33
|
extensions: []
|
38
34
|
extra_rdoc_files:
|
39
35
|
- LICENSE
|
40
36
|
- README.md
|
41
|
-
- ChangeLog
|
37
|
+
- ChangeLog.md
|
42
38
|
files:
|
43
|
-
-
|
39
|
+
- ChangeLog.md
|
40
|
+
- LICENSE
|
41
|
+
- README.md
|
44
42
|
- lib/assets/javascripts/visibility.core.js
|
45
|
-
- lib/assets/javascripts/visibility.timers.js
|
46
43
|
- lib/assets/javascripts/visibility.fallback.js
|
44
|
+
- lib/assets/javascripts/visibility.js
|
45
|
+
- lib/assets/javascripts/visibility.timers.js
|
47
46
|
- lib/visibilityjs.rb
|
48
|
-
- LICENSE
|
49
|
-
- README.md
|
50
|
-
- ChangeLog
|
51
47
|
homepage: https://github.com/ai/visibility.js
|
52
|
-
licenses:
|
48
|
+
licenses:
|
49
|
+
- MIT
|
50
|
+
metadata: {}
|
53
51
|
post_install_message:
|
54
52
|
rdoc_options: []
|
55
53
|
require_paths:
|
56
54
|
- lib
|
57
55
|
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
56
|
requirements:
|
60
|
-
- -
|
57
|
+
- - ">="
|
61
58
|
- !ruby/object:Gem::Version
|
62
59
|
version: '0'
|
63
60
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
-
none: false
|
65
61
|
requirements:
|
66
|
-
- -
|
62
|
+
- - ">="
|
67
63
|
- !ruby/object:Gem::Version
|
68
64
|
version: '0'
|
69
65
|
requirements: []
|
70
66
|
rubyforge_project:
|
71
|
-
rubygems_version:
|
67
|
+
rubygems_version: 2.2.0
|
72
68
|
signing_key:
|
73
|
-
specification_version:
|
69
|
+
specification_version: 4
|
74
70
|
summary: Visibility.js - a wrapper for the Page Visibility API.
|
75
71
|
test_files: []
|