· 8 years ago · May 29, 2018, 07:50 AM
1//SugarCube.js
2/*! SugarCube JS */
3if (document.documentElement.getAttribute("data-init") === "loading") {
4 ! function(window, document, jQuery, undefined) {
5 "use strict";
6
7 function _classCallCheck(e, t) {
8 if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function")
9 }
10
11 function _toConsumableArray(e) {
12 if (Array.isArray(e)) {
13 for (var t = 0, r = Array(e.length); t < e.length; t++) r[t] = e[t];
14 return r
15 }
16 return Array.from(e)
17 }
18 var _createClass = function() {
19 function e(e, t) {
20 for (var r = 0; r < t.length; r++) {
21 var n = t[r];
22 n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n)
23 }
24 }
25 return function(t, r, n) {
26 return r && e(t.prototype, r), n && e(t, n), t
27 }
28 }(),
29 _slicedToArray = function() {
30 function e(e, t) {
31 var r = [],
32 n = !0,
33 a = !1,
34 i = undefined;
35 try {
36 for (var o, s = e[Symbol.iterator](); !(n = (o = s.next()).done) && (r.push(o.value), !t || r.length !== t); n = !0);
37 } catch (e) {
38 a = !0, i = e
39 } finally {
40 try {
41 !n && s.return && s.return()
42 } finally {
43 if (a) throw i
44 }
45 }
46 return r
47 }
48 return function(t, r) {
49 if (Array.isArray(t)) return t;
50 if (Symbol.iterator in Object(t)) return e(t, r);
51 throw new TypeError("Invalid attempt to destructure non-iterable instance")
52 }
53 }(),
54 _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
55 return typeof e
56 } : function(e) {
57 return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
58 },
59 Alert = function() {
60 function e(e, t, r, n) {
61 var a = "fatal" === e,
62 i = "Apologies! " + (a ? "A fatal" : "An") + " error has occurred.";
63 i += a ? " Aborting." : " You may be able to continue, but some parts may not work properly.", null == t && null == r || (i += "\n\nError", null != t && (i += " [" + t + "]"), i += null != r ? ": " + r.replace(/^(?:(?:uncaught\s+(?:exception:\s+)?)?error:\s+)+/i, "") + "." : ": unknown error."), n && n.stack && (i += "\n\nStack Trace:\n" + n.stack), window.alert(i)
64 }
65
66 function t(t, r, n) {
67 e(null, t, r, n)
68 }
69
70 function r(t, r, n) {
71 e("fatal", t, r, n)
72 }
73 return function(e) {
74 window.onerror = function(n, a, i, o, s) {
75 "complete" === document.readyState ? t(null, n, s) : (r(null, n, s), window.onerror = e, "function" == typeof window.onerror && window.onerror.apply(this, arguments))
76 }
77 }(window.onerror), Object.freeze(Object.defineProperties({}, {
78 error: {
79 value: t
80 },
81 fatal: {
82 value: r
83 }
84 }))
85 }();
86 ! function() {
87 function e(e, t) {
88 var a = String(e);
89 switch (t) {
90 case "start":
91 return a && r.test(a) ? a.replace(r, "") : a;
92 case "end":
93 return a && n.test(a) ? a.replace(n, "") : a;
94 default:
95 throw new Error('_trimFrom called with incorrect where parameter value: "' + t + '"')
96 }
97 }
98
99 function t(e, t) {
100 var r = Number.parseInt(e, 10) || 0;
101 if (r < 1) return "";
102 var n = "undefined" == typeof t ? "" : String(t);
103 for ("" === n && (n = " "); n.length < r;) {
104 var a = n.length,
105 i = r - a;
106 n += a > i ? n.slice(0, i) : n
107 }
108 return n.length > r && (n = n.slice(0, r)), n
109 }
110 var r = /^[\s\u00A0\uFEFF][\s\u00A0\uFEFF]*/,
111 n = /[\s\u00A0\uFEFF][\s\u00A0\uFEFF]*$/;
112 Array.prototype.includes || Object.defineProperty(Array.prototype, "includes", {
113 configurable: !0,
114 writable: !0,
115 value: function() {
116 if (null == this) throw new TypeError("Array.prototype.includes called on null or undefined");
117 if (0 === arguments.length) return !1;
118 var e = this.length >>> 0;
119 if (0 === e) return !1;
120 var t = arguments[0],
121 r = Number(arguments[1]) || 0;
122 for (r < 0 && (r = Math.max(0, e + r)); r < e; ++r) {
123 var n = this[r];
124 if (t === n || t !== t && n !== n) return !0
125 }
126 return !1
127 }
128 }), String.prototype.padStart || Object.defineProperty(String.prototype, "padStart", {
129 configurable: !0,
130 writable: !0,
131 value: function(e, r) {
132 if (null == this) throw new TypeError("String.prototype.padStart called on null or undefined");
133 var n = String(this),
134 a = n.length,
135 i = Number.parseInt(e, 10);
136 return i <= a ? n : t(i - a, r) + n
137 }
138 }), String.prototype.padEnd || Object.defineProperty(String.prototype, "padEnd", {
139 configurable: !0,
140 writable: !0,
141 value: function(e, r) {
142 if (null == this) throw new TypeError("String.prototype.padEnd called on null or undefined");
143 var n = String(this),
144 a = n.length,
145 i = Number.parseInt(e, 10);
146 return i <= a ? n : n + t(i - a, r)
147 }
148 }), String.prototype.trimStart || Object.defineProperty(String.prototype, "trimStart", {
149 configurable: !0,
150 writable: !0,
151 value: function() {
152 if (null == this) throw new TypeError("String.prototype.trimStart called on null or undefined");
153 return e(this, "start")
154 }
155 }), String.prototype.trimLeft || Object.defineProperty(String.prototype, "trimLeft", {
156 configurable: !0,
157 writable: !0,
158 value: function() {
159 if (null == this) throw new TypeError("String.prototype.trimLeft called on null or undefined");
160 return e(this, "start")
161 }
162 }), String.prototype.trimEnd || Object.defineProperty(String.prototype, "trimEnd", {
163 configurable: !0,
164 writable: !0,
165 value: function() {
166 if (null == this) throw new TypeError("String.prototype.trimEnd called on null or undefined");
167 return e(this, "end")
168 }
169 }), String.prototype.trimRight || Object.defineProperty(String.prototype, "trimRight", {
170 configurable: !0,
171 writable: !0,
172 value: function() {
173 if (null == this) throw new TypeError("String.prototype.trimRight called on null or undefined");
174 return e(this, "end")
175 }
176 })
177 }(),
178 function() {
179 function _random() {
180 if (0 === arguments.length) throw new Error("_random called with insufficient parameters");
181 var e = void 0,
182 t = void 0;
183 if (1 === arguments.length ? (e = 0, t = arguments[0]) : (e = arguments[0], t = arguments[1]), e > t) {
184 var r = [t, e];
185 e = r[0], t = r[1]
186 }
187 return Math.floor(_nativeMathRandom() * (t - e + 1)) + e
188 }
189
190 function _getCodePointStartAndEnd(e, t) {
191 var r = e.charCodeAt(t);
192 if (Number.isNaN(r)) return {
193 char: "",
194 start: -1,
195 end: -1
196 };
197 if (r < 55296 || r > 57343) return {
198 char: e.charAt(t),
199 start: t,
200 end: t
201 };
202 if (r >= 55296 && r <= 56319) {
203 var n = t + 1;
204 if (n >= e.length) throw new Error("high surrogate without trailing low surrogate");
205 var a = e.charCodeAt(n);
206 if (a < 56320 || a > 57343) throw new Error("high surrogate without trailing low surrogate");
207 return {
208 char: e.charAt(t) + e.charAt(n),
209 start: t,
210 end: n
211 }
212 }
213 if (0 === t) throw new Error("low surrogate without leading high surrogate");
214 var i = t - 1,
215 o = e.charCodeAt(i);
216 if (o < 55296 || o > 56319) throw new Error("low surrogate without leading high surrogate");
217 return {
218 char: e.charAt(i) + e.charAt(t),
219 start: i,
220 end: t
221 }
222 }
223 var _nativeMathRandom = Math.random;
224 Object.defineProperty(Array, "random", {
225 configurable: !0,
226 writable: !0,
227 value: function(e, t, r) {
228 var n = t,
229 a = r;
230 return 2 === arguments.length && (a = n, n = 0), Array.isArray(e) ? e.random(n, a) : e.hasOwnProperty("length") ? [].concat(_toConsumableArray(e)).random(n, a) : void 0
231 }
232 }), Object.defineProperty(Array.prototype, "count", {
233 configurable: !0,
234 writable: !0,
235 value: function() {
236 if (null == this) throw new TypeError("Array.prototype.count called on null or undefined");
237 for (var e = Array.prototype.indexOf, t = arguments[0], r = Number(arguments[1]) || 0, n = 0;
238 (r = e.call(this, t, r)) !== -1;) ++n, ++r;
239 return n
240 }
241 }), Object.defineProperty(Array.prototype, "delete", {
242 configurable: !0,
243 writable: !0,
244 value: function() {
245 if (null == this) throw new TypeError("Array.prototype.delete called on null or undefined");
246 if (0 === arguments.length) return [];
247 var e = this.length >>> 0;
248 if (0 === e) return [];
249 for (var t = Array.prototype.indexOf, r = Array.prototype.push, n = Array.prototype.splice, a = Array.prototype.concat.apply([], arguments), i = [], o = 0, s = a.length; o < s; ++o)
250 for (var u = a[o], l = 0;
251 (l = t.call(this, u, l)) !== -1;) r.apply(i, n.call(this, l, 1));
252 return i
253 }
254 }), Object.defineProperty(Array.prototype, "deleteAt", {
255 configurable: !0,
256 writable: !0,
257 value: function() {
258 if (null == this) throw new TypeError("Array.prototype.deleteAt called on null or undefined");
259 if (0 === arguments.length) return [];
260 var e = this.length >>> 0;
261 if (0 === e) return [];
262 for (var t = Array.prototype.splice, r = [].concat(_toConsumableArray(new Set(Array.prototype.concat.apply([], arguments).map(function(t) {
263 return t < 0 ? Math.max(0, e + t) : t
264 })).values())), n = [].concat(_toConsumableArray(r)).sort(function(e, t) {
265 return t - e
266 }), a = [], i = 0, o = r.length; i < o; ++i) a[i] = this[r[i]];
267 for (var s = 0, u = n.length; s < u; ++s) t.call(this, n[s], 1);
268 return a
269 }
270 }), Object.defineProperty(Array.prototype, "flatten", {
271 configurable: !0,
272 writable: !0,
273 value: function() {
274 if (null == this) throw new TypeError("Array.prototype.flatten called on null or undefined");
275 return Array.prototype.reduce.call(this, function(e, t) {
276 return e.concat(Array.isArray(t) ? t.flatten() : t)
277 }, [])
278 }
279 }), Object.defineProperty(Array.prototype, "includesAll", {
280 configurable: !0,
281 writable: !0,
282 value: function() {
283 if (null == this) throw new TypeError("Array.prototype.includesAll called on null or undefined");
284 if (1 === arguments.length) return Array.isArray(arguments[0]) ? Array.prototype.includesAll.apply(this, arguments[0]) : Array.prototype.includes.apply(this, arguments);
285 for (var e = 0, t = arguments.length; e < t; ++e)
286 if (!Array.prototype.some.call(this, function(e) {
287 return e === this.val || e !== e && this.val !== this.val
288 }, {
289 val: arguments[e]
290 })) return !1;
291 return !0
292 }
293 }), Object.defineProperty(Array.prototype, "includesAny", {
294 configurable: !0,
295 writable: !0,
296 value: function() {
297 if (null == this) throw new TypeError("Array.prototype.includesAny called on null or undefined");
298 if (1 === arguments.length) return Array.isArray(arguments[0]) ? Array.prototype.includesAny.apply(this, arguments[0]) : Array.prototype.includes.apply(this, arguments);
299 for (var e = 0, t = arguments.length; e < t; ++e)
300 if (Array.prototype.some.call(this, function(e) {
301 return e === this.val || e !== e && this.val !== this.val
302 }, {
303 val: arguments[e]
304 })) return !0;
305 return !1
306 }
307 }), Object.defineProperty(Array.prototype, "pluck", {
308 configurable: !0,
309 writable: !0,
310 value: function(e, t) {
311 if (null == this) throw new TypeError("Array.prototype.pluck called on null or undefined");
312 var r = this.length >>> 0;
313 if (0 !== r) {
314 var n = e,
315 a = t;
316 return 1 === arguments.length && (a = n, n = 0), null == n ? n = 0 : n < 0 ? (n = r + n, n < 0 && (n = 0)) : n >= r && (n = r - 1), null == a ? a = r - 1 : a < 0 ? (a = r + a, a < 0 && (a = r - 1)) : a >= r && (a = r - 1), Array.prototype.splice.call(this, _random(n, a), 1)[0]
317 }
318 }
319 }), Object.defineProperty(Array.prototype, "random", {
320 configurable: !0,
321 writable: !0,
322 value: function(e, t) {
323 if (null == this) throw new TypeError("Array.prototype.random called on null or undefined");
324 var r = this.length >>> 0;
325 if (0 !== r) {
326 var n = e,
327 a = t;
328 return 1 === arguments.length && (a = n, n = 0), null == n ? n = 0 : n < 0 ? (n = r + n, n < 0 && (n = 0)) : n >= r && (n = r - 1), null == a ? a = r - 1 : a < 0 ? (a = r + a, a < 0 && (a = r - 1)) : a >= r && (a = r - 1), this[_random(n, a)]
329 }
330 }
331 }), Object.defineProperty(Array.prototype, "shuffle", {
332 configurable: !0,
333 writable: !0,
334 value: function() {
335 if (null == this) throw new TypeError("Array.prototype.shuffle called on null or undefined");
336 var e = this.length >>> 0;
337 if (0 !== e) {
338 for (var t = e - 1; t > 0; --t) {
339 var r = Math.floor(_nativeMathRandom() * (t + 1)),
340 n = [this[r], this[t]];
341 this[t] = n[0], this[r] = n[1]
342 }
343 return this
344 }
345 }
346 }), Object.defineProperty(Function.prototype, "partial", {
347 configurable: !0,
348 writable: !0,
349 value: function() {
350 if (null == this) throw new TypeError("Function.prototype.partial called on null or undefined");
351 var e = Array.prototype.slice,
352 t = this,
353 r = e.call(arguments, 0);
354 return function() {
355 for (var n = [], a = 0, i = 0; i < r.length; ++i) n.push(r[i] === undefined ? arguments[a++] : r[i]);
356 return t.apply(this, n.concat(e.call(arguments, a)))
357 }
358 }
359 }), Object.defineProperty(Math, "clamp", {
360 configurable: !0,
361 writable: !0,
362 value: function e(t, r, n) {
363 var e = Number(t);
364 return Number.isNaN(e) ? NaN : e.clamp(r, n)
365 }
366 }), Object.defineProperty(Math, "easeInOut", {
367 configurable: !0,
368 writable: !0,
369 value: function(e) {
370 return 1 - (Math.cos(Number(e) * Math.PI) + 1) / 2
371 }
372 }), Object.defineProperty(Number.prototype, "clamp", {
373 configurable: !0,
374 writable: !0,
375 value: function() {
376 if (null == this) throw new TypeError("Number.prototype.clamp called on null or undefined");
377 if (2 !== arguments.length) throw new Error("Number.prototype.clamp called with an incorrect number of parameters");
378 var e = Number(arguments[0]),
379 t = Number(arguments[1]);
380 if (e > t) {
381 var r = [t, e];
382 e = r[0], t = r[1]
383 }
384 return Math.min(Math.max(this, e), t)
385 }
386 }), RegExp.escape || ! function() {
387 var e = /[\\^$*+?.()|[\]{}]/g,
388 t = new RegExp(e.source);
389 Object.defineProperty(RegExp, "escape", {
390 configurable: !0,
391 writable: !0,
392 value: function(r) {
393 var n = String(r);
394 return n && t.test(n) ? n.replace(e, "\\$&") : n
395 }
396 })
397 }(),
398 function() {
399 var e = /{(\d+)(?:,([+-]?\d+))?}/g,
400 t = new RegExp(e.source);
401 Object.defineProperty(String, "format", {
402 configurable: !0,
403 writable: !0,
404 value: function(r) {
405 function n(e, t, r) {
406 if (!t) return e;
407 var n = Math.abs(t) - e.length;
408 if (n < 1) return e;
409 var a = String(r).repeat(n);
410 return t < 0 ? e + a : a + e
411 }
412 if (arguments.length < 2) return 0 === arguments.length ? "" : r;
413 var a = 2 === arguments.length && Array.isArray(arguments[1]) ? [].concat(_toConsumableArray(arguments[1])) : Array.prototype.slice.call(arguments, 1);
414 return 0 === a.length ? r : t.test(r) ? (e.lastIndex = 0, r.replace(e, function(e, t, r) {
415 var i = a[t];
416 if (null == i) return "";
417 for (;
418 "function" == typeof i;) i = i();
419 switch ("undefined" == typeof i ? "undefined" : _typeof(i)) {
420 case "string":
421 break;
422 case "object":
423 i = JSON.stringify(i);
424 break;
425 default:
426 i = String(i)
427 }
428 return n(i, r ? Number.parseInt(r, 10) : 0, " ")
429 })) : r
430 }
431 })
432 }(), Object.defineProperty(String.prototype, "contains", {
433 configurable: !0,
434 writable: !0,
435 value: function() {
436 if (null == this) throw new TypeError("String.prototype.contains called on null or undefined");
437 return String.prototype.indexOf.apply(this, arguments) !== -1
438 }
439 }), Object.defineProperty(String.prototype, "count", {
440 configurable: !0,
441 writable: !0,
442 value: function() {
443 if (null == this) throw new TypeError("String.prototype.count called on null or undefined");
444 var e = String(arguments[0] || "");
445 if ("" === e) return 0;
446 for (var t = String.prototype.indexOf, r = e.length, n = Number(arguments[1]) || 0, a = 0;
447 (n = t.call(this, e, n)) !== -1;) ++a, n += r;
448 return a
449 }
450 }), Object.defineProperty(String.prototype, "splice", {
451 configurable: !0,
452 writable: !0,
453 value: function(e, t, r) {
454 if (null == this) throw new TypeError("String.prototype.splice called on null or undefined");
455 var n = this.length >>> 0;
456 if (0 === n) return "";
457 var a = Number(e);
458 Number.isSafeInteger(a) ? a < 0 && (a += n, a < 0 && (a = 0)) : a = 0, a > n && (a = n);
459 var i = Number(t);
460 (!Number.isSafeInteger(i) || i < 0) && (i = 0);
461 var o = this.slice(0, a);
462 return "undefined" != typeof r && (o += r), a + i < n && (o += this.slice(a + i)), o
463 }
464 }), Object.defineProperty(String.prototype, "splitOrEmpty", {
465 configurable: !0,
466 writable: !0,
467 value: function() {
468 if (null == this) throw new TypeError("String.prototype.splitOrEmpty called on null or undefined");
469 return "" === String(this) ? [] : String.prototype.split.apply(this, arguments)
470 }
471 }), Object.defineProperty(String.prototype, "toLocaleUpperFirst", {
472 configurable: !0,
473 writable: !0,
474 value: function() {
475 if (null == this) throw new TypeError("String.prototype.toLocaleUpperFirst called on null or undefined");
476 var e = String(this),
477 t = _getCodePointStartAndEnd(e, 0),
478 r = t.char,
479 n = t.end;
480 return n === -1 ? "" : r.toLocaleUpperCase() + e.slice(n + 1)
481 }
482 }), Object.defineProperty(String.prototype, "toUpperFirst", {
483 configurable: !0,
484 writable: !0,
485 value: function() {
486 if (null == this) throw new TypeError("String.prototype.toUpperFirst called on null or undefined");
487 var e = String(this),
488 t = _getCodePointStartAndEnd(e, 0),
489 r = t.char,
490 n = t.end;
491 return n === -1 ? "" : r.toUpperCase() + e.slice(n + 1)
492 }
493 }), Object.defineProperty(Date.prototype, "toJSON", {
494 configurable: !0,
495 writable: !0,
496 value: function() {
497 return ["(revive:date)", this.toISOString()]
498 }
499 }), Object.defineProperty(Function.prototype, "toJSON", {
500 configurable: !0,
501 writable: !0,
502 value: function() {
503 return ["(revive:eval)", "(" + this.toString() + ")"]
504 }
505 }), Object.defineProperty(Map.prototype, "toJSON", {
506 configurable: !0,
507 writable: !0,
508 value: function() {
509 return ["(revive:map)", [].concat(_toConsumableArray(this))]
510 }
511 }), Object.defineProperty(RegExp.prototype, "toJSON", {
512 configurable: !0,
513 writable: !0,
514 value: function() {
515 return ["(revive:eval)", this.toString()]
516 }
517 }), Object.defineProperty(Set.prototype, "toJSON", {
518 configurable: !0,
519 writable: !0,
520 value: function() {
521 return ["(revive:set)", [].concat(_toConsumableArray(this))]
522 }
523 }), Object.defineProperty(JSON, "reviveWrapper", {
524 configurable: !0,
525 writable: !0,
526 value: function(e, t) {
527 if ("string" != typeof e) throw new TypeError("JSON.reviveWrapper code parameter must be a string");
528 return ["(revive:eval)", [e, t]]
529 }
530 }), Object.defineProperty(JSON, "_real_parse", {
531 value: JSON.parse
532 }), Object.defineProperty(JSON, "parse", {
533 configurable: !0,
534 writable: !0,
535 value: function value(text, reviver) {
536 return JSON._real_parse(text, function(key, val) {
537 var value = val;
538 if (Array.isArray(value) && 2 === value.length) switch (value[0]) {
539 case "(revive:set)":
540 value = new Set(value[1]);
541 break;
542 case "(revive:map)":
543 value = new Map(value[1]);
544 break;
545 case "(revive:date)":
546 value = new Date(value[1]);
547 break;
548 case "(revive:eval)":
549 try {
550 if (Array.isArray(value[1])) {
551 var $ReviveData$ = value[1][1];
552 value = eval(value[1][0])
553 } else value = eval(value[1])
554 } catch (e) {}
555 } else if ("string" == typeof value && "@@revive@@" === value.slice(0, 10)) try {
556 value = eval(value.slice(10))
557 } catch (e) {}
558 if ("function" == typeof reviver) try {
559 value = reviver(key, value)
560 } catch (e) {}
561 return value
562 })
563 }
564 }), Object.defineProperty(Array.prototype, "contains", {
565 configurable: !0,
566 writable: !0,
567 value: function() {
568 if (null == this) throw new TypeError("Array.prototype.contains called on null or undefined");
569 return Array.prototype.includes.apply(this, arguments)
570 }
571 }), Object.defineProperty(Array.prototype, "containsAll", {
572 configurable: !0,
573 writable: !0,
574 value: function() {
575 if (null == this) throw new TypeError("Array.prototype.containsAll called on null or undefined");
576 return Array.prototype.includesAll.apply(this, arguments)
577 }
578 }), Object.defineProperty(Array.prototype, "containsAny", {
579 configurable: !0,
580 writable: !0,
581 value: function() {
582 if (null == this) throw new TypeError("Array.prototype.containsAny called on null or undefined");
583 return Array.prototype.includesAny.apply(this, arguments)
584 }
585 }), Object.defineProperty(String.prototype, "readBracketedList", {
586 configurable: !0,
587 writable: !0,
588 value: function() {
589 if (null == this) throw new TypeError("String.prototype.readBracketedList called on null or undefined");
590 for (var e = new RegExp("(?:\\[\\[((?:\\s|\\S)*?)\\]\\])|([^\"'\\s]\\S*)", "gm"), t = [], r = void 0; null !== (r = e.exec(this));) r[1] ? t.push(r[1]) : r[2] && t.push(r[2]);
591 return t
592 }
593 })
594 }();
595 var Browser = function() {
596 var e = {
597 userAgent: navigator.userAgent.toLowerCase()
598 };
599 return e.isGecko = navigator && "Gecko" === navigator.product && !/webkit|trident/.test(e.userAgent), e.isIE = /msie|trident/.test(e.userAgent) && !e.userAgent.includes("opera"), e.ieVersion = function() {
600 var t = /(?:msie\s+|rv:)(\d{1,2}\.\d)/.exec(e.userAgent);
601 return t ? Number([1]) : 0
602 }(), e.isOpera = e.userAgent.includes("opera") || e.userAgent.includes(" opr/"), e.operaVersion = function() {
603 var t = new RegExp((/applewebkit|chrome/.test(e.userAgent) ? "opr" : "version") + "\\/(\\d{1,2}\\.\\d+)"),
604 r = t.exec(e.userAgent);
605 return r ? Number(r[1]) : 0
606 }(), e.isMobile = Object.freeze({
607 Android: /android/.test(e.userAgent),
608 BlackBerry: /blackberry/.test(e.userAgent),
609 iOS: /ip(?:hone|ad|od)/.test(e.userAgent),
610 Windows: /iemobile/.test(e.userAgent),
611 any: function() {
612 var t = e.isMobile;
613 return t.Android || t.BlackBerry || t.iOS || t.Windows
614 }
615 }), Object.freeze(e)
616 }(),
617 Has = function() {
618 function e(e) {
619 try {
620 if (null != e && e.length >= 0) {
621 var t = "SugarCube.WebStorage.Test",
622 r = "1701 Guilty Scott";
623 if (e.setItem(t, r), e.getItem(t) === r) return e.removeItem(t), !0
624 }
625 } catch (e) {}
626 return !1
627 }
628 return Object.freeze({
629 audio: "function" == typeof document.createElement("audio").canPlayType,
630 fileAPI: "File" in window && "FileList" in window && "FileReader" in window && !Browser.isMobile.any() && (!Browser.isOpera || Browser.operaVersion >= 15),
631 geolocation: "geolocation" in navigator && "function" == typeof navigator.geolocation.getCurrentPosition && "function" == typeof navigator.geolocation.watchPosition,
632 localStorage: "localStorage" in window && e(window.localStorage),
633 sessionStorage: "sessionStorage" in window && e(window.sessionStorage)
634 })
635 }(),
636 _ref4 = function() {
637 function e(t) {
638 if ("object" !== ("undefined" == typeof t ? "undefined" : _typeof(t)) || null == t) return t;
639 if ("function" == typeof t.clone) return t.clone(!0);
640 if (t.nodeType && "function" == typeof t.cloneNode) return t.cloneNode(!0);
641 var r = void 0;
642 return Array.isArray(t) ? r = [] : t instanceof Date ? r = new Date(t.getTime()) : t instanceof Map ? (r = new Map, t.forEach(function(t, n) {
643 r.set(n, e(t))
644 })) : t instanceof RegExp ? r = new RegExp(t) : t instanceof Set ? (r = new Set, t.forEach(function(t) {
645 r.add(e(t))
646 })) : r = Object.create(Object.getPrototypeOf(t)), Object.keys(t).forEach(function(n) {
647 return r[n] = e(t[n])
648 }), r
649 }
650
651 function t(e) {
652 for (var t = document.createDocumentFragment(), r = document.createElement("p"), n = void 0; null !== (n = e.firstChild);) {
653 if (n.nodeType === Node.ELEMENT_NODE) {
654 var a = n.nodeName.toUpperCase();
655 switch (a) {
656 case "BR":
657 if (null !== n.nextSibling && n.nextSibling.nodeType === Node.ELEMENT_NODE && "BR" === n.nextSibling.nodeName.toUpperCase()) {
658 e.removeChild(n.nextSibling), e.removeChild(n), t.appendChild(r), r = document.createElement("p");
659 continue
660 }
661 if (!r.hasChildNodes()) {
662 e.removeChild(n);
663 continue
664 }
665 break;
666 case "ADDRESS":
667 case "ARTICLE":
668 case "ASIDE":
669 case "BLOCKQUOTE":
670 case "CENTER":
671 case "DIV":
672 case "DL":
673 case "FIGURE":
674 case "FOOTER":
675 case "FORM":
676 case "H1":
677 case "H2":
678 case "H3":
679 case "H4":
680 case "H5":
681 case "H6":
682 case "HEADER":
683 case "HR":
684 case "MAIN":
685 case "NAV":
686 case "OL":
687 case "P":
688 case "PRE":
689 case "SECTION":
690 case "TABLE":
691 case "UL":
692 r.hasChildNodes() && (t.appendChild(r), r = document.createElement("p")), t.appendChild(n);
693 continue
694 }
695 }
696 r.appendChild(n)
697 }
698 r.hasChildNodes() && t.appendChild(r), e.appendChild(t)
699 }
700
701 function r() {
702 try {
703 return document.activeElement || null
704 } catch (e) {
705 return null
706 }
707 }
708
709 function n(e, t, r) {
710 var n = "object" === ("undefined" == typeof e ? "undefined" : _typeof(e)) ? e : document.getElementById(e);
711 if (null == n) return null;
712 var a = Array.isArray(t) ? t : [t];
713 jQuery(n).empty();
714 for (var i = 0, o = a.length; i < o; ++i)
715 if (Story.has(a[i])) return new Wikifier(n, Story.get(a[i]).processText().trim()), n;
716 if (null != r) {
717 var s = String(r).trim();
718 "" !== s && new Wikifier(n, s)
719 }
720 return n
721 }
722
723 function a(e, t, r) {
724 return jQuery(document.createElement("span")).addClass("error").attr("title", r).text(L10n.get("errorTitle") + ": " + (t || "unknown error")).appendTo(e), !1
725 }
726
727 function i(e, t) {
728 switch ("undefined" == typeof e ? "undefined" : _typeof(e)) {
729 case "number":
730 if (Number.isNaN(e)) return t;
731 break;
732 case "object":
733 if (null === e) return t;
734 if (Array.isArray(e) || e instanceof Set) return [].concat(_toConsumableArray(e)).map(function(e) {
735 return i(e, t)
736 }).join(", ");
737 if (e instanceof Map) {
738 var r = function() {
739 var r = i,
740 n = [].concat(_toConsumableArray(e)).map(function(e) {
741 return r(e[0], t) + " ⇒ " + r(e[1], t)
742 }).join("; ");
743 return {
744 v: "( " + n + " )"
745 }
746 }();
747 if ("object" === ("undefined" == typeof r ? "undefined" : _typeof(r))) return r.v
748 } else {
749 if (e instanceof Date) return e.toLocaleString();
750 if ("function" == typeof e.toString) return e.toString()
751 }
752 return Object.prototype.toString.call(e);
753 case "function":
754 case "undefined":
755 return t
756 }
757 return String(e)
758 }
759 return Object.freeze(Object.defineProperties({}, {
760 clone: {
761 value: e
762 },
763 convertBreaks: {
764 value: t
765 },
766 safeActiveElement: {
767 value: r
768 },
769 setPageElement: {
770 value: n
771 },
772 throwError: {
773 value: a
774 },
775 toStringOrDefault: {
776 value: i
777 }
778 }))
779 }(),
780 clone = _ref4.clone,
781 convertBreaks = _ref4.convertBreaks,
782 safeActiveElement = _ref4.safeActiveElement,
783 setPageElement = _ref4.setPageElement,
784 throwError = _ref4.throwError,
785 toStringOrDefault = _ref4.toStringOrDefault;
786 ! function() {
787 function e(e) {
788 13 !== e.which && 32 !== e.which || (e.preventDefault(), jQuery(safeActiveElement() || this).trigger("click"))
789 }
790
791 function t(e) {
792 return function() {
793 var t = jQuery(this);
794 t.is("[aria-pressed]") && t.attr("aria-pressed", "true" === t.attr("aria-pressed") ? "false" : "true"), e.apply(this, arguments)
795 }
796 }
797
798 function r(e) {
799 return t(function() {
800 jQuery(this).off(".aria-clickable").removeAttr("tabindex aria-controls aria-pressed").not("a,button").removeAttr("role").end().filter("button").prop("disabled", !0), e.apply(this, arguments)
801 })
802 }
803 jQuery.fn.extend({
804 ariaClick: function(n, a) {
805 if (0 === this.length || 0 === arguments.length) return this;
806 var i = n,
807 o = a;
808 return null == o && (o = i, i = undefined), i = jQuery.extend({
809 namespace: undefined,
810 one: !1,
811 selector: undefined,
812 data: undefined,
813 controls: undefined,
814 pressed: undefined,
815 label: undefined
816 }, i), "string" != typeof i.namespace ? i.namespace = "" : "." !== i.namespace[0] && (i.namespace = "." + i.namespace), "boolean" == typeof i.pressed && (i.pressed = i.pressed ? "true" : "false"), this.filter("button").prop("type", "button"), this.not("a,button").attr("role", "button"), this.attr("tabindex", 0), null != i.controls && this.attr("aria-controls", i.controls), null != i.pressed && this.attr("aria-pressed", i.pressed), null != i.label && this.attr({
817 "aria-label": i.label,
818 title: i.label
819 }), this.not("button").on("keypress.aria-clickable" + i.namespace, i.selector, e), this.on("click.aria-clickable" + i.namespace, i.selector, i.data, i.one ? r(o) : t(o)), this
820 }
821 })
822 }(),
823 function() {
824 jQuery.extend({
825 wikiWithOptions: function(e) {
826 for (var t = arguments.length, r = Array(t > 1 ? t - 1 : 0), n = 1; n < t; n++) r[n - 1] = arguments[n];
827 if (0 !== r.length) {
828 var a = document.createDocumentFragment();
829 r.forEach(function(t) {
830 return new Wikifier(a, t, e)
831 });
832 var i = [].concat(_toConsumableArray(a.querySelectorAll(".error"))).map(function(e) {
833 return e.textContent.replace(/^(?:(?:Uncaught\s+)?Error:\s+)+/, "")
834 });
835 if (i.length > 0) throw new Error(i.join("; "))
836 }
837 },
838 wiki: function() {
839 for (var e = arguments.length, t = Array(e), r = 0; r < e; r++) t[r] = arguments[r];
840 this.wikiWithOptions.apply(this, [undefined].concat(t))
841 }
842 }), jQuery.fn.extend({
843 wikiWithOptions: function(e) {
844 for (var t = arguments.length, r = Array(t > 1 ? t - 1 : 0), n = 1; n < t; n++) r[n - 1] = arguments[n];
845 if (0 === this.length || 0 === r.length) return this;
846 var a = document.createDocumentFragment();
847 return r.forEach(function(t) {
848 return new Wikifier(a, t, e)
849 }), this.append(a), this
850 },
851 wiki: function() {
852 for (var e = arguments.length, t = Array(e), r = 0; r < e; r++) t[r] = arguments[r];
853 return this.wikiWithOptions.apply(this, [undefined].concat(t))
854 }
855 })
856 }();
857 var Util = function() {
858 function e(e) {
859 return Object.freeze(Object.assign(Object.create(null), e))
860 }
861
862 function t(e) {
863 var t = void 0;
864 switch ("undefined" == typeof e ? "undefined" : _typeof(e)) {
865 case "number":
866 t = e;
867 break;
868 case "string":
869 t = Number(e);
870 break;
871 default:
872 return !1
873 }
874 return !Number.isNaN(t) && Number.isFinite(t)
875 }
876
877 function r(e) {
878 return "boolean" == typeof e || "string" == typeof e && ("true" === e || "false" === e)
879 }
880
881 function n(e) {
882 return String(e).trim().replace(/[^\w\s\u2013\u2014-]+/g, "").replace(/[_\s\u2013\u2014-]+/g, "-").toLocaleLowerCase()
883 }
884
885 function a(e) {
886 if (null == e) return "";
887 var t = String(e);
888 return t && p.test(t) ? t.replace(f, function(e) {
889 return h[e]
890 }) : t
891 }
892
893 function i(e) {
894 if (null == e) return "";
895 var t = String(e);
896 return t && m.test(t) ? t.replace(g, function(e) {
897 return v[e]
898 }) : t
899 }
900
901 function o(e) {
902 var t = /^([+-]?(?:\d*\.)?\d+)([Mm]?[Ss])$/,
903 r = t.exec(String(e));
904 if (null === r) throw new SyntaxError('invalid time value syntax: "' + e + '"');
905 var n = Number(r[1]);
906 if (/^[Ss]$/.test(r[2]) && (n *= 1e3), Number.isNaN(n) || !Number.isFinite(n)) throw new RangeError('invalid time value: "' + e + '"');
907 return n
908 }
909
910 function s(e) {
911 if ("number" != typeof e || Number.isNaN(e) || !Number.isFinite(e)) {
912 var t = void 0;
913 switch ("undefined" == typeof e ? "undefined" : _typeof(e)) {
914 case "string":
915 t = '"' + e + '"';
916 break;
917 case "number":
918 t = String(e);
919 break;
920 default:
921 t = Object.prototype.toString.call(e)
922 }
923 throw new Error("invalid milliseconds: " + t)
924 }
925 return e + "ms"
926 }
927
928 function u(e) {
929 if (!e.includes("-")) switch (e) {
930 case "bgcolor":
931 return "backgroundColor";
932 case "float":
933 return "cssFloat";
934 default:
935 return e
936 }
937 var t = "-ms-" === e.slice(0, 4) ? e.slice(1) : e;
938 return t.split("-").map(function(e, t) {
939 return 0 === t ? e : e.toUpperFirst()
940 }).join("")
941 }
942
943 function l(e) {
944 var t = document.createElement("a"),
945 r = Object.create(null);
946 t.href = e, t.search && t.search.replace(/^\?/, "").splitOrEmpty(/(?:&(?:amp;)?|;)/).forEach(function(e) {
947 var t = e.split("="),
948 n = _slicedToArray(t, 2),
949 a = n[0],
950 i = n[1];
951 r[a] = i
952 });
953 var n = t.host && "/" !== t.pathname[0] ? "/" + t.pathname : t.pathname;
954 return {
955 href: t.href,
956 protocol: t.protocol,
957 host: t.host,
958 hostname: t.hostname,
959 port: t.port,
960 path: "" + n + t.search,
961 pathname: n,
962 query: t.search,
963 search: t.search,
964 queries: r,
965 searches: r,
966 hash: t.hash
967 }
968 }
969
970 function c(e, t) {
971 for (var r = Object.prototype.toString, n = Array.isArray(e), a = [].concat(Object.keys(e), Object.keys(t)).sort().filter(function(e, t, r) {
972 return 0 === t || r[t - 1] !== e
973 }), i = {}, o = void 0, s = function(e) {
974 return e === o
975 }, u = 0, l = a.length; u < l; ++u) {
976 var c = a[u],
977 d = e[c],
978 f = t[c];
979 if (e.hasOwnProperty(c))
980 if (t.hasOwnProperty(c)) {
981 if (d === f) continue;
982 if (("undefined" == typeof d ? "undefined" : _typeof(d)) === ("undefined" == typeof f ? "undefined" : _typeof(f)))
983 if ("function" == typeof d) d.toString() !== f.toString() && (i[c] = [y.Copy, f]);
984 else if ("object" !== ("undefined" == typeof d ? "undefined" : _typeof(d)) || null === d) i[c] = [y.Copy, f];
985 else {
986 var p = r.call(d),
987 h = r.call(f);
988 if (p === h)
989 if ("[object Date]" === p) {
990 var g = Number(f);
991 Number(d) !== g && (i[c] = [y.CopyDate, g])
992 } else if ("[object RegExp]" === p) d.toString() !== f.toString() && (i[c] = [y.Copy, clone(f)]);
993 else {
994 var m = Util.diff(d, f);
995 null !== m && (i[c] = m)
996 } else i[c] = [y.Copy, clone(f)]
997 } else i[c] = [y.Copy, "object" !== ("undefined" == typeof f ? "undefined" : _typeof(f)) || null === f ? f : clone(f)]
998 } else if (n && Util.isNumeric(c)) {
999 var v = Number(c);
1000 if (!o) {
1001 o = "";
1002 do o += "~"; while (a.some(s));
1003 i[o] = [y.SpliceArray, v, v]
1004 }
1005 v < i[o][1] && (i[o][1] = v), v > i[o][2] && (i[o][2] = v)
1006 } else i[c] = y.Delete;
1007 else i[c] = [y.Copy, "object" !== ("undefined" == typeof f ? "undefined" : _typeof(f)) || null === f ? f : clone(f)]
1008 }
1009 return Object.keys(i).length > 0 ? i : null
1010 }
1011
1012 function d(e, t) {
1013 for (var r = Object.keys(t || {}), n = clone(e), a = 0, i = r.length; a < i; ++a) {
1014 var o = r[a],
1015 s = t[o];
1016 if (s === y.Delete) delete n[o];
1017 else if (Array.isArray(s)) switch (s[0]) {
1018 case y.SpliceArray:
1019 n.splice(s[1], 1 + (s[2] - s[1]));
1020 break;
1021 case y.Copy:
1022 n[o] = clone(s[1]);
1023 break;
1024 case y.CopyDate:
1025 n[o] = new Date(s[1])
1026 } else n[o] = Util.patch(n[o], s)
1027 }
1028 return n
1029 }
1030 var f = /[&<>"'`]/g,
1031 p = new RegExp(f.source),
1032 h = Object.freeze({
1033 "&": "&",
1034 "<": "<",
1035 ">": ">",
1036 '"': """,
1037 "'": "'",
1038 "`": "`"
1039 }),
1040 g = /&(?:amp|lt|gt|quot|apos|#39|#x27|#96|#x60);/g,
1041 m = new RegExp(g.source),
1042 v = Object.freeze({
1043 "&": "&",
1044 "<": "<",
1045 ">": ">",
1046 """: '"',
1047 "'": "'",
1048 "'": "'",
1049 "'": "'",
1050 "`": "`",
1051 "`": "`"
1052 }),
1053 y = e({
1054 Delete: 0,
1055 SpliceArray: 1,
1056 Copy: 2,
1057 CopyDate: 3
1058 });
1059 return Object.freeze(Object.defineProperties({}, {
1060 toEnum: {
1061 value: e
1062 },
1063 isNumeric: {
1064 value: t
1065 },
1066 isBoolean: {
1067 value: r
1068 },
1069 slugify: {
1070 value: n
1071 },
1072 escape: {
1073 value: a
1074 },
1075 unescape: {
1076 value: i
1077 },
1078 fromCssTime: {
1079 value: o
1080 },
1081 toCssTime: {
1082 value: s
1083 },
1084 fromCssProperty: {
1085 value: u
1086 },
1087 parseUrl: {
1088 value: l
1089 },
1090 DiffOp: {
1091 value: y
1092 },
1093 diff: {
1094 value: c
1095 },
1096 patch: {
1097 value: d
1098 },
1099 random: {
1100 value: Math.random
1101 },
1102 entityEncode: {
1103 value: a
1104 },
1105 entityDecode: {
1106 value: i
1107 },
1108 evalExpression: {
1109 value: function() {
1110 return Scripting.evalJavaScript.apply(Scripting, arguments)
1111 }
1112 },
1113 evalStatements: {
1114 value: function() {
1115 return Scripting.evalJavaScript.apply(Scripting, arguments)
1116 }
1117 }
1118 }))
1119 }(),
1120 SimpleAudio = function() {
1121 function e() {
1122 return g
1123 }
1124
1125 function t(e) {
1126 g = !!e, l("mute", g)
1127 }
1128
1129 function r() {
1130 return p
1131 }
1132
1133 function n(e) {
1134 p = Math.clamp(e, .2, 5), l("rate", p)
1135 }
1136
1137 function a() {
1138 return h
1139 }
1140
1141 function i(e) {
1142 h = Math.clamp(e, 0, 1), l("volume", h)
1143 }
1144
1145 function o() {
1146 l("stop")
1147 }
1148
1149 function s(e, t) {
1150 if ("function" != typeof t) throw new Error("callback parameter must be a function");
1151 f.set(e, t)
1152 }
1153
1154 function u(e) {
1155 f.delete(e)
1156 }
1157
1158 function l(e, t) {
1159 f.forEach(function(r) {
1160 return r(e, t)
1161 })
1162 }
1163
1164 function c() {
1165 for (var e = arguments.length, t = Array(e), r = 0; r < e; r++) t[r] = arguments[r];
1166 return new(Function.prototype.bind.apply(m, [null].concat(t)))
1167 }
1168
1169 function d() {
1170 for (var e = arguments.length, t = Array(e), r = 0; r < e; r++) t[r] = arguments[r];
1171 return new(Function.prototype.bind.apply(v, [null].concat(t)))
1172 }
1173 var f = new Map,
1174 p = 1,
1175 h = 1,
1176 g = !1,
1177 m = function() {
1178 function e(t) {
1179 if (_classCallCheck(this, e), Array.isArray(t)) this._create(t);
1180 else {
1181 if (!(t instanceof e)) throw new Error("sources parameter must be an array of either URLs or source objects");
1182 this._copy(t)
1183 }
1184 }
1185 return _createClass(e, [{
1186 key: "_create",
1187 value: function(t) {
1188 if (!Array.isArray(t) || 0 === t.length) throw new Error("sources parameter must be an array of either URLs or source objects");
1189 var r = /^data:\s*audio\/([^;,]+)\s*[;,]/i,
1190 n = /\.([^.\/\\]+)$/,
1191 a = e.getType,
1192 i = [],
1193 o = document.createElement("audio");
1194 if (t.forEach(function(e) {
1195 var t = null;
1196 switch ("undefined" == typeof e ? "undefined" : _typeof(e)) {
1197 case "string":
1198 var s = void 0;
1199 if ("data:" === e.slice(0, 5)) {
1200 if (s = r.exec(e), null === s) throw new Error("source data URI missing media type")
1201 } else if (s = n.exec(Util.parseUrl(e).pathname), null === s) throw new Error("source URL missing file extension");
1202 var u = a(s[1]);
1203 null !== u && (t = {
1204 src: e,
1205 type: u
1206 });
1207 break;
1208 case "object":
1209 if (null === e) throw new Error("source object cannot be null");
1210 if (!e.hasOwnProperty("src")) throw new Error('source object missing required "src" property');
1211 if (!e.hasOwnProperty("format")) throw new Error('source object missing required "format" property');
1212 var l = a(e.format);
1213 null !== l && (t = {
1214 src: e.src,
1215 type: l
1216 });
1217 break;
1218 default:
1219 throw new Error("invalid source value (type: " + ("undefined" == typeof e ? "undefined" : _typeof(e)) + ")")
1220 }
1221 if (null !== t) {
1222 var c = document.createElement("source");
1223 c.src = t.src, c.type = t.type, o.appendChild(c), i.push(t)
1224 }
1225 }), !o.hasChildNodes())
1226 if (Browser.isIE) o.src = undefined;
1227 else {
1228 var s = document.createElement("source");
1229 s.src = undefined, s.type = undefined, o.appendChild(s)
1230 }
1231 this._finalize(o, i, clone(t))
1232 }
1233 }, {
1234 key: "_copy",
1235 value: function(t) {
1236 if (!(t instanceof e)) throw new Error("original parameter must be an instance of AudioWrapper");
1237 this._finalize(t.audio.cloneNode(!0), clone(t.sources), clone(t.originalSources))
1238 }
1239 }, {
1240 key: "_finalize",
1241 value: function(e, t, r) {
1242 var n = this;
1243 Object.defineProperties(this, {
1244 audio: {
1245 configurable: !0,
1246 value: e
1247 },
1248 sources: {
1249 configurable: !0,
1250 value: Object.freeze(t)
1251 },
1252 originalSources: {
1253 configurable: !0,
1254 value: Object.freeze(r)
1255 },
1256 _error: {
1257 writable: !0,
1258 value: !1
1259 },
1260 _faderId: {
1261 writable: !0,
1262 value: null
1263 },
1264 _mute: {
1265 writable: !0,
1266 value: !1
1267 },
1268 _rate: {
1269 writable: !0,
1270 value: 1
1271 },
1272 _volume: {
1273 writable: !0,
1274 value: 1
1275 }
1276 }), jQuery(this.audio).on("loadstart", function() {
1277 return n._error = !1
1278 }).on("error", function() {
1279 return n._error = !0
1280 }).find("source:last-of-type").on("error", function() {
1281 return n._trigger("error")
1282 }), SimpleAudio.subscribe(this, function(e) {
1283 if (!n.audio) return void SimpleAudio.unsubscribe(n);
1284 switch (e) {
1285 case "mute":
1286 n._updateAudioMute();
1287 break;
1288 case "rate":
1289 n._updateAudioRate();
1290 break;
1291 case "stop":
1292 n.stop();
1293 break;
1294 case "volume":
1295 n._updateAudioVolume()
1296 }
1297 }), this.load()
1298 }
1299 }, {
1300 key: "_trigger",
1301 value: function(e) {
1302 jQuery(this.audio).triggerHandler(e)
1303 }
1304 }, {
1305 key: "clone",
1306 value: function() {
1307 return new e(this)
1308 }
1309 }, {
1310 key: "destroy",
1311 value: function() {
1312 SimpleAudio.unsubscribe(this), this.fadeStop(), this.stop();
1313 var e = this.audio;
1314 for (jQuery(e).off(); e.hasChildNodes();) e.removeChild(e.firstChild);
1315 e.load(), this._error = !0, delete this.audio, delete this.sources, delete this.originalSources
1316 }
1317 }, {
1318 key: "_updateAudioMute",
1319 value: function() {
1320 this.audio.muted = this._mute || SimpleAudio.mute
1321 }
1322 }, {
1323 key: "_updateAudioRate",
1324 value: function() {
1325 this.audio.playbackRate = this._rate * SimpleAudio.rate
1326 }
1327 }, {
1328 key: "_updateAudioVolume",
1329 value: function() {
1330 this.audio.volume = this._volume * SimpleAudio.volume
1331 }
1332 }, {
1333 key: "hasSource",
1334 value: function() {
1335 return this.sources.length > 0
1336 }
1337 }, {
1338 key: "hasNoData",
1339 value: function() {
1340 return this.audio.readyState === HTMLMediaElement.HAVE_NOTHING
1341 }
1342 }, {
1343 key: "hasMetadata",
1344 value: function() {
1345 return this.audio.readyState >= HTMLMediaElement.HAVE_METADATA
1346 }
1347 }, {
1348 key: "hasSomeData",
1349 value: function() {
1350 return this.audio.readyState >= HTMLMediaElement.HAVE_CURRENT_DATA
1351 }
1352 }, {
1353 key: "hasData",
1354 value: function() {
1355 return this.audio.readyState === HTMLMediaElement.HAVE_ENOUGH_DATA
1356 }
1357 }, {
1358 key: "isFailed",
1359 value: function() {
1360 return this._error
1361 }
1362 }, {
1363 key: "isLoading",
1364 value: function() {
1365 return this.audio.networkState === HTMLMediaElement.NETWORK_LOADING
1366 }
1367 }, {
1368 key: "isPlaying",
1369 value: function() {
1370 return !(this.audio.ended || this.audio.paused || !this.hasSomeData())
1371 }
1372 }, {
1373 key: "isPaused",
1374 value: function() {
1375 return this.audio.paused && (this.audio.duration === 1 / 0 || this.audio.currentTime > 0) && !this.audio.ended
1376 }
1377 }, {
1378 key: "isEnded",
1379 value: function() {
1380 return this.audio.ended
1381 }
1382 }, {
1383 key: "isFading",
1384 value: function() {
1385 return null !== this._faderId
1386 }
1387 }, {
1388 key: "isMuted",
1389 value: function() {
1390 return this._mute
1391 }
1392 }, {
1393 key: "isLooped",
1394 value: function() {
1395 return this.audio.loop
1396 }
1397 }, {
1398 key: "load",
1399 value: function() {
1400 "auto" !== this.audio.preload && (this.audio.preload = "auto"), this.isLoading() || this.audio.load()
1401 }
1402 }, {
1403 key: "play",
1404 value: function() {
1405 this.audio.play()
1406 }
1407 }, {
1408 key: "pause",
1409 value: function() {
1410 this.audio.pause()
1411 }
1412 }, {
1413 key: "stop",
1414 value: function() {
1415 this.audio.pause(), this.time = 0, this._trigger(":stop")
1416 }
1417 }, {
1418 key: "fadeWithDuration",
1419 value: function(e, t, r) {
1420 var n = this;
1421 this.fadeStop();
1422 var a = Math.clamp(null == r ? this.volume : r, 0, 1),
1423 i = Math.clamp(t, 0, 1);
1424 a !== i && (this.volume = a, jQuery(this.audio).off("timeupdate.AudioWrapper:fadeWithDuration").one("timeupdate.AudioWrapper:fadeWithDuration", function() {
1425 var t = void 0,
1426 r = void 0;
1427 a < i ? (t = a, r = i) : (t = i, r = a);
1428 var o = Number(e);
1429 o < 1 && (o = 1);
1430 var s = 25,
1431 u = (i - a) / (o / (s / 1e3));
1432 n._faderId = setInterval(function() {
1433 return n.isPlaying() ? (n.volume = Math.clamp(n.volume + u, t, r), 0 === n.volume && n.pause(), void(n.volume === i && (n.fadeStop(), n._trigger(":fade")))) : void n.fadeStop()
1434 }, s)
1435 }), this.play())
1436 }
1437 }, {
1438 key: "fade",
1439 value: function(e, t) {
1440 this.fadeWithDuration(5, e, t)
1441 }
1442 }, {
1443 key: "fadeIn",
1444 value: function() {
1445 this.fade(1)
1446 }
1447 }, {
1448 key: "fadeOut",
1449 value: function() {
1450 this.fade(0)
1451 }
1452 }, {
1453 key: "fadeStop",
1454 value: function() {
1455 null !== this._faderId && (clearInterval(this._faderId), this._faderId = null)
1456 }
1457 }, {
1458 key: "on",
1459 value: function(t, r) {
1460 if ("function" != typeof r) throw new Error("listener parameter must be a function");
1461 var n = e._events,
1462 a = t.trim().splitOrEmpty(/\s+/).map(function(e) {
1463 var t = e.split(".", 1)[0];
1464 if (!n.hasOwnProperty(t)) throw new Error('unknown event "' + t + '"; valid: ' + Object.keys(n).join(", "));
1465 return e.replace(t, n[t]) + ".AudioWrapperEvent"
1466 }).join(" ");
1467 if ("" === a) throw new Error('invalid eventNames parameter "' + t + '"');
1468 return jQuery(this.audio).on(a, r), this
1469 }
1470 }, {
1471 key: "one",
1472 value: function(t, r) {
1473 if ("function" != typeof r) throw new Error("listener parameter must be a function");
1474 var n = e._events,
1475 a = t.trim().splitOrEmpty(/\s+/).map(function(e) {
1476 var t = e.split(".", 1)[0];
1477 if (!n.hasOwnProperty(t)) throw new Error('unknown event "' + t + '"; valid: ' + Object.keys(n).join(", "));
1478 return e.replace(t, n[t]) + ".AudioWrapperEvent"
1479 }).join(" ");
1480 if ("" === a) throw new Error('invalid eventNames parameter "' + t + '"');
1481 return jQuery(this.audio).one(a, r), this
1482 }
1483 }, {
1484 key: "off",
1485 value: function(t, r) {
1486 if (r && "function" != typeof r) throw new Error("listener parameter must be a function");
1487 if (!t) return jQuery(this.audio).off(".AudioWrapperEvent", r);
1488 var n = e._events,
1489 a = t.trim().splitOrEmpty(/\s+/).map(function(e) {
1490 var t = e.split(".", 1)[0];
1491 if (t) {
1492 if (!n.hasOwnProperty(t)) throw new Error('unknown event "' + t + '"; valid: ' + Object.keys(n).join(", "));
1493 return e.replace(t, n[t]) + ".AudioWrapperEvent"
1494 }
1495 return e + ".AudioWrapperEvent"
1496 }).join(" ");
1497 if ("" === a) throw new Error('invalid eventNames parameter "' + t + '"');
1498 return jQuery(this.audio).off(a, r), this
1499 }
1500 }, {
1501 key: "duration",
1502 get: function() {
1503 return this.audio.duration
1504 }
1505 }, {
1506 key: "ended",
1507 get: function() {
1508 return this.audio.ended
1509 }
1510 }, {
1511 key: "loop",
1512 get: function() {
1513 return this.audio.loop
1514 },
1515 set: function(e) {
1516 this.audio.loop = !!e
1517 }
1518 }, {
1519 key: "mute",
1520 get: function() {
1521 return this._mute
1522 },
1523 set: function(e) {
1524 this._mute = !!e, this._updateAudioMute()
1525 }
1526 }, {
1527 key: "paused",
1528 get: function() {
1529 return this.audio.paused
1530 }
1531 }, {
1532 key: "rate",
1533 get: function() {
1534 return this._rate
1535 },
1536 set: function(e) {
1537 this._rate = Math.clamp(e, .2, 5), this._updateAudioRate()
1538 }
1539 }, {
1540 key: "remaining",
1541 get: function() {
1542 return this.audio.duration - this.audio.currentTime
1543 }
1544 }, {
1545 key: "time",
1546 get: function() {
1547 return this.audio.currentTime
1548 },
1549 set: function(e) {
1550 var t = this;
1551 try {
1552 this.audio.currentTime = e
1553 } catch (r) {
1554 jQuery(this.audio).off("loadedmetadata.AudioWrapper:time").one("loadedmetadata.AudioWrapper:time", function() {
1555 return t.audio.currentTime = e
1556 })
1557 }
1558 }
1559 }, {
1560 key: "volume",
1561 get: function() {
1562 return this._volume
1563 },
1564 set: function(e) {
1565 this._volume = Math.clamp(e, 0, 1), this._updateAudioVolume()
1566 }
1567 }], [{
1568 key: "_verifyType",
1569 value: function(t) {
1570 if (!t || !Has.audio) return null;
1571 var r = e._types;
1572 if (!r.hasOwnProperty(t)) {
1573 var n = document.createElement("audio");
1574 r[t] = "" !== n.canPlayType(t).replace(/^no$/i, "")
1575 }
1576 return r[t] ? t : null
1577 }
1578 }, {
1579 key: "getType",
1580 value: function(t) {
1581 if (!t || !Has.audio) return null;
1582 var r = e.formats,
1583 n = t.toLowerCase(),
1584 a = r.hasOwnProperty(n) ? r[n] : "audio/" + n;
1585 return e._verifyType(a)
1586 }
1587 }, {
1588 key: "canPlayFormat",
1589 value: function(t) {
1590 return null !== e.getType(t)
1591 }
1592 }, {
1593 key: "canPlayType",
1594 value: function(t) {
1595 return null !== e._verifyType(t)
1596 }
1597 }]), e
1598 }();
1599 Object.defineProperties(m, {
1600 formats: {
1601 value: {
1602 aac: "audio/aac",
1603 caf: "audio/x-caf",
1604 "x-caf": "audio/x-caf",
1605 mp3: 'audio/mpeg; codecs="mp3"',
1606 mpeg: 'audio/mpeg; codecs="mp3"',
1607 m4a: "audio/mp4",
1608 mp4: "audio/mp4",
1609 "x-m4a": "audio/mp4",
1610 "x-mp4": "audio/mp4",
1611 oga: "audio/ogg",
1612 ogg: "audio/ogg",
1613 opus: 'audio/ogg; codecs="opus"',
1614 wav: "audio/wav",
1615 wave: "audio/wav",
1616 weba: "audio/webm",
1617 webm: "audio/webm"
1618 }
1619 },
1620 _types: {
1621 value: {}
1622 },
1623 _events: {
1624 value: Object.freeze({
1625 canplay: "canplaythrough",
1626 end: "ended",
1627 error: "error",
1628 fade: ":fade",
1629 pause: "pause",
1630 play: "playing",
1631 rate: "ratechange",
1632 seek: "seeked",
1633 stop: ":stop",
1634 volume: "volumechange"
1635 })
1636 }
1637 });
1638 var v = function() {
1639 function e(t) {
1640 var r = this;
1641 _classCallCheck(this, e), Object.defineProperties(this, {
1642 tracks: {
1643 configurable: !0,
1644 value: []
1645 },
1646 queue: {
1647 configurable: !0,
1648 value: []
1649 },
1650 current: {
1651 writable: !0,
1652 value: null
1653 },
1654 _rate: {
1655 writable: !0,
1656 value: 1
1657 },
1658 _volume: {
1659 writable: !0,
1660 value: 1
1661 },
1662 _mute: {
1663 writable: !0,
1664 value: !1
1665 },
1666 _loop: {
1667 writable: !0,
1668 value: !1
1669 },
1670 _shuffle: {
1671 writable: !0,
1672 value: !1
1673 }
1674 }), Array.isArray(t) ? t.forEach(function(e) {
1675 return r.add(e)
1676 }) : t instanceof e && t.tracks.forEach(function(e) {
1677 return r.add(e)
1678 })
1679 }
1680 return _createClass(e, [{
1681 key: "add",
1682 value: function(e) {
1683 var t = this;
1684 if (null == e || "object" !== ("undefined" == typeof e ? "undefined" : _typeof(e))) throw new Error("track parameter must be an object");
1685 var r = void 0,
1686 n = void 0,
1687 a = void 0,
1688 i = void 0;
1689 if (e instanceof m) r = !0, n = e.clone(), a = e.volume, i = e.rate;
1690 else {
1691 if (!e.hasOwnProperty("track")) throw new Error('track object missing required "track" property');
1692 if (!(e.track instanceof m)) throw new Error('track object\'s "track" property must be an AudioWrapper object');
1693 r = e.hasOwnProperty("copy") && e.copy, n = r ? e.track.clone() : e.track, a = e.hasOwnProperty("volume") ? e.volume : e.track.volume, i = e.hasOwnProperty("rate") ? e.rate : e.track.rate
1694 }
1695 n.stop(), n.loop = !1, n.mute = !1, n.volume = a, n.rate = i, n.on("end.AudioListEvent", function() {
1696 return t._onEnd()
1697 }), this.tracks.push({
1698 copy: r,
1699 track: n,
1700 volume: a,
1701 rate: i
1702 })
1703 }
1704 }, {
1705 key: "destroy",
1706 value: function() {
1707 this.stop(), this.tracks.filter(function(e) {
1708 return e.copy
1709 }).forEach(function(e) {
1710 return e.track.destroy()
1711 }), delete this.tracks, delete this.queue
1712 }
1713 }, {
1714 key: "isPlaying",
1715 value: function() {
1716 return null !== this.current && this.current.track.isPlaying()
1717 }
1718 }, {
1719 key: "isEnded",
1720 value: function() {
1721 return 0 === this.queue.length && (null === this.current || this.current.track.isEnded())
1722 }
1723 }, {
1724 key: "isPaused",
1725 value: function() {
1726 return null === this.current || this.current.track.isPaused()
1727 }
1728 }, {
1729 key: "isMuted",
1730 value: function() {
1731 return this._mute
1732 }
1733 }, {
1734 key: "isLooped",
1735 value: function() {
1736 return this._loop
1737 }
1738 }, {
1739 key: "isShuffled",
1740 value: function() {
1741 return this._shuffle
1742 }
1743 }, {
1744 key: "play",
1745 value: function() {
1746 (null !== this.current && !this.current.track.isEnded() || (0 === this.queue.length && this._buildList(), this._next())) && this.current.track.play()
1747 }
1748 }, {
1749 key: "pause",
1750 value: function() {
1751 null !== this.current && this.current.track.pause()
1752 }
1753 }, {
1754 key: "stop",
1755 value: function() {
1756 null !== this.current && (this.current.track.stop(), this.current = null), this.queue.splice(0)
1757 }
1758 }, {
1759 key: "skip",
1760 value: function() {
1761 this._next() ? this.current.track.play() : this._loop && this.play()
1762 }
1763 }, {
1764 key: "fadeWithDuration",
1765 value: function(e, t, r) {
1766 if (0 === this.queue.length && this._buildList(), null !== this.current && !this.current.track.isEnded() || this._next()) {
1767 var n = Math.clamp(t, 0, 1) * this.current.volume,
1768 a = void 0;
1769 null != r && (a = Math.clamp(r, 0, 1) * this.current.volume), this.current.track.fadeWithDuration(e, n, a), this._volume = t
1770 }
1771 }
1772 }, {
1773 key: "fade",
1774 value: function(e, t) {
1775 this.fadeWithDuration(5, e, t)
1776 }
1777 }, {
1778 key: "fadeIn",
1779 value: function() {
1780 this.fade(1)
1781 }
1782 }, {
1783 key: "fadeOut",
1784 value: function() {
1785 this.fade(0)
1786 }
1787 }, {
1788 key: "_next",
1789 value: function() {
1790 return null !== this.current && this.current.track.stop(), 0 === this.queue.length ? (this.current = null, !1) : (this.current = this.queue.shift(), !this.current.track.hasSource() || this.current.track.isFailed() ? this._next() : (this.current.track.mute = this._mute, this.current.track.rate = this.rate * this.current.rate, this.current.track.volume = this.volume * this.current.volume, !0))
1791 }
1792 }, {
1793 key: "_onEnd",
1794 value: function() {
1795 if (0 === this.queue.length) {
1796 if (!this._loop) return;
1797 this._buildList()
1798 }
1799 this._next() && this.current.track.play()
1800 }
1801 }, {
1802 key: "_buildList",
1803 value: function() {
1804 var e;
1805 this.queue.splice(0), (e = this.queue).push.apply(e, _toConsumableArray(this.tracks)), 0 !== this.queue.length && this._shuffle && (this.queue.shuffle(), this.queue.length > 1 && this.queue[0] === this.current && this.queue.push(this.queue.shift()))
1806 }
1807 }, {
1808 key: "duration",
1809 get: function() {
1810 return this.tracks.map(function(e) {
1811 return e.track.duration
1812 }).reduce(function(e, t) {
1813 return e + t
1814 }, 0)
1815 }
1816 }, {
1817 key: "loop",
1818 get: function() {
1819 return this._loop
1820 },
1821 set: function(e) {
1822 this._loop = !!e
1823 }
1824 }, {
1825 key: "mute",
1826 get: function() {
1827 return this._mute
1828 },
1829 set: function(e) {
1830 this._mute = !!e, null !== this.current && (this.current.track.mute = this._mute)
1831 }
1832 }, {
1833 key: "rate",
1834 get: function() {
1835 return this._rate
1836 },
1837 set: function(e) {
1838 this._rate = Math.clamp(e, .2, 5), null !== this.current && (this.current.track.rate = this.rate * this.current.rate)
1839 }
1840 }, {
1841 key: "remaining",
1842 get: function() {
1843 var e = this.queue.map(function(e) {
1844 return e.track.duration
1845 }).reduce(function(e, t) {
1846 return e + t
1847 }, 0);
1848 return null !== this.current && (e += this.current.track.remaining), e
1849 }
1850 }, {
1851 key: "shuffle",
1852 get: function() {
1853 return this._shuffle
1854 },
1855 set: function(e) {
1856 this._shuffle = !!e
1857 }
1858 }, {
1859 key: "time",
1860 get: function() {
1861 return this.duration - this.remaining
1862 }
1863 }, {
1864 key: "volume",
1865 get: function() {
1866 return this._volume
1867 },
1868 set: function(e) {
1869 this._volume = Math.clamp(e, 0, 1), null !== this.current && (this.current.track.volume = this.volume * this.current.volume)
1870 }
1871 }]), e
1872 }();
1873 return Object.freeze(Object.defineProperties({}, {
1874 mute: {
1875 get: e,
1876 set: t
1877 },
1878 rate: {
1879 get: r,
1880 set: n
1881 },
1882 volume: {
1883 get: a,
1884 set: i
1885 },
1886 stop: {
1887 value: o
1888 },
1889 subscribe: {
1890 value: s
1891 },
1892 unsubscribe: {
1893 value: u
1894 },
1895 publish: {
1896 value: l
1897 },
1898 create: {
1899 value: c
1900 },
1901 createList: {
1902 value: d
1903 }
1904 }))
1905 }(),
1906 SimpleStore = function() {
1907 function e(e, n) {
1908 if (r) return r.create(e, n);
1909 for (var a = 0; a < t.length; ++a)
1910 if (t[a].init(e, n)) return r = t[a], r.create(e, n);
1911 throw new Error("no valid adapters found")
1912 }
1913 var t = [],
1914 r = null;
1915 return Object.freeze(Object.defineProperties({}, {
1916 adapters: {
1917 value: t
1918 },
1919 create: {
1920 value: e
1921 }
1922 }))
1923 }();
1924 SimpleStore.adapters.push(function() {
1925 function e() {
1926 return r = Has.localStorage && Has.sessionStorage
1927 }
1928
1929 function t(e, t) {
1930 if (!r) throw new Error("adapter not initialized");
1931 return new n(e, t)
1932 }
1933 var r = !1,
1934 n = function() {
1935 function e(t, r) {
1936 _classCallCheck(this, e);
1937 var n = t + ".",
1938 a = null,
1939 i = null;
1940 r ? (a = window.localStorage, i = "localStorage") : (a = window.sessionStorage, i = "sessionStorage"), Object.defineProperties(this, {
1941 _engine: {
1942 value: a
1943 },
1944 _prefix: {
1945 value: n
1946 },
1947 _prefixRe: {
1948 value: new RegExp("^" + RegExp.escape(n))
1949 },
1950 name: {
1951 value: i
1952 },
1953 id: {
1954 value: t
1955 },
1956 persistent: {
1957 value: !!r
1958 }
1959 })
1960 }
1961 return _createClass(e, [{
1962 key: "size",
1963 value: function() {
1964 return this.keys().length
1965 }
1966 }, {
1967 key: "keys",
1968 value: function e() {
1969 for (var e = [], t = 0; t < this._engine.length; ++t) {
1970 var r = this._engine.key(t);
1971 this._prefixRe.test(r) && e.push(r.replace(this._prefixRe, ""))
1972 }
1973 return e
1974 }
1975 }, {
1976 key: "has",
1977 value: function(e) {
1978 return !("string" != typeof e || !e) && this._engine.hasOwnProperty(this._prefix + e)
1979 }
1980 }, {
1981 key: "get",
1982 value: function(t) {
1983 if ("string" != typeof t || !t) return null;
1984 var r = this._engine.getItem(this._prefix + t);
1985 return null == r ? null : e._deserialize(r)
1986 }
1987 }, {
1988 key: "set",
1989 value: function(t, r) {
1990 if ("string" != typeof t || !t) return !1;
1991 try {
1992 this._engine.setItem(this._prefix + t, e._serialize(r))
1993 } catch (e) {
1994 throw /quota_?(?:exceeded|reached)/i.test(e.name) && (e.message = this.name + " quota exceeded"), e
1995 }
1996 return !0
1997 }
1998 }, {
1999 key: "delete",
2000 value: function(e) {
2001 return !("string" != typeof e || !e) && (this._engine.removeItem(this._prefix + e), !0)
2002 }
2003 }, {
2004 key: "clear",
2005 value: function() {
2006 for (var e = this.keys(), t = 0, r = e.length; t < r; ++t) this.delete(e[t]);
2007 return !0
2008 }
2009 }, {
2010 key: "length",
2011 get: function() {
2012 return this.keys().length
2013 }
2014 }], [{
2015 key: "_serialize",
2016 value: function(e) {
2017 return LZString.compressToUTF16(JSON.stringify(e))
2018 }
2019 }, {
2020 key: "_deserialize",
2021 value: function(e) {
2022 return JSON.parse(LZString.decompressFromUTF16(e))
2023 }
2024 }]), e
2025 }();
2026 return Object.freeze(Object.defineProperties({}, {
2027 init: {
2028 value: e
2029 },
2030 create: {
2031 value: t
2032 }
2033 }))
2034 }()), SimpleStore.adapters.push(function() {
2035 function e(e) {
2036 return n = "cookie" in document, n && r(e), n
2037 }
2038
2039 function t(e, t) {
2040 if (!n) throw new Error("adapter not initialized");
2041 return new a(e, t)
2042 }
2043
2044 function r(e) {
2045 if ("" !== document.cookie)
2046 for (var t = e + ".", r = new RegExp("^" + RegExp.escape(t)), n = e + "!.", i = e + "*.", o = /\.(?:state|rcWarn)$/, s = document.cookie.split(/;\s*/), u = 0; u < s.length; ++u) {
2047 var l = s[u].split("="),
2048 c = decodeURIComponent(l[0]);
2049 if (r.test(c)) {
2050 var d = decodeURIComponent(l[1]);
2051 "" !== d && ! function() {
2052 var e = !o.test(c);
2053 a._setCookie(c, undefined, "Thu, 01 Jan 1970 00:00:00 GMT"), a._setCookie(c.replace(r, function() {
2054 return e ? n : i
2055 }), d, e ? "Tue, 19 Jan 2038 03:14:07 GMT" : undefined)
2056 }()
2057 }
2058 }
2059 }
2060 var n = !1,
2061 a = function() {
2062 function e(t, r) {
2063 _classCallCheck(this, e);
2064 var n = "" + t + (r ? "!" : "*") + ".";
2065 Object.defineProperties(this, {
2066 _prefix: {
2067 value: n
2068 },
2069 _prefixRe: {
2070 value: new RegExp("^" + RegExp.escape(n))
2071 },
2072 name: {
2073 value: "cookie"
2074 },
2075 id: {
2076 value: t
2077 },
2078 persistent: {
2079 value: !!r
2080 }
2081 })
2082 }
2083 return _createClass(e, [{
2084 key: "size",
2085 value: function() {
2086 return this.keys().length
2087 }
2088 }, {
2089 key: "keys",
2090 value: function e() {
2091 if ("" === document.cookie) return [];
2092 for (var t = document.cookie.split(/;\s*/), e = [], r = 0; r < t.length; ++r) {
2093 var n = t[r].split("="),
2094 a = decodeURIComponent(n[0]);
2095 if (this._prefixRe.test(a)) {
2096 var i = decodeURIComponent(n[1]);
2097 "" !== i && e.push(a.replace(this._prefixRe, ""))
2098 }
2099 }
2100 return e
2101 }
2102 }, {
2103 key: "has",
2104 value: function(t) {
2105 return !("string" != typeof t || !t) && null !== e._getCookie(this._prefix + t)
2106 }
2107 }, {
2108 key: "get",
2109 value: function(t) {
2110 if ("string" != typeof t || !t) return null;
2111 var r = e._getCookie(this._prefix + t);
2112 return null === r ? null : e._deserialize(r)
2113 }
2114 }, {
2115 key: "set",
2116 value: function(t, r) {
2117 if ("string" != typeof t || !t) return !1;
2118 try {
2119 if (e._setCookie(this._prefix + t, e._serialize(r), this.persistent ? "Tue, 19 Jan 2038 03:14:07 GMT" : undefined), !this.has(t)) throw new Error("unknown validation error during set")
2120 } catch (e) {
2121 throw e.message = "cookie error: " + e.message, e
2122 }
2123 return !0
2124 }
2125 }, {
2126 key: "delete",
2127 value: function(t) {
2128 if ("string" != typeof t || !t || !this.has(t)) return !1;
2129 try {
2130 if (e._setCookie(this._prefix + t, undefined, "Thu, 01 Jan 1970 00:00:00 GMT"), this.has(t)) throw new Error("unknown validation error during delete")
2131 } catch (e) {
2132 throw e.message = "cookie error: " + e.message, e
2133 }
2134 return !0
2135 }
2136 }, {
2137 key: "clear",
2138 value: function() {
2139 for (var e = this.keys(), t = 0, r = e.length; t < r; ++t) this.delete(e[t]);
2140 return !0
2141 }
2142 }, {
2143 key: "length",
2144 get: function() {
2145 return this.keys().length
2146 }
2147 }], [{
2148 key: "_getCookie",
2149 value: function(e) {
2150 if (!e || "" === document.cookie) return null;
2151 for (var t = document.cookie.split(/;\s*/), r = 0; r < t.length; ++r) {
2152 var n = t[r].split("="),
2153 a = decodeURIComponent(n[0]);
2154 if (e === a) {
2155 var i = decodeURIComponent(n[1]);
2156 return i || null
2157 }
2158 }
2159 return null
2160 }
2161 }, {
2162 key: "_setCookie",
2163 value: function(e, t, r) {
2164 if (e) {
2165 var n = encodeURIComponent(e) + "=";
2166 null != t && (n += encodeURIComponent(t)), null != r && (n += "; " + r), n += "; path=/", document.cookie = n
2167 }
2168 }
2169 }, {
2170 key: "_serialize",
2171 value: function(e) {
2172 return LZString.compressToBase64(JSON.stringify(e))
2173 }
2174 }, {
2175 key: "_deserialize",
2176 value: function(e) {
2177 return JSON.parse(LZString.decompressFromBase64(e))
2178 }
2179 }]), e
2180 }();
2181 return Object.freeze(Object.defineProperties({}, {
2182 init: {
2183 value: e
2184 },
2185 create: {
2186 value: t
2187 }
2188 }))
2189 }());
2190 var DebugView = function() {
2191 var e = function() {
2192 function e(t, r, n, a) {
2193 _classCallCheck(this, e), Object.defineProperties(this, {
2194 parent: {
2195 value: t
2196 },
2197 view: {
2198 value: document.createElement("span")
2199 },
2200 break: {
2201 value: document.createElement("wbr")
2202 }
2203 }), jQuery(this.view).attr({
2204 title: a,
2205 "aria-label": a,
2206 "data-type": null != r ? r : "",
2207 "data-name": null != n ? n : ""
2208 }).addClass("debug"), this.parent.appendChild(this.view), this.parent.appendChild(this.break)
2209 }
2210 return _createClass(e, [{
2211 key: "append",
2212 value: function(e) {
2213 return jQuery(this.view).append(e), this
2214 }
2215 }, {
2216 key: "modes",
2217 value: function(e) {
2218 var t = this;
2219 if (null == e) {
2220 var r = function() {
2221 var e = {};
2222 return t.view.className.splitOrEmpty(/\s+/).forEach(function(t) {
2223 "debug" !== t && (e[t] = !0)
2224 }), {
2225 v: e
2226 }
2227 }();
2228 if ("object" === ("undefined" == typeof r ? "undefined" : _typeof(r))) return r.v
2229 } else if ("object" === ("undefined" == typeof e ? "undefined" : _typeof(e))) return Object.keys(e).forEach(function(t) {
2230 this[e[t] ? "addClass" : "removeClass"](t)
2231 }, jQuery(this.view)), this;
2232 throw new Error("DebugView.prototype.modes options parameter must be an object or null/undefined")
2233 }
2234 }, {
2235 key: "remove",
2236 value: function() {
2237 var e = jQuery(this.view);
2238 this.view.hasChildNodes() && e.contents().appendTo(this.parent), e.remove(), jQuery(this.break).remove()
2239 }
2240 }, {
2241 key: "output",
2242 get: function() {
2243 return this.view
2244 }
2245 }, {
2246 key: "type",
2247 get: function() {
2248 return this.view.getAttribute("data-type")
2249 },
2250 set: function(e) {
2251 this.view.setAttribute("data-type", null != e ? e : "")
2252 }
2253 }, {
2254 key: "name",
2255 get: function() {
2256 return this.view.getAttribute("data-name")
2257 },
2258 set: function(e) {
2259 this.view.setAttribute("data-name", null != e ? e : "")
2260 }
2261 }, {
2262 key: "title",
2263 get: function() {
2264 return this.view.title
2265 },
2266 set: function(e) {
2267 this.view.title = e
2268 }
2269 }], [{
2270 key: "init",
2271 value: function() {
2272 jQuery('<button id="debug-view-toggle">' + L10n.get("debugViewTitle") + "</button>").ariaClick({
2273 label: L10n.get("debugViewToggle")
2274 }, function() {
2275 return e.toggle()
2276 }).prependTo("#ui-bar-body"), e.enable()
2277 }
2278 }, {
2279 key: "enable",
2280 value: function() {
2281 jQuery(document.documentElement).attr("data-debug-view", "enabled"), jQuery.event.trigger(":debugviewupdate")
2282 }
2283 }, {
2284 key: "disable",
2285 value: function() {
2286 jQuery(document.documentElement).removeAttr("data-debug-view"), jQuery.event.trigger(":debugviewupdate")
2287 }
2288 }, {
2289 key: "toggle",
2290 value: function() {
2291 "enabled" === jQuery(document.documentElement).attr("data-debug-view") ? e.disable() : e.enable()
2292 }
2293 }]), e
2294 }();
2295 return e
2296 }(),
2297 PRNGWrapper = function() {
2298 var e = function() {
2299 function e(t, r) {
2300 _classCallCheck(this, e), Object.defineProperties(this, new Math.seedrandom(t, r, function(e, t) {
2301 return {
2302 _prng: {
2303 value: e
2304 },
2305 seed: {
2306 writable: !0,
2307 value: t
2308 },
2309 pull: {
2310 writable: !0,
2311 value: 0
2312 },
2313 random: {
2314 value: function() {
2315 return ++this.pull, this._prng()
2316 }
2317 }
2318 }
2319 }))
2320 }
2321 return _createClass(e, null, [{
2322 key: "marshal",
2323 value: function(e) {
2324 if (!e || !e.hasOwnProperty("seed") || !e.hasOwnProperty("pull")) throw new Error("PRNG is missing required data");
2325 return {
2326 seed: e.seed,
2327 pull: e.pull
2328 }
2329 }
2330 }, {
2331 key: "unmarshal",
2332 value: function(t) {
2333 if (!t || !t.hasOwnProperty("seed") || !t.hasOwnProperty("pull")) throw new Error("PRNG object is missing required data");
2334 for (var r = new e(t.seed, !1), n = t.pull; n > 0; --n) r.random();
2335 return r
2336 }
2337 }]), e
2338 }();
2339 return e
2340 }(),
2341 StyleWrapper = function() {
2342 var e = /\[[<>]?[Ii][Mm][Gg]\[(?:\s|\S)*?\]\]+/g,
2343 t = new RegExp(e.source),
2344 r = function() {
2345 function r(e) {
2346 if (_classCallCheck(this, r), null == e) throw new TypeError("StyleWrapper style parameter must be an HTMLStyleElement object");
2347 Object.defineProperties(this, {
2348 style: {
2349 value: e
2350 }
2351 })
2352 }
2353 return _createClass(r, [{
2354 key: "isEmpty",
2355 value: function() {
2356 return 0 === this.style.cssRules.length
2357 }
2358 }, {
2359 key: "set",
2360 value: function(e) {
2361 this.clear(), this.add(e)
2362 }
2363 }, {
2364 key: "add",
2365 value: function(r) {
2366 var n = r;
2367 t.test(n) && (e.lastIndex = 0, n = n.replace(e, function(e) {
2368 var t = Wikifier.helpers.parseSquareBracketedMarkup({
2369 source: e,
2370 matchStart: 0
2371 });
2372 if (t.hasOwnProperty("error") || t.pos < e.length) return e;
2373 var r = t.source;
2374 if ("data:" !== r.slice(0, 5) && Story.has(r)) {
2375 var n = Story.get(r);
2376 n.tags.includes("Twine.image") && (r = n.text)
2377 }
2378 return 'url("' + r.replace(/"/g, "%22") + '")'
2379 })), this.style.styleSheet ? this.style.styleSheet.cssText += n : this.style.appendChild(document.createTextNode(n))
2380 }
2381 }, {
2382 key: "clear",
2383 value: function() {
2384 this.style.styleSheet ? this.style.styleSheet.cssText = "" : jQuery(this.style).empty()
2385 }
2386 }]), r
2387 }();
2388 return r
2389 }(),
2390 L10n = function() {
2391 function e() {
2392 r()
2393 }
2394
2395 function t(e, t) {
2396 if (!e) return "";
2397 var r = function(e) {
2398 var t = void 0;
2399 return e.some(function(e) {
2400 return !!l10nStrings.hasOwnProperty(e) && (t = e, !0)
2401 }), t
2402 }(Array.isArray(e) ? e : [e]);
2403 if (!r) return "";
2404 for (var i = 50, o = l10nStrings[r], s = 0; a.test(o);) {
2405 if (++s > i) throw new Error("L10n.get exceeded maximum replacement iterations, probable infinite loop");
2406 n.lastIndex = 0, o = o.replace(n, function(e) {
2407 var r = e.slice(1, -1);
2408 return t && t.hasOwnProperty(r) ? t[r] : l10nStrings.hasOwnProperty(r) ? l10nStrings[r] : void 0
2409 })
2410 }
2411 return o
2412 }
2413
2414 function r() {
2415 strings && Object.keys(strings).length > 0 && Object.keys(l10nStrings).forEach(function(e) {
2416 try {
2417 var t = void 0;
2418 switch (e) {
2419 case "identity":
2420 t = strings.identity;
2421 break;
2422 case "aborting":
2423 t = strings.aborting;
2424 break;
2425 case "cancel":
2426 t = strings.cancel;
2427 break;
2428 case "close":
2429 t = strings.close;
2430 break;
2431 case "ok":
2432 t = strings.ok;
2433 break;
2434 case "errorTitle":
2435 t = strings.errors.title;
2436 break;
2437 case "errorNonexistentPassage":
2438 t = strings.errors.nonexistentPassage;
2439 break;
2440 case "errorSaveMissingData":
2441 t = strings.errors.saveMissingData;
2442 break;
2443 case "errorSaveIdMismatch":
2444 t = strings.errors.saveIdMismatch;
2445 break;
2446 case "warningDegraded":
2447 t = strings.warnings.degraded;
2448 break;
2449 case "debugViewTitle":
2450 t = strings.debugView.title;
2451 break;
2452 case "debugViewToggle":
2453 t = strings.debugView.toggle;
2454 break;
2455 case "uiBarToggle":
2456 t = strings.uiBar.toggle;
2457 break;
2458 case "uiBarBackward":
2459 t = strings.uiBar.backward;
2460 break;
2461 case "uiBarForward":
2462 t = strings.uiBar.forward;
2463 break;
2464 case "uiBarJumpto":
2465 t = strings.uiBar.jumpto;
2466 break;
2467 case "jumptoTitle":
2468 t = strings.jumpto.title;
2469 break;
2470 case "jumptoTurn":
2471 t = strings.jumpto.turn;
2472 break;
2473 case "jumptoUnavailable":
2474 t = strings.jumpto.unavailable;
2475 break;
2476 case "savesTitle":
2477 t = strings.saves.title;
2478 break;
2479 case "savesDisallowed":
2480 t = strings.saves.disallowed;
2481 break;
2482 case "savesEmptySlot":
2483 t = strings.saves.emptySlot;
2484 break;
2485 case "savesIncapable":
2486 t = strings.saves.incapable;
2487 break;
2488 case "savesLabelAuto":
2489 t = strings.saves.labelAuto;
2490 break;
2491 case "savesLabelDelete":
2492 t = strings.saves.labelDelete;
2493 break;
2494 case "savesLabelExport":
2495 t = strings.saves.labelExport;
2496 break;
2497 case "savesLabelImport":
2498 t = strings.saves.labelImport;
2499 break;
2500 case "savesLabelLoad":
2501 t = strings.saves.labelLoad;
2502 break;
2503 case "savesLabelClear":
2504 t = strings.saves.labelClear;
2505 break;
2506 case "savesLabelSave":
2507 t = strings.saves.labelSave;
2508 break;
2509 case "savesLabelSlot":
2510 t = strings.saves.labelSlot;
2511 break;
2512 case "savesSavedOn":
2513 t = strings.saves.savedOn;
2514 break;
2515 case "savesUnavailable":
2516 t = strings.saves.unavailable;
2517 break;
2518 case "savesUnknownDate":
2519 t = strings.saves.unknownDate;
2520 break;
2521 case "settingsTitle":
2522 t = strings.settings.title;
2523 break;
2524 case "settingsOff":
2525 t = strings.settings.off;
2526 break;
2527 case "settingsOn":
2528 t = strings.settings.on;
2529 break;
2530 case "settingsReset":
2531 t = strings.settings.reset;
2532 break;
2533 case "restartTitle":
2534 t = strings.restart.title;
2535 break;
2536 case "restartPrompt":
2537 t = strings.restart.prompt;
2538 break;
2539 case "shareTitle":
2540 t = strings.share.title;
2541 break;
2542 case "autoloadTitle":
2543 t = strings.autoload.title;
2544 break;
2545 case "autoloadCancel":
2546 t = strings.autoload.cancel;
2547 break;
2548 case "autoloadOk":
2549 t = strings.autoload.ok;
2550 break;
2551 case "autoloadPrompt":
2552 t = strings.autoload.prompt;
2553 break;
2554 case "macroBackText":
2555 t = strings.macros.back.text;
2556 break;
2557 case "macroReturnText":
2558 t = strings.macros.return.text
2559 }
2560 t && (l10nStrings[e] = t.replace(/%\w+%/g, function(e) {
2561 return "{" + e.slice(1, -1) + "}"
2562 }))
2563 } catch (e) {}
2564 })
2565 }
2566 var n = /\{\w+\}/g,
2567 a = new RegExp(n.source);
2568 return Object.freeze(Object.defineProperties({}, {
2569 init: {
2570 value: e
2571 },
2572 get: {
2573 value: t
2574 }
2575 }))
2576 }(),
2577 strings = {
2578 errors: {},
2579 warnings: {},
2580 debugView: {},
2581 uiBar: {},
2582 jumpto: {},
2583 saves: {},
2584 settings: {},
2585 restart: {},
2586 share: {},
2587 autoload: {},
2588 macros: {
2589 back: {},
2590 return: {}
2591 }
2592 },
2593 l10nStrings = {
2594 identity: "game",
2595 aborting: "Aborting",
2596 cancel: "Cancel",
2597 close: "Close",
2598 ok: "OK",
2599 errorTitle: "Error",
2600 errorNonexistentPassage: 'the passage "{passage}" does not exist',
2601 errorSaveMissingData: "save is missing required data. Either the loaded file is not a save or the save has become corrupted",
2602 errorSaveIdMismatch: "save is from the wrong {identity}",
2603 _warningIntroLacking: "Your browser either lacks or has disabled",
2604 _warningOutroDegraded: ", so this {identity} is running in a degraded mode. You may be able to continue, however, some parts may not work properly.",
2605 warningNoWebStorage: "{_warningIntroLacking} the Web Storage API{_warningOutroDegraded}",
2606 warningDegraded: "{_warningIntroLacking} some of the capabilities required by this {identity}{_warningOutroDegraded}",
2607 debugViewTitle: "Debug View",
2608 debugViewToggle: "Toggle the debug view",
2609 uiBarToggle: "Toggle the UI bar",
2610 uiBarBackward: "Go backward within the {identity} history",
2611 uiBarForward: "Go forward within the {identity} history",
2612 uiBarJumpto: "Jump to a specific point within the {identity} history",
2613 jumptoTitle: "Jump To",
2614 jumptoTurn: "Turn",
2615 jumptoUnavailable: "No jump points currently available…",
2616 savesTitle: "Saves",
2617 savesDisallowed: "Saving has been disallowed on this passage.",
2618 savesEmptySlot: "— slot empty —",
2619 savesIncapable: "{_warningIntroLacking} the capabilities required to support saves, so saves have been disabled for this session.",
2620 savesLabelAuto: "Autosave",
2621 savesLabelDelete: "Delete",
2622 savesLabelExport: "Save to Disk…",
2623 savesLabelImport: "Load from Disk…",
2624 savesLabelLoad: "Load",
2625 savesLabelClear: "Delete All",
2626 savesLabelSave: "Save",
2627 savesLabelSlot: "Slot",
2628 savesSavedOn: "Saved on",
2629 savesUnavailable: "No save slots found…",
2630 savesUnknownDate: "unknown",
2631 settingsTitle: "Settings",
2632 settingsOff: "Off",
2633 settingsOn: "On",
2634 settingsReset: "Reset to Defaults",
2635 restartTitle: "Restart",
2636 restartPrompt: "Are you sure that you want to restart? Unsaved progress will be lost.",
2637 shareTitle: "Share",
2638 autoloadTitle: "Autoload",
2639 autoloadCancel: "Go to start",
2640 autoloadOk: "Load autosave",
2641 autoloadPrompt: "An autosave exists. Load it now or go to the start?",
2642 macroBackText: "Back",
2643 macroReturnText: "Return"
2644 },
2645 Config = function() {
2646 function e() {
2647 throw new Error("Config.history.mode has been deprecated and is no longer used by SugarCube, please remove it from your code")
2648 }
2649
2650 function t() {
2651 throw new Error("Config.history.tracking has been deprecated, use Config.history.maxStates instead")
2652 }
2653 var r = Object.seal({
2654 debug: !1,
2655 addVisitedLinkClass: !1,
2656 cleanupWikifierOutput: !1,
2657 loadDelay: 0,
2658 history: Object.seal({
2659 controls: !0,
2660 maxStates: 100,
2661 get mode() {
2662 e()
2663 },
2664 set mode(t) {
2665 e()
2666 },
2667 get tracking() {
2668 t()
2669 },
2670 set tracking(e) {
2671 t()
2672 }
2673 }),
2674 macros: Object.seal({
2675 ifAssignmentError: !0,
2676 maxLoopIterations: 1e3
2677 }),
2678 navigation: Object.seal({
2679 override: undefined
2680 }),
2681 passages: Object.seal({
2682 descriptions: undefined,
2683 displayTitles: !1,
2684 start: undefined,
2685 transitionOut: undefined
2686 }),
2687 saves: Object.seal({
2688 autoload: undefined,
2689 autosave: undefined,
2690 id: "untitled-story",
2691 isAllowed: undefined,
2692 onLoad: undefined,
2693 onSave: undefined,
2694 slots: 8,
2695 version: undefined
2696 }),
2697 ui: Object.seal({
2698 stowBarInitially: 800,
2699 updateStoryElements: !0
2700 }),
2701 transitionEndEventName: function() {
2702 for (var e = new Map([
2703 ["transition", "transitionend"],
2704 ["MSTransition", "msTransitionEnd"],
2705 ["WebkitTransition", "webkitTransitionEnd"],
2706 ["MozTransition", "transitionend"]
2707 ]), t = [].concat(_toConsumableArray(e.keys())), r = document.createElement("div"), n = 0; n < t.length; ++n)
2708 if (r.style[t[n]] !== undefined) return e.get(t[n]);
2709 return ""
2710 }()
2711 });
2712 return r
2713 }(),
2714 Patterns = function() {
2715 var e = /[\u0150\u0170]/g.test("Å"),
2716 t = function() {
2717 var e = new Map([
2718 [" ", "\\u0020"],
2719 ["\f", "\\f"],
2720 ["\n", "\\n"],
2721 ["\r", "\\r"],
2722 ["\t", "\\t"],
2723 ["\v", "\\v"],
2724 ["Â ", "\\u00a0"],
2725 [" ", "\\u1680"],
2726 ["á Ž", "\\u180e"],
2727 [" ", "\\u2000"],
2728 ["â€", "\\u2001"],
2729 [" ", "\\u2002"],
2730 [" ", "\\u2003"],
2731 [" ", "\\u2004"],
2732 [" ", "\\u2005"],
2733 [" ", "\\u2006"],
2734 [" ", "\\u2007"],
2735 [" ", "\\u2008"],
2736 [" ", "\\u2009"],
2737 [" ", "\\u200a"],
2738 ["\u2028", "\\u2028"],
2739 ["\u2029", "\\u2029"],
2740 [" ", "\\u202f"],
2741 ["âŸ", "\\u205f"],
2742 [" ", "\\u3000"],
2743 ["\ufeff", "\\ufeff"]
2744 ]),
2745 t = /\s/,
2746 r = "";
2747 return e.forEach(function(e, n) {
2748 t.test(n) || (r += e)
2749 }), r ? "[\\s" + r + "]" : "\\s"
2750 }(),
2751 r = "[\\u0020\\f\\t\\v\\u00a0\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]",
2752 n = "[\\n\\r\\u2028\\u2029]",
2753 a = "[0-9A-Z_a-z\\-\\u00C0-\\u00D6\\u00D8-\\u00DE\\u00DF-\\u00F6\\u00F8-\\u00FF" + (e ? "\\u0150\\u0170\\u0151\\u0171" : "") + "]",
2754 i = a.replace("\\-", ""),
2755 o = "[$A-Z_a-z]",
2756 s = o + "[$0-9A-Z_a-z]*",
2757 u = "[$_]",
2758 l = u + s,
2759 c = "[A-Za-z][\\w-]*|[=-]",
2760 d = "(" + a + "+)\\(([^\\)\\|\\n]+)\\):",
2761 f = "(" + a + "+):([^;\\|\\n]+);",
2762 p = "((?:\\." + a + "+)+);",
2763 h = "((?:#" + a + "+)+);",
2764 g = d + "|" + f + "|" + p + "|" + h,
2765 m = "(?:file|https?|mailto|ftp|javascript|irc|news|data):[^\\s'\"]+";
2766 return Object.freeze({
2767 space: t,
2768 spaceNoTerminator: r,
2769 lineTerminator: n,
2770 anyLetter: a,
2771 anyLetterStrict: i,
2772 identifierFirstChar: o,
2773 identifier: s,
2774 variableSigil: u,
2775 variable: l,
2776 macroName: c,
2777 inlineCss: g,
2778 url: m
2779 })
2780 }(),
2781 Scripting = function() {
2782 function addAccessibleClickHandler(e, t, r, n, a) {
2783 if (arguments.length < 2) throw new Error("addAccessibleClickHandler insufficient number of parameters");
2784 var i = void 0,
2785 o = void 0;
2786 if ("function" == typeof t ? (i = t, o = {
2787 namespace: n,
2788 one: !!r
2789 }) : (i = r, o = {
2790 namespace: a,
2791 one: !!n,
2792 selector: t
2793 }), "function" != typeof i) throw new TypeError("addAccessibleClickHandler handler parameter must be a function");
2794 return jQuery(e).ariaClick(o, i)
2795 }
2796
2797 function insertElement(e, t, r, n, a, i) {
2798 var o = jQuery(document.createElement(t));
2799 return r && o.attr("id", r), n && o.addClass(n), i && o.attr("title", i), a && o.text(a), e && o.appendTo(e), o[0]
2800 }
2801
2802 function insertText(e, t) {
2803 jQuery(e).append(document.createTextNode(t))
2804 }
2805
2806 function removeChildren(e) {
2807 jQuery(e).empty()
2808 }
2809
2810 function removeElement(e) {
2811 jQuery(e).remove()
2812 }
2813
2814 function fade(e, t) {
2815 function r() {
2816 i += .05 * a, n(o, Math.easeInOut(i)), (1 === a && i >= 1 || a === -1 && i <= 0) && (e.style.visibility = "in" === t.fade ? "visible" : "hidden", o.parentNode.replaceChild(e, o), o = null, window.clearInterval(s), t.onComplete && t.onComplete())
2817 }
2818
2819 function n(e, t) {
2820 e.style.zoom = 1, e.style.filter = "alpha(opacity=" + Math.floor(100 * t) + ")", e.style.opacity = t
2821 }
2822 var a = "in" === t.fade ? 1 : -1,
2823 i = void 0,
2824 o = e.cloneNode(!0),
2825 s = void 0;
2826 e.parentNode.replaceChild(o, e), "in" === t.fade ? (i = 0, o.style.visibility = "visible") : i = 1, n(o, i), s = window.setInterval(r, 25)
2827 }
2828
2829 function scrollWindowTo(e, t) {
2830 function r() {
2831 c += i, window.scroll(0, o + l * (u * Math.easeInOut(c))), c >= 1 && window.clearInterval(d)
2832 }
2833
2834 function n(e) {
2835 for (var t = 0; e.offsetParent;) t += e.offsetTop, e = e.offsetParent;
2836 return t
2837 }
2838
2839 function a(e) {
2840 var t = n(e),
2841 r = t + e.offsetHeight,
2842 a = window.scrollY ? window.scrollY : document.body.scrollTop,
2843 i = window.innerHeight ? window.innerHeight : document.body.clientHeight,
2844 o = a + i;
2845 return t >= a && r > o && e.offsetHeight < i ? t - (i - e.offsetHeight) + 20 : t
2846 }
2847 var i = null != t ? Number(t) : .1;
2848 Number.isNaN(i) || !Number.isFinite(i) || i < 0 ? i = .1 : i > 1 && (i = 1);
2849 var o = window.scrollY ? window.scrollY : document.body.scrollTop,
2850 s = a(e),
2851 u = Math.abs(o - s),
2852 l = o > s ? -1 : 1,
2853 c = 0,
2854 d = void 0;
2855 d = window.setInterval(r, 25)
2856 }
2857
2858 function either() {
2859 if (0 !== arguments.length) return Array.prototype.concat.apply([], arguments).random()
2860 }
2861
2862 function hasVisited() {
2863 if (0 === arguments.length) throw new Error("hasVisited called with insufficient parameters");
2864 if (State.isEmpty()) return !1;
2865 for (var e = Array.prototype.concat.apply([], arguments), t = State.passages, r = 0, n = e.length; r < n; ++r)
2866 if (!t.includes(e[r])) return !1;
2867 return !0
2868 }
2869
2870 function lastVisited() {
2871 if (0 === arguments.length) throw new Error("lastVisited called with insufficient parameters");
2872 if (State.isEmpty()) return -1;
2873 for (var e = Array.prototype.concat.apply([], arguments), t = State.passages, r = t.length - 1, n = State.turns, a = 0, i = e.length; a < i && n > -1; ++a) {
2874 var o = t.lastIndexOf(e[a]);
2875 n = Math.min(n, o === -1 ? -1 : r - o)
2876 }
2877 return n
2878 }
2879
2880 function passage() {
2881 return State.passage
2882 }
2883
2884 function previous() {
2885 var e = State.passages;
2886 if (arguments.length > 0) {
2887 var t = Number(arguments[0]);
2888 if (!Number.isSafeInteger(t) || t < 1) throw new RangeError("previous offset parameter must be a positive integer greater than zero");
2889 return e.length > t ? e[e.length - 1 - t] : ""
2890 }
2891 for (var r = e.length - 2; r >= 0; --r)
2892 if (e[r] !== State.passage) return e[r];
2893 return ""
2894 }
2895
2896 function random() {
2897 if (0 === arguments.length) throw new Error("random called with insufficient parameters");
2898 var e = void 0,
2899 t = void 0;
2900 if (1 === arguments.length ? (e = 0, t = arguments[0]) : (e = arguments[0], t = arguments[1]), e > t) {
2901 var r = [t, e];
2902 e = r[0], t = r[1]
2903 }
2904 return Math.floor(State.random() * (t - e + 1)) + e
2905 }
2906
2907 function randomFloat() {
2908 if (0 === arguments.length) throw new Error("randomFloat called with insufficient parameters");
2909 var e = void 0,
2910 t = void 0;
2911 if (1 === arguments.length ? (e = 0, t = arguments[0]) : (e = arguments[0], t = arguments[1]), e > t) {
2912 var r = [t, e];
2913 e = r[0], t = r[1]
2914 }
2915 return State.random() * (t - e) + e
2916 }
2917
2918 function tags() {
2919 if (0 === arguments.length) return Story.get(State.passage).tags.slice(0);
2920 for (var e = Array.prototype.concat.apply([], arguments), t = [], r = 0, n = e.length; r < n; ++r) t = t.concat(Story.get(e[r]).tags);
2921 return t
2922 }
2923
2924 function time() {
2925 return null === Engine.lastPlay ? 0 : Date.now() - Engine.lastPlay
2926 }
2927
2928 function turns() {
2929 return State.turns
2930 }
2931
2932 function variables() {
2933 return State.variables
2934 }
2935
2936 function visited() {
2937 if (State.isEmpty()) return 0;
2938 for (var e = Array.prototype.concat.apply([], 0 === arguments.length ? [State.passage] : arguments), t = State.passages, r = State.turns, n = 0, a = e.length; n < a && r > 0; ++n) r = Math.min(r, t.count(e[n]));
2939 return r
2940 }
2941
2942 function visitedTags() {
2943 if (0 === arguments.length) throw new Error("visitedTags called with insufficient parameters");
2944 if (State.isEmpty()) return 0;
2945 for (var e = Array.prototype.concat.apply([], arguments), t = e.length, r = State.passages, n = new Map, a = 0, i = 0, o = r.length; i < o; ++i) {
2946 var s = r[i];
2947 if (n.has(s)) n.get(s) && ++a;
2948 else {
2949 var u = Story.get(s).tags;
2950 if (u.length > 0) {
2951 for (var l = 0, c = 0; c < t; ++c) u.includes(e[c]) && ++l;
2952 l === t ? (++a, n.set(s, !0)) : n.set(s, !1)
2953 }
2954 }
2955 }
2956 return a
2957 }
2958
2959 function evalJavaScript(code, output) {
2960 return function(code, output) {
2961 return eval(code)
2962 }.call(output ? {
2963 output: output
2964 } : null, String(code), output)
2965 }
2966
2967 function evalTwineScript(code, output) {
2968 return function(code, output) {
2969 return eval(code)
2970 }.call(output ? {
2971 output: output
2972 } : null, parse(String(code)), output)
2973 }
2974 var _ref7 = function() {
2975 function e(e) {
2976 return e.reduce(function(e, t) {
2977 return e = e.then(t)
2978 }, Promise.resolve())
2979 }
2980
2981 function t(e) {
2982 return Util.parseUrl(e).path.replace(/^[^\w]+|[^\w]+$/g, "").replace(/[^\w]+/g, "-").toLocaleLowerCase()
2983 }
2984
2985 function r() {
2986 function r(e) {
2987 return new Promise(function(r, n) {
2988 jQuery(document.createElement("script")).one("load abort error", function(e) {
2989 jQuery(e.target).off(), "load" === e.type ? r(e.target) : n(e.target)
2990 }).appendTo(document.head).attr({
2991 id: "script-imported-" + t(e),
2992 type: "text/javascript",
2993 src: e
2994 })
2995 })
2996 }
2997 for (var n = arguments.length, a = Array(n), i = 0; i < n; i++) a[i] = arguments[i];
2998 return Promise.all(a.map(function(t) {
2999 return Array.isArray(t) ? e(t.map(function(e) {
3000 return function() {
3001 return r(e)
3002 }
3003 })) : r(t)
3004 }))
3005 }
3006
3007 function n() {
3008 function r(e) {
3009 return new Promise(function(r, n) {
3010 jQuery(document.createElement("link")).one("load abort error", function(e) {
3011 jQuery(e.target).off(), "load" === e.type ? r(e.target) : n(e.target)
3012 }).appendTo(document.head).attr({
3013 id: "style-imported-" + t(e),
3014 rel: "stylesheet",
3015 href: e
3016 })
3017 })
3018 }
3019 for (var n = arguments.length, a = Array(n), i = 0; i < n; i++) a[i] = arguments[i];
3020 return Promise.all(a.map(function(t) {
3021 return Array.isArray(t) ? e(t.map(function(e) {
3022 return function() {
3023 return r(e)
3024 }
3025 })) : r(t)
3026 }))
3027 }
3028 return {
3029 importScripts: r,
3030 importStyles: n
3031 }
3032 }(),
3033 importScripts = _ref7.importScripts,
3034 importStyles = _ref7.importStyles,
3035 parse = function() {
3036 function e(e) {
3037 if (0 !== r.lastIndex) throw new RangeError("Scripting.parse last index is non-zero at start");
3038 for (var a = e, i = void 0; null !== (i = r.exec(a));)
3039 if (i[5]) {
3040 var o = i[5];
3041 if ("$" === o || "_" === o) continue;
3042 if (n.test(o)) o = o[0];
3043 else if ("is" === o) {
3044 var s = r.lastIndex,
3045 u = a.slice(s);
3046 /^\s+not\b/.test(u) && (a = a.splice(s, u.search(/\S/)), o = "isnot")
3047 }
3048 t.hasOwnProperty(o) && (a = a.splice(i.index, o.length, t[o]), r.lastIndex += t[o].length - o.length)
3049 }
3050 return a
3051 }
3052 var t = Object.freeze({
3053 $: "State.variables.",
3054 _: "State.temporary.",
3055 to: "=",
3056 eq: "==",
3057 neq: "!=",
3058 is: "===",
3059 isnot: "!==",
3060 gt: ">",
3061 gte: ">=",
3062 lt: "<",
3063 lte: "<=",
3064 and: "&&",
3065 or: "||",
3066 not: "!",
3067 def: '"undefined" !== typeof',
3068 ndef: '"undefined" === typeof'
3069 }),
3070 r = new RegExp(["(\"\"|'')", '("(?:\\\\.|[^"\\\\])+")', "('(?:\\\\.|[^'\\\\])+')", "([=+\\-*\\/%<>&\\|\\^~!?:,;\\(\\)\\[\\]{}]+)", "([^\"'=+\\-*\\/%<>&\\|\\^~!?:,;\\(\\)\\[\\]{}\\s]+)"].join("|"), "g"),
3071 n = new RegExp("^" + Patterns.variable);
3072 return e
3073 }();
3074 return Object.freeze(Object.defineProperties({}, {
3075 parse: {
3076 value: parse
3077 },
3078 evalJavaScript: {
3079 value: evalJavaScript
3080 },
3081 evalTwineScript: {
3082 value: evalTwineScript
3083 }
3084 }))
3085 }(),
3086 Wikifier = function() {
3087 var e = 0,
3088 t = function() {
3089 function t(r, n, a) {
3090 _classCallCheck(this, t), t.Parser.Profile.isEmpty() && t.Parser.Profile.compile(), Object.defineProperties(this, {
3091 source: {
3092 value: String(n)
3093 },
3094 options: {
3095 writable: !0,
3096 value: Object.assign({
3097 profile: "all"
3098 }, a)
3099 },
3100 nextMatch: {
3101 writable: !0,
3102 value: 0
3103 },
3104 output: {
3105 writable: !0,
3106 value: null
3107 },
3108 _rawArgs: {
3109 writable: !0,
3110 value: ""
3111 }
3112 }), null == r ? this.output = document.createDocumentFragment() : r.jquery ? this.output = r[0] : this.output = r;
3113 try {
3114 ++e, this.subWikify(this.output), 1 === e && Config.cleanupWikifierOutput && convertBreaks(this.output)
3115 } finally {
3116 --e
3117 }
3118 }
3119 return _createClass(t, [{
3120 key: "subWikify",
3121 value: function(e, r, n) {
3122 var a = this.output,
3123 i = void 0;
3124 this.output = e, null != n && "object" === ("undefined" == typeof n ? "undefined" : _typeof(n)) && (i = this.options, this.options = Object.assign({}, this.options, n));
3125 var o = t.Parser.Profile.get(this.options.profile),
3126 s = r ? new RegExp("(?:" + r + ")", this.options.ignoreTerminatorCase ? "gim" : "gm") : null,
3127 u = void 0,
3128 l = void 0;
3129 do {
3130 if (o.parserRegExp.lastIndex = this.nextMatch, s && (s.lastIndex = this.nextMatch), l = o.parserRegExp.exec(this.source), u = s ? s.exec(this.source) : null, u && (!l || u.index <= l.index)) return u.index > this.nextMatch && this.outputText(this.output, this.nextMatch, u.index), this.matchStart = u.index, this.matchLength = u[0].length, this.matchText = u[0], this.nextMatch = s.lastIndex, this.output = a, void(i && (this.options = i));
3131 if (l) {
3132 l.index > this.nextMatch && this.outputText(this.output, this.nextMatch, l.index), this.matchStart = l.index, this.matchLength = l[0].length, this.matchText = l[0], this.nextMatch = o.parserRegExp.lastIndex;
3133 for (var c = void 0, d = 1, f = l.length; d < f; ++d)
3134 if (l[d]) {
3135 c = d - 1;
3136 break
3137 }
3138 if (o.parsers[c].handler(this), null != TempState.break) break
3139 }
3140 } while (u || l);
3141 null == TempState.break ? this.nextMatch < this.source.length && (this.outputText(this.output, this.nextMatch, this.source.length), this.nextMatch = this.source.length) : this.output.lastChild && this.output.lastChild.nodeType === Node.ELEMENT_NODE && "BR" === this.output.lastChild.nodeName.toUpperCase() && jQuery(this.output.lastChild).remove(), this.output = a, i && (this.options = i)
3142 }
3143 }, {
3144 key: "outputText",
3145 value: function(e, t, r) {
3146 jQuery(e).append(document.createTextNode(this.source.substring(t, r)))
3147 }
3148 }, {
3149 key: "rawArgs",
3150 value: function() {
3151 return this._rawArgs
3152 }
3153 }, {
3154 key: "fullArgs",
3155 value: function() {
3156 return Scripting.parse(this.rawArgs())
3157 }
3158 }], [{
3159 key: "getValue",
3160 value: function(e) {
3161 var r = t.parseStoryVariable(e),
3162 n = void 0;
3163 if (null !== r) {
3164 n = r.store;
3165 for (var a = r.names, i = 0, o = a.length; i < o; ++i) {
3166 if ("undefined" == typeof n[a[i]]) {
3167 n = undefined;
3168 break
3169 }
3170 n = n[a[i]]
3171 }
3172 }
3173 return n
3174 }
3175 }, {
3176 key: "setValue",
3177 value: function(e, r) {
3178 var n = t.parseStoryVariable(e);
3179 if (null !== n) {
3180 for (var a = n.names, i = a.pop(), o = n.store, s = 0, u = a.length; s < u; ++s) {
3181 if ("undefined" == typeof o[a[s]]) {
3182 o = undefined;
3183 break
3184 }
3185 o = o[a[s]]
3186 }
3187 if (o !== undefined) return o[i] = r, !0
3188 }
3189 return !1
3190 }
3191 }, {
3192 key: "parseStoryVariable",
3193 value: function(e) {
3194 for (var r = {
3195 store: "$" === e[0] ? State.variables : State.temporary,
3196 names: []
3197 }, n = e, a = void 0; null !== (a = t._parseVarRegExp.exec(n));) n = n.slice(a[0].length), a[1] ? r.names.push(a[1]) : a[2] ? r.names.push(a[2]) : a[3] ? r.names.push(a[3]) : a[4] ? r.names.push(a[4]) : a[5] ? r.names.push(t.getValue(a[5])) : a[6] && r.names.push(Number(a[6]));
3198 return "" === n ? r : null
3199 }
3200 }, {
3201 key: "wikifyEval",
3202 value: function(e) {
3203 var r = document.createDocumentFragment();
3204 new t(r, e);
3205 var n = r.querySelector(".error");
3206 if (null !== n) throw new Error(n.textContent.replace(/^(?:(?:Uncaught\s+)?Error:\s+)+/, ""));
3207 return r
3208 }
3209 }, {
3210 key: "createInternalLink",
3211 value: function(e, t, r, n) {
3212 var a = jQuery(document.createElement("a"));
3213 return null != t && (a.attr("data-passage", t), Story.has(t) ? (a.addClass("link-internal"), Config.addVisitedLinkClass && State.hasPlayed(t) && a.addClass("link-visited")) : a.addClass("link-broken"), a.ariaClick({
3214 one: !0
3215 }, function() {
3216 "function" == typeof n && n(), Engine.play(t)
3217 })), r && a.append(document.createTextNode(r)), e && a.appendTo(e), a[0]
3218 }
3219 }, {
3220 key: "createExternalLink",
3221 value: function(e, t, r) {
3222 var n = jQuery(document.createElement("a")).attr("target", "_blank").addClass("link-external").text(r).appendTo(e);
3223 return null != t && n.attr({
3224 href: t,
3225 tabindex: 0
3226 }), n[0]
3227 }
3228 }, {
3229 key: "isExternalLink",
3230 value: function(e) {
3231 if (Story.has(e)) return !1;
3232 var t = new RegExp("^" + Patterns.url, "gim");
3233 return t.test(e) || /[\/.?#]/.test(e)
3234 }
3235 }]), t
3236 }();
3237 return Object.defineProperty(t, "Parser", {
3238 value: function() {
3239 function e() {
3240 return d
3241 }
3242
3243 function t(e) {
3244 if ("object" !== ("undefined" == typeof e ? "undefined" : _typeof(e))) throw new Error("Wikifier.Parser.add parser parameter must be an object");
3245 if (!e.hasOwnProperty("name")) throw new Error('parser object missing required "name" property');
3246 if ("string" != typeof e.name) throw new Error('parser object "name" property must be a string');
3247 if (!e.hasOwnProperty("match")) throw new Error('parser object missing required "match" property');
3248 if ("string" != typeof e.match) throw new Error('parser object "match" property must be a string');
3249 if (!e.hasOwnProperty("handler")) throw new Error('parser object missing required "handler" property');
3250 if ("function" != typeof e.handler) throw new Error('parser object "handler" property must be a function');
3251 if (e.hasOwnProperty("profiles") && !Array.isArray(e.profiles)) throw new Error('parser object "profiles" property must be an array');
3252 if (a(e.name)) throw new Error('cannot clobber existing parser "' + e.name + '"');
3253 d.push(e)
3254 }
3255
3256 function r(e) {
3257 var t = d.find(function(t) {
3258 return t.name === e
3259 });
3260 t && d.delete(t)
3261 }
3262
3263 function n() {
3264 return 0 === d.length
3265 }
3266
3267 function a(e) {
3268 return !!d.find(function(t) {
3269 return t.name === e
3270 })
3271 }
3272
3273 function i(e) {
3274 return d.find(function(t) {
3275 return t.name === e
3276 }) || null
3277 }
3278
3279 function o() {
3280 return f
3281 }
3282
3283 function s() {
3284 var e = d,
3285 t = e.filter(function(e) {
3286 return !Array.isArray(e.profiles) || e.profiles.includes("core")
3287 });
3288 return f = Object.freeze({
3289 all: {
3290 parsers: e,
3291 parserRegExp: new RegExp(e.map(function(e) {
3292 return "(" + e.match + ")"
3293 }).join("|"), "gm")
3294 },
3295 core: {
3296 parsers: t,
3297 parserRegExp: new RegExp(t.map(function(e) {
3298 return "(" + e.match + ")"
3299 }).join("|"), "gm")
3300 }
3301 })
3302 }
3303
3304 function u() {
3305 return "object" !== ("undefined" == typeof f ? "undefined" : _typeof(f)) || 0 === Object.keys(f).length
3306 }
3307
3308 function l(e) {
3309 if ("object" !== ("undefined" == typeof f ? "undefined" : _typeof(f)) || !f.hasOwnProperty(e)) throw new Error('nonexistent parser profile "' + e + '"');
3310 return f[e]
3311 }
3312
3313 function c(e) {
3314 return "object" === ("undefined" == typeof f ? "undefined" : _typeof(f)) && f.hasOwnProperty(e)
3315 }
3316 var d = [],
3317 f = void 0;
3318 return Object.freeze(Object.defineProperties({}, {
3319 parsers: {
3320 get: e
3321 },
3322 add: {
3323 value: t
3324 },
3325 delete: {
3326 value: r
3327 },
3328 isEmpty: {
3329 value: n
3330 },
3331 has: {
3332 value: a
3333 },
3334 get: {
3335 value: i
3336 },
3337 Profile: {
3338 value: Object.freeze(Object.defineProperties({}, {
3339 profiles: {
3340 get: o
3341 },
3342 compile: {
3343 value: s
3344 },
3345 isEmpty: {
3346 value: u
3347 },
3348 has: {
3349 value: c
3350 },
3351 get: {
3352 value: l
3353 }
3354 }))
3355 }
3356 }))
3357 }()
3358 }), Object.defineProperties(t, {
3359 _parseVarRegExp: {
3360 value: new RegExp("^(?:" + Patterns.variableSigil + "(" + Patterns.identifier + ")|\\.(" + Patterns.identifier + ")|\\[(?:(?:\"((?:\\\\.|[^\"\\\\])+)\")|(?:'((?:\\\\.|[^'\\\\])+)')|(" + Patterns.variableSigil + Patterns.identifierFirstChar + ".*)|(\\d+))\\])")
3361 },
3362 helpers: {
3363 value: {}
3364 },
3365 parse: {
3366 value: Scripting.parse
3367 },
3368 evalExpression: {
3369 value: Scripting.evalTwineScript
3370 },
3371 evalStatements: {
3372 value: Scripting.evalTwineScript
3373 },
3374 textPrimitives: {
3375 value: Patterns
3376 }
3377 }), Object.defineProperties(t.helpers, {
3378 inlineCss: {
3379 value: function() {
3380 function e(e) {
3381 var r = {
3382 classes: [],
3383 id: "",
3384 styles: {}
3385 },
3386 n = void 0;
3387 do {
3388 t.lastIndex = e.nextMatch;
3389 var a = t.exec(e.source);
3390 n = a && a.index === e.nextMatch, n && (a[1] ? r.styles[Util.fromCssProperty(a[1])] = a[2].trim() : a[3] ? r.styles[Util.fromCssProperty(a[3])] = a[4].trim() : a[5] ? r.classes = r.classes.concat(a[5].slice(1).split(/\./)) : a[6] && (r.id = a[6].slice(1).split(/#/).pop()), e.nextMatch = t.lastIndex)
3391 } while (n);
3392 return r
3393 }
3394 var t = new RegExp(Patterns.inlineCss, "gm");
3395 return e
3396 }()
3397 },
3398 evalText: {
3399 value: function(e) {
3400 var t = void 0;
3401 try {
3402 t = Scripting.evalTwineScript(e), null == t || "function" == typeof t ? t = e : (t = String(t), /\[(?:object(?:\s+[^\]]+)?|native\s+code)\]/.test(t) && (t = e))
3403 } catch (r) {
3404 t = e
3405 }
3406 return t
3407 }
3408 },
3409 evalPassageId: {
3410 value: function(e) {
3411 return null == e || Story.has(e) ? e : t.helpers.evalText(e)
3412 }
3413 },
3414 hasBlockContext: {
3415 value: function(e) {
3416 for (var t = "function" == typeof window.getComputedStyle, r = e.length - 1; r >= 0; --r) {
3417 var n = e[r];
3418 switch (n.nodeType) {
3419 case Node.ELEMENT_NODE:
3420 var a = n.nodeName.toUpperCase();
3421 if ("BR" === a) return !0;
3422 var i = t ? window.getComputedStyle(n, null) : n.currentStyle;
3423 if (i && i.display) {
3424 if ("none" === i.display) continue;
3425 return "block" === i.display
3426 }
3427 switch (a) {
3428 case "ADDRESS":
3429 case "ARTICLE":
3430 case "ASIDE":
3431 case "BLOCKQUOTE":
3432 case "CENTER":
3433 case "DIV":
3434 case "DL":
3435 case "FIGURE":
3436 case "FOOTER":
3437 case "FORM":
3438 case "H1":
3439 case "H2":
3440 case "H3":
3441 case "H4":
3442 case "H5":
3443 case "H6":
3444 case "HEADER":
3445 case "HR":
3446 case "MAIN":
3447 case "NAV":
3448 case "OL":
3449 case "P":
3450 case "PRE":
3451 case "SECTION":
3452 case "TABLE":
3453 case "UL":
3454 return !0
3455 }
3456 return !1;
3457 case Node.COMMENT_NODE:
3458 continue;
3459 default:
3460 return !1
3461 }
3462 }
3463 return !0
3464 }
3465 },
3466 createShadowSetterCallback: {
3467 value: function() {
3468 function e() {
3469 if (!a && (a = t.Parser.get("macro"), !a)) throw new Error('cannot find "macro" parser');
3470 return a
3471 }
3472
3473 function r() {
3474 for (var t = a || e(), r = new Set, n = t.context; null !== n; n = n.parent) n._shadows && n._shadows.forEach(function(e) {
3475 return r.add(e)
3476 });
3477 return [].concat(_toConsumableArray(r))
3478 }
3479
3480 function n(e) {
3481 var t = {};
3482 return r().forEach(function(e) {
3483 var r = e.slice(1),
3484 n = "$" === e[0] ? State.variables : State.temporary;
3485 t[e] = n[r]
3486 }),
3487 function() {
3488 var r = Object.keys(t),
3489 n = r.length > 0 ? {} : null;
3490 try {
3491 return r.forEach(function(e) {
3492 var r = e.slice(1),
3493 a = "$" === e[0] ? State.variables : State.temporary;
3494 a.hasOwnProperty(r) && (n[r] = a[r]), a[r] = t[e]
3495 }), Scripting.evalJavaScript(e)
3496 } finally {
3497 r.forEach(function(e) {
3498 var r = e.slice(1),
3499 a = "$" === e[0] ? State.variables : State.temporary;
3500 t[e] = a[r], n.hasOwnProperty(r) ? a[r] = n[r] : delete a[r]
3501 })
3502 }
3503 }
3504 }
3505 var a = null;
3506 return n
3507 }()
3508 },
3509 parseSquareBracketedMarkup: {
3510 value: function(e) {
3511 function t() {
3512 return d >= e.source.length ? u : e.source[d++]
3513 }
3514
3515 function r() {
3516 return d >= e.source.length ? u : e.source[d]
3517 }
3518
3519 function n(t) {
3520 return t < 1 || d + t >= e.source.length ? u : e.source[d + t]
3521 }
3522
3523 function a() {
3524 return {
3525 error: String.format.apply(String, arguments),
3526 pos: d
3527 }
3528 }
3529
3530 function i() {
3531 c = d
3532 }
3533
3534 function o(t) {
3535 var r = e.source.slice(c, d).trim();
3536 if ("" === r) throw new Error("malformed wiki " + (h ? "link" : "image") + ", empty " + t + " component");
3537 "link" === t && "~" === r[0] ? (l.forceInternal = !0, l.link = r.slice(1)) : l[t] = r, c = d
3538 }
3539
3540 function s(e) {
3541 ++d;
3542 e: for (;;) {
3543 switch (r()) {
3544 case "\\":
3545 ++d;
3546 var t = r();
3547 if (t !== u && "\n" !== t) break;
3548 case u:
3549 case "\n":
3550 return u;
3551 case e:
3552 break e
3553 }++d
3554 }
3555 return d
3556 }
3557 var u = -1,
3558 l = {},
3559 c = e.matchStart,
3560 d = c + 1,
3561 f = void 0,
3562 p = void 0,
3563 h = void 0,
3564 g = void 0;
3565 if (g = r(), "[" === g) h = l.isLink = !0;
3566 else {
3567 switch (h = !1, g) {
3568 case "<":
3569 l.align = "left", ++d;
3570 break;
3571 case ">":
3572 l.align = "right", ++d
3573 }
3574 if (!/^[Ii][Mm][Gg]$/.test(e.source.slice(d, d + 3))) return a("malformed square-bracketed wiki markup");
3575 d += 3, l.isImage = !0
3576 }
3577 if ("[" !== t()) return a("malformed wiki {0}", h ? "link" : "image");
3578 f = 1, p = 0, i();
3579 try {
3580 e: for (;;) {
3581 switch (g = r()) {
3582 case u:
3583 case "\n":
3584 return a("unterminated wiki {0}", h ? "link" : "image");
3585 case '"':
3586 if (s(g) === u) return a("unterminated double quoted string in wiki {0}", h ? "link" : "image");
3587 break;
3588 case "'":
3589 if ((4 === p || 3 === p && h) && s(g) === u) return a("unterminated single quoted string in wiki {0}", h ? "link" : "image");
3590 break;
3591 case "|":
3592 0 === p && (o(h ? "text" : "title"), ++c, p = 1);
3593 break;
3594 case "-":
3595 0 === p && ">" === n(1) && (o(h ? "text" : "title"), ++d, c += 2, p = 1);
3596 break;
3597 case "<":
3598 0 === p && "-" === n(1) && (o(h ? "link" : "source"), ++d, c += 2, p = 2);
3599 break;
3600 case "[":
3601 if (p === -1) return a("unexpected left square bracket '['");
3602 ++f, 1 === f && (i(), ++c);
3603 break;
3604 case "]":
3605 if (--f, 0 === f) {
3606 switch (p) {
3607 case 0:
3608 case 1:
3609 o(h ? "link" : "source"), p = 3;
3610 break;
3611 case 2:
3612 o(h ? "text" : "title"), p = 3;
3613 break;
3614 case 3:
3615 h ? (o("setter"), p = -1) : (o("link"), p = 4);
3616 break;
3617 case 4:
3618 o("setter"), p = -1
3619 }
3620 if (++d, "]" === r()) {
3621 ++d;
3622 break e
3623 }--d
3624 }
3625 }++d
3626 }
3627 } catch (e) {
3628 return a(e.message)
3629 }
3630 return l.pos = d, l
3631 }
3632 }
3633 }), t
3634 }();
3635 ! function() {
3636 Wikifier.Parser.add({
3637 name: "macro",
3638 profiles: ["core"],
3639 match: "<<",
3640 lookahead: new RegExp("<<(\\/?" + Patterns.macroName + ")(?:\\s*)((?:(?:\"(?:\\\\.|[^\"\\\\])*\")|(?:'(?:\\\\.|[^'\\\\])*')|(?:\\[(?:[<>]?[Ii][Mm][Gg])?\\[[^\\r\\n]*?\\]\\]+)|[^>]|(?:>(?!>)))*)>>", "gm"),
3641 argsPattern: ["(``)", "`((?:\\\\.|[^`\\\\])+)`", "(\"\"|'')", '("(?:\\\\.|[^"\\\\])+")', "('(?:\\\\.|[^'\\\\])+')", "(\\[(?:[<>]?[Ii][Mm][Gg])?\\[[^\\r\\n]*?\\]\\]+)", "([^`\"'\\s]+)", "(`|\"|')"].join("|"),
3642 working: {
3643 source: "",
3644 name: "",
3645 arguments: "",
3646 index: 0
3647 },
3648 context: null,
3649 handler: function(e) {
3650 var t = this.lookahead.lastIndex = e.matchStart;
3651 if (this.parseTag(e)) {
3652 var r = e.nextMatch,
3653 n = this.working.source,
3654 a = this.working.name,
3655 i = this.working.arguments,
3656 o = void 0;
3657 try {
3658 if (o = Macro.get(a), !o) {
3659 if (Macro.tags.has(a)) {
3660 var s = Macro.tags.get(a);
3661 return throwError(e.output, "child tag <<" + a + ">> was found outside of a call to its parent macro" + (1 === s.length ? "" : "s") + " <<" + s.join(">>, <<") + ">>", e.source.slice(t, e.nextMatch))
3662 }
3663 return throwError(e.output, "macro <<" + a + ">> does not exist", e.source.slice(t, e.nextMatch))
3664 }
3665 var u = null;
3666 if (o.hasOwnProperty("tags") && (u = this.parseBody(e, o), !u)) return e.nextMatch = r, throwError(e.output, "cannot find a closing tag for macro <<" + a + ">>", e.source.slice(t, e.nextMatch) + "…");
3667 if ("function" != typeof o.handler) return throwError(e.output, "macro <<" + a + ">> handler function " + (o.hasOwnProperty("handler") ? "is not a function" : "does not exist"), e.source.slice(t, e.nextMatch));
3668 var l = u ? u[0].args : this.createArgs(i, o.hasOwnProperty("skipArgs") && !!o.skipArgs || o.hasOwnProperty("skipArg0") && !!o.skipArg0);
3669 if (o.hasOwnProperty("_MACRO_API")) {
3670 this.context = new MacroContext({
3671 parent: this.context,
3672 macro: o,
3673 name: a,
3674 args: l,
3675 payload: u,
3676 parser: e,
3677 source: n
3678 });
3679 try {
3680 o.handler.call(this.context)
3681 } finally {
3682 this.context = this.context.parent
3683 }
3684 } else {
3685 var c = e._rawArgs;
3686 e._rawArgs = i, o.handler(e.output, a, l, e, u), e._rawArgs = c
3687 }
3688 } catch (r) {
3689 return throwError(e.output, "cannot execute " + (o && o.isWidget ? "widget" : "macro") + " <<" + a + ">>: " + r.message, e.source.slice(t, e.nextMatch))
3690 } finally {
3691 this.working.source = "", this.working.name = "", this.working.arguments = "", this.working.index = 0
3692 }
3693 } else e.outputText(e.output, e.matchStart, e.nextMatch)
3694 },
3695 parseTag: function(e) {
3696 var t = this.lookahead.exec(e.source);
3697 return !(!t || t.index !== e.matchStart || !t[1]) && (e.nextMatch = this.lookahead.lastIndex, this.working.source = e.source.slice(t.index, this.lookahead.lastIndex), this.working.name = t[1], this.working.arguments = t[2], this.working.index = t.index, !0)
3698 },
3699 parseBody: function(e, t) {
3700 for (var r = this.working.name, n = "/" + r, a = "end" + r, i = !!Array.isArray(t.tags) && t.tags, o = [], s = t.hasOwnProperty("skipArgs") && t.skipArgs, u = t.hasOwnProperty("skipArg0") && t.skipArg0, l = -1, c = 1, d = this.working.source, f = this.working.name, p = this.working.arguments, h = e.nextMatch;
3701 (e.matchStart = e.source.indexOf(this.match, e.nextMatch)) !== -1;)
3702 if (this.parseTag(e)) {
3703 var g = this.working.source,
3704 m = this.working.name,
3705 v = this.working.arguments,
3706 y = this.working.index,
3707 b = e.nextMatch;
3708 switch (m) {
3709 case r:
3710 ++c;
3711 break;
3712 case a:
3713 case n:
3714 --c;
3715 break;
3716 default:
3717 if (1 === c && i)
3718 for (var w = 0, k = i.length; w < k; ++w) m === i[w] && (o.push({
3719 source: d,
3720 name: f,
3721 arguments: p,
3722 args: this.createArgs(p, s || 0 === o.length && u),
3723 contents: e.source.slice(h, y)
3724 }), d = g, f = m, p = v, h = b)
3725 }
3726 if (0 === c) {
3727 o.push({
3728 source: d,
3729 name: f,
3730 arguments: p,
3731 args: this.createArgs(p, s || 0 === o.length && u),
3732 contents: e.source.slice(h, y)
3733 }), l = b;
3734 break
3735 }
3736 } else this.lookahead.lastIndex = e.nextMatch = e.matchStart + this.match.length;
3737 return l !== -1 ? (e.nextMatch = l, o) : null
3738 },
3739 createArgs: function(e, t) {
3740 var r = t ? [] : this.parseArgs(e);
3741 return Object.defineProperties(r, {
3742 raw: {
3743 value: e
3744 },
3745 full: {
3746 value: Scripting.parse(e)
3747 }
3748 }), r
3749 },
3750 parseArgs: function(e) {
3751 for (var t = new RegExp(this.argsPattern, "gm"), r = [], n = new RegExp("^" + Patterns.variable), a = void 0; null !== (a = t.exec(e));) {
3752 var i = void 0;
3753 if (a[1]) i = undefined;
3754 else if (a[2]) {
3755 i = a[2];
3756 try {
3757 i = Scripting.evalTwineScript(i)
3758 } catch (e) {
3759 throw new Error('unable to parse macro argument "' + i + '": ' + e.message)
3760 }
3761 } else if (a[3]) i = "";
3762 else if (a[4]) {
3763 i = a[4];
3764 try {
3765 i = Scripting.evalJavaScript(i)
3766 } catch (e) {
3767 throw new Error("unable to parse macro argument '" + i + "': " + e.message)
3768 }
3769 } else if (a[5]) {
3770 i = a[5];
3771 try {
3772 i = Scripting.evalJavaScript(i)
3773 } catch (e) {
3774 throw new Error('unable to parse macro argument "' + i + '": ' + e.message)
3775 }
3776 } else if (a[6]) {
3777 i = a[6];
3778 var o = Wikifier.helpers.parseSquareBracketedMarkup({
3779 source: i,
3780 matchStart: 0
3781 });
3782 if (o.hasOwnProperty("error")) throw new Error('unable to parse macro argument "' + i + '": ' + o.error);
3783 if (o.pos < i.length) throw new Error('unable to parse macro argument "' + i + '": unexpected character(s) "' + i.slice(o.pos) + '" (pos: ' + o.pos + ")");
3784 o.isLink ? (i = {
3785 isLink: !0
3786 }, i.count = o.hasOwnProperty("text") ? 2 : 1, i.link = Wikifier.helpers.evalPassageId(o.link), i.text = o.hasOwnProperty("text") ? Wikifier.helpers.evalText(o.text) : i.link, i.external = !o.forceInternal && Wikifier.isExternalLink(i.link), i.setFn = o.hasOwnProperty("setter") ? Wikifier.helpers.createShadowSetterCallback(Scripting.parse(o.setter)) : null) : o.isImage && (i = function(e) {
3787 var t = {
3788 source: e,
3789 isImage: !0
3790 };
3791 if ("data:" !== e.slice(0, 5) && Story.has(e)) {
3792 var r = Story.get(e);
3793 r.tags.includes("Twine.image") && (t.source = r.text, t.passage = r.title)
3794 }
3795 return t
3796 }(Wikifier.helpers.evalPassageId(o.source)), o.hasOwnProperty("align") && (i.align = o.align), o.hasOwnProperty("title") && (i.title = Wikifier.helpers.evalText(o.title)), o.hasOwnProperty("link") && (i.link = Wikifier.helpers.evalPassageId(o.link), i.external = !o.forceInternal && Wikifier.isExternalLink(i.link)), i.setFn = o.hasOwnProperty("setter") ? Wikifier.helpers.createShadowSetterCallback(Scripting.parse(o.setter)) : null)
3797 } else if (a[7])
3798 if (i = a[7], n.test(i)) i = Wikifier.getValue(i);
3799 else if (/^(?:settings|setup)[.[]/.test(i)) try {
3800 i = Scripting.evalTwineScript(i)
3801 } catch (e) {
3802 throw new Error('unable to parse macro argument "' + i + '": ' + e.message)
3803 } else if ("null" === i) i = null;
3804 else if ("undefined" === i) i = undefined;
3805 else if ("true" === i) i = !0;
3806 else if ("false" === i) i = !1;
3807 else {
3808 var s = Number(i);
3809 Number.isNaN(s) || (i = s)
3810 } else if (a[8]) {
3811 var u = void 0;
3812 switch (a[8]) {
3813 case "`":
3814 u = "backtick expression";
3815 break;
3816 case '"':
3817 u = "double quoted string";
3818 break;
3819 case "'":
3820 u = "single quoted string"
3821 }
3822 throw new Error("unterminated " + u + " in macro argument string")
3823 }
3824 r.push(i)
3825 }
3826 return r
3827 }
3828 }), Wikifier.Parser.add({
3829 name: "prettyLink",
3830 profiles: ["core"],
3831 match: "\\[\\[[^[]",
3832 handler: function(e) {
3833 var t = Wikifier.helpers.parseSquareBracketedMarkup(e);
3834 if (t.hasOwnProperty("error")) return void e.outputText(e.output, e.matchStart, e.nextMatch);
3835 e.nextMatch = t.pos;
3836 var r = Wikifier.helpers.evalPassageId(t.link),
3837 n = t.hasOwnProperty("text") ? Wikifier.helpers.evalText(t.text) : r,
3838 a = t.hasOwnProperty("setter") ? Wikifier.helpers.createShadowSetterCallback(Scripting.parse(t.setter)) : null,
3839 i = (Config.debug ? new DebugView(e.output, "wiki-link", "[[link]]", e.source.slice(e.matchStart, e.nextMatch)) : e).output;
3840 t.forceInternal || !Wikifier.isExternalLink(r) ? Wikifier.createInternalLink(i, r, n, a) : Wikifier.createExternalLink(i, r, n)
3841 }
3842 }), Wikifier.Parser.add({
3843 name: "urlLink",
3844 profiles: ["core"],
3845 match: Patterns.url,
3846 handler: function(e) {
3847 e.outputText(Wikifier.createExternalLink(e.output, e.matchText), e.matchStart, e.nextMatch)
3848 }
3849 }), Wikifier.Parser.add({
3850 name: "image",
3851 profiles: ["core"],
3852 match: "\\[[<>]?[Ii][Mm][Gg]\\[",
3853 handler: function(e) {
3854 var t = Wikifier.helpers.parseSquareBracketedMarkup(e);
3855 if (t.hasOwnProperty("error")) return void e.outputText(e.output, e.matchStart, e.nextMatch);
3856 e.nextMatch = t.pos;
3857 var r = void 0;
3858 Config.debug && (r = new DebugView(e.output, "wiki-image", t.hasOwnProperty("link") ? "[img[][link]]" : "[img[]]", e.source.slice(e.matchStart, e.nextMatch)), r.modes({
3859 block: !0
3860 }));
3861 var n = t.hasOwnProperty("setter") ? Wikifier.helpers.createShadowSetterCallback(Scripting.parse(t.setter)) : null,
3862 a = (Config.debug ? r : e).output,
3863 i = void 0;
3864 if (t.hasOwnProperty("link")) {
3865 var o = Wikifier.helpers.evalPassageId(t.link);
3866 a = t.forceInternal || !Wikifier.isExternalLink(o) ? Wikifier.createInternalLink(a, o, null, n) : Wikifier.createExternalLink(a, o), a.classList.add("link-image")
3867 }
3868 if (a = jQuery(document.createElement("img")).appendTo(a).get(0), i = Wikifier.helpers.evalPassageId(t.source), "data:" !== i.slice(0, 5) && Story.has(i)) {
3869 var s = Story.get(i);
3870 s.tags.includes("Twine.image") && (a.setAttribute("data-passage", s.title), i = s.text)
3871 }
3872 a.src = i, t.hasOwnProperty("title") && (a.title = Wikifier.helpers.evalText(t.title)), t.hasOwnProperty("align") && (a.align = t.align)
3873 }
3874 }), Wikifier.Parser.add({
3875 name: "monospacedByBlock",
3876 profiles: ["block"],
3877 match: "^\\{\\{\\{\\n",
3878 lookahead: /^\{\{\{\n((?:^[^\n]*\n)+?)(^\}\}\}$\n?)/gm,
3879 handler: function(e) {
3880 this.lookahead.lastIndex = e.matchStart;
3881 var t = this.lookahead.exec(e.source);
3882 t && t.index === e.matchStart && (jQuery(document.createElement("pre")).text(t[1]).appendTo(e.output), e.nextMatch = this.lookahead.lastIndex)
3883 }
3884 }), Wikifier.Parser.add({
3885 name: "formatByChar",
3886 profiles: ["core"],
3887 match: "''|//|__|\\^\\^|~~|==|\\{\\{\\{",
3888 handler: function(e) {
3889 switch (e.matchText) {
3890 case "''":
3891 e.subWikify(jQuery(document.createElement("strong")).appendTo(e.output).get(0), "''");
3892 break;
3893 case "//":
3894 e.subWikify(jQuery(document.createElement("em")).appendTo(e.output).get(0), "//");
3895 break;
3896 case "__":
3897 e.subWikify(jQuery(document.createElement("u")).appendTo(e.output).get(0), "__");
3898 break;
3899 case "^^":
3900 e.subWikify(jQuery(document.createElement("sup")).appendTo(e.output).get(0), "\\^\\^");
3901 break;
3902 case "~~":
3903 e.subWikify(jQuery(document.createElement("sub")).appendTo(e.output).get(0), "~~");
3904 break;
3905 case "==":
3906 e.subWikify(jQuery(document.createElement("s")).appendTo(e.output).get(0), "==");
3907 break;
3908 case "{{{":
3909 var t = /\{\{\{((?:.|\n)*?)\}\}\}/gm;
3910 t.lastIndex = e.matchStart;
3911 var r = t.exec(e.source);
3912 r && r.index === e.matchStart && (jQuery(document.createElement("code")).text(r[1]).appendTo(e.output), e.nextMatch = t.lastIndex)
3913 }
3914 }
3915 }), Wikifier.Parser.add({
3916 name: "customStyle",
3917 profiles: ["core"],
3918 match: "@@",
3919 terminator: "@@",
3920 blockRegExp: /\s*\n/gm,
3921 handler: function(e) {
3922 var t = Wikifier.helpers.inlineCss(e);
3923 this.blockRegExp.lastIndex = e.nextMatch;
3924 var r = this.blockRegExp.exec(e.source),
3925 n = r && r.index === e.nextMatch,
3926 a = jQuery(document.createElement(n ? "div" : "span")).appendTo(e.output);
3927 0 === t.classes.length && "" === t.id && 0 === Object.keys(t.styles).length ? a.addClass("marked") : (t.classes.forEach(function(e) {
3928 return a.addClass(e)
3929 }), "" !== t.id && a.attr("id", t.id), a.css(t.styles)), n ? (e.nextMatch += r[0].length, e.subWikify(a[0], "\\n?" + this.terminator)) : e.subWikify(a[0], this.terminator)
3930 }
3931 }), Wikifier.Parser.add({
3932 name: "verbatimText",
3933 profiles: ["core"],
3934 match: '"{3}|<nowiki>',
3935 lookahead: /(?:"{3}((?:.|\n)*?)"{3})|(?:<nowiki>((?:.|\n)*?)<\/nowiki>)/gm,
3936 handler: function(e) {
3937 this.lookahead.lastIndex = e.matchStart;
3938 var t = this.lookahead.exec(e.source);
3939 t && t.index === e.matchStart && (jQuery(document.createElement("span")).addClass("verbatim").text(t[1] || t[2]).appendTo(e.output), e.nextMatch = this.lookahead.lastIndex)
3940 }
3941 }), Wikifier.Parser.add({
3942 name: "horizontalRule",
3943 profiles: ["core"],
3944 match: "^----+$\\n?|<hr\\s*/?>\\n?",
3945 handler: function(e) {
3946 jQuery(document.createElement("hr")).appendTo(e.output)
3947 }
3948 }), Wikifier.Parser.add({
3949 name: "emdash",
3950 profiles: ["core"],
3951 match: "--",
3952 handler: function(e) {
3953 jQuery(document.createTextNode("—")).appendTo(e.output)
3954 }
3955 }), Wikifier.Parser.add({
3956 name: "doubleDollarSign",
3957 profiles: ["core"],
3958 match: "\\${2}",
3959 handler: function(e) {
3960 jQuery(document.createTextNode("$")).appendTo(e.output)
3961 }
3962 }), Wikifier.Parser.add({
3963 name: "nakedVariable",
3964 profiles: ["core"],
3965 match: Patterns.variable + "(?:(?:\\." + Patterns.identifier + ")|(?:\\[\\d+\\])|(?:\\[\"(?:\\\\.|[^\"\\\\])+\"\\])|(?:\\['(?:\\\\.|[^'\\\\])+'\\])|(?:\\[" + Patterns.variable + "\\]))*",
3966 handler: function(e) {
3967 var t = toStringOrDefault(Wikifier.getValue(e.matchText), null);
3968 null === t ? jQuery(document.createTextNode(e.matchText)).appendTo(e.output) : new Wikifier((Config.debug ? new DebugView(e.output, "variable", e.matchText, e.matchText) : e).output, t)
3969 }
3970 }), Wikifier.Parser.add({
3971 name: "heading",
3972 profiles: ["block"],
3973 match: "^!{1,6}",
3974 terminator: "\\n",
3975 handler: function(e) {
3976 return Wikifier.helpers.hasBlockContext(e.output.childNodes) ? void e.subWikify(jQuery(document.createElement("h" + e.matchLength)).appendTo(e.output).get(0), this.terminator) : void jQuery(e.output).append(document.createTextNode(e.matchText))
3977 }
3978 }), Wikifier.Parser.add({
3979 name: "table",
3980 profiles: ["block"],
3981 match: "^\\|(?:[^\\n]*)\\|(?:[fhck]?)$",
3982 lookahead: /^\|([^\n]*)\|([fhck]?)$/gm,
3983 rowTerminator: "\\|(?:[cfhk]?)$\\n?",
3984 cellPattern: "(?:\\|([^\\n\\|]*)\\|)|(\\|[cfhk]?$\\n?)",
3985 cellTerminator: "(?:\\u0020*)\\|",
3986 rowTypes: {
3987 c: "caption",
3988 f: "tfoot",
3989 h: "thead",
3990 "": "tbody"
3991 },
3992 handler: function(e) {
3993 if (!Wikifier.helpers.hasBlockContext(e.output.childNodes)) return void jQuery(e.output).append(document.createTextNode(e.matchText));
3994 var t = jQuery(document.createElement("table")).appendTo(e.output).get(0),
3995 r = [],
3996 n = null,
3997 a = null,
3998 i = 0,
3999 o = void 0;
4000 e.nextMatch = e.matchStart;
4001 do {
4002 this.lookahead.lastIndex = e.nextMatch;
4003 var s = this.lookahead.exec(e.source);
4004 if (o = s && s.index === e.nextMatch) {
4005 var u = s[2];
4006 "k" === u ? (t.className = s[1], e.nextMatch += s[0].length + 1) : (u !== n && (n = u, a = jQuery(document.createElement(this.rowTypes[u])).appendTo(t)), "c" === n ? (a.css("caption-side", 0 === i ? "top" : "bottom"), e.nextMatch += 1, e.subWikify(a[0], this.rowTerminator)) : this.rowHandler(e, jQuery(document.createElement("tr")).appendTo(a).get(0), r), ++i)
4007 }
4008 } while (o)
4009 },
4010 rowHandler: function(e, t, r) {
4011 var n = this,
4012 a = new RegExp(this.cellPattern, "gm"),
4013 i = 0,
4014 o = 1,
4015 s = void 0;
4016 do {
4017 a.lastIndex = e.nextMatch;
4018 var u = a.exec(e.source);
4019 if (s = u && u.index === e.nextMatch) {
4020 if ("~" === u[1]) {
4021 var l = r[i];
4022 l && (++l.rowCount, l.$element.attr("rowspan", l.rowCount).css("vertical-align", "middle")), e.nextMatch = u.index + u[0].length - 1
4023 } else if (">" === u[1]) ++o, e.nextMatch = u.index + u[0].length - 1;
4024 else {
4025 if (u[2]) {
4026 e.nextMatch = u.index + u[0].length;
4027 break
4028 }! function() {
4029 ++e.nextMatch;
4030 for (var a = Wikifier.helpers.inlineCss(e), s = !1, u = !1, l = void 0;
4031 " " === e.source.substr(e.nextMatch, 1);) s = !0, ++e.nextMatch;
4032 "!" === e.source.substr(e.nextMatch, 1) ? (l = jQuery(document.createElement("th")).appendTo(t), ++e.nextMatch) : l = jQuery(document.createElement("td")).appendTo(t), r[i] = {
4033 rowCount: 1,
4034 $element: l
4035 }, o > 1 && (l.attr("colspan", o), o = 1), e.subWikify(l[0], n.cellTerminator), " " === e.matchText.substr(e.matchText.length - 2, 1) && (u = !0), a.classes.forEach(function(e) {
4036 return l.addClass(e)
4037 }), "" !== a.id && l.attr("id", a.id), s && u ? a.styles["text-align"] = "center" : s ? a.styles["text-align"] = "right" : u && (a.styles["text-align"] = "left"), l.css(a.styles), e.nextMatch = e.nextMatch - 1
4038 }()
4039 }++i
4040 }
4041 } while (s)
4042 }
4043 }), Wikifier.Parser.add({
4044 name: "list",
4045 profiles: ["block"],
4046 match: "^(?:(?:\\*+)|(?:#+))",
4047 lookahead: /^(?:(\*+)|(#+))/gm,
4048 terminator: "\\n",
4049 handler: function(e) {
4050 if (!Wikifier.helpers.hasBlockContext(e.output.childNodes)) return void jQuery(e.output).append(document.createTextNode(e.matchText));
4051 e.nextMatch = e.matchStart;
4052 var t = [e.output],
4053 r = null,
4054 n = 0,
4055 a = void 0,
4056 i = void 0;
4057 do {
4058 this.lookahead.lastIndex = e.nextMatch;
4059 var o = this.lookahead.exec(e.source);
4060 if (a = o && o.index === e.nextMatch) {
4061 var s = o[2] ? "ol" : "ul",
4062 u = o[0].length;
4063 if (e.nextMatch += o[0].length, u > n)
4064 for (i = n; i < u; ++i) t.push(jQuery(document.createElement(s)).appendTo(t[t.length - 1]).get(0));
4065 else if (u < n)
4066 for (i = n; i > u; --i) t.pop();
4067 else u === n && s !== r && (t.pop(), t.push(jQuery(document.createElement(s)).appendTo(t[t.length - 1]).get(0)));
4068 n = u, r = s, e.subWikify(jQuery(document.createElement("li")).appendTo(t[t.length - 1]).get(0), this.terminator)
4069 }
4070 } while (a)
4071 }
4072 }), Wikifier.Parser.add({
4073 name: "quoteByBlock",
4074 profiles: ["block"],
4075 match: "^<<<\\n",
4076 terminator: "^<<<\\n",
4077 handler: function(e) {
4078 return Wikifier.helpers.hasBlockContext(e.output.childNodes) ? void e.subWikify(jQuery(document.createElement("blockquote")).appendTo(e.output).get(0), this.terminator) : void jQuery(e.output).append(document.createTextNode(e.matchText))
4079 }
4080 }), Wikifier.Parser.add({
4081 name: "quoteByLine",
4082 profiles: ["block"],
4083 match: "^>+",
4084 lookahead: /^>+/gm,
4085 terminator: "\\n",
4086 handler: function(e) {
4087 if (!Wikifier.helpers.hasBlockContext(e.output.childNodes)) return void jQuery(e.output).append(document.createTextNode(e.matchText));
4088 var t = [e.output],
4089 r = 0,
4090 n = e.matchLength,
4091 a = void 0,
4092 i = void 0;
4093 do {
4094 if (n > r)
4095 for (i = r; i < n; ++i) t.push(jQuery(document.createElement("blockquote")).appendTo(t[t.length - 1]).get(0));
4096 else if (n < r)
4097 for (i = r; i > n; --i) t.pop();
4098 r = n, e.subWikify(t[t.length - 1], this.terminator), jQuery(document.createElement("br")).appendTo(t[t.length - 1]), this.lookahead.lastIndex = e.nextMatch;
4099 var o = this.lookahead.exec(e.source);
4100 a = o && o.index === e.nextMatch, a && (n = o[0].length, e.nextMatch += o[0].length)
4101 } while (a)
4102 }
4103 }), Wikifier.Parser.add({
4104 name: "html",
4105 profiles: ["core"],
4106 match: "<[Hh][Tt][Mm][Ll]>",
4107 lookahead: /<[Hh][Tt][Mm][Ll]>((?:.|\n)*?)<\/[Hh][Tt][Mm][Ll]>/gm,
4108 handler: function(e) {
4109 this.lookahead.lastIndex = e.matchStart;
4110 var t = this.lookahead.exec(e.source);
4111 t && t.index === e.matchStart && (e.nextMatch = this.lookahead.lastIndex, jQuery(document.createDocumentFragment()).append(t[1]).appendTo(e.output))
4112 }
4113 }), Wikifier.Parser.add({
4114 name: "commentByBlock",
4115 profiles: ["core"],
4116 match: "(?:/(?:%|\\*))|(?:<!--)",
4117 lookahead: /(?:\/(%|\*)(?:(?:.|\n)*?)\1\/)|(?:<!--(?:(?:.|\n)*?)-->)/gm,
4118 handler: function(e) {
4119 this.lookahead.lastIndex = e.matchStart;
4120 var t = this.lookahead.exec(e.source);
4121 t && t.index === e.matchStart && (e.nextMatch = this.lookahead.lastIndex)
4122 }
4123 }), Wikifier.Parser.add({
4124 name: "lineContinuation",
4125 profiles: ["core"],
4126 match: "\\\\" + Patterns.spaceNoTerminator + "*(?:\\n|$)|(?:^|\\n)" + Patterns.spaceNoTerminator + "*\\\\",
4127 handler: function(e) {
4128 e.nextMatch = e.matchStart + e.matchLength
4129 }
4130 }), Wikifier.Parser.add({
4131 name: "lineBreak",
4132 profiles: ["core"],
4133 match: "\\n|<br\\s*/?>",
4134 handler: function(e) {
4135 e.options.nobr || jQuery(document.createElement("br")).appendTo(e.output)
4136 }
4137 }), Wikifier.Parser.add({
4138 name: "htmlCharacterReference",
4139 profiles: ["core"],
4140 match: "(?:(?:&#?[0-9A-Za-z]{2,8};|.)(?:&#?(?:x0*(?:3[0-6][0-9A-Fa-f]|1D[C-Fc-f][0-9A-Fa-f]|20[D-Fd-f][0-9A-Fa-f]|FE2[0-9A-Fa-f])|0*(?:76[89]|7[7-9][0-9]|8[0-7][0-9]|761[6-9]|76[2-7][0-9]|84[0-3][0-9]|844[0-7]|6505[6-9]|6506[0-9]|6507[0-1]));)+|&#?[0-9A-Za-z]{2,8};)",
4141 handler: function(e) {
4142 jQuery(document.createDocumentFragment()).append(e.matchText).appendTo(e.output)
4143 }
4144 }), Wikifier.Parser.add({
4145 name: "htmlTag",
4146 profiles: ["core"],
4147 match: "<\\w+(?:\\s+[^\\u0000-\\u001F\\u007F-\\u009F\\s\"'>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*?\"|'[^']*?'|[^\\s\"'=<>`]+))?)*\\s*\\/?>",
4148 tagPattern: "<(\\w+)",
4149 voidElements: ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "menuitem", "meta", "param", "source", "track", "wbr"],
4150 nobrElements: ["colgroup", "datalist", "dl", "figure", "ol", "optgroup", "select", "table", "tbody", "tfoot", "thead", "tr", "ul"],
4151 handler: function(e) {
4152 var t = new RegExp(this.tagPattern).exec(e.matchText),
4153 r = t && t[1],
4154 n = r && r.toLowerCase();
4155 if (n) {
4156 var a = this.voidElements.includes(n),
4157 i = this.nobrElements.includes(n),
4158 o = void 0,
4159 s = void 0;
4160 if (!a) {
4161 o = "<\\/" + n + "\\s*>";
4162 var u = new RegExp(o, "gim");
4163 u.lastIndex = e.matchStart, s = u.exec(e.source)
4164 }
4165 if (a || s) {
4166 var l = e.output,
4167 c = document.createElement(e.output.tagName),
4168 d = void 0;
4169 for (c.innerHTML = e.matchText; c.firstChild;) c = c.firstChild;
4170 c.hasAttribute("data-passage") && (this.processDataAttributes(c), Config.debug && (d = new DebugView(e.output, "html-" + n, n, e.matchText), d.modes({
4171 block: "img" === n,
4172 nonvoid: s
4173 }), l = d.output)), s && (e.subWikify(c, o, {
4174 ignoreTerminatorCase: !0,
4175 nobr: i
4176 }), d && jQuery(c).find(".debug.block").length > 0 && d.modes({
4177 block: !0
4178 })), l.appendChild(c)
4179 } else throwError(e.output, 'HTML tag "' + r + '" is not closed', e.matchText + "…")
4180 }
4181 },
4182 processDataAttributes: function(e) {
4183 var t = e.getAttribute("data-passage");
4184 if (null != t) {
4185 var r = Wikifier.helpers.evalPassageId(t);
4186 r !== t && (t = r, e.setAttribute("data-passage", r)), "" !== t && ("IMG" === e.tagName.toUpperCase() ? "data:" !== t.slice(0, 5) && Story.has(t) && (t = Story.get(t), t.tags.includes("Twine.image") && (e.src = t.text.trim())) : ! function() {
4187 var r = e.getAttribute("data-setter"),
4188 n = void 0;
4189 null != r && (r = String(r).trim(), "" !== r && (n = Wikifier.helpers.createShadowSetterCallback(Scripting.parse(r)))), Story.has(t) ? (e.classList.add("link-internal"), Config.addVisitedLinkClass && State.hasPlayed(t) && e.classList.add("link-visited")) : e.classList.add("link-broken"), jQuery(e).ariaClick({
4190 one: !0
4191 }, function() {
4192 "function" == typeof n && n.call(this), Engine.play(t)
4193 })
4194 }())
4195 }
4196 }
4197 })
4198 }();
4199 var Macro = function() {
4200 function e(t, r, a) {
4201 if (Array.isArray(t)) return void t.forEach(function(t) {
4202 return e(t, r, a)
4203 });
4204 if (!f.test(t)) throw new Error('invalid macro name "' + t + '"');
4205 if (n(t)) throw new Error("cannot clobber existing macro <<" + t + ">>");
4206 if (u(t)) throw new Error("cannot clobber child tag <<" + t + ">> of parent macro" + (1 === d[t].length ? "" : "s") + " <<" + d[t].join(">>, <<") + ">>");
4207 try {
4208 if ("object" === ("undefined" == typeof r ? "undefined" : _typeof(r))) c[t] = a ? clone(r) : r;
4209 else {
4210 if (!n(r)) throw new Error("cannot create alias of nonexistent macro <<" + r + ">>");
4211 c[t] = a ? clone(c[r]) : c[r]
4212 }
4213 Object.defineProperty(c, t, {
4214 writable: !1
4215 }), c[t]._MACRO_API = !0
4216 } catch (e) {
4217 throw "TypeError" === e.name ? new Error("cannot clobber protected macro <<" + t + ">>") : new Error("unknown error when attempting to add macro <<" + t + ">>: [" + e.name + "] " + e.message)
4218 }
4219 if (c[t].hasOwnProperty("tags"))
4220 if (null == c[t].tags) o(t);
4221 else {
4222 if (!Array.isArray(c[t].tags)) throw new Error('bad value for "tags" property of macro <<' + t + ">>");
4223 o(t, c[t].tags)
4224 }
4225 }
4226
4227 function t(e) {
4228 if (Array.isArray(e)) return void e.forEach(function(e) {
4229 return t(e)
4230 });
4231 if (n(e)) {
4232 c[e].hasOwnProperty("tags") && s(e);
4233 try {
4234 Object.defineProperty(c, e, {
4235 writable: !0
4236 }), delete c[e]
4237 } catch (t) {
4238 throw new Error("unknown error removing macro <<" + e + ">>: " + t.message)
4239 }
4240 } else if (u(e)) throw new Error("cannot remove child tag <<" + e + ">> of parent macro <<" + d[e] + ">>")
4241 }
4242
4243 function r() {
4244 return 0 === Object.keys(c).length
4245 }
4246
4247 function n(e) {
4248 return c.hasOwnProperty(e)
4249 }
4250
4251 function a(e) {
4252 var t = null;
4253 return n(e) && "function" == typeof c[e].handler ? t = c[e] : macros.hasOwnProperty(e) && "function" == typeof macros[e].handler && (t = macros[e]), t
4254 }
4255
4256 function i() {
4257 var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "init";
4258 Object.keys(c).forEach(function(t) {
4259 "function" == typeof c[t][e] && c[t][e](t)
4260 }), Object.keys(macros).forEach(function(t) {
4261 "function" == typeof macros[t][e] && macros[t][e](t)
4262 })
4263 }
4264
4265 function o(e, t) {
4266 if (!e) throw new Error("no parent specified");
4267 for (var r = ["/" + e, "end" + e], a = [].concat(r, Array.isArray(t) ? t : []), i = 0; i < a.length; ++i) {
4268 var o = a[i];
4269 if (n(o)) throw new Error("cannot register tag for an existing macro");
4270 u(o) ? d[o].includes(e) || (d[o].push(e), d[o].sort()) : d[o] = [e]
4271 }
4272 }
4273
4274 function s(e) {
4275 if (!e) throw new Error("no parent specified");
4276 Object.keys(d).forEach(function(t) {
4277 var r = d[t].indexOf(e);
4278 r !== -1 && (1 === d[t].length ? delete d[t] : d[t].splice(r, 1))
4279 })
4280 }
4281
4282 function u(e) {
4283 return d.hasOwnProperty(e)
4284 }
4285
4286 function l(e) {
4287 return u(e) ? d[e] : null
4288 }
4289 var c = {},
4290 d = {},
4291 f = new RegExp("^(?:" + Patterns.macroName + ")$");
4292 return Object.freeze(Object.defineProperties({}, {
4293 add: {
4294 value: e
4295 },
4296 delete: {
4297 value: t
4298 },
4299 isEmpty: {
4300 value: r
4301 },
4302 has: {
4303 value: n
4304 },
4305 get: {
4306 value: a
4307 },
4308 init: {
4309 value: i
4310 },
4311 tags: {
4312 value: Object.freeze(Object.defineProperties({}, {
4313 register: {
4314 value: o
4315 },
4316 unregister: {
4317 value: s
4318 },
4319 has: {
4320 value: u
4321 },
4322 get: {
4323 value: l
4324 }
4325 }))
4326 },
4327 evalStatements: {
4328 value: function() {
4329 return Scripting.evalJavaScript.apply(Scripting, arguments)
4330 }
4331 }
4332 }))
4333 }(),
4334 MacroContext = function() {
4335 var e = function() {
4336 function e(t) {
4337 _classCallCheck(this, e);
4338 var r = Object.assign({
4339 parent: null,
4340 macro: null,
4341 name: "",
4342 args: null,
4343 payload: null,
4344 parser: null,
4345 source: ""
4346 }, t);
4347 if (null === r.macro || "" === r.name || null === r.parser) throw new TypeError("context object missing required properties");
4348 Object.defineProperties(this, {
4349 parent: {
4350 value: r.parent
4351 },
4352 self: {
4353 value: r.macro
4354 },
4355 name: {
4356 value: r.name
4357 },
4358 args: {
4359 value: r.args
4360 },
4361 payload: {
4362 value: r.payload
4363 },
4364 source: {
4365 value: r.source
4366 },
4367 parser: {
4368 value: r.parser
4369 },
4370 _output: {
4371 value: r.parser.output
4372 },
4373 _shadows: {
4374 writable: !0,
4375 value: null
4376 },
4377 _debugView: {
4378 writable: !0,
4379 value: null
4380 },
4381 _debugViewEnabled: {
4382 writable: !0,
4383 value: Config.debug
4384 }
4385 })
4386 }
4387 return _createClass(e, [{
4388 key: "contextHas",
4389 value: function(e) {
4390 for (var t = this; null !== (t = t.parent);)
4391 if (e(t)) return !0;
4392 return !1
4393 }
4394 }, {
4395 key: "contextSelect",
4396 value: function(e) {
4397 for (var t = this; null !== (t = t.parent);)
4398 if (e(t)) return t;
4399 return null
4400 }
4401 }, {
4402 key: "contextSelectAll",
4403 value: function(e) {
4404 for (var t = [], r = this; null !== (r = r.parent);) e(r) && t.push(r);
4405 return t
4406 }
4407 }, {
4408 key: "addShadow",
4409 value: function() {
4410 var e = this;
4411 this._shadows || (this._shadows = new Set);
4412 for (var t = new RegExp("^" + Patterns.variable + "$"), r = arguments.length, n = Array(r), a = 0; a < r; a++) n[a] = arguments[a];
4413 n.flatten().forEach(function(r) {
4414 if ("string" != typeof r) throw new TypeError("variable name must be a string; type: " + ("undefined" == typeof r ? "undefined" : _typeof(r)));
4415 if (!t.test(r)) throw new Error('invalid variable name "' + r + '"');
4416 e._shadows.add(r)
4417 })
4418 }
4419 }, {
4420 key: "createShadowWrapper",
4421 value: function(e, t, r) {
4422 var n = void 0;
4423 return "function" == typeof e && (n = {}, this.shadowView.forEach(function(e) {
4424 var t = e.slice(1),
4425 r = "$" === e[0] ? State.variables : State.temporary;
4426 n[e] = r[t]
4427 })),
4428 function() {
4429 for (var a = this, i = arguments.length, o = Array(i), s = 0; s < i; s++) o[s] = arguments[s];
4430 "function" == typeof r && r.apply(this, o), "function" == typeof e && ! function() {
4431 var t = Object.keys(n),
4432 r = t.length > 0 ? {} : null;
4433 try {
4434 t.forEach(function(e) {
4435 var t = e.slice(1),
4436 a = "$" === e[0] ? State.variables : State.temporary;
4437 a.hasOwnProperty(t) && (r[t] = a[t]), a[t] = n[e]
4438 }), e.apply(a, o)
4439 } finally {
4440 t.forEach(function(e) {
4441 var t = e.slice(1),
4442 a = "$" === e[0] ? State.variables : State.temporary;
4443 n[e] = a[t], r.hasOwnProperty(t) ? a[t] = r[t] : delete a[t]
4444 })
4445 }
4446 }(), "function" == typeof t && t.apply(this, o)
4447 }
4448 }
4449 }, {
4450 key: "createDebugView",
4451 value: function(e, t) {
4452 return this._debugView = new DebugView(this._output, "macro", e ? e : this.name, t ? t : this.source), null !== this.payload && this.payload.length > 0 && this._debugView.modes({
4453 nonvoid: !0
4454 }), this._debugViewEnabled = !0, this._debugView
4455 }
4456 }, {
4457 key: "removeDebugView",
4458 value: function() {
4459 null !== this._debugView && (this._debugView.remove(), this._debugView = null), this._debugViewEnabled = !1
4460 }
4461 }, {
4462 key: "error",
4463 value: function(e, t) {
4464 return throwError(this._output, "<<" + this.name + ">>: " + e, t ? t : this.source)
4465 }
4466 }, {
4467 key: "output",
4468 get: function() {
4469 return this._debugViewEnabled ? this.debugView.output : this._output
4470 }
4471 }, {
4472 key: "shadows",
4473 get: function() {
4474 return [].concat(_toConsumableArray(this._shadows))
4475 }
4476 }, {
4477 key: "shadowView",
4478 get: function() {
4479 var e = new Set;
4480 return this.contextSelectAll(function(e) {
4481 return e._shadows
4482 }).forEach(function(t) {
4483 return t._shadows.forEach(function(t) {
4484 return e.add(t)
4485 })
4486 }), [].concat(_toConsumableArray(e))
4487 }
4488 }, {
4489 key: "debugView",
4490 get: function() {
4491 return this._debugViewEnabled ? null !== this._debugView ? this._debugView : this.createDebugView() : null
4492 }
4493 }]), e
4494 }();
4495 return e
4496 }();
4497 ! function() {
4498 Macro.add("capture", {
4499 skipArgs: !0,
4500 tags: null,
4501 handler: function() {
4502 if (0 === this.args.raw.length) return this.error("no story/temporary variable list specified");
4503 var e = {};
4504 try {
4505 for (var t = new RegExp("(" + Patterns.variable + ")", "g"), r = void 0; null !== (r = t.exec(this.args.raw));) {
4506 var n = r[1],
4507 a = n.slice(1),
4508 i = "$" === n[0] ? State.variables : State.temporary;
4509 i.hasOwnProperty(a) && (e[a] = i[a]), this.addShadow(n)
4510 }
4511 new Wikifier(this.output, this.payload[0].contents)
4512 } finally {
4513 this.shadows.forEach(function(t) {
4514 var r = t.slice(1),
4515 n = "$" === t[0] ? State.variables : State.temporary;
4516 e.hasOwnProperty(r) ? n[r] = e[r] : delete n[r]
4517 })
4518 }
4519 }
4520 }), Macro.add("set", {
4521 skipArgs: !0,
4522 handler: function() {
4523 if (0 === this.args.full.length) return this.error("no expression specified");
4524 try {
4525 Scripting.evalJavaScript(this.args.full)
4526 } catch (e) {
4527 return this.error("bad evaluation: " + ("object" === ("undefined" == typeof e ? "undefined" : _typeof(e)) ? e.message : e))
4528 }
4529 Config.debug && this.debugView.modes({
4530 hidden: !0
4531 })
4532 }
4533 }), Macro.add("unset", {
4534 skipArgs: !0,
4535 handler: function() {
4536 if (0 === this.args.full.length) return this.error("no story/temporary variable list specified");
4537 for (var e = new RegExp("State\\.(variables|temporary)\\.(" + Patterns.identifier + ")", "g"), t = void 0; null !== (t = e.exec(this.args.full));) {
4538 var r = State[t[1]],
4539 n = t[2];
4540 r.hasOwnProperty(n) && delete r[n]
4541 }
4542 Config.debug && this.debugView.modes({
4543 hidden: !0
4544 })
4545 }
4546 }), Macro.add("remember", {
4547 skipArgs: !0,
4548 handler: function() {
4549 if (0 === this.args.full.length) return this.error("no expression specified");
4550 try {
4551 Scripting.evalJavaScript(this.args.full)
4552 } catch (e) {
4553 return this.error("bad evaluation: " + ("object" === ("undefined" == typeof e ? "undefined" : _typeof(e)) ? e.message : e))
4554 }
4555 for (var e = storage.get("remember") || {}, t = new RegExp("State\\.variables\\.(" + Patterns.identifier + ")", "g"), r = void 0; null !== (r = t.exec(this.args.full));) {
4556 var n = r[1];
4557 e[n] = State.variables[n]
4558 }
4559 return storage.set("remember", e) ? void(Config.debug && this.debugView.modes({
4560 hidden: !0
4561 })) : this.error("unknown error, cannot remember: " + this.args.raw)
4562 },
4563 init: function() {
4564 var e = storage.get("remember");
4565 e && Object.keys(e).forEach(function(t) {
4566 return State.variables[t] = e[t]
4567 })
4568 }
4569 }), Macro.add("forget", {
4570 skipArgs: !0,
4571 handler: function() {
4572 if (0 === this.args.full.length) return this.error("no story variable list specified");
4573 for (var e = storage.get("remember"), t = new RegExp("State\\.variables\\.(" + Patterns.identifier + ")", "g"), r = void 0, n = !1; null !== (r = t.exec(this.args.full));) {
4574 var a = r[1];
4575 State.variables.hasOwnProperty(a) && delete State.variables[a], e && e.hasOwnProperty(a) && (n = !0, delete e[a])
4576 }
4577 return n && !storage.set("remember", e) ? this.error("unknown error, cannot update remember store") : void(Config.debug && this.debugView.modes({
4578 hidden: !0
4579 }))
4580 }
4581 }), Macro.add("run", "set"), Macro.add("script", {
4582 skipArgs: !0,
4583 tags: null,
4584 handler: function() {
4585 var e = document.createDocumentFragment();
4586 try {
4587 Scripting.evalJavaScript(this.payload[0].contents, e), Config.debug && this.createDebugView(this.name, this.source + this.payload[0].contents + "<</" + this.name + ">>")
4588 } catch (e) {
4589 return this.error("bad evaluation: " + ("object" === ("undefined" == typeof e ? "undefined" : _typeof(e)) ? e.message : e), this.source + this.payload[0].contents + "<</" + this.name + ">>")
4590 }
4591 e.hasChildNodes() && this.output.appendChild(e)
4592 }
4593 }), Macro.add("include", {
4594 handler: function() {
4595 if (0 === this.args.length) return this.error("no passage specified");
4596 var e = void 0;
4597 if (e = "object" === _typeof(this.args[0]) ? this.args[0].link : this.args[0], !Story.has(e)) return this.error('passage "' + e + '" does not exist');
4598 Config.debug && this.debugView.modes({
4599 block: !0
4600 }), e = Story.get(e);
4601 var t = void 0;
4602 t = this.args[1] ? jQuery(document.createElement(this.args[1])).addClass(e.domId + " macro-" + this.name).attr("data-passage", e.title).appendTo(this.output) : jQuery(this.output), t.wiki(e.processText())
4603 }
4604 }), Macro.add("nobr", {
4605 skipArgs: !0,
4606 tags: null,
4607 handler: function() {
4608 new Wikifier(this.output, this.payload[0].contents.replace(/^\n+|\n+$/g, "").replace(/\n+/g, " "))
4609 }
4610 }), Macro.add(["print", "=", "-"], {
4611 skipArgs: !0,
4612 handler: function() {
4613 if (0 === this.args.full.length) return this.error("no expression specified");
4614 try {
4615 var e = toStringOrDefault(Scripting.evalJavaScript(this.args.full), null);
4616 null !== e && new Wikifier(this.output, "-" === this.name ? Util.escape(e) : e)
4617 } catch (e) {
4618 return this.error("bad evaluation: " + ("object" === ("undefined" == typeof e ? "undefined" : _typeof(e)) ? e.message : e))
4619 }
4620 }
4621 }), Macro.add("silently", {
4622 skipArgs: !0,
4623 tags: null,
4624 handler: function() {
4625 var e = document.createDocumentFragment();
4626 if (new Wikifier(e, this.payload[0].contents.trim()), Config.debug) this.debugView.modes({
4627 hidden: !0
4628 }), this.output.appendChild(e);
4629 else {
4630 var t = [].concat(_toConsumableArray(e.querySelectorAll(".error"))).map(function(e) {
4631 return e.textContent
4632 });
4633 if (t.length > 0) return this.error("error" + (1 === t.length ? "" : "s") + " within contents (" + t.join("; ") + ")", this.source + this.payload[0].contents + "<</" + this.name + ">>")
4634 }
4635 }
4636 }), Macro.add("display", "include"), Macro.add("if", {
4637 skipArgs: !0,
4638 tags: ["elseif", "else"],
4639 handler: function() {
4640 var e = 0;
4641 try {
4642 for (var t = Scripting.evalJavaScript, r = this.payload.length, n = !1; e < r; ++e) {
4643 switch (this.payload[e].name) {
4644 case "else":
4645 if (e + 1 !== r) return this.error("<<else>> must be the final clause");
4646 if (this.payload[e].args.raw.length > 0) return /^\s*if\b/i.test(this.payload[e].args.raw) ? this.error('whitespace is not allowed between the "else" and "if" in <<elseif>> clause' + (e > 0 ? " (#" + e + ")" : "")) : this.error("<<else>> does not accept a conditional expression (perhaps you meant to use <<elseif>>), invalid: " + this.payload[e].args.raw);
4647 break;
4648 default:
4649 if (0 === this.payload[e].args.full.length) return this.error("no conditional expression specified for <<" + this.payload[e].name + ">> clause" + (e > 0 ? " (#" + e + ")" : ""));
4650 if (Config.macros.ifAssignmentError && /[^!=&^|<>*\/%+-]=[^=]/.test(this.payload[e].args.full)) return this.error("assignment operator found within <<" + this.payload[e].name + ">> clause" + (e > 0 ? " (#" + e + ")" : "") + " (perhaps you meant to use an equality operator: ==, ===, eq, is), invalid: " + this.payload[e].args.raw)
4651 }
4652 if (Config.debug && this.createDebugView(this.payload[e].name, this.payload[e].source).modes({
4653 nonvoid: !1
4654 }), "else" === this.payload[e].name || t(this.payload[e].args.full)) {
4655 n = !0, new Wikifier(this.output, this.payload[e].contents);
4656 break
4657 }
4658 Config.debug && this.debugView.modes({
4659 hidden: !0,
4660 invalid: !0
4661 })
4662 }
4663 if (Config.debug) {
4664 for (++e; e < r; ++e) this.createDebugView(this.payload[e].name, this.payload[e].source).modes({
4665 nonvoid: !1,
4666 hidden: !0,
4667 invalid: !0
4668 });
4669 this.createDebugView("/" + this.name, "<</" + this.name + ">>").modes({
4670 nonvoid: !1,
4671 hidden: !n,
4672 invalid: !n
4673 })
4674 }
4675 } catch (t) {
4676 return this.error("bad conditional expression in <<" + (0 === e ? "if" : "elseif") + ">> clause" + (e > 0 ? " (#" + e + ")" : "") + ": " + ("object" === ("undefined" == typeof t ? "undefined" : _typeof(t)) ? t.message : t))
4677 }
4678 }
4679 }), Macro.add("switch", {
4680 skipArg0: !0,
4681 tags: ["case", "default"],
4682 handler: function() {
4683 if (0 === this.args.full.length) return this.error("no expression specified");
4684 var e = this.payload.length,
4685 t = void 0;
4686 if (1 === e) return this.error("no cases specified");
4687 try {
4688 t = Scripting.evalJavaScript(this.args.full)
4689 } catch (e) {
4690 return this.error("bad evaluation: " + ("object" === ("undefined" == typeof e ? "undefined" : _typeof(e)) ? e.message : e))
4691 }
4692 var r = this.debugView,
4693 n = 1,
4694 a = !1;
4695 for (Config.debug && r.modes({
4696 nonvoid: !1,
4697 hidden: !0
4698 }); n < e; ++n) {
4699 switch (this.payload[n].name) {
4700 case "default":
4701 if (n + 1 !== e) return this.error("<<default>> must be the final case");
4702 if (this.payload[n].args.length > 0) return this.error("<<default>> does not accept values, invalid: " + this.payload[n].args.raw);
4703 break;
4704 default:
4705 if (0 === this.payload[n].args.length) return this.error("no value(s) specified for <<" + this.payload[n].name + ">> (#" + n + ")")
4706 }
4707 if (Config.debug && this.createDebugView(this.payload[n].name, this.payload[n].source).modes({
4708 nonvoid: !1
4709 }), "default" === this.payload[n].name || this.payload[n].args.some(function(e) {
4710 return e === t
4711 })) {
4712 a = !0, new Wikifier(this.output, this.payload[n].contents);
4713 break
4714 }
4715 Config.debug && this.debugView.modes({
4716 hidden: !0,
4717 invalid: !0
4718 })
4719 }
4720 if (Config.debug) {
4721 for (++n; n < e; ++n) this.createDebugView(this.payload[n].name, this.payload[n].source).modes({
4722 nonvoid: !1,
4723 hidden: !0,
4724 invalid: !0
4725 });
4726 r.modes({
4727 nonvoid: !1,
4728 hidden: !0,
4729 invalid: !a
4730 }), this.createDebugView("/" + this.name, "<</" + this.name + ">>").modes({
4731 nonvoid: !1,
4732 hidden: !0,
4733 invalid: !a
4734 })
4735 }
4736 }
4737 }), Macro.add("for", {
4738 skipArgs: !0,
4739 tags: null,
4740 handler: function() {
4741 var e = Scripting.evalJavaScript,
4742 t = this.payload[0].contents.replace(/\n$/, ""),
4743 r = void 0,
4744 n = this.args.full.trim(),
4745 a = void 0,
4746 i = !0,
4747 o = Config.macros.maxLoopIterations;
4748 if (0 === n.length) n = !0;
4749 else if (n.indexOf(";") !== -1) {
4750 var s = n.match(/^([^;]*?)\s*;\s*([^;]*?)\s*;\s*([^;]*?)$/);
4751 if (null === s) return this.error("invalid 3-part syntax, format: init ; condition ; post");
4752 r = s[1], n = s[2], a = s[3]
4753 }
4754 if ("string" == typeof n) {
4755 if (/^\S+\s+in\s+\S+/i.test(n)) return this.error("invalid syntax, for…in is not supported");
4756 if (/^\S+\s+of\s+\S+/i.test(n)) return this.error("invalid syntax, for…of is not supported")
4757 }
4758 Config.debug && this.debugView.modes({
4759 block: !0
4760 });
4761 try {
4762 if (TempState.break = null, r) try {
4763 e(r)
4764 } catch (e) {
4765 return this.error("bad init expression: " + ("object" === ("undefined" == typeof e ? "undefined" : _typeof(e)) ? e.message : e))
4766 }
4767 for (; e(n);) {
4768 if (--o < 0) return this.error("exceeded configured maximum loop iterations (" + Config.macros.maxLoopIterations + ")");
4769 if (new Wikifier(this.output, i ? t.replace(/^\n/, "") : t), i && (i = !1), null != TempState.break)
4770 if (1 === TempState.break) TempState.break = null;
4771 else if (2 === TempState.break) {
4772 TempState.break = null;
4773 break
4774 }
4775 if (a) try {
4776 e(a)
4777 } catch (e) {
4778 return this.error("bad post expression: " + ("object" === ("undefined" == typeof e ? "undefined" : _typeof(e)) ? e.message : e))
4779 }
4780 }
4781 } catch (e) {
4782 return this.error("bad conditional expression: " + ("object" === ("undefined" == typeof e ? "undefined" : _typeof(e)) ? e.message : e))
4783 } finally {
4784 TempState.break = null
4785 }
4786 }
4787 }), Macro.add(["break", "continue"], {
4788 skipArgs: !0,
4789 handler: function() {
4790 return this.contextHas(function(e) {
4791 return "for" === e.name
4792 }) ? (TempState.break = "continue" === this.name ? 1 : 2, void(Config.debug && this.debugView.modes({
4793 hidden: !0
4794 }))) : this.error("must only be used in conjunction with its parent macro <<for>>")
4795 }
4796 }), Macro.add(["button", "link"], {
4797 isAsync: !0,
4798 tags: null,
4799 handler: function() {
4800 var e = this;
4801 if (0 === this.args.length) return this.error("no " + ("button" === this.name ? "button" : "link") + " text specified");
4802 Config.debug && this.createDebugView(this.name, this.source + this.payload[0].contents + "<</" + this.name + ">>");
4803 var t = jQuery(document.createElement("button" === this.name ? "button" : "a")),
4804 r = void 0;
4805 if ("object" === _typeof(this.args[0]))
4806 if (this.args[0].isImage) {
4807 var n = jQuery(document.createElement("img")).attr("src", this.args[0].source).appendTo(t);
4808 this.args[0].hasOwnProperty("passage") && n.attr("data-passage", this.args[0].passage), this.args[0].hasOwnProperty("title") && n.attr("title", this.args[0].title), this.args[0].hasOwnProperty("align") && n.attr("align", this.args[0].align), this.args[0].hasOwnProperty("link") && (r = this.args[0].link), r = this.args[0].link
4809 } else t.append(document.createTextNode(this.args[0].text)), r = this.args[0].link;
4810 else t.wikiWithOptions({
4811 profile: "core"
4812 }, this.args[0]), r = this.args.length > 1 ? this.args[1] : undefined;
4813 null != r ? (t.attr("data-passage", r), Story.has(r) ? (t.addClass("link-internal"), Config.addVisitedLinkClass && State.hasPlayed(r) && t.addClass("link-visited")) : t.addClass("link-broken")) : t.addClass("link-internal"), t.addClass("macro-" + this.name).ariaClick({
4814 namespace: ".macros",
4815 one: null != r
4816 }, this.createShadowWrapper("" !== this.payload[0].contents ? function() {
4817 return Wikifier.wikifyEval(e.payload[0].contents.trim())
4818 } : null, null != r ? function() {
4819 return Engine.play(r)
4820 } : null)).appendTo(this.output)
4821 }
4822 }), Macro.add("checkbox", {
4823 handler: function() {
4824 if (this.args.length < 3) {
4825 var e = [];
4826 return this.args.length < 1 && e.push("variable name"), this.args.length < 2 && e.push("unchecked value"), this.args.length < 3 && e.push("checked value"), this.error("no " + e.join(" or ") + " specified")
4827 }
4828 if ("string" != typeof this.args[0]) return this.error("variable name argument is not a string");
4829 var t = this.args[0].trim();
4830 if ("$" !== t[0] && "_" !== t[0]) return this.error('variable name "' + this.args[0] + '" is missing its sigil ($ or _)');
4831 var r = Util.slugify(t),
4832 n = this.args[1],
4833 a = this.args[2],
4834 i = document.createElement("input");
4835 jQuery(i).attr({
4836 id: this.name + "-" + r,
4837 name: this.name + "-" + r,
4838 type: "checkbox",
4839 tabindex: 0
4840 }).addClass("macro-" + this.name).on("change", function() {
4841 Wikifier.setValue(t, this.checked ? a : n)
4842 }).appendTo(this.output), this.args.length > 3 && "checked" === this.args[3] ? (i.checked = !0, Wikifier.setValue(t, a)) : Wikifier.setValue(t, n)
4843 }
4844 }), Macro.add(["linkappend", "linkprepend", "linkreplace"], {
4845 isAsync: !0,
4846 tags: null,
4847 handler: function() {
4848 var e = this;
4849 if (0 === this.args.length) return this.error("no link text specified");
4850 Config.debug && this.createDebugView(this.name, this.source + this.payload[0].contents + "<</" + this.name + ">>");
4851 var t = jQuery(document.createElement("a")),
4852 r = jQuery(document.createElement("span")),
4853 n = this.args.length > 1 && /^(?:transition|t8n)$/.test(this.args[1]);
4854 t.wikiWithOptions({
4855 profile: "core"
4856 }, this.args[0]).addClass("link-internal macro-" + this.name).ariaClick({
4857 namespace: ".macros",
4858 one: !0
4859 }, this.createShadowWrapper(function() {
4860 if ("linkreplace" === e.name ? t.remove() : t.wrap('<span class="macro-' + e.name + '"></span>').replaceWith(function() {
4861 return t.html()
4862 }), "" !== e.payload[0].contents) {
4863 var a = document.createDocumentFragment();
4864 new Wikifier(a, e.payload[0].contents), r.append(a)
4865 }
4866 n && setTimeout(function() {
4867 return r.removeClass("macro-" + e.name + "-in")
4868 }, Engine.minDomActionDelay)
4869 })).appendTo(this.output), r.addClass("macro-" + this.name + "-insert"), n && r.addClass("macro-" + this.name + "-in"), "linkprepend" === this.name ? r.insertBefore(t) : r.insertAfter(t)
4870 }
4871 }), Macro.add("radiobutton", {
4872 handler: function() {
4873 if (this.args.length < 2) {
4874 var e = [];
4875 return this.args.length < 1 && e.push("variable name"), this.args.length < 2 && e.push("checked value"), this.error("no " + e.join(" or ") + " specified")
4876 }
4877 if ("string" != typeof this.args[0]) return this.error("variable name argument is not a string");
4878 var t = this.args[0].trim();
4879 if ("$" !== t[0] && "_" !== t[0]) return this.error('variable name "' + this.args[0] + '" is missing its sigil ($ or _)');
4880 var r = Util.slugify(t),
4881 n = this.args[1],
4882 a = document.createElement("input");
4883 TempState.hasOwnProperty(this.name) || (TempState[this.name] = {}), TempState[this.name].hasOwnProperty(r) || (TempState[this.name][r] = 0), jQuery(a).attr({
4884 id: this.name + "-" + r + "-" + TempState[this.name][r]++,
4885 name: this.name + "-" + r,
4886 type: "radio",
4887 tabindex: 0
4888 }).addClass("macro-" + this.name).on("change", function() {
4889 this.checked && Wikifier.setValue(t, n)
4890 }).appendTo(this.output), this.args.length > 2 && "checked" === this.args[2] && (a.checked = !0, Wikifier.setValue(t, n))
4891 }
4892 }), Macro.add("textarea", {
4893 handler: function() {
4894 if (this.args.length < 2) {
4895 var e = [];
4896 return this.args.length < 1 && e.push("variable name"), this.args.length < 2 && e.push("default value"), this.error("no " + e.join(" or ") + " specified")
4897 }
4898 if ("string" != typeof this.args[0]) return this.error("variable name argument is not a string");
4899 var t = this.args[0].trim();
4900 if ("$" !== t[0] && "_" !== t[0]) return this.error('variable name "' + this.args[0] + '" is missing its sigil ($ or _)');
4901 Config.debug && this.debugView.modes({
4902 block: !0
4903 });
4904 var r = Util.slugify(t),
4905 n = this.args[1],
4906 a = "autofocus" === this.args[2],
4907 i = document.createElement("textarea");
4908 jQuery(i).attr({
4909 id: this.name + "-" + r,
4910 name: this.name + "-" + r,
4911 rows: 4,
4912 tabindex: 0
4913 }).addClass("macro-" + this.name).on("change", function() {
4914 Wikifier.setValue(t, this.value)
4915 }).appendTo(this.output), Wikifier.setValue(t, n), i.textContent = n, a && (i.setAttribute("autofocus", "autofocus"), postdisplay["#autofocus:" + i.id] = function(e) {
4916 delete postdisplay[e], setTimeout(function() {
4917 return i.focus()
4918 }, Engine.minDomActionDelay)
4919 })
4920 }
4921 }), Macro.add("textbox", {
4922 handler: function() {
4923 if (this.args.length < 2) {
4924 var e = [];
4925 return this.args.length < 1 && e.push("variable name"), this.args.length < 2 && e.push("default value"), this.error("no " + e.join(" or ") + " specified")
4926 }
4927 if ("string" != typeof this.args[0]) return this.error("variable name argument is not a string");
4928 var t = this.args[0].trim();
4929 if ("$" !== t[0] && "_" !== t[0]) return this.error('variable name "' + this.args[0] + '" is missing its sigil ($ or _)');
4930 Config.debug && this.debugView.modes({
4931 block: !0
4932 });
4933 var r = Util.slugify(t),
4934 n = this.args[1],
4935 a = document.createElement("input"),
4936 i = !1,
4937 o = void 0;
4938 this.args.length > 3 ? (o = this.args[2], i = "autofocus" === this.args[3]) : this.args.length > 2 && ("autofocus" === this.args[2] ? i = !0 : o = this.args[2]), jQuery(a).attr({
4939 id: this.name + "-" + r,
4940 name: this.name + "-" + r,
4941 type: "text",
4942 tabindex: 0
4943 }).addClass("macro-" + this.name).on("change", function() {
4944 Wikifier.setValue(t, this.value)
4945 }).on("keypress", function(e) {
4946 13 === e.which && (e.preventDefault(), Wikifier.setValue(t, this.value), null != o && Engine.play(o))
4947 }).appendTo(this.output), Wikifier.setValue(t, n), a.value = n, i && (a.setAttribute("autofocus", "autofocus"), postdisplay["#autofocus:" + a.id] = function(e) {
4948 delete postdisplay[e], setTimeout(function() {
4949 return a.focus()
4950 }, Engine.minDomActionDelay)
4951 })
4952 }
4953 }), Macro.add("click", "link"), Macro.add("actions", {
4954 handler: function() {
4955 for (var e = jQuery(document.createElement("ul")).addClass(this.name).appendTo(this.output), t = 0; t < this.args.length; ++t) {
4956 var r = void 0,
4957 n = void 0,
4958 a = void 0,
4959 i = void 0;
4960 "object" === _typeof(this.args[t]) ? this.args[t].isImage ? (a = jQuery(document.createElement("img")).attr("src", this.args[t].source), this.args[t].hasOwnProperty("passage") && a.attr("data-passage", this.args[t].passage), this.args[t].hasOwnProperty("title") && a.attr("title", this.args[t].title), this.args[t].hasOwnProperty("align") && a.attr("align", this.args[t].align), r = this.args[t].link, i = this.args[t].setFn) : (n = this.args[t].text, r = this.args[t].link, i = this.args[t].setFn) : n = r = this.args[t], State.variables.hasOwnProperty("#actions") && State.variables["#actions"].hasOwnProperty(r) && State.variables["#actions"][r] || jQuery(Wikifier.createInternalLink(jQuery(document.createElement("li")).appendTo(e), r, null, function(e, t) {
4961 return function() {
4962 State.variables.hasOwnProperty("#actions") || (State.variables["#actions"] = {}), State.variables["#actions"][e] = !0, "function" == typeof t && t()
4963 }
4964 }(r, i))).addClass("macro-" + this.name).append(a || document.createTextNode(n))
4965 }
4966 }
4967 }), Macro.add(["back", "return"], {
4968 handler: function() {
4969 if (this.args.length > 1) return this.error("too many arguments specified, check the documentation for details");
4970 var e = -1,
4971 t = void 0,
4972 r = void 0,
4973 n = void 0;
4974 if (1 === this.args.length && ("object" === _typeof(this.args[0]) ? this.args[0].isImage ? (n = jQuery(document.createElement("img")).attr("src", this.args[0].source), this.args[0].hasOwnProperty("passage") && n.attr("data-passage", this.args[0].passage), this.args[0].hasOwnProperty("title") && n.attr("title", this.args[0].title), this.args[0].hasOwnProperty("align") && n.attr("align", this.args[0].align), this.args[0].hasOwnProperty("link") && (t = this.args[0].link)) : 1 === this.args[0].count ? t = this.args[0].link : (r = this.args[0].text, t = this.args[0].link) : 1 === this.args.length && (r = this.args[0])), null == t) {
4975 for (var a = State.length - 2; a >= 0; --a)
4976 if (State.history[a].title !== State.passage) {
4977 e = a, t = State.history[a].title;
4978 break
4979 }
4980 if (null == t && "return" === this.name)
4981 for (var i = State.expired.length - 1; i >= 0; --i)
4982 if (State.expired[i] !== State.passage) {
4983 t = State.expired[i];
4984 break
4985 }
4986 } else {
4987 if (!Story.has(t)) return this.error('passage "' + t + '" does not exist');
4988 if ("back" === this.name) {
4989 for (var o = State.length - 2; o >= 0; --o)
4990 if (State.history[o].title === t) {
4991 e = o;
4992 break
4993 }
4994 if (e === -1) return this.error('cannot find passage "' + t + '" in the current story history')
4995 }
4996 }
4997 if (null == t) return this.error("cannot find passage");
4998 var s = void 0;
4999 s = "back" !== this.name || e !== -1 ? jQuery(document.createElement("a")).addClass("link-internal").ariaClick({
5000 one: !0
5001 }, "return" === this.name ? function() {
5002 return Engine.play(t)
5003 } : function() {
5004 return Engine.goTo(e)
5005 }) : jQuery(document.createElement("span")).addClass("link-disabled"), s.addClass("macro-" + this.name).append(n || document.createTextNode(r || L10n.get("macro" + this.name.toUpperFirst() + "Text"))).appendTo(this.output)
5006 }
5007 }), Macro.add("choice", {
5008 handler: function() {
5009 if (0 === this.args.length) return this.error("no passage specified");
5010 var e = State.passage,
5011 t = void 0,
5012 r = void 0,
5013 n = void 0,
5014 a = void 0;
5015 return 1 === this.args.length ? "object" === _typeof(this.args[0]) ? this.args[0].isImage ? (n = jQuery(document.createElement("img")).attr("src", this.args[0].source), this.args[0].hasOwnProperty("passage") && n.attr("data-passage", this.args[0].passage), this.args[0].hasOwnProperty("title") && n.attr("title", this.args[0].title), this.args[0].hasOwnProperty("align") && n.attr("align", this.args[0].align), t = this.args[0].link, a = this.args[0].setFn) : (r = this.args[0].text, t = this.args[0].link, a = this.args[0].setFn) : r = t = this.args[0] : (t = this.args[0], r = this.args[1]), State.variables.hasOwnProperty("#choice") && State.variables["#choice"].hasOwnProperty(e) && State.variables["#choice"][e] ? void jQuery(document.createElement("span")).addClass("link-disabled macro-" + this.name).attr("tabindex", -1).append(n || document.createTextNode(r)).appendTo(this.output) : void jQuery(Wikifier.createInternalLink(this.output, t, null, function() {
5016 State.variables.hasOwnProperty("#choice") || (State.variables["#choice"] = {}), State.variables["#choice"][e] = !0, "function" == typeof a && a()
5017 })).addClass("macro-" + this.name).append(n || document.createTextNode(r))
5018 }
5019 }), Macro.add(["addclass", "toggleclass"], {
5020 handler: function() {
5021 if (this.args.length < 2) {
5022 var e = [];
5023 return this.args.length < 1 && e.push("selector"), this.args.length < 2 && e.push("class names"), this.error("no " + e.join(" or ") + " specified")
5024 }
5025 var t = jQuery(this.args[0]);
5026 if (0 === t.length) return this.error('no elements matched the selector "' + this.args[0] + '"');
5027 switch (this.name) {
5028 case "addclass":
5029 t.addClass(this.args[1].trim());
5030 break;
5031 case "toggleclass":
5032 t.toggleClass(this.args[1].trim())
5033 }
5034 }
5035 }), Macro.add("removeclass", {
5036 handler: function() {
5037 if (0 === this.args.length) return this.error("no selector specified");
5038 var e = jQuery(this.args[0]);
5039 return 0 === e.length ? this.error('no elements matched the selector "' + this.args[0] + '"') : void(this.args.length > 1 ? e.removeClass(this.args[1].trim()) : e.removeClass())
5040 }
5041 }), Macro.add("copy", {
5042 handler: function() {
5043 if (0 === this.args.length) return this.error("no selector specified");
5044 var e = jQuery(this.args[0]);
5045 return 0 === e.length ? this.error('no elements matched the selector "' + this.args[0] + '"') : void jQuery(this.output).append(e.html())
5046 }
5047 }), Macro.add(["append", "prepend", "replace"], {
5048 tags: null,
5049 handler: function() {
5050 if (0 === this.args.length) return this.error("no selector specified");
5051 var e = jQuery(this.args[0]);
5052 if (0 === e.length) return this.error('no elements matched the selector "' + this.args[0] + '"');
5053 if ("" !== this.payload[0].contents) {
5054 var t = document.createDocumentFragment();
5055 switch (new Wikifier(t, this.payload[0].contents), this.name) {
5056 case "replace":
5057 e.empty();
5058 case "append":
5059 e.append(t);
5060 break;
5061 case "prepend":
5062 e.prepend(t)
5063 }
5064 } else "replace" === this.name && e.empty()
5065 }
5066 }), Macro.add("remove", {
5067 handler: function() {
5068 if (0 === this.args.length) return this.error("no selector specified");
5069 var e = jQuery(this.args[0]);
5070 return 0 === e.length ? this.error('no elements matched the selector "' + this.args[0] + '"') : void e.remove()
5071 }
5072 }), Has.audio ? (Macro.add("audio", {
5073 handler: function() {
5074 if (this.args.length < 2) {
5075 var e = [];
5076 return this.args.length < 1 && e.push("track ID"), this.args.length < 2 && e.push("actions"), this.error("no " + e.join(" or ") + " specified")
5077 }
5078 var t = Macro.get("cacheaudio").tracks,
5079 r = [":all", ":looped", ":muted", ":paused", ":playing"],
5080 n = String(this.args[0]).trim();
5081 if (!r.includes(n) && !t.hasOwnProperty(n)) return this.error('track "' + n + '" does not exist');
5082 for (var a = this.args.slice(1), i = void 0, o = void 0, s = void 0, u = void 0, l = void 0, c = void 0, d = 5, f = void 0, p = void 0; a.length > 0;) {
5083 var h = a.shift();
5084 switch (h) {
5085 case "play":
5086 case "pause":
5087 case "stop":
5088 i = h;
5089 break;
5090 case "fadein":
5091 i = "fade", c = 1;
5092 break;
5093 case "fadeout":
5094 i = "fade", c = 0;
5095 break;
5096 case "fadeto":
5097 if (0 === a.length) return this.error("fadeto missing required level value");
5098 if (i = "fade", p = a.shift(), c = Number.parseFloat(p), Number.isNaN(c) || !Number.isFinite(c)) return this.error("cannot parse fadeto: " + p);
5099 break;
5100 case "fadeoverto":
5101 if (a.length < 2) {
5102 var g = [];
5103 return a.length < 1 && g.push("seconds"), a.length < 2 && g.push("level"), this.error("fadeoverto missing required " + g.join(" and ") + " value" + (g.length > 1 ? "s" : ""))
5104 }
5105 if (i = "fade", p = a.shift(), d = Number.parseFloat(p), Number.isNaN(d) || !Number.isFinite(d)) return this.error("cannot parse fadeoverto: " + p);
5106 if (p = a.shift(), c = Number.parseFloat(p), Number.isNaN(c) || !Number.isFinite(c)) return this.error("cannot parse fadeoverto: " + p);
5107 break;
5108 case "volume":
5109 if (0 === a.length) return this.error("volume missing required level value");
5110 if (p = a.shift(), o = Number.parseFloat(p), Number.isNaN(o) || !Number.isFinite(o)) return this.error("cannot parse volume: " + p);
5111 break;
5112 case "mute":
5113 case "unmute":
5114 s = "mute" === h;
5115 break;
5116 case "time":
5117 if (0 === a.length) return this.error("time missing required seconds value");
5118 if (p = a.shift(), u = Number.parseFloat(p), Number.isNaN(u) || !Number.isFinite(u)) return this.error("cannot parse time: " + p);
5119 break;
5120 case "loop":
5121 case "unloop":
5122 l = "loop" === h;
5123 break;
5124 case "goto":
5125 if (0 === a.length) return this.error("goto missing required passage title");
5126 if (p = a.shift(), f = "object" === ("undefined" == typeof p ? "undefined" : _typeof(p)) ? p.link : p, !Story.has(f)) return this.error('passage "' + f + '" does not exist');
5127 break;
5128 default:
5129 return this.error("unknown action: " + h)
5130 }
5131 }
5132 var m = void 0;
5133 switch (n) {
5134 case ":all":
5135 m = Object.keys(t);
5136 break;
5137 case ":looped":
5138 m = Object.keys(t).filter(function(e) {
5139 return t[e].isLooped()
5140 });
5141 break;
5142 case ":muted":
5143 m = Object.keys(t).filter(function(e) {
5144 return t[e].isMuted()
5145 });
5146 break;
5147 case ":paused":
5148 m = Object.keys(t).filter(function(e) {
5149 return t[e].isPaused()
5150 });
5151 break;
5152 case ":playing":
5153 m = Object.keys(t).filter(function(e) {
5154 return t[e].isPlaying()
5155 });
5156 break;
5157 default:
5158 m = [n]
5159 }
5160 try {
5161 m.forEach(function(e) {
5162 var r = t[e];
5163 switch (null != o && (r.volume = o), null != u && (r.time = u), null != s && (r.mute = s), null != l && (r.loop = l), null != f && r.one("end", function() {
5164 return Engine.play(f)
5165 }), i) {
5166 case "play":
5167 r.play();
5168 break;
5169 case "pause":
5170 r.pause();
5171 break;
5172 case "stop":
5173 r.stop();
5174 break;
5175 case "fade":
5176 r.fadeWithDuration(d, c)
5177 }
5178 }), Config.debug && this.createDebugView()
5179 } catch (e) {
5180 return this.error("error executing audio action: " + e.message)
5181 }
5182 }
5183 }), Macro.add("cacheaudio", {
5184 tracks: {},
5185 handler: function() {
5186 if (this.args.length < 2) {
5187 var e = [];
5188 return this.args.length < 1 && e.push("track ID"), this.args.length < 2 && e.push("sources"), this.error("no " + e.join(" or ") + " specified")
5189 }
5190 var t = String(this.args[0]).trim(),
5191 r = /^:|\s/;
5192 if (r.test(t)) return this.error('invalid track ID "' + t + '": track IDs may not start with a colon or contain whitespace');
5193 var n = /^format:\s*([\w-]+)\s*;\s*(\S.*)$/i,
5194 a = void 0;
5195 try {
5196 a = SimpleAudio.create(this.args.slice(1).map(function(e) {
5197 var t = n.exec(e);
5198 return null === t ? e : {
5199 format: t[1],
5200 src: t[2]
5201 }
5202 }))
5203 } catch (e) {
5204 return this.error('error during track initialization for "' + t + '": ' + e.message)
5205 }
5206 if (Config.debug && !a.hasSource()) return this.error('no supported audio sources found for "' + t + '"');
5207 var i = this.self.tracks;
5208 i.hasOwnProperty(t) && i[t].destroy(), i[t] = a, Config.debug && this.createDebugView()
5209 }
5210 }), Macro.add("createplaylist", {
5211 tags: ["track"],
5212 lists: {},
5213 handler: function() {
5214 if (0 === this.args.length) return this.error("no list ID specified");
5215 var e = Macro.get("playlist");
5216 if (null !== e.from && "createplaylist" !== e.from) return this.error("a playlist has already been defined with <<setplaylist>>");
5217 var t = Macro.get("cacheaudio").tracks,
5218 r = String(this.args[0]).trim(),
5219 n = /^:|\s/;
5220 if (n.test(r)) return this.error('invalid list ID "' + r + '": list IDs may not start with a colon or contain whitespace');
5221 if (1 === this.payload.length) return this.error("no tracks defined via <<track>>");
5222 Config.debug && this.debugView.modes({
5223 nonvoid: !1,
5224 hidden: !0
5225 });
5226 for (var a = SimpleAudio.createList(), i = 1, o = this.payload.length; i < o; ++i) {
5227 if (this.payload[i].args.length < 2) {
5228 var s = [];
5229 return this.payload[i].args.length < 1 && s.push("track ID"), this.payload[i].args.length < 2 && s.push("actions"), this.error("no " + s.join(" or ") + " specified")
5230 }
5231 var u = String(this.payload[i].args[0]).trim();
5232 if (!t.hasOwnProperty(u)) return this.error('track "' + u + '" does not exist');
5233 for (var l = this.payload[i].args.slice(1), c = !1, d = void 0; l.length > 0;) {
5234 var f = l.shift(),
5235 p = void 0;
5236 switch (f) {
5237 case "copy":
5238 c = !0;
5239 break;
5240 case "rate":
5241 l.length > 0 && l.shift();
5242 break;
5243 case "volume":
5244 if (0 === l.length) return this.error("volume missing required level value");
5245 if (p = l.shift(), d = Number.parseFloat(p), Number.isNaN(d) || !Number.isFinite(d)) return this.error("cannot parse volume: " + p);
5246 break;
5247 default:
5248 return this.error("unknown action: " + f)
5249 }
5250 }
5251 var h = t[u];
5252 a.add({
5253 copy: c,
5254 track: h,
5255 volume: null != d ? d : h.volume
5256 }), Config.debug && this.createDebugView(this.payload[i].name, this.payload[i].source).modes({
5257 nonvoid: !1,
5258 hidden: !0
5259 })
5260 }
5261 var g = this.self.lists;
5262 g.hasOwnProperty(r) && g[r].destroy(), g[r] = a, null === e.from && (e.from = "createplaylist"), this.createDebugView("/" + this.name, "<</" + this.name + ">>").modes({
5263 nonvoid: !1,
5264 hidden: !0
5265 })
5266 }
5267 }), Macro.add("masteraudio", {
5268 handler: function() {
5269 if (0 === this.args.length) return this.error("no actions specified");
5270 for (var e = this.args.slice(0), t = !1, r = void 0, n = void 0; e.length > 0;) {
5271 var a = e.shift(),
5272 i = void 0;
5273 switch (a) {
5274 case "stop":
5275 t = !0;
5276 break;
5277 case "mute":
5278 case "unmute":
5279 r = "mute" === a;
5280 break;
5281 case "volume":
5282 if (0 === e.length) return this.error("volume missing required level value");
5283 if (i = e.shift(), n = Number.parseFloat(i), Number.isNaN(n) || !Number.isFinite(n)) return this.error("cannot parse volume: " + i);
5284 break;
5285 default:
5286 return this.error("unknown action: " + a)
5287 }
5288 }
5289 try {
5290 null != r && (SimpleAudio.mute = r), null != n && (SimpleAudio.volume = n), t && SimpleAudio.stop(), Config.debug && this.createDebugView()
5291 } catch (e) {
5292 return this.error("error executing master audio action: " + e.message)
5293 }
5294 }
5295 }), Macro.add("playlist", {
5296 from: null,
5297 handler: function() {
5298 var e = this.self.from;
5299 if (null === e) return this.error("no playlists have been created");
5300 var t = void 0,
5301 r = void 0;
5302 if ("createplaylist" === e) {
5303 if (this.args.length < 2) {
5304 var n = [];
5305 return this.args.length < 1 && n.push("list ID"), this.args.length < 2 && n.push("actions"), this.error("no " + n.join(" or ") + " specified")
5306 }
5307 var a = Macro.get("createplaylist").lists,
5308 i = String(this.args[0]).trim();
5309 if (!a.hasOwnProperty(i)) return this.error('playlist "' + i + '" does not exist');
5310 t = a[i], r = this.args.slice(1)
5311 } else {
5312 if (0 === this.args.length) return this.error("no actions specified");
5313 t = Macro.get("setplaylist").list, r = this.args.slice(0)
5314 }
5315 for (var o = void 0, s = void 0, u = void 0, l = void 0, c = void 0, d = void 0, f = 5, p = void 0; r.length > 0;) {
5316 var h = r.shift();
5317 switch (h) {
5318 case "play":
5319 case "pause":
5320 case "stop":
5321 case "skip":
5322 o = h;
5323 break;
5324 case "fadein":
5325 o = "fade", d = 1;
5326 break;
5327 case "fadeout":
5328 o = "fade", d = 0;
5329 break;
5330 case "fadeto":
5331 if (0 === r.length) return this.error("fadeto missing required level value");
5332 if (o = "fade", p = r.shift(), d = Number.parseFloat(p), Number.isNaN(d) || !Number.isFinite(d)) return this.error("cannot parse fadeto: " + p);
5333 break;
5334 case "fadeoverto":
5335 if (r.length < 2) {
5336 var g = [];
5337 return r.length < 1 && g.push("seconds"), r.length < 2 && g.push("level"), this.error("fadeoverto missing required " + g.join(" and ") + " value" + (g.length > 1 ? "s" : ""))
5338 }
5339 if (o = "fade", p = r.shift(), f = Number.parseFloat(p), Number.isNaN(f) || !Number.isFinite(f)) return this.error("cannot parse fadeoverto: " + p);
5340 if (p = r.shift(), d = Number.parseFloat(p), Number.isNaN(d) || !Number.isFinite(d)) return this.error("cannot parse fadeoverto: " + p);
5341 break;
5342 case "volume":
5343 if (0 === r.length) return this.error("volume missing required level value");
5344 if (p = r.shift(), s = Number.parseFloat(p), Number.isNaN(s) || !Number.isFinite(s)) return this.error("cannot parse volume: " + p);
5345 break;
5346 case "mute":
5347 case "unmute":
5348 u = "mute" === h;
5349 break;
5350 case "loop":
5351 case "unloop":
5352 l = "loop" === h;
5353 break;
5354 case "shuffle":
5355 case "unshuffle":
5356 c = "shuffle" === h;
5357 break;
5358 default:
5359 return this.error("unknown action: " + h)
5360 }
5361 }
5362 try {
5363 switch (null != s && (t.volume = s), null != u && (t.mute = u), null != l && (t.loop = l), null != c && (t.shuffle = c), o) {
5364 case "play":
5365 t.play();
5366 break;
5367 case "pause":
5368 t.pause();
5369 break;
5370 case "stop":
5371 t.stop();
5372 break;
5373 case "skip":
5374 t.skip();
5375 break;
5376 case "fade":
5377 t.fadeWithDuration(f, d)
5378 }
5379 Config.debug && this.createDebugView()
5380 } catch (e) {
5381 return this.error("error playing audio: " + e.message)
5382 }
5383 }
5384 }), Macro.add("removeplaylist", {
5385 handler: function() {
5386 if (0 === this.args.length) return this.error("no list ID specified");
5387 var e = Macro.get("createplaylist").lists,
5388 t = String(this.args[0]).trim();
5389 return e.hasOwnProperty(t) ? (e[t].destroy(), delete e[t], void(Config.debug && this.createDebugView())) : this.error('playlist "' + t + '" does not exist')
5390 }
5391 }), Macro.add("waitforaudio", {
5392 skipArgs: !0,
5393 queue: [],
5394 handler: function() {
5395 function e() {
5396 if (0 === t.length) return LoadScreen.unlock(r);
5397 var n = t.shift();
5398 return n.hasData() ? e() : void n.one("canplay.waitforaudio error.waitforaudio", function() {
5399 jQuery(this).off(".waitforaudio"), e()
5400 }).load()
5401 }
5402 var t = this.self.queue,
5403 r = void 0;
5404 t.length > 0 || (this.self.fillQueue(t), t.length > 0 && (r = LoadScreen.lock(), e()))
5405 },
5406 fillQueue: function(e) {
5407 var t = Macro.get("cacheaudio").tracks;
5408 Object.keys(t).forEach(function(r) {
5409 return e.push(t[r])
5410 });
5411 var r = Macro.get("createplaylist").lists;
5412 if (Object.keys(r).map(function(e) {
5413 return r[e].tracks
5414 }).flatten().filter(function(e) {
5415 return e.copy
5416 }).forEach(function(t) {
5417 return e.push(t.track)
5418 }), Macro.has("setplaylist")) {
5419 var n = Macro.get("setplaylist").list;
5420 null !== n && n.tracks.forEach(function(t) {
5421 return e.push(t.track)
5422 })
5423 }
5424 }
5425 }), Macro.add("setplaylist", {
5426 list: null,
5427 handler: function() {
5428 if (0 === this.args.length) return this.error("no track ID(s) specified");
5429 var e = Macro.get("playlist");
5430 if (null !== e.from && "setplaylist" !== e.from) return this.error("playlists have already been defined with <<createplaylist>>");
5431 var t = this.self,
5432 r = Macro.get("cacheaudio").tracks;
5433 null !== t.list && t.list.destroy(), t.list = SimpleAudio.createList();
5434 for (var n = 0; n < this.args.length; ++n) {
5435 var a = this.args[n];
5436 if (!r.hasOwnProperty(a)) return this.error('track "' + a + '" does not exist');
5437 t.list.add(r[a])
5438 }
5439 null === e.from && (e.from = "setplaylist"), Config.debug && this.createDebugView()
5440 }
5441 }), Macro.add("stopallaudio", {
5442 skipArgs: !0,
5443 handler: function() {
5444 var e = Macro.get("cacheaudio").tracks;
5445 Object.keys(e).forEach(function(t) {
5446 return e[t].stop()
5447 }), Config.debug && this.createDebugView()
5448 }
5449 })) : Macro.add(["audio", "cacheaudio", "createplaylist", "masteraudio", "playlist", "removeplaylist", "waitforaudio", "setplaylist", "stopallaudio"], {
5450 skipArgs: !0,
5451 handler: function() {}
5452 }), Macro.add("goto", {
5453 handler: function() {
5454 if (0 === this.args.length) return this.error("no passage specified");
5455 var e = void 0;
5456 return e = "object" === _typeof(this.args[0]) ? this.args[0].link : this.args[0], Story.has(e) ? void setTimeout(function() {
5457 return Engine.play(e)
5458 }, Engine.minDomActionDelay) : this.error('passage "' + e + '" does not exist')
5459 }
5460 }), Macro.add("timed", {
5461 isAsync: !0,
5462 tags: ["next"],
5463 timers: new Set,
5464 handler: function() {
5465 if (0 === this.args.length) return this.error("no time value specified in <<timed>>");
5466 var e = [];
5467 try {
5468 e.push({
5469 name: this.name,
5470 source: this.source,
5471 delay: Math.max(Engine.minDomActionDelay, Util.fromCssTime(this.args[0])),
5472 content: this.payload[0].contents
5473 })
5474 } catch (e) {
5475 return this.error(e.message + " in <<timed>>")
5476 }
5477 if (this.payload.length > 1) {
5478 var t = void 0;
5479 try {
5480 var r = void 0;
5481 for (t = 1, r = this.payload.length; t < r; ++t) e.push({
5482 name: this.payload[t].name,
5483 source: this.payload[t].source,
5484 delay: 0 === this.payload[t].args.length ? e[e.length - 1].delay : Math.max(Engine.minDomActionDelay, Util.fromCssTime(this.payload[t].args[0])),
5485 content: this.payload[t].contents
5486 })
5487 } catch (e) {
5488 return this.error(e.message + " in <<next>> (#" + t + ")")
5489 }
5490 }
5491 Config.debug && this.debugView.modes({
5492 block: !0
5493 });
5494 var n = this.args.length > 1 && /^(?:transition|t8n)$/.test(this.args[1]),
5495 a = jQuery(document.createElement("span")).addClass("macro-" + this.name).appendTo(this.output);
5496 this.self.registerTimeout(this.createShadowWrapper(function(e) {
5497 var t = document.createDocumentFragment();
5498 new Wikifier(t, e.content);
5499 var r = a;
5500 Config.debug && "next" === e.name && (r = jQuery(new DebugView(r[0], "macro", e.name, e.source).output)), n && (r = jQuery(document.createElement("span")).addClass("macro-timed-insert macro-timed-in").appendTo(r)), r.append(t), n && setTimeout(function() {
5501 return r.removeClass("macro-timed-in")
5502 }, Engine.minDomActionDelay)
5503 }), e)
5504 },
5505 registerTimeout: function(e, t) {
5506 if ("function" != typeof e) throw new TypeError("callback parameter must be a function");
5507 var r = State.turns,
5508 n = this.timers,
5509 a = null,
5510 i = t.shift(),
5511 o = function o() {
5512 if (n.delete(a), r === State.turns) {
5513 var s = i;
5514 null != (i = t.shift()) && (a = setTimeout(o, i.delay), n.add(a)), e.call(this, s)
5515 }
5516 };
5517 a = setTimeout(o, i.delay), n.add(a), prehistory.hasOwnProperty("#timed-timers-cleanup") || (prehistory["#timed-timers-cleanup"] = function(e) {
5518 delete prehistory[e], n.forEach(function(e) {
5519 return clearTimeout(e)
5520 }), n.clear()
5521 })
5522 }
5523 }), Macro.add("repeat", {
5524 isAsync: !0,
5525 tags: null,
5526 timers: new Set,
5527 handler: function() {
5528 var e = this;
5529 if (0 === this.args.length) return this.error("no time value specified");
5530 var t = void 0;
5531 try {
5532 t = Math.max(Engine.minDomActionDelay, Util.fromCssTime(this.args[0]))
5533 } catch (e) {
5534 return this.error(e.message)
5535 }
5536 Config.debug && this.debugView.modes({
5537 block: !0
5538 });
5539 var r = this.args.length > 1 && /^(?:transition|t8n)$/.test(this.args[1]),
5540 n = jQuery(document.createElement("span")).addClass("macro-" + this.name).appendTo(this.output);
5541 this.self.registerInterval(this.createShadowWrapper(function() {
5542 var t = document.createDocumentFragment();
5543 new Wikifier(t, e.payload[0].contents);
5544 var a = n;
5545 r && (a = jQuery(document.createElement("span")).addClass("macro-repeat-insert macro-repeat-in").appendTo(a)), a.append(t), r && setTimeout(function() {
5546 return a.removeClass("macro-repeat-in")
5547 }, Engine.minDomActionDelay)
5548 }), t)
5549 },
5550 registerInterval: function(e, t) {
5551 var r = this;
5552 if ("function" != typeof e) throw new TypeError("callback parameter must be a function");
5553 var n = State.turns,
5554 a = this.timers,
5555 i = null;
5556 i = setInterval(function() {
5557 if (n !== State.turns) return clearInterval(i), void a.delete(i);
5558 var t = void 0;
5559 try {
5560 TempState.break = null, TempState.hasOwnProperty("repeatTimerId") && (t = TempState.repeatTimerId), TempState.repeatTimerId = i, e.call(r)
5561 } finally {
5562 "undefined" != typeof t ? TempState.repeatTimerId = t : delete TempState.repeatTimerId, TempState.break = null
5563 }
5564 }, t), a.add(i), prehistory.hasOwnProperty("#repeat-timers-cleanup") || (prehistory["#repeat-timers-cleanup"] = function(e) {
5565 delete prehistory[e], a.forEach(function(e) {
5566 return clearInterval(e)
5567 }), a.clear()
5568 })
5569 }
5570 }), Macro.add("stop", {
5571 skipArgs: !0,
5572 handler: function() {
5573 if (!TempState.hasOwnProperty("repeatTimerId")) return this.error("must only be used in conjunction with its parent macro <<repeat>>");
5574 var e = Macro.get("repeat").timers,
5575 t = TempState.repeatTimerId;
5576 clearInterval(t), e.delete(t), TempState.break = 2, Config.debug && this.debugView.modes({
5577 hidden: !0
5578 })
5579 }
5580 }), Macro.add("widget", {
5581 tags: null,
5582 handler: function() {
5583 if (0 === this.args.length) return this.error("no widget name specified");
5584 var e = this.args[0];
5585 if (Macro.has(e)) {
5586 if (!Macro.get(e).isWidget) return this.error('cannot clobber existing macro "' + e + '"');
5587 Macro.delete(e)
5588 }
5589 try {
5590 Macro.add(e, {
5591 isWidget: !0,
5592 handler: function(e) {
5593 return function() {
5594 var t = this,
5595 r = void 0;
5596 try {
5597 var n = function() {
5598 State.variables.hasOwnProperty("args") && (r = State.variables.args), State.variables.args = [].concat(_toConsumableArray(t.args)), State.variables.args.raw = t.args.raw, State.variables.args.full = t.args.full, t.addShadow("$args");
5599 var n = document.createDocumentFragment(),
5600 a = [];
5601 return new Wikifier(n, e), Array.from(n.querySelectorAll(".error")).forEach(function(e) {
5602 a.push(e.textContent)
5603 }), 0 !== a.length ? {
5604 v: t.error("error" + (a.length > 1 ? "s" : "") + " within widget contents (" + a.join("; ") + ")")
5605 } : void t.output.appendChild(n)
5606 }();
5607 if ("object" === ("undefined" == typeof n ? "undefined" : _typeof(n))) return n.v
5608 } catch (e) {
5609 return this.error("cannot execute widget: " + e.message)
5610 } finally {
5611 "undefined" != typeof r ? State.variables.args = r : delete State.variables.args
5612 }
5613 }
5614 }(this.payload[0].contents)
5615 }), Config.debug && this.createDebugView(this.name, this.source + this.payload[0].contents + "<</" + this.name + ">>")
5616 } catch (t) {
5617 return this.error('cannot create widget macro "' + e + '": ' + t.message)
5618 }
5619 }
5620 })
5621 }();
5622 var Dialog = function() {
5623 function e() {
5624 m = function() {
5625 var e = void 0;
5626 try {
5627 var t = document.createElement("p"),
5628 r = document.createElement("div");
5629 t.style.width = "100%", t.style.height = "200px", r.style.position = "absolute", r.style.left = "0px", r.style.top = "0px", r.style.width = "100px", r.style.height = "100px", r.style.visibility = "hidden", r.style.overflow = "hidden", r.appendChild(t), document.body.appendChild(r);
5630 var n = t.offsetWidth;
5631 r.style.overflow = "auto";
5632 var a = t.offsetWidth;
5633 n === a && (a = r.clientWidth), document.body.removeChild(r), e = n - a
5634 } catch (e) {}
5635 return e || 17
5636 }();
5637 var e = jQuery(document.createDocumentFragment()).append('<div id="ui-overlay" class="ui-close"></div><div id="ui-dialog" tabindex="0" role="dialog" aria-labelledby="ui-dialog-title"><div id="ui-dialog-titlebar"><h1 id="ui-dialog-title"></h1>' + ('<button id="ui-dialog-close" class="ui-close" tabindex="0" aria-label="' + L10n.get("close") + '">î „</button>') + '</div><div id="ui-dialog-body"></div></div>');
5638 d = jQuery(e.find("#ui-overlay").get(0)), f = jQuery(e.find("#ui-dialog").get(0)), p = jQuery(e.find("#ui-dialog-title").get(0)), h = jQuery(e.find("#ui-dialog-body").get(0)), e.insertBefore("#store-area")
5639 }
5640
5641 function t(e) {
5642 return f.hasClass("open") && (!e || e.splitOrEmpty(/\s+/).every(function(e) {
5643 return h.hasClass(e)
5644 }))
5645 }
5646
5647 function r(e, t) {
5648 return h.empty().removeClass(), null != t && h.addClass(t), p.empty().append((null != e ? String(e) : "") || "Â "), h.get(0)
5649 }
5650
5651 function n() {
5652 return h.get(0)
5653 }
5654
5655 function a() {
5656 var e;
5657 return (e = h).append.apply(e, arguments), Dialog
5658 }
5659
5660 function i() {
5661 var e;
5662 return (e = h).wiki.apply(e, arguments), Dialog
5663 }
5664
5665 function o(e, t, r, n, a) {
5666 return jQuery(e).ariaClick(function(e) {
5667 e.preventDefault(), "function" == typeof r && r(e), s(t, a), "function" == typeof n && n(e)
5668 })
5669 }
5670
5671 function s(e, r) {
5672 var n = jQuery.extend({
5673 top: 50
5674 }, e),
5675 a = n.top;
5676 t() || (g = safeActiveElement()), jQuery(document.documentElement).attr("data-dialog", "open"), d.addClass("open"), null !== h[0].querySelector("img") && h.imagesLoaded().always(function() {
5677 return l({
5678 data: {
5679 top: a
5680 }
5681 })
5682 }), jQuery("body>:not(script,#store-area,#ui-bar,#ui-overlay,#ui-dialog)").attr("tabindex", -3).attr("aria-hidden", !0), jQuery("#ui-bar,#story").find("[tabindex]:not([tabindex^=-])").attr("tabindex", -2).attr("aria-hidden", !0);
5683 var i = c(a);
5684 return f.css(i).addClass("open").focus(), jQuery(window).on("resize.ui-resize", null, {
5685 top: a
5686 }, jQuery.throttle(40, l)), jQuery(document).on("click.ui-close", ".ui-close", {
5687 closeFn: r
5688 }, u).on("keypress.ui-close", ".ui-close", function(e) {
5689 13 !== e.which && 32 !== e.which || jQuery(this).trigger("click")
5690 }), setTimeout(function() {
5691 return jQuery.event.trigger(":dialogopen")
5692 }, Engine.minDomActionDelay), Dialog
5693 }
5694
5695 function u(e) {
5696 return jQuery(document).off(".ui-close"), jQuery(window).off("resize.ui-resize"), f.removeClass("open").css({
5697 left: "",
5698 right: "",
5699 top: "",
5700 bottom: ""
5701 }), jQuery("#ui-bar,#story").find("[tabindex=-2]").removeAttr("aria-hidden").attr("tabindex", 0), jQuery("body>[tabindex=-3]").removeAttr("aria-hidden").removeAttr("tabindex"), p.empty(), h.empty().removeClass(), d.removeClass("open"), jQuery(document.documentElement).removeAttr("data-dialog"), null !== g && (jQuery(g).focus(), g = null), e && e.data && "function" == typeof e.data.closeFn && e.data.closeFn(e), setTimeout(function() {
5702 return jQuery.event.trigger(":dialogclose")
5703 }, Engine.minDomActionDelay), Dialog
5704 }
5705
5706 function l(e) {
5707 var t = e && e.data && "undefined" != typeof e.data.top ? e.data.top : 50;
5708 "block" === f.css("display") && (f.css({
5709 display: "none"
5710 }), f.css(jQuery.extend({
5711 display: ""
5712 }, c(t))))
5713 }
5714
5715 function c(e) {
5716 var t = null != e ? e : 50,
5717 r = jQuery(window),
5718 n = {
5719 left: "",
5720 right: "",
5721 top: "",
5722 bottom: ""
5723 };
5724 f.css(n);
5725 var a = r.width() - f.outerWidth(!0) - 1,
5726 i = r.height() - f.outerHeight(!0) - 1;
5727 return a <= 32 + m && (i -= m), i <= 32 + m && (a -= m), a <= 32 ? n.left = n.right = 16 : n.left = n.right = ~~(a / 2), i <= 32 ? n.top = n.bottom = 16 : i / 2 > t ? n.top = t : n.top = n.bottom = ~~(i / 2), Object.keys(n).forEach(function(e) {
5728 "" !== n[e] && (n[e] += "px")
5729 }), n
5730 }
5731 var d = null,
5732 f = null,
5733 p = null,
5734 h = null,
5735 g = null,
5736 m = 0;
5737 return Object.freeze(Object.defineProperties({}, {
5738 init: {
5739 value: e
5740 },
5741 isOpen: {
5742 value: t
5743 },
5744 setup: {
5745 value: r
5746 },
5747 body: {
5748 value: n
5749 },
5750 append: {
5751 value: a
5752 },
5753 wiki: {
5754 value: i
5755 },
5756 addClickHandler: {
5757 value: o
5758 },
5759 open: {
5760 value: s
5761 },
5762 close: {
5763 value: u
5764 },
5765 resize: {
5766 value: function() {
5767 return l()
5768 }
5769 }
5770 }))
5771 }(),
5772 Engine = function() {
5773 function e() {
5774 jQuery("#init-no-js,#init-lacking").remove(),
5775 function() {
5776 var e = jQuery(document.createDocumentFragment()),
5777 t = Story.has("StoryInterface") && Story.get("StoryInterface").text.trim();
5778 if (t) {
5779 if (UIBar.destroy(), jQuery(document.head).find("#style-core-display").remove(), e.append(t), 0 === e.find("#passages").length) throw new Error('no element with ID "passages" found within "StoryInterface" special passage')
5780 } else e.append('<div id="story" role="main"><div id="passages"></div></div>');
5781 e.insertBefore("#store-area")
5782 }(), S = new StyleWrapper(function() {
5783 return jQuery(document.createElement("style")).attr({
5784 id: "style-aria-outlines",
5785 type: "text/css"
5786 }).appendTo(document.head).get(0)
5787 }()), jQuery(document).on("mousedown.aria-outlines keydown.aria-outlines", function(e) {
5788 return "keydown" === e.type ? m() : g()
5789 })
5790 }
5791
5792 function t() {
5793 if (Story.has("StoryInit")) try {
5794 var e = Wikifier.wikifyEval(Story.get("StoryInit").text);
5795 if (Config.debug) {
5796 var t = new DebugView(document.createDocumentFragment(), "special", "StoryInit", "StoryInit");
5797 t.modes({
5798 hidden: !0
5799 }), t.append(e), k = t.output
5800 }
5801 } catch (e) {
5802 Alert.error("StoryInit", e.message)
5803 }
5804 if (Config.history.maxStates = Math.max(0, Config.history.maxStates), Number.isSafeInteger(Config.history.maxStates) || (Config.history.maxStates = 100), 1 === Config.history.maxStates && (Config.history.controls = !1), Config.debug && DebugView.init(), null == Config.passages.start) throw new Error("starting passage not selected");
5805 if (!Story.has(Config.passages.start)) throw new Error('starting passage ("' + Config.passages.start + '") not found');
5806 if (jQuery(document.documentElement).focus(), State.restore()) f();
5807 else {
5808 var r = !0;
5809 switch (_typeof(Config.saves.autoload)) {
5810 case "boolean":
5811 Config.saves.autoload && Save.autosave.ok() && Save.autosave.has() && (r = !Save.autosave.load());
5812 break;
5813 case "string":
5814 "prompt" === Config.saves.autoload && Save.autosave.ok() && Save.autosave.has() && (r = !1, UI.buildDialogAutoload(), UI.open());
5815 break;
5816 case "function":
5817 Save.autosave.ok() && Save.autosave.has() && Config.saves.autoload() && (r = !Save.autosave.load())
5818 }
5819 r && p(Config.passages.start)
5820 }
5821 }
5822
5823 function r() {
5824 LoadScreen.show(), window.scroll(0, 0), State.reset(), window.location.reload()
5825 }
5826
5827 function n() {
5828 return b
5829 }
5830
5831 function a() {
5832 return b === v.Idle
5833 }
5834
5835 function i() {
5836 return b !== v.Idle
5837 }
5838
5839 function o() {
5840 return b === v.Rendering
5841 }
5842
5843 function s() {
5844 return w
5845 }
5846
5847 function u(e) {
5848 var t = State.goTo(e);
5849 return t && f(), t
5850 }
5851
5852 function l(e) {
5853 var t = State.go(e);
5854 return t && f(), t
5855 }
5856
5857 function c() {
5858 return l(-1)
5859 }
5860
5861 function d() {
5862 return l(1)
5863 }
5864
5865 function f() {
5866 return p(State.passage, !0)
5867 }
5868
5869 function p(e, t) {
5870 var r = e;
5871 b = v.Playing, TempState = {}, State.clearTemporary();
5872 var n = void 0,
5873 a = void 0;
5874 if ("function" == typeof Config.navigation.override) try {
5875 var i = Config.navigation.override(r);
5876 i && (r = i)
5877 } catch (e) {}
5878 var o = Story.get(r);
5879 if (Object.keys(prehistory).forEach(function(e) {
5880 "function" == typeof prehistory[e] && prehistory[e].call(this, e)
5881 }, o), t || State.create(o.title), document.body.className && (document.body.className = ""), Object.keys(predisplay).forEach(function(e) {
5882 "function" == typeof predisplay[e] && predisplay[e].call(this, e)
5883 }, o), Story.has("PassageReady")) try {
5884 n = Wikifier.wikifyEval(Story.get("PassageReady").text)
5885 } catch (e) {
5886 Alert.error("PassageReady", e.message)
5887 }
5888 b = v.Rendering;
5889 var s = jQuery(o.render()),
5890 u = document.getElementById("passages");
5891 if (u.hasChildNodes() && ("number" == typeof Config.passages.transitionOut || "string" == typeof Config.passages.transitionOut && "" !== Config.passages.transitionOut && "" !== Config.transitionEndEventName ? [].concat(_toConsumableArray(u.childNodes)).forEach(function(e) {
5892 var t = jQuery(e);
5893 if (e.nodeType === Node.ELEMENT_NODE && t.hasClass("passage")) {
5894 if (t.hasClass("passage-out")) return;
5895 t.attr("id", "out-" + t.attr("id")).addClass("passage-out"), "string" == typeof Config.passages.transitionOut ? t.on(Config.transitionEndEventName, function(e) {
5896 e.originalEvent.propertyName === Config.passages.transitionOut && t.remove()
5897 }) : setTimeout(function() {
5898 return t.remove()
5899 }, Math.max(y, Config.passages.transitionOut))
5900 } else t.remove()
5901 }) : jQuery(u).empty()), s.addClass("passage-in").appendTo(u), setTimeout(function() {
5902 return s.removeClass("passage-in")
5903 }, y), document.title = Config.passages.displayTitles && o.title !== Config.passages.start ? o.title + " | " + Story.title : Story.title, window.scroll(0, 0), b = v.Playing, Story.has("PassageDone")) try {
5904 a = Wikifier.wikifyEval(Story.get("PassageDone").text)
5905 } catch (e) {
5906 Alert.error("PassageDone", e.message)
5907 }
5908 if (Object.keys(postdisplay).forEach(function(e) {
5909 "function" == typeof postdisplay[e] && postdisplay[e].call(this, e)
5910 }, o), Config.ui.updateStoryElements && UIBar.setStoryElements(), Config.debug) {
5911 var l = void 0;
5912 null != n && (l = new DebugView(document.createDocumentFragment(), "special", "PassageReady", "PassageReady"), l.modes({
5913 hidden: !0
5914 }), l.append(n), s.prepend(l.output)), null != a && (l = new DebugView(document.createDocumentFragment(), "special", "PassageDone", "PassageDone"), l.modes({
5915 hidden: !0
5916 }), l.append(a), s.append(l.output)), 1 === State.turns && null != k && s.prepend(k)
5917 }
5918 switch (w = Date.now(), g(), jQuery("#story").find("a[href]:not(.link-external)").addClass("link-external").end().find("a,link,button,input,select,textarea").not("[tabindex]").attr("tabindex", 0), _typeof(Config.saves.autosave)) {
5919 case "boolean":
5920 Config.saves.autosave && Save.autosave.save();
5921 break;
5922 case "string":
5923 o.tags.includes(Config.saves.autosave) && Save.autosave.save();
5924 break;
5925 case "object":
5926 Array.isArray(Config.saves.autosave) && o.tags.some(function(e) {
5927 return Config.saves.autosave.includes(e)
5928 }) && Save.autosave.save()
5929 }
5930 return b = v.Idle, s[0]
5931 }
5932
5933 function h(e, t, r) {
5934 var n = !1;
5935 switch (r) {
5936 case undefined:
5937 break;
5938 case "replace":
5939 case "back":
5940 n = !0;
5941 break;
5942 default:
5943 throw new Error('Engine.display option parameter called with obsolete value "' + r + '"; please notify the developer')
5944 }
5945 p(e, n)
5946 }
5947
5948 function g() {
5949 S.set("*:focus{outline:none}")
5950 }
5951
5952 function m() {
5953 S.clear()
5954 }
5955 var v = Util.toEnum({
5956 Idle: "idle",
5957 Playing: "playing",
5958 Rendering: "rendering"
5959 }),
5960 y = 40,
5961 b = v.Idle,
5962 w = null,
5963 k = null,
5964 S = null;
5965 return Object.freeze(Object.defineProperties({}, {
5966 States: {
5967 value: v
5968 },
5969 minDomActionDelay: {
5970 value: y
5971 },
5972 init: {
5973 value: e
5974 },
5975 start: {
5976 value: t
5977 },
5978 restart: {
5979 value: r
5980 },
5981 state: {
5982 get: n
5983 },
5984 isIdle: {
5985 value: a
5986 },
5987 isPlaying: {
5988 value: i
5989 },
5990 isRendering: {
5991 value: o
5992 },
5993 lastPlay: {
5994 get: s
5995 },
5996 goTo: {
5997 value: u
5998 },
5999 go: {
6000 value: l
6001 },
6002 backward: {
6003 value: c
6004 },
6005 forward: {
6006 value: d
6007 },
6008 show: {
6009 value: f
6010 },
6011 play: {
6012 value: p
6013 },
6014 display: {
6015 value: h
6016 }
6017 }))
6018 }(),
6019 Passage = function() {
6020 var e = void 0;
6021 e = /^(?:debug|nobr|passage|widget|twine\..*)$/i;
6022 var t = function() {
6023 function t(r, n) {
6024 var a = this;
6025 _classCallCheck(this, t), Object.defineProperties(this, {
6026 title: {
6027 value: Util.unescape(r)
6028 },
6029 element: {
6030 value: n || null
6031 },
6032 tags: {
6033 value: Object.freeze(n && n.hasAttribute("tags") ? n.getAttribute("tags").trim().splitOrEmpty(/\s+/).sort().filter(function(e, t, r) {
6034 return 0 === t || r[t - 1] !== e
6035 }) : [])
6036 },
6037 _excerpt: {
6038 writable: !0,
6039 value: null
6040 }
6041 }), Object.defineProperties(this, {
6042 domId: {
6043 value: "passage-" + Util.slugify(this.title)
6044 },
6045 classes: {
6046 value: Object.freeze(0 === this.tags.length ? [] : function() {
6047 return a.tags.filter(function(t) {
6048 return !e.test(t)
6049 }).map(function(e) {
6050 return Util.slugify(e)
6051 })
6052 }())
6053 }
6054 })
6055 }
6056 return _createClass(t, [{
6057 key: "description",
6058 value: function() {
6059 var e = Config.passages.descriptions;
6060 if (null != e) switch ("undefined" == typeof e ? "undefined" : _typeof(e)) {
6061 case "boolean":
6062 if (e) return this.title;
6063 break;
6064 case "object":
6065 if (e instanceof Map && e.has(this.title)) return e.get(this.title);
6066 if (e.hasOwnProperty(this.title)) return e[this.title];
6067 break;
6068 case "function":
6069 var r = e.call(this);
6070 if (r) return r;
6071 break;
6072 default:
6073 throw new TypeError("Config.passages.descriptions must be a boolean, object, or function")
6074 }
6075 return null === this._excerpt && (this._excerpt = t.getExcerptFromText(this.text)), this._excerpt
6076 }
6077 }, {
6078 key: "processText",
6079 value: function() {
6080 var e = this.text;
6081 return this.tags.includes("nobr") && (e = e.replace(/^\n+|\n+$/g, "").replace(/\n+/g, " ")), this.tags.includes("Twine.image") && (e = "[img[" + e + "]]"), e
6082 }
6083 }, {
6084 key: "render",
6085 value: function() {
6086 var e = this,
6087 r = this.tags.length > 0 ? this.tags.join(" ") : null,
6088 n = document.createElement("div");
6089 return jQuery(n).attr({
6090 id: this.domId,
6091 "data-passage": this.title,
6092 "data-tags": r
6093 }).addClass("passage " + this.className), jQuery(document.body).attr("data-tags", r).addClass(this.className), jQuery(document.documentElement).attr("data-tags", r), Object.keys(prerender).forEach(function(t) {
6094 "function" == typeof prerender[t] && prerender[t].call(e, n, t)
6095 }), Story.has("PassageHeader") && new Wikifier(n, Story.get("PassageHeader").processText()), new Wikifier(n, this.processText()), Story.has("PassageFooter") && new Wikifier(n, Story.get("PassageFooter").processText()), Object.keys(postrender).forEach(function(t) {
6096 "function" == typeof postrender[t] && postrender[t].call(e, n, t)
6097 }), this._excerpt = t.getExcerptFromNode(n), n
6098 }
6099 }, {
6100 key: "className",
6101 get: function() {
6102 return this.classes.join(" ")
6103 }
6104 }, {
6105 key: "text",
6106 get: function() {
6107 if (null == this.element) {
6108 var e = Util.escape(this.title);
6109 return '<span class="error" title="' + e + '">' + L10n.get("errorTitle") + ": " + L10n.get("errorNonexistentPassage", {
6110 passage: e
6111 }) + "</span>"
6112 }
6113 return this.element.textContent.replace(/\r/g, "")
6114 }
6115 }], [{
6116 key: "getExcerptFromNode",
6117 value: function(e, t) {
6118 if (!e.hasChildNodes()) return "";
6119 var r = e.textContent.trim();
6120 if ("" !== r) {
6121 var n = new RegExp("(\\S+(?:\\s+\\S+){0," + (t > 0 ? t - 1 : 7) + "})");
6122 r = r.replace(/\s+/g, " ").match(n)
6123 }
6124 return r ? r[1] + "…" : "…"
6125 }
6126 }, {
6127 key: "getExcerptFromText",
6128 value: function(e, t) {
6129 if ("" === e) return "";
6130 var r = new RegExp("(\\S+(?:\\s+\\S+){0," + (t > 0 ? t - 1 : 7) + "})"),
6131 n = e.replace(/<<.*?>>/g, " ").replace(/<.*?>/g, " ").trim().replace(/^\s*\|.*\|.*?$/gm, "").replace(/\[[<>]?img\[[^\]]*\]\]/g, "").replace(/\[\[([^|\]]*)(?:|[^\]]*)?\]\]/g, "$1").replace(/^\s*!+(.*?)$/gm, "$1").replace(/'{2}|\/{2}|_{2}|@{2}/g, "").trim().replace(/\s+/g, " ").match(r);
6132 return n ? n[1] + "…" : "…"
6133 }
6134 }]), t
6135 }();
6136 return t
6137 }(),
6138 Save = function() {
6139 function e() {
6140 if ("cookie" === storage.name) return n(), Config.saves.autosave = undefined, Config.saves.slots = 0, !1;
6141 Config.saves.slots = Math.max(0, Config.saves.slots), Number.isSafeInteger(Config.saves.slots) || (Config.saves.slots = 8);
6142 var e = r(),
6143 t = !1;
6144 Array.isArray(e) && (e = {
6145 autosave: null,
6146 slots: e
6147 }, t = !0), Config.saves.slots !== e.slots.length && (Config.saves.slots < e.slots.length ? (e.slots.reverse(), e.slots = e.slots.filter(function(e) {
6148 return !(null === e && this.count > 0) || (--this.count, !1)
6149 }, {
6150 count: e.slots.length - Config.saves.slots
6151 }), e.slots.reverse()) : Config.saves.slots > e.slots.length && S(e.slots, Config.saves.slots - e.slots.length), t = !0), j(e.autosave) && (t = !0);
6152 for (var a = 0; a < e.slots.length; ++a) j(e.slots[a]) && (t = !0);
6153 return E(e) && (storage.delete("saves"), t = !1), t && x(e), T = e.slots.length - 1, !0
6154 }
6155
6156 function t() {
6157 return {
6158 autosave: null,
6159 slots: S([], Config.saves.slots)
6160 }
6161 }
6162
6163 function r() {
6164 var e = storage.get("saves");
6165 return null === e ? t() : e
6166 }
6167
6168 function n() {
6169 return storage.delete("saves"), !0
6170 }
6171
6172 function a() {
6173 return i() || d()
6174 }
6175
6176 function i() {
6177 return "cookie" !== storage.name && "undefined" != typeof Config.saves.autosave
6178 }
6179
6180 function o() {
6181 var e = r();
6182 return null !== e.autosave
6183 }
6184
6185 function s() {
6186 var e = r();
6187 return e.autosave
6188 }
6189
6190 function u() {
6191 var e = r();
6192 return null !== e.autosave && O(e.autosave)
6193 }
6194
6195 function l(e, t) {
6196 if ("function" == typeof Config.saves.isAllowed && !Config.saves.isAllowed()) return !1;
6197 var n = r(),
6198 a = {
6199 title: e || Story.get(State.passage).description(),
6200 date: Date.now()
6201 };
6202 return null != t && (a.metadata = t), n.autosave = C(a), x(n)
6203 }
6204
6205 function c() {
6206 var e = r();
6207 return e.autosave = null, x(e)
6208 }
6209
6210 function d() {
6211 return "cookie" !== storage.name && T !== -1
6212 }
6213
6214 function f() {
6215 return T + 1
6216 }
6217
6218 function p() {
6219 if (!d()) return 0;
6220 for (var e = r(), t = 0, n = 0, a = e.slots.length; n < a; ++n) null !== e.slots[n] && ++t;
6221 return t
6222 }
6223
6224 function h() {
6225 return 0 === p()
6226 }
6227
6228 function g(e) {
6229 if (e < 0 || e > T) return !1;
6230 var t = r();
6231 return !(e >= t.slots.length || null === t.slots[e])
6232 }
6233
6234 function m(e) {
6235 if (e < 0 || e > T) return null;
6236 var t = r();
6237 return e >= t.slots.length ? null : t.slots[e]
6238 }
6239
6240 function v(e) {
6241 if (e < 0 || e > T) return !1;
6242 var t = r();
6243 return !(e >= t.slots.length || null === t.slots[e]) && O(t.slots[e])
6244 }
6245
6246 function y(e, t, n) {
6247 if ("function" == typeof Config.saves.isAllowed && !Config.saves.isAllowed()) return UI.alert(L10n.get("savesDisallowed")), !1;
6248 if (e < 0 || e > T) return !1;
6249 var a = r();
6250 if (e >= a.slots.length) return !1;
6251 var i = {
6252 title: t || Story.get(State.passage).description(),
6253 date: Date.now()
6254 };
6255 return null != n && (i.metadata = n), a.slots[e] = C(i), x(a)
6256 }
6257
6258 function b(e) {
6259 if (e < 0 || e > T) return !1;
6260 var t = r();
6261 return !(e >= t.slots.length) && (t.slots[e] = null, x(t))
6262 }
6263
6264 function w(e, t) {
6265 function r() {
6266 var e = new Date,
6267 t = e.getMonth() + 1,
6268 r = e.getDate(),
6269 n = e.getHours(),
6270 a = e.getMinutes(),
6271 i = e.getSeconds();
6272 return t < 10 && (t = "0" + t), r < 10 && (r = "0" + r), n < 10 && (n = "0" + n), a < 10 && (a = "0" + a), i < 10 && (i = "0" + i), "" + e.getFullYear() + t + r + "-" + n + a + i
6273 }
6274 if ("function" == typeof Config.saves.isAllowed && !Config.saves.isAllowed()) return void UI.alert(L10n.get("savesDisallowed"));
6275 var n = null == e ? Story.domId : Util.slugify(e),
6276 a = n + "-" + r() + ".save",
6277 i = null == t ? {} : {
6278 metadata: t
6279 },
6280 o = LZString.compressToBase64(JSON.stringify(C(i)));
6281 saveAs(new Blob([o], {
6282 type: "text/plain;charset=UTF-8"
6283 }), a)
6284 }
6285
6286 function k(e) {
6287 var t = e.target.files[0],
6288 r = new FileReader;
6289 jQuery(r).on("load", function(e) {
6290 var r = e.currentTarget;
6291 if (r.result) {
6292 var n = void 0;
6293 try {
6294 n = JSON.parse(/\.json$/i.test(t.name) || /^\{/.test(r.result) ? r.result : LZString.decompressFromBase64(r.result))
6295 } catch (e) {}
6296 O(n)
6297 }
6298 }), r.readAsText(t)
6299 }
6300
6301 function S(e, t) {
6302 for (var r = 0; r < t; ++r) e.push(null);
6303 return e
6304 }
6305
6306 function E(e) {
6307 for (var t = e.slots, r = !0, n = 0, a = t.length; n < a; ++n)
6308 if (null !== t[n]) {
6309 r = !1;
6310 break
6311 }
6312 return null === e.autosave && r
6313 }
6314
6315 function x(e) {
6316 return E(e) ? (storage.delete("saves"), !0) : storage.set("saves", e)
6317 }
6318
6319 function j(e) {
6320 if (null === e) return !1;
6321 var t = !1;
6322 return e.hasOwnProperty("state") && e.state.hasOwnProperty("delta") && e.state.hasOwnProperty("index") || (e.hasOwnProperty("data") ? (delete e.mode, e.state = {
6323 delta: State.deltaEncode(e.data)
6324 }, delete e.data) : e.state.hasOwnProperty("delta") ? e.state.hasOwnProperty("index") || delete e.state.mode : (delete e.state.mode, e.state.delta = State.deltaEncode(e.state.history), delete e.state.history), e.state.index = e.state.delta.length - 1, t = !0), e.state.hasOwnProperty("rseed") && (e.state.seed = e.state.rseed,
6325 delete e.state.rseed, e.state.delta.forEach(function(e, t, r) {
6326 r[t].hasOwnProperty("rcount") && (r[t].pull = r[t].rcount, delete r[t].rcount)
6327 }), t = !0), (e.state.hasOwnProperty("expired") && "number" == typeof e.state.expired || e.state.hasOwnProperty("unique") || e.state.hasOwnProperty("last")) && (e.state.hasOwnProperty("expired") && "number" == typeof e.state.expired && delete e.state.expired, (e.state.hasOwnProperty("unique") || e.state.hasOwnProperty("last")) && (e.state.expired = [], e.state.hasOwnProperty("unique") && (e.state.expired.push(e.state.unique), delete e.state.unique), e.state.hasOwnProperty("last") && (e.state.expired.push(e.state.last), delete e.state.last)), t = !0), t
6328 }
6329
6330 function C(e) {
6331 if (null != e && "object" !== ("undefined" == typeof e ? "undefined" : _typeof(e))) throw new Error("supplemental parameter must be an object");
6332 var t = Object.assign({}, e, {
6333 id: Config.saves.id,
6334 state: State.marshalForSave()
6335 });
6336 return Config.saves.version && (t.version = Config.saves.version), "function" == typeof Config.saves.onSave && Config.saves.onSave(t), t.state.delta = State.deltaEncode(t.state.history), delete t.state.history, t
6337 }
6338
6339 function O(e) {
6340 try {
6341 if (j(e), !e || !e.hasOwnProperty("id") || !e.hasOwnProperty("state")) throw new Error(L10n.get("errorSaveMissingData"));
6342 if (e.state.history = State.deltaDecode(e.state.delta), delete e.state.delta, "function" == typeof Config.saves.onLoad && Config.saves.onLoad(e), e.id !== Config.saves.id) throw new Error(L10n.get("errorSaveIdMismatch"));
6343 State.unmarshalForSave(e.state), Engine.show()
6344 } catch (e) {
6345 return UI.alert(e.message.toUpperFirst() + ".</p><p>" + L10n.get("aborting") + "."), !1
6346 }
6347 return !0
6348 }
6349 var T = -1;
6350 return Object.freeze(Object.defineProperties({}, {
6351 init: {
6352 value: e
6353 },
6354 get: {
6355 value: r
6356 },
6357 clear: {
6358 value: n
6359 },
6360 ok: {
6361 value: a
6362 },
6363 autosave: {
6364 value: Object.freeze(Object.defineProperties({}, {
6365 ok: {
6366 value: i
6367 },
6368 has: {
6369 value: o
6370 },
6371 get: {
6372 value: s
6373 },
6374 load: {
6375 value: u
6376 },
6377 save: {
6378 value: l
6379 },
6380 delete: {
6381 value: c
6382 }
6383 }))
6384 },
6385 slots: {
6386 value: Object.freeze(Object.defineProperties({}, {
6387 ok: {
6388 value: d
6389 },
6390 length: {
6391 get: f
6392 },
6393 isEmpty: {
6394 value: h
6395 },
6396 count: {
6397 value: p
6398 },
6399 has: {
6400 value: g
6401 },
6402 get: {
6403 value: m
6404 },
6405 load: {
6406 value: v
6407 },
6408 save: {
6409 value: y
6410 },
6411 delete: {
6412 value: b
6413 }
6414 }))
6415 },
6416 export: {
6417 value: w
6418 },
6419 import: {
6420 value: k
6421 }
6422 }))
6423 }(),
6424 Setting = function() {
6425 function e() {
6426 if (storage.has("options")) {
6427 var e = storage.get("options");
6428 null !== e && (window.SugarCube.settings = settings = Object.assign(t(), e)), r(), storage.delete("options")
6429 }
6430 n(), g.forEach(function(e) {
6431 if (e.hasOwnProperty("onInit")) {
6432 var t = {
6433 name: e.name,
6434 value: settings[e.name],
6435 default: e.default
6436 };
6437 e.hasOwnProperty("list") && (t.list = e.list), e.onInit.call(t)
6438 }
6439 })
6440 }
6441
6442 function t() {
6443 return Object.create(null)
6444 }
6445
6446 function r() {
6447 var e = t();
6448 return Object.keys(settings).length > 0 && g.filter(function(e) {
6449 return e.type !== m.Header && settings[e.name] !== e.default
6450 }).forEach(function(t) {
6451 return e[t.name] = settings[t.name]
6452 }), 0 === Object.keys(e).length ? (storage.delete("settings"), !0) : storage.set("settings", e)
6453 }
6454
6455 function n() {
6456 var e = t(),
6457 r = storage.get("settings") || t();
6458 g.filter(function(e) {
6459 return e.type !== m.Header
6460 }).forEach(function(t) {
6461 return e[t.name] = t.default
6462 }), window.SugarCube.settings = settings = Object.assign(e, r)
6463 }
6464
6465 function a() {
6466 return window.SugarCube.settings = settings = t(), storage.delete("settings"), !0
6467 }
6468
6469 function i(e) {
6470 if (0 === arguments.length) a(), n();
6471 else {
6472 if (null == e || !f(e)) throw new Error('nonexistent setting "' + e + '"');
6473 var t = p(e);
6474 t.type !== m.Header && (settings[e] = t.default)
6475 }
6476 return r()
6477 }
6478
6479 function o(e, t) {
6480 g.forEach(e, t)
6481 }
6482
6483 function s(e, t, r) {
6484 if (arguments.length < 3) {
6485 var n = [];
6486 throw arguments.length < 1 && n.push("type"), arguments.length < 2 && n.push("name"), arguments.length < 3 && n.push("definition"), new Error("missing parameters, no " + n.join(" or ") + " specified")
6487 }
6488 if ("object" !== ("undefined" == typeof r ? "undefined" : _typeof(r))) throw new TypeError("definition parameter must be an object");
6489 if (f(t)) throw new Error('cannot clobber existing setting "' + t + '"');
6490 var a = {
6491 type: e,
6492 name: t,
6493 label: null == r.label ? "" : String(r.label).trim()
6494 };
6495 switch (e) {
6496 case m.Header:
6497 break;
6498 case m.Toggle:
6499 a.default = !!r.default;
6500 break;
6501 case m.List:
6502 if (!r.hasOwnProperty("list")) throw new Error("no list specified");
6503 if (!Array.isArray(r.list)) throw new TypeError("list must be an array");
6504 if (0 === r.list.length) throw new Error("list must not be empty");
6505 if (a.list = Object.freeze(r.list), null == r.default) a.default = r.list[0];
6506 else {
6507 var i = r.list.indexOf(r.default);
6508 if (i === -1) throw new Error("list does not contain default");
6509 a.default = r.list[i]
6510 }
6511 break;
6512 default:
6513 throw new Error("unknown Setting type: " + e)
6514 }
6515 "function" == typeof r.onInit && (a.onInit = Object.freeze(r.onInit)), "function" == typeof r.onChange && (a.onChange = Object.freeze(r.onChange)), g.push(Object.freeze(a))
6516 }
6517
6518 function u(e, t) {
6519 s(m.Header, e, {
6520 label: t
6521 })
6522 }
6523
6524 function l() {
6525 for (var e = arguments.length, t = Array(e), r = 0; r < e; r++) t[r] = arguments[r];
6526 s.apply(undefined, [m.Toggle].concat(t))
6527 }
6528
6529 function c() {
6530 for (var e = arguments.length, t = Array(e), r = 0; r < e; r++) t[r] = arguments[r];
6531 s.apply(undefined, [m.List].concat(t))
6532 }
6533
6534 function d() {
6535 return 0 === g.length
6536 }
6537
6538 function f(e) {
6539 return g.some(function(t) {
6540 return t.name === e
6541 })
6542 }
6543
6544 function p(e) {
6545 return g.find(function(t) {
6546 return t.name === e
6547 })
6548 }
6549
6550 function h(e) {
6551 f(e) && delete settings[e];
6552 for (var t = 0; t < g.length; ++t)
6553 if (g[t].name === e) {
6554 g.splice(t, 1), h(e);
6555 break
6556 }
6557 }
6558 var g = [],
6559 m = Util.toEnum({
6560 Header: 0,
6561 Toggle: 1,
6562 List: 2
6563 });
6564 return Object.freeze(Object.defineProperties({}, {
6565 Types: {
6566 value: m
6567 },
6568 init: {
6569 value: e
6570 },
6571 create: {
6572 value: t
6573 },
6574 save: {
6575 value: r
6576 },
6577 load: {
6578 value: n
6579 },
6580 clear: {
6581 value: a
6582 },
6583 reset: {
6584 value: i
6585 },
6586 forEach: {
6587 value: o
6588 },
6589 add: {
6590 value: s
6591 },
6592 addHeader: {
6593 value: u
6594 },
6595 addToggle: {
6596 value: l
6597 },
6598 addList: {
6599 value: c
6600 },
6601 isEmpty: {
6602 value: d
6603 },
6604 has: {
6605 value: f
6606 },
6607 get: {
6608 value: p
6609 },
6610 delete: {
6611 value: h
6612 }
6613 }))
6614 }(),
6615 State = function() {
6616 function e() {
6617 session.delete("state"), L = [], I = c(), Q = -1, W = [], R = null === R ? null : new PRNGWrapper(R.seed, !1)
6618 }
6619
6620 function t() {
6621 if (session.has("state")) {
6622 var e = session.get("state");
6623 return null != e && (n(e), !0)
6624 }
6625 return !1
6626 }
6627
6628 function r(e) {
6629 var t = {
6630 index: Q
6631 };
6632 return e ? t.history = clone(L) : t.delta = A(L), W.length > 0 && (t.expired = [].concat(_toConsumableArray(W))), null !== R && (t.seed = R.seed), t
6633 }
6634
6635 function n(e, t) {
6636 if (null == e) throw new Error("state object is null or undefined");
6637 if (!e.hasOwnProperty(t ? "history" : "delta") || 0 === e[t ? "history" : "delta"].length) throw new Error("state object has no history or history is empty");
6638 if (!e.hasOwnProperty("index")) throw new Error("state object has no index");
6639 if (null !== R && !e.hasOwnProperty("seed")) throw new Error("state object has no seed, but PRNG is enabled");
6640 if (null === R && e.hasOwnProperty("seed")) throw new Error("state object has seed, but PRNG is disabled");
6641 L = t ? clone(e.history) : P(e.delta), Q = e.index, W = e.hasOwnProperty("expired") ? [].concat(_toConsumableArray(e.expired)) : [], e.hasOwnProperty("seed") && (R.seed = e.seed), g(Q)
6642 }
6643
6644 function a() {
6645 return r(!0)
6646 }
6647
6648 function i(e) {
6649 return n(e, !0)
6650 }
6651
6652 function o() {
6653 return W
6654 }
6655
6656 function s() {
6657 return W.length + v()
6658 }
6659
6660 function u() {
6661 return W.concat(L.slice(0, v()).map(function(e) {
6662 return e.title
6663 }))
6664 }
6665
6666 function l(e) {
6667 return null != e && "" !== e && (!!W.includes(e) || !!L.slice(0, v()).some(function(t) {
6668 return t.title === e
6669 }))
6670 }
6671
6672 function c(e, t) {
6673 return {
6674 title: null == e ? "" : String(e),
6675 variables: null == t ? {} : clone(t)
6676 }
6677 }
6678
6679 function d() {
6680 return I
6681 }
6682
6683 function f() {
6684 return Q
6685 }
6686
6687 function p() {
6688 return I.title
6689 }
6690
6691 function h() {
6692 return I.variables
6693 }
6694
6695 function g(e) {
6696 if (null == e) throw new Error("moment activation attempted with null or undefined");
6697 switch ("undefined" == typeof e ? "undefined" : _typeof(e)) {
6698 case "object":
6699 I = clone(e);
6700 break;
6701 case "number":
6702 if (b()) throw new Error("moment activation attempted with index on empty history");
6703 if (e < 0 || e >= y()) throw new RangeError("moment activation attempted with out-of-bounds index; need [0, " + (y() - 1) + "], got " + e);
6704 I = clone(L[e]);
6705 break;
6706 default:
6707 throw new TypeError('moment activation attempted with a "' + ("undefined" == typeof e ? "undefined" : _typeof(e)) + '"; must be an object or valid history stack index')
6708 }
6709 return null !== R && (R = PRNGWrapper.unmarshal({
6710 seed: R.seed,
6711 pull: I.pull
6712 })), session.set("state", r()), jQuery.event.trigger(":historyupdate"), I
6713 }
6714
6715 function m() {
6716 return L
6717 }
6718
6719 function v() {
6720 return Q + 1
6721 }
6722
6723 function y() {
6724 return L.length
6725 }
6726
6727 function b() {
6728 return 0 === L.length
6729 }
6730
6731 function w() {
6732 return L.length > 0 ? L[Q] : null
6733 }
6734
6735 function k() {
6736 return L.length > 0 ? L[L.length - 1] : null
6737 }
6738
6739 function S() {
6740 return L.length > 0 ? L[0] : null
6741 }
6742
6743 function E(e) {
6744 return b() || e < 0 || e > Q ? null : L[e]
6745 }
6746
6747 function x(e) {
6748 if (b()) return null;
6749 var t = 1 + (e ? Math.abs(e) : 0);
6750 return t > v() ? null : L[v() - t]
6751 }
6752
6753 function j(e) {
6754 if (b() || null == e || "" === e) return !1;
6755 for (var t = Q; t >= 0; --t)
6756 if (L[t].title === e) return !0;
6757 return !1
6758 }
6759
6760 function C(e) {
6761 if (v() < y() && L.splice(v(), y() - v()), L.push(c(e, I.variables)), R && (k().pull = R.pull), Config.history.maxStates > 0)
6762 for (; y() > Config.history.maxStates;) W.push(L.shift().title);
6763 return Q = y() - 1, g(Q), v()
6764 }
6765
6766 function O(e) {
6767 return !(null == e || e < 0 || e >= y() || e === Q) && (Q = e, g(Q), !0)
6768 }
6769
6770 function T(e) {
6771 return null != e && 0 !== e && O(Q + e)
6772 }
6773
6774 function A(e) {
6775 if (!Array.isArray(e)) return null;
6776 if (0 === e.length) return [];
6777 for (var t = [clone(e[0])], r = 1, n = e.length; r < n; ++r) t.push(Util.diff(e[r - 1], e[r]));
6778 return t
6779 }
6780
6781 function P(e) {
6782 if (!Array.isArray(e)) return null;
6783 if (0 === e.length) return [];
6784 for (var t = [clone(e[0])], r = 1, n = e.length; r < n; ++r) t.push(Util.patch(t[r - 1], e[r]));
6785 return t
6786 }
6787
6788 function _(e, t) {
6789 if (!b()) {
6790 var r = void 0;
6791 throw r = "the Story JavaScript", new Error("State.initPRNG must be called during initialization, within either " + r + " or the StoryInit special passage")
6792 }
6793 R = new PRNGWrapper(e, t), I.pull = R.pull
6794 }
6795
6796 function D() {
6797 return R ? R.random() : Math.random()
6798 }
6799
6800 function M() {
6801 F = {}, TempVariables = F
6802 }
6803
6804 function N() {
6805 return F
6806 }
6807 var L = [],
6808 I = c(),
6809 Q = -1,
6810 W = [],
6811 R = null,
6812 F = {};
6813 return Object.freeze(Object.defineProperties({}, {
6814 reset: {
6815 value: e
6816 },
6817 restore: {
6818 value: t
6819 },
6820 marshalForSave: {
6821 value: a
6822 },
6823 unmarshalForSave: {
6824 value: i
6825 },
6826 expired: {
6827 get: o
6828 },
6829 turns: {
6830 get: s
6831 },
6832 passages: {
6833 get: u
6834 },
6835 hasPlayed: {
6836 value: l
6837 },
6838 active: {
6839 get: d
6840 },
6841 activeIndex: {
6842 get: f
6843 },
6844 passage: {
6845 get: p
6846 },
6847 variables: {
6848 get: h
6849 },
6850 history: {
6851 get: m
6852 },
6853 length: {
6854 get: v
6855 },
6856 size: {
6857 get: y
6858 },
6859 isEmpty: {
6860 value: b
6861 },
6862 current: {
6863 get: w
6864 },
6865 top: {
6866 get: k
6867 },
6868 bottom: {
6869 get: S
6870 },
6871 index: {
6872 value: E
6873 },
6874 peek: {
6875 value: x
6876 },
6877 has: {
6878 value: j
6879 },
6880 create: {
6881 value: C
6882 },
6883 goTo: {
6884 value: O
6885 },
6886 go: {
6887 value: T
6888 },
6889 deltaEncode: {
6890 value: A
6891 },
6892 deltaDecode: {
6893 value: P
6894 },
6895 initPRNG: {
6896 value: _
6897 },
6898 random: {
6899 value: D
6900 },
6901 clearTemporary: {
6902 value: M
6903 },
6904 temporary: {
6905 get: N
6906 },
6907 restart: {
6908 value: function() {
6909 return Engine.restart()
6910 }
6911 },
6912 backward: {
6913 value: function() {
6914 return Engine.backward()
6915 }
6916 },
6917 forward: {
6918 value: function() {
6919 return Engine.forward()
6920 }
6921 },
6922 display: {
6923 value: function() {
6924 return Engine.display.apply(Engine, arguments)
6925 }
6926 },
6927 show: {
6928 value: function() {
6929 return Engine.show.apply(Engine, arguments)
6930 }
6931 },
6932 play: {
6933 value: function() {
6934 return Engine.play.apply(Engine, arguments)
6935 }
6936 }
6937 }))
6938 }(),
6939 Story = function() {
6940 function e() {
6941 function e(e) {
6942 if (e.tags.includesAny(n)) throw new Error('starting passage "' + e.title + '" contains illegal tags; invalid: "' + e.tags.filter(function(e) {
6943 return n.includes(e)
6944 }).sort().join('", "') + '"')
6945 }
6946
6947 function t(e) {
6948 if (a.includes(e.title) && e.tags.includesAny(n)) throw new Error('special passage "' + e.title + '" contains illegal tags; invalid: "' + e.tags.filter(function(e) {
6949 return n.includes(e)
6950 }).sort().join('", "') + '"')
6951 }
6952 var n = ["widget"],
6953 a = ["PassageDone", "PassageFooter", "PassageHeader", "PassageReady", "StoryAuthor", "StoryBanner", "StoryCaption", "StoryInit", "StoryMenu", "StoryShare", "StorySubtitle"];
6954 ! function() {
6955 var n = jQuery("#store-area>tw-storydata"),
6956 a = n.attr("startnode") || "";
6957 Config.passages.start = null, Config.debug = /\bdebug\b/.test(n.attr("options")), n.children("style").each(function(e) {
6958 d.push(new Passage("tw-user-style-" + e, this))
6959 }), n.children("script").each(function(e) {
6960 f.push(new Passage("tw-user-script-" + e, this))
6961 }), n.children('tw-passagedata:not([tags~="Twine.private"],[tags~="annotation"])').each(function() {
6962 var r = jQuery(this),
6963 n = r.attr("pid") || "",
6964 i = new Passage(r.attr("name"), this);
6965 n === a && "" !== a ? (Config.passages.start = i.title, e(i), c[i.title] = i) : i.tags.includes("widget") ? p.push(i) : (t(i), c[i.title] = i)
6966 }), g = n.attr("ifid"), r(Util.unescape("Brainwashing Hypno File")), Config.saves.id = Story.domId
6967 }()
6968 }
6969
6970 function t() {
6971 ! function() {
6972 var e = document.createElement("style");
6973 new StyleWrapper(e).add(d.map(function(e) {
6974 return e.text.trim()
6975 }).join("\n")), jQuery(e).appendTo(document.head).attr({
6976 id: "style-story",
6977 type: "text/css"
6978 })
6979 }();
6980 for (var e = 0; e < f.length; ++e) try {
6981 Scripting.evalJavaScript(f[e].text)
6982 } catch (t) {
6983 Alert.error(f[e].title, "object" === ("undefined" == typeof t ? "undefined" : _typeof(t)) ? t.message : t)
6984 }
6985 for (var t = 0; t < p.length; ++t) try {
6986 Wikifier.wikifyEval(p[t].processText())
6987 } catch (e) {
6988 Alert.error(p[t].title, "object" === ("undefined" == typeof e ? "undefined" : _typeof(e)) ? e.message : e)
6989 }
6990 }
6991
6992 function r(e) {
6993 if (null == e || "" === e) throw new Error("story title cannot be null or empty");
6994 document.title = h = Util.unescape(e), m = Util.slugify(h)
6995 }
6996
6997 function n() {
6998 return h
6999 }
7000
7001 function a() {
7002 return m
7003 }
7004
7005 function i() {
7006 return g
7007 }
7008
7009 function o(e) {
7010 var t = "undefined" == typeof e ? "undefined" : _typeof(e);
7011 switch (t) {
7012 case "number":
7013 case "string":
7014 var r = String(e);
7015 return c.hasOwnProperty(r);
7016 case "boolean":
7017 case "function":
7018 t = "a " + t;
7019 break;
7020 case "undefined":
7021 break;
7022 default:
7023 t = null === e ? "null" : "an " + t
7024 }
7025 throw new TypeError("Story.has title parameter cannot be " + t)
7026 }
7027
7028 function s(e) {
7029 var t = "undefined" == typeof e ? "undefined" : _typeof(e);
7030 switch (t) {
7031 case "number":
7032 case "string":
7033 var r = String(e);
7034 return c.hasOwnProperty(r) ? c[r] : new Passage(r || "(unknown)");
7035 case "boolean":
7036 case "function":
7037 t = "a " + t;
7038 break;
7039 case "undefined":
7040 break;
7041 default:
7042 t = null === e ? "null" : "an " + t
7043 }
7044 throw new TypeError("Story.get title parameter cannot be " + t)
7045 }
7046
7047 function u(e, t) {
7048 for (var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "title", n = Object.keys(c), a = [], i = 0; i < n.length; ++i) {
7049 var o = c[n[i]];
7050 if (o.hasOwnProperty(e)) switch (_typeof(o[e])) {
7051 case "undefined":
7052 break;
7053 case "object":
7054 for (var s = 0, u = o[e].length; s < u; ++s)
7055 if (o[e][s] == t) {
7056 a.push(o);
7057 break
7058 }
7059 break;
7060 default:
7061 o[e] == t && a.push(o)
7062 }
7063 }
7064 return a.sort(function(e, t) {
7065 return e[r] == t[r] ? 0 : e[r] < t[r] ? -1 : 1
7066 }), a
7067 }
7068
7069 function l(e) {
7070 var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "title";
7071 if ("function" != typeof e) throw new Error("Story.lookupWith filter parameter must be a function");
7072 for (var r = Object.keys(c), n = [], a = 0; a < r.length; ++a) {
7073 var i = c[r[a]];
7074 e(i) && n.push(i)
7075 }
7076 return n.sort(function(e, r) {
7077 return e[t] == r[t] ? 0 : e[t] < r[t] ? -1 : 1
7078 }), n
7079 }
7080 var c = {},
7081 d = [],
7082 f = [],
7083 p = [],
7084 h = "",
7085 g = "",
7086 m = "";
7087 return Object.freeze(Object.defineProperties({}, {
7088 passages: {
7089 value: c
7090 },
7091 styles: {
7092 value: d
7093 },
7094 scripts: {
7095 value: f
7096 },
7097 widgets: {
7098 value: p
7099 },
7100 load: {
7101 value: e
7102 },
7103 init: {
7104 value: t
7105 },
7106 title: {
7107 get: n
7108 },
7109 domId: {
7110 get: a
7111 },
7112 ifId: {
7113 get: i
7114 },
7115 has: {
7116 value: o
7117 },
7118 get: {
7119 value: s
7120 },
7121 lookup: {
7122 value: u
7123 },
7124 lookupWith: {
7125 value: l
7126 }
7127 }))
7128 }(),
7129 UI = function() {
7130 function e(e, t) {
7131 var r = t,
7132 n = Config.debug;
7133 Config.debug = !1;
7134 try {
7135 null == r && (r = document.createElement("ul"));
7136 var a = document.createDocumentFragment();
7137 if (new Wikifier(a, Story.get(e).processText().trim()), a.hasChildNodes())
7138 for (var i = null; a.hasChildNodes();) {
7139 var o = a.firstChild;
7140 o.nodeType !== Node.ELEMENT_NODE || "A" !== o.nodeName.toUpperCase() ? (a.removeChild(o), null !== i && (i = null)) : (null === i && (i = document.createElement("li"), r.appendChild(i)), i.appendChild(o))
7141 }
7142 } finally {
7143 Config.debug = n
7144 }
7145 return r
7146 }
7147
7148 function t(e) {
7149 jQuery(Dialog.setup("Alert", "alert")).append("<p>" + e + '</p><ul class="buttons">' + ('<li><button id="alert-ok" class="ui-close">' + L10n.get(["alertOk", "ok"]) + "</button></li>") + "</ul>");
7150 for (var t = arguments.length, r = Array(t > 1 ? t - 1 : 0), n = 1; n < t; n++) r[n - 1] = arguments[n];
7151 Dialog.open.apply(Dialog, r)
7152 }
7153
7154 function r() {
7155 u(), Dialog.open.apply(Dialog, arguments)
7156 }
7157
7158 function n() {
7159 l(), Dialog.open.apply(Dialog, arguments)
7160 }
7161
7162 function a() {
7163 c(), Dialog.open.apply(Dialog, arguments)
7164 }
7165
7166 function i() {
7167 d(), Dialog.open.apply(Dialog, arguments)
7168 }
7169
7170 function o() {
7171 f(), Dialog.open.apply(Dialog, arguments)
7172 }
7173
7174 function s() {
7175 return jQuery(Dialog.setup(L10n.get("autoloadTitle"), "autoload")).append("<p>" + L10n.get("autoloadPrompt") + '</p><ul class="buttons">' + ('<li><button id="autoload-ok" class="ui-close">' + L10n.get(["autoloadOk", "ok"]) + "</button></li>") + ('<li><button id="autoload-cancel" class="ui-close">' + L10n.get(["autoloadCancel", "cancel"]) + "</button></li>") + "</ul>"), jQuery(document).one("click.autoload", ".ui-close", function(e) {
7176 var t = "autoload-ok" === e.target.id;
7177 jQuery(document).one(":dialogclose", function() {
7178 t && Save.autosave.load() || Engine.play(Config.passages.start)
7179 })
7180 }), !0
7181 }
7182
7183 function u() {
7184 var e = document.createElement("ul");
7185 jQuery(Dialog.setup(L10n.get("jumptoTitle"), "jumpto list")).append(e);
7186 for (var t = State.expired.length, r = State.size - 1; r >= 0; --r)
7187 if (r !== State.activeIndex) {
7188 var n = Story.get(State.history[r].title);
7189 n && n.tags.includes("bookmark") && jQuery(document.createElement("li")).append(jQuery(document.createElement("a")).ariaClick({
7190 one: !0
7191 }, function(e) {
7192 return function() {
7193 return jQuery(document).one(":dialogclose", function() {
7194 return Engine.goTo(e)
7195 })
7196 }
7197 }(r)).addClass("ui-close").text(L10n.get("jumptoTurn") + " " + (t + r + 1) + ": " + n.description())).appendTo(e)
7198 }
7199 e.hasChildNodes() || jQuery(e).append("<li><a><em>" + L10n.get("jumptoUnavailable") + "</em></a></li>")
7200 }
7201
7202 function l() {
7203 return jQuery(Dialog.setup(L10n.get("restartTitle"), "restart")).append("<p>" + L10n.get("restartPrompt") + '</p><ul class="buttons">' + ('<li><button id="restart-ok">' + L10n.get(["restartOk", "ok"]) + "</button></li>") + ('<li><button id="restart-cancel" class="ui-close">' + L10n.get(["restartCancel", "cancel"]) + "</button></li>") + "</ul>").find("#restart-ok").ariaClick({
7204 one: !0
7205 }, function() {
7206 jQuery(document).one(":dialogclose", function() {
7207 return Engine.restart()
7208 }), Dialog.close()
7209 }), !0
7210 }
7211
7212 function c() {
7213 function e(e, t, r, n) {
7214 var a = jQuery(document.createElement("button")).attr("id", "saves-" + e).html(r);
7215 return t && a.addClass(t), n ? a.ariaClick(n) : a.prop("disabled", !0), jQuery(document.createElement("li")).append(a)
7216 }
7217
7218 function r() {
7219 function e(e, t, r, n, a) {
7220 var i = jQuery(document.createElement("button")).attr("id", "saves-" + e + "-" + n).addClass(e).html(r);
7221 return t && i.addClass(t), a ? "auto" === n ? i.ariaClick({
7222 label: r + " " + L10n.get("savesLabelAuto")
7223 }, function() {
7224 return a()
7225 }) : i.ariaClick({
7226 label: r + " " + L10n.get("savesLabelSlot") + " " + (n + 1)
7227 }, function() {
7228 return a(n)
7229 }) : i.prop("disabled", !0), i
7230 }
7231 var t = Save.get(),
7232 r = jQuery(document.createElement("tbody"));
7233 if (Save.autosave.ok()) {
7234 var n = jQuery(document.createElement("td")),
7235 a = jQuery(document.createElement("td")),
7236 i = jQuery(document.createElement("td")),
7237 o = jQuery(document.createElement("td"));
7238 jQuery(document.createElement("b")).attr({
7239 title: L10n.get("savesLabelAuto"),
7240 "aria-label": L10n.get("savesLabelAuto")
7241 }).text("A").appendTo(n), t.autosave ? (a.append(e("load", "ui-close", L10n.get("savesLabelLoad"), "auto", function() {
7242 jQuery(document).one(":dialogclose", function() {
7243 return Save.autosave.load()
7244 })
7245 })), jQuery(document.createElement("div")).text(t.autosave.title).appendTo(i), jQuery(document.createElement("div")).addClass("datestamp").html(t.autosave.date ? L10n.get("savesSavedOn") + " " + new Date(t.autosave.date).toLocaleString() : L10n.get("savesSavedOn") + " <em>" + L10n.get("savesUnknownDate") + "</em>").appendTo(i), o.append(e("delete", null, L10n.get("savesLabelDelete"), "auto", function() {
7246 Save.autosave.delete(), c(), Dialog.resize()
7247 }))) : (a.append(e("load", null, L10n.get("savesLabelLoad"), "auto")), jQuery(document.createElement("em")).text(L10n.get("savesEmptySlot")).appendTo(i), i.addClass("empty"), o.append(e("delete", null, L10n.get("savesLabelDelete"), "auto"))), jQuery(document.createElement("tr")).append(n).append(a).append(i).append(o).appendTo(r)
7248 }
7249 for (var s = 0, u = t.slots.length; s < u; ++s) {
7250 var l = jQuery(document.createElement("td")),
7251 d = jQuery(document.createElement("td")),
7252 f = jQuery(document.createElement("td")),
7253 p = jQuery(document.createElement("td"));
7254 l.append(document.createTextNode(s + 1)), t.slots[s] ? (d.append(e("load", "ui-close", L10n.get("savesLabelLoad"), s, function(e) {
7255 jQuery(document).one(":dialogclose", function() {
7256 return Save.slots.load(e)
7257 })
7258 })), jQuery(document.createElement("div")).text(t.slots[s].title).appendTo(f), jQuery(document.createElement("div")).addClass("datestamp").html(t.slots[s].date ? L10n.get("savesSavedOn") + " " + new Date(t.slots[s].date).toLocaleString() : L10n.get("savesSavedOn") + " <em>" + L10n.get("savesUnknownDate") + "</em>").appendTo(f), p.append(e("delete", null, L10n.get("savesLabelDelete"), s, function(e) {
7259 Save.slots.delete(e), c(), Dialog.resize()
7260 }))) : (d.append(e("save", "ui-close", L10n.get("savesLabelSave"), s, Save.slots.save)), jQuery(document.createElement("em")).text(L10n.get("savesEmptySlot")).appendTo(f), f.addClass("empty"), p.append(e("delete", null, L10n.get("savesLabelDelete"), s))), jQuery(document.createElement("tr")).append(l).append(d).append(f).append(p).appendTo(r)
7261 }
7262 return jQuery(document.createElement("table")).attr("id", "saves-list").append(r)
7263 }
7264 var n = jQuery(Dialog.setup(L10n.get("savesTitle"), "saves")),
7265 a = Save.ok();
7266 if (a && n.append(r()), a || Has.fileAPI) {
7267 var i = jQuery(document.createElement("ul")).addClass("buttons").appendTo(n);
7268 return Has.fileAPI && (i.append(e("export", "ui-close", L10n.get("savesLabelExport"), function() {
7269 return Save.export()
7270 })), i.append(e("import", null, L10n.get("savesLabelImport"), function() {
7271 return n.find("#saves-import-file").trigger("click")
7272 })), jQuery(document.createElement("input")).css({
7273 display: "block",
7274 visibility: "hidden",
7275 position: "fixed",
7276 left: "-9999px",
7277 top: "-9999px",
7278 width: "1px",
7279 height: "1px"
7280 }).attr({
7281 type: "file",
7282 id: "saves-import-file",
7283 tabindex: -1,
7284 "aria-hidden": !0
7285 }).on("change", function(e) {
7286 jQuery(document).one(":dialogclose", function() {
7287 return Save.import(e)
7288 }), Dialog.close()
7289 }).appendTo(n)), a && i.append(e("clear", null, L10n.get("savesLabelClear"), Save.autosave.has() || !Save.slots.isEmpty() ? function() {
7290 Save.clear(), c(), Dialog.resize()
7291 } : null)), !0
7292 }
7293 return t(L10n.get("savesIncapable")), !1
7294 }
7295
7296 function d() {
7297 var e = jQuery(Dialog.setup(L10n.get("settingsTitle"), "settings"));
7298 return Setting.forEach(function(t) {
7299 if (t.type === Setting.Types.Header) {
7300 var r = t.name,
7301 n = Util.slugify(r),
7302 a = jQuery(document.createElement("div")),
7303 i = jQuery(document.createElement("h2")),
7304 o = jQuery(document.createElement("p"));
7305 return a.attr("id", "header-body-" + n).append(i).append(o).appendTo(e), i.attr("id", "header-heading-" + n).wiki(r), void o.attr("id", "header-label-" + n).wiki(t.label)
7306 }
7307 var s = t.name,
7308 u = Util.slugify(s),
7309 l = jQuery(document.createElement("div")),
7310 c = jQuery(document.createElement("label")),
7311 d = jQuery(document.createElement("div")),
7312 f = void 0;
7313 switch (l.attr("id", "setting-body-" + u).append(c).append(d).appendTo(e), c.attr({
7314 id: "setting-label-" + u,
7315 for: "setting-control-" + u
7316 }).wiki(t.label), null == settings[s] && (settings[s] = t.default), t.type) {
7317 case Setting.Types.Toggle:
7318 f = jQuery(document.createElement("button")), settings[s] ? f.addClass("enabled").text(L10n.get("settingsOn")) : f.text(L10n.get("settingsOff")), f.ariaClick(function() {
7319 settings[s] ? (jQuery(this).removeClass("enabled").text(L10n.get("settingsOff")), settings[s] = !1) : (jQuery(this).addClass("enabled").text(L10n.get("settingsOn")), settings[s] = !0), Setting.save(), t.hasOwnProperty("onChange") && t.onChange.call({
7320 name: s,
7321 value: settings[s],
7322 default: t.default
7323 })
7324 });
7325 break;
7326 case Setting.Types.List:
7327 f = jQuery(document.createElement("select"));
7328 for (var p = 0, h = t.list.length; p < h; ++p) jQuery(document.createElement("option")).val(p).text(t.list[p]).appendTo(f);
7329 f.val(t.list.indexOf(settings[s])).attr("tabindex", 0).on("change", function() {
7330 settings[s] = t.list[Number(this.value)], Setting.save(), t.hasOwnProperty("onChange") && t.onChange.call({
7331 name: s,
7332 value: settings[s],
7333 default: t.default,
7334 list: t.list
7335 })
7336 })
7337 }
7338 f.attr("id", "setting-control-" + u).appendTo(d)
7339 }), e.append('<ul class="buttons">' + ('<li><button id="settings-ok" class="ui-close">' + L10n.get(["settingsOk", "ok"]) + "</button></li>") + ('<li><button id="settings-reset">' + L10n.get("settingsReset") + "</button></li>") + "</ul>").find("#settings-reset").ariaClick({
7340 one: !0
7341 }, function() {
7342 jQuery(document).one(":dialogclose", function() {
7343 Setting.reset(), window.location.reload()
7344 }), Dialog.close()
7345 }), !0
7346 }
7347
7348 function f() {
7349 return jQuery(Dialog.setup(L10n.get("shareTitle"), "share list")).append(e("StoryShare")), !0
7350 }
7351 return Object.freeze(Object.defineProperties({}, {
7352 assembleLinkList: {
7353 value: e
7354 },
7355 alert: {
7356 value: t
7357 },
7358 jumpto: {
7359 value: r
7360 },
7361 restart: {
7362 value: n
7363 },
7364 saves: {
7365 value: a
7366 },
7367 settings: {
7368 value: i
7369 },
7370 share: {
7371 value: o
7372 },
7373 buildAutoload: {
7374 value: s
7375 },
7376 buildJumpto: {
7377 value: u
7378 },
7379 buildRestart: {
7380 value: l
7381 },
7382 buildSaves: {
7383 value: c
7384 },
7385 buildSettings: {
7386 value: d
7387 },
7388 buildShare: {
7389 value: f
7390 },
7391 stow: {
7392 value: function() {
7393 return UIBar.stow()
7394 }
7395 },
7396 unstow: {
7397 value: function() {
7398 return UIBar.unstow()
7399 }
7400 },
7401 setStoryElements: {
7402 value: function() {
7403 return UIBar.setStoryElements()
7404 }
7405 },
7406 isOpen: {
7407 value: function() {
7408 return Dialog.isOpen.apply(Dialog, arguments)
7409 }
7410 },
7411 body: {
7412 value: function() {
7413 return Dialog.body()
7414 }
7415 },
7416 setup: {
7417 value: function() {
7418 return Dialog.setup.apply(Dialog, arguments)
7419 }
7420 },
7421 addClickHandler: {
7422 value: function() {
7423 return Dialog.addClickHandler.apply(Dialog, arguments)
7424 }
7425 },
7426 open: {
7427 value: function() {
7428 return Dialog.open.apply(Dialog, arguments)
7429 }
7430 },
7431 close: {
7432 value: function() {
7433 return Dialog.close.apply(Dialog, arguments)
7434 }
7435 },
7436 resize: {
7437 value: function() {
7438 return Dialog.resize()
7439 }
7440 },
7441 buildDialogAutoload: {
7442 value: s
7443 },
7444 buildDialogJumpto: {
7445 value: u
7446 },
7447 buildDialogRestart: {
7448 value: l
7449 },
7450 buildDialogSaves: {
7451 value: c
7452 },
7453 buildDialogSettings: {
7454 value: d
7455 },
7456 buildDialogShare: {
7457 value: f
7458 },
7459 buildLinkListFromPassage: {
7460 value: e
7461 }
7462 }))
7463 }(),
7464 UIBar = function() {
7465 function e() {
7466 o || document.getElementById("ui-bar") || (! function() {
7467 var e = L10n.get("uiBarToggle"),
7468 t = L10n.get("uiBarBackward"),
7469 r = L10n.get("uiBarJumpto"),
7470 n = L10n.get("uiBarForward");
7471 jQuery(document.createDocumentFragment()).append('<div id="ui-bar"><div id="ui-bar-tray">' + ('<button id="ui-bar-toggle" tabindex="0" title="' + e + '" aria-label="' + e + '"></button>') + '<div id="ui-bar-history">' + ('<button id="history-backward" tabindex="0" title="' + t + '" aria-label="' + t + '">î ¡</button>') + ('<button id="history-jumpto" tabindex="0" title="' + r + '" aria-label="' + r + '">î ¹</button>') + ('<button id="history-forward" tabindex="0" title="' + n + '" aria-label="' + n + '">î ¢</button>') + '</div></div><div id="ui-bar-body"><header id="title" role="banner"><div id="story-banner"></div><h1 id="story-title"></h1><div id="story-subtitle"></div><div id="story-title-separator"></div><p id="story-author"></p></header><div id="story-caption"></div><nav id="menu" role="navigation"><ul id="menu-story"></ul><ul id="menu-core">' + ('<li id="menu-item-saves"><a tabindex="0">' + L10n.get("savesTitle") + "</a></li>") + ('<li id="menu-item-settings"><a tabindex="0">' + L10n.get("settingsTitle") + "</a></li>") + ('<li id="menu-item-restart"><a tabindex="0">' + L10n.get("restartTitle") + "</a></li>") + ('<li id="menu-item-share"><a tabindex="0">' + L10n.get("shareTitle") + "</a></li>") + "</ul></nav></div></div>").insertBefore("#store-area")
7472 }(), jQuery(document).on(":historyupdate.ui-bar", function(e, t) {
7473 return function() {
7474 e.prop("disabled", State.length < 2), t.prop("disabled", State.length === State.size)
7475 }
7476 }(jQuery("#history-backward"), jQuery("#history-forward"))))
7477 }
7478
7479 function t() {
7480 if (!o) {
7481 var e = jQuery("#ui-bar");
7482 ("boolean" == typeof Config.ui.stowBarInitially ? Config.ui.stowBarInitially : jQuery(window).width() <= Config.ui.stowBarInitially) && ! function() {
7483 var t = jQuery(e).add("#story");
7484 t.addClass("no-transition"), e.addClass("stowed"), setTimeout(function() {
7485 return t.removeClass("no-transition")
7486 }, Engine.minDomActionDelay)
7487 }(), jQuery("#ui-bar-toggle").ariaClick({
7488 label: L10n.get("uiBarToggle")
7489 }, function() {
7490 return e.toggleClass("stowed")
7491 }), Config.history.controls ? (jQuery("#history-backward").prop("disabled", State.length < 2).ariaClick({
7492 label: L10n.get("uiBarBackward")
7493 }, function() {
7494 return Engine.backward()
7495 }), Story.lookup("tags", "bookmark").length > 0 ? jQuery("#history-jumpto").ariaClick({
7496 label: L10n.get("uiBarJumpto")
7497 }, function() {
7498 return UI.jumpto()
7499 }) : jQuery("#history-jumpto").remove(), jQuery("#history-forward").prop("disabled", State.length === State.size).ariaClick({
7500 label: L10n.get("uiBarForward")
7501 }, function() {
7502 return Engine.forward()
7503 })) : jQuery("#ui-bar-history").remove(), jQuery("#story-title").text(Story.title), Story.has("StoryCaption") || jQuery("#story-caption").remove(), Story.has("StoryMenu") || jQuery("#menu-story").remove(), Config.ui.updateStoryElements || i(), Dialog.addClickHandler("#menu-item-saves a", null, UI.buildSaves).text(L10n.get("savesTitle")), Setting.isEmpty() ? jQuery("#menu-item-settings").remove() : Dialog.addClickHandler("#menu-item-settings a", null, UI.buildSettings).text(L10n.get("settingsTitle")), Dialog.addClickHandler("#menu-item-restart a", null, UI.buildRestart).text(L10n.get("restartTitle")), Story.has("StoryShare") ? Dialog.addClickHandler("#menu-item-share a", null, UI.buildShare).text(L10n.get("shareTitle")) : jQuery("#menu-item-share").remove()
7504 }
7505 }
7506
7507 function r() {
7508 o || (jQuery(document).off(".ui-bar"), jQuery("#ui-bar").remove(), jQuery(document.head).find("#style-ui-bar").remove(), Config.ui.updateStoryElements = !1, o = !0)
7509 }
7510
7511 function n() {
7512 o || jQuery("#ui-bar").addClass("stowed")
7513 }
7514
7515 function a() {
7516 o || jQuery("#ui-bar").removeClass("stowed")
7517 }
7518
7519 function i() {
7520 if (!o) {
7521 setPageElement("story-banner", "StoryBanner"), setPageElement("story-subtitle", "StorySubtitle"), setPageElement("story-author", "StoryAuthor"), setPageElement("story-caption", "StoryCaption");
7522 var e = document.getElementById("menu-story");
7523 null !== e && (jQuery(e).empty(), Story.has("StoryMenu") && UI.assembleLinkList("StoryMenu", e))
7524 }
7525 }
7526 var o = !1;
7527 return Object.freeze(Object.defineProperties({}, {
7528 init: {
7529 value: e
7530 },
7531 start: {
7532 value: t
7533 },
7534 destroy: {
7535 value: r
7536 },
7537 stow: {
7538 value: n
7539 },
7540 unstow: {
7541 value: a
7542 },
7543 setStoryElements: {
7544 value: i
7545 }
7546 }))
7547 }(),
7548 LoadScreen = function() {
7549 function e() {
7550 jQuery(document).on("readystatechange.SugarCube", function() {
7551 o.size > 0 || ("complete" === document.readyState ? "loading" === jQuery(document.documentElement).attr("data-init") && (Config.loadDelay > 0 ? setTimeout(function() {
7552 0 === o.size && r()
7553 }, Math.max(Engine.minDomActionDelay, Config.loadDelay)) : r()) : n())
7554 })
7555 }
7556
7557 function t() {
7558 jQuery(document).off("readystatechange.SugarCube"), o.clear(), r()
7559 }
7560
7561 function r() {
7562 jQuery(document.documentElement).removeAttr("data-init")
7563 }
7564
7565 function n() {
7566 jQuery(document.documentElement).attr("data-init", "loading")
7567 }
7568
7569 function a() {
7570 return ++s, o.add(s), n(), s
7571 }
7572
7573 function i(e) {
7574 if (null == e) throw new Error("LoadScreen.unlock called with a null or undefined ID");
7575 o.has(e) && o.delete(e), 0 === o.size && jQuery(document).trigger("readystatechange")
7576 }
7577 var o = new Set,
7578 s = 0;
7579 return Object.freeze(Object.defineProperties({}, {
7580 init: {
7581 value: e
7582 },
7583 clear: {
7584 value: t
7585 },
7586 hide: {
7587 value: r
7588 },
7589 show: {
7590 value: n
7591 },
7592 lock: {
7593 value: a
7594 },
7595 unlock: {
7596 value: i
7597 }
7598 }))
7599 }(),
7600 version = Object.freeze({
7601 title: "SugarCube",
7602 major: 2,
7603 minor: 18,
7604 patch: 0,
7605 prerelease: null,
7606 build: 7982,
7607 date: new Date("2017-04-26T15:27:50.743Z"),
7608 extensions: {},
7609 toString: function() {
7610 var e = this.prerelease ? "-" + this.prerelease : "";
7611 return this.major + "." + this.minor + "." + this.patch + e + "+" + this.build
7612 },
7613 short: function() {
7614 var e = this.prerelease ? "-" + this.prerelease : "";
7615 return this.title + " (v" + this.major + "." + this.minor + "." + this.patch + e + ")"
7616 },
7617 long: function() {
7618 return this.title + " v" + this.toString() + " (" + this.date.toUTCString() + ")"
7619 }
7620 }),
7621 TempState = {},
7622 macros = {},
7623 postdisplay = {},
7624 postrender = {},
7625 predisplay = {},
7626 prehistory = {},
7627 prerender = {},
7628 session = null,
7629 settings = {},
7630 setup = {},
7631 storage = null,
7632 browser = Browser,
7633 config = Config,
7634 has = Has,
7635 History = State,
7636 state = State,
7637 tale = Story,
7638 TempVariables = State.temporary;
7639 window.SugarCube = {}, jQuery(function() {
7640 try {
7641 var e = LoadScreen.lock();
7642 LoadScreen.init(), document.normalize && document.normalize(), Story.load(), storage = SimpleStore.create(Story.domId, !0), session = SimpleStore.create(Story.domId, !1), Dialog.init(), UIBar.init(), Engine.init(), Story.init(), L10n.init(), session.has("rcWarn") || "cookie" !== storage.name || (session.set("rcWarn", 1), window.alert(L10n.get("warningNoWebStorage"))), Save.init(), Setting.init(), Macro.init(), Engine.start(), UIBar.start(), window.SugarCube = {
7643 Browser: Browser,
7644 Config: Config,
7645 Dialog: Dialog,
7646 DebugView: DebugView,
7647 Engine: Engine,
7648 Has: Has,
7649 L10n: L10n,
7650 Macro: Macro,
7651 Passage: Passage,
7652 Save: Save,
7653 Scripting: Scripting,
7654 Setting: Setting,
7655 SimpleAudio: SimpleAudio,
7656 State: State,
7657 Story: Story,
7658 UI: UI,
7659 UIBar: UIBar,
7660 Util: Util,
7661 Wikifier: Wikifier,
7662 macros: macros,
7663 session: session,
7664 settings: settings,
7665 setup: setup,
7666 storage: storage,
7667 version: version
7668 }, LoadScreen.unlock(e)
7669 } catch (e) {
7670 return LoadScreen.clear(), Alert.fatal(null, e.message, e)
7671 }
7672 })
7673 }(window, window.document, jQuery);
7674}