first commit
This commit is contained in:
173
libraries/fancybox3/js/fullscreen.js
Normal file
173
libraries/fancybox3/js/fullscreen.js
Normal file
@@ -0,0 +1,173 @@
|
||||
// ==========================================================================
|
||||
//
|
||||
// FullScreen
|
||||
// Adds fullscreen functionality
|
||||
//
|
||||
// ==========================================================================
|
||||
(function (document, $) {
|
||||
"use strict";
|
||||
|
||||
// Collection of methods supported by user browser
|
||||
var fn = (function () {
|
||||
var fnMap = [
|
||||
["requestFullscreen", "exitFullscreen", "fullscreenElement", "fullscreenEnabled", "fullscreenchange", "fullscreenerror"],
|
||||
// new WebKit
|
||||
[
|
||||
"webkitRequestFullscreen",
|
||||
"webkitExitFullscreen",
|
||||
"webkitFullscreenElement",
|
||||
"webkitFullscreenEnabled",
|
||||
"webkitfullscreenchange",
|
||||
"webkitfullscreenerror"
|
||||
],
|
||||
// old WebKit (Safari 5.1)
|
||||
[
|
||||
"webkitRequestFullScreen",
|
||||
"webkitCancelFullScreen",
|
||||
"webkitCurrentFullScreenElement",
|
||||
"webkitCancelFullScreen",
|
||||
"webkitfullscreenchange",
|
||||
"webkitfullscreenerror"
|
||||
],
|
||||
[
|
||||
"mozRequestFullScreen",
|
||||
"mozCancelFullScreen",
|
||||
"mozFullScreenElement",
|
||||
"mozFullScreenEnabled",
|
||||
"mozfullscreenchange",
|
||||
"mozfullscreenerror"
|
||||
],
|
||||
["msRequestFullscreen", "msExitFullscreen", "msFullscreenElement", "msFullscreenEnabled", "MSFullscreenChange", "MSFullscreenError"]
|
||||
];
|
||||
|
||||
var ret = {};
|
||||
|
||||
for (var i = 0; i < fnMap.length; i++) {
|
||||
var val = fnMap[i];
|
||||
|
||||
if (val && val[1] in document) {
|
||||
for (var j = 0; j < val.length; j++) {
|
||||
ret[fnMap[0][j]] = val[j];
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
})();
|
||||
|
||||
if (fn) {
|
||||
var FullScreen = {
|
||||
request: function (elem) {
|
||||
elem = elem || document.documentElement;
|
||||
|
||||
elem[fn.requestFullscreen](elem.ALLOW_KEYBOARD_INPUT);
|
||||
},
|
||||
exit: function () {
|
||||
document[fn.exitFullscreen]();
|
||||
},
|
||||
toggle: function (elem) {
|
||||
elem = elem || document.documentElement;
|
||||
|
||||
if (this.isFullscreen()) {
|
||||
this.exit();
|
||||
} else {
|
||||
this.request(elem);
|
||||
}
|
||||
},
|
||||
isFullscreen: function () {
|
||||
return Boolean(document[fn.fullscreenElement]);
|
||||
},
|
||||
enabled: function () {
|
||||
return Boolean(document[fn.fullscreenEnabled]);
|
||||
}
|
||||
};
|
||||
|
||||
$.extend(true, $.fancybox.defaults, {
|
||||
btnTpl: {
|
||||
fullScreen: '<button data-fancybox-fullscreen class="fancybox-button fancybox-button--fsenter" title="{{FULL_SCREEN}}">' +
|
||||
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg>' +
|
||||
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z"/></svg>' +
|
||||
"</button>"
|
||||
},
|
||||
fullScreen: {
|
||||
autoStart: false
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on(fn.fullscreenchange, function () {
|
||||
var isFullscreen = FullScreen.isFullscreen(),
|
||||
instance = $.fancybox.getInstance();
|
||||
|
||||
if (instance) {
|
||||
// If image is zooming, then force to stop and reposition properly
|
||||
if (instance.current && instance.current.type === "image" && instance.isAnimating) {
|
||||
instance.isAnimating = false;
|
||||
|
||||
instance.update(true, true, 0);
|
||||
|
||||
if (!instance.isComplete) {
|
||||
instance.complete();
|
||||
}
|
||||
}
|
||||
|
||||
instance.trigger("onFullscreenChange", isFullscreen);
|
||||
|
||||
instance.$refs.container.toggleClass("fancybox-is-fullscreen", isFullscreen);
|
||||
|
||||
instance.$refs.toolbar
|
||||
.find("[data-fancybox-fullscreen]")
|
||||
.toggleClass("fancybox-button--fsenter", !isFullscreen)
|
||||
.toggleClass("fancybox-button--fsexit", isFullscreen);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(document).on({
|
||||
"onInit.fb": function (e, instance) {
|
||||
var $container;
|
||||
|
||||
if (!fn) {
|
||||
instance.$refs.toolbar.find("[data-fancybox-fullscreen]").remove();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (instance && instance.group[instance.currIndex].opts.fullScreen) {
|
||||
$container = instance.$refs.container;
|
||||
|
||||
$container.on("click.fb-fullscreen", "[data-fancybox-fullscreen]", function (e) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
|
||||
FullScreen.toggle();
|
||||
});
|
||||
|
||||
if (instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true) {
|
||||
FullScreen.request();
|
||||
}
|
||||
|
||||
// Expose API
|
||||
instance.FullScreen = FullScreen;
|
||||
} else if (instance) {
|
||||
instance.$refs.toolbar.find("[data-fancybox-fullscreen]").hide();
|
||||
}
|
||||
},
|
||||
|
||||
"afterKeydown.fb": function (e, instance, current, keypress, keycode) {
|
||||
// "F"
|
||||
if (instance && instance.FullScreen && keycode === 70) {
|
||||
keypress.preventDefault();
|
||||
|
||||
instance.FullScreen.toggle();
|
||||
}
|
||||
},
|
||||
|
||||
"beforeClose.fb": function (e, instance) {
|
||||
if (instance && instance.FullScreen && instance.$refs.container.hasClass("fancybox-is-fullscreen")) {
|
||||
FullScreen.exit();
|
||||
}
|
||||
}
|
||||
});
|
||||
})(document, jQuery);
|
||||
Reference in New Issue
Block a user