@hotwired/turbo 7.0.0-rc.5 → 7.1.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"turbo.es2017-umd.js","sources":["../src/polyfills/custom-elements-native-shim.ts","../src/polyfills/submit-event.ts","../src/elements/frame_element.ts","../src/core/url.ts","../src/http/fetch_response.ts","../src/util.ts","../src/http/fetch_request.ts","../src/observers/appearance_observer.ts","../src/core/streams/stream_message.ts","../src/core/drive/form_submission.ts","../src/core/snapshot.ts","../src/core/frames/form_interceptor.ts","../src/core/view.ts","../src/core/frames/frame_view.ts","../src/core/frames/link_interceptor.ts","../src/core/bardo.ts","../src/core/renderer.ts","../src/core/frames/frame_renderer.ts","../src/core/drive/progress_bar.ts","../src/core/drive/head_snapshot.ts","../src/core/drive/page_snapshot.ts","../src/core/drive/visit.ts","../src/core/native/browser_adapter.ts","../src/observers/cache_observer.ts","../src/observers/form_submit_observer.ts","../src/core/frames/frame_redirector.ts","../src/core/drive/history.ts","../src/observers/link_click_observer.ts","../src/core/types.ts","../src/core/drive/navigator.ts","../src/observers/page_observer.ts","../src/observers/scroll_observer.ts","../src/observers/stream_observer.ts","../src/core/drive/error_renderer.ts","../src/core/drive/page_renderer.ts","../src/core/drive/snapshot_cache.ts","../src/core/drive/page_view.ts","../src/core/session.ts","../src/core/frames/frame_controller.ts","../src/core/streams/stream_actions.ts","../src/elements/stream_element.ts","../src/elements/index.ts","../src/script_warning.ts","../src/core/index.ts","../src/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This shim allows elements written in, or compiled to, ES5 to work on native\n * implementations of Custom Elements v1. It sets new.target to the value of\n * this.constructor so that the native HTMLElement constructor can access the\n * current under-construction element's definition.\n */\n(function() {\n if (\n // No Reflect, no classes, no need for shim because native custom elements\n // require ES2015 classes or Reflect.\n window.Reflect === undefined || window.customElements === undefined ||\n // The webcomponentsjs custom elements polyfill doesn't require\n // ES2015-compatible construction (`super()` or `Reflect.construct`).\n (window.customElements as any).polyfillWrapFlushCallback) {\n return;\n }\n const BuiltInHTMLElement = HTMLElement;\n\n /**\n * With jscompiler's RECOMMENDED_FLAGS the function name will be optimized away.\n * However, if we declare the function as a property on an object literal, and\n * use quotes for the property name, then closure will leave that much intact,\n * which is enough for the JS VM to correctly set Function.prototype.name.\n */\n const wrapperForTheName = {\n 'HTMLElement': function HTMLElement(this: HTMLElement) {\n return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n }\n };\n window.HTMLElement =\n wrapperForTheName['HTMLElement'] as unknown as typeof HTMLElement;\n HTMLElement.prototype = BuiltInHTMLElement.prototype;\n HTMLElement.prototype.constructor = HTMLElement;\n Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n })();\n","type FormSubmitter = HTMLElement & { form?: HTMLFormElement, type?: string }\n\nconst submittersByForm: WeakMap<HTMLFormElement, HTMLElement> = new WeakMap\n\nfunction findSubmitterFromClickTarget(target: EventTarget | null): FormSubmitter | null {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null\n const candidate = element ? element.closest(\"input, button\") as FormSubmitter | null : null\n return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event: Event) {\n const submitter = findSubmitterFromClickTarget(event.target)\n\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter)\n }\n}\n\n(function() {\n if (\"SubmitEvent\" in window) return\n\n addEventListener(\"click\", clickCaptured, true)\n\n Object.defineProperty(Event.prototype, \"submitter\", {\n get(): HTMLElement | undefined {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target)\n }\n }\n })\n})()\n","import { FetchResponse } from \"../http/fetch_response\"\n\nexport enum FrameLoadingStyle { eager = \"eager\", lazy = \"lazy\" }\n\nexport interface FrameElementDelegate {\n connect(): void\n disconnect(): void\n loadingStyleChanged(): void\n sourceURLChanged(): void\n disabledChanged(): void\n formSubmissionIntercepted(element: HTMLFormElement, submitter?: HTMLElement): void\n loadResponse(response: FetchResponse): void\n isLoading: boolean\n}\n\nexport class FrameElement extends HTMLElement {\n static delegateConstructor: new (element: FrameElement) => FrameElementDelegate\n\n loaded: Promise<FetchResponse | void> = Promise.resolve()\n readonly delegate: FrameElementDelegate\n\n static get observedAttributes() {\n return [\"disabled\", \"loading\", \"src\"]\n }\n\n constructor() {\n super()\n this.delegate = new FrameElement.delegateConstructor(this)\n }\n\n connectedCallback() {\n this.delegate.connect()\n }\n\n disconnectedCallback() {\n this.delegate.disconnect()\n }\n\n attributeChangedCallback(name: string) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged()\n } else if (name == \"src\") {\n this.delegate.sourceURLChanged()\n } else {\n this.delegate.disabledChanged()\n }\n }\n\n get src() {\n return this.getAttribute(\"src\")\n }\n\n set src(value: string | null) {\n if (value) {\n this.setAttribute(\"src\", value)\n } else {\n this.removeAttribute(\"src\")\n }\n }\n\n get loading(): FrameLoadingStyle {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n }\n\n set loading(value: FrameLoadingStyle) {\n if (value) {\n this.setAttribute(\"loading\", value)\n } else {\n this.removeAttribute(\"loading\")\n }\n }\n\n get disabled() {\n return this.hasAttribute(\"disabled\")\n }\n\n set disabled(value: boolean) {\n if (value) {\n this.setAttribute(\"disabled\", \"\")\n } else {\n this.removeAttribute(\"disabled\")\n }\n }\n\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\")\n }\n\n set autoscroll(value: boolean) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\")\n } else {\n this.removeAttribute(\"autoscroll\")\n }\n }\n\n get complete() {\n return !this.delegate.isLoading\n }\n\n get isActive() {\n return this.ownerDocument === document && !this.isPreview\n }\n\n get isPreview() {\n return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n }\n}\n\nfunction frameLoadingStyleFromString(style: string) {\n switch (style.toLowerCase()) {\n case \"lazy\": return FrameLoadingStyle.lazy\n default: return FrameLoadingStyle.eager\n }\n}\n","export type Locatable = URL | string\n\nexport function expandURL(locatable: Locatable) {\n return new URL(locatable.toString(), document.baseURI)\n}\n\nexport function getAnchor(url: URL) {\n let anchorMatch\n if (url.hash) {\n return url.hash.slice(1)\n } else if (anchorMatch = url.href.match(/#(.*)$/)) {\n return anchorMatch[1]\n } else {\n return \"\"\n }\n}\n\nexport function getExtension(url: URL) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nexport function isHTML(url: URL) {\n return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml))$/)\n}\n\nexport function isPrefixedBy(baseURL: URL, url: URL) {\n const prefix = getPrefix(url)\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nexport function toCacheKey(url: URL) {\n const anchorLength = url.hash.length\n if (anchorLength < 2) {\n return url.href\n } else {\n return url.href.slice(0, -anchorLength)\n }\n}\n\nexport function urlsAreEqual(left: string, right: string) {\n return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url: URL) {\n return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url: URL) {\n return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url: URL) {\n return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value: string) {\n return value.endsWith(\"/\") ? value : value + \"/\"\n}\n","import { expandURL } from \"../core/url\"\n\nexport class FetchResponse {\n readonly response: Response\n\n constructor(response: Response) {\n this.response = response\n }\n\n get succeeded() {\n return this.response.ok\n }\n\n get failed() {\n return !this.succeeded\n }\n\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499\n }\n\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599\n }\n\n get redirected() {\n return this.response.redirected\n }\n\n get location(): URL {\n return expandURL(this.response.url)\n }\n\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n }\n\n get statusCode() {\n return this.response.status\n }\n\n get contentType() {\n return this.header(\"Content-Type\")\n }\n\n get responseText(): Promise<string> {\n return this.response.text()\n }\n\n get responseHTML(): Promise<string | undefined> {\n if (this.isHTML) {\n return this.response.text()\n } else {\n return Promise.resolve(undefined)\n }\n }\n\n header(name: string) {\n return this.response.headers.get(name)\n }\n}\n","export type DispatchOptions = { target: EventTarget, cancelable: boolean, detail: any }\n\nexport function dispatch(eventName: string, { target, cancelable, detail }: Partial<DispatchOptions> = {}) {\n const event = new CustomEvent(eventName, { cancelable, bubbles: true, detail })\n void (target || document.documentElement).dispatchEvent(event)\n return event\n}\n\nexport function nextAnimationFrame() {\n return new Promise<void>(resolve => requestAnimationFrame(() => resolve()))\n}\n\nexport function nextEventLoopTick() {\n return new Promise<void>(resolve => setTimeout(() => resolve(), 0))\n}\n\nexport function nextMicrotask() {\n return Promise.resolve()\n}\n\nexport function parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nexport function unindent(strings: TemplateStringsArray, ...values: any[]): string {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\")\n const match = lines[0].match(/^\\s+/)\n const indent = match ? match[0].length : 0\n return lines.map(line => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings: TemplateStringsArray, values: any[]) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i]\n return result + string + value\n }, \"\")\n}\n\nexport function uuid() {\n return Array.apply(null, { length: 36 } as any).map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\"\n } else if (i == 14) {\n return \"4\"\n } else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16)\n } else {\n return Math.floor(Math.random() * 15).toString(16)\n }\n }).join(\"\")\n}\n","import { FetchResponse } from \"./fetch_response\"\nimport { dispatch } from \"../util\"\n\nexport interface FetchRequestDelegate {\n prepareHeadersForRequest?(headers: FetchRequestHeaders, request: FetchRequest): void\n requestStarted(request: FetchRequest): void\n requestPreventedHandlingResponse(request: FetchRequest, response: FetchResponse): void\n requestSucceededWithResponse(request: FetchRequest, response: FetchResponse): void\n requestFailedWithResponse(request: FetchRequest, response: FetchResponse): void\n requestErrored(request: FetchRequest, error: Error): void\n requestFinished(request: FetchRequest): void\n}\n\nexport enum FetchMethod {\n get,\n post,\n put,\n patch,\n delete\n}\n\nexport function fetchMethodFromString(method: string) {\n switch (method.toLowerCase()) {\n case \"get\": return FetchMethod.get\n case \"post\": return FetchMethod.post\n case \"put\": return FetchMethod.put\n case \"patch\": return FetchMethod.patch\n case \"delete\": return FetchMethod.delete\n }\n}\n\nexport type FetchRequestBody = FormData | URLSearchParams\n\nexport type FetchRequestHeaders = { [header: string]: string }\n\nexport interface FetchRequestOptions {\n headers: FetchRequestHeaders\n body: FetchRequestBody\n followRedirects: boolean\n}\n\nexport class FetchRequest {\n readonly delegate: FetchRequestDelegate\n readonly method: FetchMethod\n readonly headers: FetchRequestHeaders\n readonly url: URL\n readonly body?: FetchRequestBody\n readonly abortController = new AbortController\n\n constructor(delegate: FetchRequestDelegate, method: FetchMethod, location: URL, body: FetchRequestBody = new URLSearchParams) {\n this.delegate = delegate\n this.method = method\n this.headers = this.defaultHeaders\n if (this.isIdempotent) {\n this.url = mergeFormDataEntries(location, [ ...body.entries() ])\n } else {\n this.body = body\n this.url = location\n }\n }\n\n get location(): URL {\n return this.url\n }\n\n get params(): URLSearchParams {\n return this.url.searchParams\n }\n\n get entries() {\n return this.body ? Array.from(this.body.entries()) : []\n }\n\n cancel() {\n this.abortController.abort()\n }\n\n async perform(): Promise<FetchResponse> {\n const { fetchOptions } = this\n this.delegate.prepareHeadersForRequest?.(this.headers, this)\n dispatch(\"turbo:before-fetch-request\", { detail: { fetchOptions } })\n try {\n this.delegate.requestStarted(this)\n const response = await fetch(this.url.href, fetchOptions)\n return await this.receive(response)\n } catch (error) {\n this.delegate.requestErrored(this, error)\n throw error\n } finally {\n this.delegate.requestFinished(this)\n }\n }\n\n async receive(response: Response): Promise<FetchResponse> {\n const fetchResponse = new FetchResponse(response)\n const event = dispatch(\"turbo:before-fetch-response\", { cancelable: true, detail: { fetchResponse } })\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse)\n } else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse)\n } else {\n this.delegate.requestFailedWithResponse(this, fetchResponse)\n }\n return fetchResponse\n }\n\n get fetchOptions(): RequestInit {\n return {\n method: FetchMethod[this.method].toUpperCase(),\n credentials: \"same-origin\",\n headers: this.headers,\n redirect: \"follow\",\n body: this.body,\n signal: this.abortSignal\n }\n }\n\n get defaultHeaders() {\n return {\n \"Accept\": \"text/html, application/xhtml+xml\"\n }\n }\n\n get isIdempotent() {\n return this.method == FetchMethod.get\n }\n\n get abortSignal() {\n return this.abortController.signal\n }\n}\n\nfunction mergeFormDataEntries(url: URL, entries: [string, FormDataEntryValue][]): URL {\n const currentSearchParams = new URLSearchParams(url.search)\n\n for (const [ name, value ] of entries) {\n if (value instanceof File) continue\n\n if (currentSearchParams.has(name)) {\n currentSearchParams.delete(name)\n url.searchParams.set(name, value)\n } else {\n url.searchParams.append(name, value)\n }\n }\n\n return url\n}\n","export interface AppearanceObserverDelegate {\n elementAppearedInViewport(element: Element): void\n}\n\nexport class AppearanceObserver {\n readonly delegate: AppearanceObserverDelegate\n readonly element: Element\n readonly intersectionObserver: IntersectionObserver\n started = false\n\n constructor(delegate: AppearanceObserverDelegate, element: Element) {\n this.delegate = delegate\n this.element = element\n this.intersectionObserver = new IntersectionObserver(this.intersect)\n }\n\n start() {\n if (!this.started) {\n this.started = true\n this.intersectionObserver.observe(this.element)\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false\n this.intersectionObserver.unobserve(this.element)\n }\n }\n\n intersect: IntersectionObserverCallback = entries => {\n const lastEntry = entries.slice(-1)[0]\n if (lastEntry?.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element)\n }\n }\n}\n","import { StreamElement } from \"../../elements/stream_element\"\n\nexport class StreamMessage {\n static readonly contentType = \"text/vnd.turbo-stream.html\"\n readonly templateElement = document.createElement(\"template\")\n\n static wrap(message: StreamMessage | string) {\n if (typeof message == \"string\") {\n return new this(message)\n } else {\n return message\n }\n }\n\n constructor(html: string) {\n this.templateElement.innerHTML = html\n }\n\n get fragment() {\n const fragment = document.createDocumentFragment()\n for (const element of this.foreignElements) {\n fragment.appendChild(document.importNode(element, true))\n }\n return fragment\n }\n\n get foreignElements() {\n return this.templateChildren.reduce((streamElements, child) => {\n if (child.tagName.toLowerCase() == \"turbo-stream\") {\n return [ ...streamElements, child as StreamElement ]\n } else {\n return streamElements\n }\n }, [] as StreamElement[])\n }\n\n get templateChildren() {\n return Array.from(this.templateElement.content.children)\n }\n}\n","import { FetchRequest, FetchMethod, fetchMethodFromString, FetchRequestHeaders } from \"../../http/fetch_request\"\nimport { FetchResponse } from \"../../http/fetch_response\"\nimport { expandURL } from \"../url\"\nimport { dispatch } from \"../../util\"\nimport { StreamMessage } from \"../streams/stream_message\"\n\nexport interface FormSubmissionDelegate {\n formSubmissionStarted(formSubmission: FormSubmission): void\n formSubmissionSucceededWithResponse(formSubmission: FormSubmission, fetchResponse: FetchResponse): void\n formSubmissionFailedWithResponse(formSubmission: FormSubmission, fetchResponse: FetchResponse): void\n formSubmissionErrored(formSubmission: FormSubmission, error: Error): void\n formSubmissionFinished(formSubmission: FormSubmission): void\n}\n\nexport type FormSubmissionResult\n = { success: boolean, fetchResponse: FetchResponse }\n | { success: false, error: Error }\n\nexport enum FormSubmissionState {\n initialized,\n requesting,\n waiting,\n receiving,\n stopping,\n stopped,\n}\n\nenum FormEnctype {\n urlEncoded = \"application/x-www-form-urlencoded\",\n multipart = \"multipart/form-data\",\n plain = \"text/plain\"\n}\n\nfunction formEnctypeFromString(encoding: string): FormEnctype {\n switch(encoding.toLowerCase()) {\n case FormEnctype.multipart: return FormEnctype.multipart\n case FormEnctype.plain: return FormEnctype.plain\n default: return FormEnctype.urlEncoded\n }\n}\n\nexport class FormSubmission {\n readonly delegate: FormSubmissionDelegate\n readonly formElement: HTMLFormElement\n readonly submitter?: HTMLElement\n readonly formData: FormData\n readonly fetchRequest: FetchRequest\n readonly mustRedirect: boolean\n state = FormSubmissionState.initialized\n result?: FormSubmissionResult\n\n constructor(delegate: FormSubmissionDelegate, formElement: HTMLFormElement, submitter?: HTMLElement, mustRedirect = false) {\n this.delegate = delegate\n this.formElement = formElement\n this.submitter = submitter\n this.formData = buildFormData(formElement, submitter)\n this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body)\n this.mustRedirect = mustRedirect\n }\n\n get method(): FetchMethod {\n const method = this.submitter?.getAttribute(\"formmethod\") || this.formElement.getAttribute(\"method\") || \"\"\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n }\n\n get action(): string {\n return this.submitter?.getAttribute(\"formaction\") || this.formElement.action\n }\n\n get location(): URL {\n return expandURL(this.action)\n }\n\n get body() {\n if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n return new URLSearchParams(this.stringFormData)\n } else {\n return this.formData\n }\n }\n\n get enctype(): FormEnctype {\n return formEnctypeFromString(this.submitter?.getAttribute(\"formenctype\") || this.formElement.enctype)\n }\n\n get isIdempotent() {\n return this.fetchRequest.isIdempotent\n }\n\n get stringFormData() {\n return [ ...this.formData ].reduce((entries, [ name, value ]) => {\n return entries.concat(typeof value == \"string\" ? [[ name, value ]] : [])\n }, [] as [string, string][])\n }\n\n // The submission process\n\n async start() {\n const { initialized, requesting } = FormSubmissionState\n if (this.state == initialized) {\n this.state = requesting\n return this.fetchRequest.perform()\n }\n }\n\n stop() {\n const { stopping, stopped } = FormSubmissionState\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping\n this.fetchRequest.cancel()\n return true\n }\n }\n\n // Fetch request delegate\n\n prepareHeadersForRequest(headers: FetchRequestHeaders, request: FetchRequest) {\n if (!request.isIdempotent) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\")\n if (token) {\n headers[\"X-CSRF-Token\"] = token\n }\n headers[\"Accept\"] = [ StreamMessage.contentType, headers[\"Accept\"] ].join(\", \")\n }\n }\n\n requestStarted(request: FetchRequest) {\n this.state = FormSubmissionState.waiting\n dispatch(\"turbo:submit-start\", { target: this.formElement, detail: { formSubmission: this } })\n this.delegate.formSubmissionStarted(this)\n }\n\n requestPreventedHandlingResponse(request: FetchRequest, response: FetchResponse) {\n this.result = { success: response.succeeded, fetchResponse: response }\n }\n\n requestSucceededWithResponse(request: FetchRequest, response: FetchResponse) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response)\n } else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\")\n this.delegate.formSubmissionErrored(this, error)\n } else {\n this.state = FormSubmissionState.receiving\n this.result = { success: true, fetchResponse: response }\n this.delegate.formSubmissionSucceededWithResponse(this, response)\n }\n }\n\n requestFailedWithResponse(request: FetchRequest, response: FetchResponse) {\n this.result = { success: false, fetchResponse: response }\n this.delegate.formSubmissionFailedWithResponse(this, response)\n }\n\n requestErrored(request: FetchRequest, error: Error) {\n this.result = { success: false, error }\n this.delegate.formSubmissionErrored(this, error)\n }\n\n requestFinished(request: FetchRequest) {\n this.state = FormSubmissionState.stopped\n dispatch(\"turbo:submit-end\", { target: this.formElement, detail: { formSubmission: this, ...this.result }})\n this.delegate.formSubmissionFinished(this)\n }\n\n requestMustRedirect(request: FetchRequest) {\n return !request.isIdempotent && this.mustRedirect\n }\n}\n\nfunction buildFormData(formElement: HTMLFormElement, submitter?: HTMLElement): FormData {\n const formData = new FormData(formElement)\n const name = submitter?.getAttribute(\"name\")\n const value = submitter?.getAttribute(\"value\")\n\n if (name && value != null && formData.get(name) != value) {\n formData.append(name, value)\n }\n\n return formData\n}\n\nfunction getCookieValue(cookieName: string | null) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : []\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName))\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\")\n return value ? decodeURIComponent(value) : undefined\n }\n }\n}\n\nfunction getMetaContent(name: string) {\n const element: HTMLMetaElement | null = document.querySelector(`meta[name=\"${name}\"]`)\n return element && element.content\n}\n\nfunction responseSucceededWithoutRedirect(response: FetchResponse) {\n return response.statusCode == 200 && !response.redirected\n}\n","export class Snapshot<E extends Element = Element> {\n readonly element: E\n\n constructor(element: E) {\n this.element = element\n }\n\n get children() {\n return [ ...this.element.children ]\n }\n\n hasAnchor(anchor: string) {\n return this.getElementForAnchor(anchor) != null\n }\n\n getElementForAnchor(anchor: string) {\n try {\n return this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`)\n } catch {\n return null\n }\n }\n\n get isConnected() {\n return this.element.isConnected\n }\n\n get firstAutofocusableElement() {\n return this.element.querySelector(\"[autofocus]\")\n }\n\n get permanentElements() {\n return [ ...this.element.querySelectorAll(\"[id][data-turbo-permanent]\") ]\n }\n\n getPermanentElementById(id: string) {\n return this.element.querySelector(`#${id}[data-turbo-permanent]`)\n }\n\n getPermanentElementMapForSnapshot(snapshot: Snapshot) {\n const permanentElementMap: PermanentElementMap = {}\n\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement\n const newPermanentElement = snapshot.getPermanentElementById(id)\n if (newPermanentElement) {\n permanentElementMap[id] = [ currentPermanentElement, newPermanentElement ]\n }\n }\n\n return permanentElementMap\n }\n}\n\nexport type PermanentElementMap = Record<string, [Element, Element]>\n","export interface FormInterceptorDelegate {\n shouldInterceptFormSubmission(element: HTMLFormElement, submitter?: HTMLElement): boolean\n formSubmissionIntercepted(element: HTMLFormElement, submitter?: HTMLElement): void\n}\n\nexport class FormInterceptor {\n readonly delegate: FormInterceptorDelegate\n readonly element: Element\n\n constructor(delegate: FormInterceptorDelegate, element: Element) {\n this.delegate = delegate\n this.element = element\n }\n\n start() {\n this.element.addEventListener(\"submit\", this.submitBubbled)\n }\n\n stop() {\n this.element.removeEventListener(\"submit\", this.submitBubbled)\n }\n\n submitBubbled = <EventListener>((event: SubmitEvent) => {\n if (event.target instanceof HTMLFormElement) {\n const form = event.target\n const submitter = event.submitter || undefined\n if (this.delegate.shouldInterceptFormSubmission(form, submitter)) {\n event.preventDefault()\n event.stopImmediatePropagation()\n this.delegate.formSubmissionIntercepted(form, submitter)\n }\n }\n })\n}\n","import { Renderer } from \"./renderer\"\nimport { Snapshot } from \"./snapshot\"\nimport { Position } from \"./types\"\n\nexport interface ViewDelegate<S extends Snapshot> {\n viewWillRenderSnapshot(snapshot: S, isPreview: boolean): void\n viewRenderedSnapshot(snapshot: S, isPreview: boolean): void\n viewInvalidated(): void\n}\n\nexport abstract class View<E extends Element, S extends Snapshot<E> = Snapshot<E>, R extends Renderer<E, S> = Renderer<E, S>, D extends ViewDelegate<S> = ViewDelegate<S>> {\n readonly delegate: D\n readonly element: E\n renderer?: R\n abstract readonly snapshot: S\n\n constructor(delegate: D, element: E) {\n this.delegate = delegate\n this.element = element\n }\n\n // Scrolling\n\n scrollToAnchor(anchor: string) {\n const element = this.snapshot.getElementForAnchor(anchor)\n if (element) {\n this.scrollToElement(element)\n } else {\n this.scrollToPosition({ x: 0, y: 0 })\n }\n }\n\n scrollToElement(element: Element) {\n element.scrollIntoView()\n }\n\n scrollToPosition({ x, y }: Position) {\n this.scrollRoot.scrollTo(x, y)\n }\n\n get scrollRoot(): { scrollTo(x: number, y: number): void } {\n return window\n }\n\n // Rendering\n\n async render(renderer: R) {\n if (this.renderer) {\n throw new Error(\"rendering is already in progress\")\n }\n\n const { isPreview, shouldRender, newSnapshot: snapshot } = renderer\n if (shouldRender) {\n try {\n this.renderer = renderer\n this.prepareToRenderSnapshot(renderer)\n this.delegate.viewWillRenderSnapshot(snapshot, isPreview)\n await this.renderSnapshot(renderer)\n this.delegate.viewRenderedSnapshot(snapshot, isPreview)\n this.finishRenderingSnapshot(renderer)\n } finally {\n delete this.renderer\n }\n } else {\n this.invalidate()\n }\n }\n\n invalidate() {\n this.delegate.viewInvalidated()\n }\n\n prepareToRenderSnapshot(renderer: R) {\n this.markAsPreview(renderer.isPreview)\n renderer.prepareToRender()\n }\n\n markAsPreview(isPreview: boolean) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\")\n } else {\n this.element.removeAttribute(\"data-turbo-preview\")\n }\n }\n\n async renderSnapshot(renderer: R) {\n await renderer.render()\n }\n\n finishRenderingSnapshot(renderer: R) {\n renderer.finishRendering()\n }\n}\n","import { FrameElement } from \"../../elements\"\nimport { Snapshot } from \"../snapshot\"\nimport { View } from \"../view\"\n\nexport class FrameView extends View<FrameElement> {\n invalidate() {\n this.element.innerHTML = \"\"\n }\n\n get snapshot() {\n return new Snapshot(this.element)\n }\n}\n","import { dispatch } from \"../../util\"\n\nexport interface LinkInterceptorDelegate {\n shouldInterceptLinkClick(element: Element, url: string): boolean\n linkClickIntercepted(element: Element, url: string): void\n}\n\nexport class LinkInterceptor {\n readonly delegate: LinkInterceptorDelegate\n readonly element: Element\n private clickEvent?: Event\n\n constructor(delegate: LinkInterceptorDelegate, element: Element) {\n this.delegate = delegate\n this.element = element\n }\n\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled)\n document.addEventListener(\"turbo:click\", this.linkClicked)\n document.addEventListener(\"turbo:before-visit\", this.willVisit)\n }\n\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled)\n document.removeEventListener(\"turbo:click\", this.linkClicked)\n document.removeEventListener(\"turbo:before-visit\", this.willVisit)\n }\n\n clickBubbled = (event: Event) => {\n if (this.respondsToEventTarget(event.target)) {\n this.clickEvent = event\n } else {\n delete this.clickEvent\n }\n }\n\n linkClicked = <EventListener>((event: CustomEvent) => {\n if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url)) {\n this.clickEvent.preventDefault()\n event.preventDefault()\n \n this.convertLinkWithMethodClickToFormSubmission(event.target) || \n this.delegate.linkClickIntercepted(event.target, event.detail.url)\n }\n }\n delete this.clickEvent\n })\n\n willVisit = () => {\n delete this.clickEvent\n }\n\n convertLinkWithMethodClickToFormSubmission(link: Element) {\n const linkMethod = link.getAttribute(\"data-turbo-method\") || link.getAttribute(\"data-method\")\n\n if (linkMethod) {\n const form = document.createElement(\"form\")\n form.method = linkMethod\n form.action = link.getAttribute(\"href\") || \"undefined\"\n\n link.parentNode?.insertBefore(form, link)\n return dispatch(\"submit\", { target: form })\n } else {\n return false\n }\n }\n\n respondsToEventTarget(target: EventTarget | null) {\n const element\n = target instanceof Element\n ? target\n : target instanceof Node\n ? target.parentElement\n : null\n return element && element.closest(\"turbo-frame, html\") == this.element\n }\n}\n","import { PermanentElementMap } from \"./snapshot\"\n\nexport class Bardo {\n readonly permanentElementMap: PermanentElementMap\n\n static preservingPermanentElements(permanentElementMap: PermanentElementMap, callback: () => void) {\n const bardo = new this(permanentElementMap)\n bardo.enter()\n callback()\n bardo.leave()\n }\n\n constructor(permanentElementMap: PermanentElementMap) {\n this.permanentElementMap = permanentElementMap\n }\n\n enter() {\n for (const id in this.permanentElementMap) {\n const [, newPermanentElement ] = this.permanentElementMap[id]\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement)\n }\n }\n\n leave() {\n for (const id in this.permanentElementMap) {\n const [ currentPermanentElement ] = this.permanentElementMap[id]\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement)\n this.replacePlaceholderWithPermanentElement(currentPermanentElement)\n }\n }\n\n replaceNewPermanentElementWithPlaceholder(permanentElement: Element) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement)\n permanentElement.replaceWith(placeholder)\n }\n\n replaceCurrentPermanentElementWithClone(permanentElement: Element) {\n const clone = permanentElement.cloneNode(true)\n permanentElement.replaceWith(clone)\n }\n\n replacePlaceholderWithPermanentElement(permanentElement: Element) {\n const placeholder = this.getPlaceholderById(permanentElement.id)\n placeholder?.replaceWith(permanentElement)\n }\n\n getPlaceholderById(id: string) {\n return this.placeholders.find(element => element.content == id)\n }\n\n get placeholders(): HTMLMetaElement[] {\n return [ ...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\") ] as any\n }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement: Element) {\n const element = document.createElement(\"meta\")\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\")\n element.setAttribute(\"content\", permanentElement.id)\n return element\n}\n","import { Bardo } from \"./bardo\"\nimport { Snapshot } from \"./snapshot\"\n\ntype ResolvingFunctions<T = unknown> = {\n resolve(value: T | PromiseLike<T>): void\n reject(reason?: any): void\n}\n\nexport abstract class Renderer<E extends Element, S extends Snapshot<E> = Snapshot<E>> {\n readonly currentSnapshot: S\n readonly newSnapshot: S\n readonly isPreview: boolean\n readonly promise: Promise<void>\n private resolvingFunctions?: ResolvingFunctions<void>\n\n constructor(currentSnapshot: S, newSnapshot: S, isPreview: boolean) {\n this.currentSnapshot = currentSnapshot\n this.newSnapshot = newSnapshot\n this.isPreview = isPreview\n this.promise = new Promise((resolve, reject) => this.resolvingFunctions = { resolve, reject })\n }\n\n get shouldRender() {\n return true\n }\n\n prepareToRender() {\n return\n }\n\n abstract render(): Promise<void>\n\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve()\n delete this.resolvingFunctions\n }\n }\n\n createScriptElement(element: Element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element\n } else {\n const createdScriptElement = document.createElement(\"script\")\n createdScriptElement.textContent = element.textContent\n createdScriptElement.async = false\n copyElementAttributes(createdScriptElement, element)\n return createdScriptElement\n }\n }\n\n preservingPermanentElements(callback: () => void) {\n Bardo.preservingPermanentElements(this.permanentElementMap, callback)\n }\n\n focusFirstAutofocusableElement() {\n const element = this.connectedSnapshot.firstAutofocusableElement\n if (elementIsFocusable(element)) {\n element.focus()\n }\n }\n\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n }\n\n get currentElement() {\n return this.currentSnapshot.element\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n }\n}\n\nfunction copyElementAttributes(destinationElement: Element, sourceElement: Element) {\n for (const { name, value } of [ ...sourceElement.attributes ]) {\n destinationElement.setAttribute(name, value)\n }\n}\n\nfunction elementIsFocusable(element: any): element is { focus: () => void } {\n return element && typeof element.focus == \"function\"\n}\n","import { FrameElement } from \"../../elements/frame_element\"\nimport { nextAnimationFrame } from \"../../util\"\nimport { Renderer } from \"../renderer\"\n\nexport class FrameRenderer extends Renderer<FrameElement> {\n get shouldRender() {\n return true\n }\n\n async render() {\n await nextAnimationFrame()\n this.preservingPermanentElements(() => {\n this.loadFrameElement()\n })\n this.scrollFrameIntoView()\n await nextAnimationFrame()\n this.focusFirstAutofocusableElement()\n }\n\n loadFrameElement() {\n const destinationRange = document.createRange()\n destinationRange.selectNodeContents(this.currentElement)\n destinationRange.deleteContents()\n\n const frameElement = this.newElement\n const sourceRange = frameElement.ownerDocument?.createRange()\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement)\n this.currentElement.appendChild(sourceRange.extractContents())\n }\n }\n\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\")\n\n if (element) {\n element.scrollIntoView({ block })\n return true\n }\n }\n return false\n }\n}\n\nfunction readScrollLogicalPosition(value: string | null, defaultValue: ScrollLogicalPosition): ScrollLogicalPosition {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value\n } else {\n return defaultValue\n }\n}\n","import { unindent } from \"../../util\"\n\nexport class ProgressBar {\n static animationDuration = 300/*ms*/\n\n static get defaultCSS() {\n return unindent`\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 9999;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `\n }\n\n readonly stylesheetElement: HTMLStyleElement\n readonly progressElement: HTMLDivElement\n\n hiding = false\n trickleInterval?: number\n value = 0\n visible = false\n\n constructor() {\n this.stylesheetElement = this.createStylesheetElement()\n this.progressElement = this.createProgressElement()\n this.installStylesheetElement()\n this.setValue(0)\n }\n\n show() {\n if (!this.visible) {\n this.visible = true\n this.installProgressElement()\n this.startTrickling()\n }\n }\n\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true\n this.fadeProgressElement(() => {\n this.uninstallProgressElement()\n this.stopTrickling()\n this.visible = false\n this.hiding = false\n })\n }\n }\n\n setValue(value: number) {\n this.value = value\n this.refresh()\n }\n\n // Private\n\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild)\n }\n\n installProgressElement() {\n this.progressElement.style.width = \"0\"\n this.progressElement.style.opacity = \"1\"\n document.documentElement.insertBefore(this.progressElement, document.body)\n this.refresh()\n }\n\n fadeProgressElement(callback: () => void) {\n this.progressElement.style.opacity = \"0\"\n setTimeout(callback, ProgressBar.animationDuration * 1.5)\n }\n\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement)\n }\n }\n\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration)\n }\n }\n\n stopTrickling() {\n window.clearInterval(this.trickleInterval)\n delete this.trickleInterval\n }\n\n trickle = () => {\n this.setValue(this.value + Math.random() / 100)\n }\n\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + (this.value * 90)}%`\n })\n }\n\n createStylesheetElement() {\n const element = document.createElement(\"style\")\n element.type = \"text/css\"\n element.textContent = ProgressBar.defaultCSS\n return element\n }\n\n createProgressElement() {\n const element = document.createElement(\"div\")\n element.className = \"turbo-progress-bar\"\n return element\n }\n}\n","import { Snapshot } from \"../snapshot\"\n\ntype ElementDetailMap = { [outerHTML: string]: ElementDetails }\n\ntype ElementDetails = { type?: ElementType, tracked: boolean, elements: Element[] }\n\ntype ElementType = \"script\" | \"stylesheet\"\n\nexport class HeadSnapshot extends Snapshot<HTMLHeadElement> {\n readonly detailsByOuterHTML = this.children.reduce((result, element) => {\n const { outerHTML } = element\n const details: ElementDetails\n = outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: []\n }\n return {\n ...result,\n [outerHTML]: {\n ...details,\n elements: [ ...details.elements, element ]\n }\n }\n }, {} as ElementDetailMap)\n\n get trackedElementSignature(): string {\n return Object.keys(this.detailsByOuterHTML)\n .filter(outerHTML => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\")\n }\n\n getScriptElementsNotInSnapshot(snapshot: HeadSnapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n }\n\n getStylesheetElementsNotInSnapshot(snapshot: HeadSnapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n }\n\n getElementsMatchingTypeNotInSnapshot(matchedType: ElementType, snapshot: HeadSnapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter(outerHTML => !(outerHTML in snapshot.detailsByOuterHTML))\n .map(outerHTML => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element)\n }\n\n get provisionalElements(): Element[] {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML]\n if (type == null && !tracked) {\n return [ ...result, ...elements ]\n } else if (elements.length > 1) {\n return [ ...result, ...elements.slice(1) ]\n } else {\n return result\n }\n }, [] as Element[])\n }\n\n getMetaValue(name: string): string | null {\n const element = this.findMetaElementByName(name)\n return element\n ? element.getAttribute(\"content\")\n : null\n }\n\n findMetaElementByName(name: string) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { elements: [element] } = this.detailsByOuterHTML[outerHTML]\n return elementIsMetaElementWithName(element, name) ? element : result\n }, undefined as Element | undefined)\n }\n}\n\nfunction elementType(element: Element) {\n if (elementIsScript(element)) {\n return \"script\"\n } else if (elementIsStylesheet(element)) {\n return \"stylesheet\"\n }\n}\n\nfunction elementIsTracked(element: Element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element: Element) {\n const tagName = element.tagName.toLowerCase()\n return tagName == \"script\"\n}\n\nfunction elementIsStylesheet(element: Element) {\n const tagName = element.tagName.toLowerCase()\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element: Element, name: string) {\n const tagName = element.tagName.toLowerCase()\n return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n","import { parseHTMLDocument } from \"../../util\"\nimport { Snapshot } from \"../snapshot\"\nimport { expandURL } from \"../url\"\nimport { HeadSnapshot } from \"./head_snapshot\"\n\nexport class PageSnapshot extends Snapshot<HTMLBodyElement> {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html))\n }\n\n static fromElement(element: Element) {\n return this.fromDocument(element.ownerDocument)\n }\n\n static fromDocument({ head, body }: Document) {\n return new this(body as HTMLBodyElement, new HeadSnapshot(head))\n }\n\n readonly headSnapshot: HeadSnapshot\n\n constructor(element: HTMLBodyElement, headSnapshot: HeadSnapshot) {\n super(element)\n this.headSnapshot = headSnapshot\n }\n\n clone() {\n return new PageSnapshot(this.element.cloneNode(true), this.headSnapshot)\n }\n\n get headElement() {\n return this.headSnapshot.element\n }\n\n get rootLocation() {\n const root = this.getSetting(\"root\") ?? \"/\"\n return expandURL(root)\n }\n\n get cacheControlValue() {\n return this.getSetting(\"cache-control\")\n }\n\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\"\n }\n\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\"\n }\n\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\"\n }\n\n // Private\n\n getSetting(name: string) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`)\n }\n}\n","import { Adapter } from \"../native/adapter\"\nimport { FetchMethod, FetchRequest, FetchRequestDelegate } from \"../../http/fetch_request\"\nimport { FetchResponse } from \"../../http/fetch_response\"\nimport { History } from \"./history\"\nimport { getAnchor } from \"../url\"\nimport { PageSnapshot } from \"./page_snapshot\"\nimport { Action } from \"../types\"\nimport { uuid } from \"../../util\"\nimport { PageView } from \"./page_view\"\n\nexport interface VisitDelegate {\n readonly adapter: Adapter\n readonly history: History\n readonly view: PageView\n\n visitStarted(visit: Visit): void\n visitCompleted(visit: Visit): void\n}\n\nexport enum TimingMetric {\n visitStart = \"visitStart\",\n requestStart = \"requestStart\",\n requestEnd = \"requestEnd\",\n visitEnd = \"visitEnd\"\n}\n\nexport type TimingMetrics = Partial<{ [metric in TimingMetric]: any }>\n\nexport enum VisitState {\n initialized = \"initialized\",\n started = \"started\",\n canceled = \"canceled\",\n failed = \"failed\",\n completed = \"completed\"\n}\n\nexport type VisitOptions = {\n action: Action,\n historyChanged: boolean,\n referrer?: URL,\n snapshotHTML?: string,\n response?: VisitResponse\n}\n\nconst defaultOptions: VisitOptions = {\n action: \"advance\",\n historyChanged: false\n}\n\nexport type VisitResponse = {\n statusCode: number,\n responseHTML?: string\n}\n\nexport enum SystemStatusCode {\n networkFailure = 0,\n timeoutFailure = -1,\n contentTypeMismatch = -2\n}\n\nexport class Visit implements FetchRequestDelegate {\n readonly delegate: VisitDelegate\n readonly identifier = uuid()\n readonly restorationIdentifier: string\n readonly action: Action\n readonly referrer?: URL\n readonly timingMetrics: TimingMetrics = {}\n\n followedRedirect = false\n frame?: number\n historyChanged = false\n location: URL\n redirectedToLocation?: URL\n request?: FetchRequest\n response?: VisitResponse\n scrolled = false\n snapshotHTML?: string\n snapshotCached = false\n state = VisitState.initialized\n\n constructor(delegate: VisitDelegate, location: URL, restorationIdentifier: string | undefined, options: Partial<VisitOptions> = {}) {\n this.delegate = delegate\n this.location = location\n this.restorationIdentifier = restorationIdentifier || uuid()\n\n const { action, historyChanged, referrer, snapshotHTML, response } = { ...defaultOptions, ...options }\n this.action = action\n this.historyChanged = historyChanged\n this.referrer = referrer\n this.snapshotHTML = snapshotHTML\n this.response = response\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get history() {\n return this.delegate.history\n }\n\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n }\n\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart)\n this.state = VisitState.started\n this.adapter.visitStarted(this)\n this.delegate.visitStarted(this)\n }\n }\n\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel()\n }\n this.cancelRender()\n this.state = VisitState.canceled\n }\n }\n\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd)\n this.state = VisitState.completed\n this.adapter.visitCompleted(this)\n this.delegate.visitCompleted(this)\n }\n }\n\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed\n this.adapter.visitFailed(this)\n }\n }\n\n changeHistory() {\n if (!this.historyChanged) {\n const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action\n const method = this.getHistoryMethodForAction(actionForHistory)\n this.history.update(method, this.location, this.restorationIdentifier)\n this.historyChanged = true\n }\n }\n\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest()\n } else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location)\n this.request.perform()\n }\n }\n\n simulateRequest() {\n if (this.response) {\n this.startRequest()\n this.recordResponse()\n this.finishRequest()\n }\n }\n\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart)\n this.adapter.visitRequestStarted(this)\n }\n\n recordResponse(response = this.response) {\n this.response = response\n if (response) {\n const { statusCode } = response\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this)\n } else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode)\n }\n }\n }\n\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd)\n this.adapter.visitRequestFinished(this)\n }\n\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response\n this.render(async () => {\n this.cacheSnapshot()\n if (isSuccessful(statusCode) && responseHTML != null) {\n await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML))\n this.adapter.visitRendered(this)\n this.complete()\n } else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML))\n this.adapter.visitRendered(this)\n this.fail()\n }\n })\n }\n }\n\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot()\n\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot\n }\n }\n }\n\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML)\n }\n }\n\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null\n }\n\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot()\n if (snapshot) {\n const isPreview = this.shouldIssueRequest()\n this.render(async () => {\n this.cacheSnapshot()\n await this.view.renderPage(snapshot, isPreview)\n this.adapter.visitRendered(this)\n if (!isPreview) {\n this.complete()\n }\n })\n }\n }\n\n followRedirect() {\n if (this.redirectedToLocation && !this.followedRedirect) {\n this.location = this.redirectedToLocation\n this.history.replace(this.redirectedToLocation, this.restorationIdentifier)\n this.followedRedirect = true\n }\n }\n\n // Fetch request delegate\n\n requestStarted() {\n this.startRequest()\n }\n\n requestPreventedHandlingResponse(request: FetchRequest, response: FetchResponse) {\n\n }\n\n async requestSucceededWithResponse(request: FetchRequest, response: FetchResponse) {\n const responseHTML = await response.responseHTML\n if (responseHTML == undefined) {\n this.recordResponse({ statusCode: SystemStatusCode.contentTypeMismatch })\n } else {\n this.redirectedToLocation = response.redirected ? response.location : undefined\n this.recordResponse({ statusCode: response.statusCode, responseHTML })\n }\n }\n\n async requestFailedWithResponse(request: FetchRequest, response: FetchResponse) {\n const responseHTML = await response.responseHTML\n if (responseHTML == undefined) {\n this.recordResponse({ statusCode: SystemStatusCode.contentTypeMismatch })\n } else {\n this.recordResponse({ statusCode: response.statusCode, responseHTML })\n }\n }\n\n requestErrored(request: FetchRequest, error: Error) {\n this.recordResponse({ statusCode: SystemStatusCode.networkFailure })\n }\n\n requestFinished() {\n this.finishRequest()\n }\n\n // Scrolling\n\n performScroll() {\n if (!this.scrolled) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToTop()\n } else {\n this.scrollToAnchor() || this.scrollToTop()\n }\n this.scrolled = true\n }\n }\n\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition)\n return true\n }\n }\n\n scrollToAnchor() {\n if (getAnchor(this.location)) {\n this.view.scrollToAnchor(getAnchor(this.location))\n return true\n }\n }\n\n scrollToTop() {\n this.view.scrollToPosition({ x: 0, y: 0 })\n }\n\n // Instrumentation\n\n recordTimingMetric(metric: TimingMetric) {\n this.timingMetrics[metric] = new Date().getTime()\n }\n\n getTimingMetrics(): TimingMetrics {\n return { ...this.timingMetrics }\n }\n\n // Private\n\n getHistoryMethodForAction(action: Action) {\n switch (action) {\n case \"replace\": return history.replaceState\n case \"advance\":\n case \"restore\": return history.pushState\n }\n }\n\n hasPreloadedResponse() {\n return typeof this.response == \"object\"\n }\n\n shouldIssueRequest() {\n return this.action == \"restore\"\n ? !this.hasCachedSnapshot()\n : true\n }\n\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot()\n this.snapshotCached = true\n }\n }\n\n async render(callback: () => Promise<void>) {\n this.cancelRender()\n await new Promise<void>(resolve => {\n this.frame = requestAnimationFrame(() => resolve())\n })\n callback()\n delete this.frame\n this.performScroll()\n }\n\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame)\n delete this.frame\n }\n }\n}\n\nfunction isSuccessful(statusCode: number) {\n return statusCode >= 200 && statusCode < 300\n}\n","import { Adapter } from \"./adapter\"\nimport { ProgressBar } from \"../drive/progress_bar\"\nimport { SystemStatusCode, Visit, VisitOptions } from \"../drive/visit\"\nimport { Session } from \"../session\"\nimport { uuid } from \"../../util\"\n\nexport class BrowserAdapter implements Adapter {\n readonly session: Session\n readonly progressBar = new ProgressBar\n\n progressBarTimeout?: number\n\n constructor(session: Session) {\n this.session = session\n }\n\n visitProposedToLocation(location: URL, options?: Partial<VisitOptions>) {\n this.navigator.startVisit(location, uuid(), options)\n }\n\n visitStarted(visit: Visit) {\n visit.issueRequest()\n visit.changeHistory()\n visit.loadCachedSnapshot()\n }\n\n visitRequestStarted(visit: Visit) {\n this.progressBar.setValue(0)\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showProgressBarAfterDelay()\n } else {\n this.showProgressBar()\n }\n }\n\n visitRequestCompleted(visit: Visit) {\n visit.loadResponse()\n }\n\n visitRequestFailedWithStatusCode(visit: Visit, statusCode: number) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload()\n default:\n return visit.loadResponse()\n }\n }\n\n visitRequestFinished(visit: Visit) {\n this.progressBar.setValue(1)\n this.hideProgressBar()\n }\n\n visitCompleted(visit: Visit) {\n visit.followRedirect()\n }\n\n pageInvalidated() {\n this.reload()\n }\n\n visitFailed(visit: Visit) {\n\n }\n\n visitRendered(visit: Visit) {\n\n }\n\n // Private\n\n showProgressBarAfterDelay() {\n this.progressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay)\n }\n\n showProgressBar = () => {\n this.progressBar.show()\n }\n\n hideProgressBar() {\n this.progressBar.hide()\n if (this.progressBarTimeout != null) {\n window.clearTimeout(this.progressBarTimeout)\n delete this.progressBarTimeout\n }\n }\n\n reload() {\n window.location.reload()\n }\n\n get navigator() {\n return this.session.navigator\n }\n}\n","export class CacheObserver {\n started = false\n\n start() {\n if (!this.started) {\n this.started = true\n addEventListener(\"turbo:before-cache\", this.removeStaleElements, false)\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false\n removeEventListener(\"turbo:before-cache\", this.removeStaleElements, false)\n }\n }\n\n removeStaleElements() {\n const staleElements = [ ...document.querySelectorAll('[data-turbo-cache=\"false\"]') ]\n\n for (const element of staleElements) {\n element.remove()\n }\n }\n}\n","export interface FormSubmitObserverDelegate {\n willSubmitForm(form: HTMLFormElement, submitter?: HTMLElement): boolean\n formSubmitted(form: HTMLFormElement, submitter?: HTMLElement): void\n}\n\nexport class FormSubmitObserver {\n readonly delegate: FormSubmitObserverDelegate\n started = false\n\n constructor(delegate: FormSubmitObserverDelegate) {\n this.delegate = delegate\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"submit\", this.submitCaptured, true)\n this.started = true\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"submit\", this.submitCaptured, true)\n this.started = false\n }\n }\n\n submitCaptured = () => {\n removeEventListener(\"submit\", this.submitBubbled, false)\n addEventListener(\"submit\", this.submitBubbled, false)\n }\n\n submitBubbled = <EventListener>((event: SubmitEvent) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined\n const submitter = event.submitter || undefined\n\n if (form) {\n const method = submitter?.getAttribute(\"formmethod\") || form.method\n\n if (method != \"dialog\" && this.delegate.willSubmitForm(form, submitter)) {\n event.preventDefault()\n this.delegate.formSubmitted(form, submitter)\n }\n }\n }\n })\n}\n","import { FormInterceptor, FormInterceptorDelegate } from \"./form_interceptor\"\nimport { FrameElement } from \"../../elements/frame_element\"\nimport { LinkInterceptor, LinkInterceptorDelegate } from \"./link_interceptor\"\n\nexport class FrameRedirector implements LinkInterceptorDelegate, FormInterceptorDelegate {\n readonly element: Element\n readonly linkInterceptor: LinkInterceptor\n readonly formInterceptor: FormInterceptor\n\n constructor(element: Element) {\n this.element = element\n this.linkInterceptor = new LinkInterceptor(this, element)\n this.formInterceptor = new FormInterceptor(this, element)\n }\n\n start() {\n this.linkInterceptor.start()\n this.formInterceptor.start()\n }\n\n stop() {\n this.linkInterceptor.stop()\n this.formInterceptor.stop()\n }\n\n shouldInterceptLinkClick(element: Element, url: string) {\n return this.shouldRedirect(element)\n }\n\n linkClickIntercepted(element: Element, url: string) {\n const frame = this.findFrameElement(element)\n if (frame) {\n frame.src = url\n }\n }\n\n shouldInterceptFormSubmission(element: HTMLFormElement, submitter?: HTMLElement) {\n return this.shouldRedirect(element, submitter)\n }\n\n formSubmissionIntercepted(element: HTMLFormElement, submitter?: HTMLElement) {\n const frame = this.findFrameElement(element)\n if (frame) {\n frame.delegate.formSubmissionIntercepted(element, submitter)\n }\n }\n\n private shouldRedirect(element: Element, submitter?: HTMLElement) {\n const frame = this.findFrameElement(element)\n return frame ? frame != element.closest(\"turbo-frame\") : false\n }\n\n private findFrameElement(element: Element) {\n const id = element.getAttribute(\"data-turbo-frame\")\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`)\n if (frame instanceof FrameElement) {\n return frame\n }\n }\n }\n}\n","import { Position } from \"../types\"\nimport { nextMicrotask, uuid } from \"../../util\"\n\nexport interface HistoryDelegate {\n historyPoppedToLocationWithRestorationIdentifier(location: URL, restorationIdentifier: string): void\n}\n\ntype HistoryMethod = (this: typeof history, state: any, title: string, url?: string | null | undefined) => void\n\nexport type RestorationData = { scrollPosition?: Position }\n\nexport type RestorationDataMap = { [restorationIdentifier: string]: RestorationData }\n\nexport class History {\n readonly delegate: HistoryDelegate\n location!: URL\n restorationIdentifier = uuid()\n restorationData: RestorationDataMap = {}\n started = false\n pageLoaded = false\n previousScrollRestoration?: ScrollRestoration\n\n constructor(delegate: HistoryDelegate) {\n this.delegate = delegate\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false)\n addEventListener(\"load\", this.onPageLoad, false)\n this.started = true\n this.replace(new URL(window.location.href))\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false)\n removeEventListener(\"load\", this.onPageLoad, false)\n this.started = false\n }\n }\n\n push(location: URL, restorationIdentifier?: string) {\n this.update(history.pushState, location, restorationIdentifier)\n }\n\n replace(location: URL, restorationIdentifier?: string) {\n this.update(history.replaceState, location, restorationIdentifier)\n }\n\n update(method: HistoryMethod, location: URL, restorationIdentifier = uuid()) {\n const state = { turbo: { restorationIdentifier } }\n method.call(history, state, \"\", location.href)\n this.location = location\n this.restorationIdentifier = restorationIdentifier\n }\n\n // Restoration data\n\n getRestorationDataForIdentifier(restorationIdentifier: string): RestorationData {\n return this.restorationData[restorationIdentifier] || {}\n }\n\n updateRestorationData(additionalData: Partial<RestorationData>) {\n const { restorationIdentifier } = this\n const restorationData = this.restorationData[restorationIdentifier]\n this.restorationData[restorationIdentifier] = { ...restorationData, ...additionalData }\n }\n\n // Scroll restoration\n\n assumeControlOfScrollRestoration() {\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = history.scrollRestoration ?? \"auto\"\n history.scrollRestoration = \"manual\"\n }\n }\n\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration\n delete this.previousScrollRestoration\n }\n }\n\n // Event handlers\n\n onPopState = (event: PopStateEvent) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {}\n if (turbo) {\n this.location = new URL(window.location.href)\n const { restorationIdentifier } = turbo\n this.restorationIdentifier = restorationIdentifier\n this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier)\n }\n }\n }\n\n onPageLoad = async (event: Event) => {\n await nextMicrotask()\n this.pageLoaded = true\n }\n\n // Private\n\n shouldHandlePopState() {\n // Safari dispatches a popstate event after window's load event, ignore it\n return this.pageIsLoaded()\n }\n\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\"\n }\n}\n","import { expandURL } from \"../core/url\"\n\nexport interface LinkClickObserverDelegate {\n willFollowLinkToLocation(link: Element, location: URL): boolean\n followedLinkToLocation(link: Element, location: URL): void\n}\n\nexport class LinkClickObserver {\n readonly delegate: LinkClickObserverDelegate\n started = false\n\n constructor(delegate: LinkClickObserverDelegate) {\n this.delegate = delegate\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"click\", this.clickCaptured, true)\n this.started = true\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"click\", this.clickCaptured, true)\n this.started = false\n }\n }\n\n clickCaptured = () => {\n removeEventListener(\"click\", this.clickBubbled, false)\n addEventListener(\"click\", this.clickBubbled, false)\n }\n\n clickBubbled = (event: MouseEvent) => {\n if (this.clickEventIsSignificant(event)) {\n const link = this.findLinkFromClickTarget(event.target)\n if (link) {\n const location = this.getLocationForLink(link)\n if (this.delegate.willFollowLinkToLocation(link, location)) {\n event.preventDefault()\n this.delegate.followedLinkToLocation(link, location)\n }\n }\n }\n }\n\n clickEventIsSignificant(event: MouseEvent) {\n return !(\n (event.target && (event.target as any).isContentEditable)\n || event.defaultPrevented\n || event.which > 1\n || event.altKey\n || event.ctrlKey\n || event.metaKey\n || event.shiftKey\n )\n }\n\n findLinkFromClickTarget(target: EventTarget | null) {\n if (target instanceof Element) {\n return target.closest(\"a[href]:not([target^=_]):not([download])\")\n }\n }\n\n getLocationForLink(link: Element): URL {\n return expandURL(link.getAttribute(\"href\") || \"\")\n }\n}\n","export type Action = \"advance\" | \"replace\" | \"restore\"\n\nexport function isAction(action: any): action is Action {\n return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nexport type Position = { x: number, y: number }\n\nexport type StreamSource = {\n addEventListener(type: \"message\", listener: (event: MessageEvent) => void, options?: boolean | AddEventListenerOptions): void\n removeEventListener(type: \"message\", listener: (event: MessageEvent) => void, options?: boolean | EventListenerOptions): void\n}\n","import { Action, isAction } from \"../types\"\nimport { FetchMethod } from \"../../http/fetch_request\"\nimport { FetchResponse } from \"../../http/fetch_response\"\nimport { FormSubmission } from \"./form_submission\"\nimport { expandURL, Locatable } from \"../url\"\nimport { Visit, VisitDelegate, VisitOptions } from \"./visit\"\nimport { PageSnapshot } from \"./page_snapshot\"\n\nexport type NavigatorDelegate = VisitDelegate & {\n allowsVisitingLocation(location: URL): boolean\n visitProposedToLocation(location: URL, options: Partial<VisitOptions>): void\n}\n\nexport class Navigator {\n readonly delegate: NavigatorDelegate\n formSubmission?: FormSubmission\n currentVisit?: Visit\n\n constructor(delegate: NavigatorDelegate) {\n this.delegate = delegate\n }\n\n proposeVisit(location: URL, options: Partial<VisitOptions> = {}) {\n if (this.delegate.allowsVisitingLocation(location)) {\n this.delegate.visitProposedToLocation(location, options)\n }\n }\n\n startVisit(locatable: Locatable, restorationIdentifier: string, options: Partial<VisitOptions> = {}) {\n this.stop()\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n referrer: this.location,\n ...options\n })\n this.currentVisit.start()\n }\n\n submitForm(form: HTMLFormElement, submitter?: HTMLElement) {\n this.stop()\n this.formSubmission = new FormSubmission(this, form, submitter, true)\n\n if (this.formSubmission.isIdempotent) {\n this.proposeVisit(this.formSubmission.fetchRequest.url, { action: this.getActionForFormSubmission(this.formSubmission) })\n } else {\n this.formSubmission.start()\n }\n }\n\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop()\n delete this.formSubmission\n }\n\n if (this.currentVisit) {\n this.currentVisit.cancel()\n delete this.currentVisit\n }\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get history() {\n return this.delegate.history\n }\n\n // Form submission delegate\n\n formSubmissionStarted(formSubmission: FormSubmission) {\n\n }\n\n async formSubmissionSucceededWithResponse(formSubmission: FormSubmission, fetchResponse: FetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML\n if (responseHTML) {\n if (formSubmission.method != FetchMethod.get) {\n this.view.clearSnapshotCache()\n }\n\n const { statusCode } = fetchResponse\n const visitOptions = { response: { statusCode, responseHTML } }\n this.proposeVisit(fetchResponse.location, visitOptions)\n }\n }\n }\n\n async formSubmissionFailedWithResponse(formSubmission: FormSubmission, fetchResponse: FetchResponse) {\n const responseHTML = await fetchResponse.responseHTML\n\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML)\n await this.view.renderPage(snapshot)\n this.view.clearSnapshotCache()\n }\n }\n\n formSubmissionErrored(formSubmission: FormSubmission, error: Error) {\n console.error(error)\n }\n\n formSubmissionFinished(formSubmission: FormSubmission) {\n\n }\n\n // Visit delegate\n\n visitStarted(visit: Visit) {\n this.delegate.visitStarted(visit)\n }\n\n visitCompleted(visit: Visit) {\n this.delegate.visitCompleted(visit)\n }\n\n // Visits\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n getActionForFormSubmission(formSubmission: FormSubmission): Action {\n const { formElement, submitter } = formSubmission\n const action = submitter?.getAttribute(\"data-turbo-action\") || formElement.getAttribute(\"data-turbo-action\")\n return isAction(action) ? action : \"advance\"\n }\n}\n","export interface PageObserverDelegate {\n pageBecameInteractive(): void\n pageLoaded(): void\n pageWillUnload(): void\n}\n\nexport enum PageStage {\n initial,\n loading,\n interactive,\n complete\n}\n\nexport class PageObserver {\n readonly delegate: PageObserverDelegate\n stage = PageStage.initial\n started = false\n\n constructor(delegate: PageObserverDelegate) {\n this.delegate = delegate\n }\n\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false)\n addEventListener(\"pagehide\", this.pageWillUnload, false)\n this.started = true\n }\n }\n\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false)\n removeEventListener(\"pagehide\", this.pageWillUnload, false)\n this.started = false\n }\n }\n\n interpretReadyState = () => {\n const { readyState } = this\n if (readyState == \"interactive\") {\n this.pageIsInteractive()\n } else if (readyState == \"complete\") {\n this.pageIsComplete()\n }\n }\n\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive\n this.delegate.pageBecameInteractive()\n }\n }\n\n pageIsComplete() {\n this.pageIsInteractive()\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete\n this.delegate.pageLoaded()\n }\n }\n\n pageWillUnload = () => {\n this.delegate.pageWillUnload()\n }\n\n get readyState() {\n return document.readyState\n }\n}\n","import { Position } from \"../core/types\"\n\nexport interface ScrollObserverDelegate {\n scrollPositionChanged(position: Position): void\n}\n\nexport class ScrollObserver {\n readonly delegate: ScrollObserverDelegate\n started = false\n\n constructor(delegate: ScrollObserverDelegate) {\n this.delegate = delegate\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false)\n this.onScroll()\n this.started = true\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false)\n this.started = false\n }\n }\n\n onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset })\n }\n\n // Private\n\n updatePosition(position: Position) {\n this.delegate.scrollPositionChanged(position)\n }\n}\n","import { FetchResponse } from \"../http/fetch_response\"\nimport { StreamMessage } from \"../core/streams/stream_message\"\nimport { StreamSource } from \"../core/types\"\n\nexport interface StreamObserverDelegate {\n receivedMessageFromStream(message: StreamMessage): void\n}\n\nexport class StreamObserver {\n readonly delegate: StreamObserverDelegate\n readonly sources: Set<StreamSource> = new Set\n private started = false\n\n constructor(delegate: StreamObserverDelegate) {\n this.delegate = delegate\n }\n\n start() {\n if (!this.started) {\n this.started = true\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false)\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false)\n }\n }\n\n connectStreamSource(source: StreamSource) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source)\n source.addEventListener(\"message\", this.receiveMessageEvent, false)\n }\n }\n\n disconnectStreamSource(source: StreamSource) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source)\n source.removeEventListener(\"message\", this.receiveMessageEvent, false)\n }\n }\n\n streamSourceIsConnected(source: StreamSource) {\n return this.sources.has(source)\n }\n\n inspectFetchResponse = <EventListener>((event: CustomEvent) => {\n const response = fetchResponseFromEvent(event)\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault()\n this.receiveMessageResponse(response)\n }\n })\n\n receiveMessageEvent = (event: MessageEvent) => {\n if (this.started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data)\n }\n }\n\n async receiveMessageResponse(response: FetchResponse) {\n const html = await response.responseHTML\n if (html) {\n this.receiveMessageHTML(html)\n }\n }\n\n receiveMessageHTML(html: string) {\n this.delegate.receivedMessageFromStream(new StreamMessage(html))\n }\n}\n\nfunction fetchResponseFromEvent(event: CustomEvent) {\n const fetchResponse = event.detail?.fetchResponse\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse\n }\n}\n\nfunction fetchResponseIsStream(response: FetchResponse) {\n const contentType = response.contentType ?? \"\"\n return contentType.startsWith(StreamMessage.contentType)\n}\n","import { PageSnapshot } from \"./page_snapshot\"\nimport { Renderer } from \"../renderer\"\n\nexport class ErrorRenderer extends Renderer<HTMLBodyElement, PageSnapshot> {\n async render() {\n this.replaceHeadAndBody()\n this.activateScriptElements()\n }\n\n replaceHeadAndBody() {\n const { documentElement, head, body } = document\n documentElement.replaceChild(this.newHead, head)\n documentElement.replaceChild(this.newElement, body)\n }\n\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode\n if (parentNode) {\n const element = this.createScriptElement(replaceableElement)\n parentNode.replaceChild(element, replaceableElement)\n }\n }\n }\n\n get newHead() {\n return this.newSnapshot.headSnapshot.element\n }\n\n get scriptElements() {\n return [ ...document.documentElement.querySelectorAll(\"script\") ]\n }\n}\n","import { Renderer } from \"../renderer\"\nimport { PageSnapshot } from \"./page_snapshot\"\n\nexport class PageRenderer extends Renderer<HTMLBodyElement, PageSnapshot> {\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n }\n\n prepareToRender() {\n this.mergeHead()\n }\n\n async render() {\n this.replaceBody()\n }\n\n finishRendering() {\n super.finishRendering()\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement()\n }\n }\n\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot\n }\n\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n mergeHead() {\n this.copyNewHeadStylesheetElements()\n this.copyNewHeadScriptElements()\n this.removeCurrentHeadProvisionalElements()\n this.copyNewHeadProvisionalElements()\n }\n\n replaceBody() {\n this.preservingPermanentElements(() => {\n this.activateNewBody()\n this.assignNewBody()\n })\n }\n\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n }\n\n copyNewHeadStylesheetElements() {\n for (const element of this.newHeadStylesheetElements) {\n document.head.appendChild(element)\n }\n }\n\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(this.createScriptElement(element))\n }\n }\n\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element)\n }\n }\n\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element)\n }\n }\n\n activateNewBody() {\n document.adoptNode(this.newElement)\n this.activateNewBodyScriptElements()\n }\n\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = this.createScriptElement(inertScriptElement)\n inertScriptElement.replaceWith(activatedScriptElement)\n }\n }\n\n assignNewBody() {\n if (document.body && this.newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(this.newElement)\n } else {\n document.documentElement.appendChild(this.newElement)\n }\n }\n\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements\n }\n\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements\n }\n\n get newBodyScriptElements() {\n return [ ...this.newElement.querySelectorAll(\"script\") ]\n }\n}\n","import { toCacheKey } from \"../url\"\nimport { PageSnapshot } from \"./page_snapshot\"\n\nexport class SnapshotCache {\n readonly keys: string[] = []\n readonly size: number\n snapshots: { [url: string]: PageSnapshot } = {}\n\n constructor(size: number) {\n this.size = size\n }\n\n has(location: URL) {\n return toCacheKey(location) in this.snapshots\n }\n\n get(location: URL): PageSnapshot | undefined {\n if (this.has(location)) {\n const snapshot = this.read(location)\n this.touch(location)\n return snapshot\n }\n }\n\n put(location: URL, snapshot: PageSnapshot) {\n this.write(location, snapshot)\n this.touch(location)\n return snapshot\n }\n\n clear() {\n this.snapshots = {}\n }\n\n // Private\n\n read(location: URL) {\n return this.snapshots[toCacheKey(location)]\n }\n\n write(location: URL, snapshot: PageSnapshot) {\n this.snapshots[toCacheKey(location)] = snapshot\n }\n\n touch(location: URL) {\n const key = toCacheKey(location)\n const index = this.keys.indexOf(key)\n if (index > -1) this.keys.splice(index, 1)\n this.keys.unshift(key)\n this.trim()\n }\n\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key]\n }\n }\n}\n","import { nextEventLoopTick } from \"../../util\"\nimport { View, ViewDelegate } from \"../view\"\nimport { ErrorRenderer } from \"./error_renderer\"\nimport { PageRenderer } from \"./page_renderer\"\nimport { PageSnapshot } from \"./page_snapshot\"\nimport { SnapshotCache } from \"./snapshot_cache\"\n\nexport interface PageViewDelegate extends ViewDelegate<PageSnapshot> {\n viewWillCacheSnapshot(): void\n}\n\ntype PageViewRenderer = PageRenderer | ErrorRenderer\n\nexport class PageView extends View<Element, PageSnapshot, PageViewRenderer, PageViewDelegate> {\n readonly snapshotCache = new SnapshotCache(10)\n lastRenderedLocation = new URL(location.href)\n\n renderPage(snapshot: PageSnapshot, isPreview = false) {\n const renderer = new PageRenderer(this.snapshot, snapshot, isPreview)\n return this.render(renderer)\n }\n\n renderError(snapshot: PageSnapshot) {\n const renderer = new ErrorRenderer(this.snapshot, snapshot, false)\n this.render(renderer)\n }\n\n clearSnapshotCache() {\n this.snapshotCache.clear()\n }\n\n async cacheSnapshot() {\n if (this.shouldCacheSnapshot) {\n this.delegate.viewWillCacheSnapshot()\n const { snapshot, lastRenderedLocation: location } = this\n await nextEventLoopTick()\n this.snapshotCache.put(location, snapshot.clone())\n }\n }\n\n getCachedSnapshotForLocation(location: URL) {\n return this.snapshotCache.get(location)\n }\n\n get snapshot() {\n return PageSnapshot.fromElement(this.element)\n }\n\n get shouldCacheSnapshot() {\n return this.snapshot.isCacheable\n }\n}\n","import { Adapter } from \"./native/adapter\"\nimport { BrowserAdapter } from \"./native/browser_adapter\"\nimport { CacheObserver } from \"../observers/cache_observer\"\nimport { FormSubmitObserver, FormSubmitObserverDelegate } from \"../observers/form_submit_observer\"\nimport { FrameRedirector } from \"./frames/frame_redirector\"\nimport { History, HistoryDelegate } from \"./drive/history\"\nimport { LinkClickObserver, LinkClickObserverDelegate } from \"../observers/link_click_observer\"\nimport { expandURL, isPrefixedBy, isHTML, Locatable } from \"./url\"\nimport { Navigator, NavigatorDelegate } from \"./drive/navigator\"\nimport { PageObserver, PageObserverDelegate } from \"../observers/page_observer\"\nimport { ScrollObserver } from \"../observers/scroll_observer\"\nimport { StreamMessage } from \"./streams/stream_message\"\nimport { StreamObserver } from \"../observers/stream_observer\"\nimport { Action, Position, StreamSource, isAction } from \"./types\"\nimport { dispatch } from \"../util\"\nimport { PageView, PageViewDelegate } from \"./drive/page_view\"\nimport { Visit, VisitOptions } from \"./drive/visit\"\nimport { PageSnapshot } from \"./drive/page_snapshot\"\n\nexport type TimingData = {}\n\nexport class Session implements FormSubmitObserverDelegate, HistoryDelegate, LinkClickObserverDelegate, NavigatorDelegate, PageObserverDelegate, PageViewDelegate {\n readonly navigator = new Navigator(this)\n readonly history = new History(this)\n readonly view = new PageView(this, document.documentElement)\n adapter: Adapter = new BrowserAdapter(this)\n\n readonly pageObserver = new PageObserver(this)\n readonly cacheObserver = new CacheObserver()\n readonly linkClickObserver = new LinkClickObserver(this)\n readonly formSubmitObserver = new FormSubmitObserver(this)\n readonly scrollObserver = new ScrollObserver(this)\n readonly streamObserver = new StreamObserver(this)\n\n readonly frameRedirector = new FrameRedirector(document.documentElement)\n\n enabled = true\n progressBarDelay = 500\n started = false\n\n start() {\n if (!this.started) {\n this.pageObserver.start()\n this.cacheObserver.start()\n this.linkClickObserver.start()\n this.formSubmitObserver.start()\n this.scrollObserver.start()\n this.streamObserver.start()\n this.frameRedirector.start()\n this.history.start()\n this.started = true\n this.enabled = true\n }\n }\n\n disable() {\n this.enabled = false\n }\n\n stop() {\n if (this.started) {\n this.pageObserver.stop()\n this.cacheObserver.stop()\n this.linkClickObserver.stop()\n this.formSubmitObserver.stop()\n this.scrollObserver.stop()\n this.streamObserver.stop()\n this.frameRedirector.stop()\n this.history.stop()\n this.started = false\n }\n }\n\n registerAdapter(adapter: Adapter) {\n this.adapter = adapter\n }\n\n visit(location: Locatable, options: Partial<VisitOptions> = {}) {\n this.navigator.proposeVisit(expandURL(location), options)\n }\n\n connectStreamSource(source: StreamSource) {\n this.streamObserver.connectStreamSource(source)\n }\n\n disconnectStreamSource(source: StreamSource) {\n this.streamObserver.disconnectStreamSource(source)\n }\n\n renderStreamMessage(message: StreamMessage | string) {\n document.documentElement.appendChild(StreamMessage.wrap(message).fragment)\n }\n\n clearCache() {\n this.view.clearSnapshotCache()\n }\n\n setProgressBarDelay(delay: number) {\n this.progressBarDelay = delay\n }\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n // History delegate\n\n historyPoppedToLocationWithRestorationIdentifier(location: URL) {\n if (this.enabled) {\n this.navigator.proposeVisit(location, { action: \"restore\", historyChanged: true })\n } else {\n this.adapter.pageInvalidated()\n }\n }\n\n // Scroll observer delegate\n\n scrollPositionChanged(position: Position) {\n this.history.updateRestorationData({ scrollPosition: position })\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link: Element, location: URL) {\n return elementIsNavigable(link)\n && this.locationIsVisitable(location)\n && this.applicationAllowsFollowingLinkToLocation(link, location)\n }\n\n followedLinkToLocation(link: Element, location: URL) {\n const action = this.getActionForLink(link)\n this.visit(location.href, { action })\n }\n\n // Navigator delegate\n\n allowsVisitingLocation(location: URL) {\n return this.applicationAllowsVisitingLocation(location)\n }\n\n visitProposedToLocation(location: URL, options: Partial<VisitOptions>) {\n extendURLWithDeprecatedProperties(location)\n this.adapter.visitProposedToLocation(location, options)\n }\n\n visitStarted(visit: Visit) {\n extendURLWithDeprecatedProperties(visit.location)\n this.notifyApplicationAfterVisitingLocation(visit.location)\n }\n\n visitCompleted(visit: Visit) {\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics())\n }\n\n // Form submit observer delegate\n\n willSubmitForm(form: HTMLFormElement, submitter?: HTMLElement): boolean {\n return elementIsNavigable(form) && elementIsNavigable(submitter)\n }\n\n formSubmitted(form: HTMLFormElement, submitter?: HTMLElement) {\n this.navigator.submitForm(form, submitter)\n }\n\n // Page observer delegate\n\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location\n this.notifyApplicationAfterPageLoad()\n }\n\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration()\n }\n\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration()\n }\n\n // Stream observer delegate\n\n receivedMessageFromStream(message: StreamMessage) {\n this.renderStreamMessage(message)\n }\n\n // Page view delegate\n\n viewWillCacheSnapshot() {\n this.notifyApplicationBeforeCachingSnapshot()\n }\n\n viewWillRenderSnapshot({ element }: PageSnapshot, isPreview: boolean) {\n this.notifyApplicationBeforeRender(element)\n }\n\n viewRenderedSnapshot(snapshot: PageSnapshot, isPreview: boolean) {\n this.view.lastRenderedLocation = this.history.location\n this.notifyApplicationAfterRender()\n }\n\n viewInvalidated() {\n this.adapter.pageInvalidated()\n }\n\n // Application events\n\n applicationAllowsFollowingLinkToLocation(link: Element, location: URL) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location)\n return !event.defaultPrevented\n }\n\n applicationAllowsVisitingLocation(location: URL) {\n const event = this.notifyApplicationBeforeVisitingLocation(location)\n return !event.defaultPrevented\n }\n\n notifyApplicationAfterClickingLinkToLocation(link: Element, location: URL) {\n return dispatch(\"turbo:click\", { target: link, detail: { url: location.href }, cancelable: true })\n }\n\n notifyApplicationBeforeVisitingLocation(location: URL) {\n return dispatch(\"turbo:before-visit\", { detail: { url: location.href }, cancelable: true })\n }\n\n notifyApplicationAfterVisitingLocation(location: URL) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href } })\n }\n\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\")\n }\n\n notifyApplicationBeforeRender(newBody: HTMLBodyElement) {\n return dispatch(\"turbo:before-render\", { detail: { newBody }})\n }\n\n notifyApplicationAfterRender() {\n return dispatch(\"turbo:render\")\n }\n\n notifyApplicationAfterPageLoad(timing: TimingData = {}) {\n return dispatch(\"turbo:load\", { detail: { url: this.location.href, timing }})\n }\n\n // Private\n\n getActionForLink(link: Element): Action {\n const action = link.getAttribute(\"data-turbo-action\")\n return isAction(action) ? action : \"advance\"\n }\n\n locationIsVisitable(location: URL) {\n return isPrefixedBy(location, this.snapshot.rootLocation) && isHTML(location)\n }\n\n get snapshot() {\n return this.view.snapshot\n }\n}\n\nexport function elementIsNavigable(element?: Element) {\n const container = element?.closest(\"[data-turbo]\")\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\"\n } else {\n return true\n }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url: URL) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors)\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString()\n }\n }\n}\n","import { FrameElement, FrameElementDelegate, FrameLoadingStyle } from \"../../elements/frame_element\"\nimport { FetchMethod, FetchRequest, FetchRequestDelegate, FetchRequestHeaders } from \"../../http/fetch_request\"\nimport { FetchResponse } from \"../../http/fetch_response\"\nimport { AppearanceObserver, AppearanceObserverDelegate } from \"../../observers/appearance_observer\"\nimport { parseHTMLDocument } from \"../../util\"\nimport { FormSubmission, FormSubmissionDelegate } from \"../drive/form_submission\"\nimport { Snapshot } from \"../snapshot\"\nimport { ViewDelegate } from \"../view\"\nimport { expandURL, urlsAreEqual, Locatable } from \"../url\"\nimport { FormInterceptor, FormInterceptorDelegate } from \"./form_interceptor\"\nimport { FrameView } from \"./frame_view\"\nimport { LinkInterceptor, LinkInterceptorDelegate } from \"./link_interceptor\"\nimport { FrameRenderer } from \"./frame_renderer\"\nimport { elementIsNavigable } from \"../session\"\n\nexport class FrameController implements AppearanceObserverDelegate, FetchRequestDelegate, FormInterceptorDelegate, FormSubmissionDelegate, FrameElementDelegate, LinkInterceptorDelegate, ViewDelegate<Snapshot<FrameElement>> {\n readonly element: FrameElement\n readonly view: FrameView\n readonly appearanceObserver: AppearanceObserver\n readonly linkInterceptor: LinkInterceptor\n readonly formInterceptor: FormInterceptor\n currentURL?: string | null\n formSubmission?: FormSubmission\n private resolveVisitPromise = () => {}\n private connected = false\n private hasBeenLoaded = false\n private settingSourceURL = false\n\n constructor(element: FrameElement) {\n this.element = element\n this.view = new FrameView(this, this.element)\n this.appearanceObserver = new AppearanceObserver(this, this.element)\n this.linkInterceptor = new LinkInterceptor(this, this.element)\n this.formInterceptor = new FormInterceptor(this, this.element)\n }\n\n connect() {\n if (!this.connected) {\n this.connected = true\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start()\n }\n this.linkInterceptor.start()\n this.formInterceptor.start()\n this.sourceURLChanged()\n }\n }\n\n disconnect() {\n if (this.connected) {\n this.connected = false\n this.appearanceObserver.stop()\n this.linkInterceptor.stop()\n this.formInterceptor.stop()\n }\n }\n\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.loadSourceURL()\n }\n }\n\n sourceURLChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n this.loadSourceURL()\n }\n }\n\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start()\n } else {\n this.appearanceObserver.stop()\n this.loadSourceURL()\n }\n }\n\n async loadSourceURL() {\n if (!this.settingSourceURL && this.enabled && this.isActive && this.sourceURL != this.currentURL) {\n const previousURL = this.currentURL\n this.currentURL = this.sourceURL\n if (this.sourceURL) {\n try {\n this.element.loaded = this.visit(this.sourceURL)\n this.appearanceObserver.stop()\n await this.element.loaded\n this.hasBeenLoaded = true\n } catch (error) {\n this.currentURL = previousURL\n throw error\n }\n }\n }\n }\n\n async loadResponse(fetchResponse: FetchResponse) {\n if (fetchResponse.redirected) {\n this.sourceURL = fetchResponse.response.url\n }\n\n try {\n const html = await fetchResponse.responseHTML\n if (html) {\n const { body } = parseHTMLDocument(html)\n const snapshot = new Snapshot(await this.extractForeignFrameElement(body))\n const renderer = new FrameRenderer(this.view.snapshot, snapshot, false)\n await this.view.render(renderer)\n }\n } catch (error) {\n console.error(error)\n this.view.invalidate()\n }\n }\n\n // Appearance observer delegate\n\n elementAppearedInViewport(element: Element) {\n this.loadSourceURL()\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element: Element, url: string) {\n return this.shouldInterceptNavigation(element)\n }\n\n linkClickIntercepted(element: Element, url: string) {\n this.navigateFrame(element, url)\n }\n\n // Form interceptor delegate\n\n shouldInterceptFormSubmission(element: HTMLFormElement, submitter?: Element) {\n return this.shouldInterceptNavigation(element, submitter)\n }\n\n formSubmissionIntercepted(element: HTMLFormElement, submitter?: HTMLElement) {\n if (this.formSubmission) {\n this.formSubmission.stop()\n }\n\n this.formSubmission = new FormSubmission(this, element, submitter)\n if (this.formSubmission.fetchRequest.isIdempotent) {\n this.navigateFrame(element, this.formSubmission.fetchRequest.url.href)\n } else {\n const { fetchRequest } = this.formSubmission\n this.prepareHeadersForRequest(fetchRequest.headers, fetchRequest)\n this.formSubmission.start()\n }\n }\n\n // Fetch request delegate\n\n prepareHeadersForRequest(headers: FetchRequestHeaders, request: FetchRequest) {\n headers[\"Turbo-Frame\"] = this.id\n }\n\n requestStarted(request: FetchRequest) {\n this.element.setAttribute(\"busy\", \"\")\n }\n\n requestPreventedHandlingResponse(request: FetchRequest, response: FetchResponse) {\n this.resolveVisitPromise()\n }\n\n async requestSucceededWithResponse(request: FetchRequest, response: FetchResponse) {\n await this.loadResponse(response)\n this.resolveVisitPromise()\n }\n\n requestFailedWithResponse(request: FetchRequest, response: FetchResponse) {\n console.error(response)\n this.resolveVisitPromise()\n }\n\n requestErrored(request: FetchRequest, error: Error) {\n console.error(error)\n this.resolveVisitPromise()\n }\n\n requestFinished(request: FetchRequest) {\n this.element.removeAttribute(\"busy\")\n }\n\n // Form submission delegate\n\n formSubmissionStarted(formSubmission: FormSubmission) {\n const frame = this.findFrameElement(formSubmission.formElement)\n frame.setAttribute(\"busy\", \"\")\n }\n\n formSubmissionSucceededWithResponse(formSubmission: FormSubmission, response: FetchResponse) {\n const frame = this.findFrameElement(formSubmission.formElement)\n frame.delegate.loadResponse(response)\n }\n\n formSubmissionFailedWithResponse(formSubmission: FormSubmission, fetchResponse: FetchResponse) {\n this.element.delegate.loadResponse(fetchResponse)\n }\n\n formSubmissionErrored(formSubmission: FormSubmission, error: Error) {\n console.error(error)\n }\n\n formSubmissionFinished(formSubmission: FormSubmission) {\n const frame = this.findFrameElement(formSubmission.formElement)\n frame.removeAttribute(\"busy\")\n }\n\n // View delegate\n\n viewWillRenderSnapshot(snapshot: Snapshot, isPreview: boolean) {\n\n }\n\n viewRenderedSnapshot(snapshot: Snapshot, isPreview: boolean) {\n\n }\n\n viewInvalidated() {\n\n }\n\n // Private\n\n private async visit(url: Locatable) {\n const request = new FetchRequest(this, FetchMethod.get, expandURL(url))\n\n return new Promise<void>(resolve => {\n this.resolveVisitPromise = () => {\n this.resolveVisitPromise = () => {}\n resolve()\n }\n request.perform()\n })\n }\n\n private navigateFrame(element: Element, url: string) {\n const frame = this.findFrameElement(element)\n frame.src = url\n }\n\n private findFrameElement(element: Element) {\n const id = element.getAttribute(\"data-turbo-frame\") || this.element.getAttribute(\"target\")\n return getFrameElementById(id) ?? this.element\n }\n\n async extractForeignFrameElement(container: ParentNode): Promise<FrameElement> {\n let element\n const id = CSS.escape(this.id)\n\n try {\n if (element = activateElement(container.querySelector(`turbo-frame#${id}`), this.currentURL)) {\n return element\n }\n\n if (element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.currentURL)) {\n await element.loaded\n return await this.extractForeignFrameElement(element)\n }\n\n console.error(`Response has no matching <turbo-frame id=\"${id}\"> element`)\n } catch (error) {\n console.error(error)\n }\n\n return new FrameElement()\n }\n\n private shouldInterceptNavigation(element: Element, submitter?: Element) {\n const id = element.getAttribute(\"data-turbo-frame\") || this.element.getAttribute(\"target\")\n\n if (!this.enabled || id == \"_top\") {\n return false\n }\n\n if (id) {\n const frameElement = getFrameElementById(id)\n if (frameElement) {\n return !frameElement.disabled\n }\n }\n\n if (!elementIsNavigable(element)) {\n return false\n }\n\n if (submitter && !elementIsNavigable(submitter)) {\n return false\n }\n\n return true\n }\n\n // Computed properties\n\n get id() {\n return this.element.id\n }\n\n get enabled() {\n return !this.element.disabled\n }\n\n get sourceURL() {\n if (this.element.src) {\n return this.element.src\n }\n }\n\n set sourceURL(sourceURL: string | undefined) {\n this.settingSourceURL = true\n this.element.src = sourceURL ?? null\n this.currentURL = this.element.src\n this.settingSourceURL = false\n }\n\n get loadingStyle() {\n return this.element.loading\n }\n\n get isLoading() {\n return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined\n }\n\n get isActive() {\n return this.element.isActive && this.connected\n }\n}\n\nfunction getFrameElementById(id: string | null) {\n if (id != null) {\n const element = document.getElementById(id)\n if (element instanceof FrameElement) {\n return element\n }\n }\n}\n\nfunction activateElement(element: Element | null, currentURL?: string | null) {\n if (element) {\n const src = element.getAttribute(\"src\")\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true)\n }\n\n if (element instanceof FrameElement) {\n element.connectedCallback()\n return element\n }\n }\n}\n","import { StreamElement } from \"../../elements/stream_element\"\n\nexport const StreamActions: { [action: string]: (this: StreamElement) => void } = {\n after() {\n this.targetElements.forEach(e => e.parentElement?.insertBefore(this.templateContent, e.nextSibling))\n },\n\n append() {\n this.removeDuplicateTargetChildren()\n this.targetElements.forEach(e => e.append(this.templateContent))\n },\n\n before() {\n this.targetElements.forEach(e => e.parentElement?.insertBefore(this.templateContent, e))\n },\n\n prepend() {\n this.removeDuplicateTargetChildren()\n this.targetElements.forEach(e => e.prepend(this.templateContent))\n },\n\n remove() {\n this.targetElements.forEach(e => e.remove())\n },\n\n replace() {\n this.targetElements.forEach(e => e.replaceWith(this.templateContent))\n },\n\n update() {\n this.targetElements.forEach(e => { \n e.innerHTML = \"\"\n e.append(this.templateContent)\n })\n }\n}\n","import { StreamActions } from \"../core/streams/stream_actions\"\nimport { nextAnimationFrame } from \"../util\"\n\n// <turbo-stream action=replace target=id><template>...\n\nexport class StreamElement extends HTMLElement {\n async connectedCallback() {\n try {\n await this.render()\n } catch (error) {\n console.error(error)\n } finally {\n this.disconnect()\n }\n }\n\n private renderPromise?: Promise<void>\n\n async render() {\n return this.renderPromise ??= (async () => {\n if (this.dispatchEvent(this.beforeRenderEvent)) {\n await nextAnimationFrame()\n this.performAction()\n }\n })()\n }\n\n disconnect() {\n try { this.remove() } catch {}\n }\n \n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach(c => c.remove())\n }\n \n get duplicateChildren() {\n const existingChildren = this.targetElements.flatMap(e => [...e.children]).filter(c => !!c.id)\n const newChildrenIds = [...this.templateContent?.children].filter(c => !!c.id).map(c => c.id)\n \n return existingChildren.filter(c => newChildrenIds.includes(c.id))\n }\n \n get performAction() {\n if (this.action) {\n const actionFunction = StreamActions[this.action]\n if (actionFunction) {\n return actionFunction\n }\n this.raise(\"unknown action\")\n }\n this.raise(\"action attribute is missing\")\n }\n\n get targetElements() {\n if (this.target) { \n return this.targetElementsById\n } else if (this.targets) {\n return this.targetElementsByQuery\n } else {\n this.raise(\"target or targets attribute is missing\")\n }\n }\n\n get templateContent() {\n return this.templateElement.content.cloneNode(true)\n }\n\n get templateElement() {\n if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild\n }\n this.raise(\"first child element must be a <template> element\")\n }\n\n get action() {\n return this.getAttribute(\"action\")\n }\n\n get target() {\n return this.getAttribute(\"target\")\n }\n\n get targets() {\n return this.getAttribute(\"targets\")\n }\n\n private raise(message: string): never {\n throw new Error(`${this.description}: ${message}`)\n }\n\n private get description() {\n return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n }\n\n private get beforeRenderEvent() {\n return new CustomEvent(\"turbo:before-stream-render\", { bubbles: true, cancelable: true })\n }\n\n private get targetElementsById() {\n const element = this.ownerDocument?.getElementById(this.target!)\n\n if (element !== null) {\n return [ element ]\n } else {\n return []\n }\n }\n\n private get targetElementsByQuery() {\n const elements = this.ownerDocument?.querySelectorAll(this.targets!)\n\n if (elements.length !== 0) {\n return Array.prototype.slice.call(elements)\n } else {\n return []\n }\n }\n}\n","import { FrameController } from \"../core/frames/frame_controller\"\nimport { FrameElement } from \"./frame_element\"\nimport { StreamElement } from \"./stream_element\"\n\nFrameElement.delegateConstructor = FrameController\n\nexport * from \"./frame_element\"\nexport * from \"./stream_element\"\n\ncustomElements.define(\"turbo-frame\", FrameElement)\ncustomElements.define(\"turbo-stream\", StreamElement)\n","import { unindent } from \"./util\"\n\n(() => {\n let element: Element | null = document.currentScript\n if (!element) return\n if (element.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n while (element = element.parentElement) {\n if (element == document.body) {\n return console.warn(unindent`\n You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n For more information, see: https://turbo.hotwire.dev/handbook/building#working-with-script-elements\n\n ——\n Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n `, element.outerHTML)\n }\n }\n})()\n","import { Adapter } from \"./native/adapter\"\nimport { Session } from \"./session\"\nimport { Locatable } from \"./url\"\nimport { StreamMessage } from \"./streams/stream_message\"\nimport { StreamSource } from \"./types\"\nimport { VisitOptions } from \"./drive/visit\"\n\nconst session = new Session\nconst { navigator } = session\nexport { navigator }\n\nexport function start() {\n session.start()\n}\n\nexport function registerAdapter(adapter: Adapter) {\n session.registerAdapter(adapter)\n}\n\nexport function visit(location: Locatable, options?: Partial<VisitOptions>) {\n session.visit(location, options)\n}\n\nexport function connectStreamSource(source: StreamSource) {\n session.connectStreamSource(source)\n}\n\nexport function disconnectStreamSource(source: StreamSource) {\n session.disconnectStreamSource(source)\n}\n\nexport function renderStreamMessage(message: StreamMessage | string) {\n session.renderStreamMessage(message)\n}\n\nexport function clearCache() {\n session.clearCache()\n}\n\nexport function setProgressBarDelay(delay: number) {\n session.setProgressBarDelay(delay)\n}\n","import \"./polyfills\"\nimport \"./elements\"\nimport \"./script_warning\"\n\nexport * from \"./core\"\nimport * as Turbo from \"./core\"\nwindow.Turbo = Turbo\nTurbo.start()\n"],"names":["Turbo.start"],"mappings":"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"}