From b90a3d734344dba3745aebcccfea4a827026f51b Mon Sep 17 00:00:00 2001
From: anapnoe <124302297+anapnoe@users.noreply.github.com>
Date: Wed, 29 Mar 2023 13:14:06 +0300
Subject: [PATCH] minify spl
---
javascript/spotlight.js | 1311 +--------------------------------------
1 file changed, 1 insertion(+), 1310 deletions(-)
diff --git a/javascript/spotlight.js b/javascript/spotlight.js
index a2e7cb5c..77b96e36 100644
--- a/javascript/spotlight.js
+++ b/javascript/spotlight.js
@@ -10,1313 +10,4 @@
it supports multi-instancing, enable-disable panzoom functionallity and input type tools
*/
-(function (window) {
- 'use strict';
- const Spotlight = function (selector, options = {}) {
- this.controls = [
- "info",
- "theme",
- "download",
- "play",
- "page",
- "close",
- "autofit",
- "zoom-in",
- "zoom-out",
- "prev",
- "next",
- "fullscreen"
- ];
- this.controls_default = {
- //"info": 1,
- "page": 1,
- "close": 1,
- "autofit": 1,
- "zoom-in": 1,
- "zoom-out": 1,
- "prev": 1,
- "next": 1,
- "fullscreen": 1
- };
- this.keycodes = {
- BACKSPACE: 8,
- ESCAPE: 27,
- SPACEBAR: 32,
- LEFT: 37,
- RIGHT: 39,
- UP: 38,
- NUMBLOCK_PLUS : 107,
- PLUS: 187,
- DOWN: 40,
- NUMBLOCK_MINUS: 109,
- MINUS: 189,
- INFO: 73
- };
-
- const self = this;
-
- Object.assign || (Object.assign =
- function(target, source){
- //console.log("assign", target, source);
- const keys = Object.keys(/** @type {!Object} */(source));
- for(let i = 0, key; i < keys.length; i++){
- key = keys[i];
- target[key] = /*"" +*/ source[key];
- }
- return target;
- }
- );
-
- Element.prototype.closest || (Element.prototype.closest = function(classname){
- //console.log("closest", classname);
- classname = classname.substring(1);
- let node = this;
- while(node && (node.nodeType === 1)){
- if(node.classList.contains(classname)){
- return (node);
- }
- node = node.parentElement /* || node.parentNode */;
- }
- return null;
- });
-
- this.addClass = (node, class_name) => {
- self.toggleClass(node, class_name, true);
- }
- this.removeClass = (node, class_name) =>{
- self.toggleClass(node, class_name);
- }
- this.toggleClass = (node, class_name, state) =>{
- node.classList[state ? "add" : "remove"](class_name);
- }
- this.hasClass = (node, class_name) =>{
- return node.classList.contains(class_name);
- }
- this.setStyle = (node, style, value) =>{
- value = "" + value;
- if(node["_s_" + style] !== value){
- node.style.setProperty(style, value);
- node["_s_" + style] = value;
- }
- }
- let tmp = 0;
- this.prepareStyle = (node, fn) => {
- if(fn){
- self.setStyle(node, "transition", "none");
- fn();
- }
- // force applying styles (quick-fix for closure compiler):
- tmp || (tmp = node.clientTop && 0); // clientWidth
- fn && self.setStyle(node, "transition", "");
- }
- this.setText = (node, text) => {
- node.firstChild.nodeValue = text;
- }
- this.getByClass = (classname, context) => {
- return (context || document).getElementsByClassName(classname);
- }
- this.getByTag = (tag, context) => {
- return (context || document).getElementsByTagName(tag);
- }
- this.addListener = (node, event, fn, mode) => {
- self.toggleListener(true, node, event, fn, mode);
- }
- this.removeListener = (node, event, fn, mode) => {
- self.toggleListener(false, node, event, fn, mode);
- }
- this.toggleListener = (state, node, event, fn, mode) => {
- node[(state ? "add" : "remove") + "EventListener"](event, fn, mode || (mode === false) ? mode : true);
- }
- this.cancelEvent = (event, prevent) => {
- event.stopPropagation();
- //event.stopImmediatePropagation();
- prevent && event.preventDefault();
- }
- this.downloadImage = (body, image) => {
- const link = self.createElement("a");
- const src = image.src;
- link.href = src;
- link.download = src.substring(src.lastIndexOf("/") + 1);
- self.body.appendChild(link);
- link.click();
- self.body.removeChild(link);
- }
- this.createElement = (element) => {
- return document.createElement(element);
- }
- this.toggleDisplay = (node, state) => {
- self.setStyle(node, "display", state ? "" : "none");
- }
- this.toggleVisibility = (node, state) => {
- self.setStyle(node, "visibility", state ? "" : "hidden");
- }
- this.toggleAnimation = (node, state) => {
- self.setStyle(node, "transition", state ? "" : "none");
- }
- this.widget = this.createElement("div");
- this.widget.innerHTML = (
- '
' +
- '' +
- '' +
- '' +
- '' +
- '' +
- ''
- );
-
- this.video_support = {};
- this.tpl_video = this.createElement("video");
-
- this.parse_src = (anchor, size, options, media) => {
- let src, diff;
- if(media !== "node"){
- const keys = Object.keys((options));
- for(let x = 0, key; x < keys.length; x++){
- key = keys[x];
- if((key.length > 3) && (key.indexOf("src") === 0)){
- if(media === "video"){
- const cache = self.video_support[key];
- if(cache){
- if(cache > 0){
- src = options[key];
- break;
- }
- }
- else if(self.tpl_video.canPlayType("video/" + key.substring(3).replace("-", "").toLowerCase())){
- self.video_support[key] = 1;
- src = options[key];
- break;
- }
- else{
- self.video_support[key] = -1;
- }
- }
- else{
- // Image Media:
- const res = parseInt(key.substring(4), 10);
- if(res){
- const abs = Math.abs(size - res);
- if(!diff || (abs < diff)){
- diff = abs;
- src = options[key];
- }
- }
- }
- }
- }
- }
- return src || options["src"] || options["href"] || anchor["src"] || anchor["href"];
- }
-
- this.controls_dom = {};
- const connection = navigator["connection"];
- const dpr = window["devicePixelRatio"] || 1;
-
-
- this.x;
- this.y;
- this.startX;
- this.startY;
- this.viewport_w;
- this.viewport_h;
- this.media_w;
- this.media_h;
- this.scale;
-
- this.is_down;
- this.dragged;
- this.slidable;
- this.toggle_autofit;
- this.toggle_theme;
-
- this.current_slide;
- this.slide_count;
- this.anchors;
- this.options;
- this.options_media;
- this.options_group;
- this.options_infinite;
- this.options_progress;
- this.options_onshow;
- this.options_onchange;
- this.options_onclose;
- this.options_fit;
- this.options_autohide;
- this.options_autoslide;
- this.options_theme;
- this.options_preload;
- this.options_href;
- this.options_click;
- this.options_class;
- this.delay;
-
- this.animation_scale;
- this.animation_fade;
- this.animation_slide;
- this.animation_custom;
-
- this.body;
- this.doc;
- this.panel;
- this.panes;
- this.media;
- this.media_next = this.createElement("img");
- this.slider;
- this.header;
- this.footer;
- this.footer_visible = 0;
- this.title;
- this.description;
- this.button;
- this.page_prev;
- this.page_next;
- this.maximize;
- this.page;
- this.player;
- this.progress;
- this.spinner;
-
- this.gallery;
- this.gallery_next;
- this.playing;
- this.hide;
- this.hide_cooldown;
- this.id = "spotlight";
-
- this.prefix_request;
- this.prefix_exit;
-
- this.track;
-
- this.addListener(document, "click", this.dispatch);
-
- this.init = (selector, instanceId) => {
-
- //setUserOptions();
- //setSliderOptions();
-
- if (self.body) {
- return;
- }
-
- self.id = "spotlight" + instanceId;
- self.widget.id = "spotlight" + instanceId;
- self.doc = document.body;
- self.body = selector;
- self.slider = self.getOneByClass("scene");
- self.header = self.getOneByClass("header");
- self.footer = self.getOneByClass("footer");
- self.title = self.getOneByClass("title");
- self.description = self.getOneByClass("description");
- self.button = self.getOneByClass("button");
- self.page_prev = self.getOneByClass("prev");
- self.page_next = self.getOneByClass("next");
- self.page = self.getOneByClass("page");
- self.progress = self.getOneByClass("progress");
- self.spinner = self.getOneByClass("spinner");
- self.panes = [self.getOneByClass("pane")];
-
- //console.log(selector);
-
- self.addControl("close", self.close);
-
- self.doc[self.prefix_request = "requestFullscreen"] ||
- self.doc[self.prefix_request = "msRequestFullscreen"] ||
- self.doc[self.prefix_request = "webkitRequestFullscreen"] ||
- self.doc[self.prefix_request = "mozRequestFullscreen"] ||
- (self.prefix_request = "");
-
- if (self.prefix_request) {
-
- self.prefix_exit = (
-
- self.prefix_request.replace("request", "exit")
- .replace("mozRequest", "mozCancel")
- .replace("Request", "Exit")
- );
-
- self.maximize = self.addControl("fullscreen", self.fullscreen);
- }
- else {
-
- self.controls.pop();
- }
-
- self.addControl("info", self.info);
- self.addControl("autofit", self.autofit);
- self.addControl("zoom-in", self.zoom_in);
- self.addControl("zoom-out", self.zoom_out);
- self.addControl("theme", self.theme);
- self.player = self.addControl("play", self.play);
- self.addControl("download", self.download);
-
- self.addListener(self.page_prev, "click", self.prev);
- self.addListener(self.page_next, "click", self.next);
-
- self.track = self.getOneByClass("track");
-
- self.addListener(self.track, "mousedown", self.start);
- self.addListener(self.track, "mousemove", self.move);
- self.addListener(self.track, "mouseleave", self.end);
- self.addListener(self.track, "mouseup", self.end);
-
- self.addListener(self.track, "touchstart", self.start, { "passive": false });
- self.addListener(self.track, "touchmove", self.move, { "passive": true });
- //addListener(self.track, "touchcancel", end);
- self.addListener(self.track, "touchend", self.end);
- // click listener for the wrapper "track" is already covered
- //addListener(self.track, "click", menu);
-
- self.addListener(self.button, "click", function () {
- if (self.options_click) {
- self.options_click(self.current_slide, self.options);
- }
- else if (self.options_href) {
- location.href = self.options_href;
- }
- });
- //this.onInit();
- }
-
-
- this.getOneByClass = (classname) => {
- return this.controls_dom[classname] = this.getByClass("spl-" + classname, this.widget)[0];
- }
-
- this.addControl = (classname, fn, html="") => {
- //console.log("addControl", classname, fn);
- const div = self.createElement("div");
- div.className = "spl-" + classname;
- div.innerHTML = html;
- self.addListener(div, "click", fn);
- self.header.appendChild(div);
- return self.controls_dom[classname] = div;
- }
-
- this.removeControl = (classname) => {
- //console.log("dispatch", classname);
- const div = self.controls_dom[classname];
- if (div) {
- self.header.removeChild(div);
- self.controls_dom[classname] = null;
- }
- }
-
- this.dispatch = (event) => {
- //console.log("dispatch");
- const target = event.target.closest(".spotlight");
- if (target) {
- self.cancelEvent(event, true);
- const group = target.closest(".spotlight-group");
- self.anchors = self.getByClass("spotlight", group);
- // determine current selected index
- for (let i = 0; i < self.anchors.length; i++) {
- if (self.anchors[i] === target) {
- self.options_group = group && group.dataset;
- self.init_gallery(i + 1);
- break;
- }
- }
- }
- }
-
- this.show = (gallery, group, index) => {
- //console.log(gallery, group, index);
- //console.log(group);
- self.anchors = gallery;
- if (group) {
-
- self.options_group = group;
- self.options_onshow = group["onshow"];
- self.options_onchange = group["onchange"];
- self.options_onclose = group["onclose"];
- index = index || group["index"];
- }
-
- self.init_gallery(index);
- }
- //state, node, event, fn, mode
- this.panzoom = (state) => {
- self.toggleListener(state, self.track, "wheel", self.wheel_listener, { passive: false });
- self.toggleListener(state, self.track, "mousedown", self.start);
- self.toggleListener(state, self.track, "mousemove", self.move);
- self.toggleListener(state, self.track, "mouseleave", self.end);
- self.toggleListener(state, self.track, "mouseup", self.end);
- self.toggleListener(state, self.track, "touchstart", self.start, { passive: false });
- self.toggleListener(state, self.track, "touchmove", self.move, { passive: true });
- self.toggleListener(state, self.track, "touchend", self.end);
- }
-
- this.init_gallery = (index) => {
- //console.log("init_gallery", index);
- self.slide_count = self.anchors.length;
- if (self.slide_count) {
-
- self.body || self.init();
-
- self.options_onshow && self.options_onshow(index);
- const pane = self.panes[0];
- //const parent = pane.parentNode;
- const parent = pane.parentElement;
-
- for (let i = self.panes.length; i < self.slide_count; i++) {
- const clone = pane.cloneNode(false);
- self.setStyle(clone, "left", (i * 100) + "%");
- parent.appendChild(clone);
- self.panes[i] = clone;
- }
-
- if (!self.panel) {
- self.body.appendChild(self.widget);
- self.update_widget_viewport();
- //resize_listener();
- }
- self.current_slide = index || 1;
- self.toggleAnimation(self.slider);
- self.setup_page(true);
- self.prefix_request && self.detect_fullscreen();
- self.show_gallery();
- }
- }
-
- this.parse_option = (key, is_default) => {
- //console.log("parse_option", key, is_default);
- let val = options[key];
- if (typeof val !== "undefined") {
- val = "" + val;
- return (val !== "false") && (val || is_default);
- }
- return is_default;
- }
-
- this.apply_options = (anchor) => {
- //console.log("apply_options", anchor);
- self.options = {};
- self.options_group && Object.assign(self.options, self.options_group);
- Object.assign(self.options, anchor.dataset || anchor);
-
- // TODO: theme is icon and option field!
-
- self.options_media = self.options["media"];
- self.options_click = self.options["onclick"];
- self.options_theme = self.options["theme"];
- self.options_class = self.options["class"];
- self.options_autohide = self.parse_option("autohide", false);
- self.options_infinite = self.parse_option("infinite");
- self.options_progress = self.parse_option("progress", true);
- self.options_autoslide = self.parse_option("autoslide");
- self.options_preload = self.parse_option("preload", true);
- self.options_href = self.options["buttonHref"];
- self.delay = (self.options_autoslide && parseFloat(self.options_autoslide)) || 7;
- self.toggle_theme || (self.options_theme && self.theme(self.options_theme));
- self.options_class && self.addClass(self.widget, self.options_class);
- self.options_class && self.prepareStyle(self.widget)
-
- const control = self.options["control"];
-
- // determine controls
- if (control) {
- const whitelist = (
- typeof control === "string" ? control.split(",") : control
- );
- // prepare to false when using whitelist
- for (let i = 0; i < self.controls.length; i++) {
- self.options[self.controls[i]] = false;
- }
- // apply whitelist
- for (let i = 0; i < whitelist.length; i++) {
- const option = whitelist[i].trim();
- // handle shorthand "zoom"
- if (option === "zoom") {
- self.options["zoom-in"] = self.options["zoom-out"] = true;
- }
- else {
- self.options[option] = true;
- }
- }
- }
-
- // determine animations
- const animation = self.options["animation"];
- self.animation_scale = self.animation_fade = self.animation_slide = !animation;
- self.animation_custom = false;
-
- if (animation) {
- const whitelist = (
- typeof animation === "string" ?
- animation.split(",") : animation
- );
-
- // apply whitelist
- for (let i = 0; i < whitelist.length; i++) {
- const option = whitelist[i].trim();
- if (option === "scale") {
- self.animation_scale = true;
- }
- else if (option === "fade") {
- self.animation_fade = true;
- }
- else if (option === "slide") {
- self.animation_slide = true;
- }
- else if (option) {
- self.animation_custom = option;
- }
- }
- }
- self.options_fit = self.options["fit"];
- }
-
- this.prepare_animation = (prepare) => {
- //console.log("prepare_animation", prepare);
- if (prepare) {
- self.prepareStyle(self.media, self.prepare_animation);
- }
- else {
- self.toggleAnimation(self.slider, self.animation_slide);
- self.setStyle(self.media, "opacity", self.animation_fade ? 0 : 1);
- self.update_scroll(self.animation_scale && 0.8);
- self.animation_custom && self.addClass(self.media, self.animation_custom);
- }
- }
-
- this.init_slide = (index) => {
- //console.log("init_slide", index);
- self.panel = self.panes[index - 1];
- self.media = (self.panel.firstChild);
- self.current_slide = index;
-
- if (self.media) {
- self.disable_autoresizer();
- if (self.options_fit) {
- self.addClass(self.media, self.options_fit);
- }
- self.prepare_animation(true);
- self.animation_custom && self.removeClass(self.media, self.animation_custom);
- self.animation_fade && self.setStyle(self.media, "opacity", 1);
- self.animation_scale && self.setStyle(self.media, "transform", "");
- self.setStyle(self.media, "visibility", "visible");
-
- self.gallery_next && (self.media_next.src = self.gallery_next);
- self.options_autoslide && self.animate_bar(self.playing);
- }
- else {
-
- const type = self.gallery.media;
- const options_spinner = self.parse_option("spinner", true);
-
- if (type === "node") {
- self.media = self.gallery.src;
- if (typeof self.media === "string") {
- self.media = gradioApp().querySelector(self.media);
- }
-
- if (self.media) {
- //self.media._root || (self.media._root = self.media.parentNode);
- self.media._root || (self.media._root = self.media.parentElement);
- self.update_media_viewport();
- self.panel.appendChild(self.media);
- self.init_slide(index);
- }
- return;
- }
- else {
- self.toggle_spinner(self.options_spinner, true);
- self.media = (self.createElement("img"));
- self.media.onload = function () {
- if (self.media === self) {
- self.media.onerror = null;
- self.toggle_spinner(self.options_spinner);
- self.init_slide(index);
- self.update_media_viewport();
- }
- };
- //media.crossOrigin = "anonymous";
- self.media.src = self.gallery.src;
- self.panel.appendChild(self.media);
- }
-
- if (self.media) {
- self.options_spinner || self.setStyle(self.media, "visibility", "visible");
- self.media.onerror = function () {
- if (self.media === self) {
- self.checkout(self.media);
- self.addClass(self.spinner, "error");
- self.toggle_spinner(self.options_spinner);
- }
- };
- }
- }
- }
-
- this.toggle_spinner = (options_spinner, is_on) => {
- options_spinner && self.toggleClass(self.spinner, "spin", is_on);
- }
-
- this.has_fullscreen = () => {
- return (
- document["fullscreen"] ||
- document["fullscreenElement"] ||
- document["webkitFullscreenElement"] ||
- document["mozFullScreenElement"]
- );
- }
-
- this.resize_listener = () => {
- self.update_widget_viewport()
- self.media && self.update_media_viewport();
- if (self.prefix_request) {
- const is_fullscreen = self.has_fullscreen();
- self.toggleClass(self.maximize, "on", is_fullscreen)
- is_fullscreen || self.detect_fullscreen();
- }
- //update_scroll();
- }
-
- this.detect_fullscreen = () => {
- self.toggleDisplay(self.maximize, (screen.availHeight - window.innerHeight) > 0);
- }
-
- this.update_widget_viewport = () => {
- self.viewport_w = self.widget.clientWidth;
- self.viewport_h = self.widget.clientHeight;
- }
-
- this.update_media_viewport = () => {
- self.media_w = self.media.clientWidth;
- self.media_h = self.media.clientHeight;
- }
-
- // function update_media_dimension(){
- //
- // media_w = media.width;
- // media_h = media.height;
- // }
-
- this.update_scroll = (force_scale) => {
- self.setStyle(self.media, "transform", "translate(-50%, -50%) scale(" + (force_scale || self.scale) + ")");
- }
-
- this.update_panel = (x, y) => {
- self.setStyle(self.panel, "transform", x || y ? "translate(" + x + "px, " + y + "px)" : "");
- }
-
- this.update_slider = (index, prepare, offset) => {
- if (prepare) {
- self.prepareStyle(self.slider, function () {
- self.update_slider(index, false, offset);
- });
- }
- else {
- self.setStyle(self.slider, "transform", "translateX(" + (-index * 100 + (offset || 0)) + "%)");
- }
- }
-
- this.toggle_listener = (install) => {
- //console.log("toggle_listener", install);
- self.toggleListener(install, window, "keydown", self.key_listener);
- //toggleListener(install, window, "wheel", wheel_listener);
- self.toggleListener(install, window, "resize", self.resize_listener);
- //self.toggleListener(install, window, "popstate", self.history_listener);
- }
-
- this.history_listener = (event) => {
- //console.log("history_listener");
- if (self.panel && event.state["spl"]) {
- self.close(true);
- }
- }
-
- this.key_listener = (event) => {
- //console.log("key_listener");
- if (self.panel) {
- const zoom_enabled = self.options["zoom-in"] !== false;
- switch (event.keyCode) {
- case self.keycodes.BACKSPACE:
- zoom_enabled && self.autofit();
- break;
- case self.keycodes.ESCAPE:
- self.close();
- break;
- case self.keycodes.SPACEBAR:
- self.options_autoslide && self.play();
- break;
- case self.keycodes.LEFT:
- self.prev();
- break;
- case self.keycodes.RIGHT:
- self.next();
- break;
- case self.keycodes.UP:
- case self.keycodes.NUMBLOCK_PLUS:
- case self.keycodes.PLUS:
- zoom_enabled && self.zoom_in();
- break;
- case self.keycodes.DOWN:
- case self.keycodes.NUMBLOCK_MINUS:
- case self.keycodes.MINUS:
- zoom_enabled && self.zoom_out();
- break;
- case self.keycodes.INFO:
- self.info();
- break;
- }
- }
- }
-
- this.wheel_listener = (event) => {
- //console.log("wheel_listener");
- if (self.panel && (self.options["zoom-in"] !== false)) {
- let delta = event["deltaY"];
- delta = (delta < 0 ? 1 : delta ? -1 : 0) * 0.5;
- if (delta < 0) {
- self.zoom_out();
- }
- else {
- self.zoom_in();
- }
- }
- }
-
- this.play = (init, _skip_animation) => {
- //console.log("play", init);
- const state = (typeof init === "boolean" ? init : !this.playing);
- if (state === !self.playing) {
- self.playing = self.playing ? clearTimeout(self.playing) : 1;
- self.toggleClass(self.player, "on", self.playing);
- _skip_animation || self.animate_bar(self.playing);
- }
- }
-
- this.animate_bar = (start) => {
- //console.log("animate_bar", start);
- if (self.options_progress) {
- self.prepareStyle(self.progress, function () {
- self.setStyle(self.progress, "transition-duration", "");
- self.setStyle(self.progress, "transform", "");
- });
-
- if (start) {
- self.setStyle(self.progress, "transition-duration", self.delay + "s");
- self.setStyle(self.progress, "transform", "translateX(0)");
- }
- }
-
- if (start) {
- self.playing = setTimeout(self.next, self.delay * 1000);
- }
- }
-
- this.autohide = () => {
- //console.log("autohide");
- if (self.options_autohide) {
- self.hide_cooldown = Date.now() + 2950;
- if (!self.hide) {
- self.addClass(self.widget, "menu");
- self.schedule(3000);
- }
- }
- }
-
- this.schedule = (cooldown) => {
- //console.log("schedule", cooldown);
-
- self.hide = setTimeout(function () {
- const now = Date.now();
- if (now >= self.hide_cooldown) {
- self.removeClass(self.widget, "menu");
- self.hide = 0;
- }
- else {
- self.schedule(self.hide_cooldown - now);
- }
- }, cooldown);
- }
-
- this.menu = (state) => {
- //console.log("menu");
- if (typeof state === "boolean") {
- self.hide = state ? self.hide : 0;
- }
- if (self.hide) {
- self.hide = clearTimeout(self.hide);
- self.removeClass(self.widget, "menu");
- }
- else {
- self.autohide();
- }
- }
-
- this.start = (e) => {
- //console.log("start");
- self.cancelEvent(e, true);
- self.is_down = true;
- self.dragged = false;
- let touches = e.touches;
- if (touches && (touches = touches[0])) {
- e = touches;
- }
- self.slidable = (self.media_w * self.scale) <= self.viewport_w;
- self.startX = e.pageX;
- self.startY = e.pageY;
- self.toggleAnimation(self.panel);
- }
-
- this.end = (e) => {
- //console.log("end");
- self.cancelEvent(e);
- if (self.is_down) {
- if (!self.dragged) {
- self.menu();
- }
- else {
- if (self.slidable && self.dragged) {
- const has_next = (self.x < -(self.viewport_w / 7)) && ((self.current_slide < self.slide_count) || self.options_infinite);
- const has_prev = has_next || (self.x > (self.viewport_w / 7)) && ((self.current_slide > 1) || self.options_infinite);
- if (has_next || has_prev) {
- self.update_slider(self.current_slide - 1, true, self.x / self.viewport_w * 100);
- (has_next && self.next()) ||
- (has_prev && self.prev());
- }
- self.x = 0;
- self.update_panel();
- }
- self.toggleAnimation(self.panel, true);
- }
- self.is_down = false;
- }
- }
-
- this.move = (e) => {
- //console.log("move");
- self.cancelEvent(e);
- if (self.is_down) {
- let touches = e.touches;
- if (touches && (touches = touches[0])) {
- e = touches;
- }
- // handle x-axis in slide mode and in drag mode
- let diff = (self.media_w * self.scale - self.viewport_w) / 2;
- self.x -= self.startX - (self.startX = e.pageX);
- if (!self.slidable) {
- if (self.x > diff) {
- self.x = diff;
- }
- else if (self.x < -diff) {
- self.x = -diff
- }
- // handle y-axis in drag mode
- if ((self.media_h * self.scale) > self.viewport_h) {
- diff = (self.media_h * self.scale - self.viewport_h) / 2;
- self.y -= self.startY - (self.startY = e.pageY);
- if (self.y > diff) {
- self.y = diff;
- }
- else if (self.y < -diff) {
- self.y = -diff;
- }
- }
- }
- self.dragged = true;
- self.update_panel(self.x, self.y);
- }
- else {
- self.autohide();
- }
- }
-
- this.fullscreen = (init) => {
- //console.log("fullscreen", init);
- const is_fullscreen = self.has_fullscreen();
- if ((typeof init !== "boolean") || (init !== !!is_fullscreen)) {
- if (is_fullscreen) {
- document[self.prefix_exit]();
- //removeClass(maximize, "on");
- }
- else {
- self.widget[self.prefix_request]();
- //addClass(maximize, "on");
- }
- }
- }
-
- this.theme = (theme) => {
- //console.log("theme", theme);
- if (typeof theme !== "string") {
- // toggle:
- theme = self.toggle_theme ? "" : self.options_theme || "white";
- }
-
- if (self.toggle_theme !== theme) {
- // set:
- self.toggle_theme && self.removeClass(self.widget, self.toggle_theme);
- theme && self.addClass(self.widget, theme);
- self.toggle_theme = theme;
- }
- }
-
- this.autofit = (init) => {
-
- //console.log("autofit", init);
- if (typeof init === "boolean") {
- self.toggle_autofit = !init;
- }
-
- self.toggle_autofit = (self.scale === 1) && !self.toggle_autofit;
-
- self.toggleClass(self.media, "autofit", self.toggle_autofit);
- self.setStyle(self.media, "transform", "");
-
- self.scale = 1;
- self.x = 0;
- self.y = 0;
-
- self.update_media_viewport();
- self.toggleAnimation(self.panel);
- self.update_panel();
- //autohide();
- }
-
- this.zoom_in = (e) => {
- //console.log("zoom_in");
- let value = self.scale / 0.65;
- if (value <= 50) {
- //console.log(toggle_autofit);
- self.disable_autoresizer();
- // if(options_fit){
- // removeClass(media, options_fit);
- // }
- self.x /= 0.65;
- self.y /= 0.65;
- self.update_panel(self.x, self.y);
- self.zoom(value);
- }
- //e && autohide();
- }
-
- this.zoom_out = (e) => {
- //console.log("zoom_out");
- let value = self.scale * 0.65;
- self.disable_autoresizer();
- if (value >= 1) {
- if (value === 1) {
- self.x = self.y = 0;
- // if(options_fit){
- // addClass(media, options_fit);
- // }
- }
- else {
- self.x *= 0.65;
- self.y *= 0.65;
- }
- self.update_panel(self.x, self.y);
- self.zoom(value);
- }
- //e && autohide();
- }
-
- this.zoom = (factor) => {
- //console.log("zoom", factor);
- self.scale = factor || 1;
- self.update_scroll();
- }
-
- this.info = () => {
- //console.log("info");
- self.footer_visible = !self.footer_visible;
- self.toggleVisibility(self.footer, self.footer_visible);
-
- }
-
- this.disable_autoresizer = () => {
- //console.log("disable_autoresizer");
- //update_media_dimension();
- if (self.toggle_autofit) {
- // removeClass(media, "autofit");
- // toggle_autofit = false;
- self.autofit();
- }
- }
-
- this.show_gallery = () => {
-
- //console.log("show_gallery");
-
- //history.pushState({ "spl": 1 }, "");
- //history.pushState({ "spl": 2 }, "");
-
- self.toggleAnimation(self.widget, true);
- self.addClass(self.body, "hide-scrollbars");
- self.addClass(self.widget, "show");
-
- self.toggle_listener(true);
- self.update_widget_viewport();
- //investigate resize_listener
- self.resize_listener();
- self.autohide();
-
- self.options_autoslide && self.play(true, true);
- }
-
- this.download = () => {
- //console.log("download", media);
- self.downloadImage(self.body, self.media);
- }
-
- this.close = (hashchange, nofade) => {
- //console.log("close", hashchange);
- if(self.hasClass(self.body,"relative") && !nofade){
- self.fullscreen(false);
- return;
- }
-
- if(!nofade){
- setTimeout(function () {
- self.body.removeChild(self.widget);
- self.panel = self.media = self.gallery = self.options = self.options_group = self.anchors = self.options_onshow = self.options_onchange = self.options_onclose = self.options_click = null;
-
- }, 200);
- }
-
- self.removeClass(self.body, "hide-scrollbars");
- self.removeClass(self.widget, "show");
-
- self.fullscreen(false);
- self.toggle_listener();
-
- //history.go(hashchange === true ? -1 : -2);
-
- // teardown
- self.gallery_next && (self.media_next.src = "");
- self.playing && self.play();
- self.media && self.checkout(self.media);
- self.hide && (self.hide = clearTimeout(self.hide));
- self.toggle_theme && self.theme();
- self.options_class && self.removeClass(self.widget, self.options_class);
- self.options_onclose && self.options_onclose();
-
- if(nofade){
- self.body.removeChild(self.widget);
- self.panel = self.media = self.gallery = self.options = self.options_group = self.anchors = self.options_onshow = self.options_onchange = self.options_onclose = self.options_click = null;
- }
- }
-
- this.checkout = (media) => {
- //console.log("checkout");
- if (media._root) {
- media._root.appendChild(media);
- media._root = null;
- }
- else {
- const parent = media.parentNode;
- parent && parent.removeChild(media);
- media = media.src = media.onerror = "";
- }
- }
-
- this.prev = (e) => {
- //console.log("prev");
- e && self.autohide();
- if (self.slide_count > 1) {
- if (self.current_slide > 1) {
- return self.goto(self.current_slide - 1);
- }
- else if (self.options_infinite) {
- self.update_slider(self.slide_count, true);
- return self.goto(self.slide_count);
- }
- }
- }
-
- this.next = (e) => {
- //console.log("next");
- e && self.autohide();
- if (self.slide_count > 1) {
- if (self.current_slide < self.slide_count) {
- return self.goto(self.current_slide + 1);
- }
- else if (self.options_infinite) {
- self.update_slider(-1, true);
- return self.goto(1);
- }
- else if (self.playing) {
- self.play();
- }
- }
- }
-
- this.goto = (slide) => {
- //console.log("goto", slide);
- if (slide !== self.current_slide) {
- if (self.playing) {
- clearTimeout(self.playing);
- self.animate_bar();
- }
- else {
- self.autohide();
- }
-
- //playing ? animate_bar() : autohide();
- const direction = slide > self.current_slide;
- self.current_slide = slide;
- self.setup_page(direction);
- //options_autoslide && play(true, true);
- return true;
- }
- }
-
- this.prepare = (direction) => {
-
- //console.log("prepare", direction);
-
- let anchor = self.anchors[self.current_slide - 1];
-
- self.apply_options(anchor);
- const speed = connection && connection["downlink"];
- let size = Math.max(self.viewport_h, self.viewport_w) * dpr;
- if (speed && ((speed * 1200) < size)) {
- size = speed * 1200;
- }
- let tmp;
- self.gallery = {
- media: self.options_media,
- src: self.parse_src(anchor, size, self.options, self.options_media),
- title: self.parse_option("title",
- anchor["alt"] || anchor["title"] ||
- // inherit title from a direct child only
- ((tmp = anchor.firstElementChild) && (tmp["alt"] || tmp["title"]))
- )
- };
-
- self.gallery_next && (self.media_next.src = self.gallery_next = "");
-
- if (self.options_preload && direction) {
- if ((anchor = self.anchors[self.current_slide])) {
- const options_next = anchor.dataset || anchor;
- const next_media = options_next["media"];
- if (!next_media || (next_media === "image")) {
- self.gallery_next = self.parse_src(anchor, size, options_next, next_media);
- }
- }
- }
-
- // apply controls
-
- for (let i = 0; i < self.controls.length; i++) {
- const option = self.controls[i];
- //console.log(option + ": ", options[option]);
- self.toggleDisplay(self.controls_dom[option], self.parse_option(option, self.controls_default[option]));
- }
- }
-
- this.setup_page = (direction) => {
- //console.log("setup_page", direction);
- self.x = 0;
- self.y = 0;
- self.scale = 1;
-
- if (self.media) {
- // Note: the onerror callback was removed when the image was fully loaded (also for video)
- if (self.media.onerror) {
- self.checkout(self.media);
- }
- else {
- let ref = self.media;
- setTimeout(function () {
- if (ref && (self.media !== ref)) {
- self.checkout(ref);
- ref = null;
- }
- }, 650);
-
- // animate out the old image
- self.prepare_animation();
- self.update_panel();
- }
- }
-
- self.footer && self.toggleVisibility(self.footer, 0);
-
- self.prepare(direction);
- self.update_slider(self.current_slide - 1);
- self.removeClass(self.spinner, "error");
- self.init_slide(self.current_slide);
- self.toggleAnimation(self.panel);
- self.update_panel();
-
- const str_title = self.gallery.title;
- const str_description = self.parse_option("description");
- const str_button = self.parse_option("button");
- const has_content = str_title || str_description || str_button;
-
- if (has_content) {
-
- str_title && self.setText(self.title, str_title);
- str_description && self.setText(self.description, str_description);
- str_button && self.setText(self.button, str_button);
-
- self.toggleDisplay(self.title, str_title);
- self.toggleDisplay(self.description, str_description);
- self.toggleDisplay(self.button, str_button);
-
- self.setStyle(self.footer, "transform", self.options_autohide === "all" ? "" : "none");
- }
-
- self.options_autohide || self.addClass(self.widget, "menu");
-
- self.toggleVisibility(self.footer, self.footer_visible && has_content);
- self.toggleVisibility(self.page_prev, self.options_infinite || (self.current_slide > 1));
- self.toggleVisibility(self.page_next, self.options_infinite || (self.current_slide < self.slide_count));
- self.setText(self.page, self.slide_count > 1 ? self.current_slide + " / " + self.slide_count : "");
-
- self.options_onchange && self.options_onchange(self.current_slide, self.options);
- }
- /*
- const isWebkit = property => {
- if (typeof document.documentElement.style[property] === 'string') {
- return property;
- }
- // Capitalize the first letter
- property = property.charAt(0).toUpperCase() + property.slice(1);
- return `webkit${property}`;
- };
- */
-
- /* const extendDefaults = (defaults, properties) => {
- let property, propertyDeep;
- if (properties != undefined && properties != 'undefined') {
- for (property in properties) {
- const propObj = properties[property];
-
- if (typeof propObj === 'object') {
- for (propertyDeep in propObj) {
- defaults[property][propertyDeep] = propObj[propertyDeep];
- }
- } else {
- defaults[property] = propObj;
- }
- }
- }
- return defaults;
- }; */
-
- //this.init();
- };
-
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = Spotlight;
- } else {
- window.Spotlight = Spotlight;
- }
-
-})(window);
\ No newline at end of file
+!function(e){"use strict";let t=function(t,i={}){this.controls=["info","theme","download","play","page","close","autofit","zoom-in","zoom-out","prev","next","fullscreen"],this.controls_default={page:1,close:1,autofit:1,"zoom-in":1,"zoom-out":1,prev:1,next:1,fullscreen:1},this.keycodes={BACKSPACE:8,ESCAPE:27,SPACEBAR:32,LEFT:37,RIGHT:39,UP:38,NUMBLOCK_PLUS:107,PLUS:187,DOWN:40,NUMBLOCK_MINUS:109,MINUS:189,INFO:73};let s=this;Object.assign||(Object.assign=function(e,t){let i=Object.keys(t);for(let s=0,o;s{s.toggleClass(e,t,!0)},this.removeClass=(e,t)=>{s.toggleClass(e,t)},this.toggleClass=(e,t,i)=>{e.classList[i?"add":"remove"](t)},this.hasClass=(e,t)=>e.classList.contains(t),this.setStyle=(e,t,i)=>{i=""+i,e["_s_"+t]!==i&&(e.style.setProperty(t,i),e["_s_"+t]=i)};let o=0;this.prepareStyle=(e,t)=>{t&&(s.setStyle(e,"transition","none"),t()),o||(o=e.clientTop&&0),t&&s.setStyle(e,"transition","")},this.setText=(e,t)=>{e.firstChild.nodeValue=t},this.getByClass=(e,t)=>(t||document).getElementsByClassName(e),this.getByTag=(e,t)=>(t||document).getElementsByTagName(e),this.addListener=(e,t,i,o)=>{s.toggleListener(!0,e,t,i,o)},this.removeListener=(e,t,i,o)=>{s.toggleListener(!1,e,t,i,o)},this.toggleListener=(e,t,i,s,o)=>{t[(e?"add":"remove")+"EventListener"](i,s,!o&&!1!==o||o)},this.cancelEvent=(e,t)=>{e.stopPropagation(),t&&e.preventDefault()},this.downloadImage=(e,t)=>{let i=s.createElement("a"),o=t.src;i.href=o,i.download=o.substring(o.lastIndexOf("/")+1),s.body.appendChild(i),i.click(),s.body.removeChild(i)},this.createElement=e=>document.createElement(e),this.toggleDisplay=(e,t)=>{s.setStyle(e,"display",t?"":"none")},this.toggleVisibility=(e,t)=>{s.setStyle(e,"visibility",t?"":"hidden")},this.toggleAnimation=(e,t)=>{s.setStyle(e,"transition",t?"":"none")},this.widget=this.createElement("div"),this.widget.innerHTML="",this.video_support={},this.tpl_video=this.createElement("video"),this.parse_src=(e,t,i,o)=>{let n,l;if("node"!==o){let a=Object.keys(i);for(let r=0,d;r3&&0===d.indexOf("src")){if("video"===o){let p=s.video_support[d];if(p){if(p>0){n=i[d];break}}else if(s.tpl_video.canPlayType("video/"+d.substring(3).replace("-","").toLowerCase())){s.video_support[d]=1,n=i[d];break}else s.video_support[d]=-1}else{let c=parseInt(d.substring(4),10);if(c){let h=Math.abs(t-c);(!l||h{!s.body&&(s.id="spotlight"+t,s.widget.id="spotlight"+t,s.doc=document.body,s.body=e,s.slider=s.getOneByClass("scene"),s.header=s.getOneByClass("header"),s.footer=s.getOneByClass("footer"),s.title=s.getOneByClass("title"),s.description=s.getOneByClass("description"),s.button=s.getOneByClass("button"),s.page_prev=s.getOneByClass("prev"),s.page_next=s.getOneByClass("next"),s.page=s.getOneByClass("page"),s.progress=s.getOneByClass("progress"),s.spinner=s.getOneByClass("spinner"),s.panes=[s.getOneByClass("pane")],s.addControl("close",s.close),s.doc[s.prefix_request="requestFullscreen"]||s.doc[s.prefix_request="msRequestFullscreen"]||s.doc[s.prefix_request="webkitRequestFullscreen"]||s.doc[s.prefix_request="mozRequestFullscreen"]||(s.prefix_request=""),s.prefix_request?(s.prefix_exit=s.prefix_request.replace("request","exit").replace("mozRequest","mozCancel").replace("Request","Exit"),s.maximize=s.addControl("fullscreen",s.fullscreen)):s.controls.pop(),s.addControl("info",s.info),s.addControl("autofit",s.autofit),s.addControl("zoom-in",s.zoom_in),s.addControl("zoom-out",s.zoom_out),s.addControl("theme",s.theme),s.player=s.addControl("play",s.play),s.addControl("download",s.download),s.addListener(s.page_prev,"click",s.prev),s.addListener(s.page_next,"click",s.next),s.track=s.getOneByClass("track"),s.addListener(s.track,"mousedown",s.start),s.addListener(s.track,"mousemove",s.move),s.addListener(s.track,"mouseleave",s.end),s.addListener(s.track,"mouseup",s.end),s.addListener(s.track,"touchstart",s.start,{passive:!1}),s.addListener(s.track,"touchmove",s.move,{passive:!0}),s.addListener(s.track,"touchend",s.end),s.addListener(s.button,"click",function(){s.options_click?s.options_click(s.current_slide,s.options):s.options_href&&(location.href=s.options_href)}))},this.getOneByClass=e=>this.controls_dom[e]=this.getByClass("spl-"+e,this.widget)[0],this.addControl=(e,t,i="")=>{let o=s.createElement("div");return o.className="spl-"+e,o.innerHTML=i,s.addListener(o,"click",t),s.header.appendChild(o),s.controls_dom[e]=o},this.removeControl=e=>{let t=s.controls_dom[e];t&&(s.header.removeChild(t),s.controls_dom[e]=null)},this.dispatch=e=>{let t=e.target.closest(".spotlight");if(t){s.cancelEvent(e,!0);let i=t.closest(".spotlight-group");s.anchors=s.getByClass("spotlight",i);for(let o=0;o{s.anchors=e,t&&(s.options_group=t,s.options_onshow=t.onshow,s.options_onchange=t.onchange,s.options_onclose=t.onclose,i=i||t.index),s.init_gallery(i)},this.panzoom=e=>{s.toggleListener(e,s.track,"wheel",s.wheel_listener,{passive:!1}),s.toggleListener(e,s.track,"mousedown",s.start),s.toggleListener(e,s.track,"mousemove",s.move),s.toggleListener(e,s.track,"mouseleave",s.end),s.toggleListener(e,s.track,"mouseup",s.end),s.toggleListener(e,s.track,"touchstart",s.start,{passive:!1}),s.toggleListener(e,s.track,"touchmove",s.move,{passive:!0}),s.toggleListener(e,s.track,"touchend",s.end)},this.init_gallery=e=>{if(s.slide_count=s.anchors.length,s.slide_count){s.body||s.init(),s.options_onshow&&s.options_onshow(e);let t=s.panes[0],i=t.parentElement;for(let o=s.panes.length;o{let s=i[e];return void 0!==s?"false"!=(s=""+s)&&(s||t):t},this.apply_options=e=>{s.options={},s.options_group&&Object.assign(s.options,s.options_group),Object.assign(s.options,e.dataset||e),s.options_media=s.options.media,s.options_click=s.options.onclick,s.options_theme=s.options.theme,s.options_class=s.options.class,s.options_autohide=s.parse_option("autohide",!1),s.options_infinite=s.parse_option("infinite"),s.options_progress=s.parse_option("progress",!0),s.options_autoslide=s.parse_option("autoslide"),s.options_preload=s.parse_option("preload",!0),s.options_href=s.options.buttonHref,s.delay=s.options_autoslide&&parseFloat(s.options_autoslide)||7,s.toggle_theme||s.options_theme&&s.theme(s.options_theme),s.options_class&&s.addClass(s.widget,s.options_class),s.options_class&&s.prepareStyle(s.widget);let t=s.options.control;if(t){let i="string"==typeof t?t.split(","):t;for(let o=0;o{e?s.prepareStyle(s.media,s.prepare_animation):(s.toggleAnimation(s.slider,s.animation_slide),s.setStyle(s.media,"opacity",s.animation_fade?0:1),s.update_scroll(s.animation_scale&&.8),s.animation_custom&&s.addClass(s.media,s.animation_custom))},this.init_slide=e=>{if(s.panel=s.panes[e-1],s.media=s.panel.firstChild,s.current_slide=e,s.media)s.disable_autoresizer(),s.options_fit&&s.addClass(s.media,s.options_fit),s.prepare_animation(!0),s.animation_custom&&s.removeClass(s.media,s.animation_custom),s.animation_fade&&s.setStyle(s.media,"opacity",1),s.animation_scale&&s.setStyle(s.media,"transform",""),s.setStyle(s.media,"visibility","visible"),s.gallery_next&&(s.media_next.src=s.gallery_next),s.options_autoslide&&s.animate_bar(s.playing);else{let t=s.gallery.media;if(s.parse_option("spinner",!0),"node"===t){s.media=s.gallery.src,"string"==typeof s.media&&(s.media=gradioApp().querySelector(s.media)),s.media&&(s.media._root||(s.media._root=s.media.parentElement),s.update_media_viewport(),s.panel.appendChild(s.media),s.init_slide(e));return}s.toggle_spinner(s.options_spinner,!0),s.media=s.createElement("img"),s.media.onload=function(){s.media===s&&(s.media.onerror=null,s.toggle_spinner(s.options_spinner),s.init_slide(e),s.update_media_viewport())},s.media.src=s.gallery.src,s.panel.appendChild(s.media),s.media&&(s.options_spinner||s.setStyle(s.media,"visibility","visible"),s.media.onerror=function(){s.media===s&&(s.checkout(s.media),s.addClass(s.spinner,"error"),s.toggle_spinner(s.options_spinner))})}},this.toggle_spinner=(e,t)=>{e&&s.toggleClass(s.spinner,"spin",t)},this.has_fullscreen=()=>document.fullscreen||document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement,this.resize_listener=()=>{if(s.update_widget_viewport(),s.media&&s.update_media_viewport(),s.prefix_request){let e=s.has_fullscreen();s.toggleClass(s.maximize,"on",e),e||s.detect_fullscreen()}},this.detect_fullscreen=()=>{s.toggleDisplay(s.maximize,screen.availHeight-e.innerHeight>0)},this.update_widget_viewport=()=>{s.viewport_w=s.widget.clientWidth,s.viewport_h=s.widget.clientHeight},this.update_media_viewport=()=>{s.media_w=s.media.clientWidth,s.media_h=s.media.clientHeight},this.update_scroll=e=>{s.setStyle(s.media,"transform","translate(-50%, -50%) scale("+(e||s.scale)+")")},this.update_panel=(e,t)=>{s.setStyle(s.panel,"transform",e||t?"translate("+e+"px, "+t+"px)":"")},this.update_slider=(e,t,i)=>{t?s.prepareStyle(s.slider,function(){s.update_slider(e,!1,i)}):s.setStyle(s.slider,"transform","translateX("+(-(100*e)+(i||0))+"%)")},this.toggle_listener=t=>{s.toggleListener(t,e,"keydown",s.key_listener),s.toggleListener(t,e,"resize",s.resize_listener)},this.history_listener=e=>{s.panel&&e.state.spl&&s.close(!0)},this.key_listener=e=>{if(s.panel){let t=!1!==s.options["zoom-in"];switch(e.keyCode){case s.keycodes.BACKSPACE:t&&s.autofit();break;case s.keycodes.ESCAPE:s.close();break;case s.keycodes.SPACEBAR:s.options_autoslide&&s.play();break;case s.keycodes.LEFT:s.prev();break;case s.keycodes.RIGHT:s.next();break;case s.keycodes.UP:case s.keycodes.NUMBLOCK_PLUS:case s.keycodes.PLUS:t&&s.zoom_in();break;case s.keycodes.DOWN:case s.keycodes.NUMBLOCK_MINUS:case s.keycodes.MINUS:t&&s.zoom_out();break;case s.keycodes.INFO:s.info()}}},this.wheel_listener=e=>{if(s.panel&&!1!==s.options["zoom-in"]){let t=e.deltaY;(t=(t<0?1:t?-1:0)*.5)<0?s.zoom_out():s.zoom_in()}},this.play=(e,t)=>{let i="boolean"==typeof e?e:!this.playing;!s.playing===i&&(s.playing=s.playing?clearTimeout(s.playing):1,s.toggleClass(s.player,"on",s.playing),t||s.animate_bar(s.playing))},this.animate_bar=e=>{s.options_progress&&(s.prepareStyle(s.progress,function(){s.setStyle(s.progress,"transition-duration",""),s.setStyle(s.progress,"transform","")}),e&&(s.setStyle(s.progress,"transition-duration",s.delay+"s"),s.setStyle(s.progress,"transform","translateX(0)"))),e&&(s.playing=setTimeout(s.next,1e3*s.delay))},this.autohide=()=>{s.options_autohide&&(s.hide_cooldown=Date.now()+2950,s.hide||(s.addClass(s.widget,"menu"),s.schedule(3e3)))},this.schedule=e=>{s.hide=setTimeout(function(){let e=Date.now();e>=s.hide_cooldown?(s.removeClass(s.widget,"menu"),s.hide=0):s.schedule(s.hide_cooldown-e)},e)},this.menu=e=>{"boolean"==typeof e&&(s.hide=e?s.hide:0),s.hide?(s.hide=clearTimeout(s.hide),s.removeClass(s.widget,"menu")):s.autohide()},this.start=e=>{s.cancelEvent(e,!0),s.is_down=!0,s.dragged=!1;let t=e.touches;t&&(t=t[0])&&(e=t),s.slidable=s.media_w*s.scale<=s.viewport_w,s.startX=e.pageX,s.startY=e.pageY,s.toggleAnimation(s.panel)},this.end=e=>{if(s.cancelEvent(e),s.is_down){if(s.dragged){if(s.slidable&&s.dragged){let t=s.x<-(s.viewport_w/7)&&(s.current_slides.viewport_w/7&&(s.current_slide>1||s.options_infinite);(t||i)&&(s.update_slider(s.current_slide-1,!0,s.x/s.viewport_w*100),t&&s.next()||i&&s.prev()),s.x=0,s.update_panel()}s.toggleAnimation(s.panel,!0)}else s.menu();s.is_down=!1}},this.move=e=>{if(s.cancelEvent(e),s.is_down){let t=e.touches;t&&(t=t[0])&&(e=t);let i=(s.media_w*s.scale-s.viewport_w)/2;s.x-=s.startX-(s.startX=e.pageX),!s.slidable&&(s.x>i?s.x=i:s.x<-i&&(s.x=-i),s.media_h*s.scale>s.viewport_h&&(i=(s.media_h*s.scale-s.viewport_h)/2,s.y-=s.startY-(s.startY=e.pageY),s.y>i?s.y=i:s.y<-i&&(s.y=-i))),s.dragged=!0,s.update_panel(s.x,s.y)}else s.autohide()},this.fullscreen=e=>{let t=s.has_fullscreen();("boolean"!=typeof e||!!t!==e)&&(t?document[s.prefix_exit]():s.widget[s.prefix_request]())},this.theme=e=>{"string"!=typeof e&&(e=s.toggle_theme?"":s.options_theme||"white"),s.toggle_theme!==e&&(s.toggle_theme&&s.removeClass(s.widget,s.toggle_theme),e&&s.addClass(s.widget,e),s.toggle_theme=e)},this.autofit=e=>{"boolean"==typeof e&&(s.toggle_autofit=!e),s.toggle_autofit=1===s.scale&&!s.toggle_autofit,s.toggleClass(s.media,"autofit",s.toggle_autofit),s.setStyle(s.media,"transform",""),s.scale=1,s.x=0,s.y=0,s.update_media_viewport(),s.toggleAnimation(s.panel),s.update_panel()},this.zoom_in=e=>{let t=s.scale/.65;t<=50&&(s.disable_autoresizer(),s.x/=.65,s.y/=.65,s.update_panel(s.x,s.y),s.zoom(t))},this.zoom_out=e=>{let t=.65*s.scale;s.disable_autoresizer(),t>=1&&(1===t?s.x=s.y=0:(s.x*=.65,s.y*=.65),s.update_panel(s.x,s.y),s.zoom(t))},this.zoom=e=>{s.scale=e||1,s.update_scroll()},this.info=()=>{s.footer_visible=!s.footer_visible,s.toggleVisibility(s.footer,s.footer_visible)},this.disable_autoresizer=()=>{s.toggle_autofit&&s.autofit()},this.show_gallery=()=>{s.toggleAnimation(s.widget,!0),s.addClass(s.body,"hide-scrollbars"),s.addClass(s.widget,"show"),s.toggle_listener(!0),s.update_widget_viewport(),s.resize_listener(),s.autohide(),s.options_autoslide&&s.play(!0,!0)},this.download=()=>{s.downloadImage(s.body,s.media)},this.close=(e,t)=>{if(s.hasClass(s.body,"relative")&&!t){s.fullscreen(!1);return}t||setTimeout(function(){s.body.removeChild(s.widget),s.panel=s.media=s.gallery=s.options=s.options_group=s.anchors=s.options_onshow=s.options_onchange=s.options_onclose=s.options_click=null},200),s.removeClass(s.body,"hide-scrollbars"),s.removeClass(s.widget,"show"),s.fullscreen(!1),s.toggle_listener(),s.gallery_next&&(s.media_next.src=""),s.playing&&s.play(),s.media&&s.checkout(s.media),s.hide&&(s.hide=clearTimeout(s.hide)),s.toggle_theme&&s.theme(),s.options_class&&s.removeClass(s.widget,s.options_class),s.options_onclose&&s.options_onclose(),t&&(s.body.removeChild(s.widget),s.panel=s.media=s.gallery=s.options=s.options_group=s.anchors=s.options_onshow=s.options_onchange=s.options_onclose=s.options_click=null)},this.checkout=e=>{if(e._root)e._root.appendChild(e),e._root=null;else{let t=e.parentNode;t&&t.removeChild(e),e=e.src=e.onerror=""}},this.prev=e=>{if(e&&s.autohide(),s.slide_count>1){if(s.current_slide>1)return s.goto(s.current_slide-1);if(s.options_infinite)return s.update_slider(s.slide_count,!0),s.goto(s.slide_count)}},this.next=e=>{if(e&&s.autohide(),s.slide_count>1){if(s.current_slide{if(e!==s.current_slide){s.playing?(clearTimeout(s.playing),s.animate_bar()):s.autohide();let t=e>s.current_slide;return s.current_slide=e,s.setup_page(t),!0}},this.prepare=e=>{let t=s.anchors[s.current_slide-1];s.apply_options(t);let i=n&&n.downlink,o=Math.max(s.viewport_h,s.viewport_w)*l;i&&1200*i{if(s.x=0,s.y=0,s.scale=1,s.media){if(s.media.onerror)s.checkout(s.media);else{let t=s.media;setTimeout(function(){t&&s.media!==t&&(s.checkout(t),t=null)},650),s.prepare_animation(),s.update_panel()}}s.footer&&s.toggleVisibility(s.footer,0),s.prepare(e),s.update_slider(s.current_slide-1),s.removeClass(s.spinner,"error"),s.init_slide(s.current_slide),s.toggleAnimation(s.panel),s.update_panel();let i=s.gallery.title,o=s.parse_option("description"),n=s.parse_option("button"),l=i||o||n;l&&(i&&s.setText(s.title,i),o&&s.setText(s.description,o),n&&s.setText(s.button,n),s.toggleDisplay(s.title,i),s.toggleDisplay(s.description,o),s.toggleDisplay(s.button,n),s.setStyle(s.footer,"transform","all"===s.options_autohide?"":"none")),s.options_autohide||s.addClass(s.widget,"menu"),s.toggleVisibility(s.footer,s.footer_visible&&l),s.toggleVisibility(s.page_prev,s.options_infinite||s.current_slide>1),s.toggleVisibility(s.page_next,s.options_infinite||s.current_slide1?s.current_slide+" / "+s.slide_count:""),s.options_onchange&&s.options_onchange(s.current_slide,s.options)}};"undefined"!=typeof module&&void 0!==module.exports?module.exports=t:e.Spotlight=t}(window);
\ No newline at end of file