PageSourceSearch

https://smooth.fly.dev/showcase/assets/actiontext-c9c6c481.js

js smooth.fly.dev collected 2026-10-03 08:27:19 UTC 33,970 bytes, 965 lines download raw bytes

vendor: 33,970 bytes, lines 1-965
1(function(global, factory) {
2  typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define([ "exports" ], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, 
3  factory(global.ActionText = {}));
4})(this, (function(exports) {
5  "use strict";
6  var sparkMd5 = {
7    exports: {}
8  };
9  (function(module, exports) {
10    (function(factory) {
11      {
12        module.exports = factory();
13      }
14    })((function(undefined$1) {
15      var hex_chr = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" ];
16      function md5cycle(x, k) {
17        var a = x[0], b = x[1], c = x[2], d = x[3];
18        a += (b & c | ~b & d) + k[0] - 680876936 | 0;
19        a = (a << 7 | a >>> 25) + b | 0;
20        d += (a & b | ~a & c) + k[1] - 389564586 | 0;
21        d = (d << 12 | d >>> 20) + a | 0;
22        c += (d & a | ~d & b) + k[2] + 606105819 | 0;
23        c = (c << 17 | c >>> 15) + d | 0;
24        b += (c & d | ~c & a) + k[3] - 1044525330 | 0;
25        b = (b << 22 | b >>> 10) + c | 0;
26        a += (b & c | ~b & d) + k[4] - 176418897 | 0;
27        a = (a << 7 | a >>> 25) + b | 0;
28        d += (a & b | ~a & c) + k[5] + 1200080426 | 0;
29        d = (d << 12 | d >>> 20) + a | 0;
30        c += (d & a | ~d & b) + k[6] - 1473231341 | 0;
31        c = (c << 17 | c >>> 15) + d | 0;
32        b += (c & d | ~c & a) + k[7] - 45705983 | 0;
33        b = (b << 22 | b >>> 10) + c | 0;
34        a += (b & c | ~b & d) + k[8] + 1770035416 | 0;
35        a = (a << 7 | a >>> 25) + b | 0;
36        d += (a & b | ~a & c) + k[9] - 1958414417 | 0;
37        d = (d << 12 | d >>> 20) + a | 0;
38        c += (d & a | ~d & b) + k[10] - 42063 | 0;
39        c = (c << 17 | c >>> 15) + d | 0;
40        b += (c & d | ~c & a) + k[11] - 1990404162 | 0;
41        b = (b << 22 | b >>> 10) + c | 0;
42        a += (b & c | ~b & d) + k[12] + 1804603682 | 0;
43        a = (a << 7 | a >>> 25) + b | 0;
44        d += (a & b | ~a & c) + k[13] - 40341101 | 0;
45        d = (d << 12 | d >>> 20) + a | 0;
46        c += (d & a | ~d & b) + k[14] - 1502002290 | 0;
47        c = (c << 17 | c >>> 15) + d | 0;
48        b += (c & d | ~c & a) + k[15] + 1236535329 | 0;
49        b = (b << 22 | b >>> 10) + c | 0;
50        a += (b & d | c & ~d) + k[1] - 165796510 | 0;
51        a = (a << 5 | a >>> 27) + b | 0;
52        d += (a & c | b & ~c) + k[6] - 1069501632 | 0;
53        d = (d << 9 | d >>> 23) + a | 0;
54        c += (d & b | a & ~b) + k[11] + 643717713 | 0;
55        c = (c << 14 | c >>> 18) + d | 0;
56        b += (c & a | d & ~a) + k[0] - 373897302 | 0;
57        b = (b << 20 | b >>> 12) + c | 0;
58        a += (b & d | c & ~d) + k[5] - 701558691 | 0;
59        a = (a << 5 | a >>> 27) + b | 0;
60        d += (a & c | b & ~c) + k[10] + 38016083 | 0;
61        d = (d << 9 | d >>> 23) + a | 0;
62        c += (d & b | a & ~b) + k[15] - 660478335 | 0;
63        c = (c << 14 | c >>> 18) + d | 0;
64        b += (c & a | d & ~a) + k[4] - 405537848 | 0;
65        b = (b << 20 | b >>> 12) + c | 0;
66        a += (b & d | c & ~d) + k[9] + 568446438 | 0;
67        a = (a << 5 | a >>> 27) + b | 0;
68        d += (a & c | b & ~c) + k[14] - 1019803690 | 0;
69        d = (d << 9 | d >>> 23) + a | 0;
70        c += (d & b | a & ~b) + k[3] - 187363961 | 0;
71        c = (c << 14 | c >>> 18) + d | 0;
72        b += (c & a | d & ~a) + k[8] + 1163531501 | 0;
73        b = (b << 20 | b >>> 12) + c | 0;
74        a += (b & d | c & ~d) + k[13] - 1444681467 | 0;
75        a = (a << 5 | a >>> 27) + b | 0;
76        d += (a & c | b & ~c) + k[2] - 51403784 | 0;
77        d = (d << 9 | d >>> 23) + a | 0;
78        c += (d & b | a & ~b) + k[7] + 1735328473 | 0;
79        c = (c << 14 | c >>> 18) + d | 0;
80        b += (c & a | d & ~a) + k[12] - 1926607734 | 0;
81        b = (b << 20 | b >>> 12) + c | 0;
82        a += (b ^ c ^ d) + k[5] - 378558 | 0;
83        a = (a << 4 | a >>> 28) + b | 0;
84        d += (a ^ b ^ c) + k[8] - 2022574463 | 0;
85        d = (d << 11 | d >>> 21) + a | 0;
86        c += (d ^ a ^ b) + k[11] + 1839030562 | 0;
87        c = (c << 16 | c >>> 16) + d | 0;
88        b += (c ^ d ^ a) + k[14] - 35309556 | 0;
89        b = (b << 23 | b >>> 9) + c | 0;
90        a += (b ^ c ^ d) + k[1] - 1530992060 | 0;
91        a = (a << 4 | a >>> 28) + b | 0;
92        d += (a ^ b ^ c) + k[4] + 1272893353 | 0;
93        d = (d << 11 | d >>> 21) + a | 0;
94        c += (d ^ a ^ b) + k[7] - 155497632 | 0;
95        c = (c << 16 | c >>> 16) + d | 0;
96        b += (c ^ d ^ a) + k[10] - 1094730640 | 0;
97        b = (b << 23 | b >>> 9) + c | 0;
98        a += (b ^ c ^ d) + k[13] + 681279174 | 0;
99        a = (a << 4 | a >>> 28) + b | 0;
100        d += (a ^ b ^ c) + k[0] - 358537222 | 0;
101        d = (d << 11 | d >>> 21) + a | 0;
102        c += (d ^ a ^ b) + k[3] - 722521979 | 0;
103        c = (c << 16 | c >>> 16) + d | 0;
104        b += (c ^ d ^ a) + k[6] + 76029189 | 0;
105        b = (b << 23 | b >>> 9) + c | 0;
106        a += (b ^ c ^ d) + k[9] - 640364487 | 0;
107        a = (a << 4 | a >>> 28) + b | 0;
108        d += (a ^ b ^ c) + k[12] - 421815835 | 0;
109        d = (d << 11 | d >>> 21) + a | 0;
110        c += (d ^ a ^ b) + k[15] + 530742520 | 0;
111        c = (c << 16 | c >>> 16) + d | 0;
112        b += (c ^ d ^ a) + k[2] - 995338651 | 0;
113        b = (b << 23 | b >>> 9) + c | 0;
114        a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;
115        a = (a << 6 | a >>> 26) + b | 0;
116        d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;
117        d = (d << 10 | d >>> 22) + a | 0;
118        c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;
119        c = (c << 15 | c >>> 17) + d | 0;
120        b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;
121        b = (b << 21 | b >>> 11) + c | 0;
122        a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;
123        a = (a << 6 | a >>> 26) + b | 0;
124        d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;
125        d = (d << 10 | d >>> 22) + a | 0;
126        c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;
127        c = (c << 15 | c >>> 17) + d | 0;
128        b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;
129        b = (b << 21 | b >>> 11) + c | 0;
130        a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;
131        a = (a << 6 | a >>> 26) + b | 0;
132        d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;
133        d = (d << 10 | d >>> 22) + a | 0;
134        c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;
135        c = (c << 15 | c >>> 17) + d | 0;
136        b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;
137        b = (b << 21 | b >>> 11) + c | 0;
138        a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;
139        a = (a << 6 | a >>> 26) + b | 0;
140        d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;
141        d = (d << 10 | d >>> 22) + a | 0;
142        c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;
143        c = (c << 15 | c >>> 17) + d | 0;
144        b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;
145        b = (b << 21 | b >>> 11) + c | 0;
146        x[0] = a + x[0] | 0;
147        x[1] = b + x[1] | 0;
148        x[2] = c + x[2] | 0;
149        x[3] = d + x[3] | 0;
150      }
151      function md5blk(s) {
152        var md5blks = [], i;
153        for (i = 0; i < 64; i += 4) {
154          md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);
155        }
156        return md5blks;
157      }
158      function md5blk_array(a) {
159        var md5blks = [], i;
160        for (i = 0; i < 64; i += 4) {
161          md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);
162        }
163        return md5blks;
164      }
165      function md51(s) {
166        var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;
167        for (i = 64; i <= n; i += 64) {
168          md5cycle(state, md5blk(s.substring(i - 64, i)));
169        }
170        s = s.substring(i - 64);
171        length = s.length;
172        tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
173        for (i = 0; i < length; i += 1) {
174          tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);
175        }
176        tail[i >> 2] |= 128 << (i % 4 << 3);
177        if (i > 55) {
178          md5cycle(state, tail);
179          for (i = 0; i < 16; i += 1) {
180            tail[i] = 0;
181          }
182        }
183        tmp = n * 8;
184        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
185        lo = parseInt(tmp[2], 16);
186        hi = parseInt(tmp[1], 16) || 0;
187        tail[14] = lo;
188        tail[15] = hi;
189        md5cycle(state, tail);
190        return state;
191      }
192      function md51_array(a) {
193        var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;
194        for (i = 64; i <= n; i += 64) {
195          md5cycle(state, md5blk_array(a.subarray(i - 64, i)));
196        }
197        a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);
198        length = a.length;
199        tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
200        for (i = 0; i < length; i += 1) {
201          tail[i >> 2] |= a[i] << (i % 4 << 3);
202        }
203        tail[i >> 2] |= 128 << (i % 4 << 3);
204        if (i > 55) {
205          md5cycle(state, tail);
206          for (i = 0; i < 16; i += 1) {
207            tail[i] = 0;
208          }
209        }
210        tmp = n * 8;
211        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
212        lo = parseInt(tmp[2], 16);
213        hi = parseInt(tmp[1], 16) || 0;
214        tail[14] = lo;
215        tail[15] = hi;
216        md5cycle(state, tail);
217        return state;
218      }
219      function rhex(n) {
220        var s = "", j;
221        for (j = 0; j < 4; j += 1) {
222          s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];
223        }
224        return s;
225      }
226      function hex(x) {
227        var i;
228        for (i = 0; i < x.length; i += 1) {
229          x[i] = rhex(x[i]);
230        }
231        return x.join("");
232      }
233      if (hex(md51("hello")) !== "5d41402abc4b2a76b9719d911017c592") ;
234      if (typeof ArrayBuffer !== "undefined" && !ArrayBuffer.prototype.slice) {
235        (function() {
236          function clamp(val, length) {
237            val = val | 0 || 0;
238            if (val < 0) {
239              return Math.max(val + length, 0);
240            }
241            return Math.min(val, length);
242          }
243          ArrayBuffer.prototype.slice = function(from, to) {
244            var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;
245            if (to !== undefined$1) {
246              end = clamp(to, length);
247            }
248            if (begin > end) {
249              return new ArrayBuffer(0);
250            }
251            num = end - begin;
252            target = new ArrayBuffer(num);
253            targetArray = new Uint8Array(target);
254            sourceArray = new Uint8Array(this, begin, num);
255            targetArray.set(sourceArray);
256            return target;
257          };
258        })();
259      }
260      function toUtf8(str) {
261        if (/[\u0080-\uFFFF]/.test(str)) {
262          str = unescape(encodeURIComponent(str));
263        }
264        return str;
265      }
266      function utf8Str2ArrayBuffer(str, returnUInt8Array) {
267        var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;
268        for (i = 0; i < length; i += 1) {
269          arr[i] = str.charCodeAt(i);
270        }
271        return returnUInt8Array ? arr : buff;
272      }
273      function arrayBuffer2Utf8Str(buff) {
274        return String.fromCharCode.apply(null, new Uint8Array(buff));
275      }
276      function concatenateArrayBuffers(first, second, returnUInt8Array) {
277        var result = new Uint8Array(first.byteLength + second.byteLength);
278        result.set(new Uint8Array(first));
279        result.set(new Uint8Array(second), first.byteLength);
280        return returnUInt8Array ? result : result.buffer;
281      }
282      function hexToBinaryString(hex) {
283        var bytes = [], length = hex.length, x;
284        for (x = 0; x < length - 1; x += 2) {
285          bytes.push(parseInt(hex.substr(x, 2), 16));
286        }
287        return String.fromCharCode.apply(String, bytes);
288      }
289      function SparkMD5() {
290        this.reset();
291      }
292      SparkMD5.prototype.append = function(str) {
293        this.appendBinary(toUtf8(str));
294        return this;
295      };
296      SparkMD5.prototype.appendBinary = function(contents) {
297        this._buff += contents;
298        this._length += contents.length;
299        var length = this._buff.length, i;
300        for (i = 64; i <= length; i += 64) {
301          md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));
302        }
303        this._buff = this._buff.substring(i - 64);
304        return this;
305      };
306      SparkMD5.prototype.end = function(raw) {
307        var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;
308        for (i = 0; i < length; i += 1) {
309          tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);
310        }
311        this._finish(tail, length);
312        ret = hex(this._hash);
313        if (raw) {
314          ret = hexToBinaryString(ret);
315        }
316        this.reset();
317        return ret;
318      };
319      SparkMD5.prototype.reset = function() {
320        this._buff = "";
321        this._length = 0;
322        this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];
323        return this;
324      };
325      SparkMD5.prototype.getState = function() {
326        return {
327          buff: this._buff,
328          length: this._length,
329          hash: this._hash.slice()
330        };
331      };
332      SparkMD5.prototype.setState = function(state) {
333        this._buff = state.buff;
334        this._length = state.length;
335        this._hash = state.hash;
336        return this;
337      };
338      SparkMD5.prototype.destroy = function() {
339        delete this._hash;
340        delete this._buff;
341        delete this._length;
342      };
343      SparkMD5.prototype._finish = function(tail, length) {
344        var i = length, tmp, lo, hi;
345        tail[i >> 2] |= 128 << (i % 4 << 3);
346        if (i > 55) {
347          md5cycle(this._hash, tail);
348          for (i = 0; i < 16; i += 1) {
349            tail[i] = 0;
350          }
351        }
352        tmp = this._length * 8;
353        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
354        lo = parseInt(tmp[2], 16);
355        hi = parseInt(tmp[1], 16) || 0;
356        tail[14] = lo;
357        tail[15] = hi;
358        md5cycle(this._hash, tail);
359      };
360      SparkMD5.hash = function(str, raw) {
361        return SparkMD5.hashBinary(toUtf8(str), raw);
362      };
363      SparkMD5.hashBinary = function(content, raw) {
364        var hash = md51(content), ret = hex(hash);
365        return raw ? hexToBinaryString(ret) : ret;
366      };
367      SparkMD5.ArrayBuffer = function() {
368        this.reset();
369      };
370      SparkMD5.ArrayBuffer.prototype.append = function(arr) {
371        var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;
372        this._length += arr.byteLength;
373        for (i = 64; i <= length; i += 64) {
374          md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));
375        }
376        this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);
377        return this;
378      };
379      SparkMD5.ArrayBuffer.prototype.end = function(raw) {
380        var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;
381        for (i = 0; i < length; i += 1) {
382          tail[i >> 2] |= buff[i] << (i % 4 << 3);
383        }
384        this._finish(tail, length);
385        ret = hex(this._hash);
386        if (raw) {
387          ret = hexToBinaryString(ret);
388        }
389        this.reset();
390        return ret;
391      };
392      SparkMD5.ArrayBuffer.prototype.reset = function() {
393        this._buff = new Uint8Array(0);
394        this._length = 0;
395        this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];
396        return this;
397      };
398      SparkMD5.ArrayBuffer.prototype.getState = function() {
399        var state = SparkMD5.prototype.getState.call(this);
400        state.buff = arrayBuffer2Utf8Str(state.buff);
401        return state;
402      };
403      SparkMD5.ArrayBuffer.prototype.setState = function(state) {
404        state.buff = utf8Str2ArrayBuffer(state.buff, true);
405        return SparkMD5.prototype.setState.call(this, state);
406      };
407      SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;
408      SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;
409      SparkMD5.ArrayBuffer.hash = function(arr, raw) {
410        var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);
411        return raw ? hexToBinaryString(ret) : ret;
412      };
413      return SparkMD5;
414    }));
415  })(sparkMd5);
416  var SparkMD5 = sparkMd5.exports;
417  const fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;
418  class FileChecksum {
419    static create(file, callback) {
420      const instance = new FileChecksum(file);
421      instance.create(callback);
422    }
423    constructor(file) {
424      this.file = file;
425      this.chunkSize = 2097152;
426      this.chunkCount = Math.ceil(this.file.size / this.chunkSize);
427      this.chunkIndex = 0;
428    }
429    create(callback) {
430      this.callback = callback;
431      this.md5Buffer = new SparkMD5.ArrayBuffer;
432      this.fileReader = new FileReader;
433      this.fileReader.addEventListener("load", (event => this.fileReaderDidLoad(event)));
434      this.fileReader.addEventListener("error", (event => this.fileReaderDidError(event)));
435      this.readNextChunk();
436    }
437    fileReaderDidLoad(event) {
438      this.md5Buffer.append(event.target.result);
439      if (!this.readNextChunk()) {
440        const binaryDigest = this.md5Buffer.end(true);
441        const base64digest = btoa(binaryDigest);
442        this.callback(null, base64digest);
443      }
444    }
445    fileReaderDidError(event) {
446      this.callback(`Error reading ${this.file.name}`);
447    }
448    readNextChunk() {
449      if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {
450        const start = this.chunkIndex * this.chunkSize;
451        const end = Math.min(start + this.chunkSize, this.file.size);
452        const bytes = fileSlice.call(this.file, start, end);
453        this.fileReader.readAsArrayBuffer(bytes);
454        this.chunkIndex++;
455        return true;
456      } else {
457        return false;
458      }
459    }
460  }
461  function getMetaValue(name) {
462    const element = findElement(document.head, `meta[name="${name}"]`);
463    if (element) {
464      return element.getAttribute("content");
465    }
466  }
467  function findElements(root, selector) {
468    if (typeof root == "string") {
469      selector = root;
470      root = document;
471    }
472    const elements = root.querySelectorAll(selector);
473    return toArray(elements);
474  }
475  function findElement(root, selector) {
476    if (typeof root == "string") {
477      selector = root;
478      root = document;
479    }
480    return root.querySelector(selector);
481  }
482  function dispatchEvent(element, type, eventInit = {}) {
483    const {disabled: disabled} = element;
484    const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;
485    const event = document.createEvent("Event");
486    event.initEvent(type, bubbles || true, cancelable || true);
487    event.detail = detail || {};
488    try {
489      element.disabled = false;
490      element.dispatchEvent(event);
491    } finally {
492      element.disabled = disabled;
493    }
494    return event;
495  }
496  function toArray(value) {
497    if (Array.isArray(value)) {
498      return value;
499    } else if (Array.from) {
500      return Array.from(value);
501    } else {
502      return [].slice.call(value);
503    }
504  }
505  class BlobRecord {
506    constructor(file, checksum, url, customHeaders = {}) {
507      this.file = file;
508      this.attributes = {
509        filename: file.name,
510        content_type: file.type || "application/octet-stream",
511        byte_size: file.size,
512        checksum: checksum
513      };
514      this.xhr = new XMLHttpRequest;
515      this.xhr.open("POST", url, true);
516      this.xhr.responseType = "json";
517      this.xhr.setRequestHeader("Content-Type", "application/json");
518      this.xhr.setRequestHeader("Accept", "application/json");
519      this.xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
520      Object.keys(customHeaders).forEach((headerKey => {
521        this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);
522      }));
523      const csrfToken = getMetaValue("csrf-token");
524      if (csrfToken != undefined) {
525        this.xhr.setRequestHeader("X-CSRF-Token", csrfToken);
526      }
527      this.xhr.addEventListener("load", (event => this.requestDidLoad(event)));
528      this.xhr.addEventListener("error", (event => this.requestDidError(event)));
529    }
530    get status() {
531      return this.xhr.status;
532    }
533    get response() {
534      const {responseType: responseType, response: response} = this.xhr;
535      if (responseType == "json") {
536        return response;
537      } else {
538        return JSON.parse(response);
539      }
540    }
541    create(callback) {
542      this.callback = callback;
543      this.xhr.send(JSON.stringify({
544        blob: this.attributes
545      }));
546    }
547    requestDidLoad(event) {
548      if (this.status >= 200 && this.status < 300) {
549        const {response: response} = this;
550        const {direct_upload: direct_upload} = response;
551        delete response.direct_upload;
552        this.attributes = response;
553        this.directUploadData = direct_upload;
554        this.callback(null, this.toJSON());
555      } else {
556        this.requestDidError(event);
557      }
558    }
559    requestDidError(event) {
560      this.callback(`Error creating Blob for "${this.file.name}". Status: ${this.status}`);
561    }
562    toJSON() {
563      const result = {};
564      for (const key in this.attributes) {
565        result[key] = this.attributes[key];
566      }
567      return result;
568    }
569  }
570  class BlobUpload {
571    constructor(blob) {
572      this.blob = blob;
573      this.file = blob.file;
574      const {url: url, headers: headers} = blob.directUploadData;
575      this.xhr = new XMLHttpRequest;
576      this.xhr.open("PUT", url, true);
577      this.xhr.responseType = "text";
578      for (const key in headers) {
579        this.xhr.setRequestHeader(key, headers[key]);
580      }
581      this.xhr.addEventListener("load", (event => this.requestDidLoad(event)));
582      this.xhr.addEventListener("error", (event => this.requestDidError(event)));
583    }
584    create(callback) {
585      this.callback = callback;
586      this.xhr.send(this.file.slice());
587    }
588    requestDidLoad(event) {
589      const {status: status, response: response} = this.xhr;
590      if (status >= 200 && status < 300) {
591        this.callback(null, response);
592      } else {
593        this.requestDidError(event);
594      }
595    }
596    requestDidError(event) {
597      this.callback(`Error storing "${this.file.name}". Status: ${this.xhr.status}`);
598    }
599  }
600  let id = 0;
601  class DirectUpload {
602    constructor(file, url, delegate, customHeaders = {}) {
603      this.id = ++id;
604      this.file = file;
605      this.url = url;
606      this.delegate = delegate;
607      this.customHeaders = customHeaders;
608    }
609    create(callback) {
610      FileChecksum.create(this.file, ((error, checksum) => {
611        if (error) {
612          callback(error);
613          return;
614        }
615        const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);
616        notify(this.delegate, "directUploadWillCreateBlobWithXHR", blob.xhr);
617        blob.create((error => {
618          if (error) {
619            callback(error);
620          } else {
621            const upload = new BlobUpload(blob);
622            notify(this.delegate, "directUploadWillStoreFileWithXHR", upload.xhr);
623            upload.create((error => {
624              if (error) {
625                callback(error);
626              } else {
627                callback(null, blob.toJSON());
628              }
629            }));
630          }
631        }));
632      }));
633    }
634  }
635  function notify(object, methodName, ...messages) {
636    if (object && typeof object[methodName] == "function") {
637      return object[methodName](...messages);
638    }
639  }
640  class DirectUploadController {
641    constructor(input, file) {
642      this.input = input;
643      this.file = file;
644      this.directUpload = new DirectUpload(this.file, this.url, this);
645      this.dispatch("initialize");
646    }
647    start(callback) {
648      const hiddenInput = document.createElement("input");
649      hiddenInput.type = "hidden";
650      hiddenInput.name = this.input.name;
651      this.input.insertAdjacentElement("beforebegin", hiddenInput);
652      this.dispatch("start");
653      this.directUpload.create(((error, attributes) => {
654        if (error) {
655          hiddenInput.parentNode.removeChild(hiddenInput);
656          this.dispatchError(error);
657        } else {
658          hiddenInput.value = attributes.signed_id;
659        }
660        this.dispatch("end");
661        callback(error);
662      }));
663    }
664    uploadRequestDidProgress(event) {
665      const progress = event.loaded / event.total * 90;
666      if (progress) {
667        this.dispatch("progress", {
668          progress: progress
669        });
670      }
671    }
672    get url() {
673      return this.input.getAttribute("data-direct-upload-url");
674    }
675    dispatch(name, detail = {}) {
676      detail.file = this.file;
677      detail.id = this.directUpload.id;
678      return dispatchEvent(this.input, `direct-upload:${name}`, {
679        detail: detail
680      });
681    }
682    dispatchError(error) {
683      const event = this.dispatch("error", {
684        error: error
685      });
686      if (!event.defaultPrevented) {
687        alert(error);
688      }
689    }
690    directUploadWillCreateBlobWithXHR(xhr) {
691      this.dispatch("before-blob-request", {
692        xhr: xhr
693      });
694    }
695    directUploadWillStoreFileWithXHR(xhr) {
696      this.dispatch("before-storage-request", {
697        xhr: xhr
698      });
699      xhr.upload.addEventListener("progress", (event => this.uploadRequestDidProgress(event)));
700      xhr.upload.addEventListener("loadend", (() => {
701        this.simulateResponseProgress(xhr);
702      }));
703    }
704    simulateResponseProgress(xhr) {
705      let progress = 90;
706      const startTime = Date.now();
707      const updateProgress = () => {
708        const elapsed = Date.now() - startTime;
709        const estimatedResponseTime = this.estimateResponseTime();
710        const responseProgress = Math.min(elapsed / estimatedResponseTime, 1);
711        progress = 90 + responseProgress * 9;
712        this.dispatch("progress", {
713          progress: progress
714        });
715        if (xhr.readyState !== XMLHttpRequest.DONE && progress < 99) {
716          requestAnimationFrame(updateProgress);
717        }
718      };
719      xhr.addEventListener("loadend", (() => {
720        this.dispatch("progress", {
721          progress: 100
722        });
723      }));
724      requestAnimationFrame(updateProgress);
725    }
726    estimateResponseTime() {
727      const fileSize = this.file.size;
728      const MB = 1024 * 1024;
729      if (fileSize < MB) {
730        return 1e3;
731      } else if (fileSize < 10 * MB) {
732        return 2e3;
733      } else {
734        return 3e3 + fileSize / MB * 50;
735      }
736    }
737  }
738  const inputSelector = "input[type=file][data-direct-upload-url]:not([disabled])";
739  class DirectUploadsController {
740    constructor(form) {
741      this.form = form;
742      this.inputs = findElements(form, inputSelector).filter((input => input.files.length));
743    }
744    start(callback) {
745      const controllers = this.createDirectUploadControllers();
746      const startNextController = () => {
747        const controller = controllers.shift();
748        if (controller) {
749          controller.start((error => {
750            if (error) {
751              callback(error);
752              this.dispatch("end");
753            } else {
754              startNextController();
755            }
756          }));
757        } else {
758          callback();
759          this.dispatch("end");
760        }
761      };
762      this.dispatch("start");
763      startNextController();
764    }
765    createDirectUploadControllers() {
766      const controllers = [];
767      this.inputs.forEach((input => {
768        toArray(input.files).forEach((file => {
769          const controller = new DirectUploadController(input, file);
770          controllers.push(controller);
771        }));
772      }));
773      return controllers;
774    }
775    dispatch(name, detail = {}) {
776      return dispatchEvent(this.form, `direct-uploads:${name}`, {
777        detail: detail
778      });
779    }
780  }
781  const processingAttribute = "data-direct-uploads-processing";
782  const submitButtonsByForm = new WeakMap;
783  let started = false;
784  function start() {
785    if (!started) {
786      started = true;
787      document.addEventListener("click", didClick, true);
788      document.addEventListener("submit", didSubmitForm, true);
789      document.addEventListener("ajax:before", didSubmitRemoteElement);
790    }
791  }
792  function didClick(event) {
793    const button = event.target.closest("button, input");
794    if (button && button.type === "submit" && button.form) {
795      submitButtonsByForm.set(button.form, button);
796    }
797  }
798  function didSubmitForm(event) {
799    handleFormSubmissionEvent(event);
800  }
801  function didSubmitRemoteElement(event) {
802    if (event.target.tagName == "FORM") {
803      handleFormSubmissionEvent(event);
804    }
805  }
806  function handleFormSubmissionEvent(event) {
807    const form = event.target;
808    if (form.hasAttribute(processingAttribute)) {
809      event.preventDefault();
810      return;
811    }
812    const controller = new DirectUploadsController(form);
813    const {inputs: inputs} = controller;
814    if (inputs.length) {
815      event.preventDefault();
816      form.setAttribute(processingAttribute, "");
817      inputs.forEach(disable);
818      controller.start((error => {
819        form.removeAttribute(processingAttribute);
820        if (error) {
821          inputs.forEach(enable);
822        } else {
823          submitForm(form);
824        }
825      }));
826    }
827  }
828  function submitForm(form) {
829    let button = submitButtonsByForm.get(form) || findElement(form, "input[type=submit], button[type=submit]");
830    if (button) {
831      const {disabled: disabled} = button;
832      button.disabled = false;
833      button.focus();
834      button.click();
835      button.disabled = disabled;
836    } else {
837      button = document.createElement("input");
838      button.type = "submit";
839      button.style.display = "none";
840      form.appendChild(button);
841      button.click();
842      form.removeChild(button);
843    }
844    submitButtonsByForm.delete(form);
845  }
846  function disable(input) {
847    input.disabled = true;
848  }
849  function enable(input) {
850    input.disabled = false;
851  }
852  function autostart() {
853    if (window.ActiveStorage) {
854      start();
855    }
856  }
857  setTimeout(autostart, 1);
858  class AttachmentUpload {
859    constructor(attachment, element, file = attachment.file) {
860      this.attachment = attachment;
861      this.element = element;
862      this.directUpload = new DirectUpload(file, this.directUploadUrl, this);
863      this.file = file;
864    }
865    start() {
866      return new Promise(((resolve, reject) => {
867        this.directUpload.create(((error, attributes) => this.directUploadDidComplete(error, attributes, resolve, reject)));
868        this.dispatch("start");
869      }));
870    }
871    directUploadWillStoreFileWithXHR(xhr) {
872      xhr.upload.addEventListener("progress", (event => {
873        const progress = event.loaded / event.total * 90;
874        if (progress) {
875          this.dispatch("progress", {
876            progress: progress
877          });
878        }
879      }));
880      xhr.upload.addEventListener("loadend", (() => {
881        this.simulateResponseProgress(xhr);
882      }));
883    }
884    simulateResponseProgress(xhr) {
885      let progress = 90;
886      const startTime = Date.now();
887      const updateProgress = () => {
888        const elapsed = Date.now() - startTime;
889        const estimatedResponseTime = this.estimateResponseTime();
890        const responseProgress = Math.min(elapsed / estimatedResponseTime, 1);
891        progress = 90 + responseProgress * 9;
892        this.dispatch("progress", {
893          progress: progress
894        });
895        if (xhr.readyState !== XMLHttpRequest.DONE && progress < 99) {
896          requestAnimationFrame(updateProgress);
897        }
898      };
899      xhr.addEventListener("loadend", (() => {
900        this.dispatch("progress", {
901          progress: 100
902        });
903      }));
904      requestAnimationFrame(updateProgress);
905    }
906    estimateResponseTime() {
907      const fileSize = this.file.size;
908      const MB = 1024 * 1024;
909      if (fileSize < MB) {
910        return 1e3;
911      } else if (fileSize < 10 * MB) {
912        return 2e3;
913      } else {
914        return 3e3 + fileSize / MB * 50;
915      }
916    }
917    directUploadDidComplete(error, attributes, resolve, reject) {
918      if (error) {
919        this.dispatchError(error, reject);
920      } else {
921        resolve({
922          sgid: attributes.attachable_sgid,
923          url: this.createBlobUrl(attributes.signed_id, attributes.filename)
924        });
925        this.dispatch("end");
926      }
927    }
928    createBlobUrl(signedId, filename) {
929      return this.blobUrlTemplate.replace(":signed_id", signedId).replace(":filename", encodeURIComponent(filename));
930    }
931    dispatch(name, detail = {}) {
932      detail.attachment = this.attachment;
933      return dispatchEvent(this.element, `direct-upload:${name}`, {
934        detail: detail
935      });
936    }
937    dispatchError(error, reject) {
938      const event = this.dispatch("error", {
939        error: error
940      });
941      if (!event.defaultPrevented) {
942        reject(error);
943      }
944    }
945    get directUploadUrl() {
946      return this.element.dataset.directUploadUrl;
947    }
948    get blobUrlTemplate() {
949      return this.element.dataset.blobUrlTemplate;
950    }
951  }
952  addEventListener("trix-attachment-add", (event => {
953    const {attachment: attachment, target: target} = event;
954    if (attachment.file) {
955      const upload = new AttachmentUpload(attachment, target, attachment.file);
956      const onProgress = event => attachment.setUploadProgress(event.detail.progress);
957      target.addEventListener("direct-upload:progress", onProgress);
958      upload.start().then((attributes => attachment.setAttributes(attributes))).catch((error => alert(error))).finally((() => target.removeEventListener("direct-upload:progress", onProgress)));
959    }
960  }));
961  exports.AttachmentUpload = AttachmentUpload;
962  Object.defineProperty(exports, "__esModule", {
963    value: true
964  });
965}));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.