JonnyPaes

StPageFlip.js

Jun 6th, 2023
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. !(function (t) {
  2.     var e = {};
  3.     function i(s) {
  4.         if (e[s]) return e[s].exports;
  5.         var n = (e[s] = { i: s, l: !1, exports: {} });
  6.         return t[s].call(n.exports, n, n.exports, i), (n.l = !0), n.exports;
  7.     }
  8.     (i.m = t),
  9.         (i.c = e),
  10.         (i.d = function (t, e, s) {
  11.             i.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: s });
  12.         }),
  13.         (i.r = function (t) {
  14.             "undefined" != typeof Symbol &&
  15.                 Symbol.toStringTag &&
  16.                 Object.defineProperty(t, Symbol.toStringTag, { value: "Module" }),
  17.                 Object.defineProperty(t, "__esModule", { value: !0 });
  18.         }),
  19.         (i.t = function (t, e) {
  20.             if ((1 & e && (t = i(t)), 8 & e)) return t;
  21.             if (4 & e && "object" == typeof t && t && t.__esModule) return t;
  22.             var s = Object.create(null);
  23.             if (
  24.                 (i.r(s),
  25.                 Object.defineProperty(s, "default", { enumerable: !0, value: t }),
  26.                 2 & e && "string" != typeof t)
  27.             )
  28.                 for (var n in t)
  29.                     i.d(
  30.                         s,
  31.                         n,
  32.                         function (e) {
  33.                             return t[e];
  34.                         }.bind(null, n)
  35.                     );
  36.             return s;
  37.         }),
  38.         (i.n = function (t) {
  39.             var e =
  40.                 t && t.__esModule
  41.                     ? function () {
  42.                             return t.default;
  43.                       }
  44.                     : function () {
  45.                             return t;
  46.                       };
  47.             return i.d(e, "a", e), e;
  48.         }),
  49.         (i.o = function (t, e) {
  50.             return Object.prototype.hasOwnProperty.call(t, e);
  51.         }),
  52.         (i.p = ""),
  53.         i((i.s = 1));
  54. })([
  55.     function (t, e, i) {
  56.         var s = i(2),
  57.             n = i(3);
  58.         "string" == typeof (n = n.__esModule ? n.default : n) && (n = [[t.i, n, ""]]);
  59.         var o = { insert: "head", singleton: !1 };
  60.         s(n, o);
  61.         t.exports = n.locals || {};
  62.     },
  63.     function (t, e, i) {
  64.         i(6), (t.exports = i(5));
  65.     },
  66.     function (t, e, i) {
  67.         "use strict";
  68.         var s,
  69.             n = function () {
  70.                 return (
  71.                     void 0 === s &&
  72.                         (s = Boolean(window && document && document.all && !window.atob)),
  73.                     s
  74.                 );
  75.             },
  76.             o = (function () {
  77.                 var t = {};
  78.                 return function (e) {
  79.                     if (void 0 === t[e]) {
  80.                         var i = document.querySelector(e);
  81.                         if (window.HTMLIFrameElement && i instanceof window.HTMLIFrameElement)
  82.                             try {
  83.                                 i = i.contentDocument.head;
  84.                             } catch (t) {
  85.                                 i = null;
  86.                             }
  87.                         t[e] = i;
  88.                     }
  89.                     return t[e];
  90.                 };
  91.             })(),
  92.             h = [];
  93.         function a(t) {
  94.             for (var e = -1, i = 0; i < h.length; i++)
  95.                 if (h[i].identifier === t) {
  96.                     e = i;
  97.                     break;
  98.                 }
  99.             return e;
  100.         }
  101.         function r(t, e) {
  102.             for (var i = {}, s = [], n = 0; n < t.length; n++) {
  103.                 var o = t[n],
  104.                     r = e.base ? o[0] + e.base : o[0],
  105.                     l = i[r] || 0,
  106.                     g = "".concat(r, " ").concat(l);
  107.                 i[r] = l + 1;
  108.                 var c = a(g),
  109.                     d = { css: o[1], media: o[2], sourceMap: o[3] };
  110.                 -1 !== c
  111.                     ? (h[c].references++, h[c].updater(d))
  112.                     : h.push({ identifier: g, updater: f(d, e), references: 1 }),
  113.                     s.push(g);
  114.             }
  115.             return s;
  116.         }
  117.         function l(t) {
  118.             var e = document.createElement("style"),
  119.                 s = t.attributes || {};
  120.             if (void 0 === s.nonce) {
  121.                 var n = i.nc;
  122.                 n && (s.nonce = n);
  123.             }
  124.             if (
  125.                 (Object.keys(s).forEach(function (t) {
  126.                     e.setAttribute(t, s[t]);
  127.                 }),
  128.                 "function" == typeof t.insert)
  129.             )
  130.                 t.insert(e);
  131.             else {
  132.                 var h = o(t.insert || "head");
  133.                 if (!h)
  134.                     throw new Error(
  135.                         "Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."
  136.                     );
  137.                 h.appendChild(e);
  138.             }
  139.             return e;
  140.         }
  141.         var g,
  142.             c =
  143.                 ((g = []),
  144.                 function (t, e) {
  145.                     return (g[t] = e), g.filter(Boolean).join("\n");
  146.                 });
  147.         function d(t, e, i, s) {
  148.             var n = i
  149.                 ? ""
  150.                 : s.media
  151.                 ? "@media ".concat(s.media, " {").concat(s.css, "}")
  152.                 : s.css;
  153.             if (t.styleSheet) t.styleSheet.cssText = c(e, n);
  154.             else {
  155.                 var o = document.createTextNode(n),
  156.                     h = t.childNodes;
  157.                 h[e] && t.removeChild(h[e]),
  158.                     h.length ? t.insertBefore(o, h[e]) : t.appendChild(o);
  159.             }
  160.         }
  161.         function p(t, e, i) {
  162.             var s = i.css,
  163.                 n = i.media,
  164.                 o = i.sourceMap;
  165.             if (
  166.                 (n ? t.setAttribute("media", n) : t.removeAttribute("media"),
  167.                 o &&
  168.                     btoa &&
  169.                     (s += "\n/*# sourceMappingURL=data:application/json;base64,".concat(
  170.                         btoa(unescape(encodeURIComponent(JSON.stringify(o)))),
  171.                         " */"
  172.                     )),
  173.                 t.styleSheet)
  174.             )
  175.                 t.styleSheet.cssText = s;
  176.             else {
  177.                 for (; t.firstChild; ) t.removeChild(t.firstChild);
  178.                 t.appendChild(document.createTextNode(s));
  179.             }
  180.         }
  181.         var u = null,
  182.             m = 0;
  183.         function f(t, e) {
  184.             var i, s, n;
  185.             if (e.singleton) {
  186.                 var o = m++;
  187.                 (i = u || (u = l(e))),
  188.                     (s = d.bind(null, i, o, !1)),
  189.                     (n = d.bind(null, i, o, !0));
  190.             } else
  191.                 (i = l(e)),
  192.                     (s = p.bind(null, i, e)),
  193.                     (n = function () {
  194.                         !(function (t) {
  195.                             if (null === t.parentNode) return !1;
  196.                             t.parentNode.removeChild(t);
  197.                         })(i);
  198.                     });
  199.             return (
  200.                 s(t),
  201.                 function (e) {
  202.                     if (e) {
  203.                         if (e.css === t.css && e.media === t.media && e.sourceMap === t.sourceMap)
  204.                             return;
  205.                         s((t = e));
  206.                     } else n();
  207.                 }
  208.             );
  209.         }
  210.         t.exports = function (t, e) {
  211.             (e = e || {}).singleton ||
  212.                 "boolean" == typeof e.singleton ||
  213.                 (e.singleton = n());
  214.             var i = r((t = t || []), e);
  215.             return function (t) {
  216.                 if (
  217.                     ((t = t || []), "[object Array]" === Object.prototype.toString.call(t))
  218.                 ) {
  219.                     for (var s = 0; s < i.length; s++) {
  220.                         var n = a(i[s]);
  221.                         h[n].references--;
  222.                     }
  223.                     for (var o = r(t, e), l = 0; l < i.length; l++) {
  224.                         var g = a(i[l]);
  225.                         0 === h[g].references && (h[g].updater(), h.splice(g, 1));
  226.                     }
  227.                     i = o;
  228.                 }
  229.             };
  230.         };
  231.     },
  232.     function (t, e, i) {
  233.         (e = i(4)(!1)).push([
  234.             t.i,
  235.             ".stf__wrapper {\n  position: relative;\n  display: block;\n  box-sizing: border-box;\n  transform: translateZ(0);\n}\n\n.stf__wrapper canvas {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  left: 0;\n  top: 0;\n}\n\n.stf__block {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n}\n\n.stf__item {\n  display: none;\n  position: absolute;\n}\n\n.stf__outerShadow {\n  position: absolute;\n}\n\n.stf__innerShadow {\n  position: absolute;\n}",
  236.             ""
  237.         ]),
  238.             (t.exports = e);
  239.     },
  240.     function (t, e, i) {
  241.         "use strict";
  242.         t.exports = function (t) {
  243.             var e = [];
  244.             return (
  245.                 (e.toString = function () {
  246.                     return this.map(function (e) {
  247.                         var i = (function (t, e) {
  248.                             var i = t[1] || "",
  249.                                 s = t[3];
  250.                             if (!s) return i;
  251.                             if (e && "function" == typeof btoa) {
  252.                                 var n =
  253.                                         ((h = s),
  254.                                         (a = btoa(unescape(encodeURIComponent(JSON.stringify(h))))),
  255.                                         (r = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(
  256.                                             a
  257.                                         )),
  258.                                         "/*# ".concat(r, " */")),
  259.                                     o = s.sources.map(function (t) {
  260.                                         return "/*# sourceURL=".concat(s.sourceRoot || "").concat(t, " */");
  261.                                     });
  262.                                 return [i].concat(o).concat([n]).join("\n");
  263.                             }
  264.                             var h, a, r;
  265.                             return [i].join("\n");
  266.                         })(e, t);
  267.                         return e[2] ? "@media ".concat(e[2], " {").concat(i, "}") : i;
  268.                     }).join("");
  269.                 }),
  270.                 (e.i = function (t, i, s) {
  271.                     "string" == typeof t && (t = [[null, t, ""]]);
  272.                     var n = {};
  273.                     if (s)
  274.                         for (var o = 0; o < this.length; o++) {
  275.                             var h = this[o][0];
  276.                             null != h && (n[h] = !0);
  277.                         }
  278.                     for (var a = 0; a < t.length; a++) {
  279.                         var r = [].concat(t[a]);
  280.                         (s && n[r[0]]) ||
  281.                             (i && (r[2] ? (r[2] = "".concat(i, " and ").concat(r[2])) : (r[2] = i)),
  282.                             e.push(r));
  283.                     }
  284.                 }),
  285.                 e
  286.             );
  287.         };
  288.     },
  289.     function (t, e, i) {},
  290.     function (t, e, i) {
  291.         "use strict";
  292.         i.r(e);
  293.         class s {
  294.             constructor(t) {
  295.                 (this.state = {
  296.                     angle: 0,
  297.                     area: [],
  298.                     corners: null,
  299.                     position: { x: 0, y: 0 }
  300.                 }),
  301.                     (this.render = t);
  302.             }
  303.             setPosition(t) {
  304.                 this.state.position = t;
  305.             }
  306.             setAngle(t) {
  307.                 this.state.angle = t;
  308.             }
  309.             setArea(t) {
  310.                 this.state.area = t;
  311.             }
  312.             setCorners(t) {
  313.                 this.state.corners = t;
  314.             }
  315.             getAngle() {
  316.                 return this.state.angle;
  317.             }
  318.         }
  319.         class n extends s {
  320.             constructor(t, e) {
  321.                 super(t),
  322.                     (this.image = null),
  323.                     (this.isLoad = !1),
  324.                     (this.loadingAngle = 0),
  325.                     (this.image = new Image()),
  326.                     (this.image.src = e);
  327.             }
  328.             draw() {
  329.                 const t = this.render.getContext(),
  330.                     e = this.render.convertToGlobal(this.state.position),
  331.                     i = this.render.getRect().pageWidth,
  332.                     s = this.render.getRect().height;
  333.                 t.save(), t.translate(e.x, e.y), t.beginPath();
  334.                 for (let i of this.state.area)
  335.                     null !== i &&
  336.                         ((i = this.render.convertToGlobal(i)), t.lineTo(i.x - e.x, i.y - e.y));
  337.                 if ((t.rotate(this.state.angle), t.clip(), this.isLoad))
  338.                     t.drawImage(this.image, 0, 0, i, s);
  339.                 else {
  340.                     t.beginPath(),
  341.                         (t.strokeStyle = "rgb(200, 200, 200)"),
  342.                         (t.fillStyle = "rgb(255, 255, 255)"),
  343.                         (t.lineWidth = 1),
  344.                         t.rect(1, 1, i - 1, s - 1),
  345.                         t.stroke(),
  346.                         t.fill();
  347.                     const e = { x: i / 2, y: s / 2 };
  348.                     t.beginPath(),
  349.                         (t.lineWidth = 10),
  350.                         t.arc(
  351.                             e.x,
  352.                             e.y,
  353.                             20,
  354.                             this.loadingAngle,
  355.                             (3 * Math.PI) / 2 + this.loadingAngle
  356.                         ),
  357.                         t.stroke(),
  358.                         t.closePath(),
  359.                         (this.loadingAngle += 0.07),
  360.                         this.loadingAngle >= 2 * Math.PI && (this.loadingAngle = 0);
  361.                 }
  362.                 t.restore();
  363.             }
  364.             simpleDraw(t) {
  365.                 const e = this.render.getRect(),
  366.                     i = this.render.getContext(),
  367.                     s = e.pageWidth,
  368.                     n = e.height,
  369.                     o = 1 === t ? e.left + e.pageWidth : e.left,
  370.                     h = e.top;
  371.                 if (this.isLoad) i.drawImage(this.image, o, h, s, n);
  372.                 else {
  373.                     i.beginPath(),
  374.                         (i.strokeStyle = "rgb(200, 200, 200)"),
  375.                         (i.fillStyle = "rgb(255, 255, 255)"),
  376.                         (i.lineWidth = 1),
  377.                         i.rect(o + 1, h + 1, s - 1, n - 1),
  378.                         i.stroke(),
  379.                         i.fill();
  380.                     const t = { x: o + s / 2, y: h + n / 2 };
  381.                     i.beginPath(),
  382.                         (i.lineWidth = 10),
  383.                         i.arc(
  384.                             t.x,
  385.                             t.y,
  386.                             20,
  387.                             this.loadingAngle,
  388.                             (3 * Math.PI) / 2 + this.loadingAngle
  389.                         ),
  390.                         i.stroke(),
  391.                         i.closePath(),
  392.                         (this.loadingAngle += 0.07),
  393.                         this.loadingAngle >= 2 * Math.PI && (this.loadingAngle = 0);
  394.                 }
  395.             }
  396.             load() {
  397.                 this.isLoad ||
  398.                     (this.image.onload = () => {
  399.                         this.isLoad = !0;
  400.                     });
  401.             }
  402.         }
  403.         class o {
  404.             constructor(t, e) {
  405.                 (this.pages = []), (this.render = e), (this.app = t);
  406.             }
  407.             getPageCount() {
  408.                 return this.pages.length;
  409.             }
  410.             getPages() {
  411.                 return this.pages;
  412.             }
  413.             getPage(t) {
  414.                 if (t >= 0 && t < this.pages.length) return this.pages[t];
  415.                 throw new Error("Invalid page number");
  416.             }
  417.             show(t) {
  418.                 t < 0 ||
  419.                     t >= this.pages.length ||
  420.                     (this.app.updatePage(t),
  421.                     "portrait" === this.render.getOrientation()
  422.                         ? (this.render.setLeftPage(null), this.render.setRightPage(this.pages[t]))
  423.                         : (t === this.pages.length - 1 && t--,
  424.                           this.render.setLeftPage(this.pages[t]),
  425.                           this.render.setRightPage(this.pages[t + 1])));
  426.             }
  427.         }
  428.         class h extends o {
  429.             constructor(t, e, i) {
  430.                 super(t, e), (this.imagesHref = i);
  431.             }
  432.             load() {
  433.                 for (const t of this.imagesHref) {
  434.                     const e = new n(this.render, t);
  435.                     e.load(), this.pages.push(e);
  436.                 }
  437.             }
  438.         }
  439.         class a {
  440.             static GetDestinationFromTwoPoint(t, e) {
  441.                 return null === t || null === e
  442.                     ? 1 / 0
  443.                     : Math.sqrt(Math.pow(e.x - t.x, 2) + Math.pow(e.y - t.y, 2));
  444.             }
  445.             static GetSegmentLength(t) {
  446.                 return a.GetDestinationFromTwoPoint(t[0], t[1]);
  447.             }
  448.             static GetAngleFromTwoLine(t, e) {
  449.                 const i = t[0].y - t[1].y,
  450.                     s = e[0].y - e[1].y,
  451.                     n = t[1].x - t[0].x,
  452.                     o = e[1].x - e[0].x;
  453.                 return Math.acos(
  454.                     (i * s + n * o) / (Math.sqrt(i * i + n * n) * Math.sqrt(s * s + o * o))
  455.                 );
  456.             }
  457.             static PointInRect(t, e) {
  458.                 return null === e
  459.                     ? null
  460.                     : e.x >= t.left &&
  461.                       e.x <= t.width + t.left &&
  462.                       e.y >= t.top &&
  463.                       e.y <= t.top + t.height
  464.                     ? e
  465.                     : null;
  466.             }
  467.             static GetRotatedPoint(t, e, i) {
  468.                 return {
  469.                     x: t.x * Math.cos(i) + t.y * Math.sin(i) + e.x,
  470.                     y: t.y * Math.cos(i) - t.x * Math.sin(i) + e.y
  471.                 };
  472.             }
  473.             static GetIntersectByLineAndCircle(t, e, i) {
  474.                 if (a.GetDestinationFromTwoPoint(t, i) <= e) return i;
  475.                 const s = t.x,
  476.                     n = t.y,
  477.                     o = i.x,
  478.                     h = i.y;
  479.                 let r =
  480.                     Math.sqrt(
  481.                         (Math.pow(e, 2) * Math.pow(s - o, 2)) /
  482.                             (Math.pow(s - o, 2) + Math.pow(n - h, 2))
  483.                     ) + s;
  484.                 i.x < 0 && (r *= -1);
  485.                 let l = ((r - s) * (n - h)) / (s - o) + n;
  486.                 return s - o + n === 0 && (l = e), { x: r, y: l };
  487.             }
  488.             static GetIntersectByTwoSegment(t, e, i) {
  489.                 return a.PointInRect(t, a.GetIntersectByTwoLine(e, i));
  490.             }
  491.             static GetIntersectByTwoLine(t, e) {
  492.                 const i = t[0].y - t[1].y,
  493.                     s = e[0].y - e[1].y,
  494.                     n = t[1].x - t[0].x,
  495.                     o = e[1].x - e[0].x,
  496.                     h = t[0].x * t[1].y - t[1].x * t[0].y,
  497.                     a = e[0].x * e[1].y - e[1].x * e[0].y,
  498.                     r = i * a - s * h,
  499.                     l = n * a - o * h,
  500.                     g = -(h * o - a * n) / (i * o - s * n),
  501.                     c = -(i * a - s * h) / (i * o - s * n);
  502.                 if (isFinite(g) && isFinite(c)) return { x: g, y: c };
  503.                 if (Math.abs(r - l) < 0.1) throw new Error("Segment included");
  504.                 return null;
  505.             }
  506.             static GetCordsFromTwoPoint(t, e) {
  507.                 const i = Math.abs(t.x - e.x),
  508.                     s = Math.abs(t.y - e.y),
  509.                     n = Math.max(i, s),
  510.                     o = [t];
  511.                 function h(t, e, i, s, n) {
  512.                     return e > t ? t + n * (i / s) : e < t ? t - n * (i / s) : t;
  513.                 }
  514.                 for (let a = 1; a <= n; a++)
  515.                     o.push({ x: h(t.x, e.x, i, n, a), y: h(t.y, e.y, s, n, a) });
  516.                 return o;
  517.             }
  518.         }
  519.         class r extends s {
  520.             constructor(t, e) {
  521.                 super(t),
  522.                     (this.copiedElement = null),
  523.                     (this.isLoad = !1),
  524.                     (this.element = e),
  525.                     this.element.classList.add("stf__item"),
  526.                     (this.element.style.position = "absolute"),
  527.                     (this.element.style.left = "0"),
  528.                     (this.element.style.top = "0"),
  529.                     (this.element.style.boxSizing = "border-box");
  530.             }
  531.             draw() {
  532.                 const t = this.render.convertToGlobal(this.state.position),
  533.                     e = this.render.getRect().pageWidth,
  534.                     i = this.render.getRect().height;
  535.                 this.element.classList.remove("--simple"),
  536.                     (this.element.style.display = "block"),
  537.                     (this.element.style.left = "0"),
  538.                     (this.element.style.top = "0"),
  539.                     (this.element.style.transformOrigin = "0 0"),
  540.                     (this.element.style.width = e + "px"),
  541.                     (this.element.style.height = i + "px");
  542.                 let s = "polygon( ";
  543.                 for (const t of this.state.area)
  544.                     if (null !== t) {
  545.                         let e =
  546.                             1 === this.render.getDirection()
  547.                                 ? { x: -t.x + this.state.position.x, y: t.y - this.state.position.y }
  548.                                 : { x: t.x - this.state.position.x, y: t.y - this.state.position.y };
  549.                         (e = a.GetRotatedPoint(e, { x: 0, y: 0 }, this.state.angle)),
  550.                             (s += e.x + "px " + e.y + "px, ");
  551.                     }
  552.                 (s = s.slice(0, -2)),
  553.                     (s += ")"),
  554.                     (this.element.style.clipPath = s),
  555.                     this.element.style.setProperty("-webkit-clip-path", s),
  556.                     (this.element.style.transform =
  557.                         "translate3d(" +
  558.                         t.x +
  559.                         "px, " +
  560.                         t.y +
  561.                         "px, 0) rotate(" +
  562.                         this.state.angle +
  563.                         "rad)");
  564.             }
  565.             simpleDraw(t) {
  566.                 if (this.element.classList.contains("--simple")) return;
  567.                 null === this.copiedElement &&
  568.                     ((this.copiedElement = this.element.cloneNode(!0)),
  569.                     this.element.parentElement.appendChild(this.copiedElement));
  570.                 const e = this.render.getRect(),
  571.                     i = e.pageWidth,
  572.                     s = e.height,
  573.                     n = 1 === t ? e.left + e.pageWidth : e.left,
  574.                     o = e.top;
  575.                 this.element.classList.add("--simple"),
  576.                     (this.copiedElement.style.cssText =
  577.                         "position: absolute; display: block; height: " +
  578.                         s +
  579.                         "px; left: " +
  580.                         n +
  581.                         "px; top: " +
  582.                         o +
  583.                         "px; width: " +
  584.                         i +
  585.                         "px; z-index: " +
  586.                         (this.render.getSettings().startZIndex + 1) +
  587.                         ";"),
  588.                     (this.element.style.cssText = "display: none");
  589.             }
  590.             clearSaved() {
  591.                 this.element.classList.remove("--simple"),
  592.                     null !== this.copiedElement &&
  593.                         (this.copiedElement.remove(), (this.copiedElement = null));
  594.             }
  595.             getElement() {
  596.                 return this.element;
  597.             }
  598.             load() {
  599.                 this.isLoad = !0;
  600.             }
  601.         }
  602.         class l extends o {
  603.             constructor(t, e, i, s) {
  604.                 super(t, e), (this.element = i), (this.pagesElement = s);
  605.             }
  606.             load() {
  607.                 for (const t of this.pagesElement) {
  608.                     const e = new r(this.render, t);
  609.                     e.load(), this.pages.push(e);
  610.                 }
  611.             }
  612.         }
  613.         class g {
  614.             constructor(t, e, i, s) {
  615.                 (this.direction = t),
  616.                     (this.corner = e),
  617.                     (this.pageWidth = i),
  618.                     (this.pageHeight = s),
  619.                     (this.topIntersectPoint = null),
  620.                     (this.sideIntersectPoint = null),
  621.                     (this.bottomIntersectPoint = null);
  622.             }
  623.             calc(t) {
  624.                 try {
  625.                     (this.position = this.preparePosition(t)),
  626.                         this.calculateIntersectPoint(this.position);
  627.                 } catch (t) {}
  628.             }
  629.             getPageRect(t) {
  630.                 return "top" === this.corner
  631.                     ? this.getRectFromBasePoint(
  632.                             [
  633.                                 { x: 0, y: 0 },
  634.                                 { x: this.pageWidth, y: 0 },
  635.                                 { x: 0, y: this.pageHeight },
  636.                                 { x: this.pageWidth, y: this.pageHeight }
  637.                             ],
  638.                             t
  639.                       )
  640.                     : this.getRectFromBasePoint(
  641.                             [
  642.                                 { x: 0, y: -this.pageHeight },
  643.                                 { x: this.pageWidth, y: -this.pageHeight },
  644.                                 { x: 0, y: 0 },
  645.                                 { x: this.pageWidth, y: 0 }
  646.                             ],
  647.                             t
  648.                       );
  649.             }
  650.             getRectFromBasePoint(t, e) {
  651.                 return {
  652.                     topLeft: this.getRotatedPoint(t[0], e),
  653.                     topRight: this.getRotatedPoint(t[1], e),
  654.                     bottomLeft: this.getRotatedPoint(t[2], e),
  655.                     bottomRight: this.getRotatedPoint(t[3], e)
  656.                 };
  657.             }
  658.             getRotatedPoint(t, e) {
  659.                 return {
  660.                     x: t.x * Math.cos(this.angle) + t.y * Math.sin(this.angle) + e.x,
  661.                     y: t.y * Math.cos(this.angle) - t.x * Math.sin(this.angle) + e.y
  662.                 };
  663.             }
  664.             updateAngleAndGeometry(t) {
  665.                 (this.angle = this.calculateAngle(t)), (this.rect = this.getPageRect(t));
  666.             }
  667.             calculateIntersectPoint(t) {
  668.                 const e = {
  669.                     left: -1,
  670.                     top: -1,
  671.                     width: this.pageWidth + 2,
  672.                     height: this.pageHeight + 2
  673.                 };
  674.                 "top" === this.corner
  675.                     ? ((this.topIntersectPoint = a.GetIntersectByTwoSegment(
  676.                             e,
  677.                             [t, this.rect.topRight],
  678.                             [
  679.                                 { x: 0, y: 0 },
  680.                                 { x: this.pageWidth, y: 0 }
  681.                             ]
  682.                       )),
  683.                       (this.sideIntersectPoint = a.GetIntersectByTwoSegment(
  684.                             e,
  685.                             [t, this.rect.bottomLeft],
  686.                             [
  687.                                 { x: this.pageWidth, y: 0 },
  688.                                 { x: this.pageWidth, y: this.pageHeight }
  689.                             ]
  690.                       )),
  691.                       (this.bottomIntersectPoint = a.GetIntersectByTwoSegment(
  692.                             e,
  693.                             [this.rect.bottomLeft, this.rect.bottomRight],
  694.                             [
  695.                                 { x: 0, y: this.pageHeight },
  696.                                 { x: this.pageWidth, y: this.pageHeight }
  697.                             ]
  698.                       )))
  699.                     : ((this.topIntersectPoint = a.GetIntersectByTwoSegment(
  700.                             e,
  701.                             [this.rect.topLeft, this.rect.topRight],
  702.                             [
  703.                                 { x: 0, y: 0 },
  704.                                 { x: this.pageWidth, y: 0 }
  705.                             ]
  706.                       )),
  707.                       (this.sideIntersectPoint = a.GetIntersectByTwoSegment(
  708.                             e,
  709.                             [t, this.rect.topLeft],
  710.                             [
  711.                                 { x: this.pageWidth, y: 0 },
  712.                                 { x: this.pageWidth, y: this.pageHeight }
  713.                             ]
  714.                       )),
  715.                       (this.bottomIntersectPoint = a.GetIntersectByTwoSegment(
  716.                             e,
  717.                             [this.rect.bottomLeft, this.rect.bottomRight],
  718.                             [
  719.                                 { x: 0, y: this.pageHeight },
  720.                                 { x: this.pageWidth, y: this.pageHeight }
  721.                             ]
  722.                       )));
  723.             }
  724.             checkPositionAtCenterLine(t, e, i) {
  725.                 let s = t;
  726.                 const n = a.GetIntersectByLineAndCircle(e, this.pageWidth, s);
  727.                 s !== n && ((s = n), this.updateAngleAndGeometry(s));
  728.                 const o = Math.sqrt(
  729.                     Math.pow(this.pageWidth, 2) + Math.pow(this.pageHeight, 2)
  730.                 );
  731.                 let h = this.rect.bottomRight,
  732.                     r = this.rect.topLeft;
  733.                 if (
  734.                     ("bottom" === this.corner &&
  735.                         ((h = this.rect.topRight), (r = this.rect.bottomLeft)),
  736.                     h.x <= 0)
  737.                 ) {
  738.                     const t = a.GetIntersectByLineAndCircle(i, o, r);
  739.                     t !== s && ((s = t), this.updateAngleAndGeometry(s));
  740.                 }
  741.                 return s;
  742.             }
  743.             preparePosition(t) {
  744.                 let e = t;
  745.                 if (
  746.                     (this.updateAngleAndGeometry(e),
  747.                     (e =
  748.                         "top" === this.corner
  749.                             ? this.checkPositionAtCenterLine(
  750.                                     e,
  751.                                     { x: 0, y: 0 },
  752.                                     { x: 0, y: this.pageHeight }
  753.                               )
  754.                             : this.checkPositionAtCenterLine(
  755.                                     e,
  756.                                     { x: 0, y: this.pageHeight },
  757.                                     { x: 0, y: 0 }
  758.                               )),
  759.                     Math.abs(e.x - this.pageWidth) < 1 && Math.abs(e.y) < 1)
  760.                 )
  761.                     throw new Error("Point is too small");
  762.                 return e;
  763.             }
  764.             calculateAngle(t) {
  765.                 const e = this.pageWidth - t.x,
  766.                     i = "bottom" === this.corner ? this.pageHeight - t.y : t.y;
  767.                 let s = 2 * Math.acos(e / Math.sqrt(i * i + e * e));
  768.                 i < 0 && (s = -s);
  769.                 const n = Math.PI - s;
  770.                 if (!isFinite(s) || (n >= 0 && n < 0.003))
  771.                     throw new Error("The G point is too small");
  772.                 return "bottom" === this.corner && (s = -s), s;
  773.             }
  774.             getAngle() {
  775.                 return 0 === this.direction ? -this.angle : this.angle;
  776.             }
  777.             getRect() {
  778.                 return this.rect;
  779.             }
  780.             getPosition() {
  781.                 return this.position;
  782.             }
  783.             getActiveCorner() {
  784.                 return 0 === this.direction ? this.rect.topLeft : this.rect.topRight;
  785.             }
  786.             getDirection() {
  787.                 return this.direction;
  788.             }
  789.             getIntersectPoint() {
  790.                 return {
  791.                     top: this.topIntersectPoint,
  792.                     bottom: this.bottomIntersectPoint,
  793.                     side: this.sideIntersectPoint
  794.                 };
  795.             }
  796.             getSegmentToShadowLine() {
  797.                 const t = this.getShadowStartPoint();
  798.                 return [
  799.                     t,
  800.                     t !== this.sideIntersectPoint && null !== this.sideIntersectPoint
  801.                         ? this.sideIntersectPoint
  802.                         : this.bottomIntersectPoint
  803.                 ];
  804.             }
  805.             getShadowStartPoint() {
  806.                 return "top" === this.corner
  807.                     ? this.topIntersectPoint
  808.                     : null !== this.sideIntersectPoint
  809.                     ? this.sideIntersectPoint
  810.                     : this.topIntersectPoint;
  811.             }
  812.             getShadowAngle() {
  813.                 const t = a.GetAngleFromTwoLine(this.getSegmentToShadowLine(), [
  814.                     { x: 0, y: 0 },
  815.                     { x: this.pageWidth, y: 0 }
  816.                 ]);
  817.                 return 0 === this.direction ? t : Math.PI - t;
  818.             }
  819.             getShadowLength() {
  820.                 return a.GetSegmentLength(this.getSegmentToShadowLine());
  821.             }
  822.             getFlippingProgress() {
  823.                 return Math.abs(
  824.                     ((this.position.x - this.pageWidth) / (2 * this.pageWidth)) * 100
  825.                 );
  826.             }
  827.             getFlippingClipArea() {
  828.                 const t = [];
  829.                 let e = !1;
  830.                 return (
  831.                     t.push(this.rect.topLeft),
  832.                     t.push(this.topIntersectPoint),
  833.                     null === this.sideIntersectPoint
  834.                         ? (e = !0)
  835.                         : (t.push(this.sideIntersectPoint),
  836.                           null === this.bottomIntersectPoint && (e = !1)),
  837.                     t.push(this.bottomIntersectPoint),
  838.                     (e || "bottom" === this.corner) && t.push(this.rect.bottomLeft),
  839.                     t
  840.                 );
  841.             }
  842.             getCorner() {
  843.                 return this.corner;
  844.             }
  845.             getBottomClipArea() {
  846.                 const t = [];
  847.                 return (
  848.                     t.push(this.topIntersectPoint),
  849.                     "top" === this.corner
  850.                         ? t.push({ x: this.pageWidth, y: 0 })
  851.                         : (null !== this.topIntersectPoint && t.push({ x: this.pageWidth, y: 0 }),
  852.                           t.push({ x: this.pageWidth, y: this.pageHeight })),
  853.                     null !== this.sideIntersectPoint
  854.                         ? a.GetDestinationFromTwoPoint(
  855.                                 this.sideIntersectPoint,
  856.                                 this.topIntersectPoint
  857.                           ) >= 10 && t.push(this.sideIntersectPoint)
  858.                         : "top" === this.corner &&
  859.                           t.push({ x: this.pageWidth, y: this.pageHeight }),
  860.                     t.push(this.bottomIntersectPoint),
  861.                     t.push(this.topIntersectPoint),
  862.                     t
  863.                 );
  864.             }
  865.             getBottomPagePosition() {
  866.                 return 1 === this.direction ? { x: this.pageWidth, y: 0 } : { x: 0, y: 0 };
  867.             }
  868.         }
  869.         class c {
  870.             constructor(t, e) {
  871.                 (this.flippingPage = null),
  872.                     (this.bottomPage = null),
  873.                     (this.calc = null),
  874.                     (this.state = "read"),
  875.                     (this.render = t),
  876.                     (this.app = e);
  877.             }
  878.             getCalculation() {
  879.                 return this.calc;
  880.             }
  881.             start(t) {
  882.                 this.reset();
  883.                 const e = this.render.convertToBook(t),
  884.                     i = this.getBoundsRect();
  885.                 let s = 0;
  886.                 "portrait" === this.render.getOrientation()
  887.                     ? e.x - i.pageWidth <= i.width / 5 && (s = 1)
  888.                     : e.x < i.width / 2 && (s = 1);
  889.                 const n = e.y >= i.height / 2 ? "bottom" : "top";
  890.                 if (!this.checkDirection(s)) return !1;
  891.                 try {
  892.                     return (
  893.                         (this.flippingPage = this.getFlippingPage(s)),
  894.                         (this.bottomPage = this.getBottomPage(s)),
  895.                         this.flippingPage && this.bottomPage
  896.                             ? (this.render.setDirection(s),
  897.                               (this.calc = new g(s, n, i.pageWidth, i.height)),
  898.                               !0)
  899.                             : !1
  900.                     );
  901.                 } catch (t) {
  902.                     return !1;
  903.                 }
  904.             }
  905.             showCorner(t) {
  906.                 if (!this.checkState("read", "fold_corner")) return;
  907.                 const e = this.getBoundsRect(),
  908.                     i = e.pageWidth,
  909.                     s = Math.sqrt(Math.pow(i, 2) + Math.pow(e.height, 2)) / 5,
  910.                     n = this.render.convertToBook(t);
  911.                 if (
  912.                     n.x > 0 &&
  913.                     n.y > 0 &&
  914.                     n.x < e.width &&
  915.                     n.y < e.height &&
  916.                     (n.x < s || n.x > e.width - s) &&
  917.                     (n.y < s || n.y > e.height - s)
  918.                 )
  919.                     if (null === this.calc) {
  920.                         if (!this.start(t)) return;
  921.                         this.setState("fold_corner"), this.calc.calc({ x: i - 1, y: 1 });
  922.                         const s = 50,
  923.                             n = "bottom" === this.calc.getCorner() ? e.height - 1 : 1,
  924.                             o = "bottom" === this.calc.getCorner() ? e.height - s : s;
  925.                         this.animateFlippingTo({ x: i - 1, y: n }, { x: i - s, y: o }, !1, !1);
  926.                     } else this.do(this.render.convertToPage(t));
  927.                 else this.setState("read"), this.render.finishAnimation(), this.stopMove();
  928.             }
  929.             fold(t) {
  930.                 this.setState("user_fold"),
  931.                     null === this.calc && this.start(t),
  932.                     this.do(this.render.convertToPage(t));
  933.             }
  934.             flip(t) {
  935.                 if ((null !== this.calc && this.render.finishAnimation(), !this.start(t)))
  936.                     return;
  937.                 const e = this.getBoundsRect();
  938.                 this.setState("flipping");
  939.                 const i = e.height / 10,
  940.                     s = "bottom" === this.calc.getCorner() ? e.height - i : i,
  941.                     n = "bottom" === this.calc.getCorner() ? e.height : 0;
  942.                 this.calc.calc({ x: e.pageWidth - i, y: s }),
  943.                     this.animateFlippingTo(
  944.                         { x: e.pageWidth - i, y: s },
  945.                         { x: -e.pageWidth, y: n },
  946.                         !0
  947.                     );
  948.             }
  949.             flipNext(t) {
  950.                 this.flip({
  951.                     x: this.render.getRect().left + 2 * this.render.getRect().pageWidth,
  952.                     y: "top" === t ? 1 : this.render.getRect().height - 2
  953.                 });
  954.             }
  955.             flipPrev(t) {
  956.                 this.flip({ x: 10, y: "top" === t ? 1 : this.render.getRect().height - 2 });
  957.             }
  958.             stopMove() {
  959.                 if (null === this.calc) return;
  960.                 const t = this.calc.getPosition(),
  961.                     e = this.getBoundsRect(),
  962.                     i = "bottom" === this.calc.getCorner() ? e.height : 0;
  963.                 t.x <= 0
  964.                     ? this.animateFlippingTo(t, { x: -e.pageWidth, y: i }, !0)
  965.                     : this.animateFlippingTo(t, { x: e.pageWidth, y: i }, !1);
  966.             }
  967.             do(t) {
  968.                 null !== this.calc &&
  969.                     (this.calc.calc(t),
  970.                     this.flippingPage.setArea(this.calc.getFlippingClipArea()),
  971.                     this.flippingPage.setPosition(this.calc.getActiveCorner()),
  972.                     this.flippingPage.setAngle(this.calc.getAngle()),
  973.                     this.bottomPage.setArea(this.calc.getBottomClipArea()),
  974.                     this.bottomPage.setPosition(this.calc.getBottomPagePosition()),
  975.                     this.bottomPage.setAngle(0),
  976.                     this.render.setPageRect(this.calc.getRect()),
  977.                     this.render.setBottomPage(this.bottomPage),
  978.                     this.render.setFlippingPage(this.flippingPage),
  979.                     this.render.drawShadow(
  980.                         this.calc.getShadowStartPoint(),
  981.                         this.calc.getShadowAngle(),
  982.                         this.calc.getFlippingProgress(),
  983.                         this.calc.getDirection(),
  984.                         this.calc.getShadowLength()
  985.                     ));
  986.             }
  987.             animateFlippingTo(t, e, i, s = !0) {
  988.                 const n = a.GetCordsFromTwoPoint(t, e),
  989.                     o = [];
  990.                 for (const t of n) o.push(() => this.do(t));
  991.                 const h = this.getAnimationDuration(n.length);
  992.                 this.render.startAnimation(o, h, () => {
  993.                     this.calc &&
  994.                         (i &&
  995.                             (1 === this.calc.getDirection()
  996.                                 ? this.app.turnToPrevPage()
  997.                                 : this.app.turnToNextPage()),
  998.                         s &&
  999.                             (this.render.setBottomPage(null),
  1000.                             this.render.setFlippingPage(null),
  1001.                             this.render.clearShadow(),
  1002.                             (this.state = "read"),
  1003.                             this.reset()));
  1004.                 });
  1005.             }
  1006.             getAnimationDuration(t) {
  1007.                 const e = this.app.getSettings().flippingTime;
  1008.                 return t >= 1e3 ? e : (t / 1e3) * e;
  1009.             }
  1010.             getFlippingPage(t) {
  1011.                 const e = this.app.getCurrentPageIndex();
  1012.                 return "portrait" === this.render.getOrientation()
  1013.                     ? 0 === t
  1014.                         ? this.app.getPage(e)
  1015.                         : this.app.getPage(e - 1)
  1016.                     : e < this.app.getPageCount() - 1 && e >= 0
  1017.                     ? 0 === t
  1018.                         ? this.app.getPage(e + 2)
  1019.                         : this.app.getPage(e - 1)
  1020.                     : null;
  1021.             }
  1022.             getNextPage() {
  1023.                 const t = this.app.getCurrentPageIndex(),
  1024.                     e = "portrait" === this.render.getOrientation() ? 0 : 2;
  1025.                 return t < this.app.getPageCount() - e ? this.app.getPage(t + e + 1) : null;
  1026.             }
  1027.             getPrevPage() {
  1028.                 const t = this.app.getCurrentPageIndex(),
  1029.                     e = "portrait" === this.render.getOrientation() ? 0 : 2;
  1030.                 return t - e >= 0 ? this.app.getPage(t - e) : null;
  1031.             }
  1032.             getBottomPage(t) {
  1033.                 return 0 === t ? this.getNextPage() : this.getPrevPage();
  1034.             }
  1035.             checkDirection(t) {
  1036.                 return 0 === t
  1037.                     ? this.app.getCurrentPageIndex() <= this.app.getPageCount() - 1
  1038.                     : this.app.getCurrentPageIndex() >= 1;
  1039.             }
  1040.             reset() {
  1041.                 (this.calc = null), (this.flippingPage = null), (this.bottomPage = null);
  1042.             }
  1043.             getBoundsRect() {
  1044.                 return this.render.getRect();
  1045.             }
  1046.             getPageWidth() {
  1047.                 return this.getBoundsRect().width / 2;
  1048.             }
  1049.             getPageHeight() {
  1050.                 return this.getBoundsRect().height;
  1051.             }
  1052.             setState(t) {
  1053.                 this.app.updateState(t), (this.state = t);
  1054.             }
  1055.             checkState(...t) {
  1056.                 for (const e of t) if (this.state === e) return !0;
  1057.                 return !1;
  1058.             }
  1059.         }
  1060.         class d {
  1061.             constructor(t, e) {
  1062.                 (this.leftPage = null),
  1063.                     (this.rightPage = null),
  1064.                     (this.flippingPage = null),
  1065.                     (this.bottomPage = null),
  1066.                     (this.shadow = null),
  1067.                     (this.pageRect = null),
  1068.                     (this.animation = null),
  1069.                     (this.timer = 0),
  1070.                     (this.direction = null),
  1071.                     (this.orientation = null),
  1072.                     (this.boundsRect = null),
  1073.                     (this.setting = e),
  1074.                     (this.app = t);
  1075.             }
  1076.             drawShadow(t, e, i, s, n) {
  1077.                 if (!this.app.getSettings().drawShadow) return;
  1078.                 const o = 100 * this.getSettings().maxShadowOpacity;
  1079.                 this.shadow = {
  1080.                     pos: t,
  1081.                     angle: e,
  1082.                     width: (((3 * this.getRect().pageWidth) / 4) * i) / 100,
  1083.                     opacity: ((100 - i) * o) / 100 / 100,
  1084.                     direction: s,
  1085.                     length: n
  1086.                 };
  1087.             }
  1088.             clearShadow() {
  1089.                 this.shadow = null;
  1090.             }
  1091.             setPageRect(t) {
  1092.                 this.pageRect = t;
  1093.             }
  1094.             getOrientation() {
  1095.                 return this.orientation;
  1096.             }
  1097.             startAnimation(t, e, i) {
  1098.                 this.finishAnimation(),
  1099.                     (this.animation = {
  1100.                         frames: t,
  1101.                         duration: e,
  1102.                         durationFrame: e / t.length,
  1103.                         onAnimateEnd: i,
  1104.                         startedAt: this.timer
  1105.                     });
  1106.             }
  1107.             finishAnimation() {
  1108.                 null !== this.animation &&
  1109.                     (this.animation.frames[this.animation.frames.length - 1](),
  1110.                     null !== this.animation.onAnimateEnd && this.animation.onAnimateEnd()),
  1111.                     (this.animation = null);
  1112.             }
  1113.             render(t) {
  1114.                 if (null !== this.animation) {
  1115.                     const e = Math.round(
  1116.                         (t - this.animation.startedAt) / this.animation.durationFrame
  1117.                     );
  1118.                     e < this.animation.frames.length
  1119.                         ? this.animation.frames[e]()
  1120.                         : (this.animation.onAnimateEnd(), (this.animation = null));
  1121.                 }
  1122.                 (this.timer = t), this.drawFrame(t);
  1123.             }
  1124.             getRect() {
  1125.                 return (
  1126.                     null === this.boundsRect && this.calculateBoundsRect(), this.boundsRect
  1127.                 );
  1128.             }
  1129.             calculateBoundsRect() {
  1130.                 let t = "landscape";
  1131.                 const e = this.getBlockWidth(),
  1132.                     i = e / 2,
  1133.                     s = this.getBlockHeight() / 2,
  1134.                     n = this.setting.width / this.setting.height;
  1135.                 let o = this.setting.width,
  1136.                     h = this.setting.height,
  1137.                     a = i - o;
  1138.                 return (
  1139.                     "stretch" === this.setting.size
  1140.                         ? (e < 2 * this.setting.minWidth &&
  1141.                                 this.app.getSettings().usePortrait &&
  1142.                                 (t = "portrait"),
  1143.                           (o =
  1144.                                 "landscape" === t ? this.getBlockWidth() / 2 : this.getBlockWidth()),
  1145.                           o > this.setting.maxWidth && (o = this.setting.maxWidth),
  1146.                           (h = o / n),
  1147.                           h > this.getBlockHeight() && ((h = this.getBlockHeight()), (o = h * n)),
  1148.                           (a = "landscape" === t ? i - o : i - o / 2 - o))
  1149.                         : e < 2 * o &&
  1150.                           this.app.getSettings().usePortrait &&
  1151.                           ((t = "portrait"), (a = i - o / 2 - o)),
  1152.                     (this.boundsRect = {
  1153.                         left: a,
  1154.                         top: s - h / 2,
  1155.                         width: 2 * o,
  1156.                         height: h,
  1157.                         pageWidth: o
  1158.                     }),
  1159.                     t
  1160.                 );
  1161.             }
  1162.             update() {
  1163.                 this.boundsRect = null;
  1164.                 const t = this.calculateBoundsRect();
  1165.                 this.orientation !== t &&
  1166.                     ((this.orientation = t), this.app.updateOrientation(t));
  1167.             }
  1168.             convertToBook(t) {
  1169.                 const e = this.getRect();
  1170.                 return { x: t.x - e.left, y: t.y - e.top };
  1171.             }
  1172.             convertToPage(t, e) {
  1173.                 e || (e = this.direction);
  1174.                 const i = this.getRect();
  1175.                 return {
  1176.                     x: 0 === e ? t.x - i.left - i.width / 2 : i.width / 2 - t.x + i.left,
  1177.                     y: t.y - i.top
  1178.                 };
  1179.             }
  1180.             convertToGlobal(t, e) {
  1181.                 if ((e || (e = this.direction), null == t)) return null;
  1182.                 const i = this.getRect();
  1183.                 return {
  1184.                     x: 0 === e ? t.x + i.left + i.width / 2 : i.width / 2 - t.x + i.left,
  1185.                     y: t.y + i.top
  1186.                 };
  1187.             }
  1188.             convertRectToGlobal(t, e) {
  1189.                 return (
  1190.                     e || (e = this.direction),
  1191.                     {
  1192.                         topLeft: this.convertToGlobal(t.topLeft, e),
  1193.                         topRight: this.convertToGlobal(t.topRight, e),
  1194.                         bottomLeft: this.convertToGlobal(t.bottomLeft, e),
  1195.                         bottomRight: this.convertToGlobal(t.bottomRight, e)
  1196.                     }
  1197.                 );
  1198.             }
  1199.             start() {
  1200.                 this.update();
  1201.                 const t = (e) => {
  1202.                     this.render(e), requestAnimationFrame(t);
  1203.                 };
  1204.                 requestAnimationFrame(t);
  1205.             }
  1206.             setDirection(t) {
  1207.                 this.direction = t;
  1208.             }
  1209.             getDirection() {
  1210.                 return this.direction;
  1211.             }
  1212.             setFlippingPage(t) {
  1213.                 this.flippingPage = t;
  1214.             }
  1215.             setBottomPage(t) {
  1216.                 this.bottomPage = t;
  1217.             }
  1218.             setRightPage(t) {
  1219.                 this.rightPage = t;
  1220.             }
  1221.             setLeftPage(t) {
  1222.                 this.leftPage = t;
  1223.             }
  1224.             getSettings() {
  1225.                 return this.app.getSettings();
  1226.             }
  1227.         }
  1228.         class p extends d {
  1229.             constructor(t, e, i) {
  1230.                 super(t, e), (this.canvas = i), (this.ctx = i.getContext("2d"));
  1231.             }
  1232.             getBlockWidth() {
  1233.                 return this.canvas.offsetWidth;
  1234.             }
  1235.             getBlockHeight() {
  1236.                 return this.canvas.offsetHeight;
  1237.             }
  1238.             getContext() {
  1239.                 return this.ctx;
  1240.             }
  1241.             drawFrame(t) {
  1242.                 this.clear(),
  1243.                     "portrait" !== this.orientation &&
  1244.                         null != this.leftPage &&
  1245.                         this.leftPage.simpleDraw(0),
  1246.                     null != this.rightPage && this.rightPage.simpleDraw(1),
  1247.                     null != this.bottomPage && this.bottomPage.draw(),
  1248.                     this.drawBookShadow(),
  1249.                     null != this.flippingPage && this.flippingPage.draw(),
  1250.                     null != this.shadow && (this.drawOuterShadow(), this.drawInnerShadow());
  1251.                 const e = this.getRect();
  1252.                 "portrait" === this.orientation &&
  1253.                     (this.ctx.beginPath(),
  1254.                     this.ctx.rect(e.left + e.pageWidth, e.top, e.width, e.height),
  1255.                     this.ctx.clip());
  1256.             }
  1257.             drawBookShadow() {
  1258.                 const t = this.getRect();
  1259.                 this.ctx.save(), this.ctx.beginPath();
  1260.                 const e = t.width / 20;
  1261.                 this.ctx.rect(t.left, t.top, t.width, t.height);
  1262.                 const i = { x: t.left + t.width / 2 - e / 2, y: 0 };
  1263.                 this.ctx.translate(i.x, i.y);
  1264.                 const s = this.ctx.createLinearGradient(0, 0, e, 0);
  1265.                 s.addColorStop(0, "rgba(0, 0, 0, 0)"),
  1266.                     s.addColorStop(0.4, "rgba(0, 0, 0, 0.2)"),
  1267.                     s.addColorStop(0.49, "rgba(0, 0, 0, 0.1)"),
  1268.                     s.addColorStop(0.5, "rgba(0, 0, 0, 0.5)"),
  1269.                     s.addColorStop(0.51, "rgba(0, 0, 0, 0.4)"),
  1270.                     s.addColorStop(1, "rgba(0, 0, 0, 0)"),
  1271.                     this.ctx.clip(),
  1272.                     (this.ctx.fillStyle = s),
  1273.                     this.ctx.fillRect(0, 0, e, 2 * t.height),
  1274.                     this.ctx.restore();
  1275.             }
  1276.             drawOuterShadow() {
  1277.                 const t = this.getRect();
  1278.                 this.ctx.save(),
  1279.                     this.ctx.beginPath(),
  1280.                     this.ctx.rect(t.left, t.top, t.width, t.height);
  1281.                 const e = this.convertToGlobal({
  1282.                     x: this.shadow.pos.x,
  1283.                     y: this.shadow.pos.y
  1284.                 });
  1285.                 this.ctx.translate(e.x, e.y),
  1286.                     this.ctx.rotate(Math.PI + this.shadow.angle + Math.PI / 2);
  1287.                 const i = this.ctx.createLinearGradient(0, 0, this.shadow.width, 0);
  1288.                 0 === this.shadow.direction
  1289.                     ? (this.ctx.translate(0, -100),
  1290.                       i.addColorStop(0, "rgba(0, 0, 0, " + this.shadow.opacity + ")"),
  1291.                       i.addColorStop(1, "rgba(0, 0, 0, 0)"))
  1292.                     : (this.ctx.translate(-this.shadow.width, -100),
  1293.                       i.addColorStop(0, "rgba(0, 0, 0, 0)"),
  1294.                       i.addColorStop(1, "rgba(0, 0, 0, " + this.shadow.opacity + ")")),
  1295.                     this.ctx.clip(),
  1296.                     (this.ctx.fillStyle = i),
  1297.                     this.ctx.fillRect(0, 0, this.shadow.width, 2 * t.height),
  1298.                     this.ctx.restore();
  1299.             }
  1300.             drawInnerShadow() {
  1301.                 const t = this.getRect();
  1302.                 this.ctx.save(), this.ctx.beginPath();
  1303.                 const e = this.convertToGlobal({
  1304.                         x: this.shadow.pos.x,
  1305.                         y: this.shadow.pos.y
  1306.                     }),
  1307.                     i = this.convertRectToGlobal(this.pageRect);
  1308.                 this.ctx.moveTo(i.topLeft.x, i.topLeft.y),
  1309.                     this.ctx.lineTo(i.topRight.x, i.topRight.y),
  1310.                     this.ctx.lineTo(i.bottomRight.x, i.bottomRight.y),
  1311.                     this.ctx.lineTo(i.bottomLeft.x, i.bottomLeft.y),
  1312.                     this.ctx.translate(e.x, e.y),
  1313.                     this.ctx.rotate(Math.PI + this.shadow.angle + Math.PI / 2);
  1314.                 const s = (3 * this.shadow.width) / 4,
  1315.                     n = this.ctx.createLinearGradient(0, 0, s, 0);
  1316.                 0 === this.shadow.direction
  1317.                     ? (this.ctx.translate(-s, -100),
  1318.                       n.addColorStop(1, "rgba(0, 0, 0, " + this.shadow.opacity + ")"),
  1319.                       n.addColorStop(0.9, "rgba(0, 0, 0, 0.05)"),
  1320.                       n.addColorStop(0.7, "rgba(0, 0, 0, " + this.shadow.opacity + ")"),
  1321.                       n.addColorStop(0, "rgba(0, 0, 0, 0)"))
  1322.                     : (this.ctx.translate(0, -100),
  1323.                       n.addColorStop(0, "rgba(0, 0, 0, " + this.shadow.opacity + ")"),
  1324.                       n.addColorStop(0.1, "rgba(0, 0, 0, 0.05)"),
  1325.                       n.addColorStop(0.3, "rgba(0, 0, 0, " + this.shadow.opacity + ")"),
  1326.                       n.addColorStop(1, "rgba(0, 0, 0, 0)")),
  1327.                     this.ctx.clip(),
  1328.                     (this.ctx.fillStyle = n),
  1329.                     this.ctx.fillRect(0, 0, s, 2 * t.height),
  1330.                     this.ctx.restore();
  1331.             }
  1332.             clear() {
  1333.                 (this.ctx.fillStyle = "white"),
  1334.                     this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
  1335.             }
  1336.         }
  1337.         class u {
  1338.             constructor(t, e, i) {
  1339.                 (this.touchPoint = null),
  1340.                     (this.swipeTimeout = 250),
  1341.                     (this.swipeDistance = 80),
  1342.                     (this.wrapper = t),
  1343.                     this.wrapper.classList.add("stf__wrapper"),
  1344.                     (this.app = e);
  1345.                 const s = this.app.getSettings().usePortrait ? 1 : 2;
  1346.                 (this.wrapper.style.minWidth = i.minWidth * s + "px"),
  1347.                     (this.wrapper.style.minHeight = i.minHeight * s + "px"),
  1348.                     "fixed" === i.size &&
  1349.                         ((this.wrapper.style.minWidth = i.width * s + "px"),
  1350.                         (this.wrapper.style.minHeight = i.height * s + "px")),
  1351.                     i.autoSize &&
  1352.                         ((this.wrapper.style.width = "100%"),
  1353.                         (this.wrapper.style.maxWidth = 2 * i.maxWidth + "px")),
  1354.                     (this.wrapper.style.display = "block");
  1355.             }
  1356.             getDistElement() {
  1357.                 return this.distElement;
  1358.             }
  1359.             getWrapper() {
  1360.                 return this.wrapper;
  1361.             }
  1362.             setOrientationStyle(t) {
  1363.                 this.wrapper.classList.remove("--portrait", "--landscape"),
  1364.                     "portrait" === t
  1365.                         ? (this.app.getSettings().autoSize &&
  1366.                                 (this.wrapper.style.paddingBottom =
  1367.                                     (this.app.getSettings().height / this.app.getSettings().width) * 100 +
  1368.                                     "%"),
  1369.                           this.wrapper.classList.add("--portrait"))
  1370.                         : (this.app.getSettings().autoSize &&
  1371.                                 (this.wrapper.style.paddingBottom =
  1372.                                     (this.app.getSettings().height / (2 * this.app.getSettings().width)) *
  1373.                                         100 +
  1374.                                     "%"),
  1375.                           this.wrapper.classList.add("--landscape")),
  1376.                     this.update();
  1377.             }
  1378.             setHandlers() {
  1379.                 this.distElement.addEventListener("mousedown", (t) => {
  1380.                     const e = this.getMousePos(t.clientX, t.clientY);
  1381.                     this.app.startUserTouch(e), t.preventDefault();
  1382.                 }),
  1383.                     this.distElement.addEventListener("touchstart", (t) => {
  1384.                         if (t.changedTouches.length > 0) {
  1385.                             const e = t.changedTouches[0],
  1386.                                 i = this.getMousePos(e.clientX, e.clientY);
  1387.                             (this.touchPoint = { point: i, time: Date.now() }),
  1388.                                 setTimeout(() => {
  1389.                                     null !== this.touchPoint && this.app.startUserTouch(i);
  1390.                                 }, this.swipeTimeout),
  1391.                                 t.preventDefault();
  1392.                         }
  1393.                     }),
  1394.                     window.addEventListener("mousemove", (t) => {
  1395.                         const e = this.getMousePos(t.clientX, t.clientY);
  1396.                         this.app.userMove(e, !1);
  1397.                     }),
  1398.                     window.addEventListener("touchmove", (t) => {
  1399.                         if (t.changedTouches.length > 0) {
  1400.                             const e = t.changedTouches[0];
  1401.                             this.app.userMove(this.getMousePos(e.clientX, e.clientY), !0);
  1402.                         }
  1403.                     }),
  1404.                     window.addEventListener("mouseup", (t) => {
  1405.                         const e = this.getMousePos(t.clientX, t.clientY);
  1406.                         this.app.userStop(e);
  1407.                     }),
  1408.                     window.addEventListener("touchend", (t) => {
  1409.                         if (t.changedTouches.length > 0) {
  1410.                             const e = t.changedTouches[0],
  1411.                                 i = this.getMousePos(e.clientX, e.clientY);
  1412.                             let s = !1;
  1413.                             if (null !== this.touchPoint) {
  1414.                                 const t = i.x - this.touchPoint.point.x,
  1415.                                     e = Math.abs(i.y - this.touchPoint.point.y);
  1416.                                 Math.abs(t) > this.swipeDistance &&
  1417.                                     e < 2 * this.swipeDistance &&
  1418.                                     Date.now() - this.touchPoint.time < this.swipeTimeout &&
  1419.                                     (t > 0
  1420.                                         ? this.app.flipPrev(
  1421.                                                 this.touchPoint.point.y < this.app.getRender().getRect().height / 2
  1422.                                                     ? "top"
  1423.                                                     : "bottom"
  1424.                                           )
  1425.                                         : this.app.flipNext(
  1426.                                                 this.touchPoint.point.y < this.app.getRender().getRect().height / 2
  1427.                                                     ? "top"
  1428.                                                     : "bottom"
  1429.                                           ),
  1430.                                     (s = !0)),
  1431.                                     (this.touchPoint = null);
  1432.                             }
  1433.                             this.app.userStop(i, s);
  1434.                         }
  1435.                     });
  1436.             }
  1437.             getMousePos(t, e) {
  1438.                 const i = this.distElement.getBoundingClientRect();
  1439.                 return { x: t - i.left, y: e - i.top };
  1440.             }
  1441.         }
  1442.         class m extends u {
  1443.             constructor(t, e, i, s) {
  1444.                 super(t, e, i),
  1445.                     t.insertAdjacentHTML("afterbegin", '<div class="stf__block"></div>'),
  1446.                     (this.distElement = t.querySelector(".stf__block"));
  1447.                 for (const t of s) this.distElement.appendChild(t);
  1448.                 window.addEventListener(
  1449.                     "resize",
  1450.                     () => {
  1451.                         this.update();
  1452.                     },
  1453.                     !1
  1454.                 ),
  1455.                     this.setHandlers();
  1456.             }
  1457.             update() {
  1458.                 this.app.getRender().update();
  1459.             }
  1460.         }
  1461.         class f extends u {
  1462.             constructor(t, e, i) {
  1463.                 super(t, e, i),
  1464.                     (t.innerHTML = '<canvas class="stf__canvas"></canvas>'),
  1465.                     (this.canvas = t.querySelectorAll("canvas")[0]),
  1466.                     window.addEventListener(
  1467.                         "resize",
  1468.                         () => {
  1469.                             this.update();
  1470.                         },
  1471.                         !1
  1472.                     ),
  1473.                     (this.distElement = this.canvas),
  1474.                     this.resizeCanvas(),
  1475.                     this.setHandlers();
  1476.             }
  1477.             resizeCanvas() {
  1478.                 const t = getComputedStyle(this.canvas),
  1479.                     e = parseInt(t.getPropertyValue("width"), 10),
  1480.                     i = parseInt(t.getPropertyValue("height"), 10);
  1481.                 (this.canvas.width = e), (this.canvas.height = i);
  1482.             }
  1483.             getCanvas() {
  1484.                 return this.canvas;
  1485.             }
  1486.             update() {
  1487.                 this.resizeCanvas(), this.app.getRender().update();
  1488.             }
  1489.         }
  1490.         class y extends d {
  1491.             constructor(t, e, i, s) {
  1492.                 super(t, e),
  1493.                     (this.outerShadow = null),
  1494.                     (this.innerShadow = null),
  1495.                     (this.element = i),
  1496.                     (this.items = s);
  1497.             }
  1498.             getBlockWidth() {
  1499.                 return this.element.offsetWidth;
  1500.             }
  1501.             getBlockHeight() {
  1502.                 return this.element.offsetHeight;
  1503.             }
  1504.             clearShadow() {
  1505.                 super.clearShadow(),
  1506.                     this.outerShadow.remove(),
  1507.                     this.innerShadow.remove(),
  1508.                     (this.outerShadow = null),
  1509.                     (this.innerShadow = null);
  1510.             }
  1511.             drawShadow(t, e, i, s, n) {
  1512.                 super.drawShadow(t, e, i, s, n),
  1513.                     null === this.outerShadow &&
  1514.                         (this.element.insertAdjacentHTML(
  1515.                             "beforeend",
  1516.                             '<div class="stf__outerShadow"></div>'
  1517.                         ),
  1518.                         (this.outerShadow = this.element.querySelector(".stf__outerShadow")),
  1519.                         (this.outerShadow.style.zIndex = (
  1520.                             this.getSettings().startZIndex + 10
  1521.                         ).toString(10)),
  1522.                         (this.outerShadow.style.left = "0px"),
  1523.                         (this.outerShadow.style.top = "0px")),
  1524.                     null === this.innerShadow &&
  1525.                         (this.element.insertAdjacentHTML(
  1526.                             "beforeend",
  1527.                             '<div class="stf__innerShadow"></div>'
  1528.                         ),
  1529.                         (this.innerShadow = this.element.querySelector(".stf__innerShadow")),
  1530.                         (this.innerShadow.style.zIndex = (
  1531.                             this.getSettings().startZIndex + 10
  1532.                         ).toString(10)),
  1533.                         (this.innerShadow.style.left = "0px"),
  1534.                         (this.innerShadow.style.top = "0px"));
  1535.             }
  1536.             drawInnerShadow() {
  1537.                 const t = this.getRect(),
  1538.                     e = (3 * this.shadow.width) / 4,
  1539.                     i = 0 === this.getDirection() ? e : 0,
  1540.                     s = 0 === this.getDirection() ? "to left" : "to right",
  1541.                     n = this.convertToGlobal(this.shadow.pos),
  1542.                     o = this.shadow.angle + (3 * Math.PI) / 2;
  1543.                 (this.innerShadow.style.width = e + "px"),
  1544.                     (this.innerShadow.style.height = 2 * t.height + "px"),
  1545.                     (this.innerShadow.style.background =
  1546.                         "linear-gradient(" +
  1547.                         s +
  1548.                         ", rgba(0, 0, 0, " +
  1549.                         this.shadow.opacity +
  1550.                         ") 5%, rgba(0, 0, 0, 0.05) 15%,rgba(0, 0, 0, " +
  1551.                         this.shadow.opacity +
  1552.                         ") 35%, rgba(0, 0, 0, 0) 100% )"),
  1553.                     (this.innerShadow.style.transformOrigin = i + "px 100px"),
  1554.                     (this.innerShadow.style.transform =
  1555.                         "translate3d(" +
  1556.                         (n.x - i) +
  1557.                         "px, " +
  1558.                         (n.y - 100) +
  1559.                         "px, 0) rotate(" +
  1560.                         o +
  1561.                         "rad)");
  1562.                 const h = [
  1563.                     this.pageRect.topLeft,
  1564.                     this.pageRect.topRight,
  1565.                     this.pageRect.bottomRight,
  1566.                     this.pageRect.bottomLeft
  1567.                 ];
  1568.                 let r = "polygon( ";
  1569.                 for (const t of h) {
  1570.                     let e =
  1571.                         1 === this.getDirection()
  1572.                             ? { x: -t.x + this.shadow.pos.x, y: t.y - this.shadow.pos.y }
  1573.                             : { x: t.x - this.shadow.pos.x, y: t.y - this.shadow.pos.y };
  1574.                     (e = a.GetRotatedPoint(e, { x: i, y: 100 }, o)),
  1575.                         (r += e.x + "px " + e.y + "px, ");
  1576.                 }
  1577.                 (r = r.slice(0, -2)),
  1578.                     (r += ")"),
  1579.                     (this.innerShadow.style.clipPath = r),
  1580.                     this.innerShadow.style.setProperty("-webkit-clip-path", r);
  1581.             }
  1582.             drawOuterShadow() {
  1583.                 const t = this.getRect(),
  1584.                     e = this.convertToGlobal({ x: this.shadow.pos.x, y: this.shadow.pos.y }),
  1585.                     i = this.shadow.angle + (3 * Math.PI) / 2,
  1586.                     s = 1 === this.getDirection() ? this.shadow.width : 0,
  1587.                     n = 0 === this.getDirection() ? "to right" : "to left";
  1588.                 (this.outerShadow.style.width = this.shadow.width + "px"),
  1589.                     (this.outerShadow.style.height = 2 * t.height + "px"),
  1590.                     (this.outerShadow.style.background =
  1591.                         "linear-gradient(" +
  1592.                         n +
  1593.                         ", rgba(0, 0, 0, " +
  1594.                         this.shadow.opacity +
  1595.                         "), rgba(0, 0, 0, 0))"),
  1596.                     (this.outerShadow.style.transformOrigin = s + "px 100px"),
  1597.                     (this.outerShadow.style.transform =
  1598.                         "translate3d(" +
  1599.                         (e.x - s) +
  1600.                         "px, " +
  1601.                         (e.y - 100) +
  1602.                         "px, 0) rotate(" +
  1603.                         i +
  1604.                         "rad)");
  1605.                 const o = [];
  1606.                 o.push(
  1607.                     { x: 0, y: 0 },
  1608.                     { x: t.pageWidth, y: 0 },
  1609.                     { x: t.pageWidth, y: t.height },
  1610.                     { x: 0, y: t.height }
  1611.                 );
  1612.                 let h = "polygon( ";
  1613.                 for (const t of o)
  1614.                     if (null !== t) {
  1615.                         let e =
  1616.                             1 === this.getDirection()
  1617.                                 ? { x: -t.x + this.shadow.pos.x, y: t.y - this.shadow.pos.y }
  1618.                                 : { x: t.x - this.shadow.pos.x, y: t.y - this.shadow.pos.y };
  1619.                         (e = a.GetRotatedPoint(e, { x: s, y: 100 }, i)),
  1620.                             (h += e.x + "px " + e.y + "px, ");
  1621.                     }
  1622.                 (h = h.slice(0, -2)),
  1623.                     (h += ")"),
  1624.                     (this.outerShadow.style.clipPath = h),
  1625.                     this.outerShadow.style.setProperty("-webkit-clip-path", h);
  1626.             }
  1627.             drawFrame(t) {
  1628.                 this.clear(),
  1629.                     "portrait" !== this.orientation
  1630.                         ? null != this.leftPage && this.leftPage.simpleDraw(0)
  1631.                         : null != this.leftPage && this.leftPage.clearSaved(),
  1632.                     null != this.rightPage && this.rightPage.simpleDraw(1),
  1633.                     null != this.bottomPage &&
  1634.                         (("portrait" === this.orientation && 1 === this.direction) ||
  1635.                             ((this.bottomPage.getElement().style.zIndex = (
  1636.                                 this.getSettings().startZIndex + 3
  1637.                             ).toString(10)),
  1638.                             this.bottomPage.draw())),
  1639.                     null != this.flippingPage &&
  1640.                         ((this.flippingPage.getElement().style.zIndex = (
  1641.                             this.getSettings().startZIndex + 4
  1642.                         ).toString(10)),
  1643.                         this.flippingPage.draw()),
  1644.                     null != this.shadow && (this.drawOuterShadow(), this.drawInnerShadow());
  1645.             }
  1646.             clear() {
  1647.                 const t = [];
  1648.                 this.leftPage && t.push(this.leftPage.getElement()),
  1649.                     this.rightPage && t.push(this.rightPage.getElement()),
  1650.                     this.flippingPage && t.push(this.flippingPage.getElement()),
  1651.                     this.bottomPage && t.push(this.bottomPage.getElement());
  1652.                 for (const e of this.items)
  1653.                     t.includes(e) ||
  1654.                         ((e.style.display = "none"),
  1655.                         (e.style.zIndex = (this.getSettings().startZIndex + 1).toString(10)),
  1656.                         (e.style.transform = ""));
  1657.             }
  1658.             clearClass(t) {
  1659.                 null !== t && t.getElement().classList.remove("--left", "--right");
  1660.             }
  1661.             setRightPage(t) {
  1662.                 this.clearClass(this.rightPage),
  1663.                     null !== this.rightPage &&
  1664.                         t !== this.rightPage &&
  1665.                         this.rightPage.clearSaved(),
  1666.                     null !== t && t.getElement().classList.add("--right"),
  1667.                     super.setRightPage(t);
  1668.             }
  1669.             setLeftPage(t) {
  1670.                 this.clearClass(this.leftPage),
  1671.                     null !== this.leftPage &&
  1672.                         t !== this.rightPage &&
  1673.                         this.leftPage.clearSaved(),
  1674.                     null !== t && t.getElement().classList.add("--left"),
  1675.                     super.setLeftPage(t);
  1676.             }
  1677.             setBottomPage(t) {
  1678.                 null !== t &&
  1679.                     t.getElement().classList.add(1 === this.direction ? "--left" : "--right"),
  1680.                     super.setBottomPage(t);
  1681.             }
  1682.             setFlippingPage(t) {
  1683.                 null !== t &&
  1684.                     t.getElement().classList.add(1 === this.direction ? "--right" : "--left"),
  1685.                     super.setFlippingPage(t);
  1686.             }
  1687.             update() {
  1688.                 super.update(),
  1689.                     null !== this.rightPage &&
  1690.                         (this.rightPage.getElement().classList.add("--right"),
  1691.                         this.rightPage.clearSaved()),
  1692.                     null !== this.leftPage &&
  1693.                         (this.leftPage.getElement().classList.add("--left"),
  1694.                         this.leftPage.clearSaved());
  1695.             }
  1696.         }
  1697.         let x = (() => {
  1698.             class t {
  1699.                 static GetSettings(t) {
  1700.                     const e = this._default;
  1701.                     if ((Object.assign(e, t), "stretch" !== e.size && "fixed" !== e.size))
  1702.                         throw new Error(
  1703.                             'Invalid size type. Available only "fixed" and "stretch" value'
  1704.                         );
  1705.                     if (e.width <= 0 || e.height <= 0)
  1706.                         throw new Error("Invalid width or height");
  1707.                     if (e.flippingTime <= 0) throw new Error("Invalid flipping time");
  1708.                     return (
  1709.                         e.minWidth <= 0 && (e.minWidth = e.width),
  1710.                         e.maxWidth < e.minWidth && (e.maxWidth = e.minWidth),
  1711.                         e.minHeight <= 0 && (e.minHeight = e.height),
  1712.                         e.maxHeight < e.minHeight && (e.maxHeight = e.minHeight),
  1713.                         e
  1714.                     );
  1715.                 }
  1716.             }
  1717.             return (
  1718.                 (t._default = {
  1719.                     startPage: 0,
  1720.                     size: "fixed",
  1721.                     width: 0,
  1722.                     height: 0,
  1723.                     minWidth: 0,
  1724.                     maxWidth: 0,
  1725.                     minHeight: 0,
  1726.                     maxHeight: 0,
  1727.                     drawShadow: !0,
  1728.                     flippingTime: 1e3,
  1729.                     usePortrait: !0,
  1730.                     startZIndex: 0,
  1731.                     autoSize: !0,
  1732.                     maxShadowOpacity: 1
  1733.                 }),
  1734.                 t
  1735.             );
  1736.         })();
  1737.         i(0);
  1738.         class w extends class {
  1739.             constructor() {
  1740.                 this.events = {};
  1741.             }
  1742.             on(t, e) {
  1743.                 return (
  1744.                     t in this.events ? this.events[t].push(e) : (this.events[t] = [e]), this
  1745.                 );
  1746.             }
  1747.             off(t) {
  1748.                 delete this.events[t];
  1749.             }
  1750.             trigger(t, e, i = null) {
  1751.                 t in this.events &&
  1752.                     this.events[t].forEach((t) => {
  1753.                         t({ data: i, object: e });
  1754.                     });
  1755.             }
  1756.         } {
  1757.             constructor(t, e) {
  1758.                 super(),
  1759.                     (this.isUserTouch = !1),
  1760.                     (this.isUserMove = !1),
  1761.                     (this.pages = null),
  1762.                     (this.currentPage = 0),
  1763.                     (this.setting = null);
  1764.                 try {
  1765.                     (this.setting = x.GetSettings(e)), (this.block = t);
  1766.                 } catch (t) {}
  1767.             }
  1768.             update() {
  1769.                 this.render.update(), this.pages.show(this.currentPage);
  1770.             }
  1771.             turnToPrevPage() {
  1772.                 const t = "portrait" === this.render.getOrientation() ? 1 : 2;
  1773.                 this.currentPage < t ||
  1774.                     ((this.currentPage -= t), this.pages.show(this.currentPage));
  1775.             }
  1776.             turnToNextPage() {
  1777.                 const t = "portrait" === this.render.getOrientation() ? 1 : 2;
  1778.                 this.currentPage > this.pages.getPageCount() - t ||
  1779.                     ((this.currentPage += t), this.pages.show(this.currentPage));
  1780.             }
  1781.             turnToPage(t) {
  1782.                 this.checkPage(t) &&
  1783.                     ((this.currentPage = t), this.pages.show(this.currentPage));
  1784.             }
  1785.             flipNext(t = "top") {
  1786.                 this.flip.flipNext(t);
  1787.             }
  1788.             flipPrev(t = "top") {
  1789.                 this.flip.flipPrev(t);
  1790.             }
  1791.             loadFromImages(t) {
  1792.                 this.ui = new f(this.block, this, this.setting);
  1793.                 const e = this.ui.getCanvas();
  1794.                 (this.render = new p(this, this.setting, e)),
  1795.                     (this.flip = new c(this.render, this)),
  1796.                     (this.pages = new h(this, this.render, t)),
  1797.                     this.pages.load(),
  1798.                     this.render.start(),
  1799.                     (this.currentPage = this.setting.startPage),
  1800.                     this.pages.show(this.setting.startPage);
  1801.             }
  1802.             loadFromHTML(t) {
  1803.                 (this.ui = new m(this.block, this, this.setting, t)),
  1804.                     (this.render = new y(this, this.setting, this.ui.getDistElement(), t)),
  1805.                     (this.flip = new c(this.render, this)),
  1806.                     (this.pages = new l(this, this.render, this.ui.getDistElement(), t)),
  1807.                     this.pages.load(),
  1808.                     this.render.start(),
  1809.                     (this.currentPage = this.setting.startPage),
  1810.                     this.pages.show(this.setting.startPage);
  1811.             }
  1812.             updateState(t) {
  1813.                 this.trigger("changeState", this, t);
  1814.             }
  1815.             updatePage(t) {
  1816.                 this.trigger("flip", this, t);
  1817.             }
  1818.             updateOrientation(t) {
  1819.                 "landscape" === t
  1820.                     ? (this.currentPage % 2 != 0 && this.currentPage--, this.update())
  1821.                     : (this.currentPage++, this.update()),
  1822.                     this.ui.setOrientationStyle(t),
  1823.                     this.trigger("changeOrientation", this, t);
  1824.             }
  1825.             getPageCount() {
  1826.                 return this.pages.getPageCount();
  1827.             }
  1828.             getCurrentPageIndex() {
  1829.                 return this.currentPage;
  1830.             }
  1831.             getCurrentPage() {
  1832.                 return this.pages.getPage(this.currentPage);
  1833.             }
  1834.             getPage(t) {
  1835.                 return this.pages.getPage(t);
  1836.             }
  1837.             getRender() {
  1838.                 return this.render;
  1839.             }
  1840.             getFlipObject() {
  1841.                 return this.flip;
  1842.             }
  1843.             getOrientation() {
  1844.                 return this.render.getOrientation();
  1845.             }
  1846.             getBoundsRect() {
  1847.                 return this.render.getRect();
  1848.             }
  1849.             getSettings() {
  1850.                 return this.setting;
  1851.             }
  1852.             getUI() {
  1853.                 return this.ui;
  1854.             }
  1855.             startUserTouch(t) {
  1856.                 (this.mousePosition = t), (this.isUserTouch = !0), (this.isUserMove = !1);
  1857.             }
  1858.             userMove(t, e) {
  1859.                 this.isUserTouch || e
  1860.                     ? this.isUserTouch &&
  1861.                       a.GetDestinationFromTwoPoint(this.mousePosition, t) > 5 &&
  1862.                       ((this.isUserMove = !0), this.flip.fold(t))
  1863.                     : this.flip.showCorner(t);
  1864.             }
  1865.             userStop(t, e = !1) {
  1866.                 this.isUserTouch &&
  1867.                     ((this.isUserTouch = !1),
  1868.                     e || (this.isUserMove ? this.flip.stopMove() : this.flip.flip(t)));
  1869.             }
  1870.             checkPage(t) {
  1871.                 return t >= 0 && t < this.pages.getPageCount();
  1872.             }
  1873.         }
  1874.         document.addEventListener("DOMContentLoaded", function () {
  1875.             const t = new w(document.getElementById("canvasBookExample"), {
  1876.                 width: 550,
  1877.                 height: 733,
  1878.                 size: "stretch",
  1879.                 minWidth: 350,
  1880.                 maxWidth: 700,
  1881.                 minHeight: 467,
  1882.                 maxHeight: 933
  1883.             });
  1884.             t.loadFromImages([
  1885.                 "https://cdn.pixabay.com/photo/2015/05/03/14/40/woman-751236__340.jpg",
  1886.                 "https://cdn.pixabay.com/photo/2015/03/04/12/59/bells-flower-658751__340.jpg",
  1887.                 "https://cdn.pixabay.com/photo/2014/04/10/11/27/flower-320874__340.jpg",
  1888.                 "https://cdn.pixabay.com/photo/2017/04/12/23/23/wild-flower-2226095__340.jpg",
  1889.                 "https://cdn.pixabay.com/photo/2015/05/15/14/47/woman-768702__340.jpg",
  1890.                 "https://cdn.pixabay.com/photo/2015/02/23/20/49/flowers-646637__340.jpg",
  1891.                 "https://cdn.pixabay.com/photo/2016/07/12/17/30/flower-1512646__340.jpg",
  1892.                 "https://cdn.pixabay.com/photo/2020/03/10/15/54/dandelion-4919334__340.jpg",
  1893.                 "https://cdn.pixabay.com/photo/2020/04/29/16/10/vase-5109481__340.jpg",
  1894.                 "https://cdn.pixabay.com/photo/2014/02/10/00/32/rose-263234__340.jpg",
  1895.                 "https://cdn.pixabay.com/photo/2020/03/10/15/54/dandelion-4919334__340.jpg",
  1896.                 "https://cdn.pixabay.com/photo/2016/03/09/09/30/flowers-1245828__340.jpg",
  1897.                 "https://cdn.pixabay.com/photo/2012/03/03/23/59/flowers-21708__340.jpg",
  1898.                 "https://cdn.pixabay.com/photo/2015/01/07/10/24/aster-591311__340.jpg"
  1899.             ]);
  1900.             const e = new w(document.getElementById("htmlBookExample"), {
  1901.                     width: 550,
  1902.                     height: 733,
  1903.                     size: "stretch",
  1904.                     minWidth: 350,
  1905.                     maxWidth: 700,
  1906.                     minHeight: 467,
  1907.                     maxHeight: 933,
  1908.                     autoSize: !0,
  1909.                     maxShadowOpacity: 0.5
  1910.                 }),
  1911.                 i = document.getElementById("htmlBook"),
  1912.                 s = document.getElementById("canvasBook"),
  1913.                 n = document.getElementById("buttonDemoSelection"),
  1914.                 o = n.querySelectorAll("button");
  1915.             let h = e;
  1916.             for (const a of o)
  1917.                 a.addEventListener("click", (o) => {
  1918.                     const a = n.querySelector(".btn-primary");
  1919.                     a.classList.remove("btn-primary"), a.classList.add("btn-secondary");
  1920.                     const r = o.target;
  1921.                     r.classList.add("btn-primary"), r.classList.remove("btn-secondary");
  1922.                     "html" === r.dataset.dest
  1923.                         ? ((h = e),
  1924.                           (s.style.display = "none"),
  1925.                           (i.style.display = "block"),
  1926.                           e.getUI().update(),
  1927.                           e.update())
  1928.                         : ((h = t),
  1929.                           (s.style.display = "block"),
  1930.                           (i.style.display = "none"),
  1931.                           t.getUI().update(),
  1932.                           t.update());
  1933.                 });
  1934.             document.querySelector(".btn-book-next").addEventListener("click", () => {
  1935.                 h.flipNext();
  1936.             }),
  1937.                 document.querySelector(".btn-book-prev").addEventListener("click", () => {
  1938.                     h.flipPrev();
  1939.                 }),
  1940.                 t.on("flip", (e) => {
  1941.                     const i = parseInt(e.data.toString(), 10) + 1;
  1942.                     (document.querySelector(".page-count").innerHTML = i.toString(10)),
  1943.                         (document.querySelector(
  1944.                             ".page-total"
  1945.                         ).innerHTML = t.getPageCount().toString(10));
  1946.                 }),
  1947.                 e.on("flip", (t) => {
  1948.                     const i = parseInt(t.data.toString(), 10) + 1;
  1949.                     (document.querySelector(".page-count").innerHTML = i.toString(10)),
  1950.                         (document.querySelector(
  1951.                             ".page-total"
  1952.                         ).innerHTML = e.getPageCount().toString(10));
  1953.                 }),
  1954.                 e.loadFromHTML(document.querySelectorAll(".page"));
  1955.         });
  1956.     }
  1957. ]);
Add Comment
Please, Sign In to add comment