PageSourceSearch

https://www.mirkrasok.ru/local/templates/mirkrasok_2026v2/js/s.js

js mirkrasok.ru collected 2026-10-03 20:59:38 UTC 282,356 bytes, 6,949 lines download raw bytes

1var body = document.getElementsByTagName("body")[0], style = document.createElement("link");
2
3var selectedColor = new Array();
4selectedColor = [];
5var newColor = 0;
6var selectedColorPRICE = new Array();
7selectedColorPRICE = [];
8var selectedColorPRICE1;
9style.type = "text/css";
10style.rel = "stylesheet";
11style.href = "https://core.robotint.ru/s.css";
12body.appendChild(style);
13window.obColorer = {};
14(function (a, c) {
15    window.obColorer = {
16        options: {},
17        object: false,
18        draggingColors: false,
19        gridWidth: 39,
20        startLeftOffset: 0,
21        limit: 100,
22        allItems: [],
23        searchClone: false,
24        bNoUpdate: false,
25        selectedSKUID: 0,
26        selectedElementID: 0,
27        selectedBasketID: 0,
28        selectedColorID: false,
29        selectedBaseTypeInt: false,
30        selectedColorHEX: "",
31        selectedColorPrice: 0,
32        selectedColorPricePerCan: 0,
33        selectedColorPricePerLitr: 0,
34        selectedCollectionID: 0,
35        selectedCollectionName: "",
36        currentCollectionId: "",
37        currentCollectionVendorId: "",
38        productData: {},
39        images: 0,
40        testMode: false,
41        baseFilter: false,
42        iBaseType: 0,
43        selectedColorName: false,
44        saParent: false,
45        cookieName: "robotint-user",
46        domain: "https://core.robotint.ru",
47        url: "/exchange/",
48        thumbs: "/upload/colorate-small/",
49        actions: [],
50        spinnerUrl: "/exchange/spinner.gif",
51        siteSettings: {basketURL: "/personal/cart/", bgZindex: 1000, colorSelect: false, processPrice: false},
52        copyOnly: function (f, d) {
53            var d = d || window.event;
54            var i = d.keyCode;
55            var h = d.ctrlKey || d.metaKey;
56            if (h && d.altKey) {
57                return false
58            } else {
59                if (h && i == 67) {
60                    return true
61                }
62            }
63            return false
64        },
65        getHash: function (f) {
66            let result = "";
67            const d = "ABCDEF0123456789";
68            const h = d.length;
69            let counter = 0;
70            while (counter < f) {
71                result += d.charAt(Math.floor(Math.random() * h));
72                counter += 1
73            }
74            return result
75        },
76        getWidgetId: function () {
77            let attrKey = "data-tint-widget-id", $parent = a("[" + attrKey + "]"),
78                widgetId = $parent.length ? $parent.attr(attrKey) : "";
79            if (!widgetId.length && $parent.length) {
80                widgetId = this.getHash(15);
81                $parent.attr(attrKey, widgetId)
82            }
83            return widgetId
84        },
85        pushAction: function (k, d) {
86            var m;
87            if (window.navigator.languages) {
88                m = window.navigator.languages[0]
89            } else {
90                m = window.navigator.userLanguage || window.navigator.language
91            }
92            var j = a(window).width();
93            var h = "mobile";
94            if (j > 700) {
95                h = "tablet"
96            }
97            if (j > 850) {
98                h = "desktop"
99            }
100            var l = {
101                CLIENT_ID: obColorer.options.CLIENT_ID,
102                DOMAIN: window.location.host,
103                HREF: window.location.href,
104                BROWSER: navigator.userAgent,
105                LANG: m,
106                RESOLUTION: a(window).width() + " x " + a(window).height(),
107                RESOLUTION_MODE: h,
108                USER_ID: this.getCookie(this.cookieName),
109                WIDGET_ID: this.getWidgetId(),
110                REQUEST_TIME: "",
111                RESPONSE_TIME: "",
112                ERROR_CODE: "",
113                ERROR_MESSAGE: "",
114                PRODUCT_ID: "",
115                TINT_PRODUCT_ID: "",
116                EXT_ID: "",
117                COLLECTION_ID: "",
118                BARCODE: this.productData.BARCODE ? this.productData.BARCODE : ""
119            };
120            if (obColorer.productData.EXT_ID) {
121                l.EXT_ID = obColorer.productData.EXT_ID
122            }
123            if (obColorer.productData.PRODUCT_ID) {
124                l.PRODUCT_ID = obColorer.productData.PRODUCT_ID
125            }
126            if (obColorer.currentCollectionId) {
127                l.COLLECTION_ID = obColorer.currentCollectionId
128            }
129            if (!!k) {
130                for (var f in k) {
131                    l[f] = k[f]
132                }
133            }
134            this.actions.push(l);
135            if (!d) {
136                this.tryActions()
137            }
138        },
139        tryActions: function () {
140            a("body").stopTime("analytics");
141            a("body").oneTime("1s", "analytics", function () {
142                if (obColorer.actions.length) {
143                    var d = JSON.stringify(obColorer.actions);
144                    var f = {action: "analytics", data: btoa(unescape(encodeURIComponent(d)))};
145                    a.ajax({
146                        type: "post", data: f, url: obColorer.url, success: function () {
147                            obColorer.actions = []
148                        }
149                    })
150                }
151            })
152        },
153        checkUserCookie: function () {
154            var h = this.getCookie(this.cookieName);
155            if (!h) {
156                var d = {action: "get_cookie"};
157                a.extend(d, obColorer.options);
158                a.extend(d, a.extend(d, obColorer.productData));
159                if (!d.CLIENT_ID) {
160                    var f = {type: "warning", message: "RoboTint: ClientID is not specified"};
161                    obColorer.processError(f);
162                    return false
163                }
164                a.ajax({
165                    type: "post",
166                    data: d,
167                    url: obColorer.url,
168                    dataType: "json",
169                    crossDomain: true,
170                    xhrFields: {withCredentials: true},
171                    success: function (i) {
172                        obColorer.setCookie(obColorer.cookieName, i.cookie)
173                    }
174                })
175            }
176        },
177        propagation: function () {
178            try {
179                event.stopPropagation();
180                event.preventDefault()
181            } catch (d) {
182            }
183        },
184        searchButtonClick: function (d) {
185            this.propagation();
186            var k = a(d);
187            var i = k.parent();
188            i.toggleClass("tint-active");
189            var j = 1;
190            if (j) {
191                this.searchFixWidth()
192            }
193            var f = this.parent.find(".tint-collections-title");
194            var m = f.data("collection-origin-title");
195            if (i.hasClass("tint-active")) {
196                m = f.data("collection-search-title")
197            }
198            f.text(m);
199            if (!i.hasClass("tint-active")) {
200                var l = this.parent.find("[data-search-input]");
201                if (parseInt(i.attr("data-was-searched"))) {
202                    l.val("");
203                    var h = {action: "get-colors"};
204                    i.attr("data-was-searched", 0);
205                    this.ajax(h, "[data-main-part]", {clearSearch: 1})
206                }
207            }
208            k.prev().focus()
209        },
210        searchFixWidth: function () {
211            var h = this.parent.find(".tint-cp-search");
212            var d = this.parent.find(".tint-select-title");
213            var f = 40;
214            if (h.hasClass("tint-active")) {
215                f += d.outerWidth() + 20
216            }
217            h.css({width: f})
218        },
219        setSearchTitle: function () {
220            var f = this.parent.find("[data-search-input]");
221            var d = this.parent.find(".tint-select-title")
222        },
223        collectionsShow: function (d) {
224            this.propagation();
225            var h = a(d).parents("[data-parent]");
226            var f = h.find("[data-drop-down]");
227            if (f.is(":visible")) {
228                f.hide()
229            } else {
230                f.show()
231            }
232        },
233        collectionSelect: function (m) {
234            this.propagation();
235            var j = a(m);
236            var h = j.parents("[data-parent]");
237            var n = h.find("[data-drop-down]");
238            n.hide();
239            var l = h.find("[data-selected-name]");
240            var k = j.data("name-replace") ? j.data("name-replace") : j.text();
241            n.find(".tint-selected").removeClass("tint-selected");
242            j.addClass("tint-selected");
243            l.text(k);
244            var i = j.data("value");
245            var f = j.text().trim();
246            var d = {TYPE: "select_collection", PARAMS: {iCollectionID: i, sCollectionName: f}};
247            obColorer.pushAction(d);
248            obColorer.selectSection(m)
249        },
250        rgb2hsl: function (o) {
251            r = parseInt(o.substring(0, 2), 16) / 255;
252            g = parseInt(o.substring(2, 4), 16) / 255;
253            b = parseInt(o.substring(4, 6), 16) / 255;
254            var f = Math.max(r, g, b), j = Math.min(r, g, b);
255            var m, k, i = (f + j) / 2;
256            if (f == j) {
257                m = k = 0
258            } else {
259                var n = f - j;
260                k = i > 0.5 ? n / (2 - f - j) : n / (f + j);
261                switch (f) {
262                    case r:
263                        m = (g - b) / n + (g < b ? 6 : 0);
264                        break;
265                    case g:
266                        m = (b - r) / n + 2;
267                        break;
268                    case b:
269                        m = (r - g) / n + 4;
270                        break
271                }
272                m /= 6
273            }
274            return [m, k, i]
275        },
276        getTextColor: function (d) {
277            d = d.substr(1, 6);
278            e = this.rgb2hsl(d);
279            if ((e[0] < 0.55 && e[2] >= 0.5) || (e[0] >= 0.55 && e[2] >= 0.75)) {
280                return 0
281            }
282            return 1
283        },
284        showFavorites: function () {
285            this.propagation();
286            var h = obColorer.parent;
287            var d = h.find("[data-tint-show-favorites]");
288            if (!d.hasClass("tint-active")) {
289                return false
290            }
291            var f = {action: "get-colors", FAVORITES: 1};
292            this.ajax(f, "[data-main-part]", {clearSearch: 1})
293        },
294        selectType: function (h) {
295            this.propagation();
296            var k = obColorer.parent;
297            var j = k.find("[data-tabs]");
298            var f = j.find(".tint-switch-item");
299            var d = j.find(".tint-tab");
300            d.removeClass("tint-active").filter("[data-type='" + h + "']").addClass("tint-active");
301            f.animate({top: h == "all" ? 0 : 15}, 100);
302            var i = {action: "get-colors"};
303            this.ajax(i, "[data-main-part]")
304        },
305        switchType: function () {
306            var d = this.currentType();
307            this.selectType(d == "all" ? "avail" : "all")
308        },
309        currentType: function () {
310            var f = a("[data-colorate-parent]");
311            var d = f.find("[data-tabs]");
312            var h = d.find(".tint-tab.tint-active");
313            return h.data("type")
314        },
315        toggleSections: function (d) {
316            var i = a(d);
317            var h = i.parents("[data-parent]:first");
318            var f = h.find("[data-list]");
319            f.slideToggle(300, function () {
320                i.toggleClass("open")
321            })
322        },
323        ajax: function (m, f, t, h) {
324            var s = {TYPE: "get_colors", PARAMS: {}, REQUEST_TIME: Date.now()};
325            if (!t) {
326                t = {}
327            }
328            var o = a(f);
329            if (o.hasClass("tint-loading")) {
330                return
331            }
332            a.extend(m, obColorer.options);
333            a.extend(m, a.extend(m, obColorer.productData));
334            var q = obColorer.parent.find("[data-drop-down] .tint-selected:first");
335            if (q.length) {
336                var n = parseInt(q.data("value"));
337                if (n) {
338                    obColorer.currentCollectionId = m.COLLECTION_ID = n
339                }
340            }
341            if (obColorer.currentType() == "avail") {
342                if (obColorer.iBaseType) {
343                    m.BASE_TYPE_INT = obColorer.iBaseType
344                }
345            }
346            if (!m.CLIENT_ID) {
347                var p = {type: "critical", message: "RoboTint: ClientID is not specified"};
348                obColorer.processError(p);
349                return false
350            }
351            var j = a("[data-main-part]");
352            var k = ["EXT_ID", "COLLECTION_ID", "BASE_TYPE_INT"];
353            for (var l in k) {
354                var d = k[l];
355                if (!!m[d]) {
356                    s.PARAMS[d] = m[d]
357                }
358            }
359            a.ajax({
360                type: "post",
361                data: m,
362                url: obColorer.url,
363                crossDomain: true,
364                xhrFields: {withCredentials: true},
365                beforeSend: function () {
366                    obColorer.parent.find("[data-colorate]").css("background", "#fff");
367                    obColorer.parent.find("[data-tint-left]").removeClass("tint-selected-color");
368                    var u = obColorer.parent.find("[data-tint-submit]");
369                    u.addClass("tint-inactive");
370                    u.find("[data-color-name]").text("");
371                    var i = obColorer.parent.find("[data-favorite-block]");
372                    i.removeClass("tint-active");
373                    j.addClass("tint-loading")
374                },
375                success: function (v) {
376                    obColorer.searchClone = false;
377                    if (!!t.clearSearch) {
378                        obColorer.clearSearch()
379                    }
380                    var w = a(v).find(f);
381                    j.removeClass("tint-loading");
382                    o.replaceWith(w);
383                    obColorer.initColorswipe();
384                    obColorer.snapToGrid();
385                    if (!!t.setTop) {
386                        w.css("top", a(window).scrollTop())
387                    }
388                    s.RESPONSE_TIME = Date.now();
389                    obColorer.pushAction(s);
390                    obColorer.checkArrows();
391                    if (!!h) {
392                        h.resolve(v)
393                    }
394                    var i = "[data-tint-swiper]";
395                    var u = a(v).find(i);
396                    if (u.length) {
397                        obColorer.parent.find(i).replaceWith(u);
398                        obColorer.initCarousel()
399                    }
400                }
401            })
402        },
403        selectSection: function (d) {
404            var f = {action: "get-colors"};
405            this.ajax(f, "[data-main-part]", {clearSearch: 1})
406        },
407        urlParam: function () {
408            var d = {};
409            window.location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (i, f, h) {
410                d[f] = h
411            });
412            return d
413        },
414        formUrl: function (j) {
415            var d = window.location.href;
416            var h = "robotint-share";
417            h = encodeURIComponent(h);
418            j = encodeURIComponent(j);
419            var l = this.urlParam();
420            if (l[h]) {
421                delete (l[h])
422            }
423            if (j) {
424                l[h] = j
425            }
426            d = window.location.origin + window.location.pathname;
427            if (!a.isEmptyObject(l)) {
428                d += "?";
429                var k = [];
430                for (var f in l) {
431                    k.push(f + "=" + l[f])
432                }
433                d += k.join("&")
434            }
435            return d
436        },
437        copyShareUrl: function (f) {
438            this.propagation();
439            var i = this.parent.find(".tint-share-popup");
440            var k = i.find("input");
441            k.trigger("click");
442            var d = document.createRange();
443            d.selectNode(k[0]);
444            window.getSelection().addRange(d);
445            try {
446                document.execCommand("copy");
447                if (!!f) {
448                    var j = a(f);
449                    j.addClass("tint-share-copied");
450                    j.text(j.attr("data-copied-text"));
451                    j.oneTime("1s", function () {
452                        j.removeClass("tint-share-copied");
453                        j.text(j.attr("data-copy-text"))
454                    })
455                }
456            } catch (h) {
457            }
458        },
459        share: function (d) {
460            this.propagation();
461            var k = a(d);
462            var h = this.parent.find(".tint-share-popup");
463            if (h.hasClass("tint-active")) {
464                h.removeClass("tint-active");
465                return false
466            }
467            var i = {
468                action: "make-url",
469                PARAMS: {
470                    COLOR_ID: this.selectedColorID,
471                    COLLECTION_ID: this.selectedCollectionID,
472                    FAVORITES: 0,
473                    URL: this.formUrl("TINT_HASH")
474                }
475            };
476            var f = this.parent.find(".tint-images-bullet.tint-active");
477            if (f.length) {
478                i.PARAMS.IMAGE = f.data("index")
479            }
480            if (obColorer.currentType() == "avail") {
481                if (obColorer.iBaseType) {
482                    i.PARAMS.BASE_TYPE_INT = obColorer.iBaseType
483                }
484            }
485            a.extend(i, obColorer.options);
486            i.PARAMS.PRODUCT_DATA = obColorer.productData;
487            var j = btoa(a.param(i.PARAMS));
488            if (h.data("share-data") == j) {
489                h.addClass("tint-active");
490                return false
491            }
492            a.ajax({
493                type: "post",
494                data: i,
495                dataType: "json",
496                url: obColorer.url,
497                crossDomain: true,
498                xhrFields: {withCredentials: true},
499                beforeSend: function () {
500                    k.addClass("tint-share-loading")
501                },
502                success: function (l) {
503                    k.removeClass("tint-share-loading");
504                    h.addClass("tint-active");
505                    k.data("color-id", obColorer.selectedColorID);
506                    h.find("input").val(l.shareUrl);
507                    h.data("share-data", j)
508                }
509            })
510        },
511        hideShare: function () {
512            this.propagation();
513            var d = this.parent.find(".tint-share-popup");
514            d.removeClass("tint-active")
515        },
516        toggleFavoriteItem: function (d) {
517            this.propagation();
518            var h = a(d);
519            var i = this.selectedColorID;
520            if (!h.hasClass("tint-active")) {
521                return false
522            }
523            if (!h.hasClass("tint-favorite-loading")) {
524                var f = {COLOR_ID: i, action: "toggle-favorite-item"};
525                a.extend(f, obColorer.options);
526                a.extend(f, a.extend(f, obColorer.productData));
527                a.ajax({
528                    type: "post",
529                    data: f,
530                    url: obColorer.url,
531                    crossDomain: true,
532                    xhrFields: {withCredentials: true},
533                    beforeSend: function () {
534                        h.addClass("tint-favorite-loading")
535                    },
536                    success: function (k) {
537                        h.removeClass("tint-favorite-loading");
538                        var j = "[data-tint-show-favorites]";
539                        obColorer.parent.find(j).replaceWith(a(k).find(j));
540                        h.toggleClass("tint-selected");
541                        if (!h.hasClass("tint-selected")) {
542                            obColorer.showFavorites()
543                        }
544                    }
545                })
546            }
547        },
548        getPrice: function (o) {
549            var n = a(o);
550            var f = n.data("base-paint-id");
551            var l = n.data("id");
552            var k = n.data("name");
553            var j = n.data("collection-id");
554            var h = n.data("collection-name");
555            var m = {
556                TYPE: "price_query",
557                REQUEST_TIME: Date.now(),
558                PARAMS: {iColorID: l, sColorName: k, iCollectionID: j, sCollectioName: h}
559            };
560            if (parseInt(this.options.WITH_PRICE)) {
561                var i = {COLOR_ID: l, BASE_PAINT_ID: f, action: "get-color-price"};
562                a.extend(i, obColorer.options);
563                a.extend(i, a.extend(i, obColorer.productData));
564                var d = this.parent.find("[data-tint-submit]");
565                a.ajax({
566                    type: "post",
567                    data: i,
568                    url: obColorer.url,
569                    crossDomain: true,
570                    xhrFields: {withCredentials: true},
571                    beforeSend: function () {
572                        d.find("[data-color-price]").addClass("tint-price-loading");
573                        d.addClass("tint-with-price")
574                    },
575                    success: function (s) {
576                        var t = a(s).find("[data-color-price]"), q = a(s).find("[data-tint-submit]");
577                        d.find("[data-color-price]").replaceWith(t);
578                        obColorer.selectedColorPrice = t.data("price");
579                        obColorer.selectedColorPricePerCan = t.data("price-per-can");
580                        obColorer.selectedColorPricePerLitr = t.data("price-per-litr");
581                        if (q.length && !obColorer.selectedColorPricePerLitr) {
582                            q.find("[data-color-name]").text(obColorer.selectedColorName);
583                            d.replaceWith(q)
584                        }
585                        if (typeof obColorer.siteSettings.processPrice === "function") {
586                            var p = obColorer.getSelectedData();
587                            obColorer.siteSettings.processPrice(t, p)
588                        }
589                        m.RESPONSE_TIME = Date.now();
590                        m.PARAMS.dColoringPrice = (Math.round(t.data("price") * 100) / 100).toString();
591                        if (!!obColorer.productData.PRODUCT_PRICE) {
592                            m.PARAMS.dBaseProductPrice = (Math.round(obColorer.productData.PRODUCT_PRICE) / 100).toString()
593                        }
594                        obColorer.pushAction(m)
595                    }
596                })
597            }
598        },
599        setSnapTo: function (h) {
600            var k = a(h);
601            var l = k.data("id");
602            var d = a(h).parent();
603            var j = a("[data-color-slider]");
604            var f = a("[data-active-items]");
605            var i = d.position().left + j.position().left;
606            f.css("left", i);
607            this.snapToGrid(l)
608        },
609        setCookie: function (f, i, d, k, h, j) {
610            document.cookie = f + "=" + escape(i) + ((d) ? "; expires=" + d : "") + ((k) ? "; path=" + k : "") + ((h) ? "; domain=" + h : "") + ((j) ? "; secure" : "")
611        },
612        getCookie: function (d) {
613            var f = document.cookie.match(new RegExp("(?:^|; )" + d.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, "\\$1") + "=([^;]*)"));
614            return f ? decodeURIComponent(f[1]) : c
615        },
616        close: function (d) {
617            this.propagation();
618            if (!this.parent || typeof this.parent.find !== "function") {
619                var j = a(".tint-popup");
620                if (j) {
621                    j.remove();
622                    this.hideBG()
623                }
624                return false
625            }
626            var f = this.parent.find(".tint-disclaimer-full");
627            if (f.is(":visible")) {
628                f.removeClass("tint-visible");
629                return false
630            }
631            var h = a(".tint-popup");
632            if (h) {
633                h.remove();
634                this.hideBG()
635            }
636        },
637        snapToGrid: function (l) {
638            var j = a("[data-color-slider]");
639            var i = j.parents("[data-parent]:first");
640            var d = a("[data-active-items]");
641            var k = d.touching("[data-grid]:visible");
642            if (!k.length) {
643                k = d.nearest("[data-grid]:visible")
644            }
645            if (!k.length) {
646                return
647            }
648            var h = k.length <= 3 ? a(k[0]) : a(k[1]);
649            if ((!h.next().length) && (h.prev().length)) {
650                h = h.prev()
651            }
652            var f = h.position().left + j.position().left;
653            if (f + obColorer.gridWidth >= i.width()) {
654                h = h.prev();
655                f = h.position().left + j.position().left
656            }
657            d.css("left", f);
658            d.stopTime();
659            d.oneTime("100ms", function () {
660                var s = [h.data("index")];
661                var u = h.next();
662                if (u.length) {
663                    s.push(u.data("index"))
664                }
665                var p = a("[data-colors-big-parent]");
666                p.empty();
667                for (var o in s) {
668                    var q = s[o];
669                    j.find("[data-index='" + q + "'] tint-div").each(function () {
670                        var v = a(this.outerHTML);
671                        v[0].removeAttribute("ontouchend");
672                        v.bind("touchstart", function () {
673                            a(this).data("touchStartTime", Date.now())
674                        }).bind("touchend", function () {
675                            let time = Date.now() - a(this).data("touchStartTime");
676                            if (time < 200) {
677                                obColorer.selectColor(a(this))
678                            }
679                        });
680                        v.text(v.data("name"));
681                        v.attr("onclick", "obColorer.selectColor(this)");
682                        p.append(v)
683                    })
684                }
685                if (!!l) {
686                    var n = p.find("[data-id='" + l + "']");
687                    if (n.length) {
688                        n.trigger("click")
689                    }
690                }
691                var t = p.find("[data-id]");
692                if (t.length == 1) {
693                    var m = t.get(0);
694                    obColorer.selectColor(m)
695                }
696            })
697        },
698        checkArrows: function () {
699            return
700        },
701        slideArrow: function (p) {
702            var n = {TYPE: "arrow_click", PARAMS: {sDirection: p}};
703            var o = obColorer.parent.find("[data-color-slider]");
704            var j = o.parents("[data-parent]:first");
705            var f = o.find("[data-grid]");
706            var q = f.length;
707            var t = q * obColorer.gridWidth;
708            var h = j.width();
709            var d = o.position().left - obColorer.startLeftOffset;
710            var l = Math.ceil(-d / obColorer.gridWidth);
711            if (l < 0) {
712                l = 0
713            }
714            var i = Math.ceil((t - h + d) / obColorer.gridWidth);
715            if (i < 0) {
716                i = 0
717            }
718            var k = Math.ceil(h / obColorer.gridWidth);
719            var s = Math.ceil(k / 2);
720            var m = 0;
721            switch (p) {
722                case"left":
723                    if (s < l) {
724                        m = "+=" + (s * obColorer.gridWidth) + "px"
725                    }
726                    break;
727                case"right":
728                    if (s <= i) {
729                        m = "-=" + (s * obColorer.gridWidth) + "px"
730                    } else {
731                        m = "-=" + (i * obColorer.gridWidth) + "px"
732                    }
733                    break
734            }
735            o.animate({left: m}, 300, function () {
736                a(this).data("offset-left", parseInt(o.css("left")));
737                obColorer.checkArrows();
738                obColorer.snapToGrid();
739                obColorer.pushAction(n)
740            })
741        },
742        checkSliderLimits: function (j) {
743            var s = j.parents("[data-parent]:first");
744            var n = j.find("[data-grid]");
745            var d = n.length;
746            var p = d * obColorer.gridWidth;
747            var u = s.width();
748            var o = j.position().left - obColorer.startLeftOffset;
749            var m = Math.ceil(-o / obColorer.gridWidth);
750            if (m < 0) {
751                m = 0
752            }
753            var l = Math.ceil((p - u + o) / obColorer.gridWidth);
754            if (l < 0) {
755                l = 0
756            }
757            var x = Math.ceil(u / obColorer.gridWidth);
758            var t = a(n[0]);
759            var f = t.data("index");
760            var y = a(n[n.length - 1]);
761            var k = y.data("index");
762            if (m > obColorer.limit) {
763                var h = m - obColorer.limit;
764                for (var v = 0; v < h; v++) {
765                    a(n[v]).remove();
766                    o += obColorer.gridWidth
767                }
768            } else {
769                if (m < obColorer.limit) {
770                    var w = obColorer.limit - m;
771                    while ((f > 0) && (w > 0)) {
772                        f--;
773                        if ($div = obColorer.createObject(f)) {
774                            j.prepend($div);
775                            o -= obColorer.gridWidth
776                        }
777                        w--
778                    }
779                }
780            }
781            if (l < obColorer.limit) {
782                var q = Object.keys(obColorer.allItems).length - 1;
783                var w = obColorer.limit - l;
784                while ((k < q) && (w > 0)) {
785                    k++;
786                    if ($div = obColorer.createObject(k)) {
787                        j.append($div)
788                    }
789                    w--
790                }
791            }
792            if (o > 0) {
793                o = 0
794            }
795            j.css("left", o);
796            this.checkPosition(j)
797        },
798        showFullDisclaimer: function () {
799            var f = this.parent;
800            var d = f.find(".tint-disclaimer-full");
801            d.addClass("tint-visible")
802        },
803        checkPosition: function (k) {
804            var j = k.parents("[data-parent]:first");
805            var l = k.find("[data-grid]");
806            var h = l.length;
807            var i = h * obColorer.gridWidth;
808            var d = j.width();
809            var f = k.position().left - obColorer.startLeftOffset;
810            if (i < d) {
811                return false
812            }
813            if (d - f > i) {
814                k.animate({left: -(i - d - 2)}, 300);
815                return false
816            }
817            if (f > 0) {
818                k.animate({left: 0}, 300);
819                return false
820            }
821            return true
822        },
823        mobile: function () {
824            return (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase()))
825        },
826        getSelectedData: function () {
827            var d = {
828                BASKET_ID: this.selectedBasketID,
829                PRODUCT_ID: this.selectedElementID,
830                HEX: this.selectedColorHEX,
831                COLOR_ID: this.selectedColorID,
832                BASE_TYPE_INT: this.selectedBaseTypeInt,
833                COLOR_NAME: this.selectedColorName,
834                COLOR_PRICE: this.selectedColorPrice,
835                PRICE_PER_CAN: this.selectedColorPricePerCan,
836                PRICE_PER_LITER: this.selectedColorPricePerLitr,
837                COLLECTION_ID: this.selectedCollectionID,
838                COLLECTION_VENDOR_ID: this.selectedCollectionVen
838dorID,
839                COLLECTION_NAME: this.selectedCollectionName
840            };
841            if (obColorer.productData.PRODUCT_ID) {
842                d.PRODUCT_ID = obColorer.productData.PRODUCT_ID
843            }
844            if (obColorer.productData.VOLUME) {
845                d.VOLUME = obColorer.productData.VOLUME
846            }
847            if (obColorer.productData.BASKET_ID) {
848                d.BASKET_ID = obColorer.productData.BASKET_ID
849            }
850            if (obColorer.productData.COLOR_SKU_ID) {
851                d.COLOR_SKU_ID = obColorer.productData.COLOR_SKU_ID
852            }
853            return d
854        },
855        submit: function (d) {
856            tobasket = 0;
857            this.propagation();
858            var j = {TYPE: "submit_color", PARAMS: {}};
859            var h = a(d);
860            var show = false;
861            if(window.location.pathname == '/personal/cart/' || window.location.pathname == '/color_collections/566/23490/'){
862                show = true;
863            }
864            if (h.hasClass("tint-inactive")) {
865                return false
866            }
867            var k = this.parent.find("[data-tint-over]");
868            this.parent.addClass("tint-was-selected");
869            var i = a("[data-colors-big-parent]");
870            var f = obColorer.getSelectedData();
871          // console.log(f);
872          //  console.log(123);
873            if (!!f.COLLECTION_NAME) {
874                k.find("[data-collection-name]").text(f.COLLECTION_NAME)
875            }
876            if (!!f.COLOR_NAME) {
877                k.find("[data-color-name]").text(f.COLOR_NAME)
878            }
879            k.find("[data-color-bg]").css("background-color", f.HEX);
880            k.find("[data-basket-link]").attr("href", obColorer.siteSettings.basketURL);
881            j.PARAMS = f;
882            if (!!j.PARAMS.COLOR_PRICE) {
883                j.PARAMS.COLOR_PRICE = (Math.round(j.PARAMS.COLOR_PRICE * 100) / 100).toString()
884            }
885            obColorer.pushAction(j);
886            
887            $('.buy-button-box .add-to-cart').show();
888            $('.buy-button-box .product-cart-control').hide();
889            if (typeof obColorer.siteSettings.colorSelect === "function") {
890                if(!show){  
891                    var MF_COLOR = $('.MF_COLOR .property-filter-value.__active:first').index();
892                    selectedColor[MF_COLOR] = f
893                    selectedColorPRICE[MF_COLOR] = Math.round(parseInt($('.tint-color-price').attr('data-price-shop'))/parseInt($('.tint-color-price').attr('data-price-ref_can_volume')))
894                   // console.log(selectedColor)
895                    obColorer.showcolor();
896                    obColorer.close(this);
897                   // console.log('showcolor');
898                   // console.log(JSON.stringify(selectedColor));
899                    $('.calc-comp .active.calc-comp__layer-btn').click();
900                }else{
901                    obColorer.siteSettings.colorSelect(f)
902                }
903            }
904            if (!!obColorer.options.CLIENT_DOMAIN) {
905                    k.find("tint-domain").text(obColorer.options.CLIENT_DOMAIN)
906            }
907            if(show){
908                k.fadeIn();
909            }
910            return true
911        },
912        showcolor: function (){
913            obColorer.hidecolor();
914            var MF_COLOR = $('.MF_COLOR .property-filter-value.__active:first').index();
915            $('.pic.cl').remove()
916            $('.title-tint-select').remove()
917            $('.color-block-title--rect').text(selectedColor[MF_COLOR].COLOR_NAME)
918            $('.color-block-img').hide();
919            $('.--gtm-btn_buy').removeClass('new-btn-text')
920            $('.--gtm-btn_buy').addClass('new-btn-text-color')
921            newColor = 1;
922            if(selectedColorPRICE[MF_COLOR]>0){
923                var price = selectedColorPRICE[MF_COLOR]
924            }else{
925                var price = selectedColorPRICE1;
926            }
927            
928            /* ПРАВКА mirkrasok (24.08.2026). Цены за литр и за м² считались от
929               объёма банки, который вычитывался из текста блока «Расход»:
930               там был отдельный элемент .obiem с объёмом («9л»). Элемент из
931               карточки убрали (см. detail_claude/include/template_all_vue.php),
932               класс obiem переехал на строку «1л = 5-11КВ.М.», и Number('1л')
933               стал давать NaN. Запасная ветка его Ð
933½Ðµ ловила (NaN==0 — ложь),
934               а number_format печатает NaN как 0 — обе колонки обнулялись.
935               Теперь берём готовые цены из строки БЕЗ колеровки и умножаем на
936               то, во сколько раз подорожала банка: ни объём, ни расход из
937               разметки читать не нужно, и набор колонок совпадает с основной
938               строкой. Правку ПОВТОРИТЬ после перекачки s.js с core.robotint.ru. */
939            var mkPriceNum = function (t) {
940                var n = parseInt(String(t).replace(/[^0-9]/g, ''), 10);
941                return isFinite(n) ? n : 0;
942            };
943            var baseCells = $('.right-sidebar-price-row.--price-box .right-sidebar-price-title');
944            var oldprice = mkPriceNum(baseCells.eq(0).text());
945            var newprice = oldprice + price * selectedColor[MF_COLOR].VOLUME;
946            var kolerRatio = oldprice > 0 ? newprice / oldprice : 0;
947
948            var priceL = baseCells.length > 1 ? Math.round(mkPriceNum(baseCells.eq(1).text()) * kolerRatio) : '';
949            var priceR = baseCells.length > 2 ? Math.round(mkPriceNum(baseCells.eq(2).text()) * kolerRatio) : '';
950
951                $('.right-sidebar-price-row.--price-box').hide();
952                $( '.color-block-title--rect' ).after('<div class="pic cl" data-price="'+price+'" style="background-color:'+selectedColor[MF_COLOR].HEX+'">&nbsp</div><div class="title-tint-select">'+selectedColor[MF_COLOR].COLLECTION_NAME+' '+selectedColor[MF_COLOR].COLOR_NAME+'</div>')
953
954                $( '.color-box--rect' ).after('<div class="del_color" onclick="obColorer.delete(this)" >&nbsp;</div>')
955                $( '.right-sidebar-price-row.--price-box' ).after('<div class="right-sidebar-price-row new-price" data-unit-price="'+newprice+'"><div class="right-sidebar-price-title --price-value">'+number_format(newprice, 0, ".", " ")+' ₽</div>'+(priceL === '' ? '' : '<div class="right-sidebar-price-title">'+number_format(priceL, 0, ".", " ")+' ₽</div>')+(priceR === '' ? '' : '<div class="right-sidebar-price-title">'+number_format(priceR, 0, ".", " ")+' ₽</div>')+'</div>')
956                $('.mk-cartbar-price').text(number_format(newprice, 0, ".", " ") + ' ₽');
957
958                $('.calc-comp__tins-sum-title.note.selectedcolor').html('<div><span class="title-tint-left">'+selectedColor[MF_COLOR].COLOR_NAME+' </span><span class="pic cl" style="background-color:'+selectedColor[MF_COLOR].HEX+'">&nbsp;</span><span class="title-tint">'+$('.title-tint-select').text()+'</span></div>');
959        },
960        delete: function (f) {
961            tobasket = 0;
962            var MF_COLOR = $('.MF_COLOR .property-filter-value.__active span').text();
963            selectedColor = new Array();
964            selectedColorPRICE = new Array();
965            $('.calc-comp__tins-sum-title.note.selectedcolor').html('<span></span>');
966            obColorer.hidecolor();
967            $('.color-block-img').show();
968            $('.calc-comp .active.calc-comp__layer-btn').click();
969            //$('.new-btn .new-btn-text').remove();
970            //$('.new-btn .input-box').after('<div class="new-btn-text --gtm-btn_buy">В корзину</div>');
971        },
972        hidecolor: function(){
973            
974            $('.right-sidebar-price-row.--price-box').show();
975            $('.mk-cartbar-price').html($('.right-sidebar-price-row.--price-box .right-sidebar-price-title.--price-value').html());
976            $('.pic.cl').remove();
977            $('.title-tint-select').remove();
978            $('.right-sidebar-price-row.new-price').remove();
979            $('.del_color').remove();
980            $('.color-block-title--rect').text('Выбрать цвет');
981            $('.new-btn-text-color.--gtm-btn_buy').addClass('new-btn-text')
982            $('.--gtm-btn_buy').removeClass('new-btn-text-color')
983            
984        },
985        chooseColor: function (d, i, k, m) {
986            this.selectedSKUID = i;
987            this.selectedElementID = d;
988            this.selectedBasketID = 0;
989            this.testMode = !!m;
990            newColor = 1;
991            if (!!k) {
992                this.selectedBasketID = k
993            }
994            var l = {ELEMENT_ID: d, SKU_ID: i};
995            var f = a('<div data-colorer-parent="1" class="tint_empty"></div>');
996            f.appendTo("body");
997            var j = "[data-colorer-parent]";
998            var h = {setTop: true};
999            
1000            this.ajax(l, j, h)
1001        },
1002        compareNames: function (f, d) {
1003            f = a.trim(f).toLocaleLowerCase();
1004            d = a.trim(d).toLocaleLowerCase();
1005            return (f.search(d) >= 0)
1006        },
1007        searchKeyup: function (d, h) {
1008            if (h.keyCode == 13) {
1009                var f = a(d).parents("[data-parent]:first");
1010                this.findByCode(f)
1011            }
1012        },
1013        clearSearch: function () {
1014            var d = this.parent.find(".tint-cp-search");
1015            d.removeClass("tint-loading");
1016            d.removeClass("tint-found");
1017            d.removeClass("tint-notfound");
1018            d.find("[data-search-input]").val("")
1019        },
1020        findByCode: function (h) {
1021            var t = {TYPE: "search"};
1022            var j = Date.now();
1023            var p = a(h);
1024            var n = true;
1025            var f = p.find("[data-search-input]");
1026            var v = a.trim(f.prop("value"));
1027            var s = p.find("[data-error]");
1028            f.val(v);
1029            var w = false;
1030            var x = false;
1031            var F = false;
1032            if (1 || v.length) {
1033                p.addClass("tint-loading");
1034                p.removeClass("tint-found");
1035                p.removeClass("tint-notfound");
1036                if (v.length) {
1037                    if (!n) {
1038                        var z = obColorer.parent.find("[data-color-slider]");
1039                        if (obColorer.searchClone === false) {
1040                            obColorer.searchClone = z.clone()
1041                        }
1042                        var k = obColorer.searchClone.find("[data-id]").clone();
1043                        var A = k.filter(function () {
1044                            var i = a(this).attr("data-name").toLowerCase().indexOf(v.toLowerCase());
1045                            return i >= 0
1046                        });
1047                        if (A.length) {
1048                            z.empty();
1049                            var o = 0;
1050                            var u = false;
1051                            for (var y = 0; y < A.length; y++) {
1052                                if (!u) {
1053                                    u = a('<tint-div class="tint-col" data-grid="1" data-index="' + o + '"/>')
1054                                }
1055                                var d = a(A[y]);
1056                                d.appendTo(u);
1057                                if (!((y + 1) % 6)) {
1058                                    u.appendTo(z);
1059                                    var u = false;
1060                                    o++
1061                                }
1062                            }
1063                            if (u) {
1064                                u.appendTo(z)
1065                            }
1066                            w = true
1067                        }
1068                        if (!w) {
1069                            p.addClass("tint-notfound");
1070                            z.html(obColorer.searchClone.html())
1071                        } else {
1072                            p.addClass("tint-found");
1073                            obColorer.initColorswipe();
1074                            var B = z.find("[data-id]:first");
1075                            var m = B.parent();
1076                            var q = a("[data-color-slider]");
1077                            var D = a("[data-active-items]");
1078                            var l = m.position().left + q.position().left;
1079                            D.css("left", l);
1080                            obColorer.snapToGrid()
1081                        }
1082                        t.PARAMS = {sTextQuery: v};
1083                        t.REQUEST_TIME = j;
1084                        t.RESPONSE_TIME = Date.now();
1085                        obColorer.pushAction(t)
1086                    } else {
1087                        var C = {action: "get-colors", SEARCH: v};
1088                        var E = a.Deferred();
1089                        this.ajax(C, "[data-main-part]", {}, E);
1090                        E.done(function (H) {
1091                            t.PARAMS = {sTextQuery: v};
1092                            t.REQUEST_TIME = j;
1093                            t.RESPONSE_TIME = Date.now();
1094                            obColorer.pushAction(t);
1095                            obColorer.setSearchTitle();
1096                            var i = obColorer.parent.find("[data-grid]").length;
1097                            var G = obColorer.parent.find(".tint-cp-search");
1098                            var I = obColorer.parent.find("[data-color-slider]");
1099                            G.attr("data-was-searched", 1);
1100                            if (i) {
1101                                G.addClass("tint-found")
1102                            } else {
1103                                G.addClass("tint-notfound")
1104                            }
1105                        })
1106                    }
1107                } else {
1108                }
1109                p.removeClass("tint-loading")
1110            }
1111            return false
1112        },
1113        disableSearch: function () {
1114            var f = obColorer.parent.find("[data-color-slider]");
1115            if (obColorer.searchClone !== false) {
1116                f.html(obColorer.searchClone.html())
1117            }
1118            var d = f.find("[data-id]:first");
1119            obColorer.initColorswipe();
1120            obColorer.checkArrows();
1121            obColorer.setSnapTo(d)
1122        },
1123        scrollToGrid: function (v, o) {
1124            var p = obColorer.parent.find("[data-color-slider]");
1125            var j = p.parents("[data-parent]:first");
1126            var h = p.find("[data-grid]");
1127            var k = h.filter("[data-index='" + v + "']");
1128            if (!k.length) {
1129                return
1130            }
1131            var q = h.length;
1132            var u = q * obColorer.gridWidth;
1133            var f = j.width();
1134            var d = p.position().left - obColorer.startLeftOffset;
1135            var m = Math.ceil(-d / obColorer.gridWidth);
1136            if (m < 0) {
1137                m = 0
1138            }
1139            var i = Math.ceil((u - f + d) / obColorer.gridWidth);
1140            if (i < 0) {
1141                i = 0
1142            }
1143            var l = Math.ceil(f / obColorer.gridWidth);
1144            var t = Math.ceil(l / 2);
1145            var n = 0;
1146            if (m + t < v) {
1147                n = d - ((v - m - t) * obColorer.gridWidth);
1148                var s = u - f;
1149                if (Math.abs(n) > Math.abs(s)) {
1150                    n = -Math.abs(s)
1151                }
1152            } else {
1153                if (v > t) {
1154                    n = -((v - t) * obColorer.gridWidth)
1155                } else {
1156                    n = 0
1157                }
1158            }
1159            p.animate({left: n}, 300, function () {
1160                a(this).data("offset-left", parseInt(p.css("left")));
1161                obColorer.checkArrows();
1162                if (!o) {
1163                    o = k.find("[data-id]:first").data("id")
1164                }
1165                var w = p.find("[data-id='" + o + "']");
1166                if (w.length) {
1167                    w.oneTime("100ms", function () {
1168                        w.click()
1169                    })
1170                }
1171            })
1172        },
1173        checkInFavorites: function (j) {
1174            var f = this.parent.find("[data-favorite-items]");
1175            if (f.length) {
1176                var d = f.data("favorite-items");
1177                for (var h in d) {
1178                    if (d[h] == j) {
1179                        return true
1180                    }
1181                }
1182            }
1183            return false
1184        },
1185        selectColor: function (u) {
1186            var q = a(u);
1187            var t = q.parents("[data-colors-big-parent]:first");
1188            t.find("[data-id]").removeClass("tint-active");
1189            q.addClass("tint-active");
1190            var p = a("[data-color-info]");
1191            this.selectedColorID = q.data("id");
1192            var h = false;
1193            var k = q.data("collection-name");
1194            var j = q.data("collection-id");
1195            var d = obColorer.parent.find("[data-tint-submit]");
1196            var s = obColorer.parent.find("[data-favorite-block]");
1197            if (h = this.getColorByID(this.selectedColorID)) {
1198                if (d.hasClass("tint-inactive")) {
1199                    d.find(".tint-color-sname").html(obColorer.buttonTexts.not_empty)
1200                }
1201                p.find("[data-collection-name]").text(h.SECTION_NAME);
1202                p.find("[data-color-name]").text(h.name);
1203                p.find("[data-base-type-int]").text(h.BASE_TYPE_INT);
1204                p.removeClass("hidden");
1205                s.addClass("tint-active");
1206                if (this.checkInFavorites(this.selectedColorID)) {
1207                    s.addClass("tint-selected")
1208                } else {
1209                    s.removeClass("tint-selected")
1210                }
1211                d.removeClass("tint-inactive");
1212                d.find("[data-color-name]").text(h.name);
1213                if (h.price) {
1214                    d.addClass("tint-with-price");
1215                    d.find("[data-color-price]").text(h.price)
1216                } else {
1217                    d.removeClass("tint-with-price")
1218                }
1219                d.removeClass("tint-inactive");
1220                obColorer.hideShare()
1221            }
1222            this.selectedBaseTypeInt = q.data("base-type-int");
1223            this.selectedColorHEX = q.data("hex");
1224            this.selectedColorName = q.text();
1225            a("[data-colorate]").css("background", q.data("hex"));
1226            a("[data-item-color]").css("background", q.data("hex")).addClass("tint-active");
1227            a("[data-sku-color-text]").text(this.selectedColorName);
1228            a("[data-tint-left]").addClass("tint-selected-color");
1229            p.css("background-color", this.selectedColorHEX);
1230            this.selectedCollectionName = k;
1231            this.selectedCollectionVendorID = q.data("collection-vendor-id");
1232            this.selectedCollectionID = j;
1233            p.find("[data-collection-name]").text(k);
1234            var n = this.getTextColor(this.selectedColorHEX);
1235            if (n) {
1236                p.addClass("tint-white")
1237            } else {
1238                p.removeClass("tint-white")
1239            }
1240            var o = q.data("id");
1241            var m = q.data("name");
1242            var l = q.data("collection-id");
1243            var i = q.data("collection-name");
1244            var f = {TYPE: "select_color", PARAMS: {iColorID: o, sColorName: m, iCollectionID: l, sCollectioName: i}};
1245            obColorer.pushAction(f);
1246            obColorer.getPrice(u)
1247        },
1248        getColorByID: function (h) {
1249            if (!!h) {
1250                var f = a("[data-color-slider]");
1251                var d = a("[data-id='" + h + "']");
1252                if (d.length) {
1253                  //  console.log(d.data());
1254                  //  console.log(123456);
1255                    return d.data()
1256                }
1257            }
1258            return false
1259        },
1260        bind: function () {
1261        },
1262        hideBG: function () {
1263            var d = a("body").find("tint-bg");
1264            if (d.length) {
1265                d.hide()
1266            }
1267        },
1268        getBG: function () {
1269            var d = a("body").find("tint-bg");
1270            if (d.length) {
1271                return d
1272            }
1273            return false
1274        },
1275        showBG: function () {
1276            var d = a("body").find("tint-bg");
1277            if (!d.length) {
1278                d = a("<tint-bg/>");
1279                var f = {
1280                    position: "fixed",
1281                    top: 0,
1282                    left: 0,
1283                    zIndex: obColorer.siteSettings.bgZindex,
1284                    width: "100%",
1285                    height: "100%",
1286                    display: "none",
1287                    opacity: 0.5,
1288                    background: "#000 url('" + obColorer.spinnerUrl + "') no-repeat scroll 50% 50%"
1289                };
1290                d.css(f);
1291                d.appendTo(a("body"))
1292            }
1293            obColorer.bg = d;
1294            d.removeClass("tint-no-spinner");
1295            d.fadeIn(300)
1296        },
1297        show: function (f, m) {
1298            var d = {TYPE: "open_widget", PARAMS: {}};
1299            var l = (!!f) ? a(f) : false;
1300            
1301            if (obColorer.saParent) {
1302                obColorer.options.STAND_ALONE = 1
1303            }
1304            if (l) {
1305                obColorer.object = l;
1306                if (l[0].hasAttribute("disabled")) {
1307                    return false
1308                }
1309                obColorer.selectedElementID = parseInt(l.data("product-id"));
1310                if (l.data("basket-id")) {
1311                    obColorer.selectedBasketID = parseInt(l.data("basket-id"))
1312                }
1313            }
1314            var i = {action: "init"};
1315            if (l) {
1316                obColorer.productData =JSON.parse(l.attr("data-tint-data"))
1317                //obColorer.productData = l.data("tint-data")
1318
1319            }
1320            a.extend(i, obColorer.productData);
1321            if (!!obColorer.productData.FROM) {
1322                d.PARAMS.FROM = obColorer.productData.FROM
1323            }
1324            if (l) {
1325                this.iBaseType = parseInt(l.data("tint-bt"))
1326            }
1327            a.extend(i, obColorer.options);
1328            if (!i.CLIENT_ID) {
1329                var j = {type: "critical", message: "RoboTint: ClientID is not specified"};
1330                obColorer.processError(j);
1331                return false
1332            }
1333            if (this.iBaseType) {
1334                if (typeof i.USE_SWITCHER == "undefined") {
1335                    i.USE_SWITCHER = 1
1336                }
1337            } else {
1338                i.USE_SWITCHER = 0
1339            }
1340            if (m) {
1341                var h = obColorer.urlParam();
1342                i.SHARE_ID = h["robotint-share"]
1343            }
1344            var k = "";
1345            a.ajax({
1346                url: obColorer.url,
1347                data: i,
1348                type: "post",
1349                crossDomain: true,
1350                xhrFields: {withCredentials: true},
1351                beforeSend: function () {
1352                    if (!obColorer.saParent) {
1353                        obColorer.showBG()
1354                    } else {
1355                        obColorer.saParent.css({
1356                            width: "100%",
1357                            minHeight: 130,
1358                            display: "flex",
1359                            "justify-content": "center",
1360                            "align-items": "center"
1361                        });
1362                        a("<img src='" + obColorer.domain + "/spinner.svg' style='width:80px; height:80px;'/>").appendTo(obColorer.saParent)
1363                    }
1364                    k = Date.now()
1365                },
1366                success: function (n) {
1367                    d.REQUEST_TIME = k;
1368                    d.RESPONSE_TIME = Date.now();
1369                    obColorer.pushAction(d);
1370                    var o = {TYPE: "dom_construct", REQUEST_TIME: Date.now()};
1371                    if (obColorer.saParent) {
1372                        obColorer.appendSA(n)
1373                    } else {
1374                        obColorer.appendPopup(n)
1375                    }
1376                    obColorer.init();
1377                    o.RESPONSE_TIME = Date.now();
1378                    obColorer.pushAction(o)
1379                },
1380                error: function (n) {
1381                    var o = {type: "critical", message: "RoboTint: " + n.statusText + ". " + n.responseText};
1382                    obColorer.processError(o)
1383                }
1384            })
1385        },
1386        processError: function (h) {
1387            var d = !!obColorer.options.IFRAME;
1388            switch (h.type) {
1389                case"warning":
1390                    console.warn(h.message);
1391                    break;
1392                case"critical":
1393                    if (d) {
1394                        try {
1395                            if (typeof obRobotint != "undefined") {
1396                                if (obRobotint.lastMessage) {
1397                                    let response = {action: "undefined", data: {}, type: "error", message: h.message};
1398                                    obRobotint.sendResponse(obRobotint.lastMessage.ports[0], response)
1399                                }
1400                            }
1401                        } catch (f) {
1402                            console.trace(f)
1403                        }
1404                        obColorer.hideBG()
1405                    } else {
1406                        console.warn(h.message);
1407                        obColorer.hideBG()
1408                    }
1409                    break
1410            }
1411        },
1412        sizeGridWidth: function () {
1413            var d = obColorer.saParent.find(".tint-right");
1414            var i = obColorer.saParent.find(".tint-blured");
1415            var h = i.width();
1416            var f = parseInt(d.css("padding-right"));
1417            var k = Math.ceil(h / this.gridWidth);
1418            var j = k * this.gridWidth - h + 5;
1419            if (j > 0) {
1420                if (j <= 10) {
1421                    f -= j
1422                } else {
1423                    f += this.gridWidth - j
1424                }
1425                d.css("padding-right", f)
1426            }
1427        },
1428        appendSA: function (d) {
1429            var f = obColorer.saParent;
1430            f[0].removeAttribute("style");
1431            f.empty().append(a(d));
1432            obColorer.sizeGridWidth()
1433        },
1434        appendPopup: function (h) {
1435            var f = a(h);
1436            f.addClass("tint-popup");
1437            if (!!this.options.IFRAME) {
1438                f.addClass("tint-iframe")
1439            }
1440            f.appendTo(a("body"));
1441            f.css({top: a(window).scrollTop() + 100, zIndex: obColorer.siteSettings.bgZindex + 1});
1442            var d = obColorer.getBG();
1443            if (d) {
1444                d.addClass("tint-no-spinner")
1445            }
1446        },
1447        initCarousel: function () {
1448            if (this.parent) {
1449                var d = this.parent.find(".tint-images-swipe");
1450                if (d.find(".tint-image").length > 1) {
1451                    var h = this.parent.data("tint-share");
1452                    var f = {rolledElements: 1};
1453                    if (h) {
1454                        if (parseInt(h.IMAGE)) {
1455                            f.initItem = parseInt(h.IMAGE)
1456                        }
1457                    }
1458                    new RTSwiper(d.get(0), {
1459                        containerModifierClass: "tint-swiper-container-",
1460                        slideClass: "tint-swiper-slide",
1461                        slideActiveClass: "tint-swiper-slide-active",
1462                        slideDuplicateActiveClass: "tint-swiper-slide-duplicate-active",
1463                        slideVisibleClass: "tint-swiper-slide-visible",
1464                        slideDuplicateClass: "tint-swiper-slide-duplicate",
1465                        slideNextClass: "tint-swiper-slide-next",
1466                        slideDuplicateNextClass: "tint-swiper-slide-duplicate-next",
1467                        slidePrevClass: "tint-swiper-slide-prev",
1468                        slideDuplicatePrevClass: "tint-swiper-slide-duplicate-prev",
1469                        slideBlankClass: "tint-swiper-slide-invisible-blank",
1470                        wrapperClass: "tint-swiper-wrapper",
1471                        loop: true,
1472                        touchStartForcePreventDefault: true,
1473                        touchMoveStopPropagation: true,
1474                        touchReleaseOnEdges: true,
1475                        navigation: {
1476                            nextEl: d.find(".tint-image-arrow-right").get(0),
1477                            prevEl: d.find(".tint-image-arrow-left").get(0)
1478                        },
1479                        pagination: {
1480                            el: d.find(".tint-images-bullets").get(0),
1481                            bulletElement: "tint-div",
1482                            bulletClass: "tint-images-bullet",
1483                            bulletActiveClass: "tint-active",
1484                            clickable: true
1485                        }
1486                    })
1487                }
1488            }
1489        },
1490        paginate: function (d) {
1491            return
1492        },
1493        initColorswipe: function () {
1494            if (this.parent) {
1495                var f = this.parent.find("[data-tinting-parent]");
1496                if (f.length) {
1497                    var d = new RTSwiper(f.find(".tint-cp-wrapper").get(0), {
1498                        containerModifierClass: "tint-swiper-container-",
1499                        slideClass: "tint-col",
1500                        slideActiveClass: "tint-swiper-slide-active",
1501                        slideDuplicateActiveClass: "tint-swiper-slide-duplicate-active",
1502                        slideVisibleClass: "tint-swiper-slide-visible",
1503                        slideDuplicateClass: "tint-swiper-slide-duplicate",
1504                        slideNextClass: "tint-swiper-slide-next",
1505                        slideDuplicateNextClass: "tint-swiper-slide-duplicate-next",
1506                        slidePrevClass: "tint-swiper-slide-prev",
1507                        slideDuplicatePrevClass: "tint-swiper-slide-duplicate-prev",
1508                        slideBlankClass: "tint-swiper-slide-invisible-blank",
1509                        wrapperClass: "tint-cp-scrollable",
1510                        slidesPerGroup: 6,
1511                        slidesPerView: 13,
1512                        threshold: 20,
1513                        touchStartForcePreventDefault: true,
1514                        touchMoveStopPropagation: true,
1515                        touchReleaseOnEdges: true,
1516                        navigation: {
1517                            disabledClass: "tint-inactive",
1518                            nextEl: f.find(".tint-cp-arrow-next").get(0),
1519                            prevEl: f.find(".tint-cp-arrow-prev").get(0)
1520                        },
1521                        breakpoints: {
1522                            850: {slidesPerGroup: 6, slidesPerView: 13},
1523                            700: {slidesPerView: 9, slidesPerGroup: 4},
1524                            420: {slidesPerView: 10, slidesPerGroup: 5},
1525                            320: {slidesPerView: 8, slidesPerGroup: 4}
1526                        }
1527                    }).on("touchStart", function (h, i) {
1528                        obColorer.draggingColors = true;
1529                        obColorer.propagation()
1530                    }).on("sliderMove", function (h, i) {
1531                        obColorer.draggingColors = true;
1532                        obColorer.propagation()
1533                    }).on("touchEnd", function (h, i) {
1534                        obColorer.draggingColors = false;
1535                        obColorer.propagation()
1536                    }).on("transitionEnd", function (h, i) {
1537                        obColorer.snapToGrid()
1538                    })
1539                }
1540            }
1541        },
1542        initSwitcher: function () {
1543            if (0 && this.parent) {
1544                this.parent.find(".tint-switch-item").drag(function (f, d) {
1545                    var h = d.offsetY - d.originalY;
1546                    if (h > 15) {
1547                        h = 15
1548                    }
1549                    if (h < 0) {
1550                        h = 0
1551                    }
1552                    a(this).css({top: h})
1553                }).drag("end", function (h, d) {
1554                    var i = d.offsetY - d.originalY;
1555                    var f = a(this);
1556                    if (i != 0 && i != 15) {
1557                        i = (i < 7) ? 0 : 15;
1558                        f.css({top: i})
1559                    }
1560                    obColorer.selectType(i ? "avail" : "all")
1561                })
1562            }
1563        },
1564        setOptions: function (d) {
1565            if (!!d.tintSettings) {
1566                this.options = d.tintSettings
1567            }
1568            if (!!d.siteSettings) {
1569                a.extend(obColorer.siteSettings, d.siteSettings)
1570            }
1571            if (!!this.options.DOMAIN) {
1572                this.domain = this.options.DOMAIN
1573            }
1574            if (this.url.indexOf(this.domain) == -1) {
1575                this.url = this.domain + this.url
1576            }
1577            if (this.spinnerUrl.indexOf(this.domain) == -1) {
1578                this.spinnerUrl = this.domain + this.spinnerUrl
1579            }
1580        },
1581        changeImg: function (d) {
1582            var h = a(d);
1583            var f = h.parent();
1584            f.removeClass("tint-image-loading");
1585            f.css("background-image", "url('" + h.attr("src") + "')")
1586        },
1587        init: function () {
1588            var i = a("[data-colorate-parent]");
1589            this.parent = false;
1590            if (i.length) {
1591                this.parent = i;
1592                this.initCarousel();
1593                if (this.parent.find("[data-tabs]").length) {
1594                    this.initSwitcher()
1595                }
1596                if (this.parent.find("[data-color-slider]").length) {
1597                    this.initColorswipe();
1598                    this.checkArrows();
1599                    var h = this.parent.data("tint-share");
1600                    if (!!h.PRODUCT_DATA) {
1601                        obColorer.productData = h.PRODUCT_DATA
1602                    }
1603                    var k = parseInt(h.COLOR_ID);
1604                    if (k) {
1605                        var j = this.parent.find("[data-color-slider] [data-id='" + k + "']");
1606                        if (j.length) {
1607                            var d = j.parents("[data-grid]:first");
1608                            var f = d.data("index");
1609                            this.scrollToGrid(f, k)
1610                        } else {
1611                            this.snapToGrid()
1612                        }
1613                    } else {
1614                        this.snapToGrid()
1615                    }
1616                }
1617                this.selectedColorID = false;
1618                this.selectedColorHEX = ""
1619            }
1620        },
1621        enableButtons: function () {
1622            /* ПРАВКА mirkrasok (21.08.2026). Родной код читает data-tint-data у
1623               каждого [data-tint-button] без проверок, и на элементе без неё
1624               (кружок выбора цвета на плитке товара его получает только по клику)
1625               исключение роняет всю очередь готовности документа: в корзине
1626               переставали работать количество и удаление. Отсекаем чужие кнопки
1627               сразу. Правку ПОВТОРИТЬ после перекачки s.js с core.robotint.ru. */
1628            var d = a("[data-tint-button]:not([data-processed])").filter(function () {
1629                var t = a(this).data("tint-data");
1630                return !!t && typeof t === "object";
1631            });
1632            var f = {action: "ping", TITLE: document.title, REFERER: window.location.href, BARCODES: []};
1633            d.each(function () {
1634                var j = a(this);
1635                var i = j.data("tint-data");
1636                if (i.hasOwnProperty("BARCODE")) {
1637                    f.BARCODES.push(i.BARCODE)
1638                }
1639            });
1640            a.extend(f, obColorer.options);
1641            if (d.length) {
1642                if (!obColorer.options.CLIENT_ID) {
1643                    var h = {type: "warning", message: "RoboTint: ClientID is not specified"};
1644                    obColorer.processError(h);
1645                    return false
1646                }
1647                a.ajax({
1648                    url: obColorer.url, data: f, type: "post", dataType: "json", success: function (k) {
1649                        d.attr("data-processed", "1");
1650                        if (parseInt(k.ACTIVE)) {
1651                            var j = f.BARCODES.length ? 1 : 0;
1652                            var i = k.BARCODES;
1653                            var l = false;
1654                            d.each(function () {
1655                                var p = a(this);
1656                                var o = p.data("tint-data");
1657                                if (j) {
1658                                    if (!!o.BARCODE) {
1659                                        var n = o.BARCODE;
1660                                        if (i.indexOf(n) > -1) {
1661                                            p[0].removeAttribute("disabled");
1662                                            l = true
1663                                        } else {
1664                                            p.attr("disabled", true)
1665                                        }
1666                                    }
1667                                } else {
1668                                    if (!o.hasOwnProperty("BARCODE")) {
1669                                        p[0].removeAttribute("disabled");
1670                                        l = true
1671                                    }
1672                                }
1673                            });
1674                            if (l) {
1675                                var m = {TYPE: "enable_buttons", PARAMS: {COUNT: d.length}};
1676                                obColorer.pushAction(m)
1677                            }
1678                        }
1679                    }, error: function (i) {
1680                        var j = {type: "critical", message: "RoboTint: " + i.statusText + ". " + i.responseText};
1681                        obColorer.processError(j)
1682                    }
1683                })
1684            }
1685        },
1686        load: (function () {
1687            a(function () {
1688                var k = a("script[src*='robotint']");
1689                if (k.length) {
1690                    var l = k.data("params");
1691                    if (l) {
1692                        obColorer.setOptions(l)
1693                    }
1694                }
1695                obColorer.checkUserCookie();
1696                var f = a("<img/>");
1697                f.attr({src: obColorer.spinnerUrl, alt: ""}).css({width: 0, height: 0}).appendTo(a("body"));
1698                obColorer.enableButtons();
1699                if (obColorer.images > 0) {
1700                    for (var d = 1; d <= obColorer.images; d++) {
1701                        var f = a("<img/>");
1702                        f.attr("src", obColorer.domain + obColorer.thumbs + d.toString() + ".png");
1703                        f.css({width: 0, height: 0}).appendTo(a("body"))
1704                    }
1705                }
1706                var j = a("#tint-standalone");
1707                var h = obColorer.urlParam();
1708                if (j.length) {
1709                    obColorer.saParent = j;
1710                    if (!!h["robotint-share"]) {
1711                        obColorer.show(false, true)
1712                    } else {
1713                        obColorer.show(obColorer.saParent)
1714                    }
1715                } else {
1716                    if (!!h["robotint-share"]) {
1717                        obColorer.show(false, true)
1718                    }
1719                }
1720                a(document).ajaxSuccess(function () {
1721                    obColorer.enableButtons()
1722                })
1723            })
1724        })()
1725    }
1726})(jQuery);
1727(function (c, d) {
1728    typeof exports === "object" && typeof module !== "undefined" ? module.exports = d() : typeof define === "function" && define.amd ? define(d) : (c = c || self, c.RTSwiper = d())
1729}(this, (function () {
1730    function _defineProperties(target, props) {
1731        for (var i = 0; i < props.length; i++) {
1732            var descriptor = props[i];
1733            descriptor.enumerable = descriptor.enumerable || false;
1734            descriptor.configurable = true;
1735            if ("value" in descriptor) {
1736                descriptor.writable = true
1737            }
1738            Object.defineProperty(target, descriptor.key, descriptor)
1739        }
1740    }
1741
1742    function _createClass(Constructor, protoProps, staticProps) {
1743        if (protoProps) {
1744            _defineProperties(Constructor.prototype, protoProps)
1745        }
1746        if (staticProps) {
1747            _defineProperties(Constructor, staticProps)
1748        }
1749        return Constructor
1750    }
1751
1752    function _extends() {
1753        _extends = Object.assign || function (target) {
1754            for (var i = 1; i < arguments.length; i++) {
1755                var source = arguments[i];
1756                for (var key in source) {
1757                    if (Object.prototype.hasOwnProperty.call(source, key)) {
1758                        target[key] = source[key]
1759                    }
1760                }
1761            }
1762            return target
1763        };
1764        return _extends.apply(this, arguments)
1765    }
1766
1767    function isObject(obj) {
1768        return obj !== null && typeof obj === "object" && "constructor" in obj && obj.constructor === Object
1769    }
1770
1771    function extend(target, src) {
1772        if (target === void 0) {
1773            target = {}
1774        }
1775        if (src === void 0) {
1776            src = {}
1777        }
1778        Object.keys(src).forEach(function (key) {
1779            if (typeof target[key] === "undefined") {
1780                target[key] = src[key]
1781            } else {
1782                if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {
1783                    extend(target[key], src[key])
1784                }
1785            }
1786        })
1787    }
1788
1789    var ssrDocument = {
1790        body: {}, addEventListener: function addEventListener() {
1791        }, removeEventListener: function removeEventListener() {
1792        }, activeElement: {
1793            blur: function blur() {
1794            }, nodeName: ""
1795        }, querySelector: function querySelector() {
1796            return null
1797        }, querySelectorAll: function querySelectorAll() {
1798            return []
1799        }, getElementById: function getElementById() {
1800            return null
1801        }, createEvent: function createEvent() {
1802            return {
1803                initEvent: function initEvent() {
1804                }
1805            }
1806        }, createElement: function createElement() {
1807            return {
1808                children: [], childNodes: [], style: {}, setAttribute: function setAttribute() {
1809                }, getElementsByTagName: function getElementsByTagName() {
1810                    return []
1811                }
1812            }
1813        }, createElementNS: function createElementNS() {
1814            return {}
1815        }, importNode: function importNode() {
1816            return null
1817        }, location: {hash: "", host: "", hostname: "", href: "", origin: "", pathname: "", protocol: "", search: ""}
1818    };
1819
1820    function getDocument() {
1821        var doc = typeof document !== "undefined" ? document : {};
1822        extend(doc, ssrDocument);
1823        return doc
1824    }
1825
1826    var ssrWindow = {
1827        document: ssrDocument,
1828        navigator: {userAgent: ""},
1829        location: {hash: "", host: "", hostname: "", href: "", origin: "", pathname: "", protocol: "", search: ""},
1830        history: {
1831            replaceState: function replaceState() {
1832            }, pushState: function pushState() {
1833            }, go: function go() {
1834            }, back: function back() {
1835            }
1836        },
1837        CustomEvent: function CustomEvent() {
1838            return this
1839        },
1840        addEventListener: function addEventListener() {
1841        },
1842        removeEventListener: function removeEventListener() {
1843        },
1844        getComputedStyle: function getComputedStyle() {
1845            return {
1846                getPropertyValue: function getPropertyValue() {
1847                    return ""
1848                }
1849            }
1850        },
1851        Image: function Image() {
1852        },
1853        Date: function Date() {
1854        },
1855        screen: {},
1856        setTimeout: function setTimeout() {
1857        },
1858        clearTimeout: function clearTimeout() {
1859        },
1860        matchMedia: function matchMedia() {
1861            return {}
1862        },
1863        requestAnimationFrame: function requestAnimationFrame(callback) {
1864            if (typeof setTimeout === "undefined") {
1865                callback();
1866                return null
1867            }
1868            return setTimeout(callback, 0)
1869        },
1870        cancelAnimationFrame: function cancelAnimationFrame(id) {
1871            if (typeof setTimeout === "undefined") {
1872                return
1873            }
1874            clearTimeout(id)
1875        }
1876    };
1877
1878    function getWindow() {
1879        var win = typeof window !== "undefined" ? window : {};
1880        extend(win, ssrWindow);
1881        return win
1882    }
1883
1884    function _inheritsLoose(subClass, superClass) {
1885        subClass.prototype = Object.create(superClass.prototype);
1886        subClass.prototype.constructor = subClass;
1887        subClass.__proto__ = superClass
1888    }
1889
1890    function _getPrototypeOf(o) {
1891        _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
1892            return o.__proto__ || Object.getPrototypeOf(o)
1893        };
1894        return _getPrototypeOf(o)
1895    }
1896
1897    function _setPrototypeOf(o, p) {
1898        _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
1899            o.__proto__ = p;
1900            return o
1901        };
1902        return _setPrototypeOf(o, p)
1903    }
1904
1905    function _isNativeReflectConstruct() {
1906        if (typeof Reflect === "undefined" || !Reflect.construct) {
1907            return false
1908        }
1909        if (Reflect.construct.sham) {
1910            return false
1911        }
1912        if (typeof Proxy === "function") {
1913            return true
1914        }
1915        try {
1916            Date.prototype.toString.call(Reflect.construct(Date, [], function () {
1917            }));
1918            return true
1919        } catch (e) {
1920            return false
1921        }
1922    }
1923
1924    function _construct(Parent, args, Class) {
1925        if (_isNativeReflectConstruct()) {
1926            _construct = Reflect.construct
1927        } else {
1928            _construct = function _construct(Parent, args, Class) {
1929                var a = [null];
1930                a.push.apply(a, args);
1931                var Constructor = Function.bind.apply(Parent, a);
1932                var instance = new Constructor();
1933                if (Class) {
1934                    _setPrototypeOf(instance, Class.prototype)
1935                }
1936                return instance
1937            }
1938        }
1939        return _construct.apply(null, arguments)
1940    }
1941
1942    function _isNativeFunction(fn) {
1943        return Function.toString.call(fn).indexOf("[native code]") !== -1
1944    }
1945
1946    function _wrapNativeSuper(Class) {
1947        var _cache = typeof Map === "function" ? new Map() : undefined;
1948        _wrapNativeSuper = function _wrapNativeSuper(Class) {
1949            if (Class === null || !_isNativeFunction(Class)) {
1950                return Class
1951            }
1952            if (typeof Class !== "function") {
1953                throw new TypeError("Super expression must either be null or a function")
1954            }
1955            if (typeof _cache !== "undefined") {
1956                if (_cache.has(Class)) {
1957                    return _cache.get(Class)
1958                }
1959                _cache.set(Class, Wrapper)
1960            }
1961
1962            function Wrapper() {
1963                return _construct(Class, arguments, _getPrototypeOf(this).constructor)
1964            }
1965
1966            Wrapper.prototype = Object.create(Class.prototype, {
1967                constructor: {
1968                    value: Wrapper,
1969                    enumerable: false,
1970                    writable: true,
1971                    configurable: true
1972                }
1973            });
1974            return _setPrototypeOf(Wrapper, Class)
1975        };
1976        return _wrapNativeSuper(Class)
1977    }
1978
1979    function _assertThisInitialized(self) {
1980        if (self === void 0) {
1981            throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
1982        }
1983        return self
1984    }
1985
1986    function makeReactive(obj) {
1987        var proto = obj.__proto__;
1988        Object.defineProperty(obj, "__proto__", {
1989            get: function get() {
1990                return proto
1991            }, set: function set(value) {
1992                proto.__proto__ = value
1993            }
1994        })
1995    }
1996
1997    var Dom7 = function (_Array) {
1998        _inheritsLoose(Dom7, _Array);
1999
2000        function Dom7(items) {
2001            var _this;
2002            _this = _Array.call.apply(_Array, [this].concat(items)) || this;
2003            makeReactive(_assertThisInitialized(_this));
2004            return _this
2005        }
2006
2007        return Dom7
2008    }(_wrapNativeSuper(Array));
2009
2010    function arrayFlat(arr) {
2011        if (arr === void 0) {
2012            arr = []
2013        }
2014        var res = [];
2015        arr.forEach(function (el) {
2016            if (Array.isArray(el)) {
2017                res.push.apply(res, arrayFlat(el))
2018            } else {
2019                res.push(el)
2020            }
2021        });
2022        return res
2023    }
2024
2025    function arrayFilter(arr, callback) {
2026        return Array.prototype.filter.call(arr, callback)
2027    }
2028
2029    function arrayUnique(arr) {
2030        var uniqueArray = [];
2031        for (var i = 0; i < arr.length; i += 1) {
2032            if (uniqueArray.indexOf(arr[i]) === -1) {
2033                uniqueArray.push(arr[i])
2034            }
2035        }
2036        return uniqueArray
2037    }
2038
2039    function qsa(selector, context) {
2040        if (typeof selector !== "string") {
2041            return [selector]
2042        }
2043        var a = [];
2044        var res = context.querySelectorAll(selector);
2045        for (var i = 0; i < res.length; i += 1) {
2046            a.push(res[i])
2047        }
2048        return a
2049    }
2050
2051    function $(selector, context) {
2052        var window = getWindow();
2053        var document = getDocument();
2054        var arr = [];
2055        if (!context && selector instanceof Dom7) {
2056            return selector
2057        }
2058        if (!selector) {
2059            return new Dom7(arr)
2060        }
2061        if (typeof selector === "string") {
2062            var html = selector.trim();
2063            if (html.indexOf("<") >= 0 && html.indexOf(">") >= 0) {
2064                var toCreate = "div";
2065                if (html.indexOf("<li") === 0) {
2066                    toCreate = "ul"
2067                }
2068                if (html.indexOf("<tr") === 0) {
2069                    toCreate = "tbody"
2070                }
2071                if (html.indexOf("<td") === 0 || html.indexOf("<th") === 0) {
2072                    toCreate = "tr"
2073                }
2074                if (html.indexOf("<tbody") === 0) {
2075                    toCreate = "table"
2076                }
2077                if (html.indexOf("<option") === 0) {
2078                    toCreate = "select"
2079                }
2080                var tempParent = document.createElement(toCreate);
2081                tempParent.innerHTML = html;
2082                for (var i = 0; i < tempParent.childNodes.length; i += 1) {
2083                    arr.push(tempParent.childNodes[i])
2084                }
2085            } else {
2086                arr = qsa(selector.trim(), context || document)
2087            }
2088        } else {
2089            if (selector.nodeType || selector === window || selector === document) {
2090                arr.push(selector)
2091            } else {
2092                if (Array.isArray(selector)) {
2093                    if (selector instanceof Dom7) {
2094                        return selector
2095                    }
2096                    arr = selector
2097                }
2098            }
2099        }
2100        return new Dom7(arrayUnique(arr))
2101    }
2102
2103    $.fn = Dom7.prototype;
2104
2105    function addClass() {
2106        for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) {
2107            classes[_key] = arguments[_key]
2108        }
2109        var classNames = arrayFlat(classes.map(function (c) {
2110            return c.split(" ")
2111        }));
2112        this.forEach(function (el) {
2113            var _el$classList;
2114            (_el$classList = el.classList).add.apply(_el$classList, classNames)
2115        });
2116        return this
2117    }
2118
2119    function removeClass() {
2120        for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
2121            classes[_key2] = arguments[_key2]
2122        }
2123        var classNames = arrayFlat(classes.map(function (c) {
2124            return c.split(" ")
2125        }));
2126        this.forEach(function (el) {
2127            var _el$classList2;
2128            (_el$classList2 = el.classList).remove.apply(_el$classList2, classNames)
2129        });
2130        return this
2131    }
2132
2133    function toggleClass() {
2134        for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
2135            classes[_key3] = arguments[_key3]
2136        }
2137        var classNames = arrayFlat(classes.map(function (c) {
2138            return c.split(" ")
2139        }));
2140        this.forEach(function (el) {
2141            classNames.forEach(function (className) {
2142                el.classList.toggle(className)
2143            })
2144        })
2145    }
2146
2147    function hasClass() {
2148        for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
2149            classes[_key4] = arguments[_key4]
2150        }
2151        var classNames = arrayFlat(classes.map(function (c) {
2152            return c.split(" ")
2153        }));
2154        return arrayFilter(this, function (el) {
2155            return classNames.filter(function (className) {
2156                return el.classList.contains(className)
2157            }).length > 0
2158        }).length > 0
2159    }
2160
2161    function attr(attrs, value) {
2162        if (arguments.length === 1 && typeof attrs === "string") {
2163            if (this[0]) {
2164                return this[0].getAttribute(attrs)
2165            }
2166            return undefined
2167        }
2168        for (var i = 0; i < this.length; i += 1) {
2169            if (arguments.length === 2) {
2170                this[i].setAttribute(attrs, value)
2171            } else {
2172                for (var attrName in attrs) {
2173                    this[i][attrName] = attrs[attrName];
2174                    this[i].setAttribute(attrName, attrs[attrName])
2175                }
2176            }
2177        }
2178        return this
2179    }
2180
2181    function removeAttr(attr) {
2182        for (var i = 0; i < this.length; i += 1) {
2183            this[i].removeAttribute(attr)
2184        }
2185        return this
2186    }
2187
2188    function transform(transform) {
2189        for (var i = 0; i < this.length; i += 1) {
2190            this[i].style.transform = transform
2191        }
2192        return this
2193    }
2194
2195    function transition(duration) {
2196        for (var i = 0; i < this.length; i += 1) {
2197            this[i].style.transitionDuration = typeof duration !== "string" ? duration + "ms" : duration
2198        }
2199        return this
2200    }
2201
2202    function on() {
2203        for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
2204            args[_key5] = arguments[_key5]
2205        }
2206        var eventType = args[0], targetSelector = args[1], listener = args[2], capture = args[3];
2207        if (typeof args[1] === "function") {
2208            eventType = args[0];
2209            listener = args[1];
2210            capture = args[2];
2211            targetSelector = undefined
2212        }
2213        if (!capture) {
2214            capture = false
2215        }
2216
2217        function handleLiveEvent(e) {
2218            var target = e.target;
2219            if (!target) {
2220                return
2221            }
2222            var eventData = e.target.dom7EventData || [];
2223            if (eventData.indexOf(e) < 0) {
2224                eventData.unshift(e)
2225            }
2226            if ($(target).is(targetSelector)) {
2227                listener.apply(target, eventData)
2228            } else {
2229                var _parents = $(target).parents();
2230                for (var k = 0; k < _parents.length; k += 1) {
2231                    if ($(_parents[k]).is(targetSelector)) {
2232                        listener.apply(_parents[k], eventData)
2233                    }
2234                }
2235            }
2236        }
2237
2238        function handleEvent(e) {
2239            var eventData = e && e.target ? e.target.dom7EventData || [] : [];
2240            if (eventData.indexOf(e) < 0) {
2241                eventData.unshift(e)
2242            }
2243            listener.apply(this, eventData)
2244        }
2245
2246        var events = eventType.split(" ");
2247        var j;
2248        for (var i = 0; i < this.length; i += 1) {
2249            var el = this[i];
2250            if (!targetSelector) {
2251                for (j = 0; j < events.length; j += 1) {
2252                    var event = events[j];
2253                    if (!el.dom7Listeners) {
2254                        el.dom7Listeners = {}
2255                    }
2256                    if (!el.dom7Listeners[event]) {
2257                        el.dom7Listeners[event] = []
2258                    }
2259                    el.dom7Listeners[event].push({listener: listener, proxyListener: handleEvent});
2260                    el.addEventListener(event, handleEvent, capture)
2261                }
2262            } else {
2263                for (j = 0; j < events.length; j += 1) {
2264                    var _event = events[j];
2265                    if (!el.dom7LiveListeners) {
2266                        el.dom7LiveListeners = {}
2267                    }
2268                    if (!el.dom7LiveListeners[_event]) {
2269                        el.dom7LiveListeners[_event] = []
2270                    }
2271                    el.dom7LiveListeners[_event].push({listener: listener, proxyListener: handleLiveEvent});
2272                    el.addEventListener(_event, handleLiveEvent, capture)
2273                }
2274            }
2275        }
2276        return this
2277    }
2278
2279    function off() {
2280        for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
2281            args[_key6] = arguments[_key6]
2282        }
2283        var eventType = args[0], targetSelector = args[1], listener = args[2], capture = args[3];
2284        if (typeof args[1] === "function") {
2285            eventType = args[0];
2286            listener = args[1];
2287            capture = args[2];
2288            targetSelector = undefined
2289        }
2290        if (!capture) {
2291            capture = false
2292        }
2293        var events = eventType.split(" ");
2294        for (var i = 0; i < events.length; i += 1) {
2295            var event = events[i];
2296            for (var j = 0; j < this.length; j += 1) {
2297                var el = this[j];
2298                var handlers = void 0;
2299                if (!targetSelector && el.dom7Listeners) {
2300                    handlers = el.dom7Listeners[event]
2301                } else {
2302                    if (targetSelector && el.dom7LiveListeners) {
2303                        handlers = el.dom7LiveListeners[event]
2304                    }
2305                }
2306                if (handlers && handlers.length) {
2307                    for (var k = handlers.length - 1; k >= 0; k -= 1) {
2308                        var handler = handlers[k];
2309                        if (listener && handler.listener === listener) {
2310                            el.removeEventListener(event, handler.proxyListener, capture);
2311                            handlers.splice(k, 1)
2312                        } else {
2313                            if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {
2314                                el.removeEventListener(event, handler.proxyListener, capture);
2315                                handlers.splice(k, 1)
2316                            } else {
2317                                if (!listener) {
2318                                    el.removeEventListener(event, handler.proxyListener, capture);
2319                                    handlers.splice(k, 1)
2320                                }
2321                            }
2322                        }
2323                    }
2324                }
2325            }
2326        }
2327        return this
2328    }
2329
2330    function trigger() {
2331        var window = getWindow();
2332        for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
2333            args[_key9] = arguments[_key9]
2334        }
2335        var events = args[0].split(" ");
2336        var eventData = args[1];
2337        for (var i = 0; i < events.length; i += 1) {
2338            var event = events[i];
2339            for (var j = 0; j < this.length; j += 1) {
2340                var el = this[j];
2341                if (window.CustomEvent) {
2342                    var evt = new window.CustomEvent(event, {detail: eventData, bubbles: true, cancelable: true});
2343                    el.dom7EventData = args.filter(function (data, dataIndex) {
2344                        return dataIndex > 0
2345                    });
2346                    el.dispatchEvent(evt);
2347                    el.dom7EventData = [];
2348                    delete el.dom7EventData
2349                }
2350            }
2351        }
2352        return this
2353    }
2354
2355    function transitionEnd(callback) {
2356        var dom = this;
2357
2358        function fireCallBack(e) {
2359            if (e.target !== this) {
2360                return
2361            }
2362            callback.call(this, e);
2363            dom.off("transitionend", fireCallBack)
2364        }
2365
2366        if (callback) {
2367            dom.on("transitionend", fireCallBack)
2368        }
2369        return this
2370    }
2371
2372    function outerWidth(includeMargins) {
2373        if (this.length > 0) {
2374            if (includeMargins) {
2375                var _styles = this.styles();
2376                return this[0].offsetWidth + parseFloat(_styles.getPropertyValue("margin-right")) + parseFloat(_styles.getPropertyValue("margin-left"))
2377            }
2378            return this[0].offsetWidth
2379        }
2380        return null
2381    }
2382
2383    function outerHeight(includeMargins) {
2384        if (this.length > 0) {
2385            if (includeMargins) {
2386                var _styles2 = this.styles();
2387                return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue("margin-top")) + parseFloat(_styles2.getPropertyValue("margin-bottom"))
2388            }
2389            return this[0].offsetHeight
2390        }
2391        return null
2392    }
2393
2394    function offset() {
2395        if (this.length > 0) {
2396            var window = getWindow();
2397            var document = getDocument();
2398            var el = this[0];
2399            var box = el.getBoundingClientRect();
2400            var body = document.body;
2401            var clientTop = el.clientTop || body.clientTop || 0;
2402            var clientLeft = el.clientLeft || body.clientLeft || 0;
2403            var scrollTop = el === window ? window.scrollY : el.scrollTop;
2404            var scrollLeft = el === window ? window.scrollX : el.scrollLeft;
2405            return {top: box.top + scrollTop - clientTop, left: box.left + scrollLeft - clientLeft}
2406        }
2407        return null
2408    }
2409
2410    function styles() {
2411        var window = getWindow();
2412        if (this[0]) {
2413            return window.getComputedStyle(this[0], null)
2414        }
2415        return {}
2416    }
2417
2418    function css(props, value) {
2419        var window = getWindow();
2420        var i;
2421        if (arguments.length === 1) {
2422            if (typeof props === "string") {
2423                if (this[0]) {
2424                    return window.getComputedStyle(this[0], null).getPropertyValue(props)
2425                }
2426            } else {
2427                for (i = 0; i < this.length; i += 1) {
2428                    for (var _prop in props) {
2429                        this[i].style[_prop] = props[_prop]
2430                    }
2431                }
2432                return this
2433            }
2434        }
2435        if (arguments.length === 2 && typeof props === "string") {
2436            for (i = 0; i < this.length; i += 1) {
2437                this[i].style[props] = value
2438            }
2439            return this
2440        }
2441        return this
2442    }
2443
2444    function each(callback) {
2445        if (!callback) {
2446            return this
2447        }
2448        this.forEach(function (el, index) {
2449            callback.apply(el, [el, index])
2450        });
2451        return this
2452    }
2453
2454    function filter(callback) {
2455        var result = arrayFilter(this, callback);
2456        return $(result)
2457    }
2458
2459    function html(html) {
2460        if (typeof html === "undefined") {
2461            return this[0] ? this[0].innerHTML : null
2462        }
2463        for (var i = 0; i < this.length; i += 1) {
2464            this[i].innerHTML = html
2465        }
2466        return this
2467    }
2468
2469    function text(text) {
2470        if (typeof text === "undefined") {
2471            return this[0] ? this[0].textContent.trim() : null
2472        }
2473        for (var i = 0; i < this.length; i += 1) {
2474            this[i].textContent = text
2475        }
2476        return this
2477    }
2478
2479    function is(selector) {
2480        var window = getWindow();
2481        var document = getDocument();
2482        var el = this[0];
2483        var compareWith;
2484        var i;
2485        if (!el || typeof selector === "undefined") {
2486            return false
2487        }
2488        if (typeof selector === "string") {
2489            if (el.matches) {
2490                return el.matches(selector)
2491            }
2492            if (el.webkitMatchesSelector) {
2493                return el.webkitMatchesSelector(selector)
2494            }
2495            if (el.msMatchesSelector) {
2496                return el.msMatchesSelector(selector)
2497            }
2498            compareWith = $(selector);
2499            for (i = 0; i < compareWith.length; i += 1) {
2500                if (compareWith[i] === el) {
2501                    return true
2502                }
2503            }
2504            return false
2505        }
2506        if (selector === document) {
2507            return el === document
2508        }
2509        if (selector === window) {
2510            return el === window
2511        }
2512        if (selector.nodeType || selector instanceof Dom7) {
2513            compareWith = selector.nodeType ? [selector] : selector;
2514            for (i = 0; i < compareWith.length; i += 1) {
2515                if (compareWith[i] === el) {
2516                    return true
2517                }
2518            }
2519            return false
2520        }
2521        return false
2522    }
2523
2524    function index() {
2525        var child = this[0];
2526        var i;
2527        if (child) {
2528            i = 0;
2529            while ((child = child.previousSibling) !== null) {
2530                if (child.nodeType === 1) {
2531                    i += 1
2532                }
2533            }
2534            return i
2535        }
2536        return undefined
2537    }
2538
2539    function eq(index) {
2540        if (typeof index === "undefined") {
2541            return this
2542        }
2543        var length = this.length;
2544        if (index > length - 1) {
2545            return $([])
2546        }
2547        if (index < 0) {
2548            var returnIndex = length + index;
2549            if (returnIndex < 0) {
2550                return $([])
2551            }
2552            return $([this[returnIndex]])
2553        }
2554        return $([this[index]])
2555    }
2556
2557    function append() {
2558        var newChild;
2559        var document = getDocument();
2560        for (var k = 0; k < arguments.length; k += 1) {
2561            newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];
2562            for (var i = 0; i < this.length; i += 1) {
2563                if (typeof newChild === "string") {
2564                    var tempDiv = document.createElement("div");
2565                    tempDiv.innerHTML = newChild;
2566                    while (tempDiv.firstChild) {
2567                        this[i].appendChild(tempDiv.firstChild)
2568                    }
2569                } else {
2570                    if (newChild instanceof Dom7) {
2571                        for (var j = 0; j < newChild.length; j += 1) {
2572                            this[i].appendChild(newChild[j])
2573                        }
2574                    } else {
2575                        this[i].appendChild(newChild)
2576                    }
2577                }
2578            }
2579        }
2580        return this
2581    }
2582
2583    function prepend(newChild) {
2584        var document = getDocument();
2585        var i;
2586        var j;
2587        for (i = 0; i < this.length; i += 1) {
2588            if (typeof newChild === "string") {
2589                var tempDiv = document.createElement("div");
2590                tempDiv.innerHTML = newChild;
2591                for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {
2592                    this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0])
2593                }
2594            } else {
2595                if (newChild instanceof Dom7) {
2596                    for (j = 0; j < newChild.length; j += 1) {
2597                        this[i].insertBefore(newChild[j], this[i].childNodes[0])
2598                    }
2599                } else {
2600                    this[i].insertBefore(newChild, this[i].childNodes[0])
2601                }
2602            }
2603        }
2604        return this
2605    }
2606
2607    function next(selector) {
2608        if (this.length > 0) {
2609            if (selector) {
2610                if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {
2611                    return $([this[0].nextElementSibling])
2612                }
2613                return $([])
2614            }
2615            if (this[0].nextElementSibling) {
2616                return $([this[0].nextElementSibling])
2617            }
2618            return $([])
2619        }
2620        return $([])
2621    }
2622
2623    function nextAll(selector) {
2624        var nextEls = [];
2625        var el = this[0];
2626        if (!el) {
2627            return $([])
2628        }
2629        while (el.nextElementSibling) {
2630            var _next = el.nextElementSibling;
2631            if (selector) {
2632                if ($(_next).is(selector)) {
2633                    nextEls.push(_next)
2634                }
2635            } else {
2636                nextEls.push(_next)
2637            }
2638            el = _next
2639        }
2640        return $(nextEls)
2641    }
2642
2643    function prev(selector) {
2644        if (this.length > 0) {
2645            var el = this[0];
2646            if (selector) {
2647                if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {
2648                    return $([el.previousElementSibling])
2649                }
2650                return $([])
2651            }
2652            if (el.previousElementSibling) {
2653                return $([el.previousElementSibling])
2654            }
2655            return $([])
2656        }
2657        return $([])
2658    }
2659
2660    function prevAll(selector) {
2661        var prevEls = [];
2662        var el = this[0];
2663        if (!el) {
2664            return $([])
2665        }
2666        while (el.previousElementSibling) {
2667            var _prev = el.previousElementSibling;
2668            if (selector) {
2669                if ($(_prev).is(selector)) {
2670                    prevEls.push(_prev)
2671                }
2672            } else {
2673                prevEls.push(_prev)
2674            }
2675            el = _prev
2676        }
2677        return $(prevEls)
2678    }
2679
2680    function parent(selector) {
2681        var parents = [];
2682        for (var i = 0; i < this.length; i += 1) {
2683            if (this[i].parentNode !== null) {
2684                if (selector) {
2685                    if ($(this[i].parentNode).is(selector)) {
2686                        parents.push(this[i].parentNode)
2687                    }
2688                } else {
2689                    parents.push(this[i].parentNode)
2690                }
2691            }
2692        }
2693        return $(parents)
2694    }
2695
2696    function parents(selector) {
2697        var parents = [];
2698        for (var i = 0; i < this.length; i += 1) {
2699            var _parent = this[i].parentNode;
2700            while (_parent) {
2701                if (selector) {
2702                    if ($(_parent).is(selector)) {
2703                        parents.push(_parent)
2704                    }
2705                } else {
2706                    parents.push(_parent)
2707                }
2708                _parent = _parent.parentNode
2709            }
2710        }
2711        return $(parents)
2712    }
2713
2714    function closest(selector) {
2715        var closest = this;
2716        if (typeof selector === "undefined") {
2717            return $([])
2718        }
2719        if (!closest.is(selector)) {
2720            closest = closest.parents(selector).eq(0)
2721        }
2722        return closest
2723    }
2724
2725    function find(selector) {
2726        var foundElements = [];
2727        for (var i = 0; i < this.length; i += 1) {
2728            var found = this[i].querySelectorAll(selector);
2729            for (var j = 0; j < found.length; j += 1) {
2730                foundElements.push(found[j])
2731            }
2732        }
2733        return $(foundElements)
2734    }
2735
2736    function children(selector) {
2737        var children = [];
2738        for (var i = 0; i < this.length; i += 1) {
2739            var childNodes = this[i].children;
2740            for (var j = 0; j < childNodes.length; j += 1) {
2741                if (!selector || $(childNodes[j]).is(selector)) {
2742                    children.push(childNodes[j])
2743                }
2744            }
2745        }
2746        return $(children)
2747    }
2748
2749    function remove() {
2750        for (var i = 0; i < this.length; i += 1) {
2751            if (this[i].parentNode) {
2752                this[i].parentNode.removeChild(this[i])
2753            }
2754        }
2755        return this
2756    }
2757
2758    var Methods = {
2759        addClass: addClass,
2760        removeClass: removeClass,
2761        hasClass: hasClass,
2762        toggleClass: toggleClass,
2763        attr: attr,
2764        removeAttr: removeAttr,
2765        transform: transform,
2766        transition: transition,
2767        on: on,
2768        off: off,
2769        trigger: trigger,
2770        transitionEnd: transitionEnd,
2771        outerWidth: outerWidth,
2772        outerHeight: outerHeight,
2773        styles: styles,
2774        offset: offset,
2775        css: css,
2776        each: each,
2777        html: html,
2778        text: text,
2779        is: is,
2780        index: index,
2781        eq: eq,
2782        append: append,
2783        prepend: prepend,
2784        next: next,
2785        nextAll: nextAll,
2786        prev: prev,
2787        prevAll: prevAll,
2788        parent: parent,
2789        parents: parents,
2790        closest: closest,
2791        find: find,
2792        children: children,
2793        filter: filter,
2794        remove: remove
2795    };
2796    Object.keys(Methods).forEach(function (methodName) {
2797        $.fn[methodName] = Methods[methodName]
2798    });
2799
2800    function deleteProps(obj) {
2801        var object = obj;
2802        Object.keys(object).forEach(function (key) {
2803            try {
2804                object[key] = null
2805            } catch (e) {
2806            }
2807            try {
2808                delete object[key]
2809            } catch (e) {
2810            }
2811        })
2812    }
2813
2814    function nextTick(callback, delay) {
2815        if (delay === void 0) {
2816            delay = 0
2817        }
2818        return setTimeout(callback, delay)
2819    }
2820
2821    function now() {
2822        return eval("Date.now()")
2823    }
2824
2825    function getTranslate(el, axis) {
2826        if (axis === void 0) {
2827            axis = "x"
2828        }
2829        var window = getWindow();
2830        var matrix;
2831        var curTransform;
2832        var transformMatrix;
2833        var curStyle = window.getComputedStyle(el, null);
2834        if (window.WebKitCSSMatrix) {
2835            curTransform = curStyle.transform || curStyle.webkitTransform;
2836            if (curTransform.split(",").length > 6) {
2837                curTransform = curTransform.split(", ").map(function (a) {
2838                    return a.replace(",", ".")
2839                }).join(", ")
2840            }
2841            transformMatrix = new window.WebKitCSSMatrix(curTransform === "none" ? "" : curTransform)
2842        } else {
2843            transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue("transform").replace("translate(", "matrix(1, 0, 0, 1,");
2844            matrix = transformMatrix.toString().split(",")
2845        }
2846        if (axis === "x") {
2847            if (window.WebKitCSSMatrix) {
2848                curTransform = transformMatrix.m41
2849            } else {
2850                if (matrix.length === 16) {
2851                    curTransform = parseFloat(matrix[12])
2852                } else {
2853                    curTransform = parseFloat(matrix[4])
2854                }
2855            }
2856        }
2857        if (axis === "y") {
2858            if (window.WebKitCSSMatrix) {
2859                curTransform = transformMatrix.m42
2860            } else {
2861                if (matrix.length === 16) {
2862                    curTransform = parseFloat(matrix[13])
2863                } else {
2864                    curTransform = parseFloat(matrix[5])
2865                }
2866            }
2867        }
2868        return curTransform || 0
2869    }
2870
2871    function isObject$1(o) {
2872        return typeof o === "object" && o !== null && o.constructor && o.constructor === Object
2873    }
2874
2875    function extend$1() {
2876        var to = Object(arguments.length <= 0 ? undefined : arguments[0]);
2877        for (var i = 1; i < arguments.length; i += 1) {
2878            var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];
2879            if (nextSource !== undefined && nextSource !== null) {
2880                var keysArray = Object.keys(Object(nextSource));
2881                for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
2882                    var nextKey = keysArray[nextIndex];
2883                    var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
2884                    if (desc !== undefined && desc.enumerable) {
2885                        if (isObject$1(to[nextKey]) && isObject$1(nextSource[nextKey])) {
2886                            extend$1(to[nextKey], nextSource[nextKey])
2887                        } else {
2888                            if (!isObject$1(to[nextKey]) && isObject$1(nextSource[nextKey])) {
2889                                to[nextKey] = {};
2890                                extend$1(to[nextKey], nextSource[nextKey])
2891                            } else {
2892                                to[nextKey] = nextSource[nextKey]
2893                            }
2894                        }
2895                    }
2896                }
2897            }
2898        }
2899        return to
2900    }
2901
2902    function bindModuleMethods(instance, obj) {
2903        Object.keys(obj).forEach(function (key) {
2904            if (isObject$1(obj[key])) {
2905                Object.keys(obj[key]).forEach(function (subKey) {
2906                    if (typeof obj[key][subKey] === "function") {
2907                        obj[key][subKey] = obj[key][subKey].bind(instance)
2908                    }
2909                })
2910            }
2911            instance[key] = obj[key]
2912        })
2913    }
2914
2915    var support;
2916
2917    function calcSupport() {
2918        var window = getWindow();
2919        var document = getDocument();
2920        return {
2921            touch: !!("ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch),
2922            pointerEvents: !!window.PointerEvent && "maxTouchPoints" in window.navigator && window.navigator.maxTouchPoints >= 0,
2923            observer: function checkObserver() {
2924                return "MutationObserver" in window || "WebkitMutationObserver" in window
2925            }(),
2926            passiveListener: function checkPassiveListener() {
2927                var supportsPassive = false;
2928                try {
2929                    var opts = Object.defineProperty({}, "passive", {
2930                        get: function get() {
2931                            supportsPassive = true
2932                        }
2933                    });
2934                    window.addEventListener("testPassiveListener", null, opts)
2935                } catch (e) {
2936                }
2937                return supportsPassive
2938            }(),
2939            gestures: function checkGestures() {
2940                return "ongesturestart" in window
2941            }()
2942        }
2943    }
2944
2945    function getSupport() {
2946        if (!support) {
2947            support = calcSupport()
2948        }
2949        return support
2950    }
2951
2952    var device;
2953
2954    function calcDevice(_temp) {
2955        var _ref = _temp === void 0 ? {} : _temp, userAgent = _ref.userAgent;
2956        var support = getSupport();
2957        var window = getWindow();
2958        var platform = window.navigator.platform;
2959        var ua = userAgent || window.navigator.userAgent;
2960        var device = {ios: false, android: false};
2961        var screenWidth = window.screen.width;
2962        var screenHeight = window.screen.height;
2963        var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
2964        var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
2965        var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
2966        var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
2967        var windows = platform === "Win32";
2968        var macos = platform === "MacIntel";
2969        var iPadScreens = ["1024x1366", "1366x1024", "834x1194", "1194x834", "834x1112", "1112x834", "768x1024", "1024x768", "820x1180", "1180x820", "810x1080", "1080x810"];
2970        if (!ipad && macos && support.touch && iPadScreens.indexOf(screenWidth + "x" + screenHeight) >= 0) {
2971            ipad = ua.match(/(Version)\/([\d.]+)/);
2972            if (!ipad) {
2973                ipad = [0, 1, "13_0_0"]
2974            }
2975            macos = false
2976        }
2977        if (android && !windows) {
2978            device.os = "android";
2979            device.android = true
2980        }
2981        if (ipad || iphone || ipod) {
2982            device.os = "ios";
2983            device.ios = true
2984        }
2985        return device
2986    }
2987
2988    function getDevice(overrides) {
2989        if (overrides === void 0) {
2990            overrides = {}
2991        }
2992        if (!device) {
2993            device = calcDevice(overrides)
2994        }
2995        return device
2996    }
2997
2998    var browser;
2999
3000    function calcBrowser() {
3001        var window = getWindow();
3002
3003        function isSafari() {
3004            var ua = window.navigator.userAgent.toLowerCase();
3005            return ua.indexOf("safari") >= 0 && ua.indexOf("chrome") < 0 && ua.indexOf("android") < 0
3006        }
3007
3008        return {
3009            isEdge: !!window.navigator.userAgent.match(/Edge/g),
3010            isSafari: isSafari(),
3011            isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)
3012        }
3013    }
3014
3015    function getBrowser() {
3016        if (!browser) {
3017            browser = calcBrowser()
3018        }
3019        return browser
3020    }
3021
3022    var Resize = {
3023        name: "resize", create: function create() {
3024            var swiper = this;
3025            extend$1(swiper, {
3026                resize: {
3027                    resizeHandler: function resizeHandler() {
3028                        if (!swiper || swiper.destroyed || !swiper.initialized) {
3029                            return
3030                        }
3031                        swiper.emit("beforeResize");
3032                        swiper.emit("resize")
3033                    }, orientationChangeHandler: function orientationChangeHandler() {
3034                        if (!swiper || swiper.destroyed || !swiper.initialized) {
3035                            return
3036                        }
3037                        swiper.emit("orientationchange")
3038                    }
3039                }
3040            })
3041        }, on: {
3042            init: function init(swiper) {
3043                var window = getWindow();
3044                window.addEventListener("resize", swiper.resize.resizeHandler);
3045                window.addEventListener("orientationchange", swiper.resize.orientationChangeHandler)
3046            }, destroy: function destroy(swiper) {
3047                var window = getWindow();
3048                window.removeEventListener("resize", swiper.resize.resizeHandler);
3049                window.removeEventListener("orientationchange", swiper.resize.orientationChangeHandler)
3050            }
3051        }
3052    };
3053    var Observer = {
3054        attach: function attach(target, options) {
3055            if (options === void 0) {
3056                options = {}
3057            }
3058            var window = getWindow();
3059            var swiper = this;
3060            var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
3061            var observer = new ObserverFunc(function (mutations) {
3062                if (mutations.length === 1) {
3063                    swiper.emit("observerUpdate", mutations[0]);
3064                    return
3065                }
3066                var observerUpdate = function observerUpdate() {
3067                    swiper.emit("observerUpdate", mutations[0])
3068                };
3069                if (window.requestAnimationFrame) {
3070                    window.requestAnimationFrame(observerUpdate)
3071                } else {
3072                    window.setTimeout(observerUpdate, 0)
3073                }
3074            });
3075            observer.observe(target, {
3076                attributes: typeof options.attributes === "undefined" ? true : options.attributes,
3077                childList: typeof options.childList === "undefined" ? true : options.childList,
3078                characterData: typeof options.characterData === "undefined" ? true : options.characterData
3079            });
3080            swiper.observer.observers.push(observer)
3081        }
3081, init: function init() {
3082            var swiper = this;
3083            if (!swiper.support.observer || !swiper.params.observer) {
3084                return
3085            }
3086            if (swiper.params.observeParents) {
3087                var containerParents = swiper.$el.parents();
3088                for (var i = 0; i < containerParents.length; i += 1) {
3089                    swiper.observer.attach(containerParents[i])
3090                }
3091            }
3092            swiper.observer.attach(swiper.$el[0], {childList: swiper.params.observeSlideChildren});
3093            swiper.observer.attach(swiper.$wrapperEl[0], {attributes: false})
3094        }, destroy: function destroy() {
3095            var swiper = this;
3096            swiper.observer.observers.forEach(function (observer) {
3097                observer.disconnect()
3098            });
3099            swiper.observer.observers = []
3100        }
3101    };
3102    var Observer$1 = {
3103        name: "observer",
3104        params: {observer: false, observeParents: false, observeSlideChildren: false},
3105        create: function create() {
3106            var swiper = this;
3107            bindModuleMethods(swiper, {observer: _extends(_extends({}, Observer), {}, {observers: []})})
3108        },
3109        on: {
3110            init: function init(swiper) {
3111                swiper.observer.init()
3112            }, destroy: function destroy(swiper) {
3113                swiper.observer.destroy()
3114            }
3115        }
3116    };
3117    var modular = {
3118        useParams: function useParams(instanceParams) {
3119            var instance = this;
3120            if (!instance.modules) {
3121                return
3122            }
3123            Object.keys(instance.modules).forEach(function (moduleName) {
3124                var module = instance.modules[moduleName];
3125                if (module.params) {
3126                    extend$1(instanceParams, module.params)
3127                }
3128            })
3129        }, useModules: function useModules(modulesParams) {
3130            if (modulesParams === void 0) {
3131                modulesParams = {}
3132            }
3133            var instance = this;
3134            if (!instance.modules) {
3135                return
3136            }
3137            Object.keys(instance.modules).forEach(function (moduleName) {
3138                var module = instance.modules[moduleName];
3139                var moduleParams = modulesParams[moduleName] || {};
3140                if (module.on && instance.on) {
3141                    Object.keys(module.on).forEach(function (moduleEventName) {
3142                        instance.on(moduleEventName, module.on[moduleEventName])
3143                    })
3144                }
3145                if (module.create) {
3146                    module.create.bind(instance)(moduleParams)
3147                }
3148            })
3149        }
3150    };
3151    var eventsEmitter = {
3152        on: function on(events, handler, priority) {
3153            var self = this;
3154            if (typeof handler !== "function") {
3155                return self
3156            }
3157            var method = priority ? "unshift" : "push";
3158            events.split(" ").forEach(function (event) {
3159                if (!self.eventsListeners[event]) {
3160                    self.eventsListeners[event] = []
3161                }
3162                self.eventsListeners[event][method](handler)
3163            });
3164            return self
3165        }, once: function once(events, handler, priority) {
3166            var self = this;
3167            if (typeof handler !== "function") {
3168                return self
3169            }
3170
3171            function onceHandler() {
3172                self.off(events, onceHandler);
3173                if (onceHandler.__emitterProxy) {
3174                    delete onceHandler.__emitterProxy
3175                }
3176                for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
3177                    args[_key] = arguments[_key]
3178                }
3179                handler.apply(self, args)
3180            }
3181
3182            onceHandler.__emitterProxy = handler;
3183            return self.on(events, onceHandler, priority)
3184        }, onAny: function onAny(handler, priority) {
3185            var self = this;
3186            if (typeof handler !== "function") {
3187                return self
3188            }
3189            var method = priority ? "unshift" : "push";
3190            if (self.eventsAnyListeners.indexOf(handler) < 0) {
3191                self.eventsAnyListeners[method](handler)
3192            }
3193            return self
3194        }, offAny: function offAny(handler) {
3195            var self = this;
3196            if (!self.eventsAnyListeners) {
3197                return self
3198            }
3199            var index = self.eventsAnyListeners.indexOf(handler);
3200            if (index >= 0) {
3201                self.eventsAnyListeners.splice(index, 1)
3202            }
3203            return self
3204        }, off: function off(events, handler) {
3205            var self = this;
3206            if (!self.eventsListeners) {
3207                return self
3208            }
3209            events.split(" ").forEach(function (event) {
3210                if (typeof handler === "undefined") {
3211                    self.eventsListeners[event] = []
3212                } else {
3213                    if (self.eventsListeners[event]) {
3214                        self.eventsListeners[event].forEach(function (eventHandler, index) {
3215                            if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {
3216                                self.eventsListeners[event].splice(index, 1)
3217                            }
3218                        })
3219                    }
3220                }
3221            });
3222            return self
3223        }, emit: function emit() {
3224            var self = this;
3225            if (!self.eventsListeners) {
3226                return self
3227            }
3228            var events;
3229            var data;
3230            var context;
3231            for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
3232                args[_key2] = arguments[_key2]
3233            }
3234            if (typeof args[0] === "string" || Array.isArray(args[0])) {
3235                events = args[0];
3236                data = args.slice(1, args.length);
3237                context = self
3238            } else {
3239                events = args[0].events;
3240                data = args[0].data;
3241                context = args[0].context || self
3242            }
3243            data.unshift(context);
3244            var eventsArray = Array.isArray(events) ? events : events.split(" ");
3245            eventsArray.forEach(function (event) {
3246                if (self.eventsAnyListeners && self.eventsAnyListeners.length) {
3247                    self.eventsAnyListeners.forEach(function (eventHandler) {
3248                        eventHandler.apply(context, [event].concat(data))
3249                    })
3250                }
3251                if (self.eventsListeners && self.eventsListeners[event]) {
3252                    var handlers = [];
3253                    self.eventsListeners[event].forEach(function (eventHandler) {
3254                        handlers.push(eventHandler)
3255                    });
3256                    handlers.forEach(function (eventHandler) {
3257                        eventHandler.apply(context, data)
3258                    })
3259                }
3260            });
3261            return self
3262        }
3263    };
3264
3265    function updateSize() {
3266        var swiper = this;
3267        var width;
3268        var height;
3269        var $el = swiper.$el;
3270        if (typeof swiper.params.width !== "undefined" && swiper.params.width !== null) {
3271            width = swiper.params.width
3272        } else {
3273            width = $el[0].clientWidth
3274        }
3275        if (typeof swiper.params.height !== "undefined" && swiper.params.height !== null) {
3276            height = swiper.params.height
3277        } else {
3278            height = $el[0].clientHeight
3279        }
3280        if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {
3281            return
3282        }
3283        width = width - parseInt($el.css("padding-left") || 0, 10) - parseInt($el.css("padding-right") || 0, 10);
3284        height = height - parseInt($el.css("padding-top") || 0, 10) - parseInt($el.css("padding-bottom") || 0, 10);
3285        if (Number.isNaN(width)) {
3286            width = 0
3287        }
3288        if (Number.isNaN(height)) {
3289            height = 0
3290        }
3291        extend$1(swiper, {width: width, height: height, size: swiper.isHorizontal() ? width : height})
3292    }
3293
3294    function updateSlides() {
3295        var swiper = this;
3296        var window = getWindow();
3297        var params = swiper.params;
3298        var $wrapperEl = swiper.$wrapperEl, swiperSize = swiper.size, rtl = swiper.rtlTranslate,
3299            wrongRTL = swiper.wrongRTL;
3300        var isVirtual = swiper.virtual && params.virtual.enabled;
3301        var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
3302        var slides = $wrapperEl.children("." + swiper.params.slideClass);
3303        var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
3304        var snapGrid = [];
3305        var slidesGrid = [];
3306        var slidesSizesGrid = [];
3307
3308        function slidesForMargin(slideEl, slideIndex) {
3309            if (!params.cssMode) {
3310                return true
3311            }
3312            if (slideIndex === slides.length - 1) {
3313                return false
3314            }
3315            return true
3316        }
3317
3318        var offsetBefore = params.slidesOffsetBefore;
3319        if (typeof offsetBefore === "function") {
3320            offsetBefore = params.slidesOffsetBefore.call(swiper)
3321        }
3322        var offsetAfter = params.slidesOffsetAfter;
3323        if (typeof offsetAfter === "function") {
3324            offsetAfter = params.slidesOffsetAfter.call(swiper)
3325        }
3326        var previousSnapGridLength = swiper.snapGrid.length;
3327        var previousSlidesGridLength = swiper.snapGrid.length;
3328        var spaceBetween = params.spaceBetween;
3329        var slidePosition = -offsetBefore;
3330        var prevSlideSize = 0;
3331        var index = 0;
3332        if (typeof swiperSize === "undefined") {
3333            return
3334        }
3335        if (typeof spaceBetween === "string" && spaceBetween.indexOf("%") >= 0) {
3336            spaceBetween = parseFloat(spaceBetween.replace("%", "")) / 100 * swiperSize
3337        }
3338        swiper.virtualSize = -spaceBetween;
3339        if (rtl) {
3340            slides.css({marginLeft: "", marginTop: ""})
3341        } else {
3342            slides.css({marginRight: "", marginBottom: ""})
3343        }
3344        var slidesNumberEvenToRows;
3345        if (params.slidesPerColumn > 1) {
3346            if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
3347                slidesNumberEvenToRows = slidesLength
3348            } else {
3349                slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn
3350            }
3351            if (params.slidesPerView !== "auto" && params.slidesPerColumnFill === "row") {
3352                slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn)
3353            }
3354        }
3355        var slideSize;
3356        var slidesPerColumn = params.slidesPerColumn;
3357        var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
3358        var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);
3359        for (var i = 0; i < slidesLength; i += 1) {
3360            slideSize = 0;
3361            var slide = slides.eq(i);
3362            if (params.slidesPerColumn > 1) {
3363                var newSlideOrderIndex = void 0;
3364                var column = void 0;
3365                var row = void 0;
3366                if (params.slidesPerColumnFill === "row" && params.slidesPerGroup > 1) {
3367                    var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));
3368                    var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;
3369                    var columnsInGroup = groupIndex === 0 ? params.slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);
3370                    row = Math.floor(slideIndexInGroup / columnsInGroup);
3371                    column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup;
3372                    newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;
3373                    slide.css({
3374                        "-webkit-box-ordinal-group": newSlideOrderIndex,
3375                        "-moz-box-ordinal-group": newSlideOrderIndex,
3376                        "-ms-flex-order": newSlideOrderIndex,
3377                        "-webkit-order": newSlideOrderIndex,
3378                        order: newSlideOrderIndex
3379                    })
3380                } else {
3381                    if (params.slidesPerColumnFill === "column") {
3382                        column = Math.floor(i / slidesPerColumn);
3383                        row = i - column * slidesPerColumn;
3384                        if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) {
3385                            row += 1;
3386                            if (row >= slidesPerColumn) {
3387                                row = 0;
3388                                column += 1
3389                            }
3390                        }
3391                    } else {
3392                        row = Math.floor(i / slidesPerRow);
3393                        column = i - row * slidesPerRow
3394                    }
3395                }
3396                slide.css("margin-" + (swiper.isHorizontal() ? "top" : "left"), row !== 0 && params.spaceBetween && params.spaceBetween + "px")
3397            }
3398            if (slide.css("display") === "none") {
3399                continue
3400            }
3401            if (params.slidesPerView === "auto") {
3402                var slideStyles = window.getComputedStyle(slide[0], null);
3403                var currentTransform = slide[0].style.transform;
3404                var currentWebKitTransform = slide[0].style.webkitTransform;
3405                if (currentTransform) {
3406                    slide[0].style.transform = "none"
3407                }
3408                if (currentWebKitTransform) {
3409                    slide[0].style.webkitTransform = "none"
3410                }
3411                if (params.roundLengths) {
3412                    slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true)
3413                } else {
3414                    if (swiper.isHorizontal()) {
3415                        var width = parseFloat(slideStyles.getPropertyValue("width") || 0);
3416                        var paddingLeft = parseFloat(slideStyles.getPropertyValue("padding-left") || 0);
3417                        var paddingRight = parseFloat(slideStyles.getPropertyValue("padding-right") || 0);
3418                        var marginLeft = parseFloat(slideStyles.getPropertyValue("margin-left") || 0);
3419                        var marginRight = parseFloat(slideStyles.getPropertyValue("margin-right") || 0);
3420                        var boxSizing = slideStyles.getPropertyValue("box-sizing");
3421                        if (boxSizing && boxSizing === "border-box") {
3422                            slideSize = width + marginLeft + marginRight
3423                        } else {
3424                            var _slide$ = slide[0], clientWidth = _slide$.clientWidth,
3425                                offsetWidth = _slide$.offsetWidth;
3426                            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth)
3427                        }
3428                    } else {
3429                        var height = parseFloat(slideStyles.getPropertyValue("height") || 0);
3430                        var paddingTop = parseFloat(slideStyles.getPropertyValue("padding-top") || 0);
3431                        var paddingBottom = parseFloat(slideStyles.getPropertyValue("padding-bottom") || 0);
3432                        var marginTop = parseFloat(slideStyles.getPropertyValue("margin-top") || 0);
3433                        var marginBottom = parseFloat(slideStyles.getPropertyValue("margin-bottom") || 0);
3434                        var _boxSizing = slideStyles.getPropertyValue("box-sizing");
3435                        if (_boxSizing && _boxSizing === "border-box") {
3436                            slideSize = height + marginTop + marginBottom
3437                        } else {
3438                            var _slide$2 = slide[0], clientHeight = _slide$2.clientHeight,
3439                                offsetHeight = _slide$2.offsetHeight;
3440                            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom + (offsetHeight - clientHeight)
3441                        }
3442                    }
3443                }
3444                if (currentTransform) {
3445                    slide[0].style.transform = currentTransform
3446                }
3447                if (currentWebKitTransform) {
3448                    slide[0].style.webkitTransform = currentWebKitTransform
3449                }
3450                if (params.roundLengths) {
3451                    slideSize = Math.floor(slideSize)
3452                }
3453            } else {
3454                slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
3455                if (params.roundLengths) {
3456                    slideSize = Math.floor(slideSize)
3457                }
3458                if (slides[i]) {
3459                    if (swiper.isHorizontal()) {
3460                        slides[i].style.width = slideSize + "px"
3461                    } else {
3462                        slides[i].style.height = slideSize + "px"
3463                    }
3464                }
3465            }
3466            if (slides[i]) {
3467                slides[i].swiperSlideSize = slideSize
3468            }
3469            slidesSizesGrid.push(slideSize);
3470            if (params.centeredSlides) {
3471                slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
3472                if (prevSlideSize === 0 && i !== 0) {
3473                    slidePosition = slidePosition - swiperSize / 2 - spaceBetween
3474                }
3475                if (i === 0) {
3476                    slidePosition = slidePosition - swiperSize / 2 - spaceBetween
3477                }
3478                if (Math.abs(slidePosition) < 1 / 1000) {
3479                    slidePosition = 0
3480                }
3481                if (params.roundLengths) {
3482                    slidePosition = Math.floor(slidePosition)
3483                }
3484                if (index % params.slidesPerGroup === 0) {
3485                    snapGrid.push(slidePosition)
3486                }
3487                slidesGrid.push(slidePosition)
3488            } else {
3489                if (params.roundLengths) {
3490                    slidePosition = Math.floor(slidePosition)
3491                }
3492                if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) {
3493                    snapGrid.push(slidePosition)
3494                }
3495                slidesGrid.push(slidePosition);
3496                slidePosition = slidePosition + slideSize + spaceBetween
3497            }
3498            swiper.virtualSize += slideSize + spaceBetween;
3499            prevSlideSize = slideSize;
3500            index += 1
3501        }
3502        swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
3503        var newSlidesGrid;
3504        if (rtl && wrongRTL && (params.effect === "slide" || params.effect === "coverflow")) {
3505            $wrapperEl.css({width: swiper.virtualSize + params.spaceBetween + "px"})
3506        }
3507        if (params.setWrapperSize) {
3508            if (swiper.isHorizontal()) {
3509                $wrapperEl.css({width: swiper.virtualSize + params.spaceBetween + "px"})
3510            } else {
3511                $wrapperEl.css({height: swiper.virtualSize + params.spaceBetween + "px"})
3512            }
3513        }
3514        if (params.slidesPerColumn > 1) {
3515            swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumber
3515EvenToRows;
3516            swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
3517            if (swiper.isHorizontal()) {
3518                $wrapperEl.css({width: swiper.virtualSize + params.spaceBetween + "px"})
3519            } else {
3520                $wrapperEl.css({height: swiper.virtualSize + params.spaceBetween + "px"})
3521            }
3522            if (params.centeredSlides) {
3523                newSlidesGrid = [];
3524                for (var _i = 0; _i < snapGrid.length; _i += 1) {
3525                    var slidesGridItem = snapGrid[_i];
3526                    if (params.roundLengths) {
3527                        slidesGridItem = Math.floor(slidesGridItem)
3528                    }
3529                    if (snapGrid[_i] < swiper.virtualSize + snapGrid[0]) {
3530                        newSlidesGrid.push(slidesGridItem)
3531                    }
3532                }
3533                snapGrid = newSlidesGrid
3534            }
3535        }
3536        if (!params.centeredSlides) {
3537            newSlidesGrid = [];
3538            for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) {
3539                var _slidesGridItem = snapGrid[_i2];
3540                if (params.roundLengths) {
3541                    _slidesGridItem = Math.floor(_slidesGridItem)
3542                }
3543                if (snapGrid[_i2] <= swiper.virtualSize - swiperSize) {
3544                    newSlidesGrid.push(_slidesGridItem)
3545                }
3546            }
3547            snapGrid = newSlidesGrid;
3548            if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
3549                snapGrid.push(swiper.virtualSize - swiperSize)
3550            }
3551        }
3552        if (snapGrid.length === 0) {
3553            snapGrid = [0]
3554        }
3555        if (params.spaceBetween !== 0) {
3556            if (swiper.isHorizontal()) {
3557                if (rtl) {
3558                    slides.filter(slidesForMargin).css({marginLeft: spaceBetween + "px"})
3559                } else {
3560                    slides.filter(slidesForMargin).css({marginRight: spaceBetween + "px"})
3561                }
3562            } else {
3563                slides.filter(slidesForMargin).css({marginBottom: spaceBetween + "px"})
3564            }
3565        }
3566        if (params.centeredSlides && params.centeredSlidesBounds) {
3567            var allSlidesSize = 0;
3568            slidesSizesGrid.forEach(function (slideSizeValue) {
3569                allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0)
3570            });
3571            allSlidesSize -= params.spaceBetween;
3572            var maxSnap = allSlidesSize - swiperSize;
3573            snapGrid = snapGrid.map(function (snap) {
3574                if (snap < 0) {
3575                    return -offsetBefore
3576                }
3577                if (snap > maxSnap) {
3578                    return maxSnap + offsetAfter
3579                }
3580                return snap
3581            })
3582        }
3583        if (params.centerInsufficientSlides) {
3584            var _allSlidesSize = 0;
3585            slidesSizesGrid.forEach(function (slideSizeValue) {
3586                _allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0)
3587            });
3588            _allSlidesSize -= params.spaceBetween;
3589            if (_allSlidesSize < swiperSize) {
3590                var allSlidesOffset = (swiperSize - _allSlidesSize) / 2;
3591                snapGrid.forEach(function (snap, snapIndex) {
3592                    snapGrid[snapIndex] = snap - allSlidesOffset
3593                });
3594                slidesGrid.forEach(function (snap, snapIndex) {
3595                    slidesGrid[snapIndex] = snap + allSlidesOffset
3596                })
3597            }
3598        }
3599        extend$1(swiper, {
3600            slides: slides,
3601            snapGrid: snapGrid,
3602            slidesGrid: slidesGrid,
3603            slidesSizesGrid: slidesSizesGrid
3604        });
3605        if (slidesLength !== previousSlidesLength) {
3606            swiper.emit("slidesLengthChange")
3607        }
3608        if (snapGrid.length !== previousSnapGridLength) {
3609            if (swiper.params.watchOverflow) {
3610                swiper.checkOverflow()
3611            }
3612            swiper.emit("snapGridLengthChange")
3613        }
3614        if (slidesGrid.length !== previousSlidesGridLength) {
3615            swiper.emit("slidesGridLengthChange")
3616        }
3617        if (params.watchSlidesProgress || params.watchSlidesVisibility) {
3618            swiper.updateSlidesOffset()
3619        }
3620    }
3621
3622    function updateAutoHeight(speed) {
3623        var swiper = this;
3624        var activeSlides = [];
3625        var newHeight = 0;
3626        var i;
3627        if (typeof speed === "number") {
3628            swiper.setTransition(speed)
3629        } else {
3630            if (speed === true) {
3631                swiper.setTransition(swiper.params.speed)
3632            }
3633        }
3634        if (swiper.params.slidesPerView !== "auto" && swiper.params.slidesPerView > 1) {
3635            if (swiper.params.centeredSlides) {
3636                swiper.visibleSlides.each(function (slide) {
3637                    activeSlides.push(slide)
3638                })
3639            } else {
3640                for (i = 0;
3640 i < Math.ceil(swiper.params.slidesPerView); i += 1) {
3641                    var index = swiper.activeIndex + i;
3642                    if (index > swiper.slides.length) {
3643                        break
3644                    }
3645                    activeSlides.push(swiper.slides.eq(index)[0])
3646                }
3647            }
3648        } else {
3649            activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0])
3650        }
3651        for (i = 0; i < activeSlides.length; i += 1) {
3652            if (typeof activeSlides[i] !== "undefined") {
3653                var height = activeSlides[i].offsetHeight;
3654                newHeight = height > newHeight ? height : newHeight
3655            }
3656        }
3657        if (newHeight) {
3658            swiper.$wrapperEl.css("height", newHeight + "px")
3659        }
3660    }
3661
3662    function updateSlidesOffset() {
3663        var swiper = this;
3664        var slides = swiper.slides;
3665        for (var i = 0; i < slides.length; i += 1) {
3666            slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop
3667        }
3668    }
3669
3670    function updateSlidesProgress(translate) {
3671        if (translate === void 0) {
3672            translate = this && this.translate || 0
3673        }
3674        var swiper = this;
3675        var params = swiper.params;
3676        var slides = swiper.slides, rtl = swiper.rtlTranslate;
3677        if (slides.length === 0) {
3678            return
3679        }
3680        if (typeof slides[0].swiperSlideOffset === "undefined") {
3681            swiper.updateSlidesOffset()
3682        }
3683        var offsetCenter = -translate;
3684        if (rtl) {
3685            offsetCenter = translate
3686        }
3687        slides.removeClass(params.slideVisibleClass);
3688        swiper.visibleSlidesIndexes = [];
3689        swiper.visibleSlides = [];
3690        for (var i = 0; i < slides.length; i += 1) {
3691            var slide = slides[i];
3692            var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + params.spaceBetween);
3693            if (params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) {
3694                var slideBefore = -(offsetCenter - slide.swiperSlideOffset);
3695                var slideAfter = slideBefore + swiper.slidesSizesGrid[i];
3696                var isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;
3697                if (isVisible) {
3698                    swiper.visibleSlides.push(slide);
3699                    swiper.visibleSlidesIndexes.push(i);
3700                    slides.eq(i).addClass(params.slideVisibleClass)
3701                }
3702            }
3703            slide.progress = rtl ? -slideProgress : slideProgress
3704        }
3705        swiper.visibleSlides = $(swiper.visibleSlides)
3706    }
3707
3708    function updateProgress(translate) {
3709        var swiper = this;
3710        if (typeof translate === "undefined") {
3711            var multiplier = swiper.rtlTranslate ? -1 : 1;
3712            translate = swiper && swiper.translate && swiper.translate * multiplier || 0
3713        }
3714        var params = swiper.params;
3715        var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
3716        var progress = swiper.progress, isBeginning = swiper.isBeginning, isEnd = swiper.isEnd;
3717        var wasBeginning = isBeginning;
3718        var wasEnd = isEnd;
3719        if (translatesDiff === 0) {
3720            progress = 0;
3721            isBeginning = true;
3722            isEnd = true
3723        } else {
3724            progress = (translate - swiper.minTranslate()) / translatesDiff;
3725            isBeginning = progress <= 0;
3726            isEnd = progress >= 1
3727        }
3728        extend$1(swiper, {progress: progress, isBeginning: isBeginning, isEnd: isEnd});
3729        if (params.watchSlidesProgress || params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) {
3730            swiper.updateSlidesProgress(translate)
3731        }
3732        if (isBeginning && !wasBeginning) {
3733            swiper.emit("reachBeginning toEdge")
3734        }
3735        if (isEnd && !wasEnd) {
3736            swiper.emit("reachEnd toEdge")
3737        }
3738        if (wasBeginning && !isBeginning || wasEnd && !isEnd) {
3739            swiper.emit("fromEdge")
3740        }
3741        swiper.emit("progress", progress)
3742    }
3743
3744    function updateSlidesClasses() {
3745        var swiper = this;
3746        var slides = swiper.slides, params = swiper.params, $wrapperEl = swiper.$wrapperEl,
3747            activeIndex = swiper.activeIndex, realIndex = swiper.realIndex;
3748        var isVirtual = swiper.virtual && params.virtual.enabled;
3749        slides.removeClass(params.slideActiveClass + " " + params.slideNextClass + " " + params.slidePrevClass + " " + params.slideDuplicateActiveClass + " " + params.slideDuplicateNextClass + " " + params.slideDuplicatePrevClass);
3750        var activeSlide;
3751        if (isVirtual) {
3752            activeSlide = swiper.$wrapperEl.find("." + params.slideClass + '[data-swiper-slide-index="' + activeIndex + '"]')
3753        } else {
3754            activeSlide = slides.eq(activeIndex)
3755        }
3756        activeSlide.addClass(params.slideActiveClass);
3757        if (params.loop) {
3758            if (activeSlide.hasClass(params.slideDuplicateClass)) {
3759                $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ')[data-swiper-slide-index="' + realIndex + '"]').addClass(params.slideDuplicateActiveClass)
3760            } else {
3761                $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + '[data-swiper-slide-index="' + realIndex + '"]').addClass(params.slideDuplicateActiveClass)
3762            }
3763        }
3764        var nextSlide = activeSlide.nextAll("." + params.slideClass).eq(0).addClass(params.slideNextClass);
3765        if (params.loop && nextSlide.length === 0) {
3766            nextSlide = slides.eq(0);
3767            nextSlide.addClass(params.slideNextClass)
3768        }
3769        var prevSlide = activeSlide.prevAll("." + params.slideClass).eq(0).addClass(params.slidePrevClass);
3770        if (params.loop && prevSlide.length === 0) {
3771            prevSlide = slides.eq(-1);
3772            prevSlide.addClass(params.slidePrevClass)
3773        }
3774        if (params.loop) {
3775            if (nextSlide.hasClass(params.slideDuplicateClass)) {
3776                $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ')[data-swiper-slide-index="' + nextSlide.attr("data-swiper-slide-index") + '"]').addClass(params.slideDuplicateNextClass)
3777            } else {
3778                $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + '[data-swiper-slide-index="' + nextSlide.attr("data-swiper-slide-index") + '"]').addClass(params.slideDuplicateNextClass)
3779            }
3780            if (prevSlide.hasClass(params.slideDuplicateClass)) {
3781                $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ')[data-swiper-slide-index="' + prevSlide.attr("data-swiper-slide-index") + '"]').addClass(params.slideDuplicatePrevClass)
3782            } else {
3783                $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + '[data-swiper-slide-index="' + prevSlide.attr("data-swiper-slide-index") + '"]').addClass(params.slideDuplicatePrevClass)
3784            }
3785        }
3786        swiper.emitSlidesClasses()
3787    }
3788
3789    function updateActiveIndex(newActiveIndex) {
3790        var swiper = this;
3791        var translate = swiper.rtlTranslate ? swiper.translate : -swi
3791per.translate;
3792        var slidesGrid = swiper.slidesGrid, snapGrid = swiper.snapGrid, params = swiper.params,
3793            previousIndex = swiper.activeIndex, previousRealIndex = swiper.realIndex,
3794            previousSnapIndex = swiper.snapIndex;
3795        var activeIndex = newActiveIndex;
3796        var snapIndex;
3797        if (typeof activeIndex === "undefined") {
3798            for (var i = 0; i < slidesGrid.length; i += 1) {
3799                if (typeof slidesGrid[i + 1] !== "undefined") {
3800                    if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {
3801                        activeIndex = i
3802                    } else {
3803                        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
3804                            activeIndex = i + 1
3805                        }
3806                    }
3807                } else {
3808                    if (translate >= slidesGrid[i]) {
3809                        activeIndex = i
3810                    }
3811                }
3812            }
3813            if (params.normalizeSlideIndex) {
3814                if (activeIndex < 0 || typeof activeIndex === "undefined") {
3815                    activeIndex = 0
3816                }
3817            }
3818        }
3819        if (snapGrid.indexOf(translate) >= 0) {
3820            snapIndex = snapGrid.indexOf(translate)
3821        } else {
3822            var skip = Math.min(params.slidesPerGroupSkip, activeIndex);
3823            snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup)
3824        }
3825        if (snapIndex >= snapGrid.length) {
3826            snapIndex = snapGrid.length - 1
3827        }
3828        if (activeIndex === previousIndex) {
3829            if (snapIndex !== previousSnapIndex) {
3830                swiper.snapIndex = snapIndex;
3831                swiper.emit("snapIndexChange")
3832            }
3833            return
3834        }
3835        var realIndex = parseInt(swiper.slides.eq(activeIndex).attr("data-swiper-slide-index") || activeIndex, 10);
3836        extend$1(swiper, {
3837            snapIndex: snapIndex,
3838            realIndex: realIndex,
3839            previousIndex: previousIndex,
3840            activeIndex: activeIndex
3841        });
3842        swiper.emit("activeIndexChange");
3843        swiper.emit("snapIndexChange");
3844        if (previousRealIndex !== realIndex) {
3845            swiper.emit("realIndexChange")
3846        }
3847        if (swiper.initialized || swiper.params.runCallbacksOnInit) {
3848            swiper.emit("slideChange")
3849        }
3850    }
3851
3852    function updateClickedSlide(e) {
3853        var swiper = this;
3854        var params = swiper.params;
3855        var slide = $(e.target).closest("." + params.slideClass)[0];
3856        var slideFound = false;
3857        if (slide) {
3858            for (var i = 0; i < swiper.slides.length; i += 1) {
3859                if (swiper.slides[i] === slide) {
3860                    slideFound = true
3861                }
3862            }
3863        }
3864        if (slide && slideFound) {
3865            swiper.clickedSlide = slide;
3866            if (swiper.virtual && swiper.params.virtual.enabled) {
3867                swiper.clickedIndex = parseInt($(slide).attr("data-swiper-slide-index"), 10)
3868            } else {
3869                swiper.clickedIndex = $(slide).index()
3870            }
3871        } else {
3872            swiper.clickedSlide = undefined;
3873            swiper.clickedIndex = undefined;
3874            return
3875        }
3876        if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
3877            swiper.slideToClickedSlide()
3878        }
3879    }
3880
3881    var update = {
3882        updateSize: updateSize,
3883        updateSlides: updateSlides,
3884        updateAutoHeight: updateAutoHeight,
3885        updateSlidesOffset: updateSlidesOffset,
3886        updateSlidesProgress: updateSlidesProgress,
3887        updateProgress: updateProgress,
3888        updateSlidesClasses: updateSlidesClasses,
3889        updateActiveIndex: updateActiveIndex,
3890        updateClickedSlide: updateClickedSlide
3891    };
3892
3893    function getSwiperTranslate(axis) {
3894        if (axis === void 0) {
3895            axis = this.isHorizontal() ? "x" : "y"
3896        }
3897        var swiper = this;
3898        var params = swiper.params, rtl = swiper.rtlTranslate, translate = swiper.translate,
3899            $wrapperEl = swiper.$wrapperEl;
3900        if (params.virtualTranslate) {
3901            return rtl ? -translate : translate
3902        }
3903        if (params.cssMode) {
3904            return translate
3905        }
3906        var currentTranslate = getTranslate($wrapperEl[0], axis);
3907        if (rtl) {
3908            currentTranslate = -currentTranslate
3909        }
3910        return currentTranslate || 0
3911    }
3912
3913    function setTranslate(translate, byController) {
3914        var swiper = this;
3915        var rtl = swiper.rtlTranslate, params = swiper.params, $wrapperEl = swiper.$wrapperEl,
3916            wrapperEl = swiper.wrapperEl, progress = swiper.progress;
3917        var x = 0;
3918        var y = 0;
3919        var z = 0;
3920        if (swiper.isHorizontal()) {
3921            x = rtl ? -translate : translate
3922        } else {
3923            y = translate
3924        }
3925        if (params.roundLengths) {
3926            x = Math.floor(x);
3927            y = Math.floor(y)
3928        }
3929        if (params.cssMode) {
3930            wrapperEl[swiper.isHorizontal() ? "scrollLeft" : "scrollTop"] = swiper.isHorizontal() ? -x : -y
3931        } else {
3932            if (!params.virtualTranslate) {
3933                $wrapperEl.transform("translate3d(" + x + "px, " + y + "px, " + z + "px)")
3934            }
3935        }
3936        swiper.previousTranslate = swiper.translate;
3937        swiper.translate = swiper.isHorizontal() ? x : y;
3938        var newProgress;
3939        var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
3940        if (translatesDiff === 0) {
3941            newProgress = 0
3942        } else {
3943            newProgress = (translate - swiper.minTranslate()) / translatesDiff
3944        }
3945        if (newProgress !== progress) {
3946            swiper.updateProgress(translate)
3947        }
3948        swiper.emit("setTranslate", swiper.translate, byController)
3949    }
3950
3951    function minTranslate() {
3952        return -this.snapGrid[0]
3953    }
3954
3955    function maxTranslate() {
3956        return -this.snapGrid[this.snapGrid.length - 1]
3957    }
3958
3959    function translateTo(translate, speed, runCallbacks, translateBounds, internal) {
3960        if (translate === void 0) {
3961            translate = 0
3962        }
3963        if (speed === void 0) {
3964            speed = this.params.speed
3965        }
3966        if (runCallbacks === void 0) {
3967            runCallbacks = true
3968        }
3969        if (translateBounds === void 0) {
3970            translateBounds = true
3971        }
3972        var swiper = this;
3973        var params = swiper.params, wrapperEl = swiper.wrapperEl;
3974        if (swiper.animating && params.preventInteractionOnTransition) {
3975            return false
3976        }
3977        var minTranslate = swiper.minTranslate();
3978        var maxTranslate = swiper.maxTranslate();
3979        var newTranslate;
3980        if (translateBounds && translate > minTranslate) {
3981            newTranslate = minTranslate
3982        } else {
3983            if (translateBounds && translate < maxTranslate) {
3984                newTranslate = maxTranslate
3985            } else {
3986                newTranslate = translate
3987            }
3988        }
3989        swiper.updateProgress(newTranslate);
3990        if (params.cssMode) {
3991            var isH = swiper.isHorizontal();
3992            if (speed === 0) {
3993                wrapperEl[isH ? "scrollLeft" : "scrollTop"] = -newTranslate
3994            } else {
3995                if (wrapperEl.scrollTo) {
3996                    var _wrapperEl$scrollTo;
3997                    wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? "left" : "top"] = -newTranslate, _wrapperEl$scrollTo.behavior = "smooth", _wrapperEl$scrollTo))
3998                } else {
3999                    wrapperEl[isH ? "scrollLeft" : "scrollTop"] = -newTranslate
4000                }
4001            }
4002            return true
4003        }
4004        if (speed === 0) {
4005            swiper.setTransition(0);
4006            swiper.setTranslate(newTranslate);
4007            if (runCallbacks) {
4008                swiper.emit("beforeTransitionStart", speed, internal);
4009                swiper.emit("transitionEnd")
4010            }
4011        } else {
4012            swiper.setTransition(speed);
4013            swiper.setTranslate(newTranslate);
4014            if (runCallbacks) {
4015                swiper.emit("beforeTransitionStart", speed, internal);
4016                swiper.emit("transitionStart")
4017            }
4018            if (!swiper.animating) {
4019                swiper.animating = true;
4020                if (!swiper.onTranslateToWrapperTransitionEnd) {
4021                    swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
4022                        if (!swiper || swiper.destroyed) {
4023                            return
4024                        }
4025                        if (e.target !== this) {
4026                            return
4027                        }
4028                        swiper.$wrapperEl[0].removeEventListener("transitionend", swiper.onTranslateToWrapperTransitionEnd);
4029                        swiper.$wrapperEl[0].removeEventListener("webkitTransitionEnd", swiper.onTranslateToWrapperTransitionEnd);
4030                        swiper.onTranslateToWrapperTransitionEnd = null;
4031                        delete swiper.onTranslateToWrapperTransitionEnd;
4032                        if (runCallbacks) {
4033                            swiper.emit("transitionEnd")
4034                        }
4035                    }
4036                }
4037                swiper.$wrapperEl[0].addEventListener("transitionend", swiper.onTranslateToWrapperTransitionEnd);
4038                swiper.$wrapperEl[0].addEventListener("webkitTransitionEnd", swiper.onTranslateToWrapperTransitionEnd)
4039            }
4040        }
4041        return true
4042    }
4043
4044    var translate = {
4045        getTranslate: getSwiperTranslate,
4046        setTranslate: setTranslate,
4047        minTranslate: minTranslate,
4048        maxTranslate: maxTranslate,
4049        translateTo: translateTo
4050    };
4051
4052    function setTransition(duration, byController) {
4053        var swiper = this;
4054        if (!swiper.params.cssMode) {
4055            swiper.$wrapperEl.transition(duration)
4056        }
4057        swiper.emit("setTransition", duration, byController)
4058    }
4059
4060    function transitionStart(runCallbacks, direction) {
4061        if (runCallbacks === void 0) {
4062            runCallbacks = true
4063        }
4064        var swiper = this;
4065        var activeIndex = swiper.activeIndex, params = swiper.params, previousIndex = swiper.previousIndex;
4066        if (params.cssMode) {
4067            return
4068        }
4069        if (params.autoHeight) {
4070            swiper.updateAutoHeight()
4071        }
4072        var dir = direction;
4073        if (!dir) {
4074            if (activeIndex > previousIndex) {
4075                dir = "next"
4076            } else {
4077                if (activeIndex < previousIndex) {
4078                    dir = "prev"
4079                } else {
4080                    dir = "reset"
4081                }
4082            }
4083        }
4084        swiper.emit("transitionStart");
4085        if (runCallbacks && activeIndex !== previousIndex) {
4086            if (dir === "reset") {
4087                swiper.emit("slideResetTransitionStart");
4088                return
4089            }
4090            swiper.emit("slideChangeTransitionStart");
4091            if (dir === "next") {
4092                swiper.emit("slideNextTransitionStart")
4093            } else {
4094                swiper.emit("slidePrevTransitionStart")
4095            }
4096        }
4097    }
4098
4099    function transitionEnd$1(runCallbacks, direction) {
4100        if (runCallbacks === void 0) {
4101            runCallbacks = true
4102        }
4103        var swiper = this;
4104        var activeIndex = swiper.activeIndex, previousIndex = swiper.previousIndex, params = swiper.params;
4105        swiper.animating = false;
4106        if (params.cssMode) {
4107            return
4108        }
4109        swiper.setTransition(0);
4110        var dir = direction;
4111        if (!dir) {
4112            if (activeIndex > previousIndex) {
4113                dir = "next"
4114            } else {
4115                if (activeIndex < previousIndex) {
4116                    dir = "prev"
4117                } else {
4118                    dir = "reset"
4119                }
4120            }
4121        }
4122        swiper.emit("transitionEnd");
4123        if (runCallbacks && activeIndex !== previousIndex) {
4124            if (dir === "reset") {
4125                swiper.emit("slideResetTransitionEnd");
4126                return
4127            }
4128            swiper.emit("slideChangeTransitionEnd");
4129            if (dir === "next") {
4130                swiper.emit("slideNextTransitionEnd")
4131            } else {
4132                swiper.emit("slidePrevTransitionEnd")
4133            }
4134        }
4135    }
4136
4137    var transition$1 = {setTransition: setTransition, transitionStart: transitionStart, transitionEnd: transitionEnd$1};
4138
4139    function slideTo(index, speed, runCallbacks, internal) {
4140        if (index === void 0) {
4141            index = 0
4142        }
4143        if (speed === void 0) {
4144            speed = this.params.speed
4145        }
4146        if (runCallbacks === void 0) {
4147            runCallbacks = true
4148        }
4149        if (typeof index !== "number" && typeof index !== "string") {
4150            throw new Error("The 'index' argument cannot have type other than 'number' or 'string'. [" + typeof index + "] given.")
4151        }
4152        if (typeof index === "string") {
4153            var indexAsNumber = parseInt(index, 10);
4154            var isValidNumber = isFinite(indexAsNumber);
4155            if (!isValidNumber) {
4156                throw new Error("The passed-in 'index' (string) couldn't be converted to 'number'. [" + index + "] given.")
4157            }
4158            index = indexAsNumber
4159        }
4160        var swiper = this;
4161        var slideIndex = index;
4162        if (slideIndex < 0) {
4163            slideIndex = 0
4164        }
4165        var params = swiper.params, snapGrid = swiper.snapGrid, slidesGrid = swiper.slidesGrid,
4166            previousIndex = swiper.previousIndex, activeIndex = swiper.activeIndex, rtl = swiper.rtlTranslate,
4167            wrapperEl = swiper.wrapperEl;
4168        if (swiper.animating && params.preventInteractionOnTransition) {
4169            return false
4170        }
4171        var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
4172        var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
4173        if (snapIndex >= snapGrid.length) {
4174            snapIndex = snapGrid.length - 1
4175        }
4176        if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
4177            swiper.emit("beforeSlideChangeStart")
4178        }
4179        var translate = -snapGrid[snapIndex];
4180        swiper.updateProgress(translate);
4181        if (params.normalizeSlideIndex) {
4182            for (var i = 0; i < slidesGrid.length; i += 1) {
4183                if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {
4184                    slideIndex = i
4185                }
4186            }
4187        }
4188        if (swiper.initialized && slideIndex !== activeIndex) {
4189            if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
4190                return false
4191            }
4192            if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
4193                if ((activeIndex || 0) !== slideIndex) {
4194                    return false
4195                }
4196            }
4197        }
4198        var direction;
4199        if (slideIndex > activeIndex) {
4200            direction = "next"
4201        } else {
4202            if (slideIndex < activeIndex) {
4203                direction = "prev"
4204            } else {
4205                direction = "reset"
4206            }
4207        }
4208        if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {
4209            swiper.updateActiveIndex(slideIndex);
4210            if (params.autoHeight) {
4211                swiper.updateAutoHeight()
4212            }
4213            swiper.updateSlidesClasses();
4214            if (params.effect !== "slide") {
4215                swiper.setTranslate(translate)
4216            }
4217            if (direction !== "reset") {
4218                swiper.transitionStart(runCallbacks, direction);
4219                swiper.transitionEnd(runCallbacks, direction)
4220            }
4221            return false
4222        }
4223        if (params.cssMode) {
4224            var isH = swiper.isHorizontal();
4225            var t = -translate;
4226            if (rtl) {
4227                t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t
4228            }
4229            if (speed === 0) {
4230                wrapperEl[isH ? "scrollLeft" : "scrollTop"] = t
4231            } else {
4232                if (wrapperEl.scrollTo) {
4233                    var _wrapperEl$scrollTo;
4234                    wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? "left" : "top"] = t, _wrapperEl$scrollTo.behavior = "smooth", _wrapperEl$scrollTo))
4235                } else {
4236                    wrapperEl[isH ? "scrollLeft" : "scrollTop"] = t
4237                }
4238            }
4239            return true
4240        }
4241        if (speed === 0) {
4242            swiper.setTransition(0);
4243            swiper.setTranslate(translate);
4244            swiper.updateActiveIndex(slideIndex);
4245            swiper.updateSlidesClasses();
4246            swiper.emit("beforeTransitionStart", speed, internal);
4247            swiper.transitionStart(runCallbacks, direction);
4248            swiper.transitionEnd(runCallbacks, direction)
4249        } else {
4250            swiper.setTransition(speed);
4251            swiper.setTranslate(translate);
4252            swiper.updateActiveIndex(slideIndex);
4253            swiper.updateSlidesClasses();
4254            swiper.emit("beforeTransitionStart", speed, internal);
4255            swiper.transitionStart(runCallbacks, direction);
4256            if (!swiper.animating) {
4257                swiper.animating = true;
4258                if (!swiper.onSlideToWrapperTransitionEnd) {
4259                    swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
4260                        if (!swiper || swiper.destroyed) {
4261                            return
4262                        }
4263                        if (e.target !== this) {
4264                            return
4265                        }
4266                        swiper.$wrapperEl[0].removeEventListener("transitionend", swiper.onSlideToWrapperTransitionEnd);
4267                        swiper.$wrapperEl[0].removeEventListener("webkitTransitionEnd", swiper.onSlideToWrapperTransitionEnd);
4268                        swiper.onSlideToWrapperTransitionEnd = null;
4269                        delete swiper.onSlideToWrapperTransitionEnd;
4270                        swiper.transitionEnd(runCallbacks, direction)
4271                    }
4272                }
4273                swiper.$wrapperEl[0].addEventListener("transitionend", swiper.onSlideToWrapperTransitionEnd);
4274                swiper.$wrapperEl[0].addEventListener("webkitTransitionEnd", swiper.onSlideToWrapperTransitionEnd)
4275            }
4276        }
4277        return true
4278    }
4279
4280    function slideToLoop(index, speed, runCallbacks, internal) {
4281        if (index === void 0) {
4282            index = 0
4283        }
4284        if (speed === void 0) {
4285            speed = this.params.speed
4286        }
4287        if (runCallbacks === void 0) {
4288            runCallbacks = true
4289        }
4290        var swiper = this;
4291        var newIndex = index;
4292        if (swiper.params.loop) {
4293            newIndex += swiper.loopedSlides
4294        }
4295        return swiper.slideTo(newIndex, speed, runCallbacks, internal)
4296    }
4297
4298    function slideNext(speed, runCallbacks, internal) {
4299        if (speed === void 0) {
4300            speed = this.params.speed
4301        }
4302        if (runCallbacks === void 0) {
4303            runCallbacks = true
4304        }
4305        var swiper = this;
4306        var params = swiper.params, animating = swiper.animating;
4307        var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;
4308        if (params.loop) {
4309            if (animating && params.loopPreventsSlide) {
4310                return false
4311            }
4312            swiper.loopFix();
4313            swiper._clientLeft = swiper.$wrapperEl[0].clientLeft
4314        }
4315        return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal)
4316    }
4317
4318    function slidePrev(speed, runCallbacks, internal) {
4319        if (speed === void 0) {
4320            speed = this.params.speed
4321        }
4322        if (runCallbacks === void 0) {
4323            runCallbacks = true
4324        }
4325        var swiper = this;
4326        var params = swiper.params, animating = swiper.animating, snapGrid = swiper.snapGrid,
4327            slidesGrid = swiper.slidesGrid, rtlTranslate = swiper.rtlTranslate;
4328        if (params.loop) {
4329            if (animating && params.loopPreventsSlide) {
4330                return false
4331            }
4332            swiper.loopFix();
4333            swiper._clientLeft = swiper.$wrapperEl[0].clientLeft
4334        }
4335        var translate = rtlTranslate ? swiper.translate : -swiper.translate;
4336
4337        function normalize(val) {
4338            if (val < 0) {
4339                return -Math.floor(Math.abs(val))
4340            }
4341            return Math.floor(val)
4342        }
4343
4344        var normalizedTranslate = normalize(translate);
4345        var normalizedSnapGrid = snapGrid.map(function (val) {
4346            return normalize(val)
4347        });
4348        var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
4349        var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
4350        if (typeof prevSnap === "undefined" && params.cssMode) {
4351            snapGrid.forEach(function (snap) {
4352                if (!prevSnap && normalizedTranslate >= snap) {
4353                    prevSnap = snap
4354                }
4355            })
4356        }
4357        var prevIndex;
4358        if (typeof prevSnap !== "undefined") {
4359            prevIndex = slidesGrid.indexOf(prevSnap);
4360            if (prevIndex < 0) {
4361                prevIndex = swiper.activeIndex - 1
4362            }
4363        }
4364        return swiper.slideTo(prevIndex, speed, runCallbacks, internal)
4365    }
4366
4367    function slideReset(speed, runCallbacks, internal) {
4368        if (speed === void 0) {
4369            speed = this.params.speed
4370        }
4371        if (runCallbacks === void 0) {
4372            runCallbacks = true
4373        }
4374        var swiper = this;
4375        return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal)
4376    }
4377
4378    function slideToClosest(speed, runCallbacks, internal, threshold) {
4379        if (speed === void 0) {
4380            speed = this.params.speed
4381        }
4382        if (runCallbacks === void 0) {
4383            runCallbacks = true
4384        }
4385        if (threshold === void 0) {
4386            threshold = 0.5
4387        }
4388        var swiper = this;
4389        var index = swiper.activeIndex;
4390        var skip = Math.min(swiper.params.slidesPerGroupSkip, index);
4391        var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
4392        var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
4393        if (translate >= swiper.snapGrid[snapIndex]) {
4394            var currentSnap = swiper.snapGrid[snapIndex];
4395            var nextSnap = swiper.snapGrid[snapIndex + 1];
4396            if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {
4397                index += swiper.params.slidesPerGroup
4398            }
4399        } else {
4400            var prevSnap = swiper.snapGrid[snapIndex - 1];
4401            var _currentSnap = swiper.snapGrid[snapIndex];
4402            if (translate - prevSnap <= (_currentSnap - prevSnap) * threshold) {
4403                index -= swiper.params.slidesPerGroup
4404            }
4405        }
4406        index = Math.max(index, 0);
4407        index = Math.min(index, swiper.slidesGrid.length - 1);
4408        return swiper.slideTo(index, speed, runCallbacks, internal)
4409    }
4410
4411    function slideToClickedSlide() {
4412        var swiper = this;
4413        var params = swiper.params, $wrapperEl = swiper.$wrapperEl;
4414        var slidesPerView = params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : params.slidesPerView;
4415        var slideToIndex = swiper.clickedIndex;
4416        var realIndex;
4417        if (params.loop) {
4418            if (swiper.animating) {
4419                return
4420            }
4421            realIndex = parseInt($(swiper.clickedSlide).attr("data-swiper-slide-index"), 10);
4422            if (params.centeredSlides) {
4423                if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {
4424                    swiper.loopFix();
4425                    slideToIndex = $wrapperEl.children("." + params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + params.slideDuplicateClass + ")").eq(0).index();
4426                    nextTick(function () {
4427                        swiper.slideTo(slideToIndex)
4428                    })
4429                } else {
4430                    swiper.slideTo(slideToIndex)
4431                }
4432            } else {
4433                if (slideToIndex > swiper.slides.length - slidesPerView) {
4434                    swiper.loopFix();
4435                    slideToIndex = $wrapperEl.children("." + params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + params.slideDuplicateClass + ")").eq(0).index();
4436                    nextTick(function () {
4437                        swiper.slideTo(slideToIndex)
4438                    })
4439                } else {
4440                    swiper.slideTo(slideToIndex)
4441                }
4442            }
4443        } else {
4444            swiper.slideTo(slideToIndex)
4445        }
4446    }
4447
4448    var slide = {
4449        slideTo: slideTo,
4450        slideToLoop: slideToLoop,
4451        slideNext: slideNext,
4452        slidePrev: slidePrev,
4453        slideReset: slideReset,
4454        slideToClosest: slideToClosest,
4455        slideToClickedSlide: slideToClickedSlide
4456    };
4457
4458    function loopCreate() {
4459        var swiper = this;
4460        var document = getDocument();
4461        var params = swiper.params, $wrapperEl = swiper.$wrapperEl;
4462        $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass).remove();
4463        var slides = $wrapperEl.children("." + params.slideClass);
4464        if (params.loopFillGroupWithBlank) {
4465            var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;
4466            if (blankSlidesNum !== params.slidesPerGroup) {
4467                for (var i = 0; i < blankSlidesNum; i += 1) {
4468                    var blankNode = $(document.createElement("div")).addClass(params.slideClass + " " + params.slideBlankClass);
4469                    $wrapperEl.append(blankNode)
4470                }
4471                slides = $wrapperEl.children("." + params.slideClass)
4472            }
4473        }
4474        if (params.slidesPerView === "auto" && !params.loopedSlides) {
4475            params.loopedSlides = slides.length
4476        }
4477        swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));
4478        swiper.loopedSlides += params.loopAdditionalSlides;
4479        if (swiper.loopedSlides > slides.length) {
4480            swiper.loopedSlides = slides.length
4481        }
4482        var prependSlides = [];
4483        var appendSlides = [];
4484        slides.each(function (el, index) {
4485            var slide = $(el);
4486            if (index < swiper.loopedSlides) {
4487                appendSlides.push(el)
4488            }
4489            if (index < slides.length && index >= slides.length - swiper.loopedSlides) {
4490                prependSlides.push(el)
4491            }
4492            slide.attr("data-swiper-slide-index", index)
4493        });
4494        for (var _i = 0; _i < appendSlides.length; _i += 1) {
4495            $wrapperEl.append($(appendSlides[_i].cloneNode(true)).addClass(params.slideDuplicateClass))
4496        }
4497        for (var _i2 = prependSlides.length - 1; _i2 >= 0; _i2 -= 1) {
4498            $wrapperEl.prepend($(prependSlides[_i2].cloneNode(true)).addClass(params.slideDuplicateClass))
4499        }
4500    }
4501
4502    function loopFix() {
4503        var swiper = this;
4504        swiper.emit("beforeLoopFix");
4505        var activeIndex = swiper.activeIndex, slides = swiper.slides, loopedSlides = swiper.loopedSlides,
4506            allowSlidePrev = swiper.allowSlidePrev, allowSlideNext = swiper.allowSlideNext, snapGrid = swiper.snapGrid,
4507            rtl = swiper.rtlTranslate;
4508        var newIndex;
4509        swiper.allowSlidePrev = true;
4510        swiper.allowSlideNext = true;
4511        var snapTranslate = -snapGrid[activeIndex];
4512        var diff = snapTranslate - swiper.getTranslate();
4513        if (activeIndex < loopedSlides) {
4514            newIndex = slides.length - loopedSlides * 3 + activeIndex;
4515            newIndex += loopedSlides;
4516            var slideChanged = swiper.slideTo(newIndex, 0, false, true);
4517            if (slideChanged && diff !== 0) {
4518                swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff)
4519            }
4520        } else {
4521            if (activeIndex >= slides.length - loopedSlides) {
4522                newIndex = -slides.length + activeIndex + loopedSlides;
4523                newIndex += loopedSlides;
4524                var _slideChanged = swiper.slideTo(newIndex, 0, false, true);
4525                if (_slideChanged && diff !== 0) {
4526                    swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff)
4527                }
4528            }
4529        }
4530        swiper.allowSlidePrev = allowSlidePrev;
4531        swiper.allowSlideNext = allowSlideNext;
4532        swiper.emit("loopFix")
4533    }
4534
4535    function loopDestroy() {
4536        var swiper = this;
4537        var $wrapperEl = swiper.$wrapperEl, params = swiper.params, slides = swiper.slides;
4538        $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + ",." + params.slideClass + "." + params.slideBlankClass).remove();
4539        slides.removeAttr("data-swiper-slide-index")
4540    }
4541
4542    var loop = {loopCreate: loopCreate, loopFix: loopFix, loopDestroy: loopDestroy};
4543
4544    function setGrabCursor(moving) {
4545        var swiper = this;
4546        if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {
4547            return
4548        }
4549        var el = swiper.el;
4550        el.style.cursor = "move";
4551        el.style.cursor = moving ? "-webkit-grabbing" : "-webkit-grab";
4552        el.style.cursor = moving ? "-moz-grabbin" : "-moz-grab";
4553        el.style.cursor = moving ? "grabbing" : "grab"
4554    }
4555
4556    function unsetGrabCursor() {
4557        var swiper = this;
4558        if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {
4559            return
4560        }
4561        swiper.el.style.cursor = ""
4562    }
4563
4564    var grabCursor = {setGrabCursor: setGrabCursor, unsetGrabCursor: unsetGrabCursor};
4565
4566    function appendSlide(slides) {
4567        var swiper = this;
4568        var $wrapperEl = swiper.$wrapperEl, params = swiper.params;
4569        if (params.loop) {
4570            swiper.loopDestroy()
4571        }
4572        if (typeof slides === "object" && "length" in slides) {
4573            for (var i = 0; i < slides.length; i += 1) {
4574                if (slides[i]) {
4575                    $wrapperEl.append(slides[i])
4576                }
4577            }
4578        } else {
4579            $wrapperEl.append(slides)
4580        }
4581        if (params.loop) {
4582            swiper.loopCreate()
4583        }
4584        if (!(params.observer && swiper.support.observer)) {
4585            swiper.update()
4586        }
4587    }
4588
4589    function prependSlide(slides) {
4590        var swiper = this;
4591        var params = swiper.params, $wrapperEl = swiper.$wrapperEl, activeIndex = swiper.activeIndex;
4592        if (params.loop) {
4593            swiper.loopDestroy()
4594        }
4595        var newActiveIndex = activeIndex + 1;
4596        if (typeof slides === "object" && "length" in slides) {
4597            for (var i = 0; i < slides.length; i += 1) {
4598                if (slides[i]) {
4599                    $wrapperEl.prepend(slides[i])
4600                }
4601            }
4602            newActiveIndex = activeIndex + slides.length
4603        } else {
4604            $wrapperEl.prepend(slides)
4605        }
4606        if (params.loop) {
4607            swiper.loopCreate()
4608        }
4609        if (!(params.observer && swiper.support.observer)) {
4610            swiper.update()
4611        }
4612        swiper.slideTo(newActiveIndex, 0, false)
4613    }
4614
4615    function addSlide(index, slides) {
4616        var swiper = this;
4617        var $wrapperEl = swiper.$wrapperEl, params = swiper.params, activeIndex = swiper.activeIndex;
4618        var activeIndexBuffer = activeIndex;
4619        if (params.loop) {
4620            activeIndexBuffer -= swiper.loopedSlides;
4621            swiper.loopDestroy();
4622            swiper.slides = $wrapperEl.children("." + params.slideClass)
4623        }
4624        var baseLength = swiper.slides.length;
4625        if (index <= 0) {
4626            swiper.prependSlide(slides);
4627            return
4628        }
4629        if (index >= baseLength) {
4630            swiper.appendSlide(slides);
4631            return
4632        }
4633        var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
4634        var slidesBuffer = [];
4635        for (var i = baseLength - 1; i >= index; i -= 1) {
4636            var currentSlide = swiper.slides.eq(i);
4637            currentSlide.remove();
4638            slidesBuffer.unshift(currentSlide)
4639        }
4640        if (typeof slides === "object" && "length" in slides) {
4641            for (var _i = 0; _i < slides.length; _i += 1) {
4642                if (slides[_i]) {
4643                    $wrapperEl.append(slides[_i])
4644                }
4645            }
4646            newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer
4647        } else {
4648            $wrapperEl.append(slides)
4649        }
4650        for (var _i2 = 0; _i2 < slidesBuffer.length; _i2 += 1) {
4651            $wrapperEl.append(slidesBuffer[_i2])
4652        }
4653        if (params.loop) {
4654            swiper.loopCreate()
4655        }
4656        if (!(params.observer && swiper.support.observer)) {
4657            swiper.update()
4658        }
4659        if (params.loop) {
4660            swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false)
4661        } else {
4662            swiper.slideTo(newActiveIndex, 0, false)
4663        }
4664    }
4665
4666    function removeSlide(slidesIndexes) {
4667        var swiper = this;
4668        var params = swiper.params, $wrapperEl = swiper.$wrapperEl, activeIndex = swiper.activeIndex;
4669        var activeIndexBuffer = activeIndex;
4670        if (params.loop) {
4671            activeIndexBuffer -= swiper.loopedSlides;
4672            swiper.loopDestroy();
4673            swiper.slides = $wrapperEl.children("." + params.slideClass)
4674        }
4675        var newActiveIndex = activeIndexBuffer;
4676        var indexToRemove;
4677        if (typeof slidesIndexes === "object" && "length" in slidesIndexes) {
4678            for (var i = 0; i < slidesIndexes.length; i += 1) {
4679                indexToRemove = slidesIndexes[i];
4680                if (swiper.slides[indexToRemove]) {
4681                    swiper.slides.eq(indexToRemove).remove()
4682                }
4683                if (indexToRemove < newActiveIndex) {
4684                    newActiveIndex -= 1
4685                }
4686            }
4687            newActiveIndex = Math.max(newActiveIndex, 0)
4688        } else {
4689            indexToRemove = slidesIndexes;
4690            if (swiper.slides[indexToRemove]) {
4691                swiper.slides.eq(indexToRemove).remove()
4692            }
4693            if (indexToRemove < newActiveIndex) {
4694                newActiveIndex -= 1
4695            }
4696            newActiveIndex = Math.max(newActiveIndex, 0)
4697        }
4698        if (params.loop) {
4699            swiper.loopCreate()
4700        }
4701        if (!(params.observer && swiper.support.observer)) {
4702            swiper.update()
4703        }
4704        if (params.loop) {
4705            swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false)
4706        } else {
4707            swiper.slideTo(newActiveIndex, 0, false)
4708        }
4709    }
4710
4711    function removeAllSlides() {
4712        var swiper = this;
4713        var slidesIndexes = [];
4714        for (var i = 0; i < swiper.slides.length; i += 1) {
4715            slidesIndexes.push(i)
4716        }
4717        swiper.removeSlide(slidesIndexes)
4718    }
4719
4720    var manipulation = {
4721        appendSlide: appendSlide,
4722        prependSlide: prependSlide,
4723        addSlide: addSlide,
4724        removeSlide: removeSlide,
4725        removeAllSlides: removeAllSlides
4726    };
4727
4728    function onTouchStart(event) {
4729        var swiper = this;
4730        var document = getDocument();
4731        var window = getWindow();
4732        var data = swiper.touchEventsData;
4733        var params = swiper.params, touches = swiper.touches;
4734        if (swiper.animating && params.preventInteractionOnTransition) {
4735            return
4736        }
4737        var e = event;
4738        if (e.originalEvent) {
4739            e = e.originalEvent
4740        }
4741        var $targetEl = $(e.target);
4742        if (params.touchEventsTarget === "wrapper") {
4743            if (!$targetEl.closest(swiper.wrapperEl).length) {
4744                return
4745            }
4746        }
4747        data.isTouchEvent = e.type === "touchstart";
4748        if (!data.isTouchEvent && "which" in e && e.which === 3) {
4749            return
4750        }
4751        if (!data.isTouchEvent && "button" in e && e.button > 0) {
4752            return
4753        }
4754        if (data.isTouched && data.isMoved) {
4755            return
4756        }
4757        var swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== "";
4758        if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {
4759            $targetEl = $(event.path[0])
4760        }
4761        if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : "." + params.noSwipingClass)[0]) {
4762            swiper.allowClick = true;
4763            return
4764        }
4765        if (params.swipeHandler) {
4766            if (!$targetEl.closest(params.swipeHandler)[0]) {
4767                return
4768            }
4769        }
4770        touches.currentX = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
4771        touches.currentY = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
4772        var startX = touches.currentX;
4773        var startY = touches.currentY;
4774        var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
4775        var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
4776        if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {
4777            return
4778        }
4779        extend$1(data, {
4780            isTouched: true,
4781            isMoved: false,
4782            allowTouchCallbacks: true,
4783            isScrolling: undefined,
4784            startMoving: undefined
4785        });
4786        touches.startX = startX;
4787        touches.startY = startY;
4788        data.touchStartTime = now();
4789        swiper.allowClick = true;
4790        swiper.updateSize();
4791        swiper.swipeDirection = undefined;
4792        if (params.threshold > 0) {
4793            data.allowThresholdMove = false
4794        }
4795        if (e.type !== "touchstart") {
4796            var preventDefault = true;
4797            if ($targetEl.is(data.formElements)) {
4798                preventDefault = false
4799            }
4800            if (document.activeElement && $(document.activeElement).is(data.formElements) && document.activeElement !== $targetEl[0]) {
4801                document.activeElement.blur()
4802            }
4803            var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
4804            if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {
4805                e.preventDefault()
4806            }
4807        }
4808        swiper.emit("touchStart", e)
4809    }
4810
4811    function onTouchMove(event) {
4812        var document = getDocument();
4813        var swiper = this;
4814        var data = swiper.touchEventsData;
4815        var params = swiper.params, touches = swiper.touches, rtl = swiper.rtlTranslate;
4816        var e = event;
4817        if (e.originalEvent) {
4818            e = e.originalEvent
4819        }
4820        if (!data.isTouched) {
4821            if (data.startMoving && data.isScrolling) {
4822                swiper.emit("touchMoveOpposite", e)
4823            }
4824            return
4825        }
4826        if (data.isTouchEvent && e.type !== "touchmove") {
4827            return
4828        }
4829        var targetTouch = e.type === "touchmove" && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);
4830        var pageX = e.type === "touchmove" ? targetTouch.pageX : e.pageX;
4831        var pageY = e.type === "touchmove" ? targetTouch.pageY : e.pageY;
4832        if (e.preventedByNestedSwiper) {
4833            touches.startX = pageX;
4834            touches.startY = pageY;
4835            return
4836        }
4837        if (!swiper.allowTouchMove) {
4838            swiper.allowClick = false;
4839            if (data.isTouched) {
4840                extend$1(touches, {startX: pageX, startY: pageY, currentX: pageX, currentY: pageY});
4841                data.touchStartTime = now()
4842            }
4843            return
4844        }
4845        if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
4846            if (swiper.isVertical()) {
4847                if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {
4848                    data.isTouched = false;
4849                    data.isMoved = false;
4850                    return
4851                }
4852            } else {
4853                if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {
4854                    return
4855                }
4856            }
4857        }
4858        if (data.isTouchEvent && document.activeElement) {
4859            if (e.target === document.activeElement && $(e.target).is(data.formElements)) {
4860                data.isMoved = true;
4861                swiper.allowClick = false;
4862                return
4863            }
4864        }
4865        if (data.allowTouchCallbacks) {
4866            swiper.emit("touchMove", e)
4867        }
4868        if (e.targetTouches && e.targetTouches.length > 1) {
4869            return
4870        }
4871        touches.currentX = pageX;
4872        touches.currentY = pageY;
4873        var diffX = touches.currentX - touches.startX;
4874        var diffY = touches.currentY - touches.startY;
4875        if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) {
4876            return
4877        }
4878        if (typeof data.isScrolling === "undefined") {
4879            var touchAngle;
4880            if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {
4881                data.isScrolling = false
4882            } else {
4883                if (diffX * diffX + diffY * diffY >= 25) {
4884                    touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;
4885                    data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle
4886                }
4887            }
4888        }
4889        if (data.isScrolling) {
4890            swiper.emit("touchMoveOpposite", e)
4891        }
4892        if (typeof data.startMoving === "undefined") {
4893            if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
4894                data.startMoving = true
4895            }
4896        }
4897        if (data.isScrolling) {
4898            data.isTouched = false;
4899            return
4900        }
4901        if (!data.startMoving) {
4902            return
4903        }
4904        swiper.allowClick = false;
4905        if (!params.cssMode && e.cancelable) {
4906            e.preventDefault()
4907        }
4908        if (params.touchMoveStopPropagation && !params.nested) {
4909            e.stopPropagation()
4910        }
4911        if (!data.isMoved) {
4912            if (params.loop) {
4913                swiper.loopFix()
4914            }
4915            data.startTranslate = swiper.getTranslate();
4916            swiper.setTransition(0);
4917            if (swiper.animating) {
4918                swiper.$wrapperEl.trigger("webkitTransitionEnd transitionend")
4919            }
4920            data.allowMomentumBounce = false;
4921            if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
4922                swiper.setGrabCursor(true)
4923            }
4924            swiper.emit("sliderFirstMove", e)
4925        }
4926        swiper.emit("sliderMove", e);
4927        data.isMoved = true;
4928        var diff = swiper.isHorizontal() ? diffX : diffY;
4929        touches.diff = diff;
4930        diff *= params.touchRatio;
4931        if (rtl) {
4932            diff = -diff
4933        }
4934        swiper.swipeDirection = diff > 0 ? "prev" : "next";
4935        data.currentTranslate = diff + data.startTranslate;
4936        var disableParentSwiper = true;
4937        var resistanceRatio = params.resistanceRatio;
4938        if (params.touchReleaseOnEdges) {
4939            resistanceRatio = 0
4940        }
4941        if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {
4942            disableParentSwiper = false;
4943            if (params.resistance) {
4944                data.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio)
4945            }
4946        } else {
4947            if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
4948                disableParentSwiper = false;
4949                if (params.resistance) {
4950                    data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio)
4951                }
4952            }
4953        }
4954        if (disableParentSwiper) {
4955            e.preventedByNestedSwiper = true
4956        }
4957        if (!swiper.allowSlideNext && swiper.swipeDirection === "next" && data.currentTranslate < data.startTranslate) {
4958            data.currentTranslate = data.startTranslate
4959        }
4960        if (!swiper.allowSlidePrev && swiper.swipeDirection === "prev" && data.currentTranslate > data.startTranslate) {
4961            data.currentTranslate = data.startTranslate
4962        }
4963        if (params.threshold > 0) {
4964            if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
4965                if (!data.allowThresholdMove) {
4966                    data.allowThresholdMove = true;
4967                    touches.startX = touches.currentX;
4968                    touches.startY = touches.currentY;
4969                    data.currentTranslate = data.startTranslate;
4970                    touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
4971                    return
4972                }
4973            } else {
4974                data.currentTranslate = data.startTranslate;
4975                return
4976            }
4977        }
4978        if (!params.followFinger || params.cssMode) {
4979            return
4980        }
4981        if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
4982            swiper.updateActiveIndex();
4983            swiper.updateSlidesClasses()
4984        }
4985        if (params.freeMode) {
4986            if (data.velocities.length === 0) {
4987                data.velocities.push({
4988                    position: touches[swiper.isHorizontal() ? "startX" : "startY"],
4989                    time: data.touchStartTime
4990                })
4991            }
4992            data.velocities.push({position: touches[swiper.isHorizontal() ? "currentX" : "currentY"], time: now()})
4993        }
4994        swiper.updateProgress(data.currentTranslate);
4995        swiper.setTranslate(data.currentTranslate)
4996    }
4997
4998    function onTouchEnd(event) {
4999        var swiper = this;
5000        var data = swiper.touchEventsData;
5001        var params = swiper.params, touches = swiper.touches, rtl = swiper.rtlTranslate, $wrapperEl = swiper.$wrapperEl,
5002            slidesGrid = swiper.slidesGrid, snapGrid = swiper.snapGrid;
5003        var e = event;
5004        if (e.originalEvent) {
5005            e = e.originalEvent
5006        }
5007        if (data.allowTouchCallbacks) {
5008            swiper.emit("touchEnd", e)
5009        }
5010        data.allowTouchCallbacks = false;
5011        if (!data.isTouched) {
5012            if (data.isMoved && params.grabCursor) {
5013                swiper.setGrabCursor(false)
5014            }
5015            data.isMoved = false;
5016            data.startMoving = false;
5017            return
5018        }
5019        if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
5020            swiper.setGrabCursor(false)
5021        }
5022        var touchEndTime = now();
5023        var timeDiff = touchEndTime - data.touchStartTime;
5024        if (swiper.allowClick) {
5025            swiper.updateClickedSlide(e);
5026            swiper.emit("tap click", e);
5027            if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {
5028                swiper.emit("doubleTap doubleClick", e)
5029            }
5030        }
5031        data.lastClickTime = now();
5032        nextTick(function () {
5033            if (!swiper.destroyed) {
5034                swiper.allowClick = true
5035            }
5036        });
5037        if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
5038            data.isTouched = false;
5039            data.isMoved = false;
5040            data.startMoving = false;
5041            return
5042        }
5043        data.isTouched = false;
5044        data.isMoved = false;
5045        data.startMoving = false;
5046        var currentPos;
5047        if (params.followFinger) {
5048            currentPos = rtl ? swiper.translate : -swiper.translate
5049        } else {
5050            currentPos = -data.currentTranslate
5051        }
5052        if (params.cssMode) {
5053            return
5054        }
5055        if (params.freeMode) {
5056            if (currentPos < -swiper.minTranslate()) {
5057                swiper.slideTo(swiper.activeIndex);
5058                return
5059            }
5060            if (currentPos > -swiper.maxTranslate()) {
5061                if (swiper.slides.length < snapGrid.length) {
5062                    swiper.slideTo(snapGrid.length - 1)
5063                } else {
5064                    swiper.slideTo(swiper.slides.length - 1)
5065                }
5066                return
5067            }
5068            if (params.freeModeMomentum) {
5069                if (data.velocities.length > 1) {
5070                    var lastMoveEvent = data.velocities.pop();
5071                    var velocityEvent = data.velocities.pop();
5072                    var distance = lastMoveEvent.position - velocityEvent.position;
5073                    var time = lastMoveEvent.time - velocityEvent.time;
5074                    swiper.velocity = distance / time;
5075                    swiper.velocity /= 2;
5076                    if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
5077                        swiper.velocity = 0
5078                    }
5079                    if (time > 150 || now() - lastMoveEvent.time > 300) {
5080                        swiper.velocity = 0
5081                    }
5082                } else {
5083                    swiper.velocity = 0
5084                }
5085                swiper.velocity *= params.freeModeMomentumVelocityRatio;
5086                data.velocities.length = 0;
5087                var momentumDuration = 1000 * params.freeModeMomentumRatio;
5088                var momentumDistance = swiper.velocity * momentumDuration;
5089                var newPosition = swiper.translate + momentumDistance;
5090                if (rtl) {
5091                    newPosition = -newPosition
5092                }
5093                var doBounce = false;
5094                var afterBouncePosition;
5095                var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
5096                var needsLoopFix;
5097                if (newPosition < swiper.maxTranslate()) {
5098                    if (params.freeModeMomentumBounce) {
5099                        if (newPosition + swiper.maxTranslate() < -bounceAmount) {
5100                            newPosition = swiper.maxTranslate() - bounceAmount
5101                        }
5102                        afterBouncePosition = swiper.maxTranslate();
5103                        doBounce = true;
5104                        data.allowMomentumBounce = true
5105                    } else {
5106                        newPosition = swiper.maxTranslate()
5107                    }
5108                    if (params.loop && params.centeredSlides) {
5109                        needsLoopFix = true
5110                    }
5111                } else {
5112                    if (newPosition > swiper.minTranslate()) {
5113                        if (params.freeModeMomentumBounce) {
5114                            if (newPosition - swiper.minTranslate() > bounceAmount) {
5115                                newPosition = swiper.minTranslate() + bounceAmount
5116                            }
5117                            afterBouncePosition = swiper.minTranslate();
5118                            doBounce = true;
5119                            data.allowMomentumBounce = true
5120                        } else {
5121                            newPosition = swiper.minTranslate()
5122                        }
5123                        if (params.loop && params.centeredSlides) {
5124                            needsLoopFix = true
5125                        }
5126                    } else {
5127                        if (params.freeModeSticky) {
5128                            var nextSlide;
5129                            for (var j = 0; j < snapGrid.length; j += 1) {
5130                                if (snapGrid[j] > -newPosition) {
5131                                    nextSlide = j;
5132                                    break
5133                                }
5134                            }
5135                            if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === "next") {
5136                                newPosition = snapGrid[nextSlide]
5137                            } else {
5138                                newPosition = snapGrid[nextSlide - 1]
5139                            }
5140                            newPosition = -newPosition
5141                        }
5142                    }
5143                }
5144                if (needsLoopFix) {
5145                    swiper.once("transitionEnd", function () {
5146                        swiper.loopFix()
5147                    })
5148                }
5149                if (swiper.velocity !== 0) {
5150                    if (rtl) {
5151                        momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity)
5152                    } else {
5153                        momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity)
5154                    }
5155                    if (params.freeModeSticky) {
5156                        var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
5157                        var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];
5158                        if (moveDistance < currentSlideSize) {
5159                            momentumDuration = params.speed
5160                        } else {
5161                            if (moveDistance < 2 * currentSlideSize) {
5162                                momentumDuration = params.speed * 1.5
5163                            } else {
5164                                momentumDuration = params.speed * 2.5
5165                            }
5166                        }
5167                    }
5168                } else {
5169                    if (params.freeModeSticky) {
5170                        swiper.slideToClosest();
5171                        return
5172                    }
5173                }
5174                if (params.freeModeMomentumBounce && doBounce) {
5175                    swiper.updateProgress(afterBouncePosition);
5176                    swiper.setTransition(momentumDuration);
5177                    swiper.setTranslate(newPosition);
5178                    swiper.transitionStart(true, swiper.swipeDirection);
5179                    swiper.animating = true;
5180                    $wrapperEl.transitionEnd(function () {
5181                        if (!swiper || swiper.destroyed || !data.allowMomentumBounce) {
5182                            return
5183                        }
5184                        swiper.emit("momentumBounce");
5185                        swiper.setTransition(params.speed);
5186                        setTimeout(function () {
5187                            swiper.setTranslate(afterBouncePosition);
5188                            $wrapperEl.transitionEnd(function () {
5189                                if (!swiper || swiper.destroyed) {
5190                                    return
5191                                }
5192                                swiper.transitionEnd()
5193                            })
5194                        }, 0)
5195                    })
5196                } else {
5197                    if (swiper.velocity) {
5198                        swiper.updateProgress(newPosition);
5199                        swiper.setTransition(momentumDuration);
5200                        swiper.setTranslate(newPosition);
5201                        swiper.transitionStart(true, swiper.swipeDirection);
5202                        if (!swiper.animating) {
5203                            swiper.animating = true;
5204                            $wrapperEl.transitionEnd(function () {
5205                                if (!swiper || swiper.destroyed) {
5206                                    return
5207                                }
5208                                swiper.transitionEnd()
5209                            })
5210                        }
5211                    } else {
5212                        swiper.updateProgress(newPosition)
5213                    }
5214                }
5215                swiper.updateActiveIndex();
5216                swiper.updateSlidesClasses()
5217            } else {
5218                if (params.freeModeSticky) {
5219                    swiper.slideToClosest();
5220                    return
5221                }
5222            }
5223            if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
5224                swiper.updateProgress();
5225                swiper.updateActiveIndex();
5226                swiper.updateSlidesClasses()
5227            }
5228            return
5229        }
5230        var stopIndex = 0;
5231        var groupSize = swiper.slidesSizesGrid[0];
5232        for (var i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {
5233            var _increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
5234            if (typeof slidesGrid[i + _increment] !== "undefined") {
5235                if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + _increment]) {
5236                    stopIndex = i;
5237                    groupSize = slidesGrid[i + _increment] - slidesGrid[i]
5238                }
5239            } else {
5240                if (currentPos >= slidesGrid[i]) {
5241                    stopIndex = i;
5242                    groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2]
5243                }
5244            }
5245        }
5246        var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
5247        var increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
5248        if (timeDiff > params.longSwipesMs) {
5249            if (!params.longSwipes) {
5250                swiper.slideTo(swiper.activeIndex);
5251                return
5252            }
5253            if (swiper.swipeDirection === "next") {
5254                if (ratio >= params.longSwipesRatio) {
5255                    swiper.slideTo(stopIndex + increment)
5256                } else {
5257                    swiper.slideTo(stopIndex)
5258                }
5259            }
5260            if (swiper.swipeDirection === "prev") {
5261                if (ratio > 1 - params.longSwipesRatio) {
5262                    swiper.slideTo(stopIndex + increment)
5263                } else {
5264                    swiper.slideTo(stopIndex)
5265                }
5266            }
5267        } else {
5268            if (!params.shortSwipes) {
5269                swiper.slideTo(swiper.activeIndex);
5270                return
5271            }
5272            var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
5273            if (!isNavButtonTarget) {
5274                if (swiper.swipeDirection === "next") {
5275                    swiper.slideTo(stopIndex + increment)
5276                }
5277                if (swiper.swipeDirection === "prev") {
5278                    swiper.slideTo(stopIndex)
5279                }
5280            } else {
5281                if (e.target === swiper.navigation.nextEl) {
5282                    swiper.slideTo(stopIndex + increment)
5283                } else {
5284                    swiper.slideTo(stopIndex)
5285                }
5286            }
5287        }
5288    }
5289
5290    function onResize() {
5291        var swiper = this;
5292        var params = swiper.params, el = swiper.el;
5293        if (el && el.offsetWidth === 0) {
5294            return
5295        }
5296        if (params.breakpoints) {
5297            swiper.setBreakpoint()
5298        }
5299        var allowSlideNext = swiper.allowSlideNext, allowSlidePrev = swiper.allowSlidePrev, snapGrid = swiper.snapGrid;
5300        swiper.allowSlideNext = true;
5301        swiper.allowSlidePrev = true;
5302        swiper.updateSize();
5303        swiper.updateSlides();
5304        swiper.updateSlidesClasses();
5305        if ((params.slidesPerView === "auto" || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {
5306            swiper.slideTo(swiper.slides.length - 1, 0, false, true)
5307        } else {
5308            swiper.slideTo(swiper.activeIndex, 0, false, true)
5309        }
5310        if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
5311            swiper.autoplay.run()
5312        }
5313        swiper.allowSlidePrev = allowSlidePrev;
5314        swiper.allowSlideNext = allowSlideNext;
5315        if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
5316            swiper.checkOverflow()
5317        }
5318    }
5319
5320    function onClick(e) {
5321        var swiper = this;
5322        if (!swiper.allowClick) {
5323            if (swiper.params.preventClicks) {
5324                e.preventDefault()
5325            }
5326            if (swiper.params.preventClicksPropagation && swiper.animating) {
5327                e.stopPropagation();
5328                e.stopImmediatePropagation()
5329            }
5330        }
5331    }
5332
5333    function onScroll() {
5334        var swiper = this;
5335        var wrapperEl = swiper.wrapperEl, rtlTranslate = swiper.rtlTranslate;
5336        swiper.previousTranslate = swiper.translate;
5337        if (swiper.isHorizontal()) {
5338            if (rtlTranslate) {
5339                swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft
5340            } else {
5341                swiper.translate = -wrapperEl.scrollLeft
5342            }
5343        } else {
5344            swiper.translate = -wrapperEl.scrollTop
5345        }
5346        if (swiper.translate === -0) {
5347            swiper.translate = 0
5348        }
5349        swiper.updateActiveIndex();
5350        swiper.updateSlidesClasses();
5351        var newProgress;
5352        var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
5353        if (translatesDiff === 0) {
5354            newProgress = 0
5355        } else {
5356            newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff
5357        }
5358        if (newProgress !== swiper.progress) {
5359            swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate)
5360        }
5361        swiper.emit("setTranslate", swiper.translate, false)
5362    }
5363
5364    var dummyEventAttached = false;
5365
5366    function dummyEventListener() {
5367    }
5368
5369    function attachEvents() {
5370        var swiper = this;
5371        var document = getDocument();
5372        var params = swiper.params, touchEvents = swiper.touchEvents, el = swiper.el, wrapperEl = swiper.wrapperEl,
5373            device = swiper.device, support = swiper.support;
5374        swiper.onTouchStart = onTouchStart.bind(swiper);
5375        swiper.onTouchMove = onTouchMove.bind(swiper);
5376        swiper.onTouchEnd = onTouchEnd.bind(swiper);
5377        if (params.cssMode) {
5378            swiper.onScroll = onScroll.bind(swiper)
5379        }
5380        swiper.onClick = onClick.bind(swiper);
5381        var capture = !!params.nested;
5382        if (!support.touch && support.pointerEvents) {
5383            el.addEventListener(touchEvents.start, swiper.onTouchStart, false);
5384            document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
5385            document.addEventListener(touchEvents.end, swiper.onTouchEnd, false)
5386        } else {
5387            if (support.touch) {
5388                var passiveListener = touchEvents.start === "touchstart" && support.passiveListener && params.passiveListeners ? {
5389                    passive: true,
5390                    capture: false
5391                } : false;
5392                el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
5393                el.addEventListener(touchEvents.move, swiper.onTouchMove, support.passiveListener ? {
5394                    passive: false,
5395                    capture: capture
5396                } : capture);
5397                el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
5398                if (touchEvents.cancel) {
5399                    el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener)
5400                }
5401                if (!dummyEventAttached) {
5402                    document.addEventListener("touchstart", dummyEventListener);
5403                    dummyEventAttached = true
5404                }
5405            }
5406            if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {
5407                el.addEventListener("mousedown", swiper.onTouchStart, false);
5408                document.addEventListener("mousemove", swiper.onTouchMove, capture);
5409                document.addEventListener("mouseup", swiper.onTouchEnd, false)
5410            }
5411        }
5412        if (params.preventClicks || params.preventClicksPropagation) {
5413            el.addEventListener("click", swiper.onClick, true)
5414        }
5415        if (params.cssMode) {
5416            wrapperEl.addEventListener("scroll", swiper.onScroll)
5417        }
5418        if (params.updateOnWindowResize) {
5419            swiper.on(device.ios || device.android ? "resize orientationchange observerUpdate" : "resize observerUpdate", onResize, true)
5420        } else {
5421            swiper.on("observerUpdate", onResize, true)
5422        }
5423    }
5424
5425    function detachEvents() {
5426        var swiper = this;
5427        var document = getDocument();
5428        var params = swiper.params, touchEvents = swiper.touchEvents, el = swiper.el, wrapperEl = swiper.wrapperEl,
5429            device = swiper.device, support = swiper.support;
5430        var capture = !!params.nested;
5431        if (!support.touch && support.pointerEvents) {
5432            el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
5433            document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
5434            document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false)
5435        } else {
5436            if (support.touch) {
5437                var passiveListener = touchEvents.start === "onTouchStart" && support.passiveListener && params.passiveListeners ? {
5438                    passive: true,
5439                    capture: false
5440                } : false;
5441                el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
5442                el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
5443                el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
5444                if (touchEvents.cancel) {
5445                    el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener)
5446                }
5447            }
5448            if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {
5449                el.removeEventListener("mousedown", swiper.onTouchStart, false);
5450                document.removeEventListener("mousemove", swiper.onTouchMove, capture);
5451                document.removeEventListener("mouseup", swiper.onTouchEnd, false)
5452            }
5453        }
5454        if (params.preventClicks || params.preventClicksPropagation) {
5455            el.removeEventListener("click", swiper.onClick, true)
5456        }
5457        if (params.cssMode) {
5458            wrapperEl.removeEventListener("scroll", swiper.onScroll)
5459        }
5460        swiper.off(device.ios || device.android ? "resize orientationchange observerUpdate" : "resize observerUpdate", onResize)
5461    }
5462
5463    var events = {attachEvents: attachEvents, detachEvents: detachEvents};
5464
5465    function setBreakpoint() {
5466        var swiper = this;
5467        var activeIndex = swiper.activeIndex, initialized = swiper.initialized,
5468            _swiper$loopedSlides = swiper.loopedSlides,
5469            loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides, params = swiper.params,
5470            $el = swiper.$el;
5471        var breakpoints = params.breakpoints;
5472        if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) {
5473            return
5474        }
5475        var breakpoint = swiper.getBreakpoint(breakpoints);
5476        if (breakpoint && swiper.currentBreakpoint !== breakpoint) {
5477            var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
5478            if (breakpointOnlyParams) {
5479                ["slidesPerView", "spaceBetween", "slidesPerGroup", "slidesPerGroupSkip", "slidesPerColumn"].forEach(function (param) {
5480                    var paramValue = breakpointOnlyParams[param];
5481                    if (typeof paramValue === "undefined") {
5482                        return
5483                    }
5484                    if (param === "slidesPerView" && (paramValue === "AUTO" || paramValue === "auto")) {
5485                        breakpointOnlyParams[param] = "auto"
5486                    } else {
5487                        if (param === "slidesPerView") {
5488                            breakpointOnlyParams[param] = parseFloat(paramValue)
5489                        } else {
5490                            breakpointOnlyParams[param] = parseInt(paramValue, 10)
5491                        }
5492                    }
5493                })
5494            }
5495            var breakpointParams = breakpointOnlyParams || swiper.originalParams;
5496            var wasMultiRow = params.slidesPerColumn > 1;
5497            var isMultiRow = breakpointParams.slidesPerColumn > 1;
5498            if (wasMultiRow && !isMultiRow) {
5499                $el.removeClass(params.containerModifierClass + "multirow " + params.containerModifierClass + "multirow-column");
5500                swiper.emitContainerClasses()
5501            } else {
5502                if (!wasMultiRow && isMultiRow) {
5503                    $el.addClass(params.containerModifierClass + "multirow");
5504                    if (breakpointParams.slidesPerColumnFill === "column") {
5505                        $el.addClass(params.containerModifierClass + "multirow-column")
5506                    }
5507                    swiper.emitContainerClasses()
5508                }
5509            }
5510            var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
5511            var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
5512            if (directionChanged && initialized) {
5513                swiper.changeDirection()
5514            }
5515            extend$1(swiper.params, breakpointParams);
5516            extend$1(swiper, {
5517                allowTouchMove: swiper.params.allowTouchMove,
5518                allowSlideNext: swiper.params.allowSlideNext,
5519                allowSlidePrev: swiper.params.allowSlidePrev
5520            });
5521            swiper.currentBreakpoint = breakpoint;
5522            swiper.emit("_beforeBreakpoint", breakpointParams);
5523            if (needsReLoop && initialized) {
5524                swiper.loopDestroy();
5525                swiper.loopCreate();
5526                swiper.updateSlides();
5527                swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false)
5528            }
5529            swiper.emit("breakpoint", breakpointParams)
5530        }
5531    }
5532
5533    function getBreakpoints(breakpoints) {
5534        var window = getWindow();
5535        if (!breakpoints) {
5536            return undefined
5537        }
5538        var breakpoint = false;
5539        var points = Object.keys(breakpoints).map(function (point) {
5540            if (typeof point === "string" && point.indexOf("@") === 0) {
5541                var minRatio = parseFloat(point.substr(1));
5542                var value = window.innerHeight * minRatio;
5543                return {value: value, point: point}
5544            }
5545            return {value: point, point: point}
5546        });
5547        points.sort(function (a, b) {
5548            return parseInt(a.value, 10) - parseInt(b.value, 10)
5549        });
5550        for (var i = 0; i < points.length; i += 1) {
5551            var _points$i = points[i], point = _points$i.point, value = _points$i.value;
5552            if (value <= window.innerWidth) {
5553                breakpoint = point
5554            }
5555        }
5556        return breakpoint || "max"
5557    }
5558
5559    var breakpoints = {setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoints};
5560
5561    function addClasses() {
5562        var swiper = this;
5563        var classNames = swiper.classNames, params = swiper.params, rtl = swiper.rtl, $el = swiper.$el,
5564            device = swiper.device;
5565        var suffixes = [];
5566        suffixes.push("initialized");
5567        suffixes.push(params.direction);
5568        if (params.freeMode) {
5569            suffixes.push("free-mode")
5570        }
5571        if (params.autoHeight) {
5572            suffixes.push("autoheight")
5573        }
5574        if (rtl) {
5575            suffixes.push("rtl")
5576        }
5577        if (params.slidesPerColumn > 1) {
5578            suffixes.push("multirow");
5579            if (params.slidesPerColumnFill === "column") {
5580                suffixes.push("multirow-column")
5581            }
5582        }
5583        if (device.android) {
5584            suffixes.push("android")
5585        }
5586        if (device.ios) {
5587            suffixes.push("ios")
5588        }
5589        if (params.cssMode) {
5590            suffixes.push("css-mode")
5591        }
5592        suffixes.forEach(function (suffix) {
5593            classNames.push(params.containerModifierClass + suffix)
5594        });
5595        $el.addClass(classNames.join(" "));
5596        swiper.emitContainerClasses()
5597    }
5598
5599    function removeClasses() {
5600        var swiper = this;
5601        var $el = swiper.$el, classNames = swiper.classNames;
5602        $el.removeClass(classNames.join(" "));
5603        swiper.emitContainerClasses()
5604    }
5605
5606    var classes = {addClasses: addClasses, removeClasses: removeClasses};
5607
5608    function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {
5609        var window = getWindow();
5610        var image;
5611
5612        function onReady() {
5613            if (callback) {
5614                callback()
5615            }
5616        }
5617
5618        var isPicture = $(imageEl).parent("picture")[0];
5619        if (!isPicture && (!imageEl.complete || !checkForComplete)) {
5620            if (src) {
5621                image = new window.Image();
5622                image.onload = onReady;
5623                image.onerror = onReady;
5624                if (sizes) {
5625                    image.sizes = sizes
5626                }
5627                if (srcset) {
5628                    image.srcset = srcset
5629                }
5630                if (src) {
5631                    image.src = src
5632                }
5633            } else {
5634                onReady()
5635            }
5636        } else {
5637            onReady()
5638        }
5639    }
5640
5641    function preloadImages() {
5642        var swiper = this;
5643        swiper.imagesToLoad = swiper.$el.find("img");
5644
5645        function onReady() {
5646            if (typeof swiper === "undefined" || swiper === null || !swiper || swiper.destroyed) {
5647                return
5648            }
5649            if (swiper.imagesLoaded !== undefined) {
5650                swiper.imagesLoaded += 1
5651            }
5652            if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
5653                if (swiper.params.updateOnImagesReady) {
5654                    swiper.update()
5655                }
5656                swiper.emit("imagesReady")
5657            }
5658        }
5659
5660        for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {
5661            var imageEl = swiper.imagesToLoad[i];
5662            swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute("src"), imageEl.srcset || imageEl.getAttribute("srcset"), imageEl.sizes || imageEl.getAttribute("sizes"), true, onReady)
5663        }
5664    }
5665
5666    var images = {loadImage: loadImage, preloadImages: preloadImages};
5667
5668    function checkOverflow() {
5669        var swiper = this;
5670        var params = swiper.params;
5671        var wasLocked = swiper.isLocked;
5672        var lastSlidePosition = swiper.slides.length > 0 && params.slidesOffsetBefore + params.spaceBetween * (swiper.slides.length - 1) + swiper.slides[0].offsetWidth * swiper.slides.length;
5673        if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {
5674            swiper.isLocked = lastSlidePosition <= swiper.size
5675        } else {
5676            swiper.isLocked = swiper.snapGrid.length === 1
5677        }
5678        swiper.allowSlideNext = !swiper.isLocked;
5679        swiper.allowSlidePrev = !swiper.isLocked;
5680        if (wasLocked !== swiper.isLocked) {
5681            swiper.emit(swiper.isLocked ? "lock" : "unlock")
5682        }
5683        if (wasLocked && wasLocked !== swiper.isLocked) {
5684            swiper.isEnd = false;
5685            if (swiper.navigation) {
5686                swiper.navigation.update()
5687            }
5688        }
5689    }
5690
5691    var checkOverflow$1 = {checkOverflow: checkOverflow};
5692    var defaults = {
5693        init: true,
5694        direction: "horizontal",
5695        touchEventsTarget: "container",
5696        initialSlide: 0,
5697        speed: 300,
5698        cssMode: false,
5699        updateOnWindowResize: true,
5700        nested: false,
5701        width: null,
5702        height: null,
5703        preventInteractionOnTransition: false,
5704        userAgent: null,
5705        url: null,
5706        edgeSwipeDetection: false,
5707        edgeSwipeThreshold: 20,
5708        freeMode: false,
5709        freeModeMomentum: true,
5710        freeModeMomentumRatio: 1,
5711        freeModeMomentumBounce: true,
5712        freeModeMomentumBounceRatio: 1,
5713        freeModeMomentumVelocityRatio: 1,
5714        freeModeSticky: false,
5715        freeModeMinimumVelocity: 0.02,
5716        autoHeight: false,
5717        setWrapperSize: false,
5718        virtualTranslate: false,
5719        effect: "slide",
5720        breakpoints: undefined,
5721        spaceBetween: 0,
5722        slidesPerView: 1,
5723        slidesPerColumn: 1,
5724        slidesPerColumnFill: "column",
5725        slidesPerGroup: 1,
5726        slidesPerGroupSkip: 0,
5727        centeredSlides: false,
5728        centeredSlidesBounds: false,
5729        slidesOffsetBefore: 0,
5730        slidesOffsetAfter: 0,
5731        normalizeSlideIndex: true,
5732        centerInsufficientSlides: false,
5733        watchOverflow: false,
5734        roundLengths: false,
5735        touchRatio: 1,
5736        touchAngle: 45,
5737        simulateTouch: true,
5738        shortSwipes: true,
5739        longSwipes: true,
5740        longSwipesRatio: 0.5,
5741        longSwipesMs: 300,
5742        followFinger: true,
5743        allowTouchMove: true,
5744        threshold: 0,
5745        touchMoveStopPropagation: false,
5746        touchStartPreventDefault: true,
5747        touchStartForcePreventDefault: false,
5748        touchReleaseOnEdges: false,
5749        uniqueNavElements: true,
5750        resistance: true,
5751        resistanceRatio: 0.85,
5752        watchSlidesProgress: false,
5753        watchSlidesVisibility: false,
5754        grabCursor: false,
5755        preventClicks: true,
5756        preventClicksPropagation: true,
5757        slideToClickedSlide: false,
5758        preloadImages: true,
5759        updateOnImagesReady: true,
5760        loop: false,
5761        loopAdditionalSlides: 0,
5762        loopedSlides: null,
5763        loopFillGroupWithBlank: false,
5764        loopPreventsSlide: true,
5765        allowSlidePrev: true,
5766        allowSlideNext: true,
5767        swipeHandler: null,
5768        noSwiping: true,
5769        noSwipingClass: "swiper-no-swiping",
5770        noSwipingSelector: null,
5771        passiveListeners: true,
5772        containerModifierClass: "swiper-container-",
5773        slideClass: "swiper-slide",
5774        slideBlankClass: "swiper-slide-invisible-blank",
5775        slideActiveClass: "swiper-slide-active",
5776        slideDuplicateActiveClass: "swiper-slide-duplicate-active",
5777        slideVisibleClass: "swiper-slide-visible",
5778        slideDuplicateClass: "swiper-slide-duplicate",
5779        slideNextClass: "swiper-slide-next",
5780        slideDuplicateNextClass: "swiper-slide-duplicate-next",
5781        slidePrevClass: "swiper-slide-prev",
5782        slideDuplicatePrevClass: "swiper-slide-duplicate-prev",
5783        wrapperClass: "swiper-wrapper",
5784        runCallbacksOnInit: true,
5785        _emitClasses: false
5786    };
5787    var prototypes = {
5788        modular: modular,
5789        eventsEmitter: eventsEmitter,
5790        update: update,
5791        translate: translate,
5792        transition: transition$1,
5793        slide: slide,
5794        loop: loop,
5795        grabCursor: grabCursor,
5796        manipulation: manipulation,
5797        events: events,
5798        breakpoints: breakpoints,
5799        checkOverflow: checkOverflow$1,
5800        classes: classes,
5801        images: images
5802    };
5803    var extendedDefaults = {};
5804    var Swiper = function () {
5805        function Swiper() {
5806            var el;
5807            var params;
5808            for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
5809                args[_key] = arguments[_key]
5810            }
5811            if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {
5812                params = args[0]
5813            } else {
5814                el = args[0];
5815                params = args[1]
5816            }
5817            if (!params) {
5818                params = {}
5819            }
5820            params = extend$1({}, params);
5821            if (el && !params.el) {
5822                params.el = el
5823            }
5824            var swiper = this;
5825            swiper.support = getSupport();
5826            swiper.device = getDevice({userAgent: params.userAgent});
5827            swiper.browser = getBrowser();
5828            swiper.eventsListeners = {};
5829            swiper.eventsAnyListeners = [];
5830            if (typeof swiper.modules === "undefined") {
5831                swiper.modules = {}
5832            }
5833            Object.keys(swiper.modules).forEach(function (moduleName) {
5834                var module = swiper.modules[moduleName];
5835                if (module.params) {
5836                    var moduleParamName = Object.keys(module.params)[0];
5837                    var moduleParams = module.params[moduleParamName];
5838                    if (typeof moduleParams !== "object" || moduleParams === null) {
5839                        return
5840                    }
5841                    if (!(moduleParamName in params && "enabled" in moduleParams)) {
5842                        return
5843                    }
5844                    if (params[moduleParamName] === true) {
5845                        params[moduleParamName] = {enabled: true}
5846                    }
5847                    if (typeof params[moduleParamName] === "object" && !("enabled" in params[moduleParamName])) {
5848                        params[moduleParamName].enabled = true
5849                    }
5850                    if (!params[moduleParamName]) {
5851                        params[moduleParamName] = {enabled: false}
5852                    }
5853                }
5854            });
5855            var swiperParams = extend$1({}, defaults);
5856            swiper.useParams(swiperParams);
5857            swiper.params = extend$1({}, swiperParams, extendedDefaults, params);
5858            swiper.originalParams = extend$1({}, swiper.params);
5859            swiper.passedParams = extend$1({}, params);
5860            if (swiper.params && swiper.params.on) {
5861                Object.keys(swiper.params.on).forEach(function (eventName) {
5862                    swiper.on(eventName, swiper.params.on[eventName])
5863                })
5864            }
5865            if (swiper.params && swiper.params.onAny) {
5866                swiper.onAny(swiper.params.onAny)
5867            }
5868            swiper.$ = $;
5869            var $el = $(swiper.params.el);
5870            el = $el[0];
5871            if (!el) {
5872                return undefined
5873            }
5874            if ($el.length > 1) {
5875                var swipers = [];
5876                $el.each(function (containerEl) {
5877                    var newParams = extend$1({}, params, {el: containerEl});
5878                    swipers.push(new Swiper(newParams))
5879                });
5880                return swipers
5881            }
5882            el.swiper = swiper;
5883            var $wrapperEl;
5884            if (el && el.shadowRoot && el.shadowRoot.querySelector) {
5885                $wrapperEl = $(el.shadowRoot.querySelector("." + swiper.params.wrapperClass));
5886                $wrapperEl.children = function (options) {
5887                    return $el.children(options)
5888                }
5889            } else {
5890                $wrapperEl = $el.children("." + swiper.params.wrapperClass)
5891            }
5892            extend$1(swiper, {
5893                $el: $el,
5894                el: el,
5895                $wrapperEl: $wrapperEl,
5896                wrapperEl: $wrapperEl[0],
5897                classNames: [],
5898                slides: $(),
5899                slidesGrid: [],
5900                snapGrid: [],
5901                slidesSizesGrid: [],
5902                isHorizontal: function isHorizontal() {
5903                    return swiper.params.direction === "horizontal"
5904                },
5905                isVertical: function isVertical() {
5906                    return swiper.params.direction === "vertical"
5907                },
5908                rtl: el.dir.toLowerCase() === "rtl" || $el.css("direction") === "rtl",
5909                rtlTranslate: swiper.params.direction === "horizontal" && (el.dir.toLowerCase() === "rtl" || $el.css("direction") === "rtl"),
5910                wrongRTL: $wrapperEl.css("display") === "-webkit-box",
5911                activeIndex: 0,
5912                realIndex: 0,
5913                isBeginning: true,
5914                isEnd: false,
5915                translate: 0,
5916                previousTranslate: 0,
5917                progress: 0,
5918                velocity: 0,
5919                animating: false,
5920                allowSlideNext: swiper.params.allowSlideNext,
5921                allowSlidePrev: swiper.params.allowSlidePrev,
5922                touchEvents: function touchEvents() {
5923                    var touch = ["touchstart", "touchmove", "touchend", "touchcancel"];
5924                    var desktop = ["mousedown", "mousemove", "mouseup"];
5925                    if (swiper.support.pointerEvents) {
5926                        desktop = ["pointerdown", "pointermove", "pointerup"]
5927                    }
5928                    swiper.touchEventsTouch = {start: touch[0], move: touch[1], end: touch[2], cancel: touch[3]};
5929                    swiper.touchEventsDesktop = {start: desktop[0], move: desktop[1], end: desktop[2]};
5930                    return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop
5931                }(),
5932                touchEventsData: {
5933                    isTouched: undefined,
5934                    isMoved: undefined,
5935                    allowTouchCallbacks: undefined,
5936                    touchStartTime: undefined,
5937                    isScrolling: undefined,
5938                    currentTranslate: undefined,
5939                    startTranslate: undefined,
5940                    allowThresholdMove: undefined,
5941                    formElements: "input, select, option, textarea, button, video, label",
5942                    lastClickTime: now(),
5943                    clickTimeout: undefined,
5944                    velocities: [],
5945                    allowMomentumBounce: undefined,
5946                    isTouchEvent: undefined,
5947                    startMoving: undefined
5948                },
5949                allowClick: true,
5950                allowTouchMove: swiper.params.allowTouchMove,
5951                touches: {startX: 0, startY: 0, currentX: 0, currentY: 0, diff: 0},
5952                imagesToLoad: [],
5953                imagesLoaded: 0
5954            });
5955            swiper.useModules();
5956            swiper.emit("_swiper");
5957            if (swiper.params.init) {
5958                swiper.init()
5959            }
5960            return swiper
5961        }
5962
5963        var _proto = Swiper.prototype;
5964        _proto.emitContainerClasses = function emitContainerClasses() {
5965            var swiper = this;
5966            if (!swiper.params._emitClasses || !swiper.el) {
5967                return
5968            }
5969            var classes = swiper.el.className.split(" ").filter(function (className) {
5970                return className.indexOf("swiper-container") === 0 || className.indexOf(swiper.params.containerModifierClass) === 0
5971            });
5972            swiper.emit("_containerClasses", classes.join(" "))
5973        };
5974        _proto.getSlideClasses = function getSlideClasses(slideEl) {
5975            var swiper = this;
5976            return slideEl.className.split(" ").filter(function (className) {
5977                return className.indexOf("swiper-slide") === 0 || className.indexOf(swiper.params.slideClass) === 0
5978            }).join(" ")
5979        };
5980        _proto.emitSlidesClasses = function emitSlidesClasses() {
5981            var swiper = this;
5982            if (!swiper.params._emitClasses || !swiper.el) {
5983                return
5984            }
5985            swiper.slides.each(function (slideEl) {
5986                var classNames = swiper.getSlideClasses(slideEl);
5987                swiper.emit("_slideClass", slideEl, classNames)
5988            })
5989        };
5990        _proto.slidesPerViewDynamic = function slidesPerViewDynamic() {
5991            var swiper = this;
5992            var params = swiper.params, slides = swiper.slides, slidesGrid = swiper.slidesGrid,
5993                swiperSize = swiper.size, activeIndex = swiper.activeIndex;
5994            var spv = 1;
5995            if (params.centeredSlides) {
5996                var slideSize = slides[activeIndex].swiperSlideSize;
5997                var breakLoop;
5998                for (var i = activeIndex + 1; i < slides.length; i += 1) {
5999                    if (slides[i] && !breakLoop) {
6000                        slideSize += slides[i].swiperSlideSize;
6001                        spv += 1;
6002                        if (slideSize > swiperSize) {
6003                            breakLoop = true
6004                        }
6005                    }
6006                }
6007                for (var _i = activeIndex - 1; _i >= 0; _i -= 1) {
6008                    if (slides[_i] && !breakLoop) {
6009                        slideSize += slides[_i].swiperSlideSize;
6010                        spv += 1;
6011                        if (slideSize > swiperSize) {
6012                            breakLoop = true
6013                        }
6014                    }
6015                }
6016            } else {
6017                for (var _i2 = activeIndex + 1; _i2 < slides.length; _i2 += 1) {
6018                    if (slidesGrid[_i2] - slidesGrid[activeIndex] < swiperSize) {
6019                        spv += 1
6020                    }
6021                }
6022            }
6023            return spv
6024        };
6025        _proto.update = function update() {
6026            var swiper = this;
6027            if (!swiper || swiper.destroyed) {
6028                return
6029            }
6030            var snapGrid = swiper.snapGrid, params = swiper.params;
6031            if (params.breakpoints) {
6032                swiper.setBreakpoint()
6033            }
6034            swiper.updateSize();
6035            swiper.updateSlides();
6036            swiper.updateProgress();
6037            swiper.updateSlidesClasses();
6038
6039            function setTranslate() {
6040                var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
6041                var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
6042                swiper.setTranslate(newTranslate);
6043                swiper.updateActiveIndex();
6044                swiper.updateSlidesClasses()
6045            }
6046
6047            var translated;
6048            if (swiper.params.freeMode) {
6049                setTranslate();
6050                if (swiper.params.autoHeight) {
6051                    swiper.updateAutoHeight()
6052                }
6053            } else {
6054                if ((swiper.params.slidesPerView === "auto" || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
6055                    translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true)
6056                } else {
6057                    translated = swiper.slideTo(swiper.activeIndex, 0, false, true)
6058                }
6059                if (!translated) {
6060                    setTranslate()
6061                }
6062            }
6063            if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
6064                swiper.checkOverflow()
6065            }
6066            swiper.emit("update")
6067        };
6068        _proto.changeDirection = function changeDirection(newDirection, needUpdate) {
6069            if (needUpdate === void 0) {
6070                needUpdate = true
6071            }
6072            var swiper = this;
6073            var currentDirection = swiper.params.direction;
6074            if (!newDirection) {
6075                newDirection = currentDirection === "horizontal" ? "vertical" : "horizontal"
6076            }
6077            if (newDirection === currentDirection || newDirection !== "horizontal" && newDirection !== "vertical") {
6078                return swiper
6079            }
6080            swiper.$el.removeClass("" + swiper.params.containerModifierClass + currentDirection).addClass("" + swiper.params.containerModifierClass + newDirection);
6081            swiper.emitContainerClasses();
6082            swiper.params.direction = newDirection;
6083            swiper.slides.each(function (slideEl) {
6084                if (newDirection === "vertical") {
6085                    slideEl.style.width = ""
6086                } else {
6087                    slideEl.style.height = ""
6088                }
6089            });
6090            swiper.emit("changeDirection");
6091            if (needUpdate) {
6092                swiper.update()
6093            }
6094            return swiper
6095        };
6096        _proto.init = function init() {
6097            var swiper = this;
6098            if (swiper.initialized) {
6099                return
6100            }
6101            swiper.emit("beforeInit");
6102            if (swiper.params.breakpoints) {
6103                swiper.setBreakpoint()
6104            }
6105            swiper.addClasses();
6106            if (swiper.params.loop) {
6107                swiper.loopCreate()
6108            }
6109            swiper.updateSize();
6110            swiper.updateSlides();
6111            if (swiper.params.watchOverflow) {
6112                swiper.checkOverflow()
6113            }
6114            if (swiper.params.grabCursor) {
6115                swiper.setGrabCursor()
6116            }
6117            if (swiper.params.preloadImages) {
6118                swiper.preloadImages()
6119            }
6120            if (swiper.params.loop) {
6121                swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit)
6122            } else {
6123                swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit)
6124            }
6125            swiper.attachEvents();
6126            swiper.initialized = true;
6127            swiper.emit("init");
6128            swiper.emit("afterInit")
6129        };
6130        _proto.destroy = function destroy(deleteInstance, cleanStyles) {
6131            if (deleteInstance === void 0) {
6132                deleteInstance = true
6133            }
6134            if (cleanStyles === void 0) {
6135                cleanStyles = true
6136            }
6137            var swiper = this;
6138            var params = swiper.params, $el = swiper.$el, $wrapperEl = swiper.$wrapperEl, slides = swiper.slides;
6139            if (typeof swiper.params === "undefined" || swiper.destroyed) {
6140                return null
6141            }
6142            swiper.emit("beforeDestroy");
6143            swiper.initialized = false;
6144            swiper.detachEvents();
6145            if (params.loop) {
6146                swiper.loopDestroy()
6147            }
6148            if (cleanStyles) {
6149                swiper.removeClasses();
6150                $el.removeAttr("style");
6151                $wrapperEl.removeAttr("style");
6152                if (slides && slides.length) {
6153                    slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")
6154                }
6155            }
6156            swiper.emit("destroy");
6157            Object.keys(swiper.eventsListeners).forEach(function (eventName) {
6158                swiper.off(eventName)
6159            });
6160            if (deleteInstance !== false) {
6161                swiper.$el[0].swiper = null;
6162                deleteProps(swiper)
6163            }
6164            swiper.destroyed = true;
6165            return null
6166        };
6167        Swiper.extendDefaults = function extendDefaults(newDefaults) {
6168            extend$1(extendedDefaults, newDefaults)
6169        };
6170        Swiper.installModule = function installModule(module) {
6171            if (!Swiper.prototype.modules) {
6172                Swiper.prototype.modules = {}
6173            }
6174            var name = module.name || Object.keys(Swiper.prototype.modules).length + "_" + now();
6175            Swiper.prototype.modules[name] = module
6176        };
6177        Swiper.use = function use(module) {
6178            if (Array.isArray(module)) {
6179                module.forEach(function (m) {
6180                    return Swiper.installModule(m)
6181                });
6182                return Swiper
6183            }
6184            Swiper.installModule(module);
6185            return Swiper
6186        };
6187        _createClass(Swiper, null, [{
6188            key: "extendedDefaults", get: function get() {
6189                return extendedDefaults
6190            }
6191        }, {
6192            key: "defaults", get: function get() {
6193                return defaults
6194            }
6195        }]);
6196        return Swiper
6197    }();
6198    Object.keys(prototypes).forEach(function (prototypeGroup) {
6199        Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {
6200            Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]
6201        })
6202    });
6203    Swiper.use([Resize, Observer$1]);
6204    var Navigation = {
6205        update: function update() {
6206            var swiper = this;
6207            var params = swiper.params.navigation;
6208            if (swiper.params.loop) {
6209                return
6210            }
6211            var _swiper$navigation = swiper.navigation, $nextEl = _swiper$navigation.$nextEl,
6212                $prevEl = _swiper$navigation.$prevEl;
6213            if ($prevEl && $prevEl.length > 0) {
6214                if (swiper.isBeginning) {
6215                    $prevEl.addClass(params.disabledClass)
6216                } else {
6217                    $prevEl.removeClass(params.disabledClass)
6218                }
6219                $prevEl[swiper.params.watchOverflow && swiper.isLocked ? "addClass" : "removeClass"](params.lockClass)
6220            }
6221            if ($nextEl && $nextEl.length > 0) {
6222                if (swiper.isEnd) {
6223                    $nextEl.addClass(params.disabledClass)
6224                } else {
6225                    $nextEl.removeClass(params.disabledClass)
6226                }
6227                $nextEl[swiper.params.watchOverflow && swiper.isLocked ? "addClass" : "removeClass"](params.lockClass)
6228            }
6229        }, onPrevClick: function onPrevClick(e) {
6230            var swiper = this;
6231            e.preventDefault();
6232            if (swiper.isBeginning && !swiper.params.loop) {
6233                return
6234            }
6235            swiper.slidePrev()
6236        }, onNextClick: function onNextClick(e) {
6237            var swiper = this;
6238            e.preventDefault();
6239            if (swiper.isEnd && !swiper.params.loop) {
6240                return
6241            }
6242            swiper.slideNext()
6243        }, init: function init() {
6244            var swiper = this;
6245            var params = swiper.params.navigation;
6246            if (!(params.nextEl || params.prevEl)) {
6247                return
6248            }
6249            var $nextEl;
6250            var $prevEl;
6251            if (params.nextEl) {
6252                $nextEl = $(params.nextEl);
6253                if (swiper.params.uniqueNavElements && typeof params.nextEl === "string" && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) {
6254                    $nextEl = swiper.$el.find(params.nextEl)
6255                }
6256            }
6257            if (params.prevEl) {
6258                $prevEl = $(params.prevEl);
6259                if (swiper.params.uniqueNavElements && typeof params.prevEl === "string" && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) {
6260                    $prevEl = swiper.$el.find(params.prevEl)
6261                }
6262            }
6263            if ($nextEl && $nextEl.length > 0) {
6264                $nextEl.on("click", swiper.navigation.onNextClick)
6265            }
6266            if ($prevEl && $prevEl.length > 0) {
6267                $prevEl.on("click", swiper.navigation.onPrevClick)
6268            }
6269            extend$1(swiper.navigation, {
6270                $nextEl: $nextEl,
6271                nextEl: $nextEl && $nextEl[0],
6272                $prevEl: $prevEl,
6273                prevEl: $prevEl && $prevEl[0]
6274            })
6275        }, destroy: function destroy() {
6276            var swiper = this;
6277            var _swiper$navigation2 = swiper.navigation, $nextEl = _swiper$navigation2.$nextEl,
6278                $prevEl = _swiper$navigation2.$prevEl;
6279            if ($nextEl && $nextEl.length) {
6280                $nextEl.off("click", swiper.navigation.onNextClick);
6281                $nextEl.removeClass(swiper.params.navigation.disabledClass)
6282            }
6283            if ($prevEl && $prevEl.length) {
6284                $prevEl.off("click", swiper.navigation.onPrevClick);
6285                $prevEl.removeClass(swiper.params.navigation.disabledClass)
6286            }
6287        }
6288    };
6289    var Navigation$1 = {
6290        name: "navigation",
6291        params: {
6292            navigation: {
6293                nextEl: null,
6294                prevEl: null,
6295                hideOnClick: false,
6296                disabledClass: "swiper-button-disabled",
6297                hiddenClass: "swiper-button-hidden",
6298                lockClass: "swiper-button-lock"
6299            }
6300        },
6301        create: function create() {
6302            var swiper = this;
6303            bindModuleMethods(swiper, {navigation: _extends({}, Navigation)})
6304        },
6305        on: {
6306            init: function init(swiper) {
6307                swiper.navigation.init();
6308                swiper.navigation.update()
6309            }, toEdge: function toEdge(swiper) {
6310                swiper.navigation.update()
6311            }
6311, fromEdge: function fromEdge(swiper) {
6312                swiper.navigation.update()
6313            }, destroy: function destroy(swiper) {
6314                swiper.navigation.destroy()
6315            }, click: function click(swiper, e) {
6316                var _swiper$navigation3 = swiper.navigation, $nextEl = _swiper$navigation3.$nextEl,
6317                    $prevEl = _swiper$navigation3.$prevEl;
6318                if (swiper.params.navigation.hideOnClick && !$(e.target).is($prevEl) && !$(e.target).is($nextEl)) {
6319                    var isHidden;
6320                    if ($nextEl) {
6321                        isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass)
6322                    } else {
6323                        if ($prevEl) {
6324                            isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass)
6325                        }
6326                    }
6327                    if (isHidden === true) {
6328                        swiper.emit("navigationShow")
6329                    } else {
6330                        swiper.emit("navigationHide")
6331                    }
6332                    if ($nextEl) {
6333                        $nextEl.toggleClass(swiper.params.navigation.hiddenClass)
6334                    }
6335                    if ($prevEl) {
6336                        $prevEl.toggleClass(swiper.params.navigation.hiddenClass)
6337                    }
6338                }
6339            }
6340        }
6341    };
6342    var Pagination = {
6343        update: function update() {
6344            var swiper = this;
6345            var rtl = swiper.rtl;
6346            var params = swiper.params.pagination;
6347            if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) {
6348                return
6349            }
6350            var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
6351            var $el = swiper.pagination.$el;
6352            var current;
6353            var total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
6354            if (swiper.params.loop) {
6355                current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);
6356                if (current > slidesLength - 1 - swiper.loopedSlides * 2) {
6357                    current -= slidesLength - swiper.loopedSlides * 2
6358                }
6359                if (current > total - 1) {
6360                    current -= total
6361                }
6362                if (current < 0 && swiper.params.paginationType !== "bullets") {
6363                    current = total + current
6364                }
6365            } else {
6366                if (typeof swiper.snapIndex !== "undefined") {
6367                    current = swiper.snapIndex
6368                } else {
6369                    current = swiper.activeIndex || 0
6370                }
6371            }
6372            if (params.type === "bullets" && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
6373                var bullets = swiper.pagination.bullets;
6374                var firstIndex;
6375                var lastIndex;
6376                var midIndex;
6377                if (params.dynamicBullets) {
6378                    swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? "outerWidth" : "outerHeight"](true);
6379                    $el.css(swiper.isHorizontal() ? "width" : "height", swiper.pagination.bulletSize * (params.dynamicMainBullets + 4) + "px");
6380                    if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
6381                        swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex;
6382                        if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) {
6383                            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1
6384                        } else {
6385                            if (swiper.pagination.dynamicBulletIndex < 0) {
6386                                swiper.pagination.dynamicBulletIndex = 0
6387                            }
6388                        }
6389                    }
6390                    firstIndex = current - swiper.pagination.dynamicBulletIndex;
6391                    lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
6392                    midIndex = (lastIndex + firstIndex) / 2
6393                }
6394                bullets.removeClass(params.bulletActiveClass + " " + params.bulletActiveClass + "-next " + params.bulletActiveClass + "-next-next " + params.bulletActiveClass + "-prev " + params.bulletActiveClass + "-prev-prev " + params.bulletActiveClass + "-main");
6395                if ($el.length > 1) {
6396                    bullets.each(function (bullet) {
6397                        var $bullet = $(bullet);
6398                        var bulletIndex = $bullet.index();
6399                        if (bulletIndex === current) {
6400                            $bullet.addClass(params.bulletActiveClass)
6401                        }
6402                        if (params.dynamicBullets) {
6403                            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
6404                                $bullet.addClass(params.bulletActiveClass + "-main")
6405                            }
6406                            if (bulletIndex === firstIndex) {
6407                                $bullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev")
6408                            }
6409                            if (bulletIndex === lastIndex) {
6410                                $bullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next")
6411                            }
6412                        }
6413                    })
6414                } else {
6415                    var $bullet = bullets.eq(current);
6416                    var bulletIndex = $bullet.index();
6417                    $bullet.addClass(params.bulletActiveClass);
6418                    if (params.dynamicBullets) {
6419                        var $firstDisplayedBullet = bullets.eq(firstIndex);
6420                        var $lastDisplayedBullet = bullets.eq(lastIndex);
6421                        for (var i = firstIndex; i <= lastIndex; i += 1) {
6422                            bullets.eq(i).addClass(params.bulletActiveClass + "-main")
6423                        }
6424                        if (swiper.params.loop) {
6425                            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {
6426                                for (var _i = params.dynamicMainBullets; _i >= 0; _i -= 1) {
6427                                    bullets.eq(bullets.length - _i).addClass(params.bulletActiveClass + "-main")
6428                                }
6429                                bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(params.bulletActiveClass + "-prev")
6430                            } else {
6431                                $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev");
6432                                $lastDisplayedBullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next")
6433                            }
6434                        } else {
6435                            $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev");
6436                            $lastDisplayedBullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next")
6437                        }
6438                    }
6439                }
6440                if (params.dynamicBullets) {
6441                    var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
6442                    var bulletsOffset = (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 - midIndex * swiper.pagination.bulletSize;
6443                    var offsetProp = rtl ? "right" : "left";
6444                    bullets.css(swiper.isHorizontal() ? offsetProp : "top", bulletsOffset + "px")
6445                }
6446            }
6447            if (params.type === "fraction") {
6448                $el.find("." + params.currentClass).text(params.formatFractionCurrent(current + 1));
6449                $el.find("." + params.totalClass).text(params.formatFractionTotal(total))
6450            }
6451            if (params.type === "progressbar") {
6452                var progressbarDirection;
6453                if (params.progressbarOpposite) {
6454                    progressbarDirection = swiper.isHorizontal() ? "vertical" : "horizontal"
6455                } else {
6456                    progressbarDirection = swiper.isHorizontal() ? "horizontal" : "vertical"
6457                }
6458                var scale = (current + 1) / total;
6459                var scaleX = 1;
6460                var scaleY = 1;
6461                if (progressbarDirection === "horizontal") {
6462                    scaleX = scale
6463                } else {
6464                    scaleY = scale
6465                }
6466                $el.find("." + params.progressbarFillClass).transform("translate3d(0,
64660,0) scaleX(" + scaleX + ") scaleY(" + scaleY + ")").transition(swiper.params.speed)
6467            }
6468            if (params.type === "custom" && params.renderCustom) {
6469                $el.html(params.renderCustom(swiper, current + 1, total));
6470                swiper.emit("paginationRender", $el[0])
6471            } else {
6472                swiper.emit("paginationUpdate", $el[0])
6473            }
6474            $el[swiper.params.watchOverflow && swiper.isLocked ? "addClass" : "removeClass"](params.lockClass)
6475        }, render: function render() {
6476            var swiper = this;
6477            var params = swiper.params.pagination;
6478            if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) {
6479                return
6480            }
6481            var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
6482            var $el = swiper.pagination.$el;
6483            var paginationHTML = "";
6484            if (params.type === "bullets") {
6485                var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
6486                for (var i = 0; i < numberOfBullets; i += 1) {
6487                    if (params.renderBullet) {
6488                        paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass)
6489                    } else {
6490                        paginationHTML += "<" + params.bulletElement + ' class="' + params.bulletClass + '"></' + params.bulletElement + ">"
6491                    }
6492                }
6493                $el.html(paginationHTML);
6494                swiper.pagination.bullets = $el.find("." + params.bulletClass.replace(/ /g, "."))
6495            }
6496            if (params.type === "fraction") {
6497                if (params.renderFraction) {
6498                    paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass)
6499                } else {
6500                    paginationHTML = '<span class="' + params.currentClass + '"></span> / ' + ('<span class="' + params.totalClass + '"></span>')
6501                }
6502                $el.html(paginationHTML)
6503            }
6504            if (params.type === "progressbar") {
6505                if (params.renderProgressbar) {
6506                    paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass)
6507                } else {
6508                    paginationHTML = '<span class="' + params.progressbarFillClass + '"></span>'
6509                }
6510                $el.html(paginationHTML)
6511            }
6512            if (params.type !== "custom") {
6513                swiper.emit("paginationRender", swiper.pagination.$el[0])
6514            }
6515        }, init: function init() {
6516            var swiper = this;
6517            var params = swiper.params.pagination;
6518            if (!params.el) {
6519                return
6520            }
6521            var $el = $(params.el);
6522            if ($el.length === 0) {
6523                return
6524            }
6525            if (swiper.params.uniqueNavElements && typeof params.el === "string" && $el.length > 1) {
6526                $el = swiper.$el.find(params.el)
6527            }
6528            if (params.type === "bullets" && params.clickable) {
6529                $el.addClass(params.clickableClass)
6530            }
6531            $el.addClass(params.modifierClass + params.type);
6532            if (params.type === "bullets" && params.dynamicBullets) {
6533                $el.addClass("" + params.modifierClass + params.type + "-dynamic");
6534                swiper.pagination.dynamicBulletIndex = 0;
6535                if (params.dynamicMainBullets < 1) {
6536                    params.dynamicMainBullets = 1
6537                }
6538            }
6539            if (params.type === "progressbar" && params.progressbarOpposite) {
6540                $el.addClass(params.progressbarOppositeClass)
6541            }
6542            if (params.clickable) {
6543                $el.on("click", "." + params.bulletClass.replace(/ /g, "."), function onClick(e) {
6544                    e.preventDefault();
6545                    var index = $(this).index() * swiper.params.slidesPerGroup;
6546                    if (swiper.params.loop) {
6547                        index += swiper.loopedSlides
6548                    }
6549                    swiper.slideTo(index)
6550                })
6551            }
6552            extend$1(swiper.pagination, {$el: $el, el: $el[0]})
6553        }, destroy: function destroy() {
6554            var swiper = this;
6555            var params = swiper.params.pagination;
6556            if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) {
6557                return
6558            }
6559            var $el = swiper.pagination.$el;
6560            $el.removeClass(params.hiddenClass);
6561            $el.removeClass(params.modifierClass + params.type);
6562            if (swiper.pagination.bullets) {
6563                swiper.pagination.bullets.removeClass(params.bulletActiveClass)
6564            }
6565            if (params.clickable) {
6566                $el.off("click", "." + params.bulletClass.replace(/ /g, "."))
6567            }
6568        }
6569    };
6570    var Pagination$1 = {
6571        name: "pagination",
6572        params: {
6573            pagination: {
6574                el: null,
6575                bulletElement: "span",
6576                clickable: false,
6577                hideOnClick: false,
6578                renderBullet: null,
6579                renderProgressbar: null,
6580                renderFraction: null,
6581                renderCustom: null,
6582                progressbarOpposite: false,
6583                type: "bullets",
6584                dynamicBullets: false,
6585                dynamicMainBullets: 1,
6586                formatFractionCurrent: function formatFractionCurrent(number) {
6587                    return number
6588                },
6589                formatFractionTotal: function formatFractionTotal(number) {
6590                    return number
6591                },
6592                bulletClass: "tint-swiper-pagination-bullet",
6593                bulletActiveClass: "tint-swiper-pagination-bullet-active",
6594                modifierClass: "tint-swiper-pagination-",
6595                currentClass: "tint-swiper-pagination-current",
6596                totalClass: "tint-swiper-pagination-total",
6597                hiddenClass: "tint-swiper-pagination-hidden",
6598                progressbarFillClass: "tint-swiper-pagination-progressbar-fill",
6599                progressbarOppositeClass: "tint-swiper-pagination-progressbar-opposite",
6600                clickableClass: "tint-swiper-pagination-clickable",
6601                lockClass: "tint-swiper-pagination-lock"
6602            }
6603        },
6604        create: function create() {
6605            var swiper = this;
6606            bindModuleMethods(swiper, {pagination: _extends({dynamicBulletIndex: 0}, Pagination)})
6607        },
6608        on: {
6609            init: function init(swiper) {
6610                swiper.pagination.init();
6611                swiper.pagination.render();
6612                swiper.pagination.update()
6613            }, activeIndexChange: function activeIndexChange(swiper) {
6614                if (swiper.params.loop) {
6615                    swiper.pagination.update()
6616                } else {
6617                    if (typeof swiper.snapIndex === "undefined") {
6618                        swiper.pagination.update()
6619                    }
6620                }
6621            }, snapIndexChange: function snapIndexChange(swiper) {
6622                if (!swiper.params.loop) {
6623                    swiper.pagination.update()
6624                }
6625            }, slidesLengthChange: function slidesLengthChange(swiper) {
6626                if (swiper.params.loop) {
6627                    swiper.pagination.render();
6628                    swiper.pagination.update()
6629                }
6630            }, snapGridLengthChange: function snapGridLengthChange(swiper) {
6631                if (!swiper.params.loop) {
6632                    swiper.pagination.render();
6633                    swiper.pagination.update()
6634                }
6635            }, destroy: function destroy(swiper) {
6636                swiper.pagination.destroy()
6637            }, click: function click(swiper, e) {
6638                if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && swiper.pagination.$el.length > 0 && !$(e.target).hasClass(swiper.params.pagination.bulletClass)) {
6639                    var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);
6640                    if (isHidden === true) {
6641                        swiper.emit("paginationShow")
6642                    } else {
6643                        swiper.emit("paginationHide")
6644                    }
6645                    swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass)
6646                }
6647            }
6648        }
6649    };
6650    var components = [Navigation$1, Pagination$1];
6651    Swiper.use(components);
6652    return Swiper
6653})));
6654if (window.jQuery || window.Zepto) {
6655    (function (a) {
6656        a.fn.TintSwipe = function (c) {
6657            return this.each(function () {
6658                a(this).data("TintSwipe", new TintSwipe(a(this)[0], c))
6659            })
6660        }
6661    })(window.jQuery || window.Zepto)
6662}
6663!function (a, d) {
6664    function f(ak, ab, ah) {
6665        ak || (ak = "div");
6666        var an, ag, aa, U = a(ab.container), am = U.offset() || {left: 0, top: 0},
6667            aj = [U.width() || 0, U.height() || 0],
6668            T = {x: [am.left, am.left + aj[0]], y: [am.top, am.top + aj[1]], w: [0, aj[0]], h: [0, aj[1]]};
6669        for (an in T) {
6670            T.hasOwnProperty(an) && (aa = c.exec(ab[an]), aa && (ag = T[an], ab[an] = (ag[1] - ag[0]) * aa[1] / 100 + ag[0]))
6671        }
6672        ab.sameX === !1 && ab.checkHoriz === !1 && (ab.sameX = !ab.checkHoriz), ab.sameY === !1 && ab.checkVert === !1 && (ab.sameY = !ab.checkVert);
6673        var ad = U.find(ak), al = [], Z = !!ab.furthest, ac = !ab.sameX, J = !ab.sameY, Q = !!ab.onlyX, K = !!ab.onlyY,
6674            ai = Z ? 0 : 1 / 0, ae = parseFloat(ab.x) || 0, N = parseFloat(ab.y) || 0, t = parseFloat(ae + ab.w) || ae,
6675            q = parseFloat(N + ab.h) || N, R = parseFloat(ab.tolerance) || 0, C = !!a.fn.each2, L = Math.min,
6676            G = Math.max;
6677        !ab.includeSelf && ah && (ad = ad.not(ah)), 0 > R && (R = 0), ad[C ? "each2" : "each"](function (ar, S) {
6678            var F, ap, av, ao, M = C ? S : a(this), y = M.offset(), at = y.left, aq = y.top, x = M.outerWidth(),
6679                X = M.outerHeight(), Y = at + x, w = aq + X, v = G(at, ae), p = L(Y, t), m = G(aq, N), k = L(w, q),
6680                au = p >= v, H = k >= m;
6681            (ac && J || !ac && !J && au && H || ac && H || J && au || ac && Q || J && K) && (F = au ? 0 : v - p, ap = H ? 0 : m - k, av = Q || K ? Q ? F : ap : au || H ? G(F, ap) : Math.sqrt(F * F + ap * ap), ao = Z ? av >= ai - R : ai + R >= av, ao && (ai = Z ? G(ai, av) : L(ai, av), al.push({
6682                node: this,
6683                dist: av
6684            })))
6685        });
6686        var af, I, E, D, B = al.length, A = [];
6687        if (B) {
6688            for (Z ? (af = ai - R, I = ai) : (af = ai, I = ai + R), E = 0; B > E; E++) {
6689                D = al[E], D.dist >= af && D.dist <= I && A.push(D.node)
6690            }
6691        }
6692        return A
6693    }
6694
6695    var c = /^([\d.]+)%$/;
6696    a.each(["nearest", "furthest", "touching"], function (k, j) {
6697        var i = {
6698            x: 0,
6699            y: 0,
6700            w: 0,
6701            h: 0,
6702            tolerance: 1,
6703            container: document,
6704            furthest: "furthest" == j,
6705            includeSelf: !1,
6706            sameX: "touching" === j,
6707            sameY: "touching" === j,
6708            onlyX: !1,
6709            onlyY: !1
6710        };
6711        a[j] = function (n, m, l) {
6712            if (!n || n.x === d || n.y === d) {
6713                return a([])
6714            }
6715            var p = a.extend({}, i, n, l || {});
6716            return a(f(m, p))
6717        }, a.fn[j] = function (p, n) {
6718            if (!this.length) {
6719                return this.pushStack([])
6720            }
6721            var m;
6722            if (p && a.isPlainObject(p)) {
6723                return m = a.extend({}, i, p, n || {}), this.pushStack(f(this, m))
6724            }
6725            var l = this.offset(), q = {x: l.left, y: l.top, w: this.outerWidth(), h: this.outerHeight()};
6726            return m = a.extend({}, i, q, n || {}), this.pushStack(f(p, m, this))
6727        }
6728    })
6729}(jQuery);
6730(function (a) {
6731    a.fn.extend({
6732        everyTime: function (d, f, h, i, c) {
6733            return this.each(function () {
6734                a.timer.add(this, d, f, h, i, c)
6735            })
6736        }, oneTime: function (c, d, f) {
6737            return this.each(function () {
6738                a.timer.add(this, c, d, f, 1)
6739            })
6740        }, stopTime: function (c, d) {
6741            return this.each(function () {
6742                a.timer.remove(this, c, d)
6743            })
6744        }
6745    });
6746    a.extend({
6747        timer: {
6748            guid: 1,
6749            global: {},
6750            regex: /^([0-9]+)\s*(.*s)?$/,
6751            powers: {ms: 1, cs: 10, ds: 100, s: 1000, das: 10000, hs: 100000, ks: 1000000},
6752            timeParse: function (f) {
6753                if (f == undefined || f == null) {
6754                    return null
6755                }
6756                var c = this.regex.exec(a.trim(f.toString()));
6757                if (c[2]) {
6758                    var d = parseInt(c[1], 10);
6759                    var h = this.powers[c[2]] || 1;
6760                    return d * h
6761                } else {
6762                    return f
6763                }
6764            },
6765            add: function (i, f, h, k, l, d) {
6766                var c = 0;
6767                if (a.isFunction(h)) {
6768                    if (!l) {
6769                        l = k
6770                    }
6771                    k = h;
6772                    h = f
6773                }
6774                f = a.timer.timeParse(f);
6775                if (typeof f != "number" || isNaN(f) || f <= 0) {
6776                    return
6777                }
6778                if (l && l.constructor != Number) {
6779                    d = !!l;
6780                    l = 0
6781                }
6782                l = l || 0;
6783                d = d || false;
6784                if (!i.$timers) {
6785                    i.$timers = {}
6786                }
6787                if (!i.$timers[h]) {
6788                    i.$timers[h] = {}
6789                }
6790                k.$timerID = k.$timerID || this.guid++;
6791                var j = function () {
6792                    if (d && this.inProgress) {
6793                        return
6794                    }
6795                    this.inProgress = true;
6796                    if ((++c > l && l !== 0) || k.call(i, c) === false) {
6797                        a.timer.remove(i, h, k)
6798                    }
6799                    this.inProgress = false
6800                };
6801                j.$timerID = k.$timerID;
6802                if (!i.$timers[h][k.$timerID]) {
6803                    i.$timers[h][k.$timerID] = window.setInterval(j, f)
6804                }
6805                if (!this.global[h]) {
6806                    this.global[h] = []
6807                }
6808                this.global[h].push(i)
6809            },
6810            remove: function (f, d, h) {
6811                var i = f.$timers, c;
6812                if (i) {
6813                    if (!d) {
6814                        for (d in i) {
6815                            this.remove(f, d, h)
6816                        }
6817                    } else {
6818                        if (i[d]) {
6819                            if (h) {
6820                                if (h.$timerID) {
6821                                    window.clearInterval(i[d][h.$timerID]);
6822                                    delete i[d][h.$timerID]
6823                                }
6824                            } else {
6825                                for (var h in i[d]) {
6826                                    window.clearInterval(i[d][h]);
6827                                    delete i[d][h]
6828                                }
6829                            }
6830                            for (c in i[d]) {
6831                                break
6832                            }
6833                            if (!c) {
6834                                c = null;
6835                                delete i[d]
6836                            }
6837                        }
6838                    }
6839                    for (c in i) {
6840                        break
6841                    }
6842                    if (!c) {
6843                        f.$timers = null
6844                    }
6845                }
6846            }
6847        }
6848    });
6849    window.obTintBlurer = {
6850        bind: function () {
6851            a("body").on("click touchstart dragstart", function (d) {
6852                var f = d.target;
6853                var c = "";
6854                if ((Parent = a(f).parents("[data-blurer-parent]:first")).length) {
6855                    c = Parent.find("[data-blurer]").attr("data-blurer")
6856                }
6857                a("[data-blurer][data-blurer!='" + c + "']").each(function () {
6858                    var h = a(this);
6859                    if (a(this).attr("data-blurer-target") == "parent") {
6860                        h = a(this).parents("[data-blurer-parent]:first")
6861                    }
6862                    switch (a(this).attr("data-blurer-type")) {
6863                        case ("fadeOut"):
6864                        case ("fadeIn"):
6865                            h.fadeOut();
6866                            break;
6867                        case ("active"):
6868                        case ("disactive"):
6869                            h.removeClass("tint-active");
6870                            h.removeClass("active");
6871                            h.removeClass("hovered");
6872                            h.removeClass("selected");
6873                            h.removeClass("opened");
6874                            break;
6875                        case ("add_class"):
6876                            h.addClass(a(this).attr("data-blurer-toggle-class"));
6877                            break;
6878                        default:
6879                            h.hide().parents("[data-blurer-parent]:first").removeClass("active");
6880                            break
6881                    }
6882                })
6883            });
6884            a("body").keypress(function (c) {
6885                if (c.keyCode == 27) {
6886                    a("body").click()
6887                }
6888            });
6889            a.fn.blurerFadeToggle = function (c) {
6890                var d = a(this).find("[data-blurer]");
6891                sBlurer = d.attr("data-blurer");
6892                d.removeAttr("data-blurer");
6893                a(this).fadeToggle(function () {
6894                    d.attr("data-blurer", sBlurer)
6895                })
6896            };
6897            a.fn.blurerFadeIn = function (c) {
6898                var d = a(this).find("[data-blurer]");
6899                sBlurer = d.attr("data-blurer");
6900                d.removeAttr("data-blurer");
6901                a(this).fadeIn(function () {
6902                    d.attr("data-blurer", sBlurer)
6903                })
6904            }
6905        }, init: (function () {
6906            a(function () {
6907                obTintBlurer.bind()
6908            })
6909        })()
6910    };
6911    tintTooltip = function () {
6912        this._init = function (d, c) {
6913            var h = {tooltipElement: a(d), tooltipSide: "top", fix: false}, f = a.extend(h, c);
6914            f.tooltipElement.each(function (l) {
6915                if (f.fix == false) {
6916                    var n = a(this).actual("outerHeight", {absolute: true}),
6917                        j = a(this).parent(".tint-tooltip-wrapper").actual("outerHeight", {absolute: true}),
6918                        m = a(this).actual("outerWidth", {absolute: true}),
6919                        k = a(this).parent(".tint-tooltip-wrapper").actual("outerWidth", {absolute: true});
6920                    if (f.tooltipSide == "left") {
6921                        a(this).addClass("tint-tooltip-left").css({top: -(n / 2 - j / 2)})
6922                    } else {
6923                        if (f.tooltipSide == "right") {
6924                            a(this).addClass("tint-tooltip-right").
6924css({top: -(n / 2 - j / 2)})
6925                        } else {
6926                            if (f.tooltipSide == "top") {
6927                                a(this).addClass("tint-tooltip-top").css({left: -((m - k) / 2)})
6928                            } else {
6929                                if (f.tooltipSide == "bottom") {
6930                                    a(this).addClass("tint-tooltip-bottom").css({left: -((m - k) / 2)})
6931                                }
6932                            }
6933                        }
6934                    }
6935                } else {
6936                    a(document).mousemove(function (i) {
6937                        f.tooltipElement.css({top: i.clientY + 10, left: i.clientX + 10})
6938                    })
6939                }
6940            })
6941        }
6942    };
6943    a.fn.tintTooltip = function (c) {
6944        return this.each(function () {
6945            a(this).data("tint-tooltip", new tintTooltip()._init(this, c))
6946        })
6947    };
6948    
6949})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.