PageSourceSearch

https://www.theseahorsetrust.org/wp-content/plugins/cluevo-lms/js/frontend.js?ver=1.13.3

js theseahorsetrust.org collected 2026-10-02 09:54:05 UTC 7,606 bytes, 252 lines download raw bytes

1jQuery(window).ready(function () {
2  jQuery(".cluevo-blocked").click(function (e) {
3    e.preventDefault();
4    var item = this;
5    jQuery(item)
6      .find(".cluevo-meta-item.cluevo-access")
7      .addClass("cluevo-alert");
8    setTimeout(function () {
9      jQuery(item)
10        .find(".cluevo-meta-item.cluevo-access")
11        .removeClass("cluevo-alert");
12    }, 1000);
13  });
14  jQuery(".cluevo-content-list-style-switch .cluevo-btn").click(function (e) {
15    var value = "";
16    var prefix = "cluevo-content-list-style-";
17    if (jQuery(this).hasClass("cluevo-content-list-style-row")) {
18      value = prefix + "row";
19      if (
20        !jQuery(".cluevo-content-list").hasClass(
21          "cluevo-content-list-style-row",
22        )
23      ) {
24        jQuery(".cluevo-content-list").addClass(
25          "cluevo-content-list-style-row",
26        );
27      }
28      jQuery(".cluevo-content-list-style-col").removeClass("active");
29    }
30    if (jQuery(this).hasClass("cluevo-content-list-style-col")) {
31      value = prefix + "col";
32      jQuery(".cluevo-content-list").removeClass(
33        "cluevo-content-list-style-row",
34      );
35      jQuery(".cluevo-content-list-style-row").removeClass("active");
36    }
37
38    if (!jQuery(this).hasClass("active")) {
39      jQuery(this).addClass("active");
40    }
41
42    var d = new Date();
43    d.setTime(d.getTime() + 365 * 24 * 60 * 60 * 1000);
44    var expires = "expires=" + d.toUTCString();
45    document.cookie =
46      "cluevo-content-list-style=" + value + ";" + expires + ";path=/";
47  });
48
49  jQuery(".cluevo-content-item-link.access-denied:not(.missing-reqs)").click(
50    cluevoDisplayAccessDenied,
51  );
52  jQuery(".cluevo-content-item-link.access-denied.missing-reqs").click(
53    cluevoDisplayMissingDependencies,
54  );
55
56  // jQuery('.cluevo-pdf-download-link').click(function(e) {
57  //   e.preventDefault();
58  //   e.stopPropagation();
59  //   window.open(jQuery(this).data('href'));
60  // });
61});
62
63function cluevoDisplayAccessDenied(e) {
64  e.preventDefault();
65
66  let text =
67    jQuery(this).data("access-denied-text") &&
68    jQuery(this).data("access-denied-text") != ""
69      ? jQuery(this).data("access-denied-text")
70      : cluevoStrings.message_access_denied;
71  cluevoAlert(cluevoStrings.message_title_access_denied, text, "error");
72}
73
74function cluevoDisplayMissingDependencies(e) {
75  e.preventDefault();
76
77  const itemId = jQuery(this).data("item-id");
78  const reqLevel = Number(jQuery(this).data("level-required"));
79  const reqPoints = Number(jQuery(this).data("points-required"));
80  const userLevel = Number(jQuery(this).data("user-level"));
81  const userPoints = Number(jQuery(this).data("user-points"));
82
83  if (!itemId) return cluevoDisplayAccessDenied(e);
84
85  let text =
86    jQuery(this).data("access-denied-text") &&
87    jQuery(this).data("access-denied-text") != ""
88      ? jQuery(this).data("access-denied-text")
89      : cluevoStrings.message_access_denied;
90
91  const msg = Vue.createApp(
92    {
93      props: [
94        "itemId",
95        "text",
96        "requiredLevel",
97        "userLevel",
98        "requiredPoints",
99        "userPoints",
100      ],
101      data() {
102        return {
103          dependencies: [],
104          strings: null,
105        };
106      },
107      created() {
108        this.strings = window.cluevoStrings;
109        const deps = document.getElementById(
110          `cluevo-missing-dependencies-${this.itemId}`,
111        )?.textContent;
112        if (!deps) return;
113        this.dependencies = JSON.parse(deps);
114      },
115      computed: {
116        levelString() {
117          return `${this.strings.message_level_required.replace(
118            "%d",
119            this.requiredLevel,
120          )} ${this.strings.message_your_level.replace("%d", this.userLevel)}`;
121        },
122        pointsString() {
123          return `${this.strings.message_points_required.replace(
124            "%d",
125            this.requiredPoints,
126          )} ${this.strings.message_your_points.replace(
127            "%d",
128            this.userPoints,
129          )}`;
130        },
131      },
132      methods: {
133        close() {
134          jQuery(this.$el).fadeOut(300, () => {
135            this.unmount();
136            this.$el.remove();
137          });
138        },
139      },
140      template: `
141    <div class="cluevo-alert-overlay cluevo-dismiss-click-area error" @click.self="close">
142      <div class="cluevo-alert">
143          <p class="cluevo-alert-title">
143{{ strings.message_title_access_denied }}</p>
144          <p>{{ text }}</p>
145          <template v-if="requiredLevel">
146            <p>{{ levelString }}</p>
147          </template>
148          <template v-if="requiredPoints">
149            <p>{{ pointsString }}</p>
150          </template>
151          <template v-if="dependencies?.length">
152            <p>{{ strings.message_missing_dependencies }}</p>
153            <ul>
154              <li v-for="d, i of dependencies" :key="i">
155                <a v-if="d.access" :href="d.url">{{ d.title }}</a>
156                <span v-else>{{ d.title }}</span>
157              </li>
158            </ul>
159          </template>
160         <div class="cluevo-alert-close-button cluevo-dismiss-click-area">╳</div>
161      </div>
162    </div>
163  `,
164    },
165    {
166      itemId,
167      text,
168      requiredLevel: reqLevel,
169      requiredPoints: reqPoints,
170      userLevel,
171      userPoints,
172    },
173  );
174
175  const container = document.createElement("div");
176  msg.mount(container);
177  document.body.appendChild(container);
178  const overlay = container.querySelector(".cluevo-alert-overlay");
179  const btn = overlay.querySelector(".cluevo-alert-close-button");
180  btn?.addEventListener("click", () => {
181    jQuery(overlay).fadeOut(300, () => {
182      msg.unmount();
183      overlay.remove();
184    });
185  });
186  jQuery(overlay).animate(
187    {
188      opacity: 1,
189    },
190    200,
191  );
192}
193
194function cluevoAlert(title, message, type) {
195  jQuery(".cluevo-alert-overlay").remove();
196  var box = jQuery(
197    '<div class="cluevo-alert-overlay cluevo-dismiss-click-area ' +
198      cluevo_encodeHTML(type) +
199      '"><div class="cluevo-alert ' +
200      cluevo_encodeHTML(type) +
201      '"><p class="cluevo-alert-title">' +
202      cluevo_encodeHTML(title) +
203      "</p><p>" +
204      cluevo_nl2br(cluevo_encodeHTML(message)) +
205      '</p><div class="cluevo-alert-close-button cluevo-dismiss-click-area">╳</div></div></div>',
206  );
207  jQuery(box).on("click", ".cluevo-alert-close-button", function (e) {
208    e.stopPropagation();
209    if (jQuery(this).hasClass("cluevo-dismiss-click-area")) {
210      jQuery(".cluevo-alert-overlay").fadeOut(200, function () {
211        jQuery(this).remove();
212      });
213    }
214  });
215  jQuery(box).on("click", function (e) {
216    e.stopPropagation();
217    if (e.target != this) return;
218    if (jQuery(this).hasClass("cluevo-dismiss-click-area")) {
219      jQuery(".cluevo-alert-overlay").fadeOut(200, function () {
220        jQuery(this).remove();
221      });
222    }
223  });
224  box.appendTo("body").animate(
225    {
226      opacity: 1,
227    },
228    200,
229  );
230}
231
232function cluevo_nl2br(str) {
233  if (typeof str === "undefined" || str === null) {
234    return "";
235  }
236  return (str + "").replace(
237    /([^>\r\n]?)(\r\n|\n\r|\r|\n)/g,
238    "$1" + "<br />" + "$2",
239  );
240}
241
242function cluevo_encodeHTML(s) {
243  if (!s) return "";
244  return s
245    .toString()
246    .replace(/&/g, "&amp;")
247    .replace(/</g, "&lt;")
248    .replace(/>/g, "&gt;")
249    .replace(/"/g, "&quot;");
250}
251
252// const cluevoDependencyList = Vue.extend(cluevoDependencyListComp);

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.