@alignable/bifrost 0.0.10 → 0.0.12

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.
Files changed (112) hide show
  1. package/dist/index.d.ts +1 -22
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/lib/PageShell.d.ts.map +1 -1
  4. package/dist/lib/getElementAttributes.d.ts +2 -0
  5. package/dist/lib/getElementAttributes.d.ts.map +1 -0
  6. package/dist/lib/getElementAttributes.js +7 -0
  7. package/dist/lib/turbolinks/browser_adapter.d.ts.map +1 -1
  8. package/dist/lib/turbolinks/browser_adapter.js +1 -4
  9. package/dist/lib/turbolinks/controller.d.ts +18 -44
  10. package/dist/lib/turbolinks/controller.d.ts.map +1 -1
  11. package/dist/lib/turbolinks/controller.js +42 -113
  12. package/dist/lib/turbolinks/head_details.d.ts +1 -0
  13. package/dist/lib/turbolinks/head_details.d.ts.map +1 -1
  14. package/dist/lib/turbolinks/head_details.js +5 -0
  15. package/dist/lib/turbolinks/index.d.ts +3 -3
  16. package/dist/lib/turbolinks/index.d.ts.map +1 -1
  17. package/dist/lib/turbolinks/index.js +18 -18
  18. package/dist/lib/turbolinks/lruCache.d.ts.map +1 -0
  19. package/dist/lib/turbolinks/mergeHead.d.ts +2 -0
  20. package/dist/lib/turbolinks/mergeHead.d.ts.map +1 -0
  21. package/dist/lib/{mergeHead.js → turbolinks/mergeHead.js} +27 -33
  22. package/dist/lib/turbolinks/util.d.ts +4 -0
  23. package/dist/lib/turbolinks/util.d.ts.map +1 -1
  24. package/dist/lib/turbolinks/util.js +40 -0
  25. package/dist/lib/turbolinks/visit.d.ts +5 -23
  26. package/dist/lib/turbolinks/visit.d.ts.map +1 -1
  27. package/dist/lib/turbolinks/visit.js +54 -118
  28. package/dist/proxy/pages/onRenderClient.d.ts.map +1 -1
  29. package/dist/proxy/pages/onRenderClient.js +40 -29
  30. package/dist/proxy/pages/onRenderHtml.d.ts.map +1 -1
  31. package/dist/proxy/pages/onRenderHtml.js +19 -5
  32. package/dist/proxy/pages/restorationVisit/+config.d.ts +2 -0
  33. package/dist/proxy/pages/restorationVisit/+config.d.ts.map +1 -1
  34. package/dist/proxy/pages/restorationVisit/+config.js +3 -0
  35. package/dist/proxy/pages/restorationVisit/onRenderClient.d.ts +3 -0
  36. package/dist/proxy/pages/restorationVisit/onRenderClient.d.ts.map +1 -0
  37. package/dist/proxy/pages/restorationVisit/onRenderClient.js +41 -0
  38. package/dist/renderer/onBeforeRoute.d.ts +1 -6
  39. package/dist/renderer/onBeforeRoute.d.ts.map +1 -1
  40. package/dist/renderer/onBeforeRoute.js +19 -11
  41. package/dist/renderer/onRenderClient.d.ts.map +1 -1
  42. package/dist/renderer/onRenderClient.js +29 -23
  43. package/dist/renderer/onRenderHtml.d.ts.map +1 -1
  44. package/dist/renderer/onRenderHtml.js +12 -16
  45. package/dist/renderer/utils/buildHead.d.ts +4 -0
  46. package/dist/renderer/utils/buildHead.d.ts.map +1 -0
  47. package/dist/renderer/utils/buildHead.js +10 -0
  48. package/dist/types/internal.d.ts +28 -17
  49. package/dist/types/internal.d.ts.map +1 -1
  50. package/package.json +13 -5
  51. package/dist/lib/dispatchTurbolinks.d.ts +0 -28
  52. package/dist/lib/dispatchTurbolinks.d.ts.map +0 -1
  53. package/dist/lib/dispatchTurbolinks.js +0 -5
  54. package/dist/lib/domUtils.d.ts +0 -3
  55. package/dist/lib/domUtils.d.ts.map +0 -1
  56. package/dist/lib/domUtils.js +0 -34
  57. package/dist/lib/getGlobalObject.d.ts +0 -5
  58. package/dist/lib/getGlobalObject.d.ts.map +0 -1
  59. package/dist/lib/getGlobalObject.js +0 -7
  60. package/dist/lib/linkInterceptor.d.ts +0 -2
  61. package/dist/lib/linkInterceptor.d.ts.map +0 -1
  62. package/dist/lib/linkInterceptor.js +0 -74
  63. package/dist/lib/lruCache.d.ts.map +0 -1
  64. package/dist/lib/mergeHead.d.ts +0 -2
  65. package/dist/lib/mergeHead.d.ts.map +0 -1
  66. package/dist/lib/navigateAnywhere.d.ts +0 -3
  67. package/dist/lib/navigateAnywhere.d.ts.map +0 -1
  68. package/dist/lib/navigateAnywhere.js +0 -15
  69. package/dist/lib/snapshots.d.ts +0 -9
  70. package/dist/lib/snapshots.d.ts.map +0 -1
  71. package/dist/lib/snapshots.js +0 -50
  72. package/dist/lib/turbolinks/history.d.ts +0 -22
  73. package/dist/lib/turbolinks/history.d.ts.map +0 -1
  74. package/dist/lib/turbolinks/history.js +0 -60
  75. package/dist/lib/turbolinks/namespace.d.ts +0 -12
  76. package/dist/lib/turbolinks/namespace.d.ts.map +0 -1
  77. package/dist/lib/turbolinks/namespace.js +0 -20
  78. package/dist/lib/turbolinks/passthrough_renderer.d.ts +0 -32
  79. package/dist/lib/turbolinks/passthrough_renderer.d.ts.map +0 -1
  80. package/dist/lib/turbolinks/passthrough_renderer.js +0 -128
  81. package/dist/lib/turbolinks/renderer.d.ts +0 -14
  82. package/dist/lib/turbolinks/renderer.d.ts.map +0 -1
  83. package/dist/lib/turbolinks/renderer.js +0 -28
  84. package/dist/lib/turbolinks/scroll_manager.d.ts +0 -16
  85. package/dist/lib/turbolinks/scroll_manager.d.ts.map +0 -1
  86. package/dist/lib/turbolinks/scroll_manager.js +0 -32
  87. package/dist/lib/turbolinks/snapshot.d.ts +0 -25
  88. package/dist/lib/turbolinks/snapshot.d.ts.map +0 -1
  89. package/dist/lib/turbolinks/snapshot.js +0 -77
  90. package/dist/lib/turbolinks/snapshot_cache.d.ts +0 -18
  91. package/dist/lib/turbolinks/snapshot_cache.d.ts.map +0 -1
  92. package/dist/lib/turbolinks/snapshot_cache.js +0 -42
  93. package/dist/lib/turbolinks/snapshot_renderer copy.d.ts +0 -45
  94. package/dist/lib/turbolinks/snapshot_renderer copy.d.ts.map +0 -1
  95. package/dist/lib/turbolinks/snapshot_renderer copy.js +0 -179
  96. package/dist/lib/turbolinks/snapshot_renderer.d.ts +0 -43
  97. package/dist/lib/turbolinks/snapshot_renderer.d.ts.map +0 -1
  98. package/dist/lib/turbolinks/snapshot_renderer.js +0 -139
  99. package/dist/lib/turbolinks/view.d.ts +0 -21
  100. package/dist/lib/turbolinks/view.d.ts.map +0 -1
  101. package/dist/lib/turbolinks/view.js +0 -42
  102. package/dist/lib/turbolinks.d.ts +0 -5
  103. package/dist/lib/turbolinks.d.ts.map +0 -1
  104. package/dist/lib/turbolinks.js +0 -14
  105. package/dist/proxy/pages/onPageTransitionStart.d.ts +0 -3
  106. package/dist/proxy/pages/onPageTransitionStart.d.ts.map +0 -1
  107. package/dist/proxy/pages/onPageTransitionStart.js +0 -9
  108. package/dist/renderer/utils/formatMetaObject.d.ts +0 -4
  109. package/dist/renderer/utils/formatMetaObject.d.ts.map +0 -1
  110. package/dist/renderer/utils/formatMetaObject.js +0 -3
  111. /package/dist/lib/{lruCache.d.ts → turbolinks/lruCache.d.ts} +0 -0
  112. /package/dist/lib/{lruCache.js → turbolinks/lruCache.js} +0 -0
@@ -1,50 +0,0 @@
1
- import { dispatchTurbolinks } from "./dispatchTurbolinks.js";
2
- import { v4 as uuidv4 } from "uuid";
3
- import { LruCache } from "./lruCache.js";
4
- const snapshots = new LruCache(10);
5
- let lastRestorationIdentifier;
6
- export function writeRestorationIdentifier(pageContext) {
7
- if (history.state.restorationIdentifier) {
8
- return;
9
- }
10
- lastRestorationIdentifier = uuidv4();
11
- history.replaceState({
12
- restorationIdentifier: lastRestorationIdentifier,
13
- // these two could go in snapshot instead...
14
- ...history.state,
15
- }, "");
16
- snapshots.put(lastRestorationIdentifier, {
17
- layout: pageContext.layout,
18
- layoutProps: pageContext.layoutProps,
19
- });
20
- }
21
- /*
22
- this is not working rn because we need to put the restoration identifier onto the history stack BEFORE navigate calls pushState
23
- otherwise it is too late and we can only modify the new page's state...
24
-
25
- what if we add the restoration identifier on page load?
26
- how does react history state libs do it?
27
- */
28
- export function cacheProxiedBody() {
29
- if (document.getElementById("proxied-body")) {
30
- dispatchTurbolinks("turbolinks:before-cache", {});
31
- const bodyAttrs = {};
32
- document.body.getAttributeNames().forEach((name) => {
33
- bodyAttrs[name] = document.body.getAttribute(name);
34
- }, {});
35
- snapshots.put(lastRestorationIdentifier, {
36
- ...snapshots.get(lastRestorationIdentifier),
37
- proxySendClient: {
38
- head: document.head.innerHTML,
39
- body: document.getElementById("proxied-body").innerHTML,
40
- bodyAttrs,
41
- },
42
- });
43
- }
44
- }
45
- const onBrowser = typeof window !== "undefined";
46
- export function getSnapshot() {
47
- if (!onBrowser)
48
- return;
49
- return snapshots.get(history.state.restorationIdentifier);
50
- }
@@ -1,22 +0,0 @@
1
- import { Location } from "./location";
2
- export interface HistoryDelegate {
3
- historyPoppedToLocationWithRestorationIdentifier(location: Location, restorationIdentifier: string): void;
4
- }
5
- type HistoryMethod = (state: any, title: string, url?: string | null | undefined) => void;
6
- export declare class History {
7
- readonly delegate: HistoryDelegate;
8
- started: boolean;
9
- pageLoaded: boolean;
10
- constructor(delegate: HistoryDelegate);
11
- start(): void;
12
- stop(): void;
13
- push(location: Location, restorationIdentifier: string): void;
14
- replace(location: Location, restorationIdentifier: string): void;
15
- onPopState: (event: PopStateEvent) => void;
16
- onPageLoad: (event: Event) => void;
17
- shouldHandlePopState(): boolean;
18
- pageIsLoaded(): boolean;
19
- update(method: HistoryMethod, location: Location, restorationIdentifier: string): void;
20
- }
21
- export {};
22
- //# sourceMappingURL=history.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,MAAM,WAAW,eAAe;IAC9B,gDAAgD,CAC9C,QAAQ,EAAE,QAAQ,EAClB,qBAAqB,EAAE,MAAM,GAC5B,IAAI,CAAC;CACT;AAED,KAAK,aAAa,GAAG,CACnB,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,KAC5B,IAAI,CAAC;AAEV,qBAAa,OAAO;IAClB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,OAAO,UAAS;IAChB,UAAU,UAAS;gBAEP,QAAQ,EAAE,eAAe;IAIrC,KAAK;IAQL,IAAI;IAQJ,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM;IAItD,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM;IAMzD,UAAU,UAAW,aAAa,UAchC;IAEF,UAAU,UAAW,KAAK,UAIxB;IAIF,oBAAoB;IAKpB,YAAY;IAIZ,MAAM,CACJ,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,QAAQ,EAClB,qBAAqB,EAAE,MAAM;CAKhC"}
@@ -1,60 +0,0 @@
1
- import { Location } from "./location";
2
- import { defer } from "./util";
3
- export class History {
4
- constructor(delegate) {
5
- this.started = false;
6
- this.pageLoaded = false;
7
- // Event handlers
8
- this.onPopState = (event) => {
9
- // return
10
- if (!this.shouldHandlePopState())
11
- return;
12
- if (!event.state)
13
- return;
14
- const { turbolinks } = event.state;
15
- if (!turbolinks)
16
- return;
17
- const location = Location.currentLocation;
18
- const { restorationIdentifier } = turbolinks;
19
- this.delegate.historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier);
20
- };
21
- this.onPageLoad = (event) => {
22
- defer(() => {
23
- this.pageLoaded = true;
24
- });
25
- };
26
- this.delegate = delegate;
27
- }
28
- start() {
29
- if (!this.started) {
30
- addEventListener("popstate", this.onPopState, false);
31
- addEventListener("load", this.onPageLoad, false);
32
- this.started = true;
33
- }
34
- }
35
- stop() {
36
- if (this.started) {
37
- removeEventListener("popstate", this.onPopState, false);
38
- removeEventListener("load", this.onPageLoad, false);
39
- this.started = false;
40
- }
41
- }
42
- push(location, restorationIdentifier) {
43
- this.update(history.pushState, location, restorationIdentifier);
44
- }
45
- replace(location, restorationIdentifier) {
46
- this.update(history.replaceState, location, restorationIdentifier);
47
- }
48
- // Private
49
- shouldHandlePopState() {
50
- // Safari dispatches a popstate event after window's load event, ignore it
51
- return this.pageIsLoaded();
52
- }
53
- pageIsLoaded() {
54
- return this.pageLoaded || document.readyState == "complete";
55
- }
56
- update(method, location, restorationIdentifier) {
57
- const state = { turbolinks: { restorationIdentifier } };
58
- method.call(history, state, "", location.absoluteURL);
59
- }
60
- }
@@ -1,12 +0,0 @@
1
- import { Controller, VisitOptions } from "./controller";
2
- import { Locatable } from "./location";
3
- declare const _default: {
4
- readonly supported: boolean;
5
- controller: Controller;
6
- visit(location: Locatable, options?: Partial<VisitOptions>): void;
7
- clearCache(): void;
8
- setProgressBarDelay(delay: number): void;
9
- start(): void;
10
- };
11
- export default _default;
12
- //# sourceMappingURL=namespace.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;;;;oBAWrB,SAAS,YAAY,QAAQ,YAAY,CAAC;;+BAQ/B,MAAM;;;AAfnC,wBAsBE"}
@@ -1,20 +0,0 @@
1
- import { Controller } from "./controller";
2
- const controller = new Controller();
3
- export default {
4
- get supported() {
5
- return Controller.supported;
6
- },
7
- controller,
8
- visit(location, options) {
9
- controller.visit(location, options);
10
- },
11
- clearCache() {
12
- controller.clearCache();
13
- },
14
- setProgressBarDelay(delay) {
15
- controller.setProgressBarDelay(delay);
16
- },
17
- start() {
18
- controller.start();
19
- },
20
- };
@@ -1,32 +0,0 @@
1
- import { HeadDetails } from "./head_details";
2
- import { Renderer, RenderDelegate, RenderCallback } from "./renderer";
3
- export type PermanentElement = Element & {
4
- id: string;
5
- };
6
- export type Placeholder = {
7
- element: Element;
8
- permanentElement: PermanentElement;
9
- };
10
- type BodyRenderer = () => void;
11
- export declare class PassthruRenderer extends Renderer {
12
- delegate?: RenderDelegate;
13
- readonly currentHeadDetails: HeadDetails;
14
- readonly newHeadDetails: HeadDetails;
15
- renderBody: BodyRenderer;
16
- constructor(currentHeadDetails: HeadDetails, newHeadDetails: HeadDetails, renderBody: BodyRenderer);
17
- render(delegate: RenderDelegate, callback: RenderCallback): Promise<void>;
18
- mergeHead(): Promise<void>;
19
- shouldRender(): boolean;
20
- trackedElementsAreIdentical(): boolean;
21
- copyNewHeadStylesheetElements(): void;
22
- copyNewHeadScriptElements(onScriptsLoaded: () => void): void;
23
- removeCurrentHeadProvisionalElements(): void;
24
- copyNewHeadProvisionalElements(): void;
25
- focusFirstAutofocusableElement(): void;
26
- getNewHeadStylesheetElements(): any;
27
- getNewHeadScriptElements(): HTMLScriptElement[];
28
- getCurrentHeadProvisionalElements(): any;
29
- getNewHeadProvisionalElements(): any;
30
- }
31
- export {};
32
- //# sourceMappingURL=passthrough_renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"passthrough_renderer.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/passthrough_renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAItE,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAEF,KAAK,YAAY,GAAG,MAAM,IAAI,CAAC;AAK/B,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,UAAU,EAAE,YAAY,CAAC;gBAGvB,kBAAkB,EAAE,WAAW,EAC/B,cAAc,EAAE,WAAW,EAC3B,UAAU,EAAE,YAAY;IAQpB,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc;IAazD,SAAS;IAmBf,YAAY;IAIZ,2BAA2B;IAO3B,6BAA6B;IAM7B,yBAAyB,CAAC,eAAe,EAAE,MAAM,IAAI;IAmCrD,oCAAoC;IAMpC,8BAA8B;IAM9B,8BAA8B;IAO9B,4BAA4B;IAM5B,wBAAwB;IAMxB,iCAAiC;IAIjC,6BAA6B;CAG9B"}
@@ -1,128 +0,0 @@
1
- import { Renderer } from "./renderer";
2
- import { createScriptElement } from "./util";
3
- const allHeadScriptsEverRun = {};
4
- let firstLoad = true;
5
- export class PassthruRenderer extends Renderer {
6
- constructor(currentHeadDetails, newHeadDetails, renderBody) {
7
- super();
8
- this.currentHeadDetails = currentHeadDetails;
9
- this.newHeadDetails = newHeadDetails;
10
- this.renderBody = renderBody;
11
- }
12
- async render(delegate, callback) {
13
- this.delegate = delegate;
14
- if (this.shouldRender()) {
15
- const scriptsLoaded = this.mergeHead();
16
- this.renderBody();
17
- this.focusFirstAutofocusableElement();
18
- await scriptsLoaded;
19
- callback();
20
- }
21
- else {
22
- this.invalidateView();
23
- }
24
- }
25
- async mergeHead() {
26
- if (firstLoad) {
27
- // TODO: messy code
28
- for (const [outerHTML, details] of Object.entries(this.currentHeadDetails.detailsByOuterHTML)) {
29
- allHeadScriptsEverRun[outerHTML] = true;
30
- }
31
- }
32
- firstLoad = false;
33
- return new Promise((resolve) => {
34
- this.copyNewHeadStylesheetElements();
35
- this.copyNewHeadScriptElements(resolve);
36
- this.removeCurrentHeadProvisionalElements();
37
- this.copyNewHeadProvisionalElements();
38
- });
39
- }
40
- shouldRender() {
41
- return true;
42
- }
43
- trackedElementsAreIdentical() {
44
- return (this.currentHeadDetails.getTrackedElementSignature() ==
45
- this.newHeadDetails.getTrackedElementSignature());
46
- }
47
- copyNewHeadStylesheetElements() {
48
- for (const element of this.getNewHeadStylesheetElements()) {
49
- document.head.appendChild(element);
50
- }
51
- }
52
- copyNewHeadScriptElements(onScriptsLoaded) {
53
- let blockingLoaded = [];
54
- const dispatch = () => {
55
- this.focusFirstAutofocusableElement();
56
- onScriptsLoaded();
57
- };
58
- for (const element of this.getNewHeadScriptElements()) {
59
- const runBefore = element.outerHTML in allHeadScriptsEverRun;
60
- if (!runBefore) {
61
- let cb = false;
62
- if (!element.defer && element.src) {
63
- const idx = blockingLoaded.length;
64
- cb = () => {
65
- blockingLoaded[idx] = true;
66
- if (blockingLoaded.every((v) => v)) {
67
- dispatch();
68
- }
69
- };
70
- blockingLoaded.push(false);
71
- }
72
- const script = createScriptElement(element);
73
- if (cb) {
74
- script.addEventListener("load", cb);
75
- }
76
- document.head.appendChild(script);
77
- allHeadScriptsEverRun[element.outerHTML] = true;
78
- }
79
- }
80
- if (blockingLoaded.length === 0) {
81
- // //TODO: raf waits for react to finish... not 100% sure of the reliability
82
- requestAnimationFrame(dispatch);
83
- }
84
- }
85
- removeCurrentHeadProvisionalElements() {
86
- for (const element of this.getCurrentHeadProvisionalElements()) {
87
- document.head.removeChild(element);
88
- }
89
- }
90
- copyNewHeadProvisionalElements() {
91
- for (const element of this.getNewHeadProvisionalElements()) {
92
- document.head.appendChild(element);
93
- }
94
- }
95
- focusFirstAutofocusableElement() {
96
- const element = document.body.querySelector("[autofocus]");
97
- if (element && "focus" in element && typeof element.focus === "function") {
98
- element.focus();
99
- }
100
- }
101
- getNewHeadStylesheetElements() {
102
- return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails);
103
- }
104
- getNewHeadScriptElements() {
105
- return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails);
106
- }
107
- getCurrentHeadProvisionalElements() {
108
- return this.currentHeadDetails.getProvisionalElements();
109
- }
110
- getNewHeadProvisionalElements() {
111
- return this.newHeadDetails.getProvisionalElements();
112
- }
113
- }
114
- function createPlaceholderForPermanentElement(permanentElement) {
115
- const element = document.createElement("meta");
116
- element.setAttribute("name", "turbolinks-permanent-placeholder");
117
- element.setAttribute("content", permanentElement.id);
118
- return { element, permanentElement };
119
- }
120
- function replaceElementWithElement(fromElement, toElement) {
121
- const parentElement = fromElement.parentElement;
122
- if (parentElement) {
123
- return parentElement.replaceChild(toElement, fromElement);
124
- }
125
- }
126
- function elementIsFocusable(element) {
127
- return element && typeof element.focus == "function";
128
- }
@@ -1,14 +0,0 @@
1
- export type RenderCallback = () => void;
2
- export interface RenderDelegate {
3
- viewWillRender(newBody: HTMLBodyElement): void;
4
- viewRendered(newBody: HTMLBodyElement): void;
5
- viewInvalidated(): void;
6
- }
7
- export declare abstract class Renderer {
8
- abstract delegate: RenderDelegate;
9
- abstract newBody: HTMLBodyElement;
10
- renderView(callback: RenderCallback): void;
11
- invalidateView(): void;
12
- createScriptElement(element: Element): Element;
13
- }
14
- //# sourceMappingURL=renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/renderer.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AAExC,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/C,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7C,eAAe,IAAI,IAAI,CAAC;CACzB;AAED,8BAAsB,QAAQ;IAC5B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAElC,UAAU,CAAC,QAAQ,EAAE,cAAc;IAMnC,cAAc;IAId,mBAAmB,CAAC,OAAO,EAAE,OAAO;CAWrC"}
@@ -1,28 +0,0 @@
1
- import { array } from "./util";
2
- export class Renderer {
3
- renderView(callback) {
4
- this.delegate.viewWillRender(this.newBody);
5
- callback();
6
- this.delegate.viewRendered(this.newBody);
7
- }
8
- invalidateView() {
9
- this.delegate.viewInvalidated();
10
- }
11
- createScriptElement(element) {
12
- if (element.getAttribute("data-turbolinks-eval") == "false") {
13
- return element;
14
- }
15
- else {
16
- const createdScriptElement = document.createElement("script");
17
- createdScriptElement.textContent = element.textContent;
18
- createdScriptElement.async = false;
19
- copyElementAttributes(createdScriptElement, element);
20
- return createdScriptElement;
21
- }
22
- }
23
- }
24
- function copyElementAttributes(destinationElement, sourceElement) {
25
- for (const { name, value } of array(sourceElement.attributes)) {
26
- destinationElement.setAttribute(name, value);
27
- }
28
- }
@@ -1,16 +0,0 @@
1
- import { Position } from "./types";
2
- export interface ScrollManagerDelegate {
3
- scrollPositionChanged(position: Position): void;
4
- }
5
- export declare class ScrollManager {
6
- readonly delegate: ScrollManagerDelegate;
7
- started: boolean;
8
- constructor(delegate: ScrollManagerDelegate);
9
- start(): void;
10
- stop(): void;
11
- scrollToElement(element: Element): void;
12
- scrollToPosition({ x, y }: Position): void;
13
- onScroll: () => void;
14
- updatePosition(position: Position): void;
15
- }
16
- //# sourceMappingURL=scroll_manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scroll_manager.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/scroll_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,WAAW,qBAAqB;IACpC,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CACjD;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,OAAO,UAAS;gBAEJ,QAAQ,EAAE,qBAAqB;IAI3C,KAAK;IAQL,IAAI;IAOJ,eAAe,CAAC,OAAO,EAAE,OAAO;IAIhC,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ;IAInC,QAAQ,aAEN;IAIF,cAAc,CAAC,QAAQ,EAAE,QAAQ;CAGlC"}
@@ -1,32 +0,0 @@
1
- export class ScrollManager {
2
- constructor(delegate) {
3
- this.started = false;
4
- this.onScroll = () => {
5
- this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });
6
- };
7
- this.delegate = delegate;
8
- }
9
- start() {
10
- if (!this.started) {
11
- addEventListener("scroll", this.onScroll, false);
12
- this.onScroll();
13
- this.started = true;
14
- }
15
- }
16
- stop() {
17
- if (this.started) {
18
- removeEventListener("scroll", this.onScroll, false);
19
- this.started = false;
20
- }
21
- }
22
- scrollToElement(element) {
23
- element.scrollIntoView();
24
- }
25
- scrollToPosition({ x, y }) {
26
- window.scrollTo(x, y);
27
- }
28
- // Private
29
- updatePosition(position) {
30
- this.delegate.scrollPositionChanged(position);
31
- }
32
- }
@@ -1,25 +0,0 @@
1
- import { HeadDetails } from "./head_details";
2
- import { Location } from "./location";
3
- export declare class Snapshot {
4
- static wrap(value: Snapshot | string | HTMLHtmlElement): Snapshot;
5
- static fromHTMLString(html: string): Snapshot;
6
- static fromHTMLElement(htmlElement: HTMLHtmlElement): Snapshot;
7
- readonly headDetails: HeadDetails;
8
- readonly bodyElement: HTMLBodyElement;
9
- constructor(headDetails: HeadDetails, bodyElement: HTMLBodyElement);
10
- clone(): Snapshot;
11
- getRootLocation(): Location;
12
- getCacheControlValue(): string | undefined;
13
- getElementForAnchor(anchor: string): Element | null;
14
- getPermanentElements(): Element[];
15
- getPermanentElementById(id: string): Element | null;
16
- getPermanentElementsPresentInSnapshot(snapshot: Snapshot): Element[];
17
- findFirstAutofocusableElement(): Element | null;
18
- hasAnchor(anchor: string): boolean;
19
- isPreviewable(): boolean;
20
- isCacheable(): boolean;
21
- isVisitable(): boolean;
22
- getSetting(name: string): string | undefined;
23
- getSetting(name: string, defaultValue: string): string;
24
- }
25
- //# sourceMappingURL=snapshot.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,qBAAa,QAAQ;IACnB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,eAAe;IAUtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM;IAMlC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,eAAe;IAQnD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;gBAE1B,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe;IAKlE,KAAK,IAAI,QAAQ;IAOjB,eAAe;IAKf,oBAAoB;IAIpB,mBAAmB,CAAC,MAAM,EAAE,MAAM;IAUlC,oBAAoB;IAMpB,uBAAuB,CAAC,EAAE,EAAE,MAAM;IAIlC,qCAAqC,CAAC,QAAQ,EAAE,QAAQ;IAMxD,6BAA6B;IAI7B,SAAS,CAAC,MAAM,EAAE,MAAM;IAIxB,aAAa;IAIb,WAAW;IAIX,WAAW;IAMX,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAC5C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;CAKvD"}
@@ -1,77 +0,0 @@
1
- import { HeadDetails } from "./head_details";
2
- import { Location } from "./location";
3
- import { array } from "./util";
4
- export class Snapshot {
5
- static wrap(value) {
6
- if (value instanceof this) {
7
- return value;
8
- }
9
- else if (typeof value == "string") {
10
- return this.fromHTMLString(value);
11
- }
12
- else {
13
- return this.fromHTMLElement(value);
14
- }
15
- }
16
- static fromHTMLString(html) {
17
- const element = document.createElement("html");
18
- element.innerHTML = html;
19
- return this.fromHTMLElement(element);
20
- }
21
- static fromHTMLElement(htmlElement) {
22
- const headElement = htmlElement.querySelector("head");
23
- const bodyElement = htmlElement.querySelector("body") || document.createElement("body");
24
- const headDetails = HeadDetails.fromHeadElement(headElement);
25
- return new this(headDetails, bodyElement);
26
- }
27
- constructor(headDetails, bodyElement) {
28
- this.headDetails = headDetails;
29
- this.bodyElement = bodyElement;
30
- }
31
- clone() {
32
- return new Snapshot(this.headDetails, this.bodyElement.cloneNode(true));
33
- }
34
- getRootLocation() {
35
- const root = this.getSetting("root", "/");
36
- return new Location(root);
37
- }
38
- getCacheControlValue() {
39
- return this.getSetting("cache-control");
40
- }
41
- getElementForAnchor(anchor) {
42
- try {
43
- return this.bodyElement.querySelector(`[id='${anchor}'], a[name='${anchor}']`);
44
- }
45
- catch {
46
- return null;
47
- }
48
- }
49
- getPermanentElements() {
50
- return array(this.bodyElement.querySelectorAll("[id][data-turbolinks-permanent]"));
51
- }
52
- getPermanentElementById(id) {
53
- return this.bodyElement.querySelector(`#${id}[data-turbolinks-permanent]`);
54
- }
55
- getPermanentElementsPresentInSnapshot(snapshot) {
56
- return this.getPermanentElements().filter(({ id }) => snapshot.getPermanentElementById(id));
57
- }
58
- findFirstAutofocusableElement() {
59
- return this.bodyElement.querySelector("[autofocus]");
60
- }
61
- hasAnchor(anchor) {
62
- return this.getElementForAnchor(anchor) != null;
63
- }
64
- isPreviewable() {
65
- return this.getCacheControlValue() != "no-preview";
66
- }
67
- isCacheable() {
68
- return this.getCacheControlValue() != "no-cache";
69
- }
70
- isVisitable() {
71
- return this.getSetting("visit-control") != "reload";
72
- }
73
- getSetting(name, defaultValue) {
74
- const value = this.headDetails.getMetaValue(`turbolinks-${name}`);
75
- return value == null ? defaultValue : value;
76
- }
77
- }
@@ -1,18 +0,0 @@
1
- import { Location } from "./location";
2
- import { Snapshot } from "./snapshot";
3
- export declare class SnapshotCache {
4
- readonly keys: string[];
5
- readonly snapshots: {
6
- [url: string]: Snapshot;
7
- };
8
- readonly size: number;
9
- constructor(size: number);
10
- has(location: Location): boolean;
11
- get(location: Location): Snapshot | undefined;
12
- put(location: Location, snapshot: Snapshot): Snapshot;
13
- read(location: Location): Snapshot;
14
- write(location: Location, snapshot: Snapshot): void;
15
- touch(location: Location): void;
16
- trim(): void;
17
- }
18
- //# sourceMappingURL=snapshot_cache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot_cache.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/snapshot_cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,aAAa;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAM;IAC7B,QAAQ,CAAC,SAAS,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;KAAE,CAAM;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM;IAIxB,GAAG,CAAC,QAAQ,EAAE,QAAQ;IAItB,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAQ7C,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAQ1C,IAAI,CAAC,QAAQ,EAAE,QAAQ;IAIvB,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAI5C,KAAK,CAAC,QAAQ,EAAE,QAAQ;IAQxB,IAAI;CAKL"}
@@ -1,42 +0,0 @@
1
- export class SnapshotCache {
2
- constructor(size) {
3
- this.keys = [];
4
- this.snapshots = {};
5
- this.size = size;
6
- }
7
- has(location) {
8
- return location.toCacheKey() in this.snapshots;
9
- }
10
- get(location) {
11
- if (this.has(location)) {
12
- const snapshot = this.read(location);
13
- this.touch(location);
14
- return snapshot;
15
- }
16
- }
17
- put(location, snapshot) {
18
- this.write(location, snapshot);
19
- this.touch(location);
20
- return snapshot;
21
- }
22
- // Private
23
- read(location) {
24
- return this.snapshots[location.toCacheKey()];
25
- }
26
- write(location, snapshot) {
27
- this.snapshots[location.toCacheKey()] = snapshot;
28
- }
29
- touch(location) {
30
- const key = location.toCacheKey();
31
- const index = this.keys.indexOf(key);
32
- if (index > -1)
33
- this.keys.splice(index, 1);
34
- this.keys.unshift(key);
35
- this.trim();
36
- }
37
- trim() {
38
- for (const key of this.keys.splice(this.size)) {
39
- delete this.snapshots[key];
40
- }
41
- }
42
- }
@@ -1,45 +0,0 @@
1
- import { HeadDetails } from "./head_details";
2
- import { Renderer, RenderDelegate, RenderCallback } from "./renderer";
3
- import { Snapshot } from "./snapshot";
4
- export type PermanentElement = Element & {
5
- id: string;
6
- };
7
- export type Placeholder = {
8
- element: Element;
9
- permanentElement: PermanentElement;
10
- };
11
- type BodyRenderer = (body: string) => void;
12
- export declare class SnapshotRenderer extends Renderer {
13
- delegate?: RenderDelegate;
14
- readonly currentSnapshot: Snapshot;
15
- readonly currentHeadDetails: HeadDetails;
16
- readonly newSnapshot: Snapshot;
17
- readonly newHeadDetails: HeadDetails;
18
- readonly newBody: HTMLBodyElement;
19
- readonly isPreview: boolean;
20
- renderBody: BodyRenderer;
21
- static render(delegate: RenderDelegate, callback: RenderCallback, currentSnapshot: Snapshot, newSnapshot: Snapshot, isPreview: boolean, renderBody: BodyRenderer): Promise<void>;
22
- constructor(currentSnapshot: Snapshot, newSnapshot: Snapshot, isPreview: boolean, renderBody: BodyRenderer);
23
- render(delegate: RenderDelegate, callback: RenderCallback): Promise<void>;
24
- mergeHead(): Promise<void>;
25
- replaceBody(): void;
26
- shouldRender(): boolean;
27
- trackedElementsAreIdentical(): boolean;
28
- copyNewHeadStylesheetElements(): void;
29
- copyNewHeadScriptElements(onScriptsLoaded: () => void): void;
30
- removeCurrentHeadProvisionalElements(): void;
31
- copyNewHeadProvisionalElements(): void;
32
- relocateCurrentBodyPermanentElements(): Placeholder[];
33
- replacePlaceholderElementsWithClonedPermanentElements(placeholders: Placeholder[]): void;
34
- activateNewBodyScriptElements(): void;
35
- assignNewBody(): void;
36
- focusFirstAutofocusableElement(): void;
37
- getNewHeadStylesheetElements(): Element[];
38
- getNewHeadScriptElements(): HTMLScriptElement[];
39
- getCurrentHeadProvisionalElements(): Element[];
40
- getNewHeadProvisionalElements(): Element[];
41
- getCurrentBodyPermanentElements(): PermanentElement[];
42
- getNewBodyScriptElements(): HTMLScriptElement[];
43
- }
44
- export {};
45
- //# sourceMappingURL=snapshot_renderer%20copy.d.ts.map