stimulus-library 0.3.19 → 0.4.0
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/CHANGELOG.md +14 -0
- package/dist/controllers/ajax/async_block_controller.d.ts +18 -18
- package/dist/controllers/ajax/lazy_block_controller.d.ts +9 -9
- package/dist/controllers/ajax/load_block_controller.d.ts +19 -19
- package/dist/controllers/ajax/poll_block_controller.d.ts +16 -16
- package/dist/controllers/anchor_spy_controller.d.ts +15 -15
- package/dist/controllers/back_link_controller.d.ts +19 -19
- package/dist/controllers/clipboard_controller.d.ts +18 -18
- package/dist/controllers/confirm_controller.d.ts +13 -13
- package/dist/controllers/confirm_navigation_controller.d.ts +15 -15
- package/dist/controllers/debug_controller.d.ts +6 -6
- package/dist/controllers/disable_with_controller.d.ts +25 -25
- package/dist/controllers/dismissable_controller.d.ts +6 -6
- package/dist/controllers/element_save_controller.d.ts +25 -25
- package/dist/controllers/empty_dom_controller.d.ts +29 -29
- package/dist/controllers/forms/auto_submit_form_controller.d.ts +15 -14
- package/dist/controllers/forms/auto_submit_form_controller.d.ts.map +1 -1
- package/dist/controllers/forms/autosize_controller.d.ts +9 -9
- package/dist/controllers/forms/char_count_controller.d.ts +26 -26
- package/dist/controllers/forms/checkbox_select_all_controller.d.ts +14 -14
- package/dist/controllers/forms/detect_dirty_controller.d.ts +16 -16
- package/dist/controllers/forms/detect_dirty_form_controller.d.ts +19 -19
- package/dist/controllers/forms/disable_inputs_controller.d.ts +16 -16
- package/dist/controllers/forms/enable_inputs_controller.d.ts +16 -16
- package/dist/controllers/forms/form_rc_controller.d.ts +13 -7
- package/dist/controllers/forms/form_rc_controller.d.ts.map +1 -1
- package/dist/controllers/forms/form_save_controller.d.ts +33 -33
- package/dist/controllers/forms/limited_selection_checkboxes_controller.d.ts +17 -17
- package/dist/controllers/forms/navigate_form_errors_controller.d.ts +34 -34
- package/dist/controllers/forms/nested_form_controller.d.ts +21 -21
- package/dist/controllers/forms/password_confirm_controller.d.ts +17 -17
- package/dist/controllers/forms/password_peek_controller.d.ts +8 -8
- package/dist/controllers/forms/remote_form_controller.d.ts +13 -13
- package/dist/controllers/forms/sync_inputs_controller.d.ts +21 -21
- package/dist/controllers/forms/value_warn_controller.d.ts +39 -39
- package/dist/controllers/forms/word_count_controller.d.ts +26 -26
- package/dist/controllers/media/fallback_image_controller.d.ts +27 -27
- package/dist/controllers/media/lightbox_image_controller.d.ts +29 -29
- package/dist/controllers/media/media_player_controller.d.ts +12 -12
- package/dist/controllers/prefetch_controller.d.ts +18 -18
- package/dist/controllers/responsive_iframe_controller.d.ts +23 -23
- package/dist/controllers/scroll/scroll_container_controller.d.ts +21 -21
- package/dist/controllers/scroll/scroll_into_focus_controller.d.ts +15 -15
- package/dist/controllers/scroll/scroll_to_bottom_controller.d.ts +11 -11
- package/dist/controllers/scroll/scroll_to_controller.d.ts +17 -17
- package/dist/controllers/scroll/scroll_to_top_controller.d.ts +11 -11
- package/dist/controllers/self_destruct_controller.d.ts +10 -10
- package/dist/controllers/sticky_controller.d.ts +19 -19
- package/dist/controllers/tables/table_sort_controller.d.ts +20 -20
- package/dist/controllers/tables/table_truncate_controller.d.ts +26 -26
- package/dist/controllers/teleport_controller.d.ts +15 -15
- package/dist/controllers/temporary_state_controller.d.ts +28 -28
- package/dist/controllers/toggle_class_controller.d.ts +35 -35
- package/dist/controllers/turbo_frame_rc_controller.d.ts +20 -20
- package/dist/controllers/turbo_frame_refresh_controller.d.ts +16 -16
- package/dist/controllers/utility/intersection_controller.d.ts +13 -13
- package/dist/controllers/utility/interval_controller.d.ts +13 -13
- package/dist/controllers/utility/presence_controller.d.ts +5 -5
- package/dist/controllers/utility/timeout_controller.d.ts +12 -12
- package/dist/controllers/utility/user_focus_controller.d.ts +10 -10
- package/dist/controllers/visual/clock_controller.d.ts +18 -18
- package/dist/controllers/visual/countdown_controller.d.ts +53 -53
- package/dist/controllers/visual/duration_controller.d.ts +27 -27
- package/dist/controllers/visual/tabs_controller.d.ts +37 -37
- package/dist/controllers/visual/time_distance_controller.d.ts +18 -18
- package/dist/controllers/visual/tree_view_controller.d.ts +29 -29
- package/dist/index.d.ts +66 -66
- package/dist/stimulus-library.cjs.js +2 -0
- package/dist/stimulus-library.cjs.js.map +1 -0
- package/dist/stimulus-library.es.js +2 -0
- package/dist/stimulus-library.es.js.map +1 -0
- package/dist/stimulus-library.umd.js +1 -1
- package/dist/stimulus-library.umd.js.map +1 -1
- package/dist/utilities/base_controller.d.ts +13 -13
- package/dist/utilities/base_controller.d.ts.map +1 -1
- package/dist/utilities/elements.d.ts +13 -13
- package/dist/utilities/ephemeral_controller.d.ts +5 -5
- package/dist/utilities/event_bus.d.ts +3 -3
- package/dist/utilities/requestSubmit.d.ts +2 -2
- package/dist/utilities/scroll.d.ts +10 -10
- package/dist/utilities/turbo.d.ts +1 -1
- package/package.json +16 -10
- package/dist/stimulus-library.js +0 -2
- package/dist/stimulus-library.js.map +0 -1
- package/dist/stimulus-library.modern.js +0 -2
- package/dist/stimulus-library.modern.js.map +0 -1
- package/dist/stimulus-library.module.js +0 -2
- package/dist/stimulus-library.module.js.map +0 -1
- package/src/controllers/ajax/async_block_controller.ts +0 -28
- package/src/controllers/ajax/lazy_block_controller.ts +0 -31
- package/src/controllers/ajax/load_block_controller.ts +0 -59
- package/src/controllers/ajax/poll_block_controller.ts +0 -32
- package/src/controllers/anchor_spy_controller.ts +0 -47
- package/src/controllers/back_link_controller.ts +0 -49
- package/src/controllers/clipboard_controller.ts +0 -47
- package/src/controllers/confirm_controller.ts +0 -50
- package/src/controllers/confirm_navigation_controller.ts +0 -51
- package/src/controllers/debug_controller.ts +0 -11
- package/src/controllers/disable_with_controller.ts +0 -116
- package/src/controllers/dismissable_controller.ts +0 -12
- package/src/controllers/element_save_controller.ts +0 -93
- package/src/controllers/empty_dom_controller.ts +0 -105
- package/src/controllers/forms/auto_submit_form_controller.ts +0 -59
- package/src/controllers/forms/autosize_controller.ts +0 -41
- package/src/controllers/forms/char_count_controller.ts +0 -91
- package/src/controllers/forms/checkbox_select_all_controller.ts +0 -57
- package/src/controllers/forms/detect_dirty_controller.ts +0 -116
- package/src/controllers/forms/detect_dirty_form_controller.ts +0 -127
- package/src/controllers/forms/disable_inputs_controller.ts +0 -44
- package/src/controllers/forms/enable_inputs_controller.ts +0 -44
- package/src/controllers/forms/form_rc_controller.ts +0 -20
- package/src/controllers/forms/form_save_controller.ts +0 -141
- package/src/controllers/forms/limited_selection_checkboxes_controller.ts +0 -44
- package/src/controllers/forms/navigate_form_errors_controller.ts +0 -144
- package/src/controllers/forms/nested_form_controller.ts +0 -68
- package/src/controllers/forms/password_confirm_controller.ts +0 -68
- package/src/controllers/forms/password_peek_controller.ts +0 -27
- package/src/controllers/forms/remote_form_controller.ts +0 -34
- package/src/controllers/forms/sync_inputs_controller.ts +0 -89
- package/src/controllers/forms/value_warn_controller.ts +0 -107
- package/src/controllers/forms/word_count_controller.ts +0 -86
- package/src/controllers/media/fallback_image_controller.ts +0 -108
- package/src/controllers/media/lightbox_image_controller.ts +0 -89
- package/src/controllers/media/media_player_controller.ts +0 -37
- package/src/controllers/prefetch_controller.ts +0 -99
- package/src/controllers/responsive_iframe_controller.ts +0 -75
- package/src/controllers/scroll/scroll_container_controller.ts +0 -73
- package/src/controllers/scroll/scroll_into_focus_controller.ts +0 -34
- package/src/controllers/scroll/scroll_to_bottom_controller.ts +0 -35
- package/src/controllers/scroll/scroll_to_controller.ts +0 -38
- package/src/controllers/scroll/scroll_to_top_controller.ts +0 -35
- package/src/controllers/self_destruct_controller.ts +0 -23
- package/src/controllers/sticky_controller.ts +0 -84
- package/src/controllers/tables/table_sort_controller.ts +0 -105
- package/src/controllers/tables/table_truncate_controller.ts +0 -106
- package/src/controllers/teleport_controller.ts +0 -64
- package/src/controllers/temporary_state_controller.ts +0 -82
- package/src/controllers/toggle_class_controller.ts +0 -149
- package/src/controllers/turbo_frame_rc_controller.ts +0 -77
- package/src/controllers/turbo_frame_refresh_controller.ts +0 -51
- package/src/controllers/utility/intersection_controller.ts +0 -51
- package/src/controllers/utility/interval_controller.ts +0 -34
- package/src/controllers/utility/presence_controller.ts +0 -13
- package/src/controllers/utility/timeout_controller.ts +0 -30
- package/src/controllers/utility/user_focus_controller.ts +0 -40
- package/src/controllers/visual/clock_controller.ts +0 -75
- package/src/controllers/visual/countdown_controller.ts +0 -198
- package/src/controllers/visual/duration_controller.ts +0 -106
- package/src/controllers/visual/tabs_controller.ts +0 -162
- package/src/controllers/visual/time_distance_controller.ts +0 -66
- package/src/controllers/visual/tree_view_controller.ts +0 -154
- package/src/index.ts +0 -71
- package/src/utilities/base_controller.ts +0 -143
- package/src/utilities/elements.ts +0 -47
- package/src/utilities/ephemeral_controller.ts +0 -45
- package/src/utilities/event_bus.ts +0 -3
- package/src/utilities/requestSubmit.ts +0 -23
- package/src/utilities/scroll.ts +0 -101
- package/src/utilities/turbo.ts +0 -3
- package/src/utilities/types.d.ts +0 -4
- package/tsconfig.json +0 -27
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import {useClickOutside, useHover} from "stimulus-use";
|
|
2
|
-
import {BaseController} from "../utilities/base_controller";
|
|
3
|
-
|
|
4
|
-
export type ToggleClassMode = "on" | "off" | "toggle"
|
|
5
|
-
|
|
6
|
-
export class ToggleClassController extends BaseController {
|
|
7
|
-
|
|
8
|
-
static targets = ["toggle"];
|
|
9
|
-
static values = {
|
|
10
|
-
class: String,
|
|
11
|
-
mouseEnter: String,
|
|
12
|
-
mouseLeave: String,
|
|
13
|
-
clickAway: Boolean,
|
|
14
|
-
initial: String,
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
declare readonly toggleTargets: HTMLElement[];
|
|
18
|
-
|
|
19
|
-
declare readonly classValue: string;
|
|
20
|
-
declare readonly hasClassValue: boolean;
|
|
21
|
-
|
|
22
|
-
declare readonly mouseEnterValue: ToggleClassMode;
|
|
23
|
-
declare readonly hasMouseEnterValue: boolean;
|
|
24
|
-
|
|
25
|
-
declare readonly mouseLeaveValue: ToggleClassMode;
|
|
26
|
-
declare readonly hasMouseLeaveValue: boolean;
|
|
27
|
-
|
|
28
|
-
declare readonly clickAwayValue: boolean;
|
|
29
|
-
declare readonly hasClickAwayValue: boolean;
|
|
30
|
-
|
|
31
|
-
declare readonly initialValue: "on" | "off";
|
|
32
|
-
declare readonly hasInitialValue: boolean;
|
|
33
|
-
|
|
34
|
-
connect() {
|
|
35
|
-
if (!this.hasClassValue) {
|
|
36
|
-
throw new Error("data-toggle-class-class-value must not be empty");
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (this.hasMouseEnterValue || this.hasMouseLeaveValue) {
|
|
40
|
-
useHover(this);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if (this.hasClickAwayValue && this.clickAwayValue) {
|
|
44
|
-
useClickOutside(this);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
requestAnimationFrame(() => {
|
|
48
|
-
if (this.hasInitialValue) {
|
|
49
|
-
if (this.initialValue === "on") {
|
|
50
|
-
this.toggleTargets.forEach((target) => this._elementOn(target));
|
|
51
|
-
} else {
|
|
52
|
-
this.toggleTargets.forEach((target) => this._elementOff(target));
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
clickOutside() {
|
|
59
|
-
this.toggleTargets.forEach((target) => {
|
|
60
|
-
if (this._elementWasToggled(target)) {
|
|
61
|
-
this._elementToggleStatus(target);
|
|
62
|
-
this._elementToggle(target);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
mouseEnter() {
|
|
68
|
-
if (this.hasMouseEnterValue) {
|
|
69
|
-
switch (this.mouseEnterValue) {
|
|
70
|
-
case "on":
|
|
71
|
-
this.on();
|
|
72
|
-
break;
|
|
73
|
-
case "off":
|
|
74
|
-
this.off();
|
|
75
|
-
break;
|
|
76
|
-
case "toggle":
|
|
77
|
-
this.toggle();
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return {};
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
mouseLeave() {
|
|
85
|
-
if (this.hasMouseLeaveValue) {
|
|
86
|
-
switch (this.mouseLeaveValue) {
|
|
87
|
-
case "on":
|
|
88
|
-
this.on();
|
|
89
|
-
break;
|
|
90
|
-
case "off":
|
|
91
|
-
this.off();
|
|
92
|
-
break;
|
|
93
|
-
case "toggle":
|
|
94
|
-
this.toggle();
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return {};
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
on(event?: Event) {
|
|
102
|
-
this.toggleTargets.forEach((target) => {
|
|
103
|
-
this._elementToggleStatus(target);
|
|
104
|
-
this._elementOn(target);
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
off(event?: Event) {
|
|
109
|
-
this.toggleTargets.forEach((target) => {
|
|
110
|
-
this._elementToggleStatus(target);
|
|
111
|
-
this._elementOff(target);
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
toggle(event?: Event) {
|
|
116
|
-
this.toggleTargets.forEach((target) => {
|
|
117
|
-
this._elementToggleStatus(target);
|
|
118
|
-
this._elementToggle(target);
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
private _elementWasToggled(el: HTMLElement): boolean {
|
|
123
|
-
return el.dataset.toggled == "true";
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
private _elementToggleStatus(el: HTMLElement) {
|
|
127
|
-
if (this._elementWasToggled(el)) {
|
|
128
|
-
delete el.dataset.toggled;
|
|
129
|
-
} else {
|
|
130
|
-
el.dataset.toggled = "true";
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
private _elementToggle(el: HTMLElement) {
|
|
135
|
-
let classes = this.classValue.split(" ");
|
|
136
|
-
classes.forEach((klass) => el.classList.toggle(klass));
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
private _elementOn(el: HTMLElement) {
|
|
140
|
-
let classes = this.classValue.split(" ");
|
|
141
|
-
classes.forEach((klass) => el.classList.toggle(klass, true));
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
private _elementOff(el: HTMLElement) {
|
|
145
|
-
let classes = this.classValue.split(" ");
|
|
146
|
-
classes.forEach((klass) => el.classList.toggle(klass, false));
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import {BaseController} from "../utilities/base_controller";
|
|
2
|
-
import {isHTMLAnchorElement} from "../utilities/elements";
|
|
3
|
-
import {isTurboFrame} from "../utilities/turbo";
|
|
4
|
-
|
|
5
|
-
export class TurboFrameRCController extends BaseController {
|
|
6
|
-
|
|
7
|
-
static values = {
|
|
8
|
-
frameId: String,
|
|
9
|
-
src: String,
|
|
10
|
-
loadingMessage: String,
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
declare readonly frameIdValue: string;
|
|
14
|
-
declare readonly srcValue: string;
|
|
15
|
-
declare readonly hasSrcValue: boolean;
|
|
16
|
-
declare readonly loadingMessageValue: string;
|
|
17
|
-
declare readonly hasLoadingMessageValue: boolean;
|
|
18
|
-
|
|
19
|
-
toggle(event?: Event) {
|
|
20
|
-
event?.preventDefault();
|
|
21
|
-
let frame = this._getFrame();
|
|
22
|
-
let frameSrc = frame.src;
|
|
23
|
-
if (frameSrc == null || frameSrc !== this._getSrc()) {
|
|
24
|
-
this._setSrc();
|
|
25
|
-
} else {
|
|
26
|
-
this._clear();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
setSrc(event?: Event) {
|
|
31
|
-
event?.preventDefault();
|
|
32
|
-
this._setSrc();
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
clear(event?: Event) {
|
|
36
|
-
event?.preventDefault();
|
|
37
|
-
this._clear();
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
private _setSrc() {
|
|
41
|
-
let frame = this._getFrame();
|
|
42
|
-
if (this.hasLoadingMessageValue) {
|
|
43
|
-
frame.innerHTML = this.loadingMessageValue;
|
|
44
|
-
}
|
|
45
|
-
frame.src = this._getSrc();
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
private _clear() {
|
|
49
|
-
let frame = this._getFrame();
|
|
50
|
-
frame.src = "";
|
|
51
|
-
frame.innerHTML = "";
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
private _getFrame(): TurboFrame {
|
|
55
|
-
let frame = document.getElementById(`${this.frameIdValue}`);
|
|
56
|
-
if (frame == null) {
|
|
57
|
-
throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);
|
|
58
|
-
}
|
|
59
|
-
if (!isTurboFrame(frame)) {
|
|
60
|
-
throw new Error(`Element targeted by ID '${this.frameIdValue}'`);
|
|
61
|
-
} else {
|
|
62
|
-
return frame;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
private _getSrc(): string {
|
|
67
|
-
let element = this.el;
|
|
68
|
-
if (this.hasSrcValue) {
|
|
69
|
-
return this.srcValue;
|
|
70
|
-
} else if (isHTMLAnchorElement(element)) {
|
|
71
|
-
return element.href;
|
|
72
|
-
} else {
|
|
73
|
-
throw new Error("No link given to drive frame to");
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import {BaseController} from "../utilities/base_controller";
|
|
2
|
-
import {isTurboFrame} from "../utilities/turbo";
|
|
3
|
-
|
|
4
|
-
// noinspection SillyAssignmentJS
|
|
5
|
-
export class TurboFrameRefreshController extends BaseController {
|
|
6
|
-
|
|
7
|
-
static values = {
|
|
8
|
-
interval: Number,
|
|
9
|
-
poll: Boolean,
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
declare readonly intervalValue: number;
|
|
13
|
-
declare readonly pollValue: boolean;
|
|
14
|
-
declare readonly hasPollValue: boolean;
|
|
15
|
-
_timeoutHandle: null | ReturnType<typeof window.setTimeout> = null;
|
|
16
|
-
|
|
17
|
-
get _poll(): boolean {
|
|
18
|
-
return this.hasPollValue ? this.pollValue : false;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
initialize() {
|
|
22
|
-
this.refresh = this.refresh.bind(this);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
connect() {
|
|
26
|
-
let element = this.el;
|
|
27
|
-
if (isTurboFrame(element)) {
|
|
28
|
-
if (!!element.src) {
|
|
29
|
-
throw new Error('The provided <turbo-frame> element has no `src` attribute.');
|
|
30
|
-
}
|
|
31
|
-
} else {
|
|
32
|
-
throw new Error('Expected controller to be mounted on a <turbo-frame> element.');
|
|
33
|
-
}
|
|
34
|
-
if (this._poll) {
|
|
35
|
-
requestAnimationFrame(() => this._timeoutHandle = setTimeout(() => this.refresh(), this.intervalValue));
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
disconnect() {
|
|
40
|
-
if (this._timeoutHandle) {
|
|
41
|
-
clearTimeout(this._timeoutHandle);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
refresh(event?: Event) {
|
|
46
|
-
event?.preventDefault();
|
|
47
|
-
let element = this.el as TurboFrame;
|
|
48
|
-
element.src = element.src;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import {useIntersection} from "stimulus-use";
|
|
2
|
-
import {BaseController} from "../../utilities/base_controller";
|
|
3
|
-
|
|
4
|
-
export class IntersectionController extends BaseController {
|
|
5
|
-
|
|
6
|
-
static values = {threshold: String};
|
|
7
|
-
|
|
8
|
-
declare readonly isVisible: boolean;
|
|
9
|
-
declare readonly thresholdValue: string;
|
|
10
|
-
declare readonly hasThresholdValue: boolean;
|
|
11
|
-
|
|
12
|
-
get _threshold(): number[] {
|
|
13
|
-
if (this.hasThresholdValue) {
|
|
14
|
-
return this.thresholdValue.split(',').map(val => Number.parseFloat(val.trim())).filter(val => val >= 0 && val <= 1);
|
|
15
|
-
} else {
|
|
16
|
-
return [0, 1];
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
connect() {
|
|
21
|
-
useIntersection(this, {
|
|
22
|
-
threshold: this._threshold,
|
|
23
|
-
element: this.el,
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
appear(entry: IntersectionObserverEntry) {
|
|
28
|
-
this.dispatch(
|
|
29
|
-
this.el,
|
|
30
|
-
"intersection:appear",
|
|
31
|
-
{
|
|
32
|
-
detail: {
|
|
33
|
-
element: this.el,
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
);
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
disappear(entry: IntersectionObserverEntry) {
|
|
40
|
-
this.dispatch(
|
|
41
|
-
this.el,
|
|
42
|
-
"intersection:disappear",
|
|
43
|
-
{
|
|
44
|
-
detail: {
|
|
45
|
-
element: this.el,
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
);
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import {BaseController} from "../../utilities/base_controller";
|
|
2
|
-
|
|
3
|
-
export class IntervalController extends BaseController {
|
|
4
|
-
|
|
5
|
-
static values = {seconds: Number};
|
|
6
|
-
|
|
7
|
-
declare readonly secondsValue: number;
|
|
8
|
-
declare readonly hasSecondsValue: boolean;
|
|
9
|
-
_intervalHandle: null | number = null;
|
|
10
|
-
|
|
11
|
-
initialize() {
|
|
12
|
-
this._interval = this._interval.bind(this);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
connect() {
|
|
16
|
-
if (!this.hasSecondsValue) {
|
|
17
|
-
throw new Error('Expected `secondsValue` to be present');
|
|
18
|
-
}
|
|
19
|
-
requestAnimationFrame(() => {
|
|
20
|
-
this._intervalHandle = window.setInterval(this._interval, this.secondsValue * 1000);
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
disconnect() {
|
|
25
|
-
if (this._intervalHandle) {
|
|
26
|
-
window.clearInterval(this._intervalHandle);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
_interval() {
|
|
31
|
-
this.dispatch(this.el, "interval:action");
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import {BaseController} from "../../utilities/base_controller";
|
|
2
|
-
|
|
3
|
-
export class PresenceController extends BaseController {
|
|
4
|
-
|
|
5
|
-
connect() {
|
|
6
|
-
this.dispatch(this.el, "presence:added");
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
disconnect() {
|
|
10
|
-
this.dispatch(this.el, "presence:removed");
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import {BaseController} from "../../utilities/base_controller";
|
|
2
|
-
|
|
3
|
-
export class TimeoutController extends BaseController {
|
|
4
|
-
|
|
5
|
-
static values = {seconds: Number};
|
|
6
|
-
|
|
7
|
-
declare readonly secondsValue: number;
|
|
8
|
-
_timeoutHandle: null | number = null;
|
|
9
|
-
|
|
10
|
-
initialize() {
|
|
11
|
-
this._timeout = this._timeout.bind(this);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
connect() {
|
|
15
|
-
requestAnimationFrame(() => {
|
|
16
|
-
this._timeoutHandle = window.setTimeout(this._timeout, this.secondsValue * 1000);
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
disconnect() {
|
|
21
|
-
if (this._timeoutHandle) {
|
|
22
|
-
window.clearTimeout(this._timeoutHandle);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
_timeout() {
|
|
27
|
-
this.dispatch(this.el, "timeout");
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import {BaseController} from "../../utilities/base_controller";
|
|
2
|
-
|
|
3
|
-
export class UserFocusController extends BaseController {
|
|
4
|
-
|
|
5
|
-
initialize() {
|
|
6
|
-
this._handleVisibility = this._handleVisibility.bind(this);
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
connect() {
|
|
10
|
-
window.addEventListener("focus", this._handleVisibility);
|
|
11
|
-
window.addEventListener("blur", this._handleVisibility);
|
|
12
|
-
document.addEventListener("visibilitychange", this._handleVisibility);
|
|
13
|
-
requestAnimationFrame(() => {
|
|
14
|
-
this._handleVisibility();
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
disconnect() {
|
|
19
|
-
window.removeEventListener("focus", this._handleVisibility);
|
|
20
|
-
window.removeEventListener("blur", this._handleVisibility);
|
|
21
|
-
document.removeEventListener("visibilitychange", this._handleVisibility);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
appear() {
|
|
25
|
-
this.dispatch(this.el, "user-focus:active");
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
away() {
|
|
29
|
-
this.dispatch(this.el, "user-focus:away");
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
private _handleVisibility() {
|
|
33
|
-
this._documentIsActive() ? this.appear() : this.away();
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
private _documentIsActive() {
|
|
37
|
-
return document.visibilityState == "visible" && document.hasFocus();
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import {BaseController} from "../../utilities/base_controller";
|
|
2
|
-
|
|
3
|
-
export class ClockController extends BaseController {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
static targets = ["hours", "minutes", "seconds", "milliseconds"];
|
|
7
|
-
|
|
8
|
-
declare readonly hasHoursTarget: boolean;
|
|
9
|
-
declare readonly hoursTarget: HTMLElement;
|
|
10
|
-
declare readonly hasMinutesTarget: boolean;
|
|
11
|
-
declare readonly minutesTarget: HTMLElement;
|
|
12
|
-
declare readonly hasSecondsTarget: boolean;
|
|
13
|
-
declare readonly secondsTarget: HTMLElement;
|
|
14
|
-
declare readonly hasMillisecondsTarget: boolean;
|
|
15
|
-
declare readonly millisecondsTarget: HTMLElement;
|
|
16
|
-
|
|
17
|
-
_intervalHandle: null | number = null;
|
|
18
|
-
|
|
19
|
-
get _tickInterval() {
|
|
20
|
-
if (this.hasMillisecondsTarget) {
|
|
21
|
-
return 1; // 1 ms
|
|
22
|
-
} else if (this.hasSecondsTarget) {
|
|
23
|
-
return 1000; // 1 seconds
|
|
24
|
-
} else if (this.hasMinutesTarget) {
|
|
25
|
-
return 15000; // 15 seconds
|
|
26
|
-
} else {
|
|
27
|
-
return 300000; // Every 5 minutes
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
initialize() {
|
|
32
|
-
this._tick = this._tick.bind(this);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
connect() {
|
|
36
|
-
requestAnimationFrame(() => {
|
|
37
|
-
this._intervalHandle = window.setInterval(this._tick, this._tickInterval);
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
disconnect() {
|
|
42
|
-
if (this._intervalHandle) {
|
|
43
|
-
window.clearInterval(this._intervalHandle);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
_tick() {
|
|
48
|
-
let current = new Date();
|
|
49
|
-
|
|
50
|
-
if (this.hasHoursTarget) {
|
|
51
|
-
this.hoursTarget.innerHTML = current
|
|
52
|
-
.getHours()
|
|
53
|
-
.toString()
|
|
54
|
-
.padStart(2, "0");
|
|
55
|
-
}
|
|
56
|
-
if (this.hasMinutesTarget) {
|
|
57
|
-
this.minutesTarget.innerHTML = current
|
|
58
|
-
.getMinutes()
|
|
59
|
-
.toString()
|
|
60
|
-
.padStart(2, "0");
|
|
61
|
-
}
|
|
62
|
-
if (this.hasSecondsTarget) {
|
|
63
|
-
this.secondsTarget.innerHTML = current
|
|
64
|
-
.getSeconds()
|
|
65
|
-
.toString()
|
|
66
|
-
.padStart(2, "0");
|
|
67
|
-
}
|
|
68
|
-
if (this.hasMillisecondsTarget) {
|
|
69
|
-
this.millisecondsTarget.innerHTML = current
|
|
70
|
-
.getMilliseconds()
|
|
71
|
-
.toString()
|
|
72
|
-
.padStart(3, "0");
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|