first commit
This commit is contained in:
205
libraries/fancybox3/js/slideshow.js
Normal file
205
libraries/fancybox3/js/slideshow.js
Normal file
@@ -0,0 +1,205 @@
|
||||
// ==========================================================================
|
||||
//
|
||||
// SlideShow
|
||||
// Enables slideshow functionality
|
||||
//
|
||||
// Example of usage:
|
||||
// $.fancybox.getInstance().SlideShow.start()
|
||||
//
|
||||
// ==========================================================================
|
||||
(function (document, $) {
|
||||
"use strict";
|
||||
|
||||
$.extend(true, $.fancybox.defaults, {
|
||||
btnTpl: {
|
||||
slideShow: '<button data-fancybox-play class="fancybox-button fancybox-button--play" title="{{PLAY_START}}">' +
|
||||
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.5 5.4v13.2l11-6.6z"/></svg>' +
|
||||
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.33 5.75h2.2v12.5h-2.2V5.75zm5.15 0h2.2v12.5h-2.2V5.75z"/></svg>' +
|
||||
"</button>"
|
||||
},
|
||||
slideShow: {
|
||||
autoStart: false,
|
||||
speed: 3000,
|
||||
progress: true
|
||||
}
|
||||
});
|
||||
|
||||
var SlideShow = function (instance) {
|
||||
this.instance = instance;
|
||||
this.init();
|
||||
};
|
||||
|
||||
$.extend(SlideShow.prototype, {
|
||||
timer: null,
|
||||
isActive: false,
|
||||
$button: null,
|
||||
|
||||
init: function () {
|
||||
var self = this,
|
||||
instance = self.instance,
|
||||
opts = instance.group[instance.currIndex].opts.slideShow;
|
||||
|
||||
self.$button = instance.$refs.toolbar.find("[data-fancybox-play]").on("click", function () {
|
||||
self.toggle();
|
||||
});
|
||||
|
||||
if (instance.group.length < 2 || !opts) {
|
||||
self.$button.hide();
|
||||
} else if (opts.progress) {
|
||||
self.$progress = $('<div class="fancybox-progress"></div>').appendTo(instance.$refs.inner);
|
||||
}
|
||||
},
|
||||
|
||||
set: function (force) {
|
||||
var self = this,
|
||||
instance = self.instance,
|
||||
current = instance.current;
|
||||
|
||||
// Check if reached last element
|
||||
if (current && (force === true || current.opts.loop || instance.currIndex < instance.group.length - 1)) {
|
||||
if (self.isActive && current.contentType !== "video") {
|
||||
if (self.$progress) {
|
||||
$.fancybox.animate(self.$progress.show(), {
|
||||
scaleX: 1
|
||||
}, current.opts.slideShow.speed);
|
||||
}
|
||||
|
||||
self.timer = setTimeout(function () {
|
||||
if (!instance.current.opts.loop && instance.current.index == instance.group.length - 1) {
|
||||
instance.jumpTo(0);
|
||||
} else {
|
||||
instance.next();
|
||||
}
|
||||
}, current.opts.slideShow.speed);
|
||||
}
|
||||
} else {
|
||||
self.stop();
|
||||
instance.idleSecondsCounter = 0;
|
||||
instance.showControls();
|
||||
}
|
||||
},
|
||||
|
||||
clear: function () {
|
||||
var self = this;
|
||||
|
||||
clearTimeout(self.timer);
|
||||
|
||||
self.timer = null;
|
||||
|
||||
if (self.$progress) {
|
||||
self.$progress.removeAttr("style").hide();
|
||||
}
|
||||
},
|
||||
|
||||
start: function () {
|
||||
var self = this,
|
||||
current = self.instance.current;
|
||||
|
||||
if (current) {
|
||||
self.$button
|
||||
.attr("title", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_STOP)
|
||||
.removeClass("fancybox-button--play")
|
||||
.addClass("fancybox-button--pause");
|
||||
|
||||
self.isActive = true;
|
||||
|
||||
if (current.isComplete) {
|
||||
self.set(true);
|
||||
}
|
||||
|
||||
self.instance.trigger("onSlideShowChange", true);
|
||||
}
|
||||
},
|
||||
|
||||
stop: function () {
|
||||
var self = this,
|
||||
current = self.instance.current;
|
||||
|
||||
self.clear();
|
||||
|
||||
self.$button
|
||||
.attr("title", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_START)
|
||||
.removeClass("fancybox-button--pause")
|
||||
.addClass("fancybox-button--play");
|
||||
|
||||
self.isActive = false;
|
||||
|
||||
self.instance.trigger("onSlideShowChange", false);
|
||||
|
||||
if (self.$progress) {
|
||||
self.$progress.removeAttr("style").hide();
|
||||
}
|
||||
},
|
||||
|
||||
toggle: function () {
|
||||
var self = this;
|
||||
|
||||
if (self.isActive) {
|
||||
self.stop();
|
||||
} else {
|
||||
self.start();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on({
|
||||
"onInit.fb": function (e, instance) {
|
||||
if (instance && !instance.SlideShow) {
|
||||
instance.SlideShow = new SlideShow(instance);
|
||||
}
|
||||
},
|
||||
|
||||
"beforeShow.fb": function (e, instance, current, firstRun) {
|
||||
var SlideShow = instance && instance.SlideShow;
|
||||
|
||||
if (firstRun) {
|
||||
if (SlideShow && current.opts.slideShow.autoStart) {
|
||||
SlideShow.start();
|
||||
}
|
||||
} else if (SlideShow && SlideShow.isActive) {
|
||||
SlideShow.clear();
|
||||
}
|
||||
},
|
||||
|
||||
"afterShow.fb": function (e, instance, current) {
|
||||
var SlideShow = instance && instance.SlideShow;
|
||||
|
||||
if (SlideShow && SlideShow.isActive) {
|
||||
SlideShow.set();
|
||||
}
|
||||
},
|
||||
|
||||
"afterKeydown.fb": function (e, instance, current, keypress, keycode) {
|
||||
var SlideShow = instance && instance.SlideShow;
|
||||
|
||||
// "P" or Spacebar
|
||||
if (SlideShow && current.opts.slideShow && (keycode === 80 || keycode === 32) && !$(document.activeElement).is("button,a,input")) {
|
||||
keypress.preventDefault();
|
||||
|
||||
SlideShow.toggle();
|
||||
}
|
||||
},
|
||||
|
||||
"beforeClose.fb onDeactivate.fb": function (e, instance) {
|
||||
var SlideShow = instance && instance.SlideShow;
|
||||
|
||||
if (SlideShow) {
|
||||
SlideShow.stop();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Page Visibility API to pause slideshow when window is not active
|
||||
$(document).on("visibilitychange", function () {
|
||||
var instance = $.fancybox.getInstance(),
|
||||
SlideShow = instance && instance.SlideShow;
|
||||
|
||||
if (SlideShow && SlideShow.isActive) {
|
||||
if (document.hidden) {
|
||||
SlideShow.clear();
|
||||
} else {
|
||||
SlideShow.set();
|
||||
}
|
||||
}
|
||||
});
|
||||
})(document, jQuery);
|
||||
Reference in New Issue
Block a user