@studiometa/ui 1.0.0-rc.0 → 1.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AnchorScrollTo/AnchorScrollTo.d.ts +2 -2
- package/AnchorScrollTo/AnchorScrollTo.js +0 -1
- package/AnchorScrollTo/AnchorScrollTo.js.map +2 -2
- package/Button/Button.twig +12 -9
- package/Button/StyledButton.twig +40 -5
- package/Button/StyledButtonRounded.twig +12 -42
- package/Data/DataBind.js +1 -1
- package/Data/DataBind.js.map +2 -2
- package/Draggable/Draggable.d.ts +39 -9
- package/Draggable/Draggable.js +102 -18
- package/Draggable/Draggable.js.map +2 -2
- package/Figure/Figure.d.ts +1 -0
- package/Figure/Figure.js.map +2 -2
- package/Frame/AbstractFrameTrigger.d.ts +43 -0
- package/Frame/AbstractFrameTrigger.js +76 -0
- package/Frame/AbstractFrameTrigger.js.map +7 -0
- package/Frame/Frame.d.ts +55 -27
- package/Frame/Frame.js +132 -138
- package/Frame/Frame.js.map +3 -3
- package/Frame/FrameAnchor.d.ts +7 -4
- package/Frame/FrameAnchor.js +8 -5
- package/Frame/FrameAnchor.js.map +2 -2
- package/Frame/FrameForm.d.ts +22 -4
- package/Frame/FrameForm.js +45 -6
- package/Frame/FrameForm.js.map +2 -2
- package/Frame/FrameLoader.d.ts +22 -0
- package/Frame/FrameLoader.js +22 -0
- package/Frame/FrameLoader.js.map +7 -0
- package/Frame/FrameTarget.d.ts +6 -17
- package/Frame/FrameTarget.js +25 -60
- package/Frame/FrameTarget.js.map +2 -2
- package/Frame/FrameTriggerLoader.d.ts +13 -0
- package/Frame/FrameTriggerLoader.js +13 -0
- package/Frame/FrameTriggerLoader.js.map +7 -0
- package/Frame/index.d.ts +4 -0
- package/Frame/index.js +4 -0
- package/Frame/index.js.map +2 -2
- package/Frame/types.d.ts +12 -0
- package/Frame/types.js +1 -0
- package/Frame/types.js.map +7 -0
- package/Frame/utils.d.ts +9 -0
- package/Frame/utils.js +13 -0
- package/Frame/utils.js.map +7 -0
- package/README.md +12 -7
- package/Slider/AbstractSliderChild.d.ts +5 -9
- package/Slider/AbstractSliderChild.js +0 -11
- package/Slider/AbstractSliderChild.js.map +2 -2
- package/Slider/Slider.d.ts +23 -30
- package/Slider/Slider.js +40 -100
- package/Slider/Slider.js.map +2 -2
- package/Slider/SliderBtn.d.ts +0 -3
- package/Slider/SliderBtn.js +3 -7
- package/Slider/SliderBtn.js.map +2 -2
- package/Slider/SliderCount.d.ts +0 -2
- package/Slider/SliderCount.js +4 -3
- package/Slider/SliderCount.js.map +2 -2
- package/Slider/SliderDots.d.ts +0 -3
- package/Slider/SliderDots.js +6 -7
- package/Slider/SliderDots.js.map +2 -2
- package/Slider/SliderDrag.d.ts +0 -2
- package/Slider/SliderDrag.js +0 -2
- package/Slider/SliderDrag.js.map +2 -2
- package/Slider/SliderItem.d.ts +10 -26
- package/Slider/SliderItem.js +9 -41
- package/Slider/SliderItem.js.map +2 -2
- package/decorators/withTransition.d.ts +4 -0
- package/decorators/withTransition.js +40 -45
- package/decorators/withTransition.js.map +2 -2
- package/package.json +5 -4
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Base, getClosestParent } from "@studiometa/js-toolkit";
|
|
2
|
+
import { EVENTS } from "./utils.js";
|
|
3
|
+
import { FrameTriggerLoader } from "./FrameTriggerLoader.js";
|
|
4
|
+
class AbstractFrameTrigger extends Base {
|
|
5
|
+
/**
|
|
6
|
+
* Config.
|
|
7
|
+
*/
|
|
8
|
+
static config = {
|
|
9
|
+
name: "AbstractFrameTrigger",
|
|
10
|
+
emits: Object.values(EVENTS),
|
|
11
|
+
options: {
|
|
12
|
+
requestInit: Object,
|
|
13
|
+
headers: Object
|
|
14
|
+
},
|
|
15
|
+
components: {
|
|
16
|
+
FrameTriggerLoader
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* The URL to use for the request.
|
|
21
|
+
*/
|
|
22
|
+
get url() {
|
|
23
|
+
return new URL(this.$el instanceof HTMLFormElement ? this.$el.action : this.$el.href);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Option for the fetch request.
|
|
27
|
+
*/
|
|
28
|
+
get requestInit() {
|
|
29
|
+
const { requestInit, headers } = this.$options;
|
|
30
|
+
return {
|
|
31
|
+
...requestInit,
|
|
32
|
+
// @ts-expect-error this will be right.
|
|
33
|
+
trigger: this,
|
|
34
|
+
headers: {
|
|
35
|
+
...requestInit.headers,
|
|
36
|
+
...headers
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Trigger FrameLoaders enter.
|
|
42
|
+
*/
|
|
43
|
+
onFrameFetchBefore() {
|
|
44
|
+
if (this.$children.FrameTriggerLoader) {
|
|
45
|
+
for (const loader of this.$children.FrameTriggerLoader) {
|
|
46
|
+
if (getClosestParent(loader, this.constructor) === this) {
|
|
47
|
+
loader.enter();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Trigger FrameLoaders leave.
|
|
54
|
+
*/
|
|
55
|
+
onFrameFetchAfter() {
|
|
56
|
+
if (this.$children.FrameTriggerLoader) {
|
|
57
|
+
for (const loader of this.$children.FrameTriggerLoader) {
|
|
58
|
+
if (getClosestParent(loader, this.constructor) === this) {
|
|
59
|
+
loader.leave();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Trigger request.
|
|
66
|
+
*/
|
|
67
|
+
async trigger() {
|
|
68
|
+
const { url, requestInit } = this;
|
|
69
|
+
this.$log("trigger", url, requestInit);
|
|
70
|
+
this.$emit(EVENTS.TRIGGER, url, requestInit);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export {
|
|
74
|
+
AbstractFrameTrigger
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=AbstractFrameTrigger.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../packages/ui/Frame/AbstractFrameTrigger.ts"],
|
|
4
|
+
"sourcesContent": ["import { Base, getClosestParent } from '@studiometa/js-toolkit';\nimport type { BaseConfig, BaseProps } from '@studiometa/js-toolkit';\nimport type { FrameRequestInit } from './types.js';\nimport { EVENTS } from './utils.js';\nimport { FrameTriggerLoader } from './FrameTriggerLoader.js';\n\nexport interface AbstractFrameTriggerProps extends BaseProps {\n $el: HTMLFormElement | HTMLAnchorElement;\n $options: {\n requestInit: RequestInit;\n headers: Record<string, string>;\n };\n $children: {\n FrameTriggerLoader: FrameTriggerLoader[];\n };\n}\n\n/**\n * AbstractFrameTrigger class.\n */\nexport class AbstractFrameTrigger<T extends BaseProps = BaseProps> extends Base<\n T & AbstractFrameTriggerProps\n> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'AbstractFrameTrigger',\n emits: Object.values(EVENTS),\n options: {\n requestInit: Object,\n headers: Object,\n },\n components: {\n FrameTriggerLoader,\n },\n };\n\n /**\n * The URL to use for the request.\n */\n get url(): URL {\n return new URL(this.$el instanceof HTMLFormElement ? this.$el.action : this.$el.href);\n }\n\n /**\n * Option for the fetch request.\n */\n get requestInit(): FrameRequestInit {\n const { requestInit, headers } = this.$options;\n\n return {\n ...requestInit,\n // @ts-expect-error this will be right.\n trigger: this,\n headers: {\n ...requestInit.headers,\n ...headers,\n },\n };\n }\n\n /**\n * Trigger FrameLoaders enter.\n */\n onFrameFetchBefore() {\n if (this.$children.FrameTriggerLoader) {\n for (const loader of this.$children.FrameTriggerLoader) {\n if (getClosestParent(loader, this.constructor) === this) {\n loader.enter();\n }\n }\n }\n }\n\n /**\n * Trigger FrameLoaders leave.\n */\n onFrameFetchAfter() {\n if (this.$children.FrameTriggerLoader) {\n for (const loader of this.$children.FrameTriggerLoader) {\n if (getClosestParent(loader, this.constructor) === this) {\n loader.leave();\n }\n }\n }\n }\n\n /**\n * Trigger request.\n */\n async trigger() {\n const { url, requestInit } = this;\n this.$log('trigger', url, requestInit);\n this.$emit(EVENTS.TRIGGER, url, requestInit);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,MAAM,wBAAwB;AAGvC,SAAS,cAAc;AACvB,SAAS,0BAA0B;AAgB5B,MAAM,6BAA8D,KAEzE;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,SAAqB;AAAA,IAC1B,MAAM;AAAA,IACN,OAAO,OAAO,OAAO,MAAM;AAAA,IAC3B,SAAS;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,YAAY;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAW;AACb,WAAO,IAAI,IAAI,KAAK,eAAe,kBAAkB,KAAK,IAAI,SAAS,KAAK,IAAI,IAAI;AAAA,EACtF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,cAAgC;AAClC,UAAM,EAAE,aAAa,QAAQ,IAAI,KAAK;AAEtC,WAAO;AAAA,MACL,GAAG;AAAA;AAAA,MAEH,SAAS;AAAA,MACT,SAAS;AAAA,QACP,GAAG,YAAY;AAAA,QACf,GAAG;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB;AACnB,QAAI,KAAK,UAAU,oBAAoB;AACrC,iBAAW,UAAU,KAAK,UAAU,oBAAoB;AACtD,YAAI,iBAAiB,QAAQ,KAAK,WAAW,MAAM,MAAM;AACvD,iBAAO,MAAM;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB;AAClB,QAAI,KAAK,UAAU,oBAAoB;AACrC,iBAAW,UAAU,KAAK,UAAU,oBAAoB;AACtD,YAAI,iBAAiB,QAAQ,KAAK,WAAW,MAAM,MAAM;AACvD,iBAAO,MAAM;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU;AACd,UAAM,EAAE,KAAK,YAAY,IAAI;AAC7B,SAAK,KAAK,WAAW,KAAK,WAAW;AACrC,SAAK,MAAM,OAAO,SAAS,KAAK,WAAW;AAAA,EAC7C;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/Frame/Frame.d.ts
CHANGED
|
@@ -3,70 +3,98 @@ import type { BaseProps, BaseConfig } from '@studiometa/js-toolkit';
|
|
|
3
3
|
import { FrameAnchor } from './FrameAnchor.js';
|
|
4
4
|
import { FrameForm } from './FrameForm.js';
|
|
5
5
|
import { FrameTarget } from './FrameTarget.js';
|
|
6
|
+
import { FrameLoader } from './FrameLoader.js';
|
|
7
|
+
import type { FrameRequestInit, FrameTriggerEvent } from './types.js';
|
|
6
8
|
export interface FrameProps extends BaseProps {
|
|
7
9
|
$children: {
|
|
8
10
|
FrameAnchor: FrameAnchor[];
|
|
9
11
|
FrameForm: FrameForm[];
|
|
10
12
|
FrameTarget: FrameTarget[];
|
|
11
|
-
|
|
13
|
+
FrameLoader: FrameLoader[];
|
|
12
14
|
};
|
|
13
15
|
$options: {
|
|
14
16
|
history: boolean;
|
|
17
|
+
requestInit: RequestInit;
|
|
18
|
+
headers: Record<string, string>;
|
|
15
19
|
};
|
|
16
20
|
}
|
|
17
21
|
/**
|
|
18
|
-
*
|
|
22
|
+
* Frame class.
|
|
23
|
+
* @see https://ui.studiometa.dev/-/components/Frame/
|
|
19
24
|
*/
|
|
20
25
|
export declare class Frame<T extends BaseProps = BaseProps> extends Base<T & FrameProps> {
|
|
21
26
|
/**
|
|
22
27
|
* Config.
|
|
23
28
|
*/
|
|
24
29
|
static config: BaseConfig;
|
|
30
|
+
/**
|
|
31
|
+
* DOM Parser to parse the new content to be injected.
|
|
32
|
+
*/
|
|
33
|
+
domParser: DOMParser;
|
|
34
|
+
/**
|
|
35
|
+
* Abort controller to prevent multiple simultaneous fetches.
|
|
36
|
+
*/
|
|
37
|
+
abortController: AbortController;
|
|
38
|
+
/**
|
|
39
|
+
* Header names.
|
|
40
|
+
*/
|
|
41
|
+
headerNames: {
|
|
42
|
+
readonly ACCEPT: "accept";
|
|
43
|
+
readonly X_REQUESTED_BY: "x-requested-by";
|
|
44
|
+
readonly X_TRIGGERED_BY: "x-triggered-by";
|
|
45
|
+
readonly USER_AGENT: "user-agent";
|
|
46
|
+
};
|
|
25
47
|
/**
|
|
26
48
|
* Get uniq id.
|
|
27
49
|
*/
|
|
28
50
|
get id(): string;
|
|
29
51
|
/**
|
|
30
|
-
*
|
|
52
|
+
* The client used for the fetch request.
|
|
31
53
|
*/
|
|
32
|
-
get
|
|
54
|
+
get client(): typeof fetch;
|
|
33
55
|
/**
|
|
34
|
-
*
|
|
56
|
+
* Default request init.
|
|
35
57
|
*/
|
|
36
|
-
|
|
58
|
+
get requestInit(): RequestInit;
|
|
37
59
|
/**
|
|
38
|
-
*
|
|
60
|
+
* Get chidlren limited to the current instance.
|
|
39
61
|
*/
|
|
40
|
-
|
|
41
|
-
event: PopStateEvent;
|
|
42
|
-
}): void;
|
|
62
|
+
getDirectChildren(name: keyof FrameProps['$children']): any[];
|
|
43
63
|
/**
|
|
44
|
-
*
|
|
64
|
+
* Fetch new content on frame-trigger.
|
|
45
65
|
*/
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
target: FrameAnchor;
|
|
66
|
+
onFrameAnchorFrameTrigger({ args: [url, requestInit] }: {
|
|
67
|
+
args: FrameTriggerEvent['detail'];
|
|
49
68
|
}): void;
|
|
50
69
|
/**
|
|
51
|
-
*
|
|
70
|
+
* Fetch new content on frame-trigger.
|
|
52
71
|
*/
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
target: FrameForm;
|
|
72
|
+
onFrameFormFrameTrigger({ args: [url, requestInit] }: {
|
|
73
|
+
args: [URL, FrameRequestInit];
|
|
56
74
|
}): void;
|
|
57
75
|
/**
|
|
58
|
-
*
|
|
76
|
+
* Update content on history back/forward navigation.
|
|
77
|
+
*/
|
|
78
|
+
onWindowPopstate(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Trigger FrameLoaders enter.
|
|
81
|
+
*/
|
|
82
|
+
onFrameFetchBefore(): void;
|
|
83
|
+
/**
|
|
84
|
+
* Trigger FrameLoaders leave.
|
|
85
|
+
*/
|
|
86
|
+
onFrameFetchAfter(): void;
|
|
87
|
+
emitSync(event: string, trigger?: FrameForm | FrameAnchor, ...args: any[]): void;
|
|
88
|
+
/**
|
|
89
|
+
* Fetch given url.
|
|
59
90
|
*/
|
|
60
|
-
|
|
91
|
+
fetch(url: URL, requestInit?: FrameRequestInit): Promise<void>;
|
|
61
92
|
/**
|
|
62
|
-
*
|
|
93
|
+
* Dispatch the contents to update to their matching FrameTarget.
|
|
63
94
|
*/
|
|
64
|
-
|
|
65
|
-
top: number;
|
|
66
|
-
left: number;
|
|
67
|
-
}): Promise<void>;
|
|
95
|
+
content(url: URL, requestInit: FrameRequestInit, content: string): Promise<void>;
|
|
68
96
|
/**
|
|
69
|
-
*
|
|
97
|
+
* Handle errors.
|
|
70
98
|
*/
|
|
71
|
-
|
|
99
|
+
error(url: URL, requestInit: FrameRequestInit, error: Error): Promise<void>;
|
|
72
100
|
}
|
package/Frame/Frame.js
CHANGED
|
@@ -1,41 +1,46 @@
|
|
|
1
|
-
import { Base,
|
|
2
|
-
import {
|
|
1
|
+
import { Base, getClosestParent } from "@studiometa/js-toolkit";
|
|
2
|
+
import { domScheduler, historyPush } from "@studiometa/js-toolkit/utils";
|
|
3
3
|
import { FrameAnchor } from "./FrameAnchor.js";
|
|
4
4
|
import { FrameForm } from "./FrameForm.js";
|
|
5
5
|
import { FrameTarget } from "./FrameTarget.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
left: window.pageXOffset,
|
|
9
|
-
top: window.pageYOffset
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
const cache = /* @__PURE__ */ new Map();
|
|
6
|
+
import { FrameLoader } from "./FrameLoader.js";
|
|
7
|
+
import { EVENTS } from "./utils.js";
|
|
13
8
|
class Frame extends Base {
|
|
14
9
|
/**
|
|
15
10
|
* Config.
|
|
16
11
|
*/
|
|
17
12
|
static config = {
|
|
18
13
|
name: "Frame",
|
|
19
|
-
emits:
|
|
20
|
-
"before-fetch",
|
|
21
|
-
"after-fetch",
|
|
22
|
-
"before-leave",
|
|
23
|
-
"after-leave",
|
|
24
|
-
"before-content",
|
|
25
|
-
"after-content",
|
|
26
|
-
"before-enter",
|
|
27
|
-
"after-enter"
|
|
28
|
-
],
|
|
14
|
+
emits: Object.values(EVENTS),
|
|
29
15
|
components: {
|
|
30
16
|
FrameAnchor,
|
|
31
17
|
FrameForm,
|
|
32
18
|
FrameTarget,
|
|
33
|
-
|
|
19
|
+
FrameLoader
|
|
34
20
|
},
|
|
35
21
|
options: {
|
|
36
|
-
history: Boolean
|
|
22
|
+
history: Boolean,
|
|
23
|
+
requestInit: Object,
|
|
24
|
+
headers: Object
|
|
37
25
|
}
|
|
38
26
|
};
|
|
27
|
+
/**
|
|
28
|
+
* DOM Parser to parse the new content to be injected.
|
|
29
|
+
*/
|
|
30
|
+
domParser = new DOMParser();
|
|
31
|
+
/**
|
|
32
|
+
* Abort controller to prevent multiple simultaneous fetches.
|
|
33
|
+
*/
|
|
34
|
+
abortController = new AbortController();
|
|
35
|
+
/**
|
|
36
|
+
* Header names.
|
|
37
|
+
*/
|
|
38
|
+
headerNames = {
|
|
39
|
+
ACCEPT: "accept",
|
|
40
|
+
X_REQUESTED_BY: "x-requested-by",
|
|
41
|
+
X_TRIGGERED_BY: "x-triggered-by",
|
|
42
|
+
USER_AGENT: "user-agent"
|
|
43
|
+
};
|
|
39
44
|
/**
|
|
40
45
|
* Get uniq id.
|
|
41
46
|
*/
|
|
@@ -43,151 +48,140 @@ class Frame extends Base {
|
|
|
43
48
|
return this.$el.id;
|
|
44
49
|
}
|
|
45
50
|
/**
|
|
46
|
-
*
|
|
51
|
+
* The client used for the fetch request.
|
|
47
52
|
*/
|
|
48
|
-
get
|
|
49
|
-
return
|
|
53
|
+
get client() {
|
|
54
|
+
return window.fetch.bind(window);
|
|
50
55
|
}
|
|
51
56
|
/**
|
|
52
|
-
*
|
|
57
|
+
* Default request init.
|
|
53
58
|
*/
|
|
54
|
-
|
|
55
|
-
const {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
get requestInit() {
|
|
60
|
+
const { headerNames } = this;
|
|
61
|
+
const { requestInit, headers } = this.$options;
|
|
62
|
+
const requestedBy = "@studiometa/ui/Frame";
|
|
63
|
+
return {
|
|
64
|
+
...requestInit,
|
|
65
|
+
headers: {
|
|
66
|
+
[headerNames.ACCEPT]: "text/*",
|
|
67
|
+
[headerNames.X_REQUESTED_BY]: requestedBy,
|
|
68
|
+
[headerNames.USER_AGENT]: `${navigator.userAgent} ${requestedBy}`,
|
|
69
|
+
...requestInit.headers,
|
|
70
|
+
...headers
|
|
71
|
+
}
|
|
72
|
+
};
|
|
66
73
|
}
|
|
67
74
|
/**
|
|
68
|
-
*
|
|
75
|
+
* Get chidlren limited to the current instance.
|
|
69
76
|
*/
|
|
70
|
-
|
|
71
|
-
|
|
77
|
+
getDirectChildren(name) {
|
|
78
|
+
const children = [];
|
|
79
|
+
for (const child of this.$children[name]) {
|
|
80
|
+
if (getClosestParent(child, this.constructor) === this) {
|
|
81
|
+
children.push(child);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return children;
|
|
72
85
|
}
|
|
73
86
|
/**
|
|
74
|
-
*
|
|
87
|
+
* Fetch new content on frame-trigger.
|
|
75
88
|
*/
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
this.$log("onAFrameClick", target, event);
|
|
81
|
-
event.preventDefault();
|
|
82
|
-
if (target.href === window.location.href) {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
this.goTo(target.href);
|
|
89
|
+
onFrameAnchorFrameTrigger({ args: [url, requestInit] }) {
|
|
90
|
+
this.fetch(url, requestInit);
|
|
86
91
|
}
|
|
87
92
|
/**
|
|
88
|
-
*
|
|
93
|
+
* Fetch new content on frame-trigger.
|
|
89
94
|
*/
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
this.$log("onFrameFormFrameSubmit", target, event);
|
|
95
|
-
event.preventDefault();
|
|
96
|
-
const url = new URL(target.action);
|
|
97
|
-
if (target.$el.method === "get") {
|
|
98
|
-
url.search = new URLSearchParams(new FormData(target.$el)).toString();
|
|
99
|
-
this.goTo(url.toString());
|
|
100
|
-
}
|
|
101
|
-
if (target.$el.method === "post") {
|
|
102
|
-
this.goTo(url.toString(), new FormData(target.$el));
|
|
103
|
-
}
|
|
95
|
+
onFrameFormFrameTrigger({ args: [url, requestInit] }) {
|
|
96
|
+
this.fetch(url, requestInit);
|
|
104
97
|
}
|
|
105
98
|
/**
|
|
106
|
-
*
|
|
99
|
+
* Update content on history back/forward navigation.
|
|
107
100
|
*/
|
|
108
|
-
|
|
109
|
-
|
|
101
|
+
onWindowPopstate() {
|
|
102
|
+
this.fetch(new URL(window.location.href), {
|
|
103
|
+
headers: {
|
|
104
|
+
[this.headerNames.X_TRIGGERED_BY]: "popstate"
|
|
105
|
+
}
|
|
106
|
+
});
|
|
110
107
|
}
|
|
111
108
|
/**
|
|
112
|
-
*
|
|
109
|
+
* Trigger FrameLoaders enter.
|
|
113
110
|
*/
|
|
114
|
-
|
|
115
|
-
this
|
|
116
|
-
|
|
117
|
-
if (parsedUrl.origin !== window.location.origin) {
|
|
118
|
-
throw new Error("Cross origin request are not allowed.");
|
|
119
|
-
}
|
|
120
|
-
this.$emit("before-fetch", url);
|
|
121
|
-
const content = await this.fetch(url, formData);
|
|
122
|
-
const doc = this.parseHTML(content);
|
|
123
|
-
const el = doc.querySelector(`#${this.id}`);
|
|
124
|
-
const newFrame = new Frame(el);
|
|
125
|
-
newFrame.__children.registerAll();
|
|
126
|
-
this.$emit("after-fetch", url, content);
|
|
127
|
-
this.$emit("before-leave");
|
|
128
|
-
await Promise.all(this.directChildrenFrameTarget.map((target) => target.leave()));
|
|
129
|
-
this.$emit("after-leave");
|
|
130
|
-
this.$emit("before-content");
|
|
131
|
-
this.directChildrenFrameTarget.map(
|
|
132
|
-
(target, index) => target.updateContent(newFrame.directChildrenFrameTarget[index])
|
|
133
|
-
);
|
|
134
|
-
if (this.$options.history && formData === null) {
|
|
135
|
-
document.title = doc.title;
|
|
136
|
-
historyPush({ path: parsedUrl.pathname, search: parsedUrl.searchParams });
|
|
111
|
+
onFrameFetchBefore() {
|
|
112
|
+
for (const loader of this.getDirectChildren("FrameLoader")) {
|
|
113
|
+
loader.enter();
|
|
137
114
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Trigger FrameLoaders leave.
|
|
118
|
+
*/
|
|
119
|
+
onFrameFetchAfter() {
|
|
120
|
+
for (const loader of this.getDirectChildren("FrameLoader")) {
|
|
121
|
+
loader.leave();
|
|
141
122
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
this.$emit("before-enter");
|
|
147
|
-
await Promise.all(this.directChildrenFrameTarget.map((target) => target.enter()));
|
|
148
|
-
this.$emit("after-enter");
|
|
123
|
+
}
|
|
124
|
+
emitSync(event, trigger = null, ...args) {
|
|
125
|
+
this.$emit(event, ...args);
|
|
126
|
+
trigger?.$emit(event, ...args);
|
|
149
127
|
}
|
|
150
128
|
/**
|
|
151
|
-
* Fetch
|
|
129
|
+
* Fetch given url.
|
|
152
130
|
*/
|
|
153
|
-
async fetch(url,
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
131
|
+
async fetch(url, requestInit = {}) {
|
|
132
|
+
this.emitSync(EVENTS.FETCH_BEFORE, requestInit.trigger, url, requestInit);
|
|
133
|
+
this.abortController.abort();
|
|
134
|
+
this.abortController = new AbortController();
|
|
135
|
+
const init = {
|
|
136
|
+
...this.requestInit,
|
|
137
|
+
...requestInit,
|
|
138
|
+
headers: {
|
|
139
|
+
...this.requestInit.headers,
|
|
140
|
+
...requestInit.headers
|
|
141
|
+
},
|
|
142
|
+
signal: this.abortController.signal
|
|
143
|
+
};
|
|
144
|
+
this.$log("fetch", url, init);
|
|
145
|
+
this.emitSync(EVENTS.FETCH, init.trigger, url, init);
|
|
146
|
+
try {
|
|
147
|
+
const content = await this.client(url, init).then((response) => response.text());
|
|
148
|
+
this.emitSync(EVENTS.FETCH_AFTER, init.trigger, url, requestInit, content);
|
|
149
|
+
this.content(url, init, content);
|
|
150
|
+
} catch (error) {
|
|
151
|
+
this.emitSync(EVENTS.FETCH_AFTER, init.trigger, url, requestInit, error);
|
|
152
|
+
this.error(url, init, error);
|
|
161
153
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Dispatch the contents to update to their matching FrameTarget.
|
|
157
|
+
*/
|
|
158
|
+
async content(url, requestInit, content) {
|
|
159
|
+
this.$log("content", url, content);
|
|
160
|
+
this.emitSync(EVENTS.CONTENT, requestInit.trigger, url, requestInit, content);
|
|
161
|
+
const doc = this.domParser.parseFromString(content, "text/html");
|
|
162
|
+
const el = doc.querySelector(`#${this.id}`) ?? doc;
|
|
163
|
+
const promises = [];
|
|
164
|
+
if (this.$options.history) {
|
|
165
|
+
if (requestInit?.headers?.[this.headerNames.X_TRIGGERED_BY] !== "popstate") {
|
|
166
|
+
historyPush({ path: url.pathname, search: url.searchParams });
|
|
166
167
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
const promise = fetch(url).then((response) => response.text());
|
|
170
|
-
try {
|
|
171
|
-
cache.set(url, {
|
|
172
|
-
promise,
|
|
173
|
-
status: "pending",
|
|
174
|
-
content: void 0
|
|
175
|
-
});
|
|
176
|
-
const content = await promise;
|
|
177
|
-
cache.set(url, {
|
|
178
|
-
promise,
|
|
179
|
-
status: "resolved",
|
|
180
|
-
content
|
|
181
|
-
});
|
|
182
|
-
return content;
|
|
183
|
-
} catch (err) {
|
|
184
|
-
cache.set(url, {
|
|
185
|
-
promise,
|
|
186
|
-
status: "error",
|
|
187
|
-
content: err
|
|
168
|
+
domScheduler.write(() => {
|
|
169
|
+
if (doc.title) document.title = doc.title;
|
|
188
170
|
});
|
|
189
|
-
return err;
|
|
190
171
|
}
|
|
172
|
+
for (const frameTarget of this.getDirectChildren("FrameTarget")) {
|
|
173
|
+
promises.push(frameTarget.updateContent(el.querySelector(`#${frameTarget.id}`)));
|
|
174
|
+
}
|
|
175
|
+
await Promise.all(promises);
|
|
176
|
+
this.emitSync(EVENTS.CONTENT_AFTER, requestInit.trigger, url, requestInit, content);
|
|
177
|
+
await this.$root.$update();
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Handle errors.
|
|
181
|
+
*/
|
|
182
|
+
async error(url, requestInit, error) {
|
|
183
|
+
this.$log("error", url, requestInit, error);
|
|
184
|
+
this.emitSync(EVENTS.ERROR, requestInit.trigger, url, requestInit, error);
|
|
191
185
|
}
|
|
192
186
|
}
|
|
193
187
|
export {
|
package/Frame/Frame.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/ui/Frame/Frame.ts"],
|
|
4
|
-
"sourcesContent": ["import { Base,
|
|
5
|
-
"mappings": "AAAA,SAAS,MAAM,
|
|
6
|
-
"names": [
|
|
4
|
+
"sourcesContent": ["import { Base, getClosestParent } from '@studiometa/js-toolkit';\nimport type { BaseProps, BaseConfig } from '@studiometa/js-toolkit';\nimport { domScheduler, historyPush } from '@studiometa/js-toolkit/utils';\nimport { FrameAnchor } from './FrameAnchor.js';\nimport { FrameForm } from './FrameForm.js';\nimport { FrameTarget } from './FrameTarget.js';\nimport { FrameLoader } from './FrameLoader.js';\nimport type { FrameRequestInit, FrameTriggerEvent } from './types.js';\nimport { EVENTS } from './utils.js';\n\nexport interface FrameProps extends BaseProps {\n $children: {\n FrameAnchor: FrameAnchor[];\n FrameForm: FrameForm[];\n FrameTarget: FrameTarget[];\n FrameLoader: FrameLoader[];\n };\n $options: {\n history: boolean;\n requestInit: RequestInit;\n headers: Record<string, string>;\n };\n}\n\n/**\n * Frame class.\n * @see https://ui.studiometa.dev/-/components/Frame/\n */\nexport class Frame<T extends BaseProps = BaseProps> extends Base<T & FrameProps> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'Frame',\n emits: Object.values(EVENTS),\n components: {\n FrameAnchor,\n FrameForm,\n FrameTarget,\n FrameLoader,\n },\n options: {\n history: Boolean,\n requestInit: Object,\n headers: Object,\n },\n };\n\n /**\n * DOM Parser to parse the new content to be injected.\n */\n domParser = new DOMParser();\n\n /**\n * Abort controller to prevent multiple simultaneous fetches.\n */\n abortController = new AbortController();\n\n /**\n * Header names.\n */\n headerNames = {\n ACCEPT: 'accept',\n X_REQUESTED_BY: 'x-requested-by',\n X_TRIGGERED_BY: 'x-triggered-by',\n USER_AGENT: 'user-agent',\n } as const;\n\n /**\n * Get uniq id.\n */\n get id() {\n return this.$el.id;\n }\n\n /**\n * The client used for the fetch request.\n */\n get client(): typeof fetch {\n return window.fetch.bind(window);\n }\n\n /**\n * Default request init.\n */\n get requestInit(): RequestInit {\n const { headerNames } = this;\n const { requestInit, headers } = this.$options;\n const requestedBy = '@studiometa/ui/Frame';\n\n return {\n ...requestInit,\n headers: {\n [headerNames.ACCEPT]: 'text/*',\n [headerNames.X_REQUESTED_BY]: requestedBy,\n [headerNames.USER_AGENT]: `${navigator.userAgent} ${requestedBy}`,\n ...requestInit.headers,\n ...headers,\n },\n };\n }\n\n /**\n * Get chidlren limited to the current instance.\n */\n getDirectChildren(name: keyof FrameProps['$children']) {\n const children = [];\n for (const child of this.$children[name]) {\n if (getClosestParent(child, this.constructor) === this) {\n children.push(child);\n }\n }\n return children;\n }\n\n /**\n * Fetch new content on frame-trigger.\n */\n onFrameAnchorFrameTrigger({ args: [url, requestInit] }: { args: FrameTriggerEvent['detail'] }) {\n this.fetch(url, requestInit);\n }\n\n /**\n * Fetch new content on frame-trigger.\n */\n onFrameFormFrameTrigger({ args: [url, requestInit] }: { args: [URL, FrameRequestInit] }) {\n this.fetch(url, requestInit);\n }\n\n /**\n * Update content on history back/forward navigation.\n */\n onWindowPopstate() {\n this.fetch(new URL(window.location.href), {\n headers: {\n [this.headerNames.X_TRIGGERED_BY]: 'popstate',\n },\n });\n }\n\n /**\n * Trigger FrameLoaders enter.\n */\n onFrameFetchBefore() {\n for (const loader of this.getDirectChildren('FrameLoader')) {\n loader.enter();\n }\n }\n\n /**\n * Trigger FrameLoaders leave.\n */\n onFrameFetchAfter() {\n for (const loader of this.getDirectChildren('FrameLoader')) {\n loader.leave();\n }\n }\n\n emitSync(event: string, trigger: FrameForm | FrameAnchor = null, ...args: any[]) {\n this.$emit(event, ...args);\n trigger?.$emit(event, ...args);\n }\n\n /**\n * Fetch given url.\n */\n async fetch(url: URL, requestInit: FrameRequestInit = {}) {\n this.emitSync(EVENTS.FETCH_BEFORE, requestInit.trigger, url, requestInit);\n\n this.abortController.abort();\n this.abortController = new AbortController();\n const init = {\n ...this.requestInit,\n ...requestInit,\n headers: {\n ...this.requestInit.headers,\n ...requestInit.headers,\n },\n signal: this.abortController.signal,\n };\n\n this.$log('fetch', url, init);\n this.emitSync(EVENTS.FETCH, init.trigger, url, init);\n\n try {\n const content = await this.client(url, init).then((response) => response.text());\n this.emitSync(EVENTS.FETCH_AFTER, init.trigger, url, requestInit, content);\n this.content(url, init, content);\n } catch (error) {\n this.emitSync(EVENTS.FETCH_AFTER, init.trigger, url, requestInit, error);\n this.error(url, init, error);\n }\n }\n\n /**\n * Dispatch the contents to update to their matching FrameTarget.\n */\n async content(url: URL, requestInit: FrameRequestInit, content: string) {\n this.$log('content', url, content);\n this.emitSync(EVENTS.CONTENT, requestInit.trigger, url, requestInit, content);\n\n const doc = this.domParser.parseFromString(content, 'text/html');\n const el = doc.querySelector(`#${this.id}`) ?? doc;\n const promises = [];\n\n // @todo inject styles and scripts from new <head>\n if (this.$options.history) {\n if (requestInit?.headers?.[this.headerNames.X_TRIGGERED_BY] !== 'popstate') {\n historyPush({ path: url.pathname, search: url.searchParams });\n }\n domScheduler.write(() => {\n if (doc.title) document.title = doc.title;\n });\n }\n\n for (const frameTarget of this.getDirectChildren('FrameTarget')) {\n promises.push(frameTarget.updateContent(el.querySelector(`#${frameTarget.id}`)));\n }\n\n await Promise.all(promises);\n\n this.emitSync(EVENTS.CONTENT_AFTER, requestInit.trigger, url, requestInit, content);\n\n // We need to update the root instance to make sure newly inserted\n // components are correctly detected and mounted. This avoid having\n // to declare all potentials component as children of the Frame component.\n await this.$root.$update();\n }\n\n /**\n * Handle errors.\n */\n async error(url: URL, requestInit: FrameRequestInit, error: Error) {\n this.$log('error', url, requestInit, error);\n this.emitSync(EVENTS.ERROR, requestInit.trigger, url, requestInit, error);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
package/Frame/FrameAnchor.d.ts
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
import { Base } from '@studiometa/js-toolkit';
|
|
2
1
|
import type { BaseConfig, BaseProps } from '@studiometa/js-toolkit';
|
|
2
|
+
import { AbstractFrameTrigger } from './AbstractFrameTrigger.js';
|
|
3
3
|
export interface FrameAnchorProps extends BaseProps {
|
|
4
4
|
$el: HTMLAnchorElement;
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
7
|
* FrameAnchor class.
|
|
8
8
|
*/
|
|
9
|
-
export declare class FrameAnchor<T extends BaseProps = BaseProps> extends
|
|
9
|
+
export declare class FrameAnchor<T extends BaseProps = BaseProps> extends AbstractFrameTrigger<T & FrameAnchorProps> {
|
|
10
10
|
/**
|
|
11
11
|
* Config.
|
|
12
12
|
*/
|
|
13
13
|
static config: BaseConfig;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Prevent click.
|
|
16
16
|
*/
|
|
17
|
-
|
|
17
|
+
onClick({ event }: {
|
|
18
|
+
event: MouseEvent;
|
|
19
|
+
target: FrameAnchor;
|
|
20
|
+
}): void;
|
|
18
21
|
}
|