PageSourceSearch

https://origlio.ch/media/plg_system_mcnsystem/js/mcnsystem.js?b750f6

js origlio.ch collected 2026-10-02 13:04:28 UTC 34,322 bytes, 833 lines download raw bytes

1(function (document, Joomla) {
2  "use strict";
3
4  var options = Joomla.getOptions("plg_system_mcnsystem");
5  var $token = options.token + "=1";
6  var $userid = options.userid;
7  var $site_path = options.site_path;
8  var $login_text = options.login_text;
9  var $follow_enabled_action_text = options.follow_enabled_action_text;
10  var $follow_disabled_action_text = options.follow_disabled_action_text;
11  var $block_enabled_action_text = options.block_enabled_action_text;
12  var $block_disabled_action_text = options.block_disabled_action_text;
13  var $emails_enabled_action_text = options.emails_enabled_action_text;
14  var $emails_disabled_action_text = options.emails_disabled_action_text;
15  var $children_enabled_action_text = options.children_enabled_action_text;
16  var $children_disabled_action_text = options.children_disabled_action_text;
17  var $operation_failed_action_text = options.operation_failed_action_text;
18  var $no_access_action_text = options.no_access_action_text;
19  var $item_text = options.item_text;
20  var $category_text = options.category_text;
21  var $tag_text = options.tag_text;
22  var $author_text = options.author_text;
23  var $email_verification_text = options.email_verification_text;
24  var $subscription_exists_action_text =
25    options.subscription_exists_action_text;
26  var $name_validation_text = options.name_validation_text;
27  var $email_validation_text = options.email_validation_text;
28  var $unsubscribe_verification_text = options.unsubscribe_verification_text;
29
30  function isValidEmailAddress(emailAddress) {
31    var pattern =
32      /^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*(([ \t]*\r\n)?[ \t]+)?")@(([a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.)+([a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.?$/i;
33
34    return pattern.test(emailAddress);
35  }
36
37  document.addEventListener("DOMContentLoaded", function () {
38    const mcn_btn_action = document.querySelectorAll(".mcn-btn-action");
39
40    if (mcn_btn_action) {
41      mcn_btn_action.forEach(function (a) {
42        a.addEventListener("click", function (e) {
43          e.preventDefault();
44
45          if (!e.target.classList.contains("mcn-btn-action"))
46            var $this = e.target.closest(".mcn-btn-action");
47          else var $this = e.target;
48
49          // Check if there is a pending action
50          if (!$this.closest(".mcn-group").classList.contains("mcn-loading")) {
51            // Check if user is logged in
52            if ($userid > 0) {
53              var $component = $this.getAttribute("data-component");
54              var $objecttype = $this.getAttribute("data-objecttype");
55              var $objectid = $this.getAttribute("data-object");
56              var $action = $this.getAttribute("data-action");
57              var $emails = $this.getAttribute("data-emails");
58              var $value = $this.getAttribute("data-value");
59              var $title = $this.getAttribute("data-title");
60              var $view;
61
62              if (
63                $action === "followObject" ||
64                $action === "setEmails" ||
65                $action === "setChildren"
66              ) {
67                $view = "follow";
68              } else {
69                $view = "block";
70              }
71
72              // Add loading class
73              $this.closest(".mcn-group").classList.add("mcn-loading");
74
75              // Show loader
76              $this
77                .closest(".mcn-group")
78                .querySelector(".mcn-loader").style.display = "inline-block";
79
80              Joomla.request({
81                url:
82                  $site_path +
83                  "index.php?option=com_contentnotifications&task=" +
84                  $view +
85                  "." +
86                  $action +
87                  "&emails=" +
88                  $emails +
89                  "&component=" +
90                  $component +
91                  "&objecttype=" +
92                  $objecttype +
93                  "&objectid=" +
94                  $objectid +
95                  "&userid=" +
96                  $userid +
97                  "&value=" +
98                  $value +
99                  "&" +
100                  $token,
101                method: "POST",
102                onSuccess: (msg, xhr) => {
103                  if (msg === "1") {
104                    // controller returns true
105                    // Reset buttons classes
106                    if ($this.closest(".btn-group")) {
107                      $this
108                        .closest(".btn-group")
109                        .querySelectorAll(".btn")
110                        .forEach(function (a) {
111                          a.classList.remove("btn-success", "btn-danger");
112                        });
113                    }
114
115                    if ($this.closest(".btn-group")) {
116                      $this
117                        .closest(".btn-group")
118                        .querySelectorAll(".btn")
119                        .forEach(function (a) {
120                          a.classList.add("btn-outline-secondary");
121                        });
122                    }
123
124                    if ($this.querySelector(".mcn-i")) {
125                      $this
126                        .querySelector(".mcn-i")
127                        .classList.remove("fa-check-square", "fa-square");
128                    }
129
130                    // Get object type translation
131                    var $objecttype_text;
132
133                    switch ($objecttype) {
134                      case "item":
135                        $objecttype_text = $item_text;
136                        break;
137                      case "category":
138                        $objecttype_text = $category_text;
139                        break;
140                      case "tag":
141                        $objecttype_text = $tag_text;
142                        break;
143                      case "author":
144                        $objecttype_text = $author_text;
145                        break;
146                    }
147
148                    // Switch action tasks and values
149                    switch ($action) {
150                      case "followObject":
151                        if ($value == "1") {
152                          // Enable follow
153                          $this.classList.remove("btn-outline-secondary");
154                          $this.classList.add("btn-success");
155                          $this.setAttribute("data-value", "0");
156
157                          // Reset block value
158                          if (
159                            $this
160                              .closest(".btn-group")
161                              .querySelector(".mcn-block")
162                          ) {
163                            $this
164                              .closest(".btn-group")
165                              .querySelector(".mcn-block")
166                              .setAttribute("data-value", "1");
167                          }
168
169                          // Show checkboxes, reset checkboxes values
170                          if (
171                            $this
172                              .closest(".mcn-group")
173                              .querySelector(".mcn-li-item-updates")
174                          ) {
175                            $this
176                              .closest(".mcn-group")
177                              .querySelector(".mcn-li-item-updates")
178                              .classList.remove("d-none");
179                          }
180
181                          if (
182                            $this
183                              .closest(".mcn-group")
184                              .querySelector(".mcn-li-item-notify")
185                          ) {
186                            $this
187                              .closest(".mcn-group")
188                              .querySelector(".mcn-li-item-notify")
189                              .classList.remove("d-none");
190                          }
191
192                          if (
193                            $this
194                              .closest(".mcn-group")
195                              .querySelector(".mcn-li-item-notify .btn")
196                          ) {
197                            $this
198                              .closest(".mcn-group")
199                              .querySelector(".mcn-li-item-notify .btn")
200                              .setAttribute("data-value", "0");
201                          }
202
203                          if (
204                            $this
205                              .closest(".mcn-group")
206                              .querySelector(".mcn-li-item-notify .mcn-i")
207                          ) {
208                            $this
209                              .closest(".mcn-group")
210                              .querySelector(".mcn-li-item-notify .mcn-i")
211                              .classList.replace(
212                                "fa-square",
213                                "fa-check-square"
214                              );
215                          }
216
217                          if (
218                            $this
219                              .closest(".mcn-group")
220                              .querySelector(".mcn-li-item-children")
221                          ) {
222                            $this
223                              .closest(".mcn-group")
224                              .querySelector(".mcn-li-item-children")
225                              .classList.remove("d-none");
226                          }
227
228                          if (
229                            $this
230                              .closest(".mcn-group")
231                              .querySelector(".mcn-li-item-children .btn")
232                          ) {
233                            $this
234                              .closest(".mcn-group")
235                              .querySelector(".mcn-li-item-children .btn")
236                              .setAttribute("data-value", "1");
237                          }
238
239                          if (
240                            $this
241                              .closest(".mcn-group")
242                              .querySelector(".mcn-li-item-children .mcn-i")
243                          ) {
244                            $this
245                              .closest(".mcn-group")
246                              .querySelector(".mcn-li-item-children .mcn-i")
247                              .classList.replace(
248                                "fa-check-square",
249                                "fa-square"
250                              );
251                          }
252
253                          // Success message
254                          var $action_text =
255                            $follow_enabled_action_text +
256                            " " +
257                            $objecttype_text +
258                            ": <b>" +
259                            $title +
260                            "</b>";
261                          var messages = {
262                            message: [$action_text],
263                          };
264                          Joomla.renderMessages(messages);
265                        } else if ($value == "0") {
266                          // Reset follow value
267                          $this.setAttribute("data-value", "1");
268
269                          // Hide checkboxes, reset checkboxes values
270                          if (
271                            $this
272                              .closest(".mcn-group")
273                              .querySelector(".mcn-li-item-updates")
274                          ) {
275                            $this
276                              .closest(".mcn-group")
277                              .querySelector(".mcn-li-item-updates")
278                              .classList.add("d-none");
279                          }
280
281                          if (
282                            $this
283                              .closest(".mcn-group")
284                              .querySelector(".mcn-li-item-notify")
285                          ) {
286                            $this
287                              .closest(".mcn-group")
288                              .querySelector(".mcn-li-item-notify")
289                              .classList.add("d-none");
290                          }
291
292                          if (
293                            $this
294                              .closest(".mcn-group")
295                              .querySelector(".mcn-li-item-notify .btn")
296                          ) {
297                            $this
298                              .closest(".mcn-group")
299                              .querySelector(".mcn-li-item-notify .btn")
300                              .setAttribute("data-value", "0");
301                          }
302
303                          if (
304                            $this
305                              .closest(".mcn-group")
306                              .querySelector(".mcn-li-item-notify .mcn-i")
307                          ) {
308                            $this
309                              .closest(".mcn-group")
310                              .querySelector(".mcn-li-item-notify .mcn-i")
311                              .classList.replace(
312                                "fa-square",
313                                "fa-check-square"
314                              );
315                          }
316
317                          if (
318                            $this
319                              .closest(".mcn-group")
320                              .querySelector(".mcn-li-item-children")
321                          ) {
322                            $this
323                              .closest(".mcn-group")
324                              .querySelector(".mcn-li-item-children")
325                              .classList.add("d-none");
326                          }
327
328                          if (
329                            $this
330                              .closest(".mcn-group")
331                              .querySelector(".mcn-li-item-children .btn")
332                          ) {
333                            $this
334                              .closest(".mcn-group")
335                              .querySelector(".mcn-li-item-children .btn")
336                              .setAttribute("data-value", "1");
337                          }
338
339                          if (
340                            $this
341                              .closest(".mcn-group")
342                              .querySelector(".mcn-li-item-children .mcn-i")
343                          ) {
344                            $this
345                              .closest(".mcn-group")
346                              .querySelector(".mcn-li-item-children .mcn-i")
347                              .classList.replace(
348                                "fa-check-square",
349                                "fa-square"
350                              );
351                          }
352
353                          // Success message
354                          var $action_text =
355                            $follow_disabled_action_text +
356                            " " +
357                            $objecttype_text +
358                            ": <b>" +
359                            $title +
360                            "</b>";
361                          var messages = {
362                            message: [$action_text],
363                          };
364                          Joomla.renderMessages(messages);
365                        }
366
367                        // Remove loading class
368                        $this
369                          .closest(".mcn-group")
370                          .classList.remove("mcn-loading");
371
372                        break;
373
374                      case "blockObject":
375                        if ($value == "1") {
376                          // Enable block
377                          $this.classList.remove("btn-outline-secondary");
378                          $this.classList.add("btn-danger");
379                          $this.setAttribute("data-value", "0");
380
381                          // Reset follow value
382                          $this
383                            .closest(".btn-group")
384                            .querySelector(".mcn-follow")
385                            .setAttribute("data-value", "1");
386
387                          // Hide checkboxes, reset checkboxes values
388                          if (
389                            $this
390                              .closest(".mcn-group")
391                              .querySelector(".mcn-li-item-updates")
392                          ) {
393                            $this
394                              .closest(".mcn-group")
395                              .querySelector(".mcn-li-item-updates")
396                              .classList.add("d-none");
397                          }
398
399                          if (
400                            $this
401                              .closest(".mcn-group")
402                              .querySelector(".mcn-li-item-notify")
403                          ) {
404                            $this
405                              .closest(".mcn-group")
406                              .querySelector(".mcn-li-item-notify")
407                              .classList.add("d-none");
408                          }
409
410                          if (
411                            $this
412                              .closest(".mcn-group")
413                              .querySelector(".mcn-li-item-notify .btn")
414                          ) {
415                            $this
416                              .closest(".mcn-group")
417                              .querySelector(".mcn-li-item-notify .btn")
418                              .setAttribute("data-value", "0");
419                          }
420
421                          if (
422                            $this
423                              .closest(".mcn-group")
424                              .querySelector(".mcn-li-item-notify .mcn-i")
425                          ) {
426                            $this
427                              .closest(".mcn-group")
428                              .querySelector(".mcn-li-item-notify .mcn-i")
429                              .classList.replace(
430                                "fa-square",
431                                "fa-check-square"
432                              );
433                          }
434
435                          if (
436                            $this
437                              .closest(".mcn-group")
438                              .querySelector(".mcn-li-item-children")
439                          ) {
440                            $this
441                              .closest(".mcn-group")
442                              .querySelector(".mcn-li-item-children")
443                              .classList.add("d-none");
444                          }
445
446                          if (
447                            $this
448                              .closest(".mcn-group")
449                              .querySelector(".mcn-li-item-children .btn")
450                          ) {
451                            $this
452                              .closest(".mcn-group")
453                              .querySelector(".mcn-li-item-children .btn")
454                              .setAttribute("data-value", "1");
455                          }
456
457                          if (
458                            $this
459                              .closest(".mcn-group")
460                              .querySelector(".mcn-li-item-children .mcn-i")
461                          ) {
462                            $this
463                              .closest(".mcn-group")
464                              .querySelector(".mcn-li-item-children .mcn-i")
465                              .classList.replace(
466                                "fa-check-square",
467                                "fa-square"
468                              );
469                          }
470
471                          // Success message
472                          var $action_text =
473                            $block_enabled_action_text +
474                            " " +
475                            $objecttype_text +
476                            ": <b>" +
477                            $title +
478                            "</b>";
479                          var messages = {
480                            message: [$action_text],
481                          };
482                          Joomla.renderMessages(messages);
483                        } else if ($value == "0") {
484                          // Reset block value
485                          $this.setAttribute("data-value", "1");
486
487                          // Success message
488                          var $action_text =
489                            $block_disabled_action_text +
490                            " " +
491                            $objecttype_text +
492                            ": <b>" +
493                            $title +
494                            "</b>";
495                          var messages = {
496                            message: [$action_text],
497                          };
498                          Joomla.renderMessages(messages);
499                        }
500
501                        // Remove loading class
502                        $this
503                          .closest(".mcn-group")
504                          .classList.remove("mcn-loading");
505
506                        break;
507
508                      case "setEmails":
509                        if ($value == "1") {
510                          $this
511                            .querySelector(".mcn-i")
512                            .classList.add("fa-check-square");
513                          $this.setAttribute("data-value", "0");
514
515                          // Success message
516                          var $action_text =
517                            $emails_enabled_action_text +
518                            " " +
519                            $objecttype_text +
520                            ": <b>" +
521                            $title +
522                            "</b>";
523                          var messages = {
524                            message: [$action_text],
525                          };
526                          Joomla.renderMessages(messages);
527                        } else if ($value == "0") {
528                          $this
529                            .querySelector(".mcn-i")
530                            .classList.add("fa-square");
531                          $this.setAttribute("data-value", "1");
532
533                          // Success message
534                          var $action_text =
535                            $emails_disabled_action_text +
536                            " " +
537                            $objecttype_text +
538                            ": <b>" +
539                            $title +
540                            "</b>";
541                          var messages = {
542                            message: [$action_text],
543                          };
544                          Joomla.renderMessages(messages);
545                        }
546
547                        // Remove loading class
548                        $this
549                          .closest(".mcn-group")
550                          .classList.remove("mcn-loading");
551
552                        break;
553
554                      case "setChildren":
555                        if ($value == "1") {
556                          $this
557                            .querySelector(".mcn-i")
558                            .classList.add("fa-check-square");
559                          $this.setAttribute("data-value", "0");
560
561                          // Success message
562                          var $action_text =
563                            $children_enabled_action_text +
564                            " " +
565                            $objecttype_text +
566                            ": <b>" +
567                            $title +
568                            "</b>";
569                          var messages = {
570                            message: [$action_text],
571                          };
572                          Joomla.renderMessages(messages);
573                        } else if ($value == "0") {
574                          $this
575                            .querySelector(".mcn-i")
576                            .classList.add("fa-square");
577                          $this.setAttribute("data-value", "1");
578
579                          // Success message
580                          var $action_text =
581                            $children_disabled_action_text +
582                            " " +
583                            $objecttype_text +
584                            ": <b>" +
585                            $title +
586                            "</b>";
587                          var messages = {
588                            message: [$action_text],
589                          };
590                          Joomla.renderMessages(messages);
591                        }
592
593                        // Remove loading class
594                        $this
595                          .closest(".mcn-group")
596                          .classList.remove("mcn-loading");
597
598                        break;
599                    }
600                  } else if (msg === "noaccess") {
601                    // controller returns 'noaccess'
602                    // Log error in console
603                    console.log(msg);
604
605                    // Remove loading class
606                    $this.closest(".mcn-group").classList.remove("mcn-loading");
607
608                    // Error message
609                    var $action_text = $no_access_action_text;
610                    var messages = {
611                      error: [$action_text],
612                    };
613                    Joomla.renderMessages(messages);
614                  } // controller returns false - model failed
615                  else {
616                    // Log error in console
617                    console.log(msg);
618
619                    // Remove loading class
620                    $this.closest(".mcn-group").classList.remove("mcn-loading");
621
622                    // Error message
623                    var $action_text = $operation_failed_action_text;
624                    var messages = {
625                      error: [$action_text],
626                    };
627                    Joomla.renderMessages(messages);
628                  }
629
630                  // Hide loader
631                  if (
632                    !$this.closest(".mcn-group").querySelector(".mcn-loading")
633                  ) {
634                    $this
635                      .closest(".mcn-group")
636                      .querySelector(".mcn-loader").style.display = "none";
637                  }
638                },
639                onError: (xhr) => {
640                  console.log(xhr);
641                },
642              });
643            } else {
644              // Login message
645              var messages = {
646                error: [$login_text],
647              };
648              Joomla.renderMessages(messages);
649            }
650          }
651        });
652      });
653    }
654
655    // Guest form
656    const mcn_btn_guest_action = document.querySelectorAll(
657      ".mcn-btn-guest-action"
658    );
659
660    if (mcn_btn_guest_action) {
661      mcn_btn_guest_action.forEach(function (a) {
662        a.addEventListener("click", function (e) {
663          e.preventDefault();
664          var $this = e.target;
665          var $action = $this.getAttribute("data-action");
666
667          // Check if there is a pending action
668          if (!$this.closest(".mcn-group").classList.contains("mcn-loading")) {
669            var $name = $this
670              .closest(".mcn-form")
671              .querySelector('input[name="mcn_guest_name"]').value;
672            $name = $name.substring(0, 100);
673            $name = $name.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, "");
674
675            if ($action != "unsubscribeGuest") {
676              // Validate name
677              if (!$name || $name == "") {
678                var messages = {
679                  error: [$name_validation_text],
680                };
681                Joomla.renderMessages(messages);
682
683                return false;
684              }
685            }
686
687            // Validate email
688            var $email = $this
689              .closest(".mcn-form")
690              .querySelector('input[name="mcn_guest_email"]').value;
691            $email = $email.substring(0, 100);
692
693            if (!isValidEmailAddress($email) || !$email || $email == "") {
694              var messages = {
695                error: [$email_validation_text],
696              };
697              Joomla.renderMessages(messages);
698
699              return false;
700            }
701
702            $email = encodeURIComponent($email);
703
704            var $component = $this.getAttribute("data-component");
705            var $objecttype = $this.getAttribute("data-objecttype");
706            var $objectid = $this.getAttribute("data-object");
707            var $title = $this.getAttribute("data-title");
708            var $return = $this.getAttribute("data-return");
709
710            // Add loading class
711            $this.closest(".mcn-group").classList.add("mcn-loading");
712
713            // Show loader
714            $this
715              .closest(".mcn-group")
716              .querySelector(".mcn-loader").style.display = "inline-block";
717
718            // Perform ajax actions
719            Joomla.request({
720              url:
721                $site_path +
722                "index.php?option=com_contentnotifications&task=follow." +
723                $action +
724                "&redirect=" +
725                $return +
726                "&component=" +
727                $component +
728                "&objecttype=" +
729                $objecttype +
730                "&objectid=" +
731                $objectid +
732                "&username=" +
733                $name +
734                "&useremail=" +
735                $email +
736                "&" +
737                $token,
738              method: "POST",
739              onSuccess: (msg, xhr) => {
740                // Get object type translation
741                var $objecttype_text;
742
743                switch ($objecttype) {
744                  case "item":
745                    $objecttype_text = $item_text;
746                    break;
747                  case "category":
748                    $objecttype_text = $category_text;
749                    break;
750                  case "tag":
751                    $objecttype_text = $tag_text;
752                    break;
753                  case "author":
754                    $objecttype_text = $author_text;
755                    break;
756                }
757
758                // subscribeGuest: Subscription exists
759                if (msg === "2") {
760                  // Remove loading class
761                  $this.closest(".mcn-group").classList.remove("mcn-loading");
762
763                  // Success message
764                  var $action_text =
765                    $subscription_exists_action_text + " " + $objecttype_text;
766                  var messages = {
767                    message: [$action_text],
768                  };
769                  Joomla.renderMessages(messages);
770                } // subscribeGuest: Controller returns true
771                else if (msg === "1") {
772                  // Remove loading class
773                  $this.closest(".mcn-group").classList.remove("mcn-loading");
774
775                  // Success message
776                  var $action_text =
777                    $follow_enabled_action_text +
778                    " " +
779                    $objecttype_text +
780                    ": <b>" +
781                    $title +
782                    "</b><br>" +
783                    $email_verification_text;
784                  var messages = {
785                    message: [$action_text],
786                  };
787                  Joomla.renderMessages(messages);
788                } // unsubscribeGuest: Controller returns success message '3'
789                else if (msg === "3") {
790                  // Remove loading class
791                  $this.closest(".mcn-group").classList.remove("mcn-loading");
792
793                  // Success message
794                  var $action_text = $unsubscribe_verification_text;
795                  var messages = {
796                    message: [$action_text],
797                  };
798                  Joomla.renderMessages(messages);
799                } // Controller returns false - model failed
800                else {
801                  // Log error in console
802                  console.log(msg);
803
804                  // Remove loading class
805                  $this.closest(".mcn-group").classList.remove("mcn-loading");
806
807                  // Error message
808                  var $action_text = $operation_failed_action_text;
809                  var messages = {
810                    error: [$action_text],
811                  };
812                  Joomla.renderMessages(messages);
813                }
814
815                // Hide loader
816                if (
817                  !$this.closest(".mcn-group").querySelector(".mcn-loading")
818                ) {
819                  $this
820                    .closest(".mcn-group")
821                    .querySelector(".mcn-loader").style.display = "none";
822                }
823              },
824              onError: (xhr) => {
825                console.log(xhr);
826              },
827            });
828          }
829        });
830      });
831    }
832  });
833})(document, Joomla);

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.