PluginProbe ʕ •ᴥ•ʔ
Elementor Website Builder – more than just a page builder / 3.6.0-beta5
Elementor Website Builder – more than just a page builder v3.6.0-beta5
4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.22.0-dev1 4.0.0-beta3 3.22.0-dev2 4.0.0-beta4 3.22.0-dev3 4.0.0-beta5 3.22.0-dev4 4.0.0-dev1 3.22.0-dev5 4.0.0-dev2 3.22.0-dev6 4.0.0-dev3 3.22.1 4.0.0-dev4 3.22.2 4.0.0-dev5 3.22.3 4.0.1 3.23.0 4.0.2 3.23.0-beta1 3.23.0-beta2 3.23.0-beta3 3.23.0-beta4 3.23.0-beta5 3.23.0-beta6 3.23.0-dev1 3.23.0-dev2 3.23.0-dev3 3.23.0-dev4 3.23.0-dev5 3.23.0-dev6 3.23.1 3.23.2 3.23.3 3.23.4 3.24.0 3.24.0-beta1 3.24.0-beta2 3.24.0-beta3 3.24.0-dev1 3.24.0-dev2 3.24.0-dev3 3.24.1 3.24.2 3.24.3 3.24.4 3.24.5 3.24.6 3.24.7 3.24.8 3.25.0 3.25.0-beta1 3.25.0-beta2 3.25.0-beta3 3.25.0-dev1 3.25.0-dev2 3.25.0-dev3 3.25.1 3.25.10 3.25.11 3.25.2 3.25.3 3.25.4 3.25.5 3.25.6 3.25.7 3.25.8 3.25.9 3.26.0 3.26.0-beta1 3.26.0-beta2 3.26.0-beta3 3.26.0-beta4 3.26.0-beta5 3.26.0-dev1 3.26.0-dev2 3.26.0-dev3 3.26.0-dev4 3.26.0-dev5 3.26.1 3.26.2 3.26.3 3.26.4 3.26.5 3.27.0 3.27.0-beta1 3.27.0-beta2 3.27.0-dev1 3.27.0-dev2 3.27.1 3.27.2 3.27.3 3.27.4 3.27.5 3.27.6 3.27.7 3.28.0 3.28.0-beta1 3.28.0-beta2 3.28.0-beta3 3.28.0-dev1 3.28.0-dev2 3.28.0-dev3 3.28.1 3.28.2 3.28.3 3.28.4 3.29.0 3.29.0-beta1 trunk 3.29.0-beta2 3.0.0 3.29.0-beta3 3.0.1 3.29.0-beta4 3.0.10 3.29.0-dev1 3.0.11 3.29.0-dev2 3.0.12 3.29.0-dev3 3.0.13 3.29.0-dev4 3.0.14 3.29.1 3.0.15 3.29.2 3.0.16 3.3.0 3.0.2 3.3.1 3.0.3 3.30.0 3.0.4 3.30.0-beta1 3.0.5 3.30.0-beta2 3.0.6 3.30.0-beta3 3.0.7 3.30.0-dev1 3.0.8 3.30.0-dev2 3.0.8.1 3.30.0-dev3 3.0.9 3.30.1 3.1.0 3.30.2 3.1.0-beta1 3.30.3 3.1.0-beta2 3.30.4 3.1.0-beta3 3.31.0 3.1.0-beta4 3.31.0-beta1 3.1.0-dev1 3.31.0-beta2 3.1.0-dev2 3.31.0-dev1 3.1.0-dev3 3.31.0-dev2 3.1.1 3.31.1 3.1.2 3.31.2 3.1.3 3.31.3 3.1.4 3.31.4 3.10.0 3.31.5 3.10.0-dev1 3.32.0 3.10.1 3.32.0-beta1 3.10.2 3.32.0-beta2 3.11.0 3.32.0-beta3 3.11.0-beta1 3.32.0-dev1 3.11.0-beta2 3.32.0-dev2 3.11.0-beta3 3.32.0-dev3 3.11.0-dev1 3.32.1 3.11.0-dev2 3.32.2 3.11.0-dev3 3.32.3 3.11.1 3.32.4 3.11.2 3.32.5 3.11.3 3.33.0 3.11.4 3.33.0-beta1 3.11.5 3.33.0-beta2 3.12.0 3.33.0-beta3 3.12.1 3.33.0-beta4 3.12.2 3.33.0-dev1 3.13.0 3.33.0-dev2 3.13.0-beta1 3.33.0-dev3 3.13.0-beta2 3.33.0-dev4 3.13.0-beta3 3.33.1 3.13.0-dev3 3.33.2 3.13.0-dev4 3.33.3 3.13.1 3.33.4 3.13.2 3.33.5 3.13.3 3.33.6 3.13.4 3.34.0 3.14.0 3.34.0-beta1 3.14.0-beta1 3.34.0-beta2 3.14.0-beta2 3.34.0-beta3 3.14.0-beta3 3.34.0-dev1 3.14.0-beta4 3.34.0-dev2 3.14.0-beta5 3.34.1 3.14.1 3.34.2 3.15.0 3.34.3 3.15.1 3.34.4 3.15.2 3.35.0 3.15.3 3.35.0-beta1 3.16.0 3.35.0-beta2 3.16.0-beta3 3.35.0-beta3 3.16.0-beta4 3.35.0-beta4 3.16.0-dev1 3.35.0-dev1 3.16.0-dev2 3.35.0-dev2 3.16.1 3.35.0-dev3 3.16.2 3.35.0-dev4 3.16.3 3.35.1 3.16.4 3.35.2 3.16.5 3.35.3 3.16.6 3.35.4 3.17.0 3.35.5 3.17.0-dev2 3.35.6 3.17.0-dev3 3.35.7 3.17.0-dev4 3.35.8 3.17.1 3.35.9 3.17.2 3.4.0 3.17.3 3.4.0-dev7 3.18.0 3.4.0-dev8 3.18.0-beta1 3.4.0-dev9 3.18.0-beta2 3.4.1 3.18.0-beta3 3.4.2 3.18.0-beta4 3.4.3 3.18.0-dev1 3.4.4 3.18.1 3.4.5 3.18.2 3.4.6 3.18.3 3.4.7 3.19.0 3.4.8 3.19.0-beta1 3.5.0 3.19.0-beta2 3.5.0-beta1 3.19.0-beta3 3.5.0-beta2 3.19.0-beta4 3.5.0-beta3 3.19.0-beta5 3.5.0-beta4 3.19.0-beta6 3.5.0-beta5 3.19.0-dev1 3.5.0-beta7 3.19.0-dev2 3.5.0-beta8 3.19.0-dev3 3.5.0-dev8 3.19.0-dev4 3.5.0-dev9 3.19.0-dev5 3.5.1 3.19.0-dev6 3.5.2 3.19.1 3.5.3 3.19.2 3.5.4 3.19.3 3.5.5 3.19.4 3.5.6 3.2.0 3.6.0 3.2.1 3.6.0-beta1 3.2.2 3.6.0-beta2 3.2.3 3.6.0-beta3 3.2.4 3.6.0-beta4 3.2.5 3.6.0-beta5 3.20.0 3.6.0-dev1 3.20.0-beta1 3.6.0-dev10 3.20.0-beta2 3.6.1 3.20.0-beta3 3.6.2 3.20.0-beta4 3.6.3 3.20.0-dev1 3.6.4 3.20.0-dev2 3.6.5 3.20.0-dev3 3.6.6 3.20.0-dev4 3.6.7 3.20.1 3.6.8 3.20.2 3.7.0 3.20.3 3.7.0-beta1 3.20.4 3.7.0-beta2 3.21.0 3.7.0-beta3 3.21.0-beta1 3.7.0-beta4 3.21.0-beta2 3.7.0-dev1 3.21.0-beta3 3.7.1 3.21.0-dev1 3.7.2 3.21.0-dev2 3.7.3 3.21.0-dev3 3.7.4 3.21.1 3.7.5 3.21.2 3.7.6 3.21.3 3.7.7 3.21.4 3.7.8 3.21.5 3.8.0 3.21.6 3.8.0-beta1 3.21.7 3.8.0-beta2 3.21.8 3.8.0-beta3 3.22.0 3.8.1 3.22.0-beta1 3.9.0 3.22.0-beta2 3.9.1 3.22.0-beta3 3.9.2 3.22.0-beta4 4.0.0 3.22.0-beta5 4.0.0-beta1 3.22.0-beta6 4.0.0-beta2
elementor / assets / js / lightbox.fe7d7981b2527f42f605.bundle.js
elementor / assets / js Last commit date
accordion.1840403ce81de408c749.bundle.min.js 4 years ago accordion.a037e351fac33e9c9dfc.bundle.js 4 years ago admin-feedback.js 4 years ago admin-feedback.min.js 4 years ago admin-modules.js 4 years ago admin-modules.min.js 4 years ago admin-top-bar.js 4 years ago admin-top-bar.min.js 4 years ago admin.js 4 years ago admin.min.js 4 years ago alert.85332a4bfb582d516461.bundle.js 4 years ago alert.cbc2a0fee74ee3ed0419.bundle.min.js 4 years ago app-loader.js 4 years ago app-loader.min.js 4 years ago app-packages.js 4 years ago app-packages.min.js 4 years ago app.js 4 years ago app.min.js 4 years ago app.min.js.LICENSE.txt 4 years ago b5be57139d4edd0d5633.bundle.js 4 years ago beta-tester.js 4 years ago beta-tester.min.js 4 years ago common-modules.js 4 years ago common-modules.min.js 4 years ago common.js 4 years ago common.min.js 4 years ago container-converter.js 4 years ago container-converter.min.js 4 years ago container.e026b16a99db8a3987c9.bundle.min.js 4 years ago container.f3a37a5bf3c787312748.bundle.js 4 years ago counter.02cef29c589e742d4c8c.bundle.min.js 4 years ago counter.c75eea9549b9f8026ad8.bundle.js 4 years ago editor-document.js 4 years ago editor-document.min.js 4 years ago editor-modules.js 4 years ago editor-modules.min.js 4 years ago editor.js 4 years ago editor.min.js 4 years ago elementor-admin-bar.js 4 years ago elementor-admin-bar.min.js 4 years ago fe4cf752908671676148.bundle.min.js 4 years ago frontend-modules.js 4 years ago frontend-modules.min.js 4 years ago frontend.js 4 years ago frontend.min.js 4 years ago gutenberg.js 4 years ago gutenberg.min.js 4 years ago image-carousel.b69ea9450ea7e942e017.bundle.js 4 years ago image-carousel.db284b09c0f8a8f1c44d.bundle.min.js 4 years ago kit-library.4a93dd22359db6c3e7f9.bundle.min.js 4 years ago kit-library.4b8e9bb062f992326c78.bundle.js 4 years ago lightbox.2b2c155d6ec60974d8c4.bundle.min.js 4 years ago lightbox.fe7d7981b2527f42f605.bundle.js 4 years ago new-template.js 4 years ago new-template.min.js 4 years ago onboarding.6a289d52dcf568139a7d.bundle.min.js 4 years ago onboarding.eff243c8052ee52943bc.bundle.js 4 years ago preloaded-modules.js 4 years ago preloaded-modules.min.js 4 years ago progress.62211c8098d91fc19c5f.bundle.js 4 years ago progress.ca55d33bb06cee4e6f02.bundle.min.js 4 years ago tabs.37d5b4877cdb51ea91e9.bundle.min.js 4 years ago tabs.973c14c2ee401e66e192.bundle.js 4 years ago text-editor.289ae80d76f0c5abea44.bundle.min.js 4 years ago text-editor.533215eb763ebfb3a70c.bundle.js 4 years ago text-path.15d47ed8e5e3031f9610.bundle.js 4 years ago text-path.9f18ebdea5ac00d653e5.bundle.min.js 4 years ago toggle.56f8ace4b1e830c02fc5.bundle.min.js 4 years ago toggle.66e1aea86557ee6b7fd9.bundle.js 4 years ago video.255c225d20f04576d1bf.bundle.js 4 years ago video.d86bfd0676264945e968.bundle.min.js 4 years ago web-cli.js 4 years ago web-cli.min.js 4 years ago webpack.runtime.js 4 years ago webpack.runtime.min.js 4 years ago wp-audio.75f0ced143febb8cd31a.bundle.min.js 4 years ago wp-audio.8d458e51b4543ed99c04.bundle.js 4 years ago
lightbox.fe7d7981b2527f42f605.bundle.js
1424 lines
1 /*! elementor - v3.5.6 - 21-03-2022 */
2 (self["webpackChunkelementor"] = self["webpackChunkelementor"] || []).push([["lightbox"],{
3
4 /***/ "../node_modules/@babel/runtime/helpers/defineProperty.js":
5 /*!****************************************************************!*\
6 !*** ../node_modules/@babel/runtime/helpers/defineProperty.js ***!
7 \****************************************************************/
8 /***/ ((module) => {
9
10 function _defineProperty(obj, key, value) {
11 if (key in obj) {
12 Object.defineProperty(obj, key, {
13 value: value,
14 enumerable: true,
15 configurable: true,
16 writable: true
17 });
18 } else {
19 obj[key] = value;
20 }
21
22 return obj;
23 }
24
25 module.exports = _defineProperty;
26 module.exports["default"] = module.exports, module.exports.__esModule = true;
27
28 /***/ }),
29
30 /***/ "../assets/dev/js/frontend/utils/icons/e-icons.js":
31 /*!********************************************************!*\
32 !*** ../assets/dev/js/frontend/utils/icons/e-icons.js ***!
33 \********************************************************/
34 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
35
36 "use strict";
37
38
39 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
40
41 Object.defineProperty(exports, "__esModule", ({
42 value: true
43 }));
44 exports.zoomOutBold = exports.zoomInBold = exports.twitter = exports.shareArrow = exports.pinterest = exports.loading = exports.frameMinimize = exports.frameExpand = exports.facebook = exports.downloadBold = exports.close = exports.chevronRight = exports.chevronLeft = void 0;
45
46 var _manager = _interopRequireDefault(__webpack_require__(/*! ./manager */ "../assets/dev/js/frontend/utils/icons/manager.js"));
47
48 // This file is automatically generated, please don't change anything in this file.
49 const iconsManager = new _manager.default('eicon');
50 const chevronLeft = {
51 get element() {
52 const svgData = {
53 path: 'M646 125C629 125 613 133 604 142L308 442C296 454 292 471 292 487 292 504 296 521 308 533L604 854C617 867 629 875 646 875 663 875 679 871 692 858 704 846 713 829 713 812 713 796 708 779 692 767L438 487 692 225C700 217 708 204 708 187 708 171 704 154 692 142 675 129 663 125 646 125Z',
54 width: 1000,
55 height: 1000
56 };
57 return iconsManager.createSvgElement('chevron-left', svgData);
58 }
59
60 };
61 exports.chevronLeft = chevronLeft;
62 const chevronRight = {
63 get element() {
64 const svgData = {
65 path: 'M696 533C708 521 713 504 713 487 713 471 708 454 696 446L400 146C388 133 375 125 354 125 338 125 325 129 313 142 300 154 292 171 292 187 292 204 296 221 308 233L563 492 304 771C292 783 288 800 288 817 288 833 296 850 308 863 321 871 338 875 354 875 371 875 388 867 400 854L696 533Z',
66 width: 1000,
67 height: 1000
68 };
69 return iconsManager.createSvgElement('chevron-right', svgData);
70 }
71
72 };
73 exports.chevronRight = chevronRight;
74 const close = {
75 get element() {
76 const svgData = {
77 path: 'M742 167L500 408 258 167C246 154 233 150 217 150 196 150 179 158 167 167 154 179 150 196 150 212 150 229 154 242 171 254L408 500 167 742C138 771 138 800 167 829 196 858 225 858 254 829L496 587 738 829C750 842 767 846 783 846 800 846 817 842 829 829 842 817 846 804 846 783 846 767 842 750 829 737L588 500 833 258C863 229 863 200 833 171 804 137 775 137 742 167Z',
78 width: 1000,
79 height: 1000
80 };
81 return iconsManager.createSvgElement('close', svgData);
82 }
83
84 };
85 exports.close = close;
86 const downloadBold = {
87 get element() {
88 const svgData = {
89 path: 'M572 42H428C405 42 385 61 385 85V385H228C197 385 180 424 203 447L475 719C489 732 511 732 524 719L797 447C819 424 803 385 771 385H614V85C615 61 595 42 572 42ZM958 915V715C958 691 939 672 915 672H653L565 760C529 796 471 796 435 760L347 672H85C61 672 42 691 42 715V915C42 939 61 958 85 958H915C939 958 958 939 958 915ZM736 873C736 853 720 837 700 837 681 837 665 853 665 873 665 892 681 908 700 908 720 908 736 892 736 873ZM815 837C835 837 851 853 851 873 851 892 835 908 815 908 795 908 779 892 779 873 779 853 795 837 815 837Z',
90 width: 1000,
91 height: 1000
92 };
93 return iconsManager.createSvgElement('download-bold', svgData);
94 }
95
96 };
97 exports.downloadBold = downloadBold;
98 const facebook = {
99 get element() {
100 const svgData = {
101 path: 'M858 42H142C88 42 42 87 42 142V863C42 913 88 958 142 958H421V646H292V500H421V387C421 258 496 192 613 192 667 192 725 200 725 200V325H663C600 325 579 362 579 404V500H721L700 646H583V958H863C917 958 963 913 963 858V142C958 87 913 42 858 42L858 42Z',
102 width: 1000,
103 height: 1000
104 };
105 return iconsManager.createSvgElement('facebook', svgData);
106 }
107
108 };
109 exports.facebook = facebook;
110 const frameExpand = {
111 get element() {
112 const svgData = {
113 path: 'M863 583C890 583 914 605 916 632L917 637V863L916 868C914 893 893 914 868 916L863 917H638L632 916C607 914 586 893 584 868L583 863 584 857C586 832 607 811 632 809L638 808H808V637L809 632C811 605 835 583 863 583ZM138 583C165 583 189 605 191 632L192 637V808H363C390 808 414 830 416 857L417 863C417 890 395 914 368 916L363 917H138C110 917 86 895 84 868L83 863V637C83 607 108 583 138 583ZM863 83C890 83 914 105 916 132L917 137V362C917 392 893 417 863 417 835 417 811 395 809 368L808 362V192H638C610 192 586 170 584 143L583 137C583 110 605 86 632 84L638 83H863ZM363 83L368 84C393 86 414 107 416 132L417 137 416 143C414 168 393 189 368 191L363 192H192V362L191 368C189 395 165 417 138 417S86 395 84 368L83 362V137L84 132C86 107 107 86 132 84L138 83H363Z',
114 width: 1000,
115 height: 1000
116 };
117 return iconsManager.createSvgElement('frame-expand', svgData);
118 }
119
120 };
121 exports.frameExpand = frameExpand;
122 const frameMinimize = {
123 get element() {
124 const svgData = {
125 path: 'M363 583C392 583 413 604 417 633L417 637V863C417 892 392 917 363 917 333 917 313 896 308 867L308 863V692H138C108 692 88 671 83 642L83 637C83 608 104 587 133 583L138 583H363ZM638 583C608 583 588 604 583 633L583 637V863C583 892 608 917 638 917 667 917 688 896 692 867L692 863V692H863C892 692 913 671 917 642L917 637C917 608 896 587 867 583L863 583H638ZM363 417C392 417 413 396 417 367L417 362V137C417 108 392 83 363 83 333 83 313 104 308 133L308 137V308H138C108 308 88 329 83 358L83 362C83 392 104 412 133 417L138 417H363ZM638 417C608 417 588 396 583 367L583 362V137C583 108 608 83 638 83 667 83 688 104 692 133L692 137V308H863C892 308 913 329 917 358L917 362C917 392 896 412 867 417L863 417H638Z',
126 width: 1000,
127 height: 1000
128 };
129 return iconsManager.createSvgElement('frame-minimize', svgData);
130 }
131
132 };
133 exports.frameMinimize = frameMinimize;
134 const loading = {
135 get element() {
136 const svgData = {
137 path: 'M500 975V858C696 858 858 696 858 500S696 142 500 142 142 304 142 500H25C25 237 238 25 500 25S975 237 975 500 763 975 500 975Z',
138 width: 1000,
139 height: 1000
140 };
141 return iconsManager.createSvgElement('loading', svgData);
142 }
143
144 };
145 exports.loading = loading;
146 const pinterest = {
147 get element() {
148 const svgData = {
149 path: 'M950 496C950 746 746 950 496 950 450 950 404 942 363 929 379 900 408 850 421 808 425 787 450 700 450 700 467 729 508 754 554 754 692 754 792 629 792 471 792 321 671 208 513 208 317 208 213 342 213 483 213 550 250 633 304 658 313 662 317 662 321 654 321 650 329 617 333 604 333 600 333 596 329 592 313 567 296 525 296 487 288 387 367 292 496 292 608 292 688 367 688 475 688 600 625 683 546 683 500 683 467 646 479 600 492 546 517 487 517 450 517 417 500 387 458 387 413 387 375 433 375 496 375 537 388 562 388 562S342 754 333 787C325 825 329 883 333 917 163 854 42 687 42 496 42 246 246 42 496 42S950 246 950 496Z',
150 width: 1000,
151 height: 1000
152 };
153 return iconsManager.createSvgElement('pinterest', svgData);
154 }
155
156 };
157 exports.pinterest = pinterest;
158 const shareArrow = {
159 get element() {
160 const svgData = {
161 path: 'M946 383L667 133C642 112 604 129 604 162V292C238 296 71 637 42 812 238 587 363 521 604 517V658C604 692 642 708 667 687L946 442C963 425 963 400 946 383Z',
162 width: 1000,
163 height: 1000
164 };
165 return iconsManager.createSvgElement('share-arrow', svgData);
166 }
167
168 };
169 exports.shareArrow = shareArrow;
170 const twitter = {
171 get element() {
172 const svgData = {
173 path: 'M863 312C863 321 863 329 863 337 863 587 675 871 329 871 221 871 125 842 42 787 58 787 71 792 88 792 175 792 254 762 321 712 238 712 171 658 146 583 158 583 171 587 183 587 200 587 217 583 233 579 146 562 83 487 83 396V387C108 400 138 408 167 412 117 379 83 321 83 254 83 221 92 187 108 158 200 271 342 346 496 354 492 342 492 325 492 312 492 208 575 125 679 125 733 125 783 146 817 183 858 175 900 158 938 137 925 179 896 217 854 242 892 237 929 229 963 212 933 250 900 283 863 312Z',
174 width: 1000,
175 height: 1000
176 };
177 return iconsManager.createSvgElement('twitter', svgData);
178 }
179
180 };
181 exports.twitter = twitter;
182 const zoomInBold = {
183 get element() {
184 const svgData = {
185 path: 'M388 383V312C388 283 413 258 442 258 471 258 496 283 496 312V383H567C596 383 621 408 621 437S596 492 567 492H496V562C496 592 471 617 442 617 413 617 388 592 388 562V492H317C288 492 263 467 263 437S288 383 317 383H388ZM654 733C592 779 517 804 438 804 233 804 71 642 71 437S233 71 438 71 804 233 804 437C804 521 779 596 733 654L896 817C917 837 917 871 896 892 875 913 842 913 821 892L654 733ZM438 696C579 696 696 579 696 437S579 179 438 179 179 296 179 437 296 696 438 696Z',
186 width: 1000,
187 height: 1000
188 };
189 return iconsManager.createSvgElement('zoom-in-bold', svgData);
190 }
191
192 };
193 exports.zoomInBold = zoomInBold;
194 const zoomOutBold = {
195 get element() {
196 const svgData = {
197 path: 'M750 683L946 879C963 896 963 929 946 946 929 963 896 967 879 946L683 750C617 804 533 833 438 833 221 833 42 654 42 437S221 42 438 42 833 221 833 437C833 529 800 612 750 683ZM296 392H575C600 392 621 412 621 442 621 467 600 487 575 487H296C271 487 250 467 250 442 250 412 271 392 296 392ZM438 737C604 737 738 604 738 437S604 137 438 137 138 271 138 437 271 737 438 737Z',
198 width: 1000,
199 height: 1000
200 };
201 return iconsManager.createSvgElement('zoom-out-bold', svgData);
202 }
203
204 };
205 exports.zoomOutBold = zoomOutBold;
206
207 /***/ }),
208
209 /***/ "../assets/dev/js/frontend/utils/icons/manager.js":
210 /*!********************************************************!*\
211 !*** ../assets/dev/js/frontend/utils/icons/manager.js ***!
212 \********************************************************/
213 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
214
215 "use strict";
216
217
218 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
219
220 Object.defineProperty(exports, "__esModule", ({
221 value: true
222 }));
223 exports["default"] = void 0;
224
225 var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js"));
226
227 class IconsManager {
228 constructor(elementsPrefix) {
229 this.prefix = `${elementsPrefix}-`;
230 this.createSvgSymbolsContainer();
231 }
232
233 createSvgElement(name, {
234 path,
235 width,
236 height
237 }) {
238 const iconName = this.prefix + name,
239 iconSelector = '#' + this.prefix + name; // Create symbol if not exist yet.
240
241 if (!IconsManager.iconsUsageList.includes(iconName)) {
242 if (!IconsManager.symbolsContainer.querySelector(iconSelector)) {
243 const symbol = this.createSymbolElement({
244 id: iconName,
245 path,
246 width,
247 height
248 });
249 IconsManager.symbolsContainer.appendChild(symbol);
250 }
251
252 IconsManager.iconsUsageList.push(iconName);
253 }
254
255 return this.createSvgIconElement({
256 iconName,
257 iconSelector
258 });
259 }
260
261 createSvgNode(tag, {
262 props = {},
263 attrs = {}
264 }) {
265 const node = document.createElementNS('http://www.w3.org/2000/svg', tag);
266 Object.keys(props).map(key => node[key] = props[key]);
267 Object.keys(attrs).map(key => node.setAttributeNS(null, key, attrs[key]));
268 return node;
269 }
270
271 createSvgIconElement({
272 iconName,
273 iconSelector
274 }) {
275 return this.createSvgNode('svg', {
276 props: {
277 innerHTML: '<use xlink:href="' + iconSelector + '" />'
278 },
279 attrs: {
280 class: 'e-font-icon-svg e-' + iconName
281 }
282 });
283 }
284
285 createSvgSymbolsContainer() {
286 if (!IconsManager.symbolsContainer) {
287 const symbolsContainerId = 'e-font-icon-svg-symbols';
288 IconsManager.symbolsContainer = document.getElementById(symbolsContainerId);
289
290 if (!IconsManager.symbolsContainer) {
291 IconsManager.symbolsContainer = this.createSvgNode('svg', {
292 attrs: {
293 style: 'display: none;',
294 class: symbolsContainerId
295 }
296 });
297 document.body.appendChild(IconsManager.symbolsContainer);
298 }
299 }
300 }
301
302 createSymbolElement({
303 id,
304 path,
305 width,
306 height
307 }) {
308 return this.createSvgNode('symbol', {
309 props: {
310 innerHTML: '<path d="' + path + '"></path>',
311 id
312 },
313 attrs: {
314 viewBox: '0 0 ' + width + ' ' + height
315 }
316 });
317 }
318
319 }
320
321 exports["default"] = IconsManager;
322 (0, _defineProperty2.default)(IconsManager, "symbolsContainer", void 0);
323 (0, _defineProperty2.default)(IconsManager, "iconsUsageList", []);
324
325 /***/ }),
326
327 /***/ "../assets/dev/js/frontend/utils/lightbox/lightbox.js":
328 /*!************************************************************!*\
329 !*** ../assets/dev/js/frontend/utils/lightbox/lightbox.js ***!
330 \************************************************************/
331 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
332
333 "use strict";
334
335
336 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
337
338 var _screenfull = _interopRequireDefault(__webpack_require__(/*! ./screenfull */ "../assets/dev/js/frontend/utils/lightbox/screenfull.js"));
339
340 var _eIcons = __webpack_require__(/*! @elementor/e-icons */ "../assets/dev/js/frontend/utils/icons/e-icons.js");
341
342 module.exports = elementorModules.ViewModule.extend({
343 oldAspectRatio: null,
344 oldAnimation: null,
345 swiper: null,
346 player: null,
347 isFontIconSvgExperiment: elementorFrontend.config.experimentalFeatures.e_font_icon_svg,
348 getDefaultSettings: function () {
349 return {
350 classes: {
351 aspectRatio: 'elementor-aspect-ratio-%s',
352 item: 'elementor-lightbox-item',
353 image: 'elementor-lightbox-image',
354 videoContainer: 'elementor-video-container',
355 videoWrapper: 'elementor-fit-aspect-ratio',
356 playButton: 'elementor-custom-embed-play',
357 playButtonIcon: 'fa',
358 playing: 'elementor-playing',
359 hidden: 'elementor-hidden',
360 invisible: 'elementor-invisible',
361 preventClose: 'elementor-lightbox-prevent-close',
362 slideshow: {
363 container: 'swiper-container',
364 slidesWrapper: 'swiper-wrapper',
365 prevButton: 'elementor-swiper-button elementor-swiper-button-prev',
366 nextButton: 'elementor-swiper-button elementor-swiper-button-next',
367 prevButtonIcon: 'eicon-chevron-left',
368 nextButtonIcon: 'eicon-chevron-right',
369 slide: 'swiper-slide',
370 header: 'elementor-slideshow__header',
371 footer: 'elementor-slideshow__footer',
372 title: 'elementor-slideshow__title',
373 description: 'elementor-slideshow__description',
374 counter: 'elementor-slideshow__counter',
375 iconExpand: 'eicon-frame-expand',
376 iconShrink: 'eicon-frame-minimize',
377 iconZoomIn: 'eicon-zoom-in-bold',
378 iconZoomOut: 'eicon-zoom-out-bold',
379 iconShare: 'eicon-share-arrow',
380 shareMenu: 'elementor-slideshow__share-menu',
381 shareLinks: 'elementor-slideshow__share-links',
382 hideUiVisibility: 'elementor-slideshow--ui-hidden',
383 shareMode: 'elementor-slideshow--share-mode',
384 fullscreenMode: 'elementor-slideshow--fullscreen-mode',
385 zoomMode: 'elementor-slideshow--zoom-mode'
386 }
387 },
388 selectors: {
389 image: '.elementor-lightbox-image',
390 links: 'a, [data-elementor-lightbox]',
391 slideshow: {
392 activeSlide: '.swiper-slide-active',
393 prevSlide: '.swiper-slide-prev',
394 nextSlide: '.swiper-slide-next'
395 }
396 },
397 modalOptions: {
398 id: 'elementor-lightbox',
399 entranceAnimation: 'zoomIn',
400 videoAspectRatio: 169,
401 position: {
402 enable: false
403 }
404 }
405 };
406 },
407 getModal: function () {
408 if (!module.exports.modal) {
409 this.initModal();
410 }
411
412 return module.exports.modal;
413 },
414 initModal: function () {
415 const closeIcon = {}; // If the experiment is active the closeIcon should be an entire SVG element otherwise it should pass the eicon class name.
416
417 if (this.isFontIconSvgExperiment) {
418 closeIcon.iconElement = _eIcons.close.element;
419 } else {
420 closeIcon.iconClass = 'eicon-close';
421 }
422
423 const modal = module.exports.modal = elementorFrontend.getDialogsManager().createWidget('lightbox', {
424 className: 'elementor-lightbox',
425 closeButton: true,
426 closeButtonOptions: { ...closeIcon,
427 attributes: {
428 tabindex: 0,
429 role: 'button',
430 'aria-label': elementorFrontend.config.i18n.close + ' (Esc)'
431 }
432 },
433 selectors: {
434 preventClose: '.' + this.getSettings('classes.preventClose')
435 },
436 hide: {
437 onClick: true
438 }
439 });
440 modal.on('hide', function () {
441 modal.setMessage('');
442 });
443 },
444 showModal: function (options) {
445 if (options.url && !options.url.startsWith('http')) {
446 return;
447 }
448
449 this.elements.$closeButton = this.getModal().getElements('closeButton');
450 this.$buttons = this.elements.$closeButton;
451 this.focusedButton = null;
452 const self = this,
453 defaultOptions = self.getDefaultSettings().modalOptions;
454 self.id = options.id;
455 self.setSettings('modalOptions', jQuery.extend(defaultOptions, options.modalOptions));
456 const modal = self.getModal();
457 modal.setID(self.getSettings('modalOptions.id'));
458
459 modal.onShow = function () {
460 DialogsManager.getWidgetType('lightbox').prototype.onShow.apply(modal, arguments);
461 self.setEntranceAnimation();
462 };
463
464 modal.onHide = function () {
465 DialogsManager.getWidgetType('lightbox').prototype.onHide.apply(modal, arguments);
466 modal.getElements('message').removeClass('animated');
467
468 if (_screenfull.default.isFullscreen) {
469 self.deactivateFullscreen();
470 }
471
472 self.unbindHotKeys();
473 };
474
475 switch (options.type) {
476 case 'video':
477 self.setVideoContent(options);
478 break;
479
480 case 'image':
481 const slides = [{
482 image: options.url,
483 index: 0,
484 title: options.title,
485 description: options.description,
486 hash: options.hash
487 }];
488 options.slideshow = {
489 slides,
490 swiper: {
491 loop: false,
492 pagination: false
493 }
494 };
495
496 case 'slideshow':
497 self.setSlideshowContent(options.slideshow);
498 break;
499
500 default:
501 self.setHTMLContent(options.html);
502 }
503
504 modal.show();
505 },
506 createLightbox: function (element) {
507 let lightboxData = {};
508
509 if (element.dataset.elementorLightbox) {
510 lightboxData = JSON.parse(element.dataset.elementorLightbox);
511 }
512
513 if (lightboxData.type && 'slideshow' !== lightboxData.type) {
514 this.showModal(lightboxData);
515 return;
516 }
517
518 if (!element.dataset.elementorLightboxSlideshow) {
519 const slideshowID = 'single-img';
520 this.showModal({
521 type: 'image',
522 id: slideshowID,
523 url: element.href,
524 hash: element.getAttribute('e-action-hash'),
525 title: element.dataset.elementorLightboxTitle,
526 description: element.dataset.elementorLightboxDescription,
527 modalOptions: {
528 id: 'elementor-lightbox-slideshow-' + slideshowID
529 }
530 });
531 return;
532 }
533
534 const initialSlideURL = element.dataset.elementorLightboxVideo || element.href;
535 this.openSlideshow(element.dataset.elementorLightboxSlideshow, initialSlideURL);
536 },
537 setHTMLContent: function (html) {
538 if (window.elementorCommon) {
539 elementorCommon.helpers.hardDeprecated('elementorFrontend.utils.lightbox.setHTMLContent', '3.1.4');
540 }
541
542 this.getModal().setMessage(html);
543 },
544 setVideoContent: function (options) {
545 const $ = jQuery,
546 classes = this.getSettings('classes'),
547 $videoContainer = $('<div>', {
548 class: `${classes.videoContainer} ${classes.preventClose}`
549 }),
550 $videoWrapper = $('<div>', {
551 class: classes.videoWrapper
552 }),
553 modal = this.getModal();
554 let $videoElement;
555
556 if ('hosted' === options.videoType) {
557 const videoParams = $.extend({
558 src: options.url,
559 autoplay: ''
560 }, options.videoParams);
561 $videoElement = $('<video>', videoParams);
562 } else {
563 let apiProvider;
564
565 if (-1 !== options.url.indexOf('vimeo.com')) {
566 apiProvider = elementorFrontend.utils.vimeo;
567 } else if (options.url.match(/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com|youtube-nocookie\.com)/)) {
568 apiProvider = elementorFrontend.utils.youtube;
569 } else {
570 return;
571 }
572
573 $videoElement = $('<iframe>', {
574 src: apiProvider.getAutoplayURL(options.url),
575 allowfullscreen: 1
576 });
577 }
578
579 $videoContainer.append($videoWrapper);
580 $videoWrapper.append($videoElement);
581 modal.setMessage($videoContainer);
582 this.setVideoAspectRatio();
583 const onHideMethod = modal.onHide;
584
585 modal.onHide = function () {
586 onHideMethod();
587 this.$buttons = jQuery();
588 this.focusedButton = null;
589 modal.getElements('message').removeClass('elementor-fit-aspect-ratio');
590 };
591 },
592 getShareLinks: function () {
593 const {
594 i18n
595 } = elementorFrontend.config,
596 socialNetworks = {
597 facebook: {
598 label: i18n.shareOnFacebook,
599 iconElement: _eIcons.facebook
600 },
601 twitter: {
602 label: i18n.shareOnTwitter,
603 iconElement: _eIcons.twitter
604 },
605 pinterest: {
606 label: i18n.pinIt,
607 iconElement: _eIcons.pinterest
608 }
609 },
610 $ = jQuery,
611 classes = this.getSettings('classes'),
612 selectors = this.getSettings('selectors'),
613 $linkList = $('<div>', {
614 class: classes.slideshow.shareLinks
615 }),
616 $activeSlide = this.getSlide('active'),
617 $image = $activeSlide.find(selectors.image),
618 videoUrl = $activeSlide.data('elementor-slideshow-video');
619 let itemUrl;
620
621 if (videoUrl) {
622 itemUrl = videoUrl;
623 } else {
624 itemUrl = $image.attr('src');
625 }
626
627 $.each(socialNetworks, (key, data) => {
628 const networkLabel = data.label,
629 $link = $('<a>', {
630 href: this.createShareLink(key, itemUrl, $activeSlide.attr('e-action-hash')),
631 target: '_blank'
632 }).text(networkLabel),
633 $socialNetworkIconElement = this.isFontIconSvgExperiment ? $(data.iconElement.element) : $('<i>', {
634 class: 'eicon-' + key
635 });
636 $link.prepend($socialNetworkIconElement);
637 $linkList.append($link);
638 });
639
640 if (!videoUrl) {
641 const $downloadIcon = this.isFontIconSvgExperiment ? $(_eIcons.downloadBold.element) : $('<i>', {
642 class: 'eicon-download-bold'
643 });
644 $downloadIcon.attr('aria-label', i18n.download);
645 $linkList.append($('<a>', {
646 href: itemUrl,
647 download: ''
648 }).text(i18n.downloadImage).prepend($downloadIcon));
649 }
650
651 return $linkList;
652 },
653 createShareLink: function (networkName, itemUrl, hash = null) {
654 const options = {};
655
656 if ('pinterest' === networkName) {
657 options.image = encodeURIComponent(itemUrl);
658 } else {
659 options.url = encodeURIComponent(location.href.replace(/#.*/, '') + hash);
660 }
661
662 return ShareLink.getNetworkLink(networkName, options);
663 },
664 getSlideshowHeader: function () {
665 const {
666 i18n
667 } = elementorFrontend.config,
668 $ = jQuery,
669 showCounter = 'yes' === elementorFrontend.getKitSettings('lightbox_enable_counter'),
670 showFullscreen = 'yes' === elementorFrontend.getKitSettings('lightbox_enable_fullscreen'),
671 showZoom = 'yes' === elementorFrontend.getKitSettings('lightbox_enable_zoom'),
672 showShare = 'yes' === elementorFrontend.getKitSettings('lightbox_enable_share'),
673 classes = this.getSettings('classes'),
674 slideshowClasses = classes.slideshow,
675 elements = this.elements;
676
677 if (!(showCounter || showFullscreen || showZoom || showShare)) {
678 return;
679 }
680
681 elements.$header = $('<header>', {
682 class: slideshowClasses.header + ' ' + classes.preventClose
683 });
684
685 if (showShare) {
686 const iconElement = this.isFontIconSvgExperiment ? _eIcons.shareArrow.element : '<i>';
687 elements.$iconShare = $(iconElement, {
688 class: slideshowClasses.iconShare,
689 role: 'button',
690 'aria-label': i18n.share,
691 'aria-expanded': false
692 }).append($('<span>'));
693 const $shareLinks = $('<div>');
694 $shareLinks.on('click', e => {
695 e.stopPropagation();
696 });
697 elements.$shareMenu = $('<div>', {
698 class: slideshowClasses.shareMenu
699 }).append($shareLinks);
700 elements.$iconShare.add(elements.$shareMenu).on('click', this.toggleShareMenu);
701 elements.$header.append(elements.$iconShare, elements.$shareMenu);
702 this.$buttons = this.$buttons.add(elements.$iconShare);
703 }
704
705 if (showZoom) {
706 const iconElement = this.isFontIconSvgExperiment ? _eIcons.zoomInBold.element : '<i>',
707 showZoomElements = [],
708 showZoomAttrs = {
709 role: 'switch',
710 'aria-checked': false,
711 'aria-label': i18n.zoom
712 },
713 zoomAttrs = { ...showZoomAttrs
714 };
715
716 if (!this.isFontIconSvgExperiment) {
717 zoomAttrs.class = slideshowClasses.iconZoomIn;
718 }
719
720 elements.$iconZoom = $(iconElement).attr(zoomAttrs).on('click', this.toggleZoomMode);
721 showZoomElements.push(elements.$iconZoom);
722
723 if (this.isFontIconSvgExperiment) {
724 elements.$iconZoomOut = $(_eIcons.zoomOutBold.element).attr(showZoomAttrs).addClass(classes.hidden).on('click', this.toggleZoomMode);
725 showZoomElements.push(elements.$iconZoomOut);
726 }
727
728 elements.$header.append(showZoomElements);
729 this.$buttons = this.$buttons.add(showZoomElements);
730 }
731
732 if (showFullscreen) {
733 const iconElement = this.isFontIconSvgExperiment ? _eIcons.frameExpand.element : '<i>',
734 fullScreenElements = [],
735 fullScreenAttrs = {
736 role: 'switch',
737 'aria-checked': false,
738 'aria-label': i18n.fullscreen
739 },
740 expandAttrs = { ...fullScreenAttrs
741 }; // Only if the experiment is not active, we use the class-name in order to render the icon.
742
743 if (!this.isFontIconSvgExperiment) {
744 expandAttrs.class = slideshowClasses.iconExpand;
745 }
746
747 elements.$iconExpand = $(iconElement).append($('<span>'), $('<span>')).attr(expandAttrs).on('click', this.toggleFullscreen);
748 fullScreenElements.push(elements.$iconExpand);
749
750 if (this.isFontIconSvgExperiment) {
751 elements.$iconMinimize = $(_eIcons.frameMinimize.element).attr(fullScreenAttrs).addClass(classes.hidden).on('click', this.toggleFullscreen);
752 fullScreenElements.push(elements.$iconMinimize);
753 }
754
755 elements.$header.append(fullScreenElements);
756 this.$buttons = this.$buttons.add(fullScreenElements);
757 }
758
759 if (showCounter) {
760 elements.$counter = $('<span>', {
761 class: slideshowClasses.counter
762 });
763 elements.$header.append(elements.$counter);
764 }
765
766 return elements.$header;
767 },
768 toggleFullscreen: function () {
769 if (_screenfull.default.isFullscreen) {
770 this.deactivateFullscreen();
771 } else if (_screenfull.default.isEnabled) {
772 this.activateFullscreen();
773 }
774 },
775 toggleZoomMode: function () {
776 if (1 !== this.swiper.zoom.scale) {
777 this.deactivateZoom();
778 } else {
779 this.activateZoom();
780 }
781 },
782 toggleShareMenu: function () {
783 if (this.shareMode) {
784 this.deactivateShareMode();
785 } else {
786 this.elements.$shareMenu.html(this.getShareLinks());
787 this.activateShareMode();
788 }
789 },
790 activateShareMode: function () {
791 const classes = this.getSettings('classes');
792 this.elements.$container.addClass(classes.slideshow.shareMode);
793 this.elements.$iconShare.attr('aria-expanded', true); // Prevent swiper interactions while in share mode
794
795 this.swiper.detachEvents(); // Temporarily replace tabbable buttons with share-menu items
796
797 this.$originalButtons = this.$buttons;
798 this.$buttons = this.elements.$iconShare.add(this.elements.$shareMenu.find('a'));
799 this.shareMode = true;
800 },
801 deactivateShareMode: function () {
802 const classes = this.getSettings('classes');
803 this.elements.$container.removeClass(classes.slideshow.shareMode);
804 this.elements.$iconShare.attr('aria-expanded', false);
805 this.swiper.attachEvents();
806 this.$buttons = this.$originalButtons;
807 this.shareMode = false;
808 },
809 activateFullscreen: function () {
810 const classes = this.getSettings('classes');
811
812 _screenfull.default.request(this.elements.$container.parents('.dialog-widget')[0]);
813
814 if (this.isFontIconSvgExperiment) {
815 this.elements.$iconExpand.addClass(classes.hidden).attr('aria-checked', 'false');
816 this.elements.$iconMinimize.removeClass(classes.hidden).attr('aria-checked', 'true');
817 } else {
818 this.elements.$iconExpand.removeClass(classes.slideshow.iconExpand).addClass(classes.slideshow.iconShrink).attr('aria-checked', 'true');
819 }
820
821 this.elements.$container.addClass(classes.slideshow.fullscreenMode);
822 },
823 deactivateFullscreen: function () {
824 const classes = this.getSettings('classes');
825
826 _screenfull.default.exit();
827
828 if (this.isFontIconSvgExperiment) {
829 this.elements.$iconExpand.removeClass(classes.hidden).attr('aria-checked', 'true');
830 this.elements.$iconMinimize.addClass(classes.hidden).attr('aria-checked', 'false');
831 } else {
832 this.elements.$iconExpand.removeClass(classes.slideshow.iconShrink).addClass(classes.slideshow.iconExpand).attr('aria-checked', 'false');
833 }
834
835 this.elements.$container.removeClass(classes.slideshow.fullscreenMode);
836 },
837 activateZoom: function () {
838 const swiper = this.swiper,
839 elements = this.elements,
840 classes = this.getSettings('classes');
841 swiper.zoom.in();
842 swiper.allowSlideNext = false;
843 swiper.allowSlidePrev = false;
844 swiper.allowTouchMove = false;
845 elements.$container.addClass(classes.slideshow.zoomMode);
846
847 if (this.isFontIconSvgExperiment) {
848 elements.$iconZoom.addClass(classes.hidden).attr('aria-checked', 'false');
849 elements.$iconZoomOut.removeClass(classes.hidden).attr('aria-checked', 'true');
850 } else {
851 elements.$iconZoom.removeClass(classes.slideshow.iconZoomIn).addClass(classes.slideshow.iconZoomOut);
852 }
853 },
854 deactivateZoom: function () {
855 const swiper = this.swiper,
856 elements = this.elements,
857 classes = this.getSettings('classes');
858 swiper.zoom.out();
859 swiper.allowSlideNext = true;
860 swiper.allowSlidePrev = true;
861 swiper.allowTouchMove = true;
862 elements.$container.removeClass(classes.slideshow.zoomMode);
863
864 if (this.isFontIconSvgExperiment) {
865 elements.$iconZoom.removeClass(classes.hidden).attr('aria-checked', 'true');
866 elements.$iconZoomOut.addClass(classes.hidden).attr('aria-checked', 'false');
867 } else {
868 elements.$iconZoom.removeClass(classes.slideshow.iconZoomOut).addClass(classes.slideshow.iconZoomIn);
869 }
870 },
871 getSlideshowFooter: function () {
872 const $ = jQuery,
873 classes = this.getSettings('classes'),
874 $footer = $('<footer>', {
875 class: classes.slideshow.footer + ' ' + classes.preventClose
876 }),
877 $title = $('<div>', {
878 class: classes.slideshow.title
879 }),
880 $description = $('<div>', {
881 class: classes.slideshow.description
882 });
883 $footer.append($title, $description);
884 return $footer;
885 },
886 setSlideshowContent: function (options) {
887 const {
888 i18n
889 } = elementorFrontend.config,
890 $ = jQuery,
891 isSingleSlide = 1 === options.slides.length,
892 hasTitle = '' !== elementorFrontend.getKitSettings('lightbox_title_src'),
893 hasDescription = '' !== elementorFrontend.getKitSettings('lightbox_description_src'),
894 showFooter = hasTitle || hasDescription,
895 classes = this.getSettings('classes'),
896 slideshowClasses = classes.slideshow,
897 $container = $('<div>', {
898 class: slideshowClasses.container
899 }),
900 $slidesWrapper = $('<div>', {
901 class: slideshowClasses.slidesWrapper
902 });
903 let $prevButton, $nextButton;
904 options.slides.forEach(slide => {
905 let slideClass = slideshowClasses.slide + ' ' + classes.item;
906
907 if (slide.video) {
908 slideClass += ' ' + classes.video;
909 }
910
911 const $slide = $('<div>', {
912 class: slideClass
913 });
914
915 if (slide.video) {
916 $slide.attr('data-elementor-slideshow-video', slide.video);
917 const playVideoLoadingElement = this.isFontIconSvgExperiment ? _eIcons.loading.element : '<i>',
918 $playIcon = $('<div>', {
919 class: classes.playButton
920 }).html($(playVideoLoadingElement).attr('aria-label', i18n.playVideo).addClass(classes.playButtonIcon));
921 $slide.append($playIcon);
922 } else {
923 const $zoomContainer = $('<div>', {
924 class: 'swiper-zoom-container'
925 }),
926 $slidePlaceholder = $('<div class="swiper-lazy-preloader"></div>'),
927 imageAttributes = {
928 'data-src': slide.image,
929 class: classes.image + ' ' + classes.preventClose + ' swiper-lazy'
930 };
931
932 if (slide.title) {
933 imageAttributes['data-title'] = slide.title;
934 imageAttributes.alt = slide.title;
935 }
936
937 if (slide.description) {
938 imageAttributes['data-description'] = slide.description;
939 imageAttributes.alt += ' - ' + slide.description;
940 }
941
942 const $slideImage = $('<img>', imageAttributes);
943 $zoomContainer.append([$slideImage, $slidePlaceholder]);
944 $slide.append($zoomContainer);
945 }
946
947 if (slide.hash) {
948 $slide.attr('e-action-hash', slide.hash);
949 }
950
951 $slidesWrapper.append($slide);
952 });
953 this.elements.$container = $container;
954 this.elements.$header = this.getSlideshowHeader();
955 $container.prepend(this.elements.$header).append($slidesWrapper);
956
957 if (!isSingleSlide) {
958 const $prevButtonIcon = this.isFontIconSvgExperiment ? $(_eIcons.chevronLeft.element) : $('<i>', {
959 class: slideshowClasses.prevButtonIcon
960 }),
961 $nextButtonIcon = this.isFontIconSvgExperiment ? $(_eIcons.chevronRight.element) : $('<i>', {
962 class: slideshowClasses.nextButtonIcon
963 });
964 $prevButton = $('<div>', {
965 class: slideshowClasses.prevButton + ' ' + classes.preventClose,
966 'aria-label': i18n.previous
967 }).html($prevButtonIcon);
968 $nextButton = $('<div>', {
969 class: slideshowClasses.nextButton + ' ' + classes.preventClose,
970 'aria-label': i18n.next
971 }).html($nextButtonIcon);
972 $container.append($nextButton, $prevButton);
973 this.$buttons = this.$buttons.add($nextButton).add($prevButton);
974 }
975
976 if (showFooter) {
977 this.elements.$footer = this.getSlideshowFooter();
978 $container.append(this.elements.$footer);
979 }
980
981 this.setSettings('hideUiTimeout', '');
982 $container.on('click mousemove keypress', this.showLightboxUi);
983 const modal = this.getModal();
984 modal.setMessage($container);
985 const onShowMethod = modal.onShow;
986
987 modal.onShow = async () => {
988 onShowMethod();
989 const swiperOptions = {
990 pagination: {
991 el: '.' + slideshowClasses.counter,
992 type: 'fraction'
993 },
994 on: {
995 slideChangeTransitionEnd: this.onSlideChange
996 },
997 lazy: {
998 loadPrevNext: true
999 },
1000 zoom: true,
1001 spaceBetween: 100,
1002 grabCursor: true,
1003 runCallbacksOnInit: false,
1004 loop: true,
1005 keyboard: true,
1006 handleElementorBreakpoints: true
1007 };
1008
1009 if (!isSingleSlide) {
1010 swiperOptions.navigation = {
1011 prevEl: $prevButton,
1012 nextEl: $nextButton
1013 };
1014 }
1015
1016 if (options.swiper) {
1017 $.extend(swiperOptions, options.swiper);
1018 }
1019
1020 const Swiper = elementorFrontend.utils.swiper;
1021 this.swiper = await new Swiper($container, swiperOptions); // Expose the swiper instance in the frontend
1022
1023 $container.data('swiper', this.swiper);
1024 this.setVideoAspectRatio();
1025 this.playSlideVideo();
1026
1027 if (showFooter) {
1028 this.updateFooterText();
1029 }
1030
1031 this.bindHotKeys();
1032 this.makeButtonsAccessible();
1033 };
1034 },
1035 makeButtonsAccessible: function () {
1036 this.$buttons.attr('tabindex', 0).on('keypress', event => {
1037 const ENTER_KEY = 13,
1038 SPACE_KEY = 32;
1039
1040 if (ENTER_KEY === event.which || SPACE_KEY === event.which) {
1041 jQuery(event.currentTarget).trigger('click');
1042 }
1043 });
1044 },
1045 showLightboxUi: function () {
1046 const slideshowClasses = this.getSettings('classes').slideshow;
1047 this.elements.$container.removeClass(slideshowClasses.hideUiVisibility);
1048 clearTimeout(this.getSettings('hideUiTimeout'));
1049 this.setSettings('hideUiTimeout', setTimeout(() => {
1050 if (!this.shareMode) {
1051 this.elements.$container.addClass(slideshowClasses.hideUiVisibility);
1052 }
1053 }, 3500));
1054 },
1055 bindHotKeys: function () {
1056 this.getModal().getElements('window').on('keydown', this.activeKeyDown);
1057 },
1058 unbindHotKeys: function () {
1059 this.getModal().getElements('window').off('keydown', this.activeKeyDown);
1060 },
1061 activeKeyDown: function (event) {
1062 this.showLightboxUi();
1063 const TAB_KEY = 9;
1064
1065 if (event.which === TAB_KEY) {
1066 const $buttons = this.$buttons;
1067 let focusedButton,
1068 isFirst = false,
1069 isLast = false;
1070 $buttons.each(index => {
1071 const item = $buttons[index];
1072
1073 if (jQuery(item).is(':focus')) {
1074 focusedButton = item;
1075 isFirst = 0 === index;
1076 isLast = $buttons.length - 1 === index;
1077 return false;
1078 }
1079 });
1080
1081 if (event.shiftKey) {
1082 if (isFirst) {
1083 event.preventDefault();
1084 $buttons.last().trigger('focus');
1085 }
1086 } else if (isLast || !focusedButton) {
1087 event.preventDefault();
1088 $buttons.first().trigger('focus');
1089 }
1090 }
1091 },
1092 setVideoAspectRatio: function (aspectRatio) {
1093 aspectRatio = aspectRatio || this.getSettings('modalOptions.videoAspectRatio');
1094 const $widgetContent = this.getModal().getElements('widgetContent'),
1095 oldAspectRatio = this.oldAspectRatio,
1096 aspectRatioClass = this.getSettings('classes.aspectRatio');
1097 this.oldAspectRatio = aspectRatio;
1098
1099 if (oldAspectRatio) {
1100 $widgetContent.removeClass(aspectRatioClass.replace('%s', oldAspectRatio));
1101 }
1102
1103 if (aspectRatio) {
1104 $widgetContent.addClass(aspectRatioClass.replace('%s', aspectRatio));
1105 }
1106 },
1107 getSlide: function (slideState) {
1108 return jQuery(this.swiper.slides).filter(this.getSettings('selectors.slideshow.' + slideState + 'Slide'));
1109 },
1110 updateFooterText: function () {
1111 if (!this.elements.$footer) {
1112 return;
1113 }
1114
1115 const classes = this.getSettings('classes'),
1116 $activeSlide = this.getSlide('active'),
1117 $image = $activeSlide.find('.elementor-lightbox-image'),
1118 titleText = $image.data('title'),
1119 descriptionText = $image.data('description'),
1120 $title = this.elements.$footer.find('.' + classes.slideshow.title),
1121 $description = this.elements.$footer.find('.' + classes.slideshow.description);
1122 $title.text(titleText || '');
1123 $description.text(descriptionText || '');
1124 },
1125 playSlideVideo: function () {
1126 const $activeSlide = this.getSlide('active'),
1127 videoURL = $activeSlide.data('elementor-slideshow-video');
1128
1129 if (!videoURL) {
1130 return;
1131 }
1132
1133 const classes = this.getSettings('classes'),
1134 $videoContainer = jQuery('<div>', {
1135 class: classes.videoContainer + ' ' + classes.invisible
1136 }),
1137 $videoWrapper = jQuery('<div>', {
1138 class: classes.videoWrapper
1139 }),
1140 $playIcon = $activeSlide.children('.' + classes.playButton);
1141 let videoType, apiProvider;
1142 $videoContainer.append($videoWrapper);
1143 $activeSlide.append($videoContainer);
1144
1145 if (-1 !== videoURL.indexOf('vimeo.com')) {
1146 videoType = 'vimeo';
1147 apiProvider = elementorFrontend.utils.vimeo;
1148 } else if (videoURL.match(/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com)/)) {
1149 videoType = 'youtube';
1150 apiProvider = elementorFrontend.utils.youtube;
1151 }
1152
1153 const videoID = apiProvider.getVideoIDFromURL(videoURL);
1154 apiProvider.onApiReady(apiObject => {
1155 if ('youtube' === videoType) {
1156 this.prepareYTVideo(apiObject, videoID, $videoContainer, $videoWrapper, $playIcon);
1157 } else if ('vimeo' === videoType) {
1158 this.prepareVimeoVideo(apiObject, videoURL, $videoContainer, $videoWrapper, $playIcon);
1159 }
1160 });
1161 $playIcon.addClass(classes.playing).removeClass(classes.hidden);
1162 },
1163 prepareYTVideo: function (YT, videoID, $videoContainer, $videoWrapper, $playIcon) {
1164 const classes = this.getSettings('classes'),
1165 $videoPlaceholderElement = jQuery('<div>');
1166 let startStateCode = YT.PlayerState.PLAYING;
1167 $videoWrapper.append($videoPlaceholderElement); // Since version 67, Chrome doesn't fire the `PLAYING` state at start time
1168
1169 if (window.chrome) {
1170 startStateCode = YT.PlayerState.UNSTARTED;
1171 }
1172
1173 $videoContainer.addClass('elementor-loading' + ' ' + classes.invisible);
1174 this.player = new YT.Player($videoPlaceholderElement[0], {
1175 videoId: videoID,
1176 events: {
1177 onReady: () => {
1178 $playIcon.addClass(classes.hidden);
1179 $videoContainer.removeClass(classes.invisible);
1180 this.player.playVideo();
1181 },
1182 onStateChange: event => {
1183 if (event.data === startStateCode) {
1184 $videoContainer.removeClass('elementor-loading' + ' ' + classes.invisible);
1185 }
1186 }
1187 },
1188 playerVars: {
1189 controls: 0,
1190 rel: 0
1191 }
1192 });
1193 },
1194 prepareVimeoVideo: function (Vimeo, videoURL, $videoContainer, $videoWrapper, $playIcon) {
1195 const classes = this.getSettings('classes'),
1196 vimeoOptions = {
1197 url: videoURL,
1198 autoplay: true,
1199 transparent: false,
1200 playsinline: false
1201 };
1202 this.player = new Vimeo.Player($videoWrapper, vimeoOptions);
1203 this.player.ready().then(() => {
1204 $playIcon.addClass(classes.hidden);
1205 $videoContainer.removeClass(classes.invisible);
1206 });
1207 },
1208 setEntranceAnimation: function (animation) {
1209 animation = animation || elementorFrontend.getCurrentDeviceSetting(this.getSettings('modalOptions'), 'entranceAnimation');
1210 const $widgetMessage = this.getModal().getElements('message');
1211
1212 if (this.oldAnimation) {
1213 $widgetMessage.removeClass(this.oldAnimation);
1214 }
1215
1216 this.oldAnimation = animation;
1217
1218 if (animation) {
1219 $widgetMessage.addClass('animated ' + animation);
1220 }
1221 },
1222 openSlideshow: function (slideshowID, initialSlideURL) {
1223 const $allSlideshowLinks = jQuery(this.getSettings('selectors.links')).filter((index, element) => {
1224 const $element = jQuery(element);
1225 return slideshowID === element.dataset.elementorLightboxSlideshow && !$element.parent('.swiper-slide-duplicate').length && !$element.parents('.slick-cloned').length;
1226 });
1227 const slides = [];
1228 let initialSlideIndex = 0;
1229 $allSlideshowLinks.each(function () {
1230 const slideVideo = this.dataset.elementorLightboxVideo;
1231 let slideIndex = this.dataset.elementorLightboxIndex;
1232
1233 if (undefined === slideIndex) {
1234 slideIndex = $allSlideshowLinks.index(this);
1235 }
1236
1237 if (initialSlideURL === this.href || slideVideo && initialSlideURL === slideVideo) {
1238 initialSlideIndex = slideIndex;
1239 }
1240
1241 const slideData = {
1242 image: this.href,
1243 index: slideIndex,
1244 title: this.dataset.elementorLightboxTitle,
1245 description: this.dataset.elementorLightboxDescription,
1246 hash: this.getAttribute('e-action-hash')
1247 };
1248
1249 if (slideVideo) {
1250 slideData.video = slideVideo;
1251 }
1252
1253 slides.push(slideData);
1254 });
1255 slides.sort((a, b) => a.index - b.index);
1256 this.showModal({
1257 type: 'slideshow',
1258 id: slideshowID,
1259 modalOptions: {
1260 id: 'elementor-lightbox-slideshow-' + slideshowID
1261 },
1262 slideshow: {
1263 slides: slides,
1264 swiper: {
1265 initialSlide: +initialSlideIndex
1266 }
1267 }
1268 });
1269 },
1270 onSlideChange: function () {
1271 this.getSlide('prev').add(this.getSlide('next')).add(this.getSlide('active')).find('.' + this.getSettings('classes.videoWrapper')).remove();
1272 this.playSlideVideo();
1273 this.updateFooterText();
1274 }
1275 });
1276
1277 /***/ }),
1278
1279 /***/ "../assets/dev/js/frontend/utils/lightbox/screenfull.js":
1280 /*!**************************************************************!*\
1281 !*** ../assets/dev/js/frontend/utils/lightbox/screenfull.js ***!
1282 \**************************************************************/
1283 /***/ ((module) => {
1284
1285 "use strict";
1286
1287
1288 (function () {
1289 'use strict';
1290
1291 var document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {};
1292 var isCommonjs = true && module.exports;
1293
1294 var fn = function () {
1295 var val;
1296 var fnMap = [['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror'], // New WebKit
1297 ['webkitRequestFullscreen', 'webkitExitFullscreen', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitfullscreenchange', 'webkitfullscreenerror'], // Old WebKit
1298 ['webkitRequestFullScreen', 'webkitCancelFullScreen', 'webkitCurrentFullScreenElement', 'webkitCancelFullScreen', 'webkitfullscreenchange', 'webkitfullscreenerror'], ['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror'], ['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError']];
1299 var i = 0;
1300 var l = fnMap.length;
1301 var ret = {};
1302
1303 for (; i < l; i++) {
1304 val = fnMap[i];
1305
1306 if (val && val[1] in document) {
1307 var valLength = val.length;
1308
1309 for (i = 0; i < valLength; i++) {
1310 ret[fnMap[0][i]] = val[i];
1311 }
1312
1313 return ret;
1314 }
1315 }
1316
1317 return false;
1318 }();
1319
1320 var eventNameMap = {
1321 change: fn.fullscreenchange,
1322 error: fn.fullscreenerror
1323 };
1324 var screenfull = {
1325 request: function (element) {
1326 return new Promise(function (resolve, reject) {
1327 var onFullScreenEntered = function () {
1328 this.off('change', onFullScreenEntered);
1329 resolve();
1330 }.bind(this);
1331
1332 this.on('change', onFullScreenEntered);
1333 element = element || document.documentElement;
1334 Promise.resolve(element[fn.requestFullscreen]()).catch(reject);
1335 }.bind(this));
1336 },
1337 exit: function () {
1338 return new Promise(function (resolve, reject) {
1339 if (!this.isFullscreen) {
1340 resolve();
1341 return;
1342 }
1343
1344 var onFullScreenExit = function () {
1345 this.off('change', onFullScreenExit);
1346 resolve();
1347 }.bind(this);
1348
1349 this.on('change', onFullScreenExit);
1350 Promise.resolve(document[fn.exitFullscreen]()).catch(reject);
1351 }.bind(this));
1352 },
1353 toggle: function (element) {
1354 return this.isFullscreen ? this.exit() : this.request(element);
1355 },
1356 onchange: function (callback) {
1357 this.on('change', callback);
1358 },
1359 onerror: function (callback) {
1360 this.on('error', callback);
1361 },
1362 on: function (event, callback) {
1363 var eventName = eventNameMap[event];
1364
1365 if (eventName) {
1366 document.addEventListener(eventName, callback, false);
1367 }
1368 },
1369 off: function (event, callback) {
1370 var eventName = eventNameMap[event];
1371
1372 if (eventName) {
1373 document.removeEventListener(eventName, callback, false);
1374 }
1375 },
1376 raw: fn
1377 };
1378
1379 if (!fn) {
1380 if (isCommonjs) {
1381 module.exports = {
1382 isEnabled: false
1383 };
1384 } else {
1385 window.screenfull = {
1386 isEnabled: false
1387 };
1388 }
1389
1390 return;
1391 }
1392
1393 Object.defineProperties(screenfull, {
1394 isFullscreen: {
1395 get: function () {
1396 return Boolean(document[fn.fullscreenElement]);
1397 }
1398 },
1399 element: {
1400 enumerable: true,
1401 get: function () {
1402 return document[fn.fullscreenElement];
1403 }
1404 },
1405 isEnabled: {
1406 enumerable: true,
1407 get: function () {
1408 // Coerce to boolean in case of old WebKit
1409 return Boolean(document[fn.fullscreenEnabled]);
1410 }
1411 }
1412 });
1413
1414 if (isCommonjs) {
1415 module.exports = screenfull;
1416 } else {
1417 window.screenfull = screenfull;
1418 }
1419 })();
1420
1421 /***/ })
1422
1423 }]);
1424 //# sourceMappingURL=lightbox.fe7d7981b2527f42f605.bundle.js.map