PageSourceSearch

https://www.textmagic.com/wp-content/themes/textmagic-new/assets/common.js?ver=v202609220621

js textmagic.com collected 2026-09-24 08:29:54 UTC 42,451 bytes, 1,410 lines download raw bytes

1
2
3$('.why-should-choose__image img, .hero-info__image img, .how-get-started__image img, .info-block__image img').removeAttr('width height');
4$('.powerful-texting-features img').removeAttr('width height');
5
6$(window).resize(function () {
7  paginationBlogChange();
8});
9paginationBlogChange();
10
11function paginationBlogChange() {
12  if ($(window).width() < 600) {
13
14    $(".next-link a").html('<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.58589 3.19948C5.24692 3.53844 5.24692 4.08601 5.58589 4.42497L8.95818 7.79726L5.58589 11.1696C5.24692 11.5085 5.24692 12.0561 5.58589 12.3951C5.92486 12.734 6.47242 12.734 6.81139 12.3951L10.8008 8.40567C11.1397 8.0667 11.1397 7.51914 10.8008 7.18017L6.81139 3.19078C6.48111 2.86051 5.92486 2.86051 5.58589 3.19948Z" fill="#6E7191"></path></svg>');
15    $(".next-link svg").attr("style", "display:none");
16    $(".next-link a svg").attr("style", "position: inherit;");
17
18
19    $('.prev-link a').html('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.8869 2.9558C10.5013 2.57028 9.87858 2.57028 9.49306 2.9558L4.95577 7.49309C4.57025 7.87861 4.57025 8.50137 4.95577 8.88689L9.49306 13.4242C9.87858 13.8097 10.5013 13.8097 10.8869 13.4242C11.2724 13.0387 11.2724 12.4159 10.8869 12.0304L7.05142 8.18505L10.8869 4.3496C11.2724 3.96408 11.2625 3.33143 10.8869 2.9558Z" fill="#6E7191"></path></svg>');
20    $(".prev-link svg").attr("style", "display:none");
21    $(".prev-link a svg").attr("style", "position: inherit;");
22
23
24  }
25  else {
26    $(".next-link a").html('Next');
27    $(".next-link svg").attr("style", "position: absolute;");
28
29    $(".prev-link a").html('Previous');
30    $(".prev-link svg").attr("style", "position: absolute;");
31
32  }
33}
34
35function getCookieDomain() {
36  return '.' + location.hostname.split('.').reverse().splice(0, 2).reverse().join('.');
37}
38
39function copyToClipboard(str) {
40  if (window.clipboardData && window.clipboardData.setData) {
41    return window.clipboardData.setData("Text", str);
42
43  }
44  else if (document.queryCommandSupported && document.queryCommandSupported("copy")) {
45    var textarea = document.createElement("textarea");
46    textarea.textContent = str;
47    textarea.style.position = "fixed";
48    document.body.appendChild(textarea);
49    textarea.select();
50    try {
51      return document.execCommand("copy");
52    }
53    catch (ex) {
54
55    }
56    finally {
57      document.body.removeChild(textarea);
58    }
59  }
60}
61
62jQuery(document).ready(function ($) {
63
64
65  $(".tmi-close" ).bind( "click", function() {
66    document.getElementById("header").classList.remove("header--active");
67  });
68
69  var titleBlue = $('.title-blue').html();
70  /*
71  if(titleBlue == ' free tools') {
72    const toClass = 'free-tools';
73    const yOffset = -72;
74    const element = document.getElementsByClassName(toClass)[0];
75    const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset;
76
77    window.scrollTo({top: y, behavior: 'smooth'});
78  }
79  */
80
81  $('.filter-list__item').on("click", function () {
82    if (titleBlue != " free tools") {
83      //document.getElementsByClassName("features")[0].scrollIntoView({block: "start", behavior: "smooth"});
84
85      const toClass = 'features';
86      const yOffset = -72;
87      const element = document.getElementsByClassName(toClass)[0];
88      const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset;
89
90      window.scrollTo({ top: y, behavior: 'smooth' });
91
92    }
93  });
94
95  $(".sms-template .button-wrapper").on("click", function () {
96
97    var textC = $(this).parent().find('.message-text-cnt').html();
98    textC = textC.replaceAll(/(<([^>]+)>)/gi, "");
99    navigator.clipboard.writeText(textC);
100
101  });
102
103  $('.why-should-choose__image img, .hero-info__image img, .how-get-started__image img, .info-block__image img').removeAttr('width height');
104
105  $('.tooltip__icon').click(function (e) {
106    e.stopPropagation();
107    $('.tooltip').removeClass('show');
108    $('.tooltip').attr('style', " ");
109    $(this).parents('.tooltip__container').find('.tooltip').toggleClass('show');
110  });
111
112  $(document).click(function () {
113    if ($('.tooltip').hasClass('show')) {
114      $('.tooltip').removeClass('show');
115      $('.tooltip').attr('style', "display:none;");
116    }
117  });
118
119
120
121  $(".form-control, #form-control").keyup(function () {
122    let entered = $(this).val().length;
123    //console.log("keyup: " + $(this).val().length);
124    if ($(this).val().length > 0) {
125      $(".close").attr("style", "position:absolute");
126    } else {
127      $(".close").attr("style", "position:absolute; display:none;");
128    }
129  });
130
131
132  if ($("#form-control").length) {
133    if ($("#form-control").val().length > 0)
134      $(".close").attr("style", " ");
135  }
136
137
138  $("#Subscribe").click(function (event) {
139    event.preventDefault();
140
141    let email = $("#cemail").val();
142
143    $.ajax({
144      url: '/',
145      method: 'POST',
146      dataType: 'html',
147      data: 'action=mailchimp&email=' + email,
148      success: function (data) {
149        //alert(data);
150        $(".subscribe-result").html(data);
151
152        var attr = $("#Subscribe").attr('class');
153        if (attr == 'blogarticle') {
154          $(".subscribe-result").addClass("blogarticle");
155        }
156
157        if (data === 'Invalid email format')
158          $(".subscribe-result").addClass("subscribe-error");
159        else
160          $(".subscribe-result").removeClass("subscribe-error");
161
162      }
163    });
164  });
165
166  $("#Subscribe2").click(function (event) {
167    event.preventDefault();
168
169    let email = $("#cemail2").val();
170
171    $.ajax({
172      url: '/',
173      method: 'POST',
174      dataType: 'html',
175      data: 'action=mailchimp&email=' + email,
176      success: function (data) {
177        //alert(data);
178        $(".subscribe-result2").html(data);
179        if (data === 'Invalid email format')
180          $(".subscribe-result2").addClass("subscribe-error");
181        else
182          $(".subscribe-result2").removeClass("subscribe-error");
183      }
184    });
185  });
186
187
188});
189
190function hoverImg(id, type, event) {
191  //alert(1);
192  //console.log(type);
193
194  if (type == 'top3') {
195    if (event == 'out') {
196      document.querySelector('#link_top3_' + id).classList.remove('ahover');
197    }
198    else {
199      document.querySelector('#link_top3_' + id).classList.add('ahover');
200    }
201  }
202
203  if (type == 'top1') {
204    if (event == 'out') {
205      document.querySelector('.title').classList.remove('hover');
206    }
207    else {
208      document.querySelector('.title').classList.add('hover');
209    }
210  }
211
212  if (type == 'categoryBlock') {
213    if (event == 'out') {
214      document.querySelector('#link_categoryBlock_' + id).classList.remove('ahover');
215    }
216    else {
217      document.querySelector('#link_categoryBlock_' + id).classList.add('ahover');
218    }
219  }
220
221}
222
223$(".quest-icon").mouseover(function () {
224  if (!$(this).hasClass('active'))
225    $(this).parent().closest('.blogs .question-wrap').find(".single-question .quest").addClass('faq-hover');
226});
227$(".quest-icon").mouseout(function () {
228  $(this).parent().closest('.blogs .question-wrap').find(".single-question .quest").removeClass('faq-hover');
229});
230
231function hoverTool(id, event) {
232  if (event == 'out') {
233    document.querySelector('#link_tool_' + id).classList.remove('ahover');
234  }
235  else {
236    document.querySelector('#link_tool_' + id).classList.add('ahover');
237  }
238}
239
240function toolLinkRedirect(link) {
241  window.location.href = link;
242}
243
244if ( window.location.pathname !== "/" ) {
245jQuery(document).ready(function ($) {
246  $('.carousel-item#slide-0').addClass('active');
247  $('.thumbnails-carousel .slide-0').addClass('active');
248  if (typeof $.fn.slick === 'function' && $('.blog-slick-slider').length) {
249    $(".prev-btn").click(function () {
250      $(".blog-slick-slider").slick("slickPrev");
251    });
252
253    $(".next-btn").click(function () {
254      $(".blog-slick-slider").slick("slickNext");
255    });
256    $(".prev-btn").addClass("slick-disabled");
257    $(".blog-slick-slider").on("afterChange", function () {
258      if ($(".slick-prev").hasClass("slick-disabled")) {
259        $(".prev-btn").addClass("slick-disabled");
260      } else {
261        $(".prev-btn").removeClass("slick-disabled");
262      }
263      if ($(".slick-next").hasClass("slick-disabled")) {
264        $(".next-btn").addClass("slick-disabled");
265      } else {
266        $(".next-btn").removeClass("slick-disabled");
267      }
268    });
269
270    $('.blog-slick-slider').slick({
271      dots: false,
272      infinite: true,
273      speed: 500,
274      autoplay: true,
275      autoplaySpeed: 3000,
276      slidesToShow: 4,
277      slidesToScroll: 1,
278      centerMode: false,
279      responsive: [
280        {
281          breakpoint: 1300,
282          settings: {
283            slidesToShow: 3,
284            slidesToScroll: 1,
285            infinite: true,
286          }
287        },
288        {
289          breakpoint: 1024,
290          settings: {
291            slidesToShow: 2,
292            dots: true,
293            slidesToScroll: 1,
294            infinite: true,
295          }
296        },
297        {
298          breakpoint: 600,
299          settings: {
300            dots: true,
301            slidesToShow: 1,
302            slidesToScroll: 1
303            // centerMode: true,
304          }
305        },
306      ]
307    });
308  }
309
310
311
312  $(".from-video-library").css("display", "block");
313
314
315
316
317
318  // var toc = [];
319  // var tocContainer = $("#toc-list");
320
321  // $("#blog-content-inner h2").each(function (index) {//:header
322  //   var header = $(this);
323  //   var headerText = header.text();
324  //   var headerLevel = parseInt(header[0].tagName.charAt(1));
325  //   var headerId = headerText.replace(/\s+/g, '-').toLowerCase().replace(/^[^a-zA-Z]+/, '') + '-' + index;
326
327  //   // Ensure that the generated ID starts with a letter and is a valid HTML ID
328  //   headerId = headerId.replace(/[^a-zA-Z0-9\-_]/g, '');
329
330  //   header.attr("id", headerId);
331
332  //   // Create a table of contents entry
333  //   var entry = {
334  //     id: headerId,
335  //     text: headerText,
336  //     level: headerLevel
337  //   };
338
339  //   toc.push(entry);
340
341  //   // Add the entry to the list
342  //   var entryHtml = '<li class="' + headerId + ' titles-article" data-scroll="' + headerId + '">' + headerText + '</li>';
343  //   tocContainer.append(entryHtml);
344  // });
345
346  // // Scroll to the position of the corresponding header with an offset of -200 pixels
347  // $("#toc-list li").on("click", function () {
348  //   var targetId = $(this).data("scroll");
349  //   var targetPosition = $("#" + targetId).offset().top - 70;
350
351  //   $("html, body").animate({
352  //     scrollTop: targetPosition
353  //   }, 100); // Adjust the duration as needed
354  // });
355
356
357
358
359  /* */
360  const bottoms = [];
361  var anchors = document.querySelectorAll('h2');
362
363  for (var i = 0; i < anchors.length; i++) {
364    var anchorID = anchors[i].getAttribute('id');
365    if ((i + 1) < anchors.length) {
366      var anchorIDNext = anchors[(i + 1)].getAttribute('id');
367      //if (anchors[(i+1)].length) {
368      if ($("#" + anchorIDNext).offset() != undefined) {
369        var elementTopNext = $("#" + anchorIDNext).offset().top;
370        bottoms[i] = elementTopNext;
371      }
372      //}
373      //console.log("bottoms[i] "+bottoms[i]);
374    }
375  }
376  //console.log("START ");
377  //console.log("bottoms:!: "+JSON.stringify(bottoms));
378  /* */
379
380  $.fn.isInViewport = function (i, count) {
381    if ($(this).offset() != undefined) {
382      var elementTop = $(this).offset().top;
383      var elementBottom = elementTop + $(this).outerHeight();
384      var viewportTop = $(window).scrollTop();
385      var viewportBottom = viewportTop + $(window).height();
386    }
387    if (elementBottom > (viewportTop + 95) && elementTop < (viewportTop + 80)) {
388
389
390    }
391    //console.log("bottoms::: "+JSON.stringify(bottoms));
392    //return elementBottom > (viewportTop) && elementTop < viewportBottom;
393    //return (elementBottom > (viewportTop + 95) && elementTop < (viewportTop + 80) );
394    if (i < bottoms.length) {
395
396
397      return (bottoms[i] > (viewportTop + 95) && elementTop < (viewportTop + 80));
398    }
399    else
400      return (bottoms[i - 1] < (viewportTop + 95) && elementTop < (viewportTop + 80));
401
402  };
403
404  $(window).on('resize scroll', function () {
405
406    //setTimeout(function(){
407    const anchors = document.querySelectorAll('h2');
408
409
410
411    for (var x = 0; x < anchors.length; x++) {//
412
413      var anchorID = anchors[x].getAttribute('id');
414
415      if ($('#' + anchorID).isInViewport(x, anchors.length)) {
416        //console.log(anchorID+' is visible');
417
418        $('.titles-article').attr('style', " ");
419        $('.' + anchorID).attr('style', "font-weight: bold");
420      } else {
421        //console.log(anchorID+' is not visible');
422      }
423    }
424    //},100);
425
426  });
427
428  //alert($(".content-wrap").height())
429  let heightRight = $(".content-wrap").height();
430  $('.block-right').attr('style', "height:" + (heightRight - 300) + "px;");
431
432  const el = document.querySelector(".checkelement")
433  const observer = new IntersectionObserver(
434    ([e]) => e.target.classList.toggle("is-pinned", e.intersectionRatio < 1),
435    {
436      threshold: [1]
437    }
438  );
439
440  if (el != undefined) {
441    observer.observe(el);
442  }
443});
444}
445
446function copyAText() {
447  // Get the text field
448  var copyText = document.getElementById("myInput");
449
450  // Select the text field
451  copyText.select();
452  copyText.setSelectionRange(0, 99999); // For mobile devices
453
454  // Copy the text inside the text field
455  navigator.clipboard.writeText(copyText.value);
456
457  // Alert the copied text
458  alert("Copied the text: " + copyText.value);
459}
460
461
462
463  /******/ (function (modules) {
464  // webpackBootstrap
465  /******/ // The module cache
466  /******/ var installedModules = {};
467  /******/
468  /******/ // The require function
469  /******/ function __webpack_require__(moduleId) {
470    /******/
471    /******/ // Check if module is in cache
472    /******/ if (installedModules[moduleId]) {
473      /******/ return installedModules[moduleId].exports;
474      /******/
475    }
476    /******/ // Create a new module (and put it into the cache)
477    /******/ var module = (installedModules[moduleId] = {
478      /******/ i: moduleId,
479      /******/ l: false,
480      /******/ exports: {},
481      /******/
482    });
483    /******/
484    /******/ // Execute the module function
485    /******/ modules[moduleId].call(
486      module.exports,
487      module,
488      module.exports,
489      __webpack_require__
490    );
491    /******/
492    /******/ // Flag the module as loaded
493    /******/ module.l = true;
494    /******/
495    /******/ // Return the exports of the module
496    /******/ return module.exports;
497    /******/
498  }
499  /******/
500  /******/
501  /******/ // expose the modules object (__webpack_modules__)
502  /******/ __webpack_require__.m = modules;
503  /******/
504  /******/ // expose the module cache
505  /******/ __webpack_require__.c = installedModules;
506  /******/
507  /******/ // define getter function for harmony exports
508  /******/ __webpack_require__.d = function (exports, name, getter) {
509    /******/ if (!__webpack_require__.o(exports, name)) {
510      /******/ Object.defineProperty(exports, name, {
511    enumerable: true,
512    get: getter,
513  });
514      /******/
515    }
516    /******/
517  };
518  /******/
519  /******/ // define __esModule on exports
520  /******/ __webpack_require__.r = function (exports) {
521    /******/ if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
522      /******/ Object.defineProperty(exports, Symbol.toStringTag, {
523    value: "Module",
524  });
525      /******/
526    }
527    /******/ Object.defineProperty(exports, "__esModule", { value: true });
528    /******/
529  };
530  /******/
531  /******/ // create a fake namespace object
532  /******/ // mode & 1: value is a module id, require it
533  /******/ // mode & 2: merge all properties of value into the ns
534  /******/ // mode & 4: return value when already ns object
535  /******/ // mode & 8|1: behave like require
536  /******/ __webpack_require__.t = function (value, mode) {
537    /******/ if (mode & 1) value = __webpack_require__(value);
538    /******/ if (mode & 8) return value;
539    /******/ if (
540      mode & 4 &&
541      typeof value === "object" &&
542      value &&
543      value.__esModule
544    )
545      return value;
546    /******/ var ns = Object.create(null);
547    /******/ __webpack_require__.r(ns);
548    /******/ Object.defineProperty(ns, "default", {
549        enumerable: true,
550        value: value,
551      });
552    /******/ if (mode & 2 && typeof value != "string")
553      for (var key in value)
554        __webpack_require__.d(
555          ns,
556          key,
557          function (key) {
558            return value[key];
559          }.bind(null, key)
560        );
561    /******/ return ns;
562    /******/
563  };
564  /******/
565  /******/ // getDefaultExport function for compatibility with non-harmony modules
566  /******/ __webpack_require__.n = function (module) {
567    /******/ var getter =
568      module && module.__esModule
569        ? /******/ function getDefault() {
570          return module["default"];
571        }
572        : /******/ function getModuleExports() {
573          return module;
574        };
575    /******/ __webpack_require__.d(getter, "a", getter);
576    /******/ return getter;
577    /******/
578  };
579  /******/
580  /******/ // Object.prototype.hasOwnProperty.call
581  /******/ __webpack_require__.o = function (object, property) {
582    return Object.prototype.hasOwnProperty.call(object, property);
583  };
584  /******/
585  /******/ // __webpack_public_path__
586  /******/ __webpack_require__.p = "";
587  /******/
588  /******/
589  /******/ // Load entry module and return exports
590  /******/ return __webpack_require__((__webpack_require__.s = 0));
591  /******/
592})(
593  /************************************************************************/
594  /******/[
595    /* 0 */
596    /***/ function (module, exports, __webpack_require__) {
597      module.exports = __webpack_require__(1);
598
599      /***/
600    },
601    /* 1 */
602    /***/ function (module, __webpack_exports__, __webpack_require__) {
603      "use strict";
604      __webpack_require__.r(__webpack_exports__);
605      /* harmony import */ var _core_header_js__WEBPACK_IMPORTED_MODULE_0__ =
606        __webpack_require__(2);
607      /* harmony import */ var _core_footer_js__WEBPACK_IMPORTED_MODULE_1__ =
608        __webpack_require__(4);
609      /* harmony import */ var _core_faq_js__WEBPACK_IMPORTED_MODULE_2__ =
610        __webpack_require__(5);
611      /* harmony import */ var _core_inputClearButton__WEBPACK_IMPORTED_MODULE_3__ =
612        __webpack_require__(7);
613      /* harmony import */ var _core_utils_highlight__WEBPACK_IMPORTED_MODULE_4__ =
614        __webpack_require__(8);
615
616      /***/
617    },
618    /* 2 */
619    /***/ function (module, __webpack_exports__, __webpack_require__) {
620      "use strict";
621      __webpack_require__.r(__webpack_exports__);
622      /* harmony import */ var _core_utils_elements__WEBPACK_IMPORTED_MODULE_0__ =
623        __webpack_require__(3);
624
625      const headerWorker = () => {
626        const header = document.getElementById("header");
627        const headerOpen = document.getElementById("header-open");
628        const headerClose = document.getElementById("header-close");
629
630        const headerMenuButtons = [
631          ...document.querySelectorAll(
632            ".header-menu--mobile > .header-menu__item--with-submenu > button"
633          ),
634        ];
635
636        const dropOpenAll = () => {
637          headerMenuButtons.forEach((button) => {
638            button.parentElement.classList.remove("submenu-open");
639          });
640        };
641
642        headerMenuButtons.forEach((button) => {
643          button.addEventListener("click", () => {
644            if (window.innerWidth < Number("1200")) {
645              if (button.parentElement.classList.contains("submenu-open")) {
646                dropOpenAll();
647              } else {
648                dropOpenAll();
649                button.parentElement.classList.add("submenu-open");
650              }
651            }
652          });
653        });
654
655        let preInnerWidth = window.innerWidth;
656
657        window.addEventListener(
658          "resize",
659          () => {
660            if (
661              preInnerWidth < Number("1200") &&
662              window.innerWidth >= Number("1200")
663            ) {
664              header.classList.remove("header--active");
665              dropOpenAll();
666            }
667            preInnerWidth = window.innerWidth;
668          },
669          true
670        );
671
672        if (headerOpen) {
673          headerOpen.addEventListener("click", () => {
674            header.classList.add("header--active");
675          });
676
677          headerClose.addEventListener("click", () => {
678            header.classList.remove("header--active");
679            dropOpenAll();
680          });
681        }
682
683        const featuresCategories = Object(
684          _core_utils_elements__WEBPACK_IMPORTED_MODULE_0__["getElement"]
685        )(".header-submenu-features");
686        const featureCategoryButton = Object(
687          _core_utils_elements__WEBPACK_IMPORTED_MODULE_0__["getElements"]
688        )(".header-aside__item", featuresCategories);
689        const featureBlock = Object(
690          _core_utils_elements__WEBPACK_IMPORTED_MODULE_0__["getElements"]
691        )(".header-submenu__link", featuresCategories);
692
693        if (featuresCategories) {
694          if (!featureCategoryButton[0]) {
695            return
696          }
697          featureCategoryButton[0].classList.add("header-aside__item--active");
698          const defaultActiveTab = featureCategoryButton[0].dataset.category;
699          for (let i = 0; i < featureBlock.length; i++) {
700            featureBlock[i].dataset.category = Object(
701              _core_utils_elements__WEBPACK_IMPORTED_MODULE_0__["kebabCase"]
702            )(featureBlock[i].dataset.category);
703            featureBlock[i].classList.add("d-none");
704
705            if (
706              featureBlock[i].dataset.category.indexOf(defaultActiveTab) > -1
707            ) {
708              featureBlock[i].classList.remove("d-none");
709            }
710          }
711
712          for (let i = 0; i < featureCategoryButton.length; i++) {
713            let activeTab = featureCategoryButton[0].dataset.category;
714
715            featureCategoryButton[i].addEventListener("click", () => {
716              for (let k = 0; k < featureCategoryButton.length; k++) {
717                featureCategoryButton[k].classList.remove(
718                  "header-aside__item--active"
719                );
720              }
721              featureCategoryButton[i].classList.add(
722                "header-aside__item--active"
723              );
724              activeTab = featureCategoryButton[i].dataset.category;
725
726              for (let j = 0; j < featureBlock.length; j++) {
727                featureBlock[j].classList.add("d-none");
728
729                if (featureBlock[j].dataset.category.indexOf(activeTab) > -1) {
730                  featureBlock[j].classList.remove("d-none");
731                }
732              }
733            });
734          }
735        }
736      };
737
738      /* harmony default export */ __webpack_exports__["default"] =
739        headerWorker();
740
741      /***/
742    },
743    /* 3 */
744    /***/ function (module, __webpack_exports__, __webpack_require__) {
745      "use strict";
746      __webpack_require__.r(__webpack_exports__);
747      /* harmony export (binding) */ __webpack_require__.d(
748        __webpack_exports__,
749        "getElement",
750        function () {
751          return getElement;
752        }
753      );
754      /* harmony export (binding) */ __webpack_require__.d(
755        __webpack_exports__,
756        "getElements",
757        function () {
758          return getElements;
759        }
760      );
761      /* harmony export (binding) */ __webpack_require__.d(
762        __webpack_exports__,
763        "kebabCase",
764        function () {
765          return kebabCase;
766        }
767      );
768      /* harmony export (binding) */ __webpack_require__.d(
769        __webpack_exports__,
770        "getOffset",
771        function () {
772          return getOffset;
773        }
774      );
775      /* harmony export (binding) */ __webpack_require__.d(
776        __webpack_exports__,
777        "closestParent",
778        function () {
779          return closestParent;
780        }
781      );
782      const getElement = (el, wrap = document) => {
783        if (el == null) return undefined;
784
785        if (typeof el === "string") {
786          try {
787            return wrap.querySelector(el) || undefined;
788          } catch ({ message }) {
789            console.error(message);
790            return undefined;
791          }
792        }
793      };
794
795      const getElements = (el, wrap = document) => {
796        if (el == null) return undefined;
797
798        if (typeof el === "string") {
799          try {
800            return wrap.querySelectorAll(el) || undefined;
801          } catch ({ message }) {
802            console.error(message);
803            return undefined;
804          }
805        }
806      };
807
808      const kebabCase = (string) =>
809        string
810          .replace(/([a-z])([A-Z])/g, "$1-$2")
811          .replace(/[\s_]+/g, "-")
812          .toLowerCase();
813
814      const getOffset = (element) => {
815        if (!element.getClientRects().length) {
816          return { top: 0, left: 0 };
817        }
818
819        let rect = element.getBoundingClientRect();
820        let win = element.ownerDocument.defaultView;
821        return {
822          top: rect.top + win.pageYOffset,
823          left: rect.left + win.pageXOffset,
824        };
825      };
826
827      const closestParent = (child, className) => {
828        if (!child || child == document) {
829          return null;
830        }
831        if (child.classList.contains(className)) {
832          return child;
833        } else {
834          return closestParent(child.parentNode, className);
835        }
836      };
837
838      /***/
839    },
840
841    /* 6 */
842    /***/ function (module, __webpack_exports__, __webpack_require__) {
843      "use strict";
844      __webpack_require__.r(__webpack_exports__);
845      const doScrolling = (element, duration = 250) => {
846        const startingY = window.pageYOffset;
847        const elementY = startingY + element.getBoundingClientRect().top;
848        if (startingY < elementY) return;
849
850        const targetYPosition = elementY - 60;
851
852        const targetY =
853          document.body.scrollHeight - targetYPosition < window.innerHeight
854            ? document.body.scrollHeight - window.innerHeight
855            : targetYPosition;
856        const diff = targetY - startingY;
857        const easing = (t) =>
858          t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;
859        let start;
860
861        if (!diff) return;
862
863        const step = (timestamp) => {
864          if (!start) start = timestamp;
865          const time = timestamp - start;
866          let percent = Math.min(time / duration, 1);
867          percent = easing(percent);
868
869          window.scrollTo(0, startingY + diff * percent);
870
871          if (time < duration) {
872            window.requestAnimationFrame(step);
873          }
874        };
875
876        window.requestAnimationFrame(step);
877      };
878
879      /* harmony default export */ __webpack_exports__["default"] = doScrolling;
880
881      /***/
882    },
883    /* 7 */
884    /***/ function (module, __webpack_exports__, __webpack_require__) {
885      "use strict";
886      __webpack_require__.r(__webpack_exports__);
887      const inputClearButton = () => {
888        const clearButton = document.getElementsByClassName(
889          "input__clear-button"
890        );
891
892        [...clearButton].forEach((el) => {
893          el.addEventListener("click", () => {
894            el.previousSibling.previousElementSibling.value = "";
895            el.previousSibling.previousElementSibling.focus();
896          });
897        });
898      };
899
900      /* harmony default export */ __webpack_exports__["default"] =
901        inputClearButton();
902
903      /***/
904    },
905    /* 8 */
906    /***/ function (module, __webpack_exports__, __webpack_require__) {
907      "use strict";
908      __webpack_require__.r(__webpack_exports__);
909      /* harmony export (binding) */ __webpack_require__.d(
910        __webpack_exports__,
911        "reEscape",
912        function () {
913          return reEscape;
914        }
915      );
916      /* harmony export (binding) */ __webpack_require__.d(
917        __webpack_exports__,
918        "highlight",
919        function () {
920          return highlight;
921        }
922      );
923      const reEscape = (s) => s.replace(/([.*+?^$|(){}[\]])/gm, "\\$1");
924      const highlight = (str, search) =>
925        str.replace(
926          new RegExp(`(${reEscape(search)})`, "gi"),
927          '<span class="highlight">$1</span>'
928        );
929
930      [...document.querySelectorAll("[data-highlight]")].forEach((e) => {
931        const search = e.dataset.highlight;
932        const text = e.innerText;
933
934        e.innerHTML = highlight(text, search);
935      });
936
937      /***/
938    },/* 9 */
939    /***/function (module, __webpack_exports__, __webpack_require__) {
940
941      "use strict";
942      __webpack_require__.r(__webpack_exports__);
943        /* harmony import */ var _core_utils_elements__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3);
944
945
946      const compareTabs = () => {
947
948        const compareLinksBlock = Object(_core_utils_elements__WEBPACK_IMPORTED_MODULE_0__["getElement"])('#compare-tabs-links')
949        const tabItem = Object(_core_utils_elements__WEBPACK_IMPORTED_MODULE_0__["getElements"])('input', compareLinksBlock)
950        const contentTabItem = Object(_core_utils_elements__WEBPACK_IMPORTED_MODULE_0__["getElements"])('.compare-tab')
951
952        if (contentTabItem.length > 0 && contentTabItem != undefined) {
953          tabItem[0].checked = true
954
955          contentTabItem[0].classList.add('compare-tab--active')
956
957
958          const faqLinksBlock = Object(_core_utils_elements__WEBPACK_IMPORTED_MODULE_0__["getElement"])('#faq-tabs-links')
959
960          const faqTabItem = Object(_core_utils_elements__WEBPACK_IMPORTED_MODULE_0__["getElements"])('input', faqLinksBlock)
961          const faqContentTabItem = Object(_core_utils_elements__WEBPACK_IMPORTED_MODULE_0__["getElements"])('.faq-tab')
962
963          faqTabItem[0].checked = true
964          faqContentTabItem[0].classList.add('faq-tab--active')
965
966          const faqButton = Object(_core_utils_elements__WEBPACK_IMPORTED_MODULE_0__["getElements"])('.compare-tabs .btn')
967
968          for (let i = 0; i < tabItem.length; i++) {
969            tabItem[i].addEventListener('click', () => {
970              for (let j = 0; j < contentTabItem.length; j++) {
971                contentTabItem[j].dataset.id === tabItem[i].id
972                  ? contentTabItem[j].classList.add('compare-tab--active')
973                  : contentTabItem[j].classList.remove('compare-tab--active')
974              }
975              for (let k = 0; k < tabItem.length; k++) {
976                tabItem[k].checked = false
977              }
978              tabItem[i].checked = true
979            })
980          }
981
982          for (let i = 0; i < faqTabItem.length; i++) {
983            faqTabItem[i].addEventListener('click', () => {
984              for (let j = 0; j < faqContentTabItem.length; j++) {
985                faqContentTabItem[j].dataset.id === faqTabItem[i].id
986                  ? faqContentTabItem[j].classList.add('faq-tab--active')
987                  : faqContentTabItem[j].classList.remove('faq-tab--active')
988              }
989              for (let k = 0; k < faqTabItem.length; k++) {
990                faqTabItem[k].checked = false
991              }
992              faqTabItem[i].checked = true
993            })
994          }
995
996
997          for (let i = 0; i < faqButton.length; i++) {
998            faqButton[i].addEventListener('click', () => {
999              for (let j = 0; j < faqContentTabItem.length; j++) {
1000                faqContentTabItem[j].dataset.id === faqButton[i].dataset.id
1001                  ? faqContentTabItem[j].classList.add('faq-tab--active')
1002                  : faqContentTabItem[j].classList.remove('faq-tab--active')
1003              }
1004              for (let k = 0; k < faqTabItem.length; k++) {
1005                faqTabItem[k].checked = false
1006              }
1007              faqTabItem[i].checked = true
1008            })
1009          }
1010
1011        }
1012
1013      };
1014
1015        /* harmony default export */ __webpack_exports__["default"] = (compareTabs());
1016
1017
1018
1019      /***/
1020    },
1021    function (module, __webpack_exports__, __webpack_require__) {
1022
1023      "use strict";
1024      __webpack_require__.r(__webpack_exports__);
1025          /* harmony import */ var _core_utils_elements__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3);
1026
1027
1028      const pricingTabs = () => {
1029
1030
1031        const tabItem = Object(_core_utils_elements__WEBPACK_IMPORTED_MODULE_0__["getElements"])('.hero-tab-link');
1032        const contentTabItem = Object(_core_utils_elements__WEBPACK_IMPORTED_MODULE_0__["getElements"])('.hero-pricing-tab');
1033
1034        if (contentTabItem.length > 0) {
1035          tabItem[0].classList.add('hero-tab-link--active')
1036          contentTabItem[0].classList.add('hero-pricing-tab--active')
1037
1038          for (let i = 0; i < tabItem.length; i++) {
1039            tabItem[i].addEventListener('click', () => {
1040              for (let j = 0; j < contentTabItem.length; j++) {
1041                contentTabItem[j].id === tabItem[i].dataset.id
1042                  ? contentTabItem[j].classList.add('hero-pricing-tab--active')
1043                  : contentTabItem[j].classList.remove('hero-pricing-tab--active')
1044              }
1045              for (let k = 0; k < tabItem.length; k++) {
1046                tabItem[k].classList.remove('hero-tab-link--active')
1047              }
1048              tabItem[i].classList.add('hero-tab-link--active')
1049            })
1050          }
1051        }
1052
1053      };
1054
1055          /* harmony default export */ __webpack_exports__["default"] = (pricingTabs());
1056
1057
1058      /***/
1059    },
1060
1061
1062    /******/
1063  ]
1064);
1065
1066
1067const toggleToc = () => {
1068  const toggleTocTitle = getElement('.blog__toc-title');
1069  const tocWrapper = getElement('.blog__toc__wrapper');
1070  const tocOverlay = getElement('.toc__overlay');
1071
1072  if (ifItemExist(toggleTocTitle) && ifItemExist(tocWrapper)) {
1073    toggleTocTitle.addEventListener('click', () => {
1074      tocWrapper.classList.toggle('active');
1075      tocOverlay.classList.toggle('active');
1076      if (tocWrapper.classList.contains('active')) {
1077        tocWrapper.style.top = 'calc(100% - ' + (tocWrapper.offsetHeight - 2) + 'px';
1078      } else {
1079        tocWrapper.style.top = 'calc(100% - 53px)';
1080      }
1081    });
1082    tocOverlay.addEventListener('click', () => {
1083      tocWrapper.classList.remove('active');
1084      tocOverlay.classList.remove('active');
1085      tocWrapper.style.top = 'calc(100% - 53px)';
1086    });
1087
1088    const tocLinks = getElements('a', tocWrapper);
1089    if (ifItemExist(tocLinks)) {
1090      Array.from(tocLinks).forEach((link) => {
1091        link.addEventListener('click', () => {
1092          tocWrapper.classList.remove('active');
1093          tocOverlay.classList.remove('active');
1094          tocWrapper.style.top = 'calc(100% - 53px)';
1095        });
1096      });
1097    }
1098  }
1099};
1100
1101/* initTextareaCopy start */
1102const initCopyToClipboard = () => {
1103  const copyToClipboard = (e) => {
1104    // TODO: replace in origin file
1105    // console.log(e.dataset.target);
1106    // const r = document.createRange();
1107    // r.selectNode(getElement(`#${e.dataset.target}`));
1108    // window.getSelection().removeAllRanges();
1109    // window.getSelection().addRange(r);
1110    // document.execCommand('copy');
1111    // window.getSelection().removeAllRanges();
1112    // Find the closest .alert element to the clicked button
1113    let quoteText = e.target.closest('.alert__wrapper')?.querySelector('.alert') || 
1114                    e.target.closest('.alert') ||
1115                    document.querySelector('.alert');
1116    let text = quoteText ? quoteText.textContent : '';
1117    navigator.clipboard.writeText(`${text}`);
1118    console.log('copyToClipboard function')
1119    
1120    // Add light animation feedback
1121    const textSpan = e.target.querySelector('.alertCopyBtnText') || e.target.querySelector('span');
1122    const originalText = textSpan ? textSpan.textContent.trim() : e.target.textContent.trim();
1123    
1124    e.target.classList.add('copied');
1125    if (textSpan) {
1126      textSpan.textContent = 'Copied!';
1127    } else {
1128      e.target.textContent = 'Copied!';
1129    }
1130    
1131    setTimeout(() => {
1132      e.target.classList.remove('copied');
1133      if (textSpan) {
1134        textSpan.textContent = originalText;
1135      } else {
1136        e.target.textContent = originalText;
1137      }
1138    }, 2000);
1139  };
1140
1141  const btns = Array.from(getElements('[data-type="copy-to-clipboard"]'));
1142  btns.forEach((el) => {
1143    el.addEventListener('click', copyToClipboard);
1144    
1145  });
1146};
1147
1148/* Global events start */
1149const globalListeners = {
1150  click: {},
1151  resize: {},
1152  scroll: {},
1153};
1154const addGlobalListeners = (type, cb, name) => {
1155  if (!name) {
1156    name = getCounter();
1157  }
1158  globalListeners[type][name] = cb;
1159};
1160// const removeGlobalListeners = (type, name) => {
1161//   delete globalListeners[type][name]
1162// }
1163Object.keys(globalListeners).forEach((type) => {
1164  window.addEventListener(type, (e) => {
1165    if (Object.values(globalListeners[type]).length) {
1166      Object.values(globalListeners[type]).forEach((cb) => cb(e));
1167    }
1168  });
1169});
1170/* Global events end */
1171
1172const getElement = (el, wrap = document) => {
1173  if (el == null) return undefined;
1174
1175  if (typeof el === 'string') {
1176    try {
1177      return wrap.querySelector(el) || undefined;
1178    } catch ({ message }) {
1179      console.error(message);
1180      return undefined;
1181    }
1182  }
1183};
1184
1185const getElements = (el, wrap = document) => {
1186  if (el == null) return undefined;
1187
1188  if (typeof el === 'string') {
1189    try {
1190      return wrap.querySelectorAll(el) || undefined;
1191    } catch ({ message }) {
1192      console.error(message);
1193      return undefined;
1194    }
1195  }
1196};
1197
1198const style = (el, property) => window.getComputedStyle(el).getPropertyValue(property);
1199
1200const css = (el, css) => {
1201  Object.keys(css).forEach((prop) => {
1202    el.style[prop] = css[prop];
1203  });
1204};
1205
1206const ready = (fn) => {
1207  if (document.readyState !== 'loading') return fn();
1208  document.addEventListener('DOMContentLoaded', fn, false);
1209};
1210
1211const stopAndPrevent = (e) => {
1212  e.cancelable !== false && e.preventDefault();
1213  e.stopPropagation();
1214};
1215
1216const getCounter = (() => {
1217  let counter = 0;
1218  return () => {
1219    counter += 1;
1220    return counter;
1221  };
1222})();
1223
1224const backdrop = {
1225  msToSec: (val) => `${val / 1000}s`,
1226  open: (transitionDuration = 200) => {
1227    document.documentElement.classList.add('backdrop');
1228    setTimeout(() => document.documentElement.classList.add('backdrop--opening'), 0);
1229    setTimeout(backdrop._opened, transitionDuration);
1230    document.documentElement.style.setProperty('--backdrop-transition-duration', backdrop.msToSec(transitionDuration));
1231  },
1232  hide: (transitionDuration = 200) => {
1233    document.documentElement.classList.add('backdrop--hiding');
1234    setTimeout(backdrop._hidden, transitionDuration);
1235    document.documentElement.style.setProperty('--backdrop-transition-duration', backdrop.msToSec(transitionDuration));
1236  },
1237  _opened: () => {
1238    document.documentElement.classList.add('backdrop--opened');
1239    document.documentElement.classList.remove('backdrop--opening');
1240    document.documentElement.style.setProperty('--backdrop-transition-duration', '');
1241  },
1242  _hidden: () => {
1243    document.documentElement.classList.remove('backdrop--opened');
1244    document.documentElement.classList.remove('backdrop--hiding');
1245    document.documentElement.classList.remove('backdrop');
1246    document.documentElement.style.setProperty('--backdrop-transition-duration', '');
1247  },
1248};
1249
1250class Swipe {
1251  constructor(element) {
1252    this.xDown = null;
1253    this.yDown = null;
1254    this.element = typeof element === 'string' ? getElement(element) : element;
1255
1256    this.element.addEventListener(
1257      'touchstart',
1258      function (evt) {
1259        this.xDown = evt.touches[0].clientX;
1260        this.yDown = evt.touches[0].clientY;
1261      }.bind(this),
1262      false,
1263    );
1264  }
1265  onLeft(callback) {
1266    this.onLeft = callback;
1267
1268    return this;
1269  }
1270  onRight(callback) {
1271    this.onRight = callback;
1272
1273    return this;
1274  }
1275  onUp(callback) {
1276    this.onUp = callback;
1277
1278    return this;
1279  }
1280  onDown(callback) {
1281    this.onDown = callback;
1282
1283    return this;
1284  }
1285  handleTouchMove(evt) {
1286    if (!this.xDown || !this.yDown) {
1287      return;
1288    }
1289
1290    const xUp = evt.touches[0].clientX;
1291    const yUp = evt.touches[0].clientY;
1292
1293    this.xDiff = this.xDown - xUp;
1294    this.yDiff = this.yDown - yUp;
1295
1296    if (Math.abs(this.xDiff) > Math.abs(this.yDiff)) {
1297      // Most significant.
1298      if (this.xDiff > 0) {
1299        this.onLeft();
1300      } else {
1301        this.onRight();
1302      }
1303    } else {
1304      if (this.yDiff > 0) {
1305        this.onUp();
1306      } else {
1307        this.onDown();
1308      }
1309    }
1310
1311    // Reset values.
1312    this.xDown = null;
1313    this.yDown = null;
1314  }
1315
1316  run() {
1317    this.element.addEventListener(
1318      'touchmove',
1319      function (evt) {
1320        this.handleTouchMove(evt);
1321      }.bind(this),
1322      false,
1323    );
1324  }
1325}
1326
1327// TODO: add to WP
1328const numberWithCommas = (x) => {
1329  let n = x;
1330  let parts = (+n).toFixed(2).split('.');
1331  let num = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',') + (+parts[1] ? '.' + parts[1] : '');
1332  // return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ',');
1333  return num;
1334};
1335
1336const numberWithCommasCalc = (x) => {
1337  return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ',');
1338};
1339
1340function ifItemExist(item) {
1341  if (item != null && item != undefined) {
1342    return true;
1343  } else {
1344    return false;
1345  }
1346}
1347
1348function getRandomInt(max) {
1349  return Math.floor(Math.random() * max);
1350}
1351
1352function fits(x, y) {
1353  if (Number.isInteger(y / x)) {
1354    return true;
1355  }
1356  return false;
1357}
1358
1359function updateTextView(_obj) {
1360  var num = getNumber(_obj.value);
1361  if (num == 0) {
1362    _obj.value = parseInt(_obj.getAttribute('min'));
1363  } else {
1364    _obj.value = num.toLocaleString();
1365  }
1366  return _obj.value;
1367}
1368
1369function getNumber(_str) {
1370  var arr = _str.split('');
1371  var out = new Array();
1372  for (var cnt = 0; cnt < arr.length; cnt++) {
1373    if (isNaN(arr[cnt]) == false) {
1374      out.push(arr[cnt]);
1375    }
1376  }
1377  return Number(out.join(''));
1378}
1379
1380function addMultipleListeners(element, events, handler, useCapture, args) {
1381  if (!(events instanceof Array)) {
1382    throw 'addMultipleListeners: ' + 'please supply an array of eventstrings ' + '(like ["click","mouseover"])';
1383  }
1384  //create a wrapper to be able to use additional arguments
1385  var handlerFn = function (e) {
1386    handler.apply(this, args && args instanceof Array ? args : []);
1387  };
1388  for (var i = 0; i < events.length; i += 1) {
1389    element.addEventListener(events[i], handlerFn, useCapture);
1390  }
1391}
1392
1393function sanitizeInput(input) {
1394  const sanitizedInput = input
1395    .replace(/&/g, "&amp;")
1396    .replace(/</g, "&lt;")
1397    .replace(/>/g, "&gt;")
1398    .replace(/"/g, "&quot;")
1399    .replace(/'/g, "&#039;");
1400  return sanitizedInput;
1401}
1402
1403const initBackEnd = () => {
1404  toggleToc();
1405  initCopyToClipboard();
1406};
1407
1408if ( window.location.pathname !== "/" ) {
1409  ready(initBackEnd);
1410}

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.