@hotwired/turbo 7.0.0-beta.3 → 7.0.0-beta.4
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.
- package/dist/turbo.es2017-esm.js +647 -574
- package/dist/turbo.es2017-esm.js.map +1 -1
- package/dist/turbo.es2017-umd.js +647 -574
- package/dist/turbo.es2017-umd.js.map +1 -1
- package/dist/turbo.es5-umd.js +1153 -843
- package/dist/turbo.es5-umd.js.map +1 -1
- package/dist/types/core/drive/error_renderer.d.ts +7 -11
- package/dist/types/core/drive/form_submission.d.ts +11 -3
- package/dist/types/core/drive/head_snapshot.d.ts +21 -0
- package/dist/types/core/drive/history.d.ts +5 -6
- package/dist/types/core/drive/navigator.d.ts +7 -7
- package/dist/types/core/drive/page_renderer.d.ts +26 -0
- package/dist/types/core/drive/page_snapshot.d.ts +17 -0
- package/dist/types/core/drive/page_view.d.ts +21 -0
- package/dist/types/core/drive/snapshot_cache.d.ts +8 -9
- package/dist/types/core/drive/visit.d.ts +13 -15
- package/dist/types/core/frames/frame_controller.d.ts +11 -10
- package/dist/types/core/frames/frame_renderer.d.ts +8 -0
- package/dist/types/core/frames/frame_view.d.ts +7 -0
- package/dist/types/core/index.d.ts +1 -1
- package/dist/types/core/native/adapter.d.ts +1 -2
- package/dist/types/core/native/browser_adapter.d.ts +1 -2
- package/dist/types/core/renderer.d.ts +26 -0
- package/dist/types/core/session.d.ts +23 -21
- package/dist/types/core/snapshot.d.ts +11 -0
- package/dist/types/core/streams/stream_message.d.ts +1 -0
- package/dist/types/core/url.d.ts +7 -0
- package/dist/types/core/view.d.ts +27 -0
- package/dist/types/http/fetch_request.d.ts +8 -11
- package/dist/types/http/fetch_response.d.ts +1 -2
- package/dist/types/observers/link_click_observer.d.ts +3 -4
- package/dist/types/observers/stream_observer.d.ts +0 -1
- package/dist/types/tests/functional/form_submission_tests.d.ts +11 -3
- package/dist/types/tests/functional/frame_tests.d.ts +4 -0
- package/dist/types/tests/functional/navigation_tests.d.ts +1 -0
- package/dist/types/tests/functional/rendering_tests.d.ts +2 -0
- package/dist/types/tests/functional/stream_tests.d.ts +0 -2
- package/dist/types/tests/helpers/functional_test_case.d.ts +3 -0
- package/dist/types/tests/unit/deprecated_adapter_support_test.d.ts +21 -0
- package/dist/types/tests/unit/index.d.ts +1 -0
- package/dist/types/util.d.ts +2 -0
- package/package.json +1 -1
- package/dist/types/core/drive/head_details.d.ts +0 -22
- package/dist/types/core/drive/renderer.d.ts +0 -13
- package/dist/types/core/drive/snapshot.d.ts +0 -24
- package/dist/types/core/drive/snapshot_renderer.d.ts +0 -43
- package/dist/types/core/drive/view.d.ts +0 -34
- package/dist/types/core/location.d.ts +0 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turbo.es2017-esm.js","sources":["../src/polyfills/custom-elements-native-shim.ts","../src/polyfills/submit-event.ts","../src/elements/frame_element.ts","../src/core/location.ts","../src/http/fetch_response.ts","../src/util.ts","../src/http/fetch_request.ts","../src/observers/appearance_observer.ts","../src/core/drive/form_submission.ts","../src/core/frames/form_interceptor.ts","../src/core/frames/link_interceptor.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/drive/progress_bar.ts","../src/core/drive/head_details.ts","../src/core/drive/snapshot.ts","../src/core/drive/visit.ts","../src/core/native/browser_adapter.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/drive/navigator.ts","../src/observers/page_observer.ts","../src/observers/scroll_observer.ts","../src/core/streams/stream_message.ts","../src/observers/stream_observer.ts","../src/core/types.ts","../src/core/drive/renderer.ts","../src/core/drive/error_renderer.ts","../src/core/drive/snapshot_cache.ts","../src/core/drive/snapshot_renderer.ts","../src/core/drive/view.ts","../src/core/session.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 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 [\"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 }\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 = Location | string\n\nexport class Location {\n static get currentLocation() {\n return this.wrap(window.location.toString())\n }\n\n static wrap(locatable: Locatable): Location\n static wrap(locatable?: Locatable | null): Location | undefined\n static wrap(locatable: Locatable) {\n if (typeof locatable == \"string\") {\n return new this(locatable)\n } else if (locatable != null) {\n return locatable\n }\n }\n\n readonly absoluteURL: string\n readonly requestURL: string\n readonly anchor?: string\n\n constructor(url: string) {\n const linkWithAnchor = document.createElement(\"a\")\n linkWithAnchor.href = url\n\n this.absoluteURL = linkWithAnchor.href\n\n const anchorLength = linkWithAnchor.hash.length\n if (anchorLength < 2) {\n this.requestURL = this.absoluteURL\n } else {\n this.requestURL = this.absoluteURL.slice(0, -anchorLength)\n this.anchor = linkWithAnchor.hash.slice(1)\n }\n }\n\n getOrigin() {\n return this.absoluteURL.split(\"/\", 3).join(\"/\")\n }\n\n getPath() {\n return (this.requestURL.match(/\\/\\/[^/]*(\\/[^?;]*)/) || [])[1] || \"/\"\n }\n\n getPathComponents() {\n return this.getPath().split(\"/\").slice(1)\n }\n\n getLastPathComponent() {\n return this.getPathComponents().slice(-1)[0]\n }\n\n getExtension() {\n return (this.getLastPathComponent().match(/\\.[^.]*$/) || [])[0] || \"\"\n }\n\n isHTML() {\n return !!this.getExtension().match(/^(?:|\\.(?:htm|html|xhtml))$/)\n }\n\n isPrefixedBy(location: Location): boolean {\n const prefixURL = getPrefixURL(location)\n return this.isEqualTo(location) || stringStartsWith(this.absoluteURL, prefixURL)\n }\n\n isEqualTo(location?: Location) {\n return location && this.absoluteURL === location.absoluteURL\n }\n\n toCacheKey() {\n return this.requestURL\n }\n\n toJSON() {\n return this.absoluteURL\n }\n\n toString() {\n return this.absoluteURL\n }\n\n valueOf() {\n return this.absoluteURL\n }\n}\n\nfunction getPrefixURL(location: Location) {\n return addTrailingSlash(location.getOrigin() + location.getPath())\n}\n\nfunction addTrailingSlash(url: string) {\n return stringEndsWith(url, \"/\") ? url : url + \"/\"\n}\n\nfunction stringStartsWith(string: string, prefix: string) {\n return string.slice(0, prefix.length) === prefix\n}\n\nfunction stringEndsWith(string: string, suffix: string) {\n return string.slice(-suffix.length) === suffix\n}\n","import { Location } from \"../core/location\"\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() {\n return Location.wrap(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 nextMicrotask() {\n return Promise.resolve()\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 { Location } from \"../core/location\"\nimport { dispatch } from \"../util\"\n\nexport interface FetchRequestDelegate {\n additionalHeadersForRequest?(request: FetchRequest): { [header: string]: string }\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\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 location: Location\n readonly body?: FetchRequestBody\n readonly abortController = new AbortController\n\n constructor(delegate: FetchRequestDelegate, method: FetchMethod, location: Location, body?: FetchRequestBody) {\n this.delegate = delegate\n this.method = method\n this.location = location\n this.body = body\n }\n\n get url() {\n const url = this.location.absoluteURL\n const query = this.params.toString()\n if (this.isIdempotent && query.length) {\n return [url, query].join(url.includes(\"?\") ? \"&\" : \"?\")\n } else {\n return url\n }\n }\n\n get params() {\n return this.entries.reduce((params, [name, value]) => {\n params.append(name, value.toString())\n return params\n }, new URLSearchParams)\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 dispatch(\"turbo:before-fetch-request\", { detail: { fetchOptions } })\n try {\n this.delegate.requestStarted(this)\n const response = await fetch(this.url, 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.isIdempotent ? undefined : this.body,\n signal: this.abortSignal\n }\n }\n\n get isIdempotent() {\n return this.method == FetchMethod.get\n }\n\n get headers() {\n return {\n \"Accept\": \"text/html, application/xhtml+xml\",\n ...this.additionalHeaders\n }\n }\n\n get additionalHeaders() {\n if (typeof this.delegate.additionalHeadersForRequest == \"function\") {\n return this.delegate.additionalHeadersForRequest(this)\n } else {\n return {}\n }\n }\n\n get abortSignal() {\n return this.abortController.signal\n }\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 { FetchRequest, FetchMethod, fetchMethodFromString, FetchRequestHeaders } from \"../../http/fetch_request\"\nimport { FetchResponse } from \"../../http/fetch_response\"\nimport { Location } from \"../location\"\nimport { dispatch } from \"../../util\"\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\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.formData = buildFormData(formElement, submitter)\n this.submitter = submitter\n this.fetchRequest = new FetchRequest(this, this.method, this.location, this.formData)\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() {\n return Location.wrap(this.action)\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 additionalHeadersForRequest(request: FetchRequest) {\n const headers: FetchRequestHeaders = {}\n if (this.method != FetchMethod.get) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\")\n if (token) {\n headers[\"X-CSRF-Token\"] = token\n }\n }\n return headers\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 && 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 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","export 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 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 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 { FrameElement, FrameElementDelegate, FrameLoadingStyle } from \"../../elements/frame_element\"\nimport { FetchMethod, FetchRequest, FetchRequestDelegate } from \"../../http/fetch_request\"\nimport { FetchResponse } from \"../../http/fetch_response\"\nimport { AppearanceObserver, AppearanceObserverDelegate } from \"../../observers/appearance_observer\"\nimport { nextAnimationFrame } from \"../../util\"\nimport { FormSubmission, FormSubmissionDelegate } from \"../drive/form_submission\"\nimport { Locatable, Location } from \"../location\"\nimport { FormInterceptor, FormInterceptorDelegate } from \"./form_interceptor\"\nimport { LinkInterceptor, LinkInterceptorDelegate } from \"./link_interceptor\"\n\nexport class FrameController implements AppearanceObserverDelegate, FetchRequestDelegate, FormInterceptorDelegate, FormSubmissionDelegate, FrameElementDelegate, LinkInterceptorDelegate {\n readonly element: FrameElement\n readonly appearanceObserver: AppearanceObserver\n readonly linkInterceptor: LinkInterceptor\n readonly formInterceptor: FormInterceptor\n loadingURL?: string\n formSubmission?: FormSubmission\n private resolveVisitPromise = () => {}\n\n constructor(element: FrameElement) {\n this.element = 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.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start()\n }\n this.linkInterceptor.start()\n this.formInterceptor.start()\n }\n\n disconnect() {\n this.appearanceObserver.stop()\n this.linkInterceptor.stop()\n this.formInterceptor.stop()\n }\n\n sourceURLChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\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.isActive && this.sourceURL && this.sourceURL != this.loadingURL) {\n try {\n this.loadingURL = this.sourceURL\n this.element.loaded = this.visit(this.sourceURL)\n this.appearanceObserver.stop()\n await this.element.loaded\n } finally {\n delete this.loadingURL\n }\n }\n }\n\n async loadResponse(response: FetchResponse): Promise<void> {\n const fragment = fragmentFromHTML(await response.responseHTML)\n if (fragment) {\n const element = await this.extractForeignFrameElement(fragment)\n await nextAnimationFrame()\n this.loadFrameElement(element)\n this.scrollFrameIntoView(element)\n await nextAnimationFrame()\n this.focusFirstAutofocusableElement()\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) {\n return this.shouldInterceptNavigation(element)\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)\n } else {\n this.formSubmission.start()\n }\n }\n\n // Fetch request delegate\n\n additionalHeadersForRequest(request: FetchRequest) {\n return { \"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\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\n }\n\n formSubmissionFinished(formSubmission: FormSubmission) {\n\n }\n\n // Private\n\n private async visit(url: Locatable) {\n const location = Location.wrap(url)\n const request = new FetchRequest(this, FetchMethod.get, location)\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\")\n return getFrameElementById(id) ?? this.element\n }\n\n private async extractForeignFrameElement(container: ParentNode): Promise<FrameElement> {\n let element\n const id = CSS.escape(this.id)\n\n if (element = activateElement(container.querySelector(`turbo-frame#${id}`))) {\n return element\n }\n\n if (element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`))) {\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 return new FrameElement()\n }\n\n private loadFrameElement(frameElement: FrameElement) {\n const destinationRange = document.createRange()\n destinationRange.selectNodeContents(this.element)\n destinationRange.deleteContents()\n\n const sourceRange = frameElement.ownerDocument?.createRange()\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement)\n this.element.appendChild(sourceRange.extractContents())\n }\n }\n\n private focusFirstAutofocusableElement(): boolean {\n const element = this.firstAutofocusableElement\n if (element) {\n element.focus()\n return true\n }\n return false\n }\n\n private scrollFrameIntoView(frame: FrameElement): boolean {\n if (this.element.autoscroll || frame.autoscroll) {\n const element = this.element.firstElementChild\n const block = readScrollLogicalPosition(this.element.getAttribute(\"data-autoscroll-block\"), \"end\")\n\n if (element) {\n element.scrollIntoView({ block })\n return true\n }\n }\n return false\n }\n\n private shouldInterceptNavigation(element: 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 return true\n }\n\n // Computed properties\n\n get firstAutofocusableElement(): HTMLElement | null {\n const element = this.element.querySelector(\"[autofocus]\")\n return element instanceof HTMLElement ? element : null\n }\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 return this.element.src\n }\n\n get loadingStyle() {\n return this.element.loading\n }\n\n get isLoading() {\n return this.formSubmission !== undefined || this.loadingURL !== undefined\n }\n\n get isActive() {\n return this.element.isActive\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 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\nfunction fragmentFromHTML(html?: string) {\n if (html) {\n const foreignDocument = document.implementation.createHTMLDocument()\n return foreignDocument.createRange().createContextualFragment(html)\n }\n}\n\nfunction activateElement(element: Node | null) {\n if (element && element.ownerDocument !== document) {\n element = document.importNode(element, true)\n }\n\n if (element instanceof FrameElement) {\n return element\n }\n}\n","import { StreamElement } from \"../../elements/stream_element\"\n\nexport const StreamActions: { [action: string]: (this: StreamElement) => void } = {\n append() {\n this.targetElement?.append(this.templateContent)\n },\n\n prepend() {\n this.targetElement?.prepend(this.templateContent)\n },\n\n remove() {\n this.targetElement?.remove()\n },\n\n replace() {\n this.targetElement?.replaceWith(this.templateContent)\n },\n\n update() {\n if (this.targetElement) {\n this.targetElement.innerHTML = \"\"\n this.targetElement.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 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 targetElement() {\n if (this.target) {\n return this.ownerDocument?.getElementById(this.target)\n }\n this.raise(\"target attribute is missing\")\n }\n\n get templateContent() {\n return this.templateElement.content\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 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","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 { 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","type ElementDetailMap = { [outerHTML: string]: ElementDetails }\n\ntype ElementDetails = { type?: ElementType, tracked: boolean, elements: Element[] }\n\ntype ElementType = \"script\" | \"stylesheet\"\n\nexport class HeadDetails {\n readonly detailsByOuterHTML: ElementDetailMap\n\n static fromHeadElement(headElement: HTMLHeadElement | null): HeadDetails {\n const children = headElement ? [ ...headElement.children ] : []\n return new this(children)\n }\n\n constructor(children: Element[]) {\n this.detailsByOuterHTML = 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\n getTrackedElementSignature(): string {\n return Object.keys(this.detailsByOuterHTML)\n .filter(outerHTML => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\")\n }\n\n getScriptElementsNotInDetails(headDetails: HeadDetails) {\n return this.getElementsMatchingTypeNotInDetails(\"script\", headDetails)\n }\n\n getStylesheetElementsNotInDetails(headDetails: HeadDetails) {\n return this.getElementsMatchingTypeNotInDetails(\"stylesheet\", headDetails)\n }\n\n getElementsMatchingTypeNotInDetails(matchedType: ElementType, headDetails: HeadDetails) {\n return Object.keys(this.detailsByOuterHTML)\n .filter(outerHTML => !(outerHTML in headDetails.detailsByOuterHTML))\n .map(outerHTML => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element)\n }\n\n getProvisionalElements(): 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 { HeadDetails } from \"./head_details\"\nimport { Location } from \"../location\"\n\nexport class Snapshot {\n static wrap(value: Snapshot | string | HTMLHtmlElement) {\n if (value instanceof this) {\n return value\n } else if (typeof value == \"string\") {\n return this.fromHTMLString(value)\n } else {\n return this.fromHTMLElement(value)\n }\n }\n\n static fromHTMLString(html: string) {\n const { documentElement } = new DOMParser().parseFromString(html, \"text/html\")\n return this.fromHTMLElement(documentElement as HTMLHtmlElement)\n }\n\n static fromHTMLElement(htmlElement: HTMLHtmlElement) {\n const headElement = htmlElement.querySelector(\"head\")\n const bodyElement = htmlElement.querySelector(\"body\") || document.createElement(\"body\")\n const headDetails = HeadDetails.fromHeadElement(headElement)\n return new this(headDetails, bodyElement)\n }\n\n readonly headDetails: HeadDetails\n readonly bodyElement: HTMLBodyElement\n\n constructor(headDetails: HeadDetails, bodyElement: HTMLBodyElement) {\n this.headDetails = headDetails\n this.bodyElement = bodyElement\n }\n\n clone(): Snapshot {\n const { bodyElement } = Snapshot.fromHTMLString(this.bodyElement.outerHTML)\n return new Snapshot(this.headDetails, bodyElement)\n }\n\n getRootLocation() {\n const root = this.getSetting(\"root\", \"/\")\n return new Location(root)\n }\n\n getCacheControlValue() {\n return this.getSetting(\"cache-control\")\n }\n\n getElementForAnchor(anchor: string) {\n try {\n return this.bodyElement.querySelector(`[id='${anchor}'], a[name='${anchor}']`)\n } catch {\n return null\n }\n }\n\n getPermanentElements() {\n return [ ...this.bodyElement.querySelectorAll(\"[id][data-turbo-permanent]\") ]\n }\n\n getPermanentElementById(id: string) {\n return this.bodyElement.querySelector(`#${id}[data-turbo-permanent]`)\n }\n\n getPermanentElementsPresentInSnapshot(snapshot: Snapshot) {\n return this.getPermanentElements().filter(({ id }) => snapshot.getPermanentElementById(id))\n }\n\n findFirstAutofocusableElement() {\n return this.bodyElement.querySelector(\"[autofocus]\")\n }\n\n hasAnchor(anchor: string) {\n return this.getElementForAnchor(anchor) != null\n }\n\n isPreviewable() {\n return this.getCacheControlValue() != \"no-preview\"\n }\n\n isCacheable() {\n return this.getCacheControlValue() != \"no-cache\"\n }\n\n isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\"\n }\n\n // Private\n\n getSetting(name: string): string | undefined\n getSetting(name: string, defaultValue: string): string\n getSetting(name: string, defaultValue?: string) {\n const value = this.headDetails.getMetaValue(`turbo-${name}`)\n return value == null ? defaultValue : value\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 { Location } from \"../location\"\nimport { RenderCallback } from \"./renderer\"\nimport { Snapshot } from \"./snapshot\"\nimport { Action } from \"../types\"\nimport { uuid } from \"../../util\"\nimport { View } from \"./view\"\n\nexport interface VisitDelegate {\n readonly adapter: Adapter\n readonly view: View\n readonly history: History\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?: Location,\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?: Location\n readonly timingMetrics: TimingMetrics = {}\n\n followedRedirect = false\n frame?: number\n historyChanged = false\n location: Location\n redirectedToLocation?: Location\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: Location, 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.isEqualTo(this.referrer) ? \"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(() => {\n this.cacheSnapshot()\n if (isSuccessful(statusCode) && responseHTML != null) {\n this.view.render({ snapshot: Snapshot.fromHTMLString(responseHTML) }, this.performScroll)\n this.adapter.visitRendered(this)\n this.complete()\n } else {\n this.view.render({ error: responseHTML }, this.performScroll)\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 && (!this.location.anchor || snapshot.hasAnchor(this.location.anchor))) {\n if (this.action == \"restore\" || snapshot.isPreviewable()) {\n return snapshot\n }\n }\n }\n\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return Snapshot.wrap(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(() => {\n this.cacheSnapshot()\n this.view.render({ snapshot, isPreview }, this.performScroll)\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 (this.location.anchor != null) {\n this.view.scrollToAnchor(this.location.anchor)\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 render(callback: RenderCallback) {\n this.cancelRender()\n this.frame = requestAnimationFrame(() => {\n delete this.frame\n callback.call(this)\n })\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 { Locatable } from \"../location\"\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: Locatable, 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 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 { Location } from \"../location\"\nimport { Position } from \"../types\"\nimport { nextMicrotask, uuid } from \"../../util\"\n\nexport interface HistoryDelegate {\n historyPoppedToLocationWithRestorationIdentifier(location: Location, 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!: Location\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(Location.currentLocation)\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: Location, restorationIdentifier?: string) {\n this.update(history.pushState, location, restorationIdentifier)\n }\n\n replace(location: Location, restorationIdentifier?: string) {\n this.update(history.replaceState, location, restorationIdentifier)\n }\n\n update(method: HistoryMethod, location: Location, restorationIdentifier = uuid()) {\n const state = { turbo: { restorationIdentifier } }\n method.call(history, state, \"\", location.absoluteURL)\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 const location = Location.currentLocation\n this.location = location\n const { restorationIdentifier } = turbo\n this.restorationIdentifier = restorationIdentifier\n this.delegate.historyPoppedToLocationWithRestorationIdentifier(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 { Location } from \"../core/location\"\n\nexport interface LinkClickObserverDelegate {\n willFollowLinkToLocation(link: Element, location: Location): boolean\n followedLinkToLocation(link: Element, location: Location): 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) {\n return new Location(link.getAttribute(\"href\") || \"\")\n }\n}\n","import { FetchMethod } from \"../../http/fetch_request\"\nimport { FetchResponse } from \"../../http/fetch_response\"\nimport { FormSubmission } from \"./form_submission\"\nimport { Locatable, Location } from \"../location\"\nimport { Visit, VisitDelegate, VisitOptions } from \"./visit\"\nimport { Snapshot } from \"./snapshot\"\n\nexport type NavigatorDelegate = VisitDelegate & {\n allowsVisitingLocation(location: Location): boolean\n visitProposedToLocation(location: Location, 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: Location, options: Partial<VisitOptions> = {}) {\n if (this.delegate.allowsVisitingLocation(location)) {\n this.delegate.visitProposedToLocation(location, options)\n }\n }\n\n startVisit(location: Locatable, restorationIdentifier: string, options: Partial<VisitOptions> = {}) {\n this.stop()\n this.currentVisit = new Visit(this, Location.wrap(location), 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 this.formSubmission.start()\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 = Snapshot.fromHTMLString(responseHTML)\n this.view.render({ snapshot }, () => {})\n this.view.clearSnapshotCache()\n }\n }\n\n formSubmissionErrored(formSubmission: FormSubmission, error: Error) {\n\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","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 { StreamElement } from \"../../elements/stream_element\"\n\nexport class StreamMessage {\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 { FetchRequestOptions } from \"../http/fetch_request\"\nimport { 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-request\", this.prepareFetchRequest, 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-request\", this.prepareFetchRequest, true)\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 prepareFetchRequest = <EventListener>((event: CustomEvent) => {\n const fetchOptions: FetchRequestOptions = event.detail?.fetchOptions\n if (fetchOptions) {\n const { headers } = fetchOptions\n headers.Accept = [ \"text/vnd.turbo-stream.html\", headers.Accept ].join(\", \")\n }\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 /^text\\/vnd\\.turbo-stream\\.html\\b/.test(contentType)\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","export type RenderCallback = () => void\n\nexport interface RenderDelegate {\n viewWillRender(newBody: HTMLBodyElement): void\n viewRendered(newBody: HTMLBodyElement): void\n viewInvalidated(): void\n}\n\nexport abstract class Renderer {\n abstract delegate: RenderDelegate\n abstract newBody: HTMLBodyElement\n\n renderView(callback: RenderCallback) {\n this.delegate.viewWillRender(this.newBody)\n callback()\n this.delegate.viewRendered(this.newBody)\n }\n\n invalidateView() {\n this.delegate.viewInvalidated()\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\nfunction copyElementAttributes(destinationElement: Element, sourceElement: Element) {\n for (const { name, value } of [ ...sourceElement.attributes ]) {\n destinationElement.setAttribute(name, value)\n }\n}\n","import { RenderCallback, RenderDelegate, Renderer } from \"./renderer\"\n\nexport class ErrorRenderer extends Renderer {\n readonly delegate: RenderDelegate\n readonly htmlElement: HTMLHtmlElement\n readonly newHead: HTMLHeadElement\n readonly newBody: HTMLBodyElement\n\n static render(delegate: RenderDelegate, callback: RenderCallback, html: string) {\n return new this(delegate, html).render(callback)\n }\n\n constructor(delegate: RenderDelegate, html: string) {\n super()\n this.delegate = delegate\n this.htmlElement = (() => {\n const htmlElement = document.createElement(\"html\")\n htmlElement.innerHTML = html\n return htmlElement\n })()\n this.newHead = this.htmlElement.querySelector(\"head\") || document.createElement(\"head\")\n this.newBody = this.htmlElement.querySelector(\"body\") || document.createElement(\"body\")\n }\n\n render(callback: RenderCallback) {\n this.renderView(() => {\n this.replaceHeadAndBody()\n this.activateBodyScriptElements()\n callback()\n })\n }\n\n replaceHeadAndBody() {\n const { documentElement, head, body } = document\n documentElement.replaceChild(this.newHead, head)\n documentElement.replaceChild(this.newBody, body)\n }\n\n activateBodyScriptElements() {\n for (const replaceableElement of this.getScriptElements()) {\n const parentNode = replaceableElement.parentNode\n if (parentNode) {\n const element = this.createScriptElement(replaceableElement)\n parentNode.replaceChild(element, replaceableElement)\n }\n }\n }\n\n getScriptElements() {\n return [ ...document.documentElement.querySelectorAll(\"script\") ]\n }\n}\n","import { Location } from \"../location\"\nimport { Snapshot } from \"./snapshot\"\n\nexport class SnapshotCache {\n readonly keys: string[] = []\n readonly size: number\n snapshots: { [url: string]: Snapshot } = {}\n\n constructor(size: number) {\n this.size = size\n }\n\n has(location: Location) {\n return location.toCacheKey() in this.snapshots\n }\n\n get(location: Location): Snapshot | 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: Location, snapshot: Snapshot) {\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: Location) {\n return this.snapshots[location.toCacheKey()]\n }\n\n write(location: Location, snapshot: Snapshot) {\n this.snapshots[location.toCacheKey()] = snapshot\n }\n\n touch(location: Location) {\n const key = location.toCacheKey()\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 { HeadDetails } from \"./head_details\"\nimport { RenderCallback, RenderDelegate, Renderer } from \"./renderer\"\nimport { Snapshot } from \"./snapshot\"\n\nexport { RenderCallback, RenderDelegate } from \"./renderer\"\n\nexport type PermanentElement = Element & { id: string }\n\nexport type Placeholder = { element: Element, permanentElement: PermanentElement }\n\nexport class SnapshotRenderer extends Renderer {\n readonly delegate: RenderDelegate\n readonly currentSnapshot: Snapshot\n readonly currentHeadDetails: HeadDetails\n readonly newSnapshot: Snapshot\n readonly newHeadDetails: HeadDetails\n readonly newBody: HTMLBodyElement\n readonly isPreview: boolean\n\n static render(delegate: RenderDelegate, callback: RenderCallback, currentSnapshot: Snapshot, newSnapshot: Snapshot, isPreview: boolean) {\n return new this(delegate, currentSnapshot, newSnapshot, isPreview).render(callback)\n }\n\n constructor(delegate: RenderDelegate, currentSnapshot: Snapshot, newSnapshot: Snapshot, isPreview: boolean) {\n super()\n this.delegate = delegate\n this.currentSnapshot = currentSnapshot\n this.currentHeadDetails = currentSnapshot.headDetails\n this.newSnapshot = newSnapshot\n this.newHeadDetails = newSnapshot.headDetails\n this.newBody = newSnapshot.bodyElement\n this.isPreview = isPreview\n }\n\n render(callback: RenderCallback) {\n if (this.shouldRender()) {\n this.mergeHead()\n this.renderView(() => {\n this.replaceBody()\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement()\n }\n callback()\n })\n } else {\n this.invalidateView()\n }\n }\n\n mergeHead() {\n this.copyNewHeadStylesheetElements()\n this.copyNewHeadScriptElements()\n this.removeCurrentHeadProvisionalElements()\n this.copyNewHeadProvisionalElements()\n }\n\n replaceBody() {\n const placeholders = this.relocateCurrentBodyPermanentElements()\n this.activateNewBody()\n this.assignNewBody()\n this.replacePlaceholderElementsWithClonedPermanentElements(placeholders)\n }\n\n shouldRender() {\n return this.newSnapshot.isVisitable() && this.trackedElementsAreIdentical()\n }\n\n trackedElementsAreIdentical() {\n return this.currentHeadDetails.getTrackedElementSignature() == this.newHeadDetails.getTrackedElementSignature()\n }\n\n copyNewHeadStylesheetElements() {\n for (const element of this.getNewHeadStylesheetElements()) {\n document.head.appendChild(element)\n }\n }\n\n copyNewHeadScriptElements() {\n for (const element of this.getNewHeadScriptElements()) {\n document.head.appendChild(this.createScriptElement(element))\n }\n }\n\n removeCurrentHeadProvisionalElements() {\n for (const element of this.getCurrentHeadProvisionalElements()) {\n document.head.removeChild(element)\n }\n }\n\n copyNewHeadProvisionalElements() {\n for (const element of this.getNewHeadProvisionalElements()) {\n document.head.appendChild(element)\n }\n }\n\n relocateCurrentBodyPermanentElements() {\n return this.getCurrentBodyPermanentElements().reduce((placeholders, permanentElement) => {\n const newElement = this.newSnapshot.getPermanentElementById(permanentElement.id)\n if (newElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement)\n replaceElementWithElement(permanentElement, placeholder.element)\n replaceElementWithElement(newElement, permanentElement)\n return [ ...placeholders, placeholder ]\n } else {\n return placeholders\n }\n }, [] as Placeholder[])\n }\n\n replacePlaceholderElementsWithClonedPermanentElements(placeholders: Placeholder[]) {\n for (const { element, permanentElement } of placeholders) {\n const clonedElement = permanentElement.cloneNode(true)\n replaceElementWithElement(element, clonedElement)\n }\n }\n\n activateNewBody() {\n document.adoptNode(this.newBody)\n this.activateNewBodyScriptElements()\n }\n\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.getNewBodyScriptElements()) {\n const activatedScriptElement = this.createScriptElement(inertScriptElement)\n replaceElementWithElement(inertScriptElement, activatedScriptElement)\n }\n }\n\n assignNewBody() {\n if (document.body) {\n replaceElementWithElement(document.body, this.newBody)\n } else {\n document.documentElement.appendChild(this.newBody)\n }\n }\n\n focusFirstAutofocusableElement() {\n const element = this.newSnapshot.findFirstAutofocusableElement()\n if (elementIsFocusable(element)) {\n element.focus()\n }\n }\n\n getNewHeadStylesheetElements() {\n return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails)\n }\n\n getNewHeadScriptElements() {\n return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails)\n }\n\n getCurrentHeadProvisionalElements() {\n return this.currentHeadDetails.getProvisionalElements()\n }\n\n getNewHeadProvisionalElements() {\n return this.newHeadDetails.getProvisionalElements()\n }\n\n getCurrentBodyPermanentElements(): PermanentElement[] {\n return this.currentSnapshot.getPermanentElementsPresentInSnapshot(this.newSnapshot)\n }\n\n getNewBodyScriptElements() {\n return [ ...this.newBody.querySelectorAll(\"script\") ]\n }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement: PermanentElement) {\n const element = document.createElement(\"meta\")\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\")\n element.setAttribute(\"content\", permanentElement.id)\n return { element, permanentElement }\n}\n\nfunction replaceElementWithElement(fromElement: Element, toElement: Element) {\n const parentElement = fromElement.parentElement\n if (parentElement) {\n return parentElement.replaceChild(toElement, fromElement)\n }\n}\n\nfunction elementIsFocusable(element: any): element is { focus: () => void } {\n return element && typeof element.focus == \"function\"\n}\n","import { ErrorRenderer } from \"./error_renderer\"\nimport { Location } from \"../location\"\nimport { Snapshot } from \"./snapshot\"\nimport { SnapshotCache } from \"./snapshot_cache\"\nimport { RenderCallback, RenderDelegate, SnapshotRenderer } from \"./snapshot_renderer\"\nimport { Position } from \"../types\"\nimport { nextMicrotask } from \"../../util\"\n\nexport type RenderOptions = { snapshot: Snapshot, error: string, isPreview: boolean }\n\nexport type ViewDelegate = RenderDelegate & {\n viewWillCacheSnapshot(): void\n}\n\nexport class View {\n readonly delegate: ViewDelegate\n readonly htmlElement = document.documentElement as HTMLHtmlElement\n readonly snapshotCache = new SnapshotCache(10)\n lastRenderedLocation?: Location\n\n constructor(delegate: ViewDelegate) {\n this.delegate = delegate\n }\n\n getRootLocation(): Location {\n return this.getSnapshot().getRootLocation()\n }\n\n getElementForAnchor(anchor: string) {\n return this.getSnapshot().getElementForAnchor(anchor)\n }\n\n getSnapshot(): Snapshot {\n return Snapshot.fromHTMLElement(this.htmlElement)\n }\n\n clearSnapshotCache() {\n this.snapshotCache.clear()\n }\n\n shouldCacheSnapshot() {\n return this.getSnapshot().isCacheable()\n }\n\n async cacheSnapshot() {\n if (this.shouldCacheSnapshot()) {\n this.delegate.viewWillCacheSnapshot()\n const snapshot = this.getSnapshot()\n const location = this.lastRenderedLocation || Location.currentLocation\n await nextMicrotask()\n this.snapshotCache.put(location, snapshot.clone())\n }\n }\n\n getCachedSnapshotForLocation(location: Location) {\n return this.snapshotCache.get(location)\n }\n\n render({ snapshot, error, isPreview }: Partial<RenderOptions>, callback: RenderCallback) {\n this.markAsPreview(isPreview)\n if (snapshot) {\n this.renderSnapshot(snapshot, isPreview, callback)\n } else {\n this.renderError(error, callback)\n }\n }\n\n // Scrolling\n\n scrollToAnchor(anchor: string) {\n const element = this.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 window.scrollTo(x, y)\n }\n\n // Private\n\n markAsPreview(isPreview: boolean | undefined) {\n if (isPreview) {\n this.htmlElement.setAttribute(\"data-turbo-preview\", \"\")\n } else {\n this.htmlElement.removeAttribute(\"data-turbo-preview\")\n }\n }\n\n renderSnapshot(snapshot: Snapshot, isPreview: boolean | undefined, callback: RenderCallback) {\n SnapshotRenderer.render(this.delegate, callback, this.getSnapshot(), snapshot, isPreview || false)\n }\n\n renderError(error: string | undefined, callback: RenderCallback) {\n ErrorRenderer.render(this.delegate, callback, error || \"\")\n }\n}\n","import { Adapter } from \"./native/adapter\"\nimport { BrowserAdapter } from \"./native/browser_adapter\"\nimport { FormSubmitObserver } from \"../observers/form_submit_observer\"\nimport { FrameRedirector } from \"./frames/frame_redirector\"\nimport { History } from \"./drive/history\"\nimport { LinkClickObserver } from \"../observers/link_click_observer\"\nimport { Location, Locatable } from \"./location\"\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 { View } from \"./drive/view\"\nimport { Visit, VisitOptions } from \"./drive/visit\"\n\nexport type TimingData = {}\n\nexport class Session implements NavigatorDelegate, PageObserverDelegate {\n readonly navigator = new Navigator(this)\n readonly history = new History(this)\n readonly view = new View(this)\n adapter: Adapter = new BrowserAdapter(this)\n\n readonly pageObserver = new PageObserver(this)\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.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.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(Location.wrap(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: Location) {\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: Location) {\n return this.elementIsNavigable(link)\n && this.locationIsVisitable(location)\n && this.applicationAllowsFollowingLinkToLocation(link, location)\n }\n\n followedLinkToLocation(link: Element, location: Location) {\n const action = this.getActionForLink(link)\n this.visit(location, { action })\n }\n\n // Navigator delegate\n\n allowsVisitingLocation(location: Location) {\n return this.applicationAllowsVisitingLocation(location)\n }\n\n visitProposedToLocation(location: Location, options: Partial<VisitOptions>) {\n this.adapter.visitProposedToLocation(location, options)\n }\n\n visitStarted(visit: Visit) {\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 this.elementIsNavigable(form) && this.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 // View delegate\n\n viewWillRender(newBody: HTMLBodyElement) {\n this.notifyApplicationBeforeRender(newBody)\n }\n\n viewRendered() {\n this.view.lastRenderedLocation = this.history.location\n this.notifyApplicationAfterRender()\n }\n\n viewInvalidated() {\n this.adapter.pageInvalidated()\n }\n\n viewWillCacheSnapshot() {\n this.notifyApplicationBeforeCachingSnapshot()\n }\n\n // Application events\n\n applicationAllowsFollowingLinkToLocation(link: Element, location: Location) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location)\n return !event.defaultPrevented\n }\n\n applicationAllowsVisitingLocation(location: Location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location)\n return !event.defaultPrevented\n }\n\n notifyApplicationAfterClickingLinkToLocation(link: Element, location: Location) {\n return dispatch(\"turbo:click\", { target: link, detail: { url: location.absoluteURL }, cancelable: true })\n }\n\n notifyApplicationBeforeVisitingLocation(location: Location) {\n return dispatch(\"turbo:before-visit\", { detail: { url: location.absoluteURL }, cancelable: true })\n }\n\n notifyApplicationAfterVisitingLocation(location: Location) {\n return dispatch(\"turbo:visit\", { detail: { url: location.absoluteURL } })\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.absoluteURL, 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 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 locationIsVisitable(location: Location) {\n return location.isPrefixedBy(this.view.getRootLocation()) && location.isHTML()\n }\n}\n","import { Adapter } from \"./native/adapter\"\nimport { Session } from \"./session\"\nimport { Locatable } from \"./location\"\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 { start } from \"./core\"\nstart()\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"turbo.es2017-esm.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/renderer.ts","../src/core/frames/frame_renderer.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/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/form_submit_observer.ts","../src/core/frames/frame_redirector.ts","../src/core/drive/history.ts","../src/observers/link_click_observer.ts","../src/core/drive/navigator.ts","../src/observers/page_observer.ts","../src/observers/scroll_observer.ts","../src/observers/stream_observer.ts","../src/core/types.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/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 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 [\"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 }\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 const anchor = document.createElement(\"a\")\n anchor.href = locatable.toString()\n return new URL(anchor.href)\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\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 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 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 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 isIdempotent() {\n return this.method == FetchMethod.get\n }\n\n get headers() {\n const headers = { ...this.defaultHeaders }\n if (typeof this.delegate.prepareHeadersForRequest == \"function\") {\n this.delegate.prepareHeadersForRequest(headers, this)\n }\n return headers\n }\n\n get abortSignal() {\n return this.abortController.signal\n }\n\n get defaultHeaders() {\n return {\n \"Accept\": \"text/html, application/xhtml+xml\"\n }\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 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 && 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 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 getPermanentElementsPresentInSnapshot(snapshot: Snapshot) {\n return this.permanentElements.filter(({ id }) => snapshot.getPermanentElementById(id))\n }\n}\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","export 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 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 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 { Snapshot } from \"./snapshot\"\n\ntype ResolvingFunctions<T = unknown> = {\n resolve(value: T | PromiseLike<T>): void\n reject(reason?: any): void\n}\n\nexport type PermanentElement = Element & { id: string }\n\nexport type Placeholder = { element: Element, permanentElement: PermanentElement }\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 const placeholders = relocatePermanentElements(this.currentSnapshot, this.newSnapshot)\n callback()\n replacePlaceholderElementsWithClonedPermanentElements(placeholders)\n }\n\n focusFirstAutofocusableElement() {\n const element = this.newSnapshot.firstAutofocusableElement\n if (elementIsFocusable(element)) {\n element.focus()\n }\n }\n\n get currentElement() {\n return this.currentSnapshot.element\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n}\n\nexport function replaceElementWithElement(fromElement: Element, toElement: Element) {\n const parentElement = fromElement.parentElement\n if (parentElement) {\n return parentElement.replaceChild(toElement, fromElement)\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 createPlaceholderForPermanentElement(permanentElement: PermanentElement) {\n const element = document.createElement(\"meta\")\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\")\n element.setAttribute(\"content\", permanentElement.id)\n return { element, permanentElement }\n}\n\nfunction replacePlaceholderElementsWithClonedPermanentElements(placeholders: Placeholder[]) {\n for (const { element, permanentElement } of placeholders) {\n const clonedElement = permanentElement.cloneNode(true)\n replaceElementWithElement(element, clonedElement)\n }\n}\n\nfunction relocatePermanentElements(currentSnapshot: Snapshot, newSnapshot: Snapshot) {\n return currentSnapshot.getPermanentElementsPresentInSnapshot(newSnapshot).reduce((placeholders, permanentElement) => {\n const newElement = newSnapshot.getPermanentElementById(permanentElement.id)\n if (newElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement)\n replaceElementWithElement(permanentElement, placeholder.element)\n replaceElementWithElement(newElement, permanentElement)\n return [ ...placeholders, placeholder ]\n } else {\n return placeholders\n }\n }, [] as Placeholder[])\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 { 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, 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\"\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 loadingURL?: string\n formSubmission?: FormSubmission\n private resolveVisitPromise = () => {}\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.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start()\n }\n this.linkInterceptor.start()\n this.formInterceptor.start()\n }\n\n disconnect() {\n this.appearanceObserver.stop()\n this.linkInterceptor.stop()\n this.formInterceptor.stop()\n }\n\n sourceURLChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\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.isActive && this.sourceURL && this.sourceURL != this.loadingURL) {\n try {\n this.loadingURL = this.sourceURL\n this.element.loaded = this.visit(this.sourceURL)\n this.appearanceObserver.stop()\n await this.element.loaded\n } finally {\n delete this.loadingURL\n }\n }\n }\n\n async loadResponse(response: FetchResponse) {\n try {\n const html = await response.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) {\n return this.shouldInterceptNavigation(element)\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 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\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\n }\n\n formSubmissionFinished(formSubmission: FormSubmission) {\n\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 if (element = activateElement(container.querySelector(`turbo-frame#${id}`))) {\n return element\n }\n\n if (element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`))) {\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 return new FrameElement()\n }\n\n private shouldInterceptNavigation(element: 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 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 return this.element.src\n }\n\n get loadingStyle() {\n return this.element.loading\n }\n\n get isLoading() {\n return this.formSubmission !== undefined || this.loadingURL !== undefined\n }\n\n get isActive() {\n return this.element.isActive\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: Node | null) {\n if (element && element.ownerDocument !== document) {\n element = document.importNode(element, true)\n }\n\n if (element instanceof FrameElement) {\n return element\n }\n}\n","import { StreamElement } from \"../../elements/stream_element\"\n\nexport const StreamActions: { [action: string]: (this: StreamElement) => void } = {\n append() {\n this.targetElement?.append(this.templateContent)\n },\n\n prepend() {\n this.targetElement?.prepend(this.templateContent)\n },\n\n remove() {\n this.targetElement?.remove()\n },\n\n replace() {\n this.targetElement?.replaceWith(this.templateContent)\n },\n\n update() {\n if (this.targetElement) {\n this.targetElement.innerHTML = \"\"\n this.targetElement.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 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 targetElement() {\n if (this.target) {\n return this.ownerDocument?.getElementById(this.target)\n }\n this.raise(\"target attribute is missing\")\n }\n\n get templateContent() {\n return this.templateElement.content\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 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","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 { 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)\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) != null) {\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 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","import { 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.fetchRequest.isIdempotent) {\n this.proposeVisit(this.formSubmission.fetchRequest.url)\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\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","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","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 { 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, replaceElementWithElement } 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 replaceElementWithElement(inertScriptElement, activatedScriptElement)\n }\n }\n\n assignNewBody() {\n if (document.body && this.newElement instanceof HTMLBodyElement) {\n replaceElementWithElement(document.body, 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 { FormSubmitObserver } 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 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 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.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.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 this.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 this.elementIsNavigable(form) && this.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 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 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\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 { 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 { start } from \"./core\"\nstart()\n"],"names":[],"mappings":"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"}
|