trisquel-icecat/icecat/debian/tests/data/HTML5test/scripts/fullscreen.js

90 lines
No EOL
2.2 KiB
JavaScript

(function(doc) {
var
pollute = true,
api, vendor,
apis = {
// http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
w3: {
enabled: "fullscreenEnabled",
element: "fullscreenElement",
request: "requestFullscreen",
exit: "exitFullscreen",
events: {
change: "fullscreenchange",
error: "fullscreenerror"
}
},
webkit: {
enabled: "webkitIsFullScreen",
element: "webkitCurrentFullScreenElement",
request: "webkitRequestFullScreen",
exit: "webkitCancelFullScreen",
events: {
change: "webkitfullscreenchange",
error: "webkitfullscreenerror"
}
},
moz: {
enabled: "mozFullScreen",
element: "mozFullScreenElement",
request: "mozRequestFullScreen",
exit: "mozCancelFullScreen",
events: {
change: "mozfullscreenchange",
error: "mozfullscreenerror"
}
}
},
w3 = apis.w3;
// Loop through each vendor's specific API
for (vendor in apis) {
// Check if document has the "enabled" property
if (apis[vendor].enabled in doc) {
// It seems this browser support the fullscreen API
api = apis[vendor];
break;
}
}
function dispatch(type, target) {
var event = doc.createEvent("Event");
event.initEvent(type, true, false);
target.dispatchEvent(event);
} // end of dispatch()
function handleChange(e) {
// Recopy the enabled and element values
doc[w3.enabled] = doc[api.enabled];
doc[w3.element] = doc[api.element];
dispatch(w3.events.change, e.target);
} // end of handleChange()
function handleError(e) {
dispatch(w3.events.error, e.target);
} // end of handleError()
if (pollute && api && vendor !== "w3") {
// Add listeners for fullscreen events
doc.addEventListener(api.events.change, handleChange, false);
doc.addEventListener(api.events.error, handleError, false);
// Copy the default value
doc[w3.enabled] = doc[api.enabled];
doc[w3.element] = doc[api.element];
// Match the reference for exitFullscreen
doc[w3.exit] = doc[api.exit];
// Add the request method to the Element's prototype
Element.prototype[w3.request] = function() {
return this[api.request].apply(this, arguments);
};
}
// Return the API found (or undefined if the Fullscreen API is unavailable)
return api;
}(document));