1 2/* cached asset-dump98e6a8b281a9cba7430393cd9c2d0c670ee2c0fd: */ 3var forge = forge || {}; 4forge.blockCallback = function(block, action, callbackFunc) { 5 var obj = { 6 id: block.id, 7 action: action, 8 uri: block.callbackUri + "/" + action, 9 requestPath: window.location.pathname 10 }; 11 return callbackFunc.apply(obj); 12}; 13forge.requestData = function(data) { 14 data = data || {}; 15 data.userId = forge.user ? forge.user.id : null; 16 data.pageId = forge.page ? forge.page.id : null; 17 data.requestPath = window.location.pathname; 18 return data; 19}; 20/* cached asset-dump3a6b47b928e4d08a23a7352f39ccff16dfd93e58: */ 21"use strict"; 22 23function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } 24function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } 25function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 26function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } 27function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } 28function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } }
vendor: 14,395 bytes, lines 28-37
28 }; } 29function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; } 30function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } 31function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } 32function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } 33function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 34function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } 35function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } 36function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } } 37function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
38function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 39(function () { 40 var __data_block_id = 11679817; 41 var __block_id = "djfUg"; 42 var foundBlockNode = document.getElementsByClassName("f_" + __block_id).length > 0; 43 if (!foundBlockNode) { 44 var templates = document.querySelectorAll('template'); 45 for (var i = 0; i < templates.length; i++) { 46 if (templates[i].content.querySelector('.f_' + __block_id)) { 47 foundBlockNode = true; 48 break; 49 } 50 } 51 } 52 if (foundBlockNode) { 53 var ready = function ready(counter) { 54 if (!('__forgePageBlockData' in window) || !(__data_block_id in __forgePageBlockData)) { 55 if (counter == 10) { 56 throw Error("Giving up waiting for block data"); 57 return; 58 } 59 return setTimeout(function () { 60 ready(counter + 1); 61 }, 250); 62 } 63 if (typeof __forgePageBlockData[__data_block_id] == 'number') { 64 __forgePageBlockData[__data_block_id] = __forgePageBlockData[__forgePageBlockData[__data_block_id]] || {}; 65 } 66 var useCaptcha = __forgePageBlockData[__data_block_id].useCaptcha; 67 var objectModelMap = __forgePageBlockData[__data_block_id].objectModelMap; 68 var form = __forgePageBlockData[__data_block_id].form; 69 var form_id = __forgePageBlockData[__data_block_id].form_id; 70 var form_settings = __forgePageBlockData[__data_block_id].form_settings; 71 var form_fields = __forgePageBlockData[__data_block_id].form_fields; 72 var form_structure = __forgePageBlockData[__data_block_id].form_structure; 73 var form_google_maps_enabled = __forgePageBlockData[__data_block_id].form_google_maps_enabled; 74 var form_has_google_maps_api_key = __forgePageBlockData[__data_block_id].form_has_google_maps_api_key; 75 var conversion_meta = __forgePageBlockData[__data_block_id].conversion_meta; 76 var button = __forgePageBlockData[__data_block_id].button; 77 var centerButtons = __forgePageBlockData[__data_block_id].centerButtons; 78 var buttonColumnSpan = __forgePageBlockData[__data_block_id].buttonColumnSpan; 79 var prevPageButton = __forgePageBlockData[__data_block_id].prevPageButton; 80 var nextPageButton = __forgePageBlockData[__data_block_id].nextPageButton; 81 var showLabels = __forgePageBlockData[__data_block_id].showLabels; 82 var showPlaceholders = __forgePageBlockData[__data_block_id].showPlaceholders; 83 var showPageNumbers = __forgePageBlockData[__data_block_id].showPageNumbers; 84 var _block = __forgePageBlockData[__data_block_id]._block; 85 var _page = __forgePageBlockData[__data_block_id]._page; 86 var _ts = __forgePageBlockData[__data_block_id]._ts; 87 var _elements = __forgePageBlockData[__data_block_id]._elements; 88 var block = { 89 id: "11679817", 90 callbackUri: "/_/b/11679817" 91 }; 92 var call = function call(action, callbackFunc) { 93 return forge.blockCallback(block, action, callbackFunc); 94 }; 95 var callback = function callback(action, data) { 96 return call(action, function () { 97 data = withData(data || {}); 98 99 // check if any of the formData is a File or Blob 100 var isFile = false; 101 for (var key in data) { 102 if (!isFile && data[key]) { 103 var arr = Array.isArray(data[key]) ? data[key] : [data[key]]; 104 for (var i = 0; i < arr.length; i++) { 105 if (arr[i] === Object(arr[i]) && (arr[i].constructor == File || arr[i].constructor === Blob)) { 106 isFile = true; 107 break; 108 } 109 } 110 } 111 } 112 if (isFile) { 113 var formData = new FormData(); 114 for (var key in data) { 115 if (data[key] && (Array.isArray(data[key]) || data[key] === Object(data[key])) && data[key].constructor !== File && data[key].constructor !== Blob) { 116 for (var idx in data[key]) { 117 formData.append(key + '[' + idx + ']', data[key][idx]); 118 } 119 } else { 120 formData.append(key, data[key]); 121 } 122 } 123 return axios.post(this.uri, formData, { 124 headers: { 125 'Content-Type': 'multipart/form-data', 126 'X-Lazy-Load': 'off' 127 } 128 }); 129 } else { 130 return axios.post(this.uri, data, { 131 headers: { 132 'X-Lazy-Load': 'off' 133 } 134 }); 135 } 136 }); 137 }; 138 var withData = function withData(data) { 139 return forge.requestData(data); 140 }; 141 142 /** 143 * This script relies on the BladeScript functionality which is scoped automatically (providing form_id, form_fields and optionally conversion_meta) 144 */ 145 146 //window.forgeForms = window.forgeForms || {} 147 148 // Wrap in IIFE to handle both pre-Alpine and post-Alpine loading scenarios 149 (function () { 150 var form = function form() { 151 return { 152 formInitilized: new Date().getTime(), 153 timeoutCounter: 0, 154 autocompleteTimeoutCounter: 0, 155 input: form_fields, 156 successMessage: "", 157 successRedirect: "", 158 errorMessage: "", 159 sending: false, 160 recaptchaWidgetId: null, 161 currentPage: 1, 162 numberOfPages: _typeof(form_settings) === 'object' && form_settings && 'pages' in form_settings ? form_settings.pages : 1, 163 formStructure: typeof form_structure !== 'undefined' ? form_structure : {},
164 init: function init() { 165 var _this = this; 166 this.$nextTick(function () { 167 _this.initializeAddressFields(); 168 _this.initializeGoogleAutocomplete(); 169 setTimeout(function () { 170 if (_this.$refs.captchaButton) { 171 if (!_this.recaptchaScriptExists()) { 172 _this.loadRecaptcha(); 173 } 174 _this.initRecaptcha(); 175 } 176 }, 3000); 177 }); 178 }, 179 initializeAddressFields: function initializeAddressFields() { 180 var _this2 = this; 181 if (!this.formStructure) return; 182 Object.entries(this.formStructure).forEach(function (_ref) { 183 var _ref2 = _slicedToArray(_ref, 2), 184 slug = _ref2[0], 185 type = _ref2[1]; 186 if (type === 'address') { 187 if (!_this2.input[slug] || _typeof(_this2.input[slug]) !== 'object') { 188 _this2.input[slug] = { 189 line1: '', 190 line2: '', 191 city: '', 192 state: '', 193 postalCode: '', 194 country: '', 195 fullAddress: '' 196 }; 197 } else { 198 // Ensure fullAddress is present if object exists but incomplete 199 if (!('fullAddress' in _this2.input[slug])) { 200 _this2.input[slug].fullAddress = ''; 201 } 202 } 203 } 204 }); 205 }, 206 initializeGoogleAutocomplete: function initializeGoogleAutocomplete() { 207 var _this3 = this, 208 _this$$refs$addressAu, 209 _this$$refs$addressAu2, 210 _this$$refs$addressAu3; 211 this.autocompleteTimeoutCounter++; 212 213 // Give up after 120 attempts (60 seconds at 500ms intervals) 214 if (this.autocompleteTimeoutCounter > 120) { 215 console.warn('Google Maps API not available for address autocomplete'); 216 return; 217 } 218 219 // Check if Google Maps API is loaded 220 if (typeof google === 'undefined' || typeof google.maps === 'undefined' || typeof google.maps.places === 'undefined') { 221 setTimeout(function () { 222 _this3.initializeGoogleAutocomplete(); 223 }, 500); 224 return; 225 } 226 227 // Find all address input fields in this form 228 var addressInputs = this.$el.querySelectorAll('input[data-address="true"]'); 229 230 // Capture the Alpine component context 231 var alpineComponent = this; 232 233 // Get style templates 234 var dropdownStyles = ((_this$$refs$addressAu = this.$refs.addressAutocompleteDropdownStyles) === null || _this$$refs$addressAu === void 0 ? void 0 : _this$$refs$addressAu.classList) || null; 235 var itemStyles = ((_this$$refs$addressAu2 = this.$refs.addressAutocompleteItemStyles) === null || _this$$refs$addressAu2 === void 0 ? void 0 : _this$$refs$addressAu2.classList) || null; 236 var itemSelectedStyles = ((_this$$refs$addressAu3 = this.$refs.addressAutocompleteItemSelectedStyles) === null || _this$$refs$addressAu3 === void 0 ? void 0 : _this$$refs$addressAu3.classList) || null; 237 addressInputs.forEach(function (input) { 238 var slug = input.dataset.slug; 239 if (!slug) return; 240 241 // Create dropdown container for suggestions 242 var dropdown = document.createElement('div'); 243 // Apply classes from template or fallback to defaults 244 if (dropdownStyles) { 245 dropdown.className = Array.from(dropdownStyles).join(' ') + ' hidden'; 246 } else { 247 dropdown.className = 'absolute z-50 w-full mt-1 bg-white border border-gray-300 rounded-md shadow-lg max-h-60 overflow-auto hidden'; 248 } 249 dropdown.setAttribute('role', 'listbox'); 250 251 // Position dropdown relative to input's parent 252 var parent = input.parentElement; 253 if (parent && window.getComputedStyle(parent).position === 'static') { 254 parent.style.position = 'relative'; 255 } 256 parent.appendChild(dropdown); 257 var debounceTimer; 258 var currentSuggestions = []; 259 var selectedIndex = -1; 260 261 // Handle input changes 262 input.addEventListener('input', /*#__PURE__*/function () { 263 var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(e) { 264 var value; 265 return _regeneratorRuntime().wrap(function _callee3$(_context3) { 266 while (1) { 267 switch (_context3.prev = _context3.next) { 268 case 0: 269 value = e.target.value; // Clear previous timer 270 clearTimeout(debounceTimer); 271 if (!(!value || value.length < 3)) { 272 _context3.next = 7; 273 break; 274 } 275 dropdown.classList.add('hidden'); 276 currentSuggestions = []; 277 selectedIndex = -1; 278 return _context3.abrupt("return"); 279 case 7: 280 // Debounce the API call 281 debounceTimer = setTimeout( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { 282 var request, _yield$google$maps$pl, suggestions; 283 return _regeneratorRuntime().wrap(function _callee2$(_context2) { 284 while (1) { 285 switch (_context2.prev = _context2.next) { 286 case 0: 287 _context2.prev = 0; 288 request = { 289 input: value, 290 includedPrimaryTypes: ['geocode'], 291 language: 'en' 292 }; 293 _context2.next = 4; 294 return google.maps.places.AutocompleteSuggestion.fetchAutocompleteSuggestions(request); 295 case 4: 296 _yield$google$maps$pl = _context2.sent; 297 suggestions = _yield$google$maps$pl.suggestions; 298 currentSuggestions = suggestions || []; 299 selectedIndex = -1; 300 if (currentSuggestions.length) { 301 _context2.next = 11; 302 break; 303 } 304 dropdown.classList.add('hidden'); 305 return _context2.abrupt("return"); 306 case 11: 307 // Build dropdown UI with classes from templates 308 dropdown.innerHTML = ''; 309 currentSuggestions.forEach(function (suggestion, index) { 310 var item = document.createElement('div'); 311 // Apply classes from template or fallback to defaults 312 if (itemStyles) { 313 item.className = Array.from(itemStyles).join(' '); 314 } else { 315 item.className = 'px-4 py-3 cursor-pointer hover:bg-gray-100 border-b border-gray-100 last:border-b-0'; 316 } 317 item.setAttribute('role', 'option'); 318 item.setAttribute('data-index', index); 319 item.textContent = suggestion.placePrediction.text.toString(); 320 321 // Handle click selection 322 item.addEventListener('click', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() { 323 return _regeneratorRuntime().wrap(function _callee$(_context) { 324 while (1) { 325 switch (_context.prev = _context.next) { 326 case 0: 327 _context.next = 2; 328 return handlePlaceSelection(suggestion.placePrediction); 329 case 2: 330 case "end": 331 return _context.stop(); 332 } 333 } 334 }, _callee); 335 }))); 336 dropdown.appendChild(item); 337 }); 338 dropdown.classList.remove('hidden'); 339 _context2.next = 20; 340 break; 341 case 16: 342 _context2.prev = 16; 343 _context2.t0 = _context2["catch"](0); 344 console.error('Error fetching autocomplete suggestions:', _context2.t0); 345 dropdown.classList.add('hidden'); 346 case 20: 347 case "end": 348 return _context2.stop(); 349 } 350 } 351 }, _callee2, null, [[0, 16]]); 352 })), 300); 353 case 8: 354 case "end": 355 return _context3.stop(); 356 } 357 } 358 }, _callee3); 359 })); 360 return function (_x2) { 361 return _ref3.apply(this, arguments); 362 }; 363 }()); 364 365 // Handle keyboard navigation 366 input.addEventListener('keydown', /*#__PURE__*/function () { 367 var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(e) { 368 var items; 369 return _regeneratorRuntime().wrap(function _callee4$(_context4) { 370 while (1) { 371 switch (_context4.prev = _context4.next) { 372 case 0: 373 items = dropdown.querySelectorAll('[role="option"]'); 374 if (!(e.key === 'ArrowDown')) { 375 _context4.next = 7; 376 break; 377 } 378 e.preventDefault(); 379 selectedIndex = Math.min(selectedIndex + 1, currentSuggestions.length - 1); 380 updateSelectedItem(items, selectedIndex); 381 _context4.next = 21; 382 break; 383 case 7: 384 if (!(e.key === 'ArrowUp')) { 385 _context4.next = 13; 386 break; 387 } 388 e.preventDefault(); 389 selectedIndex = Math.max(selectedIndex - 1, -1); 390 updateSelectedItem(items, selectedIndex); 391 _context4.next = 21; 392 break; 393 case 13: 394 if (!(e.key === 'Enter' && selectedIndex >= 0)) { 395 _context4.next = 20; 396 break; 397 } 398 e.preventDefault(); 399 if (!currentSuggestions[selectedIndex]) { 400 _context4.next = 18; 401 break; 402 } 403 _context4.next = 18; 404 return handlePlaceSelection(currentSuggestions[selectedIndex].placePrediction); 405 case 18: 406 _context4.next = 21; 407 break; 408 case 20: 409 if (e.key === 'Escape') { 410 dropdown.classList.add('hidden'); 411 selectedIndex = -1; 412 } 413 case 21: 414 case "end": 415 return _context4.stop(); 416 } 417 } 418 }, _callee4); 419 })); 420 return function (_x3) { 421 return _ref6.apply(this, arguments); 422 }; 423 }()); 424 425 // Update visual selection 426 var updateSelectedItem = function updateSelectedItem(items, index) {
427 items.forEach(function (item, i) { 428 if (i === index) { 429 // Apply selected state classes from template 430 if (itemSelectedStyles) { 431 item.className = Array.from(itemSelectedStyles).join(' '); 432 } else { 433 // Fallback: just add bg-gray-100 to existing classes 434 item.classList.add('bg-gray-100'); 435 } 436 item.scrollIntoView({ 437 block: 'nearest' 438 }); 439 } else { 440 // Apply normal state classes from template 441 if (itemStyles) { 442 item.className = Array.from(itemStyles).join(' '); 443 } else { 444 // Fallback: remove bg-gray-100 445 item.classList.remove('bg-gray-100'); 446 } 447 } 448 }); 449 }; 450 451 // Handle place selection 452 var handlePlaceSelection = /*#__PURE__*/function () { 453 var _ref7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(placePrediction) { 454 var place, addressComponents, addressData; 455 return _regeneratorRuntime().wrap(function _callee5$(_context5) { 456 while (1) { 457 switch (_context5.prev = _context5.next) { 458 case 0: 459 _context5.prev = 0; 460 // Convert prediction to Place object 461 place = placePrediction.toPlace(); // Fetch place details including address components 462 _context5.next = 4; 463 return place.fetchFields({ 464 fields: ['addressComponents', 'formattedAddress'] 465 }); 466 case 4: 467 addressComponents = place.addressComponents; 468 if (addressComponents) { 469 _context5.next = 7; 470 break; 471 } 472 return _context5.abrupt("return"); 473 case 7: 474 // Parse address components 475 addressData = { 476 line1: '', 477 line2: '', 478 city: '', 479 state: '', 480 postalCode: '', 481 country: '', 482 fullAddress: place.formattedAddress || '' 483 }; // Extract address components 484 addressComponents.forEach(function (component) { 485 var types = component.types; 486 if (types.includes('street_number')) { 487 addressData.line1 = component.longText + ' ' + addressData.line1; 488 } else if (types.includes('route')) { 489 addressData.line1 += component.longText; 490 } else if (types.includes('locality')) { 491 addressData.city = component.longText; 492 } else if (types.includes('administrative_area_level_1')) { 493 addressData.state = component.shortText; 494 } else if (types.includes('postal_code')) { 495 addressData.postalCode = component.longText; 496 } else if (types.includes('country')) { 497 addressData.country = component.longText; 498 } 499 }); 500 501 // Trim line1 502 addressData.line1 = addressData.line1.trim(); 503 504 // Update the input field display with full address 505 input.value = addressData.fullAddress; 506 507 // Update the Alpine data 508 alpineComponent.input[slug].line1 = addressData.line1; 509 alpineComponent.input[slug].line2 = addressData.line2; 510 alpineComponent.input[slug].city = addressData.city; 511 alpineComponent.input[slug].state = addressData.state; 512 alpineComponent.input[slug].postalCode = addressData.postalCode; 513 alpineComponent.input[slug].country = addressData.country; 514 alpineComponent.input[slug].fullAddress = addressData.fullAddress; 515 516 // Hide dropdown 517 dropdown.classList.add('hidden'); 518 currentSuggestions = []; 519 selectedIndex = -1; 520 _context5.next = 26; 521 break; 522 case 23: 523 _context5.prev = 23; 524 _context5.t0 = _context5["catch"](0); 525 console.error('Error fetching place details:', _context5.t0); 526 case 26: 527 case "end": 528 return _context5.stop(); 529 } 530 } 531 }, _callee5, null, [[0, 23]]); 532 })); 533 return function handlePlaceSelection(_x4) { 534 return _ref7.apply(this, arguments); 535 }; 536 }(); 537 538 // Hide dropdown when clicking outside 539 document.addEventListener('click', function (e) { 540 if (!input.contains(e.target) && !dropdown.contains(e.target)) { 541 dropdown.classList.add('hidden'); 542 selectedIndex = -1; 543 } 544 }); 545 }); 546 }, 547 prevPage: function prevPage() { 548 this.currentPage--; 549 if (typeof gtag !== "undefined") { 550 gtag("event", "form_prev_page", { 551 'page': this.currentPage, 552 'form': form_id 553 }); 554 } 555 }, 556 nextPage: function nextPage() { 557 this.currentPage++; 558 if (typeof gtag !== "undefined") { 559 gtag("event", "form_next_page", { 560 'page': this.currentPage, 561 'form': form_id 562 }); 563 } 564 }, 565 recaptchaScriptExists: function recaptchaScriptExists() { 566 var url = "https://www.google.com/recaptcha/api.js?render=explicit"; 567 var scripts = document.getElementsByTagName("script"); 568 for (var i = scripts.length; i--;) { 569 if (scripts[i].src == url) { 570 return true; 571 } 572 } 573 return false;
574 }, 575 getNextSibling: function getNextSibling(elem, selector) { 576 // Get the next sibling element 577 try { 578 var sibling = elem.nextElementSibling; 579 if (!sibling) return; 580 // If there's no selector, return the first sibling 581 if (!selector) return sibling; 582 // If the sibling matches our selector, use it 583 // If not, jump to the next sibling and continue the loop 584 while (sibling) { 585 if (sibling.matches(selector)) return sibling; 586 sibling = sibling.nextElementSibling; 587 } 588 return sibling; 589 } catch (error) {} 590 }, 591 loadRecaptcha: function loadRecaptcha() { 592 // Only init recaptcha if we have a recaptcha button ref 593 if (!this.$refs.captchaButton) { 594 return; 595 } 596 var recaptchaScript = document.createElement("script"); 597 recaptchaScript.async = true; 598 recaptchaScript.type = "text/javascript"; 599 recaptchaScript.setAttribute("src", "https://www.google.com/recaptcha/api.js?render=explicit"); 600 document.head.appendChild(recaptchaScript); 601 }, 602 initRecaptcha: function initRecaptcha() { 603 var _this4 = this; 604 // Only init recaptcha if we have a recaptcha button ref 605 if (!this.$refs.captchaButton) { 606 return; 607 } 608 this.timeoutCounter++; 609 if (this.timeoutCounter === 120) { 610 console.log("Giving up on recaptcha"); 611 return; 612 } 613 var submitBtn = this.$refs.captchaButton; 614 try { 615 setTimeout(function () { 616 if (typeof grecaptcha === "undefined" || typeof grecaptcha.render === "undefined") { 617 _this4.initRecaptcha(); 618 } else { 619 var _this4$$refs$captchaB; 620 _this4.recaptchaWidgetId = grecaptcha.render(submitBtn.getAttribute("id"), { 621 sitekey: (_this4$$refs$captchaB = _this4.$refs.captchaButton.dataset.sitekey) !== null && _this4$$refs$captchaB !== void 0 ? _this4$$refs$captchaB : "", 622 badge: "bottomleft", 623 size: "invisible", 624 callback: _this4.recaptchaPassed.bind(_this4), 625 errorCallback: console.error, 626 expiredCallback: console.error 627 }); 628 } 629 }, 500); 630 var checkForBadge = setInterval(function () { 631 var badge = document.querySelector(".grecaptcha-badge"); 632 if (badge) { 633 document.body.append(badge); 634 clearInterval(checkForBadge); 635 } 636 }, 50); 637 } catch (error) {} 638 }, 639 usingRecaptcha: function usingRecaptcha() { 640 return this.$refs.captchaButton || typeof this.input["g-recaptcha-response"] !== "undefined"; 641 }, 642 recaptchaPassed: function recaptchaPassed(code) { 643 this.input["g-recaptcha-response"] = code; 644 grecaptcha.reset(this.recaptchaWidgetId); 645 this.submit(); 646 }, 647 submit: function submit(cb, skip) { 648 var _this5 = this; 649 // Manually update the inputs from the form itself in case the user used auto-fill and 650 // the browser didn't behave correctly or something. 651 if (!skip) { 652 var inputs = document.querySelectorAll("[x-data='".concat(form_id, "'] [x-model]")); 653 var foundAutofill = false; 654 for (var i = 0; i < inputs.length; i++) { 655 // Wrap this in a try/catch because non webkit browsers will log errors on this pseudo element 656 try { 657 if (inputs[i].matches(':-webkit-autofill')) { 658 inputs[i].dispatchEvent(new Event("input")); 659 foundAutofill = true; 660 } 661 } catch (error) {} 662 } 663 if (foundAutofill) { 664 // Wait a beat to let alpine catch the change events 665 setTimeout(function () { 666 _this5.submit(cb, true); 667 }, 100); 668 return false;
669 } 670 } 671 672 // If captcha is required (ref exists) and didn't pass 673 if (this.usingRecaptcha() && !this.input["g-recaptcha-response"]) { 674 // get outta here 675 console.log('Recaptcha required. Double check you have both a x-ref="captchaButton" and a field named "g-recaptcha-response" in your PHP.'); 676 alert("Oops, it looks like the form isn't quite ready yet. Please wait a few seconds and try again."); 677 cb && typeof cb === "function" && cb(false); 678 return false; 679 } 680 681 // Update form state 682 this.sending = true; 683 this.input.form_submitted_in = new Date().getTime() - this.formInitilized; 684 // Submit the submit callback 685 callback("submit", this.input).then(function (res) { 686 console.log("Form submitted at " + new Date().getTime()); 687 try { 688 setTimeout(function () { 689 var node = document.getElementById(form_id); 690 if (node && 'scrollIntoView' in node) { 691 console.log("Form scrolling to Success Message at " + new Date().getTime()); 692 node.scrollIntoView({ 693 block: "start", 694 behavior: "smooth" 695 }); 696 } 697 }, 100); 698 699 // If we don't get a success message back, something went from (even if it's a 200 code) 700 if (!res.data || !res.data.message && !res.data.redirect) { 701 // Show error and reset form 702 _this5.successMessage = null; 703 _this5.errorMessage = "An unknown error occurred. Please use another method to get in touch and report this issue."; 704 _this5.sending = false; 705 cb && typeof cb === "function" && cb(false); 706 return; // get out of here 707 } 708 709 // SUCCESS 710 console.log("Form conversion recorded at " + new Date().getTime()); 711 _this5.recordConversion(); 712 if (res.data.redirect) { 713 // wait a second to let the conversion fire 714 setTimeout(function () { 715 window.location.href = res.data.redirect; 716 }, 1000); 717 } else { 718 _this5.successMessage = res.data.message; 719 } 720 721 // Reset form state 722 _this5.errorMessage = null; 723 _this5.sending = false; 724 cb && typeof cb === "function" && cb(true); 725 } catch (e) { 726 console.log(e); 727 } 728 })["catch"](function (_ref8) { 729 var response = _ref8.response; 730 var node = document.getElementById(form_id); 731 if (node && 'scrollIntoView' in node) { 732 node.scrollIntoView({ 733 block: "start", 734 behavior: "smooth" 735 }); 736 } 737 738 // Reset form fields and error message 739 var message = ""; 740 var invalids = _this5.$el.getElementsByClassName("is-invalid"); 741 var _iterator = _createForOfIteratorHelper(invalids), 742 _step; 743 try { 744 for (_iterator.s(); !(_step = _iterator.n()).done;) { 745 var element = _step.value; 746 element.classList.remove("is-invalid"); 747 } 748 749 // If errors weren't sent, something else went wrong but we want to give some feedback 750 } catch (err) { 751 _iterator.e(err); 752 } finally { 753 _iterator.f(); 754 } 755 if (!response.data || !response.data.errors) { 756 message = "An unknown error occurred. Please use another method to get in touch and report this issue."; 757 // We have errors 758 } else { 759 // If a string 760 if (typeof response.data.errors === "string") { 761 // Single error (likely not field related) set message to error 762 message = response.data.errors; 763 // If it's an array 764 } else { 765 // Append each to the message 766 for (var _i2 = 0, _Object$entries = Object.entries(response.data.errors); _i2 < _Object$entries.length; _i2++) { 767 var _this5$getNextSibling; 768 var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2), 769 field = _Object$entries$_i[0], 770 msg = _Object$entries$_i[1]; 771 var input = _this5.$el.querySelector(".input\\:" + field); 772 var feedback = (_this5$getNextSibling = _this5.getNextSibling(input, ".invalid-feedback")) !== null && _this5$getNextSibling !== void 0 ? _this5$getNextSibling : null; 773 774 // If we have a feedback div specifically for this input 775 if (input && feedback) { 776 // Send message there 777 feedback.innerHTML = msg; 778 } else { 779 var m = Array.isArray(msg) ? msg.join("<br>") : msg; 780 // Otherwise send to the primary error message area 781 message += message !== "" ? "<br>" + m : m; 782 } 783 if (input) {
784 // Also mark field invalid 785 input.classList.add("is-invalid"); 786 } 787 } 788 } 789 } 790 // Reset form state 791 _this5.successMessage = null; 792 _this5.currentPage = 1; 793 _this5.errorMessage = message; 794 _this5.sending = false; 795 cb && typeof cb === "function" && cb(false); 796 }); 797 }, 798 recordConversion: function recordConversion() { 799 if ('disableConversions' in window) { 800 return; 801 } 802 var cm = typeof conversion_meta !== "undefined" ? conversion_meta : false; 803 var eventAction = cm && cm.action ? cm.action : "submit"; 804 var eventCategory = cm && cm.category ? cm.category : "form"; 805 var eventLabel = cm && cm.label ? cm.label : location.pathname; 806 var includeInAnalytics = cm && cm.includeInAnalytics ? cm.includeInAnalytics : []; 807 var analyticsData = {}; 808 var _iterator2 = _createForOfIteratorHelper(includeInAnalytics), 809 _step2; 810 try { 811 for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { 812 var aKey = _step2.value; 813 analyticsData[aKey] = aKey in this.input ? this.input[aKey] : null; 814 } 815 816 // Analytics is configured 817 } catch (err) { 818 _iterator2.e(err); 819 } finally { 820 _iterator2.f(); 821 } 822 if (typeof gtag !== "undefined") { 823 var eventDetails = _objectSpread({ 824 event_category: eventCategory, 825 event_label: eventLabel 826 }, analyticsData); 827 // Send event 828 gtag("event", eventAction, eventDetails); 829 console.log("Conversion event sent to Google Tag Manager", { 830 eventAction: eventAction, 831 eventDetails: eventDetails 832 }); 833 } 834 window.dataLayer = window.dataLayer || []; 835 window.dataLayer.push({ 836 'event': 'generate_lead', 837 'form_submission': eventLabel, 838 'form_data': analyticsData 839 }); 840 try { 841 window.dispatchEvent(new CustomEvent('generate_lead', { 842 detail: { 843 action_type: eventAction || 'Form Submission', 844 category: eventCategory || 'Form', 845 label: eventLabel || window.location.href, 846 form_id: form_id, 847 page_url: window.location.href 848 } 849 })); 850 } catch (error) { 851 // just in case :) 852 console.error('Error dispatching generate_lead event', error); 853 } 854 } 855 }; 856 }; 857 858 // Track registered forms globally 859 if (!window.__registeredForms) { 860 window.__registeredForms = {}; 861 } 862 863 // Register component - must happen before Alpine walks the DOM 864 function registerComponent() { 865 if (!window.__registeredForms[form_id]) { 866 Alpine.data(form_id, form); 867 window.__registeredForms[form_id] = true; 868 869 // Only register "mosaicForm" once for backwards compatibility 870 // This will point to the FIRST form on the page 871 if (!window.__registeredForms['mosaicForm']) { 872 Alpine.data("mosaicForm", form); 873 window.__registeredForms['mosaicForm'] = true; 874 } 875 } 876 } 877 878 // Use alpine:init to ensure we register before Alpine processes the DOM 879 document.addEventListener('alpine:init', function () { 880 registerComponent(); 881 }); 882 883 // Also register immediately if Alpine has already initialized 884 // This handles the case where scripts load after Alpine has started 885 if (window.Alpine && window.Alpine.version) { 886 registerComponent(); 887 888 // If Alpine has already processed the DOM, manually initialize this form 889 // Use requestAnimationFrame to ensure DOM is ready 890 requestAnimationFrame(function () { 891 var formElement = document.querySelector("[x-data=\"".concat(form_id, "\"]")); 892 if (formElement && !formElement._x_dataStack) { 893 // Element exists but hasn't been initialized by Alpine yet 894 try { 895 Alpine.initTree(formElement); 896 } catch (e) { 897 console.warn('Failed to initialize form', form_id, e); 898 } 899 } 900 }); 901 } 902 })(); 903 }; 904 ready(0); 905 } 906})();
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.