@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.
- package/dist/types/internal.d.ts +9 -0
- package/dist/types/internal.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/lib/getGlobalObject.d.ts +0 -5
- package/dist/lib/getGlobalObject.d.ts.map +0 -1
- package/dist/lib/getGlobalObject.js +0 -7
- package/dist/lib/turbolinks/adapter.d.ts +0 -17
- package/dist/lib/turbolinks/adapter.d.ts.map +0 -1
- package/dist/lib/turbolinks/adapter.js +0 -1
- package/dist/lib/turbolinks/browser_adapter.d.ts +0 -28
- package/dist/lib/turbolinks/browser_adapter.d.ts.map +0 -1
- package/dist/lib/turbolinks/browser_adapter.js +0 -71
- package/dist/lib/turbolinks/controller.d.ts +0 -101
- package/dist/lib/turbolinks/controller.d.ts.map +0 -1
- package/dist/lib/turbolinks/controller.js +0 -290
- package/dist/lib/turbolinks/head_details.d.ts +0 -23
- package/dist/lib/turbolinks/head_details.d.ts.map +0 -1
- package/dist/lib/turbolinks/head_details.js +0 -92
- package/dist/lib/turbolinks/history.d.ts +0 -22
- package/dist/lib/turbolinks/history.d.ts.map +0 -1
- package/dist/lib/turbolinks/history.js +0 -60
- package/dist/lib/turbolinks/index.d.ts +0 -14
- package/dist/lib/turbolinks/index.d.ts.map +0 -1
- package/dist/lib/turbolinks/index.js +0 -55
- package/dist/lib/turbolinks/location.d.ts +0 -23
- package/dist/lib/turbolinks/location.d.ts.map +0 -1
- package/dist/lib/turbolinks/location.js +0 -75
- package/dist/lib/turbolinks/namespace.d.ts +0 -12
- package/dist/lib/turbolinks/namespace.d.ts.map +0 -1
- package/dist/lib/turbolinks/namespace.js +0 -20
- package/dist/lib/turbolinks/passthrough_renderer.d.ts +0 -32
- package/dist/lib/turbolinks/passthrough_renderer.d.ts.map +0 -1
- package/dist/lib/turbolinks/passthrough_renderer.js +0 -128
- package/dist/lib/turbolinks/progress_bar.d.ts +0 -24
- package/dist/lib/turbolinks/progress_bar.d.ts.map +0 -1
- package/dist/lib/turbolinks/progress_bar.js +0 -99
- package/dist/lib/turbolinks/renderer.d.ts +0 -14
- package/dist/lib/turbolinks/renderer.d.ts.map +0 -1
- package/dist/lib/turbolinks/renderer.js +0 -28
- package/dist/lib/turbolinks/scroll_manager.d.ts +0 -16
- package/dist/lib/turbolinks/scroll_manager.d.ts.map +0 -1
- package/dist/lib/turbolinks/scroll_manager.js +0 -32
- package/dist/lib/turbolinks/snapshot.d.ts +0 -25
- package/dist/lib/turbolinks/snapshot.d.ts.map +0 -1
- package/dist/lib/turbolinks/snapshot.js +0 -77
- package/dist/lib/turbolinks/snapshot_cache.d.ts +0 -18
- package/dist/lib/turbolinks/snapshot_cache.d.ts.map +0 -1
- package/dist/lib/turbolinks/snapshot_cache.js +0 -42
- package/dist/lib/turbolinks/snapshot_renderer copy.d.ts +0 -45
- package/dist/lib/turbolinks/snapshot_renderer copy.d.ts.map +0 -1
- package/dist/lib/turbolinks/snapshot_renderer copy.js +0 -179
- package/dist/lib/turbolinks/snapshot_renderer.d.ts +0 -43
- package/dist/lib/turbolinks/snapshot_renderer.d.ts.map +0 -1
- package/dist/lib/turbolinks/snapshot_renderer.js +0 -139
- package/dist/lib/turbolinks/types.d.ts +0 -7
- package/dist/lib/turbolinks/types.d.ts.map +0 -1
- package/dist/lib/turbolinks/types.js +0 -3
- package/dist/lib/turbolinks/util.d.ts +0 -14
- package/dist/lib/turbolinks/util.d.ts.map +0 -1
- package/dist/lib/turbolinks/util.js +0 -85
- package/dist/lib/turbolinks/view.d.ts +0 -21
- package/dist/lib/turbolinks/view.d.ts.map +0 -1
- package/dist/lib/turbolinks/view.js +0 -42
- package/dist/lib/turbolinks/visit.d.ts +0 -73
- package/dist/lib/turbolinks/visit.d.ts.map +0 -1
- package/dist/lib/turbolinks/visit.js +0 -227
- package/dist/proxy/pages/onPageTransitionStart.d.ts +0 -3
- package/dist/proxy/pages/onPageTransitionStart.d.ts.map +0 -1
- package/dist/proxy/pages/onPageTransitionStart.js +0 -9
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { array } from "./util";
|
|
2
|
-
export class HeadDetails {
|
|
3
|
-
static fromHeadElement(headElement) {
|
|
4
|
-
const children = headElement ? array(headElement.children) : [];
|
|
5
|
-
return new this(children);
|
|
6
|
-
}
|
|
7
|
-
constructor(children) {
|
|
8
|
-
this.detailsByOuterHTML = children.reduce((result, element) => {
|
|
9
|
-
const { outerHTML } = element;
|
|
10
|
-
const details = outerHTML in result
|
|
11
|
-
? result[outerHTML]
|
|
12
|
-
: {
|
|
13
|
-
type: elementType(element),
|
|
14
|
-
tracked: elementIsTracked(element),
|
|
15
|
-
elements: [],
|
|
16
|
-
};
|
|
17
|
-
return {
|
|
18
|
-
...result,
|
|
19
|
-
[outerHTML]: {
|
|
20
|
-
...details,
|
|
21
|
-
elements: [...details.elements, element],
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
|
-
}, {});
|
|
25
|
-
}
|
|
26
|
-
getTrackedElementSignature() {
|
|
27
|
-
return Object.keys(this.detailsByOuterHTML)
|
|
28
|
-
.filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)
|
|
29
|
-
.join("");
|
|
30
|
-
}
|
|
31
|
-
getScriptElementsNotInDetails(headDetails) {
|
|
32
|
-
return this.getElementsMatchingTypeNotInDetails("script", headDetails);
|
|
33
|
-
}
|
|
34
|
-
getStylesheetElementsNotInDetails(headDetails) {
|
|
35
|
-
return this.getElementsMatchingTypeNotInDetails("stylesheet", headDetails);
|
|
36
|
-
}
|
|
37
|
-
getElementsMatchingTypeNotInDetails(matchedType, headDetails) {
|
|
38
|
-
return Object.keys(this.detailsByOuterHTML)
|
|
39
|
-
.filter((outerHTML) => !(outerHTML in headDetails.detailsByOuterHTML))
|
|
40
|
-
.map((outerHTML) => this.detailsByOuterHTML[outerHTML])
|
|
41
|
-
.filter(({ type }) => type == matchedType)
|
|
42
|
-
.map(({ elements: [element] }) => element);
|
|
43
|
-
}
|
|
44
|
-
getProvisionalElements() {
|
|
45
|
-
return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {
|
|
46
|
-
const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];
|
|
47
|
-
if (type == null && !tracked) {
|
|
48
|
-
return [...result, ...elements];
|
|
49
|
-
}
|
|
50
|
-
else if (elements.length > 1) {
|
|
51
|
-
return [...result, ...elements.slice(1)];
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
return result;
|
|
55
|
-
}
|
|
56
|
-
}, []);
|
|
57
|
-
}
|
|
58
|
-
getMetaValue(name) {
|
|
59
|
-
const element = this.findMetaElementByName(name);
|
|
60
|
-
return element ? element.getAttribute("content") : null;
|
|
61
|
-
}
|
|
62
|
-
findMetaElementByName(name) {
|
|
63
|
-
return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {
|
|
64
|
-
const { elements: [element], } = this.detailsByOuterHTML[outerHTML];
|
|
65
|
-
return elementIsMetaElementWithName(element, name) ? element : result;
|
|
66
|
-
}, undefined);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
function elementType(element) {
|
|
70
|
-
if (elementIsScript(element)) {
|
|
71
|
-
return "script";
|
|
72
|
-
}
|
|
73
|
-
else if (elementIsStylesheet(element)) {
|
|
74
|
-
return "stylesheet";
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
function elementIsTracked(element) {
|
|
78
|
-
return element.getAttribute("data-turbolinks-track") == "reload";
|
|
79
|
-
}
|
|
80
|
-
function elementIsScript(element) {
|
|
81
|
-
const tagName = element.tagName.toLowerCase();
|
|
82
|
-
return tagName == "script";
|
|
83
|
-
}
|
|
84
|
-
function elementIsStylesheet(element) {
|
|
85
|
-
const tagName = element.tagName.toLowerCase();
|
|
86
|
-
return (tagName == "style" ||
|
|
87
|
-
(tagName == "link" && element.getAttribute("rel") == "stylesheet"));
|
|
88
|
-
}
|
|
89
|
-
function elementIsMetaElementWithName(element, name) {
|
|
90
|
-
const tagName = element.tagName.toLowerCase();
|
|
91
|
-
return tagName == "meta" && element.getAttribute("name") == name;
|
|
92
|
-
}
|
|
@@ -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,14 +0,0 @@
|
|
|
1
|
-
import { Controller, VisitOptions } from "./controller";
|
|
2
|
-
import { Locatable } from "./location";
|
|
3
|
-
import { Renderer } from "./renderer";
|
|
4
|
-
export declare const Turbolinks: {
|
|
5
|
-
readonly supported: boolean;
|
|
6
|
-
controller: Controller;
|
|
7
|
-
visit(location: Locatable, options?: Partial<VisitOptions>): void;
|
|
8
|
-
clearCache(): void;
|
|
9
|
-
setProgressBarDelay(delay: number): void;
|
|
10
|
-
start(): void;
|
|
11
|
-
_vpsRenderClientWith(renderer: Renderer): void;
|
|
12
|
-
_vpsOnRenderClient(renderFn: () => Promise<void>): void;
|
|
13
|
-
};
|
|
14
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,eAAO,MAAM,UAAU;;;oBAOL,SAAS,YAAY,QAAQ,YAAY,CAAC;;+BAQ/B,MAAM;;mCAmBF,QAAQ;iCAaV,MAAM,QAAQ,IAAI,CAAC;CAgBjD,CAAC"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Controller } from "./controller";
|
|
2
|
-
const controller = new Controller();
|
|
3
|
-
export const Turbolinks = {
|
|
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
|
-
// because this runs after ios hooks, we have to recover. See onRenderHtml
|
|
19
|
-
if (window.Turbolinks !== Turbolinks &&
|
|
20
|
-
window.Turbolinks.controller.adapter) {
|
|
21
|
-
console.log(window.Turbolinks, Turbolinks);
|
|
22
|
-
window.Turbolinks.controller.adapter.controller = controller;
|
|
23
|
-
controller.adapter = window.Turbolinks.controller.adapter;
|
|
24
|
-
console.log(window.Turbolinks, Turbolinks);
|
|
25
|
-
window.Turbolinks = Turbolinks;
|
|
26
|
-
}
|
|
27
|
-
controller.start();
|
|
28
|
-
},
|
|
29
|
-
_vpsRenderClientWith(renderer) {
|
|
30
|
-
if (controller.currentVisit) {
|
|
31
|
-
// TODO: move to controller
|
|
32
|
-
controller.currentVisit.renderer = renderer;
|
|
33
|
-
controller.adapter.visitRequestCompleted(controller.currentVisit);
|
|
34
|
-
controller.adapter.visitRequestFinished(controller.currentVisit);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
console.error("controller.currentVisit should exist when onRenderClient fires");
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
_vpsOnRenderClient(renderFn) {
|
|
41
|
-
if (controller.currentVisit) {
|
|
42
|
-
// TODO: move to controller
|
|
43
|
-
controller.currentVisit.renderFn = async () => {
|
|
44
|
-
controller.viewWillRender();
|
|
45
|
-
await renderFn();
|
|
46
|
-
controller.viewRendered();
|
|
47
|
-
};
|
|
48
|
-
controller.adapter.visitRequestCompleted(controller.currentVisit);
|
|
49
|
-
controller.adapter.visitRequestFinished(controller.currentVisit);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
console.error("controller.currentVisit should exist when onRenderClient fires");
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export type Locatable = Location | string;
|
|
2
|
-
export declare class Location {
|
|
3
|
-
static get currentLocation(): Location;
|
|
4
|
-
static wrap(locatable: Locatable): Location;
|
|
5
|
-
static wrap(locatable?: Locatable | null): Location | undefined;
|
|
6
|
-
readonly absoluteURL: string;
|
|
7
|
-
readonly requestURL: string;
|
|
8
|
-
readonly anchor?: string;
|
|
9
|
-
constructor(url: string);
|
|
10
|
-
getOrigin(): string;
|
|
11
|
-
getPath(): string;
|
|
12
|
-
getPathComponents(): string[];
|
|
13
|
-
getLastPathComponent(): string;
|
|
14
|
-
getExtension(): string;
|
|
15
|
-
isHTML(): RegExpMatchArray | null;
|
|
16
|
-
isPrefixedBy(location: Location): boolean;
|
|
17
|
-
isEqualTo(location?: Location): boolean | undefined;
|
|
18
|
-
toCacheKey(): string;
|
|
19
|
-
toJSON(): string;
|
|
20
|
-
toString(): string;
|
|
21
|
-
valueOf(): string;
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=location.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/location.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1C,qBAAa,QAAQ;IACnB,MAAM,KAAK,eAAe,aAEzB;IAED,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ;IAC3C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS;IAS/D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEb,GAAG,EAAE,MAAM;IAevB,SAAS;IAIT,OAAO;IAIP,iBAAiB;IAIjB,oBAAoB;IAIpB,YAAY;IAIZ,MAAM;IAIN,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO;IAOzC,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAI7B,UAAU;IAIV,MAAM;IAIN,QAAQ;IAIR,OAAO;CAGR"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
export class Location {
|
|
2
|
-
static get currentLocation() {
|
|
3
|
-
return this.wrap(window.location.toString());
|
|
4
|
-
}
|
|
5
|
-
static wrap(locatable) {
|
|
6
|
-
if (typeof locatable == "string") {
|
|
7
|
-
return new this(locatable);
|
|
8
|
-
}
|
|
9
|
-
else if (locatable != null) {
|
|
10
|
-
return locatable;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
constructor(url) {
|
|
14
|
-
const linkWithAnchor = document.createElement("a");
|
|
15
|
-
linkWithAnchor.href = url;
|
|
16
|
-
this.absoluteURL = linkWithAnchor.href;
|
|
17
|
-
const anchorLength = linkWithAnchor.hash.length;
|
|
18
|
-
if (anchorLength < 2) {
|
|
19
|
-
this.requestURL = this.absoluteURL;
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
this.requestURL = this.absoluteURL.slice(0, -anchorLength);
|
|
23
|
-
this.anchor = linkWithAnchor.hash.slice(1);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
getOrigin() {
|
|
27
|
-
return this.absoluteURL.split("/", 3).join("/");
|
|
28
|
-
}
|
|
29
|
-
getPath() {
|
|
30
|
-
return (this.requestURL.match(/\/\/[^/]*(\/[^?;]*)/) || [])[1] || "/";
|
|
31
|
-
}
|
|
32
|
-
getPathComponents() {
|
|
33
|
-
return this.getPath().split("/").slice(1);
|
|
34
|
-
}
|
|
35
|
-
getLastPathComponent() {
|
|
36
|
-
return this.getPathComponents().slice(-1)[0];
|
|
37
|
-
}
|
|
38
|
-
getExtension() {
|
|
39
|
-
return (this.getLastPathComponent().match(/\.[^.]*$/) || [])[0] || "";
|
|
40
|
-
}
|
|
41
|
-
isHTML() {
|
|
42
|
-
return this.getExtension().match(/^(?:|\.(?:htm|html|xhtml))$/);
|
|
43
|
-
}
|
|
44
|
-
isPrefixedBy(location) {
|
|
45
|
-
const prefixURL = getPrefixURL(location);
|
|
46
|
-
return (this.isEqualTo(location) || stringStartsWith(this.absoluteURL, prefixURL));
|
|
47
|
-
}
|
|
48
|
-
isEqualTo(location) {
|
|
49
|
-
return location && this.absoluteURL === location.absoluteURL;
|
|
50
|
-
}
|
|
51
|
-
toCacheKey() {
|
|
52
|
-
return this.requestURL;
|
|
53
|
-
}
|
|
54
|
-
toJSON() {
|
|
55
|
-
return this.absoluteURL;
|
|
56
|
-
}
|
|
57
|
-
toString() {
|
|
58
|
-
return this.absoluteURL;
|
|
59
|
-
}
|
|
60
|
-
valueOf() {
|
|
61
|
-
return this.absoluteURL;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
function getPrefixURL(location) {
|
|
65
|
-
return addTrailingSlash(location.getOrigin() + location.getPath());
|
|
66
|
-
}
|
|
67
|
-
function addTrailingSlash(url) {
|
|
68
|
-
return stringEndsWith(url, "/") ? url : url + "/";
|
|
69
|
-
}
|
|
70
|
-
function stringStartsWith(string, prefix) {
|
|
71
|
-
return string.slice(0, prefix.length) === prefix;
|
|
72
|
-
}
|
|
73
|
-
function stringEndsWith(string, suffix) {
|
|
74
|
-
return string.slice(-suffix.length) === suffix;
|
|
75
|
-
}
|
|
@@ -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,24 +0,0 @@
|
|
|
1
|
-
export declare class ProgressBar {
|
|
2
|
-
static animationDuration: number;
|
|
3
|
-
static get defaultCSS(): string;
|
|
4
|
-
readonly stylesheetElement: HTMLStyleElement;
|
|
5
|
-
readonly progressElement: HTMLDivElement;
|
|
6
|
-
hiding: boolean;
|
|
7
|
-
trickleInterval?: number;
|
|
8
|
-
value: number;
|
|
9
|
-
visible: boolean;
|
|
10
|
-
show(): void;
|
|
11
|
-
hide(): void;
|
|
12
|
-
setValue(value: number): void;
|
|
13
|
-
installStylesheetElement(): void;
|
|
14
|
-
installProgressElement(): void;
|
|
15
|
-
fadeProgressElement(callback: () => void): void;
|
|
16
|
-
uninstallProgressElement(): void;
|
|
17
|
-
startTrickling(): void;
|
|
18
|
-
stopTrickling(): void;
|
|
19
|
-
trickle: () => void;
|
|
20
|
-
refresh(): void;
|
|
21
|
-
createStylesheetElement(): HTMLStyleElement;
|
|
22
|
-
createProgressElement(): HTMLDivElement;
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=progress_bar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress_bar.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/progress_bar.ts"],"names":[],"mappings":"AAEA,qBAAa,WAAW;IACtB,MAAM,CAAC,iBAAiB,SAAO;IAE/B,MAAM,KAAK,UAAU,WAkBpB;IAED,QAAQ,CAAC,iBAAiB,mBAAkC;IAC5D,QAAQ,CAAC,eAAe,iBAAgC;IAExD,MAAM,UAAS;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,SAAK;IACV,OAAO,UAAS;IAEhB,IAAI;IASJ,IAAI;IAYJ,QAAQ,CAAC,KAAK,EAAE,MAAM;IAOtB,wBAAwB;IAOxB,sBAAsB;IAOtB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,IAAI;IAKxC,wBAAwB;IAMxB,cAAc;IASd,aAAa;IAKb,OAAO,aAEL;IAEF,OAAO;IAMP,uBAAuB;IAOvB,qBAAqB;CAKtB"}
|