Skip to content

Commit 493e6b8

Browse files
Sean Cokerokcoker
authored andcommitted
Run release
1 parent 7219159 commit 493e6b8

3 files changed

Lines changed: 70 additions & 10 deletions

File tree

bigscreen.js

Lines changed: 67 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*! BigScreen
2-
* v2.0.4 - 2014-02-06
2+
* v2.1.0 - 2014-09-30
33
* https://github.com/bdougherty/BigScreen
44
* Copyright 2014 Brad Dougherty; Apache 2.0 License
55
*/
@@ -28,6 +28,35 @@
2828
}
2929
return properties;
3030
}();
31+
var EVENT = {
32+
ENTER: "enter",
33+
EXIT: "exit",
34+
CHANGE: "change",
35+
ERROR: "error"
36+
};
37+
var events = [];
38+
var attachedEvents = {};
39+
Object.keys(EVENT).forEach(function(key) {
40+
events.push(EVENT[key]);
41+
attachedEvents[EVENT[key]] = [];
42+
});
43+
function fire() {
44+
var args = Array.prototype.slice.apply(arguments);
45+
var event = args.shift();
46+
attachedEvents[event].forEach(function(callback) {
47+
if (typeof callback === "function") {
48+
callback.apply(callback, args);
49+
}
50+
});
51+
}
52+
function makeListener(fn) {
53+
return function(type, handler) {
54+
if (events.indexOf(type) === -1) {
55+
return;
56+
}
57+
fn.call(this, type, handler);
58+
};
59+
}
3160
function _getVideo(element) {
3261
var videoElement = null;
3362
if (element.tagName === "VIDEO") {
@@ -89,6 +118,9 @@
89118
}
90119
var callOnEnter = function(actualElement) {
91120
var lastElement = elements[elements.length - 1];
121+
if (lastElement) {
122+
return;
123+
}
92124
if ((actualElement === lastElement.element || actualElement === lastVideoElement) && lastElement.hasEntered) {
93125
return;
94126
}
@@ -100,6 +132,7 @@
100132
}
101133
lastElement.enter.call(lastElement.element, actualElement || lastElement.element);
102134
lastElement.hasEntered = true;
135+
fire(EVENT.ENTER, bigscreen.element);
103136
};
104137
var callOnExit = function() {
105138
if (lastVideoElement && !hasControls && !iOS7) {
@@ -111,9 +144,11 @@
111144
var element = elements.pop();
112145
if (element) {
113146
element.exit.call(element.element);
147+
fire(EVENT.EXIT, element.element);
114148
if (!bigscreen.element) {
115149
elements.forEach(function(element) {
116150
element.exit.call(element.element);
151+
fire(EVENT.EXIT, element.element);
117152
});
118153
elements = [];
119154
bigscreen.onexit();
@@ -126,6 +161,7 @@
126161
element = element || obj.element;
127162
obj.error.call(element, reason);
128163
bigscreen.onerror(element, reason);
164+
fire(EVENT.ERROR, element, reason);
129165
}
130166
};
131167
var bigscreen = {
@@ -196,6 +232,15 @@
196232
}
197233
return video.readyState < video.HAVE_METADATA ? "maybe" : video.webkitSupportsFullscreen;
198234
},
235+
on: makeListener(function(type, callback) {
236+
attachedEvents[type].push(callback);
237+
}),
238+
off: makeListener(function(type, callback) {
239+
var index = attachedEvents[type].indexOf(callback);
240+
if (index > -1) {
241+
attachedEvents[type].splice(index, 1);
242+
}
243+
}),
199244
onenter: emptyFunction,
200245
onexit: emptyFunction,
201246
onchange: emptyFunction,
@@ -232,6 +277,7 @@
232277
if (fn.change) {
233278
document.addEventListener(fn.change, function onFullscreenChange(event) {
234279
bigscreen.onchange(bigscreen.element);
280+
fire(EVENT.CHANGE, bigscreen.element);
235281
if (bigscreen.element) {
236282
var previousElement = elements[elements.length - 2];
237283
if (previousElement && previousElement.element === bigscreen.element) {
@@ -246,17 +292,31 @@
246292
}, false);
247293
}
248294
document.addEventListener("webkitbeginfullscreen", function onBeginFullscreen(event) {
249-
elements.push({
250-
element: event.srcElement,
251-
enter: emptyFunction,
252-
exit: emptyFunction,
253-
error: emptyFunction
254-
});
295+
var shouldPushElement = true;
296+
if (elements.length > 0) {
297+
for (var i = 0, length = elements.length; i < length; i++) {
298+
var video = _getVideo(elements[i].element);
299+
if (video === event.srcElement) {
300+
shouldPushElement = false;
301+
break;
302+
}
303+
}
304+
}
305+
if (shouldPushElement) {
306+
elements.push({
307+
element: event.srcElement,
308+
enter: emptyFunction,
309+
exit: emptyFunction,
310+
error: emptyFunction
311+
});
312+
}
255313
bigscreen.onchange(event.srcElement);
314+
fire(EVENT.CHANGE, bigscreen.srcElement);
256315
callOnEnter(event.srcElement);
257316
}, true);
258317
document.addEventListener("webkitendfullscreen", function onEndFullscreen(event) {
259318
bigscreen.onchange(event.srcElement);
319+
fire(EVENT.CHANGE, event.srcElement);
260320
callOnExit(event.srcElement);
261321
}, true);
262322
if (fn.error) {

bigscreen.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "BigScreen",
3-
"version": "2.0.4",
3+
"version": "2.1.0",
44
"description": "A simple library for using the JavaScript Fullscreen API.",
55
"keywords": [
66
"fullscreen"

0 commit comments

Comments
 (0)