@alignable/bifrost 0.0.10 → 0.0.11

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 (69) hide show
  1. package/dist/types/internal.d.ts +9 -0
  2. package/dist/types/internal.d.ts.map +1 -1
  3. package/package.json +1 -1
  4. package/dist/lib/getGlobalObject.d.ts +0 -5
  5. package/dist/lib/getGlobalObject.d.ts.map +0 -1
  6. package/dist/lib/getGlobalObject.js +0 -7
  7. package/dist/lib/turbolinks/adapter.d.ts +0 -17
  8. package/dist/lib/turbolinks/adapter.d.ts.map +0 -1
  9. package/dist/lib/turbolinks/adapter.js +0 -1
  10. package/dist/lib/turbolinks/browser_adapter.d.ts +0 -28
  11. package/dist/lib/turbolinks/browser_adapter.d.ts.map +0 -1
  12. package/dist/lib/turbolinks/browser_adapter.js +0 -71
  13. package/dist/lib/turbolinks/controller.d.ts +0 -101
  14. package/dist/lib/turbolinks/controller.d.ts.map +0 -1
  15. package/dist/lib/turbolinks/controller.js +0 -290
  16. package/dist/lib/turbolinks/head_details.d.ts +0 -23
  17. package/dist/lib/turbolinks/head_details.d.ts.map +0 -1
  18. package/dist/lib/turbolinks/head_details.js +0 -92
  19. package/dist/lib/turbolinks/history.d.ts +0 -22
  20. package/dist/lib/turbolinks/history.d.ts.map +0 -1
  21. package/dist/lib/turbolinks/history.js +0 -60
  22. package/dist/lib/turbolinks/index.d.ts +0 -14
  23. package/dist/lib/turbolinks/index.d.ts.map +0 -1
  24. package/dist/lib/turbolinks/index.js +0 -55
  25. package/dist/lib/turbolinks/location.d.ts +0 -23
  26. package/dist/lib/turbolinks/location.d.ts.map +0 -1
  27. package/dist/lib/turbolinks/location.js +0 -75
  28. package/dist/lib/turbolinks/namespace.d.ts +0 -12
  29. package/dist/lib/turbolinks/namespace.d.ts.map +0 -1
  30. package/dist/lib/turbolinks/namespace.js +0 -20
  31. package/dist/lib/turbolinks/passthrough_renderer.d.ts +0 -32
  32. package/dist/lib/turbolinks/passthrough_renderer.d.ts.map +0 -1
  33. package/dist/lib/turbolinks/passthrough_renderer.js +0 -128
  34. package/dist/lib/turbolinks/progress_bar.d.ts +0 -24
  35. package/dist/lib/turbolinks/progress_bar.d.ts.map +0 -1
  36. package/dist/lib/turbolinks/progress_bar.js +0 -99
  37. package/dist/lib/turbolinks/renderer.d.ts +0 -14
  38. package/dist/lib/turbolinks/renderer.d.ts.map +0 -1
  39. package/dist/lib/turbolinks/renderer.js +0 -28
  40. package/dist/lib/turbolinks/scroll_manager.d.ts +0 -16
  41. package/dist/lib/turbolinks/scroll_manager.d.ts.map +0 -1
  42. package/dist/lib/turbolinks/scroll_manager.js +0 -32
  43. package/dist/lib/turbolinks/snapshot.d.ts +0 -25
  44. package/dist/lib/turbolinks/snapshot.d.ts.map +0 -1
  45. package/dist/lib/turbolinks/snapshot.js +0 -77
  46. package/dist/lib/turbolinks/snapshot_cache.d.ts +0 -18
  47. package/dist/lib/turbolinks/snapshot_cache.d.ts.map +0 -1
  48. package/dist/lib/turbolinks/snapshot_cache.js +0 -42
  49. package/dist/lib/turbolinks/snapshot_renderer copy.d.ts +0 -45
  50. package/dist/lib/turbolinks/snapshot_renderer copy.d.ts.map +0 -1
  51. package/dist/lib/turbolinks/snapshot_renderer copy.js +0 -179
  52. package/dist/lib/turbolinks/snapshot_renderer.d.ts +0 -43
  53. package/dist/lib/turbolinks/snapshot_renderer.d.ts.map +0 -1
  54. package/dist/lib/turbolinks/snapshot_renderer.js +0 -139
  55. package/dist/lib/turbolinks/types.d.ts +0 -7
  56. package/dist/lib/turbolinks/types.d.ts.map +0 -1
  57. package/dist/lib/turbolinks/types.js +0 -3
  58. package/dist/lib/turbolinks/util.d.ts +0 -14
  59. package/dist/lib/turbolinks/util.d.ts.map +0 -1
  60. package/dist/lib/turbolinks/util.js +0 -85
  61. package/dist/lib/turbolinks/view.d.ts +0 -21
  62. package/dist/lib/turbolinks/view.d.ts.map +0 -1
  63. package/dist/lib/turbolinks/view.js +0 -42
  64. package/dist/lib/turbolinks/visit.d.ts +0 -73
  65. package/dist/lib/turbolinks/visit.d.ts.map +0 -1
  66. package/dist/lib/turbolinks/visit.js +0 -227
  67. package/dist/proxy/pages/onPageTransitionStart.d.ts +0 -3
  68. package/dist/proxy/pages/onPageTransitionStart.d.ts.map +0 -1
  69. package/dist/proxy/pages/onPageTransitionStart.js +0 -9
@@ -1,99 +0,0 @@
1
- import { unindent } from "./util";
2
- class ProgressBar {
3
- constructor() {
4
- this.stylesheetElement = this.createStylesheetElement();
5
- this.progressElement = this.createProgressElement();
6
- this.hiding = false;
7
- this.value = 0;
8
- this.visible = false;
9
- this.trickle = () => {
10
- this.setValue(this.value + Math.random() / 100);
11
- };
12
- }
13
- static get defaultCSS() {
14
- return unindent `
15
- .turbolinks-progress-bar {
16
- position: fixed;
17
- display: block;
18
- top: 0;
19
- left: 0;
20
- height: 3px;
21
- background: #0076ff;
22
- z-index: 9999;
23
- transition:
24
- width ${ProgressBar.animationDuration}ms ease-out,
25
- opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;
26
- transform: translate3d(0, 0, 0);
27
- }
28
- `;
29
- }
30
- show() {
31
- if (!this.visible) {
32
- this.visible = true;
33
- this.installStylesheetElement();
34
- this.installProgressElement();
35
- this.startTrickling();
36
- }
37
- }
38
- hide() {
39
- if (this.visible && !this.hiding) {
40
- this.hiding = true;
41
- this.fadeProgressElement(() => {
42
- this.uninstallProgressElement();
43
- this.stopTrickling();
44
- this.visible = false;
45
- this.hiding = false;
46
- });
47
- }
48
- }
49
- setValue(value) {
50
- this.value = value;
51
- this.refresh();
52
- }
53
- // Private
54
- installStylesheetElement() {
55
- document.head.insertBefore(this.stylesheetElement, document.head.firstChild);
56
- }
57
- installProgressElement() {
58
- this.progressElement.style.width = "0";
59
- this.progressElement.style.opacity = "1";
60
- document.documentElement.insertBefore(this.progressElement, document.body);
61
- this.refresh();
62
- }
63
- fadeProgressElement(callback) {
64
- this.progressElement.style.opacity = "0";
65
- setTimeout(callback, ProgressBar.animationDuration * 1.5);
66
- }
67
- uninstallProgressElement() {
68
- if (this.progressElement.parentNode) {
69
- document.documentElement.removeChild(this.progressElement);
70
- }
71
- }
72
- startTrickling() {
73
- if (!this.trickleInterval) {
74
- this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);
75
- }
76
- }
77
- stopTrickling() {
78
- window.clearInterval(this.trickleInterval);
79
- delete this.trickleInterval;
80
- }
81
- refresh() {
82
- requestAnimationFrame(() => {
83
- this.progressElement.style.width = `${10 + this.value * 90}%`;
84
- });
85
- }
86
- createStylesheetElement() {
87
- const element = document.createElement("style");
88
- element.type = "text/css";
89
- element.textContent = ProgressBar.defaultCSS;
90
- return element;
91
- }
92
- createProgressElement() {
93
- const element = document.createElement("div");
94
- element.className = "turbolinks-progress-bar";
95
- return element;
96
- }
97
- }
98
- ProgressBar.animationDuration = 300; /*ms*/
99
- export { ProgressBar };
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot_renderer copy.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/snapshot_renderer copy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,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,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAK3C,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,YAAY,CAAC;IAGzB,MAAM,CAAC,MAAM,CACX,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,cAAc,EACxB,eAAe,EAAE,QAAQ,EACzB,WAAW,EAAE,QAAQ,EACrB,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,YAAY;gBAWxB,eAAe,EAAE,QAAQ,EACzB,WAAW,EAAE,QAAQ,EACrB,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,YAAY;IAYpB,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc;IAczD,SAAS;IAmBf,WAAW;IAOX,YAAY;IAIZ,2BAA2B;IAO3B,6BAA6B;IAM7B,yBAAyB,CAAC,eAAe,EAAE,MAAM,IAAI;IAoCrD,oCAAoC;IAMpC,8BAA8B;IAM9B,oCAAoC;IAoBpC,qDAAqD,CACnD,YAAY,EAAE,WAAW,EAAE;IAQ7B,6BAA6B;IAO7B,aAAa;IAOb,8BAA8B;IAO9B,4BAA4B;IAM5B,wBAAwB;IAMxB,iCAAiC;IAIjC,6BAA6B;IAI7B,+BAA+B,IAAI,gBAAgB,EAAE;IAMrD,wBAAwB;CAGzB"}
@@ -1,179 +0,0 @@
1
- import { Renderer } from "./renderer";
2
- import { array, createScriptElement } from "./util";
3
- const allHeadScriptsEverRun = {};
4
- let firstLoad = true;
5
- export class SnapshotRenderer extends Renderer {
6
- // todo: dont need this?
7
- static render(delegate, callback, currentSnapshot, newSnapshot, isPreview, renderBody) {
8
- return new this(currentSnapshot, newSnapshot, isPreview, renderBody).render(delegate, callback);
9
- }
10
- constructor(currentSnapshot, newSnapshot, isPreview, renderBody) {
11
- super();
12
- this.currentSnapshot = currentSnapshot;
13
- this.currentHeadDetails = currentSnapshot.headDetails;
14
- this.newSnapshot = newSnapshot;
15
- this.newHeadDetails = newSnapshot.headDetails;
16
- this.newBody = newSnapshot.bodyElement;
17
- this.isPreview = isPreview;
18
- this.renderBody = renderBody;
19
- }
20
- async render(delegate, callback) {
21
- this.delegate = delegate;
22
- if (this.shouldRender()) {
23
- this.replaceBody();
24
- if (!this.isPreview) {
25
- this.focusFirstAutofocusableElement();
26
- }
27
- await this.mergeHead();
28
- callback();
29
- }
30
- else {
31
- this.invalidateView();
32
- }
33
- }
34
- async mergeHead() {
35
- if (firstLoad) {
36
- // TODO: messy code
37
- for (const [outerHTML, details] of Object.entries(this.currentHeadDetails.detailsByOuterHTML)) {
38
- allHeadScriptsEverRun[outerHTML] = true;
39
- }
40
- }
41
- firstLoad = false;
42
- return new Promise((resolve) => {
43
- this.copyNewHeadStylesheetElements();
44
- this.copyNewHeadScriptElements(resolve);
45
- this.removeCurrentHeadProvisionalElements();
46
- this.copyNewHeadProvisionalElements();
47
- });
48
- }
49
- replaceBody() {
50
- const placeholders = this.relocateCurrentBodyPermanentElements();
51
- this.activateNewBodyScriptElements();
52
- this.assignNewBody(); // todo: react.
53
- this.replacePlaceholderElementsWithClonedPermanentElements(placeholders);
54
- }
55
- shouldRender() {
56
- return this.newSnapshot.isVisitable() && this.trackedElementsAreIdentical();
57
- }
58
- trackedElementsAreIdentical() {
59
- return (this.currentHeadDetails.getTrackedElementSignature() ==
60
- this.newHeadDetails.getTrackedElementSignature());
61
- }
62
- copyNewHeadStylesheetElements() {
63
- for (const element of this.getNewHeadStylesheetElements()) {
64
- document.head.appendChild(element);
65
- }
66
- }
67
- copyNewHeadScriptElements(onScriptsLoaded) {
68
- let blockingLoaded = [];
69
- const dispatch = () => {
70
- this.activateNewBodyScriptElements();
71
- this.focusFirstAutofocusableElement();
72
- onScriptsLoaded();
73
- };
74
- for (const element of this.getNewHeadScriptElements()) {
75
- const runBefore = element.outerHTML in allHeadScriptsEverRun;
76
- if (!runBefore) {
77
- let cb = false;
78
- if (!element.defer && element.src) {
79
- const idx = blockingLoaded.length;
80
- cb = () => {
81
- blockingLoaded[idx] = true;
82
- if (blockingLoaded.every((v) => v)) {
83
- dispatch();
84
- }
85
- };
86
- blockingLoaded.push(false);
87
- }
88
- const script = createScriptElement(element);
89
- if (cb) {
90
- script.addEventListener("load", cb);
91
- }
92
- document.head.appendChild(script);
93
- allHeadScriptsEverRun[element.outerHTML] = true;
94
- }
95
- }
96
- if (blockingLoaded.length === 0) {
97
- // //TODO: raf waits for react to finish... not 100% sure of the reliability
98
- requestAnimationFrame(dispatch);
99
- }
100
- }
101
- removeCurrentHeadProvisionalElements() {
102
- for (const element of this.getCurrentHeadProvisionalElements()) {
103
- document.head.removeChild(element);
104
- }
105
- }
106
- copyNewHeadProvisionalElements() {
107
- for (const element of this.getNewHeadProvisionalElements()) {
108
- document.head.appendChild(element);
109
- }
110
- }
111
- relocateCurrentBodyPermanentElements() {
112
- return this.getCurrentBodyPermanentElements().reduce((placeholders, permanentElement) => {
113
- const newElement = this.newSnapshot.getPermanentElementById(permanentElement.id);
114
- if (newElement) {
115
- const placeholder = createPlaceholderForPermanentElement(permanentElement);
116
- replaceElementWithElement(permanentElement, placeholder.element);
117
- replaceElementWithElement(newElement, permanentElement);
118
- return [...placeholders, placeholder];
119
- }
120
- else {
121
- return placeholders;
122
- }
123
- }, []);
124
- }
125
- replacePlaceholderElementsWithClonedPermanentElements(placeholders) {
126
- for (const { element, permanentElement } of placeholders) {
127
- const clonedElement = permanentElement.cloneNode(true);
128
- replaceElementWithElement(element, clonedElement);
129
- }
130
- }
131
- activateNewBodyScriptElements() {
132
- for (const inertScriptElement of this.getNewBodyScriptElements()) {
133
- const activatedScriptElement = createScriptElement(inertScriptElement);
134
- replaceElementWithElement(inertScriptElement, activatedScriptElement);
135
- }
136
- }
137
- assignNewBody() {
138
- replaceElementWithElement(document.querySelector("#alignablewebnextjsframe").firstElementChild, this.newBody);
139
- }
140
- focusFirstAutofocusableElement() {
141
- const element = this.newSnapshot.findFirstAutofocusableElement();
142
- if (elementIsFocusable(element)) {
143
- element.focus();
144
- }
145
- }
146
- getNewHeadStylesheetElements() {
147
- return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails);
148
- }
149
- getNewHeadScriptElements() {
150
- return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails);
151
- }
152
- getCurrentHeadProvisionalElements() {
153
- return this.currentHeadDetails.getProvisionalElements();
154
- }
155
- getNewHeadProvisionalElements() {
156
- return this.newHeadDetails.getProvisionalElements();
157
- }
158
- getCurrentBodyPermanentElements() {
159
- return this.currentSnapshot.getPermanentElementsPresentInSnapshot(this.newSnapshot);
160
- }
161
- getNewBodyScriptElements() {
162
- return array(this.newBody.querySelectorAll("script"));
163
- }
164
- }
165
- function createPlaceholderForPermanentElement(permanentElement) {
166
- const element = document.createElement("meta");
167
- element.setAttribute("name", "turbolinks-permanent-placeholder");
168
- element.setAttribute("content", permanentElement.id);
169
- return { element, permanentElement };
170
- }
171
- function replaceElementWithElement(fromElement, toElement) {
172
- const parentElement = fromElement.parentElement;
173
- if (parentElement) {
174
- return parentElement.replaceChild(toElement, fromElement);
175
- }
176
- }
177
- function elementIsFocusable(element) {
178
- return element && typeof element.focus == "function";
179
- }
@@ -1,43 +0,0 @@
1
- import { HeadDetails } from "./head_details";
2
- import { RenderCallback, RenderDelegate, Renderer } from "./renderer";
3
- import { Snapshot } from "./snapshot";
4
- export { RenderCallback, RenderDelegate } from "./renderer";
5
- export type PermanentElement = Element & {
6
- id: string;
7
- };
8
- export type Placeholder = {
9
- element: Element;
10
- permanentElement: PermanentElement;
11
- };
12
- export declare class SnapshotRenderer extends Renderer {
13
- readonly 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
- static render(delegate: RenderDelegate, callback: RenderCallback, currentSnapshot: Snapshot, newSnapshot: Snapshot, isPreview: boolean): void;
21
- constructor(delegate: RenderDelegate, currentSnapshot: Snapshot, newSnapshot: Snapshot, isPreview: boolean);
22
- render(callback: RenderCallback): void;
23
- mergeHead(): void;
24
- replaceBody(): void;
25
- shouldRender(): boolean;
26
- trackedElementsAreIdentical(): boolean;
27
- copyNewHeadStylesheetElements(): void;
28
- copyNewHeadScriptElements(): void;
29
- removeCurrentHeadProvisionalElements(): void;
30
- copyNewHeadProvisionalElements(): void;
31
- relocateCurrentBodyPermanentElements(): Placeholder[];
32
- replacePlaceholderElementsWithClonedPermanentElements(placeholders: Placeholder[]): void;
33
- activateNewBodyScriptElements(): void;
34
- assignNewBody(): void;
35
- focusFirstAutofocusableElement(): void;
36
- getNewHeadStylesheetElements(): Element[];
37
- getNewHeadScriptElements(): Element[];
38
- getCurrentHeadProvisionalElements(): Element[];
39
- getNewHeadProvisionalElements(): Element[];
40
- getCurrentBodyPermanentElements(): PermanentElement[];
41
- getNewBodyScriptElements(): HTMLScriptElement[];
42
- }
43
- //# sourceMappingURL=snapshot_renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot_renderer.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/snapshot_renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5D,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,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B,MAAM,CAAC,MAAM,CACX,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,cAAc,EACxB,eAAe,EAAE,QAAQ,EACzB,WAAW,EAAE,QAAQ,EACrB,SAAS,EAAE,OAAO;gBAQlB,QAAQ,EAAE,cAAc,EACxB,eAAe,EAAE,QAAQ,EACzB,WAAW,EAAE,QAAQ,EACrB,SAAS,EAAE,OAAO;IAYpB,MAAM,CAAC,QAAQ,EAAE,cAAc;IAe/B,SAAS;IAOT,WAAW;IAOX,YAAY;IAIZ,2BAA2B;IAO3B,6BAA6B;IAM7B,yBAAyB;IAMzB,oCAAoC;IAMpC,8BAA8B;IAM9B,oCAAoC;IAoBpC,qDAAqD,CACnD,YAAY,EAAE,WAAW,EAAE;IAQ7B,6BAA6B;IAQ7B,aAAa;IAOb,8BAA8B;IAO9B,4BAA4B;IAM5B,wBAAwB;IAMxB,iCAAiC;IAIjC,6BAA6B;IAI7B,+BAA+B,IAAI,gBAAgB,EAAE;IAMrD,wBAAwB;CAGzB"}