PageSourceSearch

https://videomark.app/wp-content/plugins/betterdocs/public/js/betterdocs-public.js?ver=1.0.0

js videomark.app collected 2026-10-02 00:26:06 UTC 18,396 bytes, 571 lines download raw bytes

1(function($) {
2  "use strict";
3  $(document).ready(function() {
4    let request;
5    let searchForm = $(".betterdocs-searchform");
6    let searchField = $(".betterdocs-search-field");
7    let searchCategory = $(".betterdocs-search-category");
8    let popularSearch = $(".betterdocs-popular-search-keyword .popular-keyword");
9
10    /**
11     * Store search data to sessionStorage
12     */
13    sessionStorage.setItem("betterdocs_search_data", betterdocspublic.search_keyword);
14
15    // disable from submit on enter
16    popularSearch.on("click", function(e) {
17      e.preventDefault();
18      let popularKeyword = $(this).text();
19      $(this).parent('.betterdocs-popular-search-keyword').siblings('.betterdocs-searchform').find('.betterdocs-search-field').val(popularKeyword).trigger('propertychange');
20    });
21
22    searchForm.on("keyup keypress", function(e) {
23      searchForm.each(function() {
24        let keyCode = e.keyCode || e.which;
25        if (keyCode === 13) {
26          e.preventDefault();
27          return false;
28        }
29      });
30    });
31
32    // ajax load titles on keyup to searchbox
33    searchField.on("input propertychange paste", function(e) {
34      searchField.each(function() {
35        let thisEvent = $(this);
36        let inputVal = $(this).val();
37        let inputCat = thisEvent.parent('.betterdocs-searchform-input-wrap').siblings('.betterdocs-search-category').find(':selected').val();
38        let resultWrapper = thisEvent.parent().parent(".betterdocs-searchform");
39        let kbSlug = thisEvent.parent().parent('.betterdocs-searchform').find('.betterdocs-search-kbslug').val();
40        liveSearchAction(e, thisEvent, inputVal, inputCat, resultWrapper, kbSlug);
41      });
42    });
43
44    $('.betterdocs-searchform .betterdocs-search-category').on("change", function(e) {
45        let thisEvent = $(this);
46        let inputVal = thisEvent.siblings('.betterdocs-searchform-input-wrap').children('.betterdocs-search-field').val();
47        let inputCat = $(this).find(':selected').val();
48        let resultWrapper = thisEvent.parent(".betterdocs-searchform");
49        let kbSlug = thisEvent.parent('.betterdocs-searchform').find('.betterdocs-search-kbslug').val();
50        liveSearchAction(e, thisEvent, inputVal, inputCat, resultWrapper, kbSlug);
51    });
52
53    function liveSearchAction(e, thisEvent, inputVal, inputCat, resultWrapper, kbSlug) {
54      let resultList = thisEvent.parent(".betterdocs-searchform").find(".betterdocs-search-result-wrap");
55      let searchLoader = thisEvent.parent().find(".docs-search-loader");
56      let searchClose = thisEvent.parent().find(".docs-search-close");
57      let search_keyword = sessionStorage.betterdocs_search_data;
58      if (
59          e.key != "a" &&
60          e.keyCode != 17 &&
61          e.keyCode != 91 &&
62          inputVal.length >= 3
63      ) {
64        delay(function() {
65          ajaxLoad(
66              inputVal,
67              inputCat,
68              kbSlug,
69              resultWrapper,
70              resultList,
71              searchLoader,
72              searchClose,
73              search_keyword
74          );
75        }, 400);
76      } else if (!inputVal.length) {
77        thisEvent.parent().parent(".betterdocs-live-search").find(".betterdocs-search-result-wrap").addClass("hideArrow");
78        thisEvent.parent().parent(".betterdocs-live-search").find(".docs-search-result").slideUp(300);
79        searchLoader.hide();
80        searchClose.hide();
81      }
82    }
83
84    $(".docs-search-close").on("click", function() {
85      $(this).hide();
86      $(".betterdocs-live-search .betterdocs-search-result-wrap").addClass(
87        "hideArrow"
88      );
89      $(".betterdocs-live-search .docs-search-result").slideUp(300);
90      searchField.val("");
91    });
92
93    var delay = (function() {
94      var timer = 0;
95      return function(callback, ms) {
96        clearTimeout(timer);
97        timer = setTimeout(callback, ms);
98      };
99    })();
100
101    function ajaxLoad(
102      inputVal,
103      inputCat,
104      kbSlug,
105      resultWrapper,
106      resultList,
107      searchLoader,
108      searchClose,
109      search_keyword
110    ) {
111      if (request) {
112        request.abort();
113      }
114      request = $.ajax({
115        url: betterdocspublic.ajax_url,
116        type: "post",
117        data: {
118          action: "betterdocs_get_search_result",
119          search_input: inputVal,
120          search_cat: inputCat,
121          kb_slug: kbSlug,
122          search_data: search_keyword,
123        },
124        beforeSend: function() {
125          searchLoader.show();
126          searchClose.hide();
127          resultList.addClass("hideArrow");
128          $(".betterdocs-live-search .docs-search-result").slideUp(400);
129        },
130        success: function(response) {
131          resultList.remove();
132          searchLoader.hide();
133          searchClose.show();
134          resultWrapper.append(response.data.post_lists);
135          sessionStorage.setItem("betterdocs_search_data", response.data.search_data);
136        }
137      });
138    }
139
140    var betterdocsToc = $(".betterdocs-toc");
141    var betterdocsSidebar = $("#betterdocs-sidebar");
142    if (betterdocsToc.length && betterdocsSidebar.length) {
143      // create an instance of TOC
144      var stickyTocContent = $(".betterdocs-toc").clone();
145      $(".sticky-toc-container").append(stickyTocContent);
146
147      // make sticky toc when sidebar-content scroll ends
148      $(window).on("scroll", function() {
149        var stickyToc = $(".sticky-toc-container");
150        var tocHeight = $(".betterdocs-sidebar-content").outerHeight();
151        var tocSidebar = document.querySelector(".betterdocs-sidebar-content");
152        var tocSidebarRect = tocSidebar.getBoundingClientRect();
153        var tocSidebarTop = Math.abs(tocSidebarRect.top);
154
155        if (tocSidebarRect.top < 0 && tocHeight <= tocSidebarTop) {
156          stickyToc.addClass("toc-sticky");
157        } else {
158          stickyToc.removeClass("toc-sticky");
159        }
160        if (
161          $(window).scrollTop() >=
162            betterdocsSidebar.offset().top +
163              betterdocsSidebar.outerHeight() -
164              window.innerHeight &&
165          !betterdocsSidebar.hasClass("betterdocs-el-single-sidebar")
166        ) {
167          stickyToc.removeClass("toc-sticky");
168        }
169      });
170    }
171
172    // Add smooth scrolling to links
173    $(document).on("scroll", onScroll);
174    // alert(betterdocspublic.sticky_toc_offset);
175    var toc_links = $(".betterdocs-toc .toc-list a");
176    toc_links.on("click", function(e) {
177      e.preventDefault();
178      $(document).off("scroll");
179      toc_links.each(function() {
180        $(this).removeClass("active");
181      });
182      $(this).addClass("active");
183      var target = this.hash,
184        $target = $(target);
185      var scrollTopOffset = $target.offset().top;
186      $("html, body")
187        .stop()
188        .animate(
189          { scrollTop: scrollTopOffset - betterdocspublic.sticky_toc_offset },
190          "slow",
191          function() {
192            $(document).on("scroll", onScroll);
193          }
194        );
195    });
196
197    // function to add link active class on scroll
198    function onScroll() {
199      var scrollPos = $(document).scrollTop();
200      $(
201        ".sticky-toc-container .betterdocs-toc .toc-list a,.betterdocs-full-sidebar-right .betterdocs-toc .toc-list a"
202      ).each(function() {
203        var currLink = $(this);
204        var refElement = $(currLink.attr("href"));
205        if (
206          refElement.position().top <= scrollPos &&
207          refElement.position().top + refElement.height() > scrollPos
208        ) {
209          $(".betterdocs-toc .toc-list a").removeClass("active");
210          currLink.addClass("active");
211        }
212      });
213    }
214
215    // close sticky toc
216    $(".close-toc").on("click", function(event) {
217      event.preventDefault();
218      $(".sticky-toc-container").remove(".sticky-toc-container");
219    });
220
221    // close sticky toc
222    $("body").on("click", ".betterdocs-print-btn", function(event) {
223      let entryTitle = "";
224      if ($("#betterdocs-entry-title").length) {
225        entryTitle = document.getElementById("betterdocs-entry-title")
226          .innerHTML;
227      }
228
229      var printContents = document.getElementById("betterdocs-single-content")
230        .innerHTML;
231      var combined = document.createElement("div");
232      combined.innerHTML = "<h1>" + entryTitle + "</h1>" + " " + printContents;
233      combined.id = "new-doc-print";
234      var pwidth = document.getElementById("betterdocs-single-content")
235        .offsetWidth;
236      var wheight = $(window).height();
237      var winPrint = window.open(
238        "",
239        "",
240        "left=50%,top=10%,width=" +
241          pwidth +
242          ",height=" +
243          wheight +
244          ",toolbar=0,scrollbars=0,status=0"
245      );
246      winPrint.document.write(combined.outerHTML);
247      winPrint.document.close();
248      winPrint.focus();
249      winPrint.print();
250      winPrint.close();
251    });
252
253    // Add accordion to sidebar category grid
254    var sidebarContent = $(".betterdocs-sidebar-content");
255    var catList = $(
256      ".betterdocs-sidebar-content .docs-single-cat-wrap .docs-item-container"
257    );
258    var currentCatList = $(
259      ".betterdocs-sidebar-content .docs-single-cat-wrap.current-category .docs-item-container"
260    );
261    var catHeading = $(
262      ".betterdocs-sidebar-content .docs-single-cat-wrap .docs-cat-title-wrap"
263    );
264    catList.hide();
265
266    if (currentCatList.length) {
267      currentCatList.show().addClass("show");
268      for(let child of currentCatList[0].children) {
269        //Arrow down only if selected post is from a nested sub category. This is for single post along with sidebar, and for single selected category
270        if( $(child).hasClass('docs-sub-cat') && $(child).hasClass('current-sub-cat') ) {
271          let right = child.previousElementSibling.children[0];
272          let down = child.previousElementSibling.children[1];
273          $(right).css('display', 'none');
274          $(down).css('display', 'inline');
275        }
276      }
277    }
278
279    if (currentCatList.length) {
280      currentCatList.show().addClass("show");
281    }
282
283    catHeading.click(function(e) {
284      var $this = $(this);
285      sidebarContent.find(".active-title").removeClass("active-title");
286      $this.toggleClass("active-title");
287      if ($this.next(catList).hasClass("show")) {
288        $this
289          .next(catList)
290          .slideUp()
291          .removeClass("show");
292      } else if (catList.hasClass("show")) {
293        catList.slideUp().removeClass("show");
294        $this
295          .next(catList)
296          .slideToggle()
297          .toggleClass("show");
298      } else {
299        $this
300          .next(catList)
301          .slideToggle()
302          .toggleClass("show");
303      }
304    });
305
306    var docSubCat = $(".docs-sub-cat-title, .el-betterdocs-grid-sub-cat-title");
307    docSubCat.each(function() {
308      $(this).click(function(e) {
309        e.preventDefault();
310        $(this)
311          .children(".toggle-arrow")
312          .toggle();
313        $(this)
314          .next(".docs-sub-cat, .docs-sub-cat-list")
315          .slideToggle();
316      });
317    });
318
319    var docTocTitle = $(".betterdocs-toc.collapsible-sm .toc-title");
320    docTocTitle.each(function() {
321      $(this).click(function(e) {
322        e.preventDefault();
323        $(this)
324          .children(".angle-icon")
325          .toggle();
326        $(this)
327          .next(".toc-list")
328          .slideToggle();
329      });
330    });
331
332    // single post feedback form modal
333    var formModal = $("#betterdocs-form-modal");
334    var formModalContent = $("#betterdocs-form-modal .modal-content");
335
336    //select all the a tag with name equal to modal
337    $("a[name=betterdocs-form-modal]").click(function(e) {
338      e.preventDefault();
339      formModal.fadeIn(500);
340    });
341
342    //if outside of modal content is clicked
343    $(document).mouseup(function(e) {
344      if (
345        !formModalContent.is(e.target) &&
346        formModalContent.has(e.target).length === 0
347      ) {
348        formModal.fadeOut();
349      }
350    });
351
352    //if close button is clicked
353    $(".betterdocs-modalwindow .close").click(function(e) {
354      e.preventDefault();
355      formModal.fadeOut(500);
356    });
357
358    // ajax feedback form submit
359    var feedbackForm = $("#betterdocs-feedback-form");
360
361    var feedbackFormFields = $(
362      "#betterdocs-feedback-form input, #betterdocs-feedback-form textarea"
363    );
364    feedbackFormFields.on("keyup", function() {
365      $(this).removeClass("val-error");
366      $(this)
367        .siblings(".error-message")
368        .remove();
369    });
370    feedbackForm.on("submit", function(e) {
371      e.preventDefault();
372      var form = $(this);
373      var message_name = $("#message_name");
374      var message_email = $("#message_email");
375      var message_subject = $("#message_subject");
376      var message_text = $("#message_text");
377      betterdocsFeedbackFormSubmit(
378        form,
379        message_name,
380        message_email,
381        message_subject,
382        message_text
383      );
384    });
385    function betterdocsFeedbackFormSubmit(
386      form,
387      message_name,
388      message_email,
389      message_subject,
390      message_text
391    ) {
392      if (request) {
393        request.abort();
394      }
395      request = $.ajax({
396        url: betterdocspublic.ajax_url,
397        type: "post",
398        data: {
399          action: "betterdocs_feedback_form_submit",
400          form: form.serializeArray(),
401          postID: betterdocspublic.post_id,
402          message_name: message_name.val(),
403          message_email: message_email.val(),
404          message_subject: message_subject.val(),
405          message_text: message_text.val(),
406          security: betterdocspublic.nonce,
407        },
408        beforeSend: function() {},
409        success: function(data) {
410          var data = JSON.parse(data);
411          if (data.sentStatus) {
412            if (data.sentStatus === "success") {
413              $(".response").html(
414                '<span class="success-message">' + data.sentMessage + "</span>"
415              );
416              form[0].reset();
417              delay(function() {
418                $(".betterdocs-modalwindow").fadeOut(500);
419                $(".response .success-message").remove();
420              }, 3000);
421            } else {
422              $(".response").html(
423                '<span class="error-message">' + data.sentMessage + "</span>"
424              );
425            }
426          } else {
427            if (data.nameStatus === "error") {
428              if (message_name.hasClass("val-error") == false) {
429                message_name.addClass("val-error");
430                $(".form-name").append(
431                  '<span class="error-message">' + data.nameMessage + "</span>"
432                );
433              }
434            }
435            if (data.emailStatus === "error") {
436              if (message_email.hasClass("val-error") == false) {
437                message_email.addClass("val-error");
438                $(".form-email").append(
439                  '<span class="error-message">' + data.emailMessage + "</span>"
440                );
441              }
442            }
443            if (data.messageStatus === "error") {
444              if (message_text.hasClass("val-error") == false) {
445                message_text.addClass("val-error");
446                $(".form-message").append(
447                  '<span class="error-message">' +
448                    data.messageMessage +
449                    "</span>"
450                );
451              }
452            }
453          }
454        }
455      });
456    }
457
458    if ($(".batterdocs-anchor").length) {
459      // tooltips
460      $(".batterdocs-anchor")
461        .hover(
462          function() {
463            var title = $(this).attr("data-title");
464            $("<div/>", {
465              text: title,
466              class: "tooltip-box"
467            }).appendTo(this);
468          },
469          function() {
470            // $(document).find("div.tooltip-box").remove();
471          }
472        )
473        .on("click", function(e) {
474          // Clipboard
475          e.preventDefault();
476          var a = new ClipboardJS(".batterdocs-anchor");
477          a.on("success", function(e) {
478            $(document)
479              .find("div.tooltip-box")
480              .text(betterdocspublic.copy_text);
481            e.clearSelection(),
482              $(e.trigger).addClass("copied"),
483              setTimeout(function() {
484                $(e.trigger).removeClass("copied");
485              }, 2000);
486          });
487        });
488
489      (function() {
490        if (typeof self === "undefined" || !self.Prism || !self.document) {
491          return;
492        }
493
494        if (!Prism.plugins.toolbar) {
495          console.warn(
496            "Copy to Clipboard plugin loaded before Toolbar plugin."
497          );
498
499          return;
500        }
501
502        var ClipboardJS = window.ClipboardJS || undefined;
503
504        if (!ClipboardJS && typeof require === "function") {
505          ClipboardJS = require("clipboard");
506        }
507
508        var callbacks = [];
509
510        if (!ClipboardJS) {
511          var script = document.createElement("script");
512          var head = document.querySelector("head");
513
514          script.onload = function() {
515            ClipboardJS = window.ClipboardJS;
516
517            if (ClipboardJS) {
518              while (callbacks.length) {
519                callbacks.pop()();
520              }
521            }
522          };
523
524          script.src =
525            "https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js";
526          head.appendChild(script);
527        }
528
529        Prism.plugins.toolbar.registerButton("copy-to-clipboard", function(
530          env
531        ) {
532          var linkCopy = document.createElement("button");
533          linkCopy.textContent = "Copy";
534
535          if (!ClipboardJS) {
536            callbacks.push(registerClipboard);
537          } else {
538            registerClipboard();
539          }
540
541          return linkCopy;
542
543          function registerClipboard() {
544            var clip = new ClipboardJS(linkCopy, {
545              text: function() {
546                return env.code;
547              }
548            });
549
550            clip.on("success", function() {
551              linkCopy.textContent = "Copied!";
552
553              resetText();
554            });
555            clip.on("error", function() {
556              linkCopy.textContent = "Press Ctrl+C to copy";
557
558              resetText();
559            });
560          }
561
562          function resetText() {
563            setTimeout(function() {
564              linkCopy.textContent = "Copy";
565            }, 5000);
566          }
567        });
568      })();
569    }
570  });
571})(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.