PageSourceSearch

https://appsheadquarter.net/js/other.js?2.1.0

js appsheadquarter.net collected 2026-10-04 03:09:46 UTC 23,730 bytes, 903 lines download raw bytes

1// Search Apps
2$(document).on("keydown", "#search-form", function (e) {
3  var id = this.id;
4  var base_url = document
5    .querySelector("meta[property='base_url']")
6    .getAttribute("content");
7  var search_url = base_url + "/" + "json-search";
8
9  $("#" + id).autocomplete({
10    minLength: 0,
11    source: function (request, response) {
12      $.ajax({
13        headers: {
14          "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
15        },
16        url: search_url,
17        type: "post",
18        dataType: "json",
19        data: {
20          search: request.term,
21          request: 1,
22        },
23        success: function (data) {
24          response(data);
25        },
26      });
27    },
28    select: function (event, ui) {
29      window.location.href = ui.item.url;
30      return false;
31    },
32    open: function () {
33      $("ul.ui-menu").width($(this).innerWidth());
34    },
35    create: function (event, ui) {
36      $(this).data("ui-autocomplete")._renderItem = function (ul, item) {
37        var rich_html =
38          '<div class="d-flex flex-row"><div><img src=\'' +
39          item.image +
40          '\' class="rounded" /></div><div class="my-auto"><strong>' +
41          item.title +
42          "</strong>" +
43          "</span></div></div>";
44        return $("<li></li>")
45          .data("item.autocomplete", item)
46          .append(rich_html)
47          .appendTo(ul);
48      };
49    },
50  });
51});
52
53// Social media share
54function sm_share(url, title, w, h) {
55  "use strict";
56
57  var dualScreenLeft =
58    window.screenLeft != undefined ? window.screenLeft : screen.left;
59  var dualScreenTop =
60    window.screenTop != undefined ? window.screenTop : screen.top;
61
62  var width = window.innerWidth
63    ? window.innerWidth
64    : document.documentElement.clientWidth
65    ? document.documentElement.clientWidth
66    : screen.width;
67  var height = window.innerHeight
68    ? window.innerHeight
69    : document.documentElement.clientHeight
70    ? document.documentElement.clientHeight
71    : screen.height;
72
73  var left = width / 2 - w / 2 + dualScreenLeft;
74  var top = height / 2 - h / 2 + dualScreenTop;
75  var newWindow = window.open(
76    url,
77    title,
78    "scrollbars=yes, width=" +
79      w +
80      ", height=" +
81      h +
82      ", top=" +
83      top +
84      ", left=" +
85      left
86  );
87
88  if (window.focus) {
89    newWindow.focus();
90  }
91}
92
93// Infinite Scroll
94$(document).ready(function () {
95  "use strict";
96
97  if (document.getElementById("infinite-scroll")) {
98    $("#infinite-scroll").infiniteScroll({
99      path: ".pagination__next",
100      append: ".infinity-scroll",
101      history: false,
102      hideNav: ".pagination-next",
103      status: ".page-load-status",
104    });
105  }
106});
107
108// Apps star ratings
109$(function () {
110  "use strict";
111
112  $(".ratings").rating(function (vote, event, data_vote_id) {
113    $.ajax({
114      headers: {
115        "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
116      },
117      url: "/vote/" + data_vote_id + "",
118      type: "POST",
119      data: {
120        vote: vote,
121      },
122      success: function (data) {
123        $(".voteinfo").fadeIn("slow");
124        $(".voteinfo").html(data);
125        $(".voteinfo").delay(2000).fadeOut("slow");
126      },
127    });
128  });
129});
130
131// Comment & Review form apps star ratings
132$(function () {
133  "use strict";
134
135  $(".user_ratings").rating(function () {});
136});
137
138$(document).ready(function () {
139  "use strict";
140
141  $("#terms a").click(function (e) {
142    var txt = $(e.target).text();
143    $("#search-form").val(txt);
144    $("#search-form").keydown();
145    $("#search-form").keydown();
146    return false;
147  });
148});
149
150// Redirections
151$(document).ready(function () {
152  "use strict";
153
154  if (window.location.href.indexOf("/redirect/") > -1) {
155    var id_data = document.getElementById("redirect");
156    var app_id = id_data.getAttribute("data-app-id");
157    var app_delay = id_data.getAttribute("data-redirection-delay");
158
159    let time = app_delay / 1000 - 1;
160    let countdown = setInterval(update, 1000);
161
162    function update() {
163      let min = Math.floor(time);
164      let sec = time;
165      document.getElementById("countdown").innerHTML = `(${sec})`;
166      time--;
167      min == 0 && sec == 0 ? clearInterval(countdown) : countdown;
168    }
169
170    var base_url = document
171      .querySelector("meta[property='base_url']")
172      .getAttribute("content");
173
174    window.setTimeout(function () {
175      window.location.href = base_url + "/download/" + app_id + "";
176    }, app_delay);
177  }
178});
179
180// Screenshot slider
181$(document).ready(function () {
182  "use strict";
183
184  $("#right").click(function () {
185    var leftPos = $("#screenshot-main").scrollLeft();
186    $("#screenshot-main").animate(
187      {
188        scrollLeft: leftPos + 250,
189      },
190      600
191    );
192  });
193
194  $("#left").click(function () {
195    var leftPos2 = $("#screenshot-main").scrollLeft();
196    $("#screenshot-main").animate(
197      {
198        scrollLeft: leftPos2 - 250,
199      },
200      600
201    );
202  });
203
204  var ar = new Array(33, 34, 35, 36, 37, 38, 39, 40);
205
206  $(document).keydown(function (e) {
207    var key = e.which;
208    if ($.inArray(key, ar) > -1) {
209      e.preventDefault();
210      return false;
211    }
212    return true;
213  });
214});
215
216// Smooth Scroll
217$(document).ready(function () {
218  "use strict";
219
220  $(".add-comment").click(function () {
221    event.preventDefault();
222    document.querySelector(".comment-box").style.display = "block";
223    scrollSmoothTo("review-title");
224  });
225});
226
227function scrollSmoothTo(elementId) {
228  "use strict";
229
230  var element = document.getElementById(elementId);
231  element.scrollIntoView({
232    block: "start",
233    behavior: "smooth",
234  });
235}
236
237// ReadMoreJS
238/**
239 * @app ReadMoreJS
240 * @desc Breaks the content of an element to the specified number of words
241 * @version 1.1.0
242 * @license The MIT License (MIT)
243 * @author George Raptis | http://georap.gr
244 */
245(function (win, doc, undef) {
246  "use strict";
247
248  var RM = {};
249
250  RM.helpers = {
251    extendObj: function () {
252      for (var i = 1, l = arguments.length; i < l; i++) {
253        for (var key in arguments[i]) {
254          if (arguments[i].hasOwnProperty(key)) {
255            if (
256              arguments[i][key] &&
257              arguments[i][key].constructor &&
258              arguments[i][key].constructor === Object
259            ) {
260              arguments[0][key] = arguments[0][key] || {};
261              this.extendObj(arguments[0][key], arguments[i][key]);
262            } else {
263              arguments[0][key] = arguments[i][key];
264            }
265          }
266        }
267      }
268      return arguments[0];
269    },
270  };
271
272  RM.countWords = function (str) {
273    return str.split(/\s+/).length;
274  };
275
276  RM.generateTrimmed = function (str, wordsNum) {
277    return str.split(/\s+/).slice(0, wordsNum).join(" ") + "...";
278  };
279
280  RM.init = function (options) {
281    var defaults = {
282      target: "",
283      numOfWords: 50,
284      toggle: true,
285      moreLink: "read more...",
286      lessLink: "read less",
287      linkClass: "rm-link",
288      containerClass: false,
289    };
290    options = RM.helpers.extendObj({}, defaults, options);
291
292    var target = doc.querySelectorAll(options.target),
293      targetLen = target.length,
294      targetContent,
295      trimmedTargetContent,
296      targetContentWords,
297      initArr = [],
298      trimmedArr = [],
299      i,
300      j,
301      l,
302      moreContainer,
303      rmLink,
304      moreLinkID,
305      index;
306
307    for (i = 0; i < targetLen; i++) {
308      targetContent = target[i].innerHTML;
309      trimmedTargetContent = RM.generateTrimmed(
310        targetContent,
311        options.numOfWords
312      );
313      targetContentWords = RM.countWords(targetContent);
314
315      initArr.push(targetContent);
316      trimmedArr.push(trimmedTargetContent);
317
318      if (options.numOfWords < targetContentWords - 1) {
319        target[i].innerHTML = trimmedArr[i];
320
321        moreContainer = doc.createElement("div");
322        if (options.containerClass) {
323          moreContainer.className = options.containerClass;
324        }
325
326        moreContainer.innerHTML =
327          '<a id="rm-more_' +
328          i +
329          '"' +
330          ' class="' +
331          options.linkClass +
332          '"' +
333          ' style="cursor:pointer;" data-readmore="anchor">' +
334          options.moreLink +
335          "</a>";
336        target[i].parentNode.insertBefore(moreContainer, target[i].nextSibling);
337      }
338    }
339
340    rmLink = doc.querySelectorAll('[data-readmore="anchor"]');
341
342    for (j = 0, l = rmLink.length; j < l; j++) {
343      rmLink[j].onclick = function () {
344        moreLinkID = this.getAttribute("id");
345        index = moreLinkID.split("_")[1];
346
347        if (this.getAttribute("data-clicked") !== "true") {
348          target[index].innerHTML = initArr[index];
349          if (options.toggle !== false) {
350            this.innerHTML = options.lessLink;
351            this.setAttribute("data-clicked", true);
352          } else {
353            this.innerHTML = "";
354          }
355        } else {
356          target[index].innerHTML = trimmedArr[index];
357          this.innerHTML = options.moreLink;
358          this.setAttribute("data-clicked", false);
359        }
360      };
361    }
362  };
363
364  window.$readMoreJS = RM;
365})(this, this.document);
366
367// Validate Email
368function validateEmail($email) {
369  "use strict";
370
371  var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
372  return emailReg.test($email);
373}
374
375// Comment Form Control
376function form_control() {
377  "use strict";
378
379  var name = $.trim($("#name").val());
380  var email = $.trim($("#email").val());
381  var title = $.trim($("#title").val());
382  var comment = $.trim($("#comment").val());
383  if (document.getElementById("rating")) {
384    var voting_data = document.getElementById("rating");
385    var rating_id = voting_data.getAttribute("data-rating-id");
386    var type = 1;
387  } else {
388    var type = 2;
389  }
390  var comment_data = document.getElementById("comment-section");
391  var fill_all_fields = comment_data.getAttribute("data-fill-all-fields");
392
393  if (validateEmail(email) && name != "" && title != "" && comment != "") {
394    comment_send(type);
395  } else {
396    $("#comment_result").html(
397      '<div class="alert alert-danger show mt-3 mb-2" role="alert">
397' +
398        fill_all_fields +
399        ""
400    );
401  }
402}
403
404// Post Comment
405function comment_send(type) {
406  "use strict";
407
408  $.ajax({
409    headers: {
410      "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
411    },
412    type: "POST",
413    url: "/comment",
414    data: $("#comment-form").serialize(),
415    success: function (msg) {
416      $("#comment-section :input").prop("disabled", true);
417      $("#comment_result").html(msg);
418      $("#comment-form")[0].reset();
419    },
420  });
421}
422
423// Submission Form Control
424function submission_form_control() {
425  "use strict";
426
427  var name = $.trim($("#name").val());
428  var email = $.trim($("#email").val());
429  var title = $.trim($("#title").val());
430  var description = $.trim($("#description").val());
431  var category = $.trim($("#category").val());
432  var platform = $.trim($("#platform").val());
433  var developer = $.trim($("#developer").val());
434  var url = $.trim($("#url").val());
435  var license = $.trim($("#license").val());
436  var file_size = $.trim($("#file-size").val());
437  var version = $.trim($("#version").val());
438  var detailed_description = $.trim($("#detailed-description").val());
439  var image = $.trim($("#image").val());
440  var submission_data = document.getElementById("submission-section");
441  var fill_all_fields = submission_data.getAttribute("data-fill-all-fields");
442
443  if (
444    validateEmail(email) &&
445    name != "" &&
446    title != "" &&
447    description != "" &&
448    category != "" &&
449    platform != "" &&
450    developer != "" &&
451    url != ""
452  ) {
453    submission_send();
454  } else {
455    $("#submission-result").html(
456      '<div class="alert alert-danger show mt-2 mb-2" role="alert">' +
457        fill_all_fields +
458        ""
459    );
460  }
461}
462
463// Post Submission
464function submission_send() {
465  "use strict";
466
467  var frm = $("#submission-form");
468  var formData = new FormData(frm[0]);
469  formData.append("image", $("input[type=file]")[0].files[0]);
470
471  try {
472    var recaptcha = grecaptcha.getResponse();
473    formData.append("recaptcha", recaptcha);
474  } catch (e) {}
475
476  var submission_data = document.getElementById("submission-section");
477  var data_error = submission_data.getAttribute("data-error");
478  var data_recaptcha_error = submission_data.getAttribute(
479    "data-recaptcha-error"
480  );
481
482  const recaptcha_errors = [
483    "missing-input-secret",
484    "invalid-input-secret",
485    "missing-input-response",
486    "invalid-input-response",
487    "bad-request",
488    "timeout-or-duplicate",
489  ];
490
491  $.ajax({
492    headers: {
493      "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
494    },
495    type: "POST",
496    enctype: "multipart/form-data",
497    url: "/submission",
498    data: formData,
499    processData: false,
500    contentType: false,
501    success: function (msg) {
502      $("#submission-section :input").prop("disabled", true);
503      $("#submission-result").html(msg);
504      $("#submission-form")[0].reset();
505    },
506    error: function (xhr) {
507      $.each(xhr.responseJSON.errors, function (key, value) {
508        if (recaptcha_errors.indexOf(value) > -1) {
509          grecaptcha.reset();
510          $("#submission-result").html(
511            '<div class="alert alert-danger mb-2 mt-2" role="alert"><b>' +
512              data_error +
513              ":</b> " +
514              data_recaptcha_error +
515              "</div"
516          );
517          return false;
518        }
519
520        $("#submission-result").html(
521          '<div class="alert alert-danger mb-2 mt-2" role="alert"><b>' +
522            data_error +
523            ":</b> " +
524            value +
525            "</div"
526        );
527        return false;
528      });
529    },
530  });
531}
532
533// Change position of elements in the app page
534function moveDiv() {
535  if ($(window).width() < 990) {
536    $("#download_section").insertAfter("#app_data");
537    $("#popular_apps").addClass("mt-3");
538    $("#download_section").addClass("mt-3");
539  } else {
540    $("#download_section").insertBefore("#move_item");
541    $("#popular_apps").removeClass("mt-3");
542    $("#download_section").removeClass("mt-3");
543  }
544}
545$(document).ready(function () {
546  moveDiv();
547  $(window).resize(function () {
548    moveDiv();
549  });
550});
551
552// Report Submission Form Control
553function report_submission_form() {
554  "use strict";
555
556  var email = $.trim($("#email").val());
557  var reason = $.trim($("#reason").val());
558
559  report_submission_send();
560}
561
562// Report Submission
563function report_submission_send() {
564  "use strict";
565
566  var frm = $("#report-submission-form");
567  var formData = new FormData(frm[0]);
568
569  try {
570    var recaptcha = grecaptcha.getResponse();
571    formData.append("recaptcha", recaptcha);
572  } catch (e) {}
573
574  var submission_data = document.getElementById("report-submission-section");
575  var data_error = submission_data.getAttribute("data-error");
576  var app_id = submission_data.getAttribute("data-station-id");
577
578  formData.append("app_id", app_id);
579
580  var data_recaptcha_error = submission_data.getAttribute(
581    "data-recaptcha-error"
582  );
583
584  const recaptcha_errors = [
585    "missing-input-secret",
586    "invalid-input-secret",
587    "missing-input-response",
588    "invalid-input-response",
589    "bad-request",
590    "timeout-or-duplicate",
591  ];
592
593  var base_url = document
594    .querySelector("meta[property='base_url']")
595    .getAttribute("content");
596  var report_url = base_url + "/" + "report";
597
598  $.ajax({
599    headers: {
600      "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
601    },
602    type: "POST",
603    url: report_url,
604    data: formData,
605    processData: false,
606    contentType: false,
607    success: function (msg) {
608      $("#report-submission-form")[0].reset();
609      $(".g-recaptcha").remove();
610      $("#report-submission-section :input").prop("disabled", true);
611      $("#report-submission-result").html(msg);
612    },
613    error: function (xhr) {
614      $.each(xhr.responseJSON.errors, function (key, value) {
615        if (recaptcha_errors.indexOf(value) > -1) {
616          grecaptcha.reset();
617          $("#report-submission-result").html(
618            '<div class="alert alert-danger mt-3 show" role="alert"><b>' +
619              data_error +
620              ":</b> " +
621              data_recaptcha_error +
622              "</div"
623          );
624          return false;
625        }
626
627        $("#report-submission-result").html(
628          '<div class="alert alert-danger mt-3 show" role="alert"><b>' +
629            data_error +
630            ":</b> " +
631            value +
632            "</div"
633        );
634        return false;
635      });
636    },
637  });
638}
639
640// Add to Favorites
641$(document).ready(function () {
642  $(".add-favorites").click(function () {
643    var check_status = $("#heart").data("checked");
644
645    if (check_status == "1") {
646      $("#heart").css("fill", "#f4aec2");
647      $("#heart").data("checked", "0");
648
649      var player_data = document.getElementById("app");
650      var player_thumbnail = player_data.getAttribute("data-thumb");
651      var player_url = player_data.getAttribute("data-url");
652      var player_title = player_data.getAttribute("data-title");
653      var remove_message = player_data.getAttribute("data-remove-message");
654      var cookie_prefix = player_data.getAttribute("data-cookie-prefix");
655
656      var listen_history_last = Cookies.get(cookie_prefix + "_favorites");
657
658      var listen_history = Cookies.get(cookie_prefix + "_favorites");
659      var listen_data =
660        "|" + player_url + "," + player_thumbnail + "," + player_title;
661      var listen_historyy = listen_history_last.replace(listen_data, "");
662
663      Cookies.set(cookie_prefix + "_favorites", listen_historyy, {
664        expires: 365,
665      });
666
667      var notify = new notificationManager({
668        container: $("#notificationsContainer"),
669      });
670
671      var anim = true;
672      var auto = true;
673
674      notify.setPosition("topright");
675
676      notify.addNotification({
677        message: remove_message,
678        animate: anim,
679        autoRemove: auto,
680        backgroundColor: "#92c66c",
681        progressColor: "#ffffff",
682      });
683    }
684
685    if (check_status == "0") {
686      var player_data = document.getElementById("app");
687      var player_thumbnail = player_data.getAttribute("data-thumb");
688      var player_url = player_data.getAttribute("data-url");
689      var player_title = player_data.getAttribute("data-title");
690      var add_message = player_data.getAttribute("data-add-message");
691      var cookie_prefix = player_data.getAttribute("data-cookie-prefix");
692
693      var favorite_history = Cookies.get(cookie_prefix + "_favorites");
694      var favorite_data =
695        "|" + player_url + "," + player_thumbnail + "," + player_title;
696
697      if (favorite_history == undefined) {
698        Cookies.set(cookie_prefix + "_favorites", favorite_data, {
699          expires: 365,
700        });
701        favorite_history = favorite_data;
702      }
703
704      if (favorite_history.indexOf(favorite_data) === -1) {
705        Cookies.set(
706          cookie_prefix + "_favorites",
707          favorite_history + favorite_data,
708          {
709            expires: 365,
710          }
711        );
712      }
713
714      var favorite_history_last = Cookies.get(cookie_prefix + "_favorites");
715
716      if (favorite_history_last.indexOf(favorite_data) != -1) {
717        var favorite_historyy = favorite_history_last.replace(
718          favorite_data,
719          ""
720        );
721
722        Cookies.set(
723          cookie_prefix + "_favorites",
724          favorite_historyy + favorite_data,
725          {
726            expires: 365,
727          }
728        );
729      }
730
731      $("#heart").css("fill", "#fff");
732      $("#heart").data("checked", "1");
733
734      var notify = new notificationManager({
735        container: $("#notificationsContainer"),
736      });
737
738      var anim = true;
739      var auto = true;
740
741      notify.setPosition("topright");
742
743      notify.addNotification({
744        message: add_message,
745        animate: anim,
746        autoRemove: auto,
747        backgroundColor: "#92c66c",
748        progressColor: "#ffffff",
749      });
750    }
751  });
752});
753
754// Contact Form Control
755function contact_form() {
756  "use strict";
757
758  var name = $.trim($("#name").val());
759  var email = $.trim($("#email").val());
760  var subject = $.trim($("#subject").val());
761  var message = $.trim($("#message").val());
762
763  contact_form_send();
764}
765
766// Contact Form Submission
767function contact_form_send() {
768  "use strict";
769
770  var frm = $("#contact-form");
771  var formData = new FormData(frm[0]);
772  try {
773    var recaptcha = grecaptcha.getResponse();
774    formData.append("recaptcha", recaptcha);
775  } catch (e) {}
776
777  var submission_data = document.getElementById("contact-form-section");
778  var data_error = submission_data.getAttribute("data-error");
779  var data_recaptcha_error = submission_data.getAttribute(
780    "data-recaptcha-error"
781  );
782
783  const recaptcha_errors = [
784    "missing-input-secret",
785    "invalid-input-secret",
786    "missing-input-response",
787    "invalid-input-response",
788    "bad-request",
789    "timeout-or-duplicate",
790  ];
791
792  $.ajax({
793    headers: {
794      "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
795    },
796    type: "POST",
797    url: "contact-form",
798    data: formData,
799    processData: false,
800    contentType: false,
801    success: function (msg) {
802      $("#contact-form")[0].reset();
803      $(".g-recaptcha").remove();
804      $("#contact-form-section :input").prop("disabled", true);
805      $("#contact-form-result").html(msg);
806    },
807    error: function (xhr) {
808      $.each(xhr.responseJSON.errors, function (key, value) {
809        if (recaptcha_errors.indexOf(value) > -1) {
810          grecaptcha.reset();
811          $("#contact-form-result").html(
812            '<div class="alert alert-danger show" role="alert"><b>' +
813              data_error +
814              ":</b> " +
815              data_recaptcha_error +
816              "</div"
817          );
818          return false;
819        }
820
821        $("#contact-form-result").html(
822          '<div class="alert alert-danger show" role="alert"><b>' +
823            data_error +
824            ":</b> " +
825            value +
826            "</div"
827        );
828        return false;
829      });
830    },
831  });
832}
833
834// Rate the App
835$(document).ready(function () {
836  $(".rate_app").click(function () {
837    var app_id = $(this).attr("data-id");
838    var rate_action = $(this).attr("data-action");
839
840    var vote_data = document.getElementById("vote-data");
841    var success_message = vote_data.getAttribute("data-vote-success");
842    var error_message = vote_data.getAttribute("data-vote-error");
843
844    $.ajax({
845      headers: {
846        "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
847      },
848      url: "/vote",
849      type: "post",
850      dataType: "json",
851      data: {
852        app_id: app_id,
853        direction: rate_action,
854      },
855      success: function (response) {
856        if (response.success == true) {
857          var notify = new notificationManager({
858            container: $("#notificationsContainer"),
859          });
860
861          var anim = true;
862          var auto = true;
863
864          notify.setPosition("topright");
865
866          notify.addNotification({
867            message: success_message,
868            animate: anim,
869            autoRemove: auto,
870            backgroundColor: "#92c66c",
871            progressColor: "#fff",
872          });
873
874          ajaxCallBack(response.vote);
875        } else {
876          var notify = new notificationManager({
877            container: $("#notificationsContainer"),
878          });
879
880          var anim = true;
881          var auto = true;
882
883          notify.setPosition("topright");
884
885          notify.addNotification({
886            message: error_message,
887            animate: anim,
888            autoRemove: auto,
889            backgroundColor: "#FFC300",
890            progressColor: "#fff",
891          });
892        }
893      },
894    });
895
896    function ajaxCallBack(retString) {
897      thevalue_d = retString;
898      $('[data-id="' + app_id + '"] [id="' + rate_action + '"]').text(
899        thevalue_d
900      );
901    }
902  });
903});

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.