PageSourceSearch

https://www.3djoeandmax.com/scripts.20260919/html/2.0/skn.form.js

js 3djoeandmax.com collected 2026-09-26 00:29:17 UTC 7,482 bytes, 260 lines download raw bytes

1var SKN_FORM_ERRORS = {
2  required: "This field is required.",
3  checkbox_required: "You must tick this box",
4};
5
6/////////////////////////////
7//READY FUNC
8/////////////////////////////
9
10$(window)
11  .on("onSknReady", function () {
12    sknFormReady();
13  })
14  .on("onSknSiteReady", function () {
15    sknFormSiteReady();
16  })
17  .on("onSknPageReady", function () {
18    sknFormReady();
19  });
20
21//document ready
22function sknFormReady() {
23  //remove any inline height left from editor
24  $(".skn-inline.sknform").css("height", "");
25  $(".sknform .onsubmit").append(
26    '<span></span><a class="retrunBtn" href="javascript:void;">Refresh Form</a>'
27  );
28  $(".sknform form").on("submit", function (event) {
29    _onFormSend($(this).closest("form"));
30    event.preventDefault();
31    _sknFormHeightChange($(this));
32    return false;
33  });
34  $(".sknform .retrunBtn").on("click", function () {
35    $(this).closest(".sknform").toggleClass("submitted", false);
36    _toggleFormMessage($(this).closest(".sknform"), "", false);
37    _sknFormHeightChange($(this));
38    return false;
39  });
40}
41
42function sknFormMandatoryCheckboxes() {}
43
44function sknLightboxForm() {
45  //remove any inline height left from editor
46  $(".pagelightbox .skn-inline.sknform").css("height", "");
47  $(".pagelightbox .sknform .onsubmit").append(
48    '<span></span><a class="retrunBtn" href="javascript:void;">Refresh Form</a>'
49  );
50  $(".pagelightbox .sknform form").on("submit", function (event) {
51    _onFormSend($(this).closest("form"));
52    event.preventDefault();
53    _sknFormHeightChange($(this));
54    return false;
55  });
56  $(".pagelightbox .sknform .retrunBtn").on("click", function () {
57    $(this).closest(".sknform").toggleClass("submitted", false);
58    _toggleFormMessage($(this).closest(".sknform"), "", false);
59    _sknFormHeightChange($(this));
60    return false;
61  });
62}
63
64function _sknFormHeightChange(form) {
65  if (form && form.length) {
66    form.closest(".skn-sectiongrid").sknGridForce();
67  }
68  $(window).trigger("resize");
69}
70
71//site ready
72function sknFormSiteReady() {
73  onRenderReady();
74}
75
76function onRenderReady() {
77  var ele = $(".sknform");
78  if (ele.length && window.parent != undefined) {
79    var dim = { w: ele.width(), h: ele.height() };
80    window.parent.postMessage(
81      { event: "pready", data: dim, url: window.location + "" },
82      "*"
83    );
84  }
85}
86
87function _doFormCheck(form) {
88  var error_class = form.attr("data-error-class");
89  form.find("span.sknformerror, .sknformbutton span").html("");
90  var errors = false;
91  form.find(".sknforminputrow[data-req]").each(function () {
92    $(this).find(".sknformerror").remove();
93    if (
94      $(this)
95        .find(
96          ".sknforminput > input, .sknforminput > textarea, .sknforminput > select"
97        )
98        .val() == ""
99    ) {
100      $(this).append(
101        '<span class="sknformerror ' +
102          error_class +
103          '">' +
104          SKN_FORM_ERRORS.required +
105          "</span>"
106      );
107      errors = true;
108    } else if (
109      $(this).find('input[type="checkbox"]:not(.sknformcheckboxgroup input)')
110        .length &&
111      $(this).find('input[type="checkbox"]:not(.sknformcheckboxgroup input)')[0]
112        .checked === false
113    ) {
114      $(this).append(
115        '<span class="sknformerror checkbox-empty ' +
116          error_class +
117          '">' +
118          SKN_FORM_ERRORS.checkbox_required +
119          "</span>"
120      );
121      errors = true;
122    }
123  });
124  _sknFormHeightChange(form);
125  if (errors) {
126    return false;
127  }
128  return true;
129}
130
131function _onFormSend(form) {
132  if (form && form.length && form.is("form") && _doFormCheck(form)) {
133    //TODO send the page id too
134    var acc_id = $("html").classLike("skn-acc-");
135    var page_id = $("html").classLike("skn-page-");
136    if (!page_id) {
137      page_id = $("html").classLike("skn-post-");
138    }
139    if (acc_id && page_id) {
140      acc_id = acc_id.replace("skn-acc-", "");
141      page_id = page_id.replace("skn-page-", "");
142      page_id = page_id.replace("skn-post-", "");
143
144      _toggleSendMode(form, true);
145      var options = {
146        target: form,
147        data: { sknacc: acc_id, "skn-form-page": page_id },
148        url: form.attr("action") + "sknform",
149        type: "post",
150        dataType: "json",
151        success: _onFormResponse,
152        error: _onFormResponse,
153      };
154
155      $(form)
156        .find('input[type="checkbox"]')
157        .each(function () {
158          if ($(this).prop("checked")) {
159            options.data[$(this).attr("id")] = "true";
160          } else {
161            options.data[$(this).attr("id")] = "false";
162          }
163        });
164
165      form.ajaxSubmit(options);
166      this._toggleFormMessage(form, '<span id="formpreloader"></span>', false);
167
168      var cl = new CanvasLoader("formpreloader");
169      //cl.setColor((preloader.css('color')).rgbToHex()); // default is '#000000'
170      cl.setShape("spiral"); // default is 'oval'
171      cl.setDiameter(20); // default is 40
172      cl.setDensity(11); // default is 40
173      cl.setRange(1.4); // default is 1.3
174      cl.setSpeed(1); // default is 2
175      cl.setFPS(14); // default is 24
176      cl.show(); // Hidden by default
177    } else {
178      alert("Sorry, this form is not compatible with your device");
179    }
180  }
181}
182
183function _onFormResponse(r) {
184  if (
185    r.success != undefined &&
186    r.message != undefined &&
187    r.data != undefined &&
188    r.data.form_id != undefined
189  ) {
190    var form = $(
191      'input[name="sknform"][value="' + r.data.form_id + '"]'
192    ).closest("form");
193    var error_class = form.attr("data-error-class");
194    if (form.length) {
195      if (r.success) {
196        form.closest(".sknform").find(".onsubmit span").html(r.message);
197        form.closest(".sknform").toggleClass("submitted", true);
198        form
199          .find(".sknforminputrow")
200          .find("input, textarea")
201          .not('[type="radio"]')
202          .val("");
203        if (r.data.redirect !== undefined) {
204          window.location = r.data.redirect;
205        }
206      } else {
207        _toggleFormMessage(
208          form,
209          '<span class="sknformerror ' +
210            error_class +
211            '">' +
212            r.message +
213            "</span>"
214        );
215        if (r.data.errors != undefined && r.data.errors) {
216          for (var att in r.data.errors) {
217            var i = form.find('input[name="' + att + '"]');
218            if (i.length) {
219              i.closest(".sknforminputrow")
220                .find("label")
221                .after(
222                  '<span class="sknformerror ' +
223                    error_class +
224                    '">' +
225                    r.data.errors[att] +
226                    "</span>"
227                );
228            }
229          }
230        }
231      }
232      _toggleSendMode(form, false);
233      _sknFormHeightChange(form);
234    }
235  } else {
236    $("#formpreloader").remove();
237    var form = $('input[name="sknform"]').closest("form");
238    if (form.length) {
239      form
240        .closest(".sknform")
241        .find(".onsubmit span")
242        .html("Sorry, there was a temporary problem sending your message.");
243      form.closest(".sknform").toggleClass("submitted", true);
244    }
245  }
246}
247
248function _toggleFormMessage(form, html) {
249  form.find(".sknformbutton span").remove();
250  form.find(".sknformbutton").append(html);
251}
252
253function _toggleSendMode(form, b) {
254  form.closest(".sknform").toggleClass("sending", b);
255  if (b) {
256    form.find('input[type="submit"]').attr("disabled", "disabled");
257  } else {
258    form.find('input[type="submit"]').removeAttr("disabled");
259  }
260}

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.