PageSourceSearch

https://serialkillercalendar.com/Faq.v3.js

js serialkillercalendar.com collected 2026-10-02 07:55:42 UTC 9,092 bytes, 239 lines download raw bytes

1function Faq() {
2  const [sent, setSent] = React.useState(false);
3  const [busy, setBusy] = React.useState(false);
4  const [err, setErr] = React.useState(false);
5  const [challengeErr, setChallengeErr] = React.useState(false);
6  const openedAt = React.useRef(Date.now());
7  // Arithmetic challenge: defeats the scripted form-fillers that get past a honeypot,
8  // at a fraction of the friction of reCAPTCHA. Regenerated per page load.
9  const challenge = React.useRef({
10    a: 2 + Math.floor(Math.random() * 7),
11    b: 2 + Math.floor(Math.random() * 7)
12  });
13  const submit = e => {
14    e.preventDefault();
15    if (busy) return;
16    const f = e.target;
17    // Two invisible gates. Bots fill every field they find and submit almost instantly;
18    // people leave the hidden one alone and take longer than three seconds to type.
19    // On a hit we show the normal success state so the bot learns nothing and stops retrying.
20    const trapped = f.elements._honey && f.elements._honey.value !== "";
21    const tooFast = Date.now() - openedAt.current < 3000;
22    if (trapped || tooFast) {
23      setSent(true);
24      return;
25    }
26    const want = challenge.current.a + challenge.current.b;
27    if (parseInt(f.elements.human.value, 10) !== want) {
28      setChallengeErr(true);
29      return;
30    }
31    setChallengeErr(false);
32    setBusy(true);
33    setErr(false);
34    fetch("https://formsubmit.co/ajax/[email protected]", {
35      method: "POST",
36      headers: {
37        "Content-Type": "application/json",
38        Accept: "application/json"
39      },
40      body: JSON.stringify({
41        name: f.elements.name.value,
42        email: f.elements.email.value,
43        message: f.elements.message.value,
44        _subject: "Serial Killer Magazine, contact form",
45        _honey: "",
46        _template: "table"
47      })
48    }).then(r => {
49      if (!r.ok) throw new Error();
50      return r.json();
51    }).then(() => {
52      setSent(true);
53    }).catch(() => {
54      setErr(true);
55    }).finally(() => setBusy(false));
56  };
57  return /*#__PURE__*/React.createElement("section", {
58    id: "faq",
59    className: "bg-[var(--bone-200)] pt-[50px] pb-[calc(50px+clamp(34px,4vw,72px))]"
60  }, /*#__PURE__*/React.createElement("div", {
61    className: "vfShell"
62  }, /*#__PURE__*/React.createElement("div", {
63    className: "grid grid-cols-12 gap-6"
64  }, /*#__PURE__*/React.createElement("div", {
65    className: "col-span-12 lg:col-span-5 text-left"
66  }, /*#__PURE__*/React.createElement("div", {
67    style: {
68      width: "fit-content",
69      maxWidth: "100%"
70    }
71  }, /*#__PURE__*/React.createElement("h2", {
72    style: {
73      fontSize: "clamp(38px,4.5vw,70px)",
74      lineHeight: 1.08
75    }
76  }, "Looking for new", /*#__PURE__*/React.createElement("br", null), "Artists and Writers"), /*#__PURE__*/React.createElement("div", {
77    className: "mt-6"
78  }, /*#__PURE__*/React.createElement(SectionLabel, {
79    style: {
80      fontSize: "19px",
81      color: "#a80000"
82    }
83  }, "Serial Killer Magazine"))), /*#__PURE__*/React.createElement("p", {
84    className: "mt-6 max-w-[52ch] text-[var(--text-body)]",
85    style: {
86      fontSize: "var(--fs-lead)",
87      lineHeight: "var(--lh-lead)"
88    }
89  }, "We\u2019re always looking for talented new artists and writers to contribute to Serial Killer Magazine. Whether you create original artwork, write compelling true crime stories, or have a unique perspective to share, we\u2019d love to hear from you. Join our growing community of contributors and help bring the darker side of history to life.")), /*#__PURE__*/React.createElement("div", {
90    className: "col-span-12 lg:col-span-6 lg:col-start-7 mt-10 lg:mt-0 vfReveal",
91    "data-anim": "right"
92  }, sent ? /*#__PURE__*/React.createElement(Toast, {
93    tone: "pass"
94  }, "Message sent. We will get back to you soon.") : /*#__PURE__*/React.createElement("form", {
95    className: "vfContactForm flex flex-col gap-7",
96    onSubmit: submit
97  }, /*#__PURE__*/React.createElement("style", null, "#faq .vfContactForm .vfField__label{font-size:17px;letter-spacing:.12em}#faq .vfContactForm .vfField__req{font-size:17px;color:#a80000}"), /*#__PURE__*/React.createElement("div", {
98    "aria-hidden": "true",
99    style: {
100      position: "absolute",
101      left: "-5000px",
102      width: "1px",
103      height: "1px",
104      overflow: "hidden"
105    }
106  }, /*#__PURE__*/React.createElement("label", null, "Leave this field empty", /*#__PURE__*/React.createElement("input", {
107    type: "text",
108    name: "_honey",
109    tabIndex: -1,
110    autoComplete: "off",
111    defaultValue: ""
112  }))), /*#__PURE__*/React.createElement(Input, {
113    label: "Name",
114    name: "name",
115    required: true,
116    placeholder: "Your name"
117  }), /*#__PURE__*/React.createElement(Input, {
118    label: "Email",
119    name: "email",
120    type: "email",
121    required: true,
122    placeholder: "[email protected]"
123  }), /*#__PURE__*/React.createElement("label", {
124    className: "flex flex-col gap-3"
125  }, /*#__PURE__*/React.createElement("span", {
126    className: "font-[var(--font-mono)] text-[17px] tracking-[.12em] uppercase text-[var(--text-muted)] flex justify-between gap-3"
127  }, "Message", /*#__PURE__*/React.createElement("span", {
128    className: "vfField__req"
129  }, "required")), /*#__PURE__*/React.createElement("textarea", {
130    rows: "6",
131    name: "message",
132    required: true,
133    placeholder: "What can we help with?",
134    className: "w-full",
135    style: {
136      background: "var(--bone-100)",
137      border: "1px solid var(--line-strong)",
138      padding: "14px 16px",
139      fontFamily: "var(--font-text)",
140      fontSize: "16px",
141      color: "var(--text-body)",
142      resize: "vertical"
143    }
144  })), /*#__PURE__*/React.createElement("label", {
145    className: "flex flex-col gap-3"
146  }, /*#__PURE__*/React.createElement("span", {
147    className: "font-[var(--font-mono)] text-[17px] tracking-[.12em] uppercase text-[var(--text-muted)] flex justify-between gap-3"
148  }, /*#__PURE__*/React.createElement("span", null, "Spam check: what is ", challenge.current.a, " + ", challenge.current.b, "?"), /*#__PURE__*/React.createElement("span", {
149    className: "vfField__req"
150  }, "required")), /*#__PURE__*/React.createElement("input", {
151    name: "human",
152    type: "text",
153    inputMode: "numeric",
154    required: true,
155    autoComplete: "off",
156    placeholder: "Answer",
157    className: "w-full",
158    style: {
159      background: "var(--bone-100)",
160      border: "1px solid " + (challengeErr ? "#a80000" : "var(--line-strong)"),
161      padding: "14px 16px",
162      fontFamily: "var(--font-text)",
163      fontSize: "16px",
164      color: "var(--text-body)",
165      maxWidth: "180px"
166    }
167  }), challengeErr ? /*#__PURE__*/React.createElement("span", {
168    style: {
169      color: "#a80000",
170      fontSize: "16px"
171    }
172  }, "That is not the right answer. Please try again.") : null), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
173    variant: "primary",
174    size: "lg",
175    as: "button",
176    type: "submit",
177    className: "vfBtnRed",
178    style: {
179      background: "#a80000",
180      borderColor: "#a80000",
181      cursor: "pointer"
182    }
183  }, /*#__PURE__*/React.createElement("span", {
184    className: "vfRoll"
185  }, /*#__PURE__*/React.createElement("i", null, busy ? "Sending\u2026" : "Send Message"), /*#__PURE__*/React.createElement("i", {
186    "aria-hidden": "true"
187  }, busy ? "Sending\u2026" : "Send Message"))))), err ? /*#__PURE__*/React.createElement("p", {
188    className: "mt-4 m-0",
189    style: {
190      color: "#a80000",
191      fontSize: "15px"
192    }
193  }, "Something went wrong sending your message. Please try again.") : null)), sent ? /*#__PURE__*/React.createElement("div", {
194    role: "dialog",
195    "aria-modal": "true",
196    "aria-label": "Message sent",
197    className: "fixed inset-0 z-50 flex items-center justify-center",
198    style: {
199      background: "rgba(14,12,11,.6)"
200    },
201    onClick: () => setSent(false)
202  }, /*#__PURE__*/React.createElement("div", {
203    className: "bg-[var(--bone-100)] border border-[var(--line-strong)] p-10 text-center",
204    style: {
205      maxWidth: "420px",
206      width: "90%"
207    },
208    onClick: e => e.stopPropagation()
209  }, /*#__PURE__*/React.createElement("h3", {
210    className: "m-0",
211    style: {
212      fontSize: "28px"
213    }
214  }, "Message Sent"), /*#__PURE__*/React.createElement("p", {
215    className: "mt-4 mb-0 text-[var(--text-body)]",
216    style: {
217      fontSize: "16px",
218      lineHeight: 1.6
219    }
220  }, "Thanks for reaching out. We will get back to you soon."), /*#__PURE__*/React.createElement("div", {
221    className: "mt-7 flex justify-center"
222  }, /*#__PURE__*/React.createElement(Button, {
223    variant: "primary",
224    as: "button",
225    type: "button",
226    className: "vfBtnRed",
227    style: {
228      background: "#a80000",
229      borderColor: "#a80000",
230      cursor: "pointer"
231    },
232    onClick: () => setSent(false)
233  }, /*#__PURE__*/React.createElement("span", {
234    className: "vfRoll"
235  }, /*#__PURE__*/React.createElement("i", null, "Close"), /*#__PURE__*/React.createElement("i", {
236    "aria-hidden": "true"
237  }, "Close")))))) : null));
238}
239window.Faq = Faq;

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.