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.
Files changed (161) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/controllers/ajax/async_block_controller.d.ts +18 -18
  3. package/dist/controllers/ajax/lazy_block_controller.d.ts +9 -9
  4. package/dist/controllers/ajax/load_block_controller.d.ts +19 -19
  5. package/dist/controllers/ajax/poll_block_controller.d.ts +16 -16
  6. package/dist/controllers/anchor_spy_controller.d.ts +15 -15
  7. package/dist/controllers/back_link_controller.d.ts +19 -19
  8. package/dist/controllers/clipboard_controller.d.ts +18 -18
  9. package/dist/controllers/confirm_controller.d.ts +13 -13
  10. package/dist/controllers/confirm_navigation_controller.d.ts +15 -15
  11. package/dist/controllers/debug_controller.d.ts +6 -6
  12. package/dist/controllers/disable_with_controller.d.ts +25 -25
  13. package/dist/controllers/dismissable_controller.d.ts +6 -6
  14. package/dist/controllers/element_save_controller.d.ts +25 -25
  15. package/dist/controllers/empty_dom_controller.d.ts +29 -29
  16. package/dist/controllers/forms/auto_submit_form_controller.d.ts +15 -14
  17. package/dist/controllers/forms/auto_submit_form_controller.d.ts.map +1 -1
  18. package/dist/controllers/forms/autosize_controller.d.ts +9 -9
  19. package/dist/controllers/forms/char_count_controller.d.ts +26 -26
  20. package/dist/controllers/forms/checkbox_select_all_controller.d.ts +14 -14
  21. package/dist/controllers/forms/detect_dirty_controller.d.ts +16 -16
  22. package/dist/controllers/forms/detect_dirty_form_controller.d.ts +19 -19
  23. package/dist/controllers/forms/disable_inputs_controller.d.ts +16 -16
  24. package/dist/controllers/forms/enable_inputs_controller.d.ts +16 -16
  25. package/dist/controllers/forms/form_rc_controller.d.ts +13 -7
  26. package/dist/controllers/forms/form_rc_controller.d.ts.map +1 -1
  27. package/dist/controllers/forms/form_save_controller.d.ts +33 -33
  28. package/dist/controllers/forms/limited_selection_checkboxes_controller.d.ts +17 -17
  29. package/dist/controllers/forms/navigate_form_errors_controller.d.ts +34 -34
  30. package/dist/controllers/forms/nested_form_controller.d.ts +21 -21
  31. package/dist/controllers/forms/password_confirm_controller.d.ts +17 -17
  32. package/dist/controllers/forms/password_peek_controller.d.ts +8 -8
  33. package/dist/controllers/forms/remote_form_controller.d.ts +13 -13
  34. package/dist/controllers/forms/sync_inputs_controller.d.ts +21 -21
  35. package/dist/controllers/forms/value_warn_controller.d.ts +39 -39
  36. package/dist/controllers/forms/word_count_controller.d.ts +26 -26
  37. package/dist/controllers/media/fallback_image_controller.d.ts +27 -27
  38. package/dist/controllers/media/lightbox_image_controller.d.ts +29 -29
  39. package/dist/controllers/media/media_player_controller.d.ts +12 -12
  40. package/dist/controllers/prefetch_controller.d.ts +18 -18
  41. package/dist/controllers/responsive_iframe_controller.d.ts +23 -23
  42. package/dist/controllers/scroll/scroll_container_controller.d.ts +21 -21
  43. package/dist/controllers/scroll/scroll_into_focus_controller.d.ts +15 -15
  44. package/dist/controllers/scroll/scroll_to_bottom_controller.d.ts +11 -11
  45. package/dist/controllers/scroll/scroll_to_controller.d.ts +17 -17
  46. package/dist/controllers/scroll/scroll_to_top_controller.d.ts +11 -11
  47. package/dist/controllers/self_destruct_controller.d.ts +10 -10
  48. package/dist/controllers/sticky_controller.d.ts +19 -19
  49. package/dist/controllers/tables/table_sort_controller.d.ts +20 -20
  50. package/dist/controllers/tables/table_truncate_controller.d.ts +26 -26
  51. package/dist/controllers/teleport_controller.d.ts +15 -15
  52. package/dist/controllers/temporary_state_controller.d.ts +28 -28
  53. package/dist/controllers/toggle_class_controller.d.ts +35 -35
  54. package/dist/controllers/turbo_frame_rc_controller.d.ts +20 -20
  55. package/dist/controllers/turbo_frame_refresh_controller.d.ts +16 -16
  56. package/dist/controllers/utility/intersection_controller.d.ts +13 -13
  57. package/dist/controllers/utility/interval_controller.d.ts +13 -13
  58. package/dist/controllers/utility/presence_controller.d.ts +5 -5
  59. package/dist/controllers/utility/timeout_controller.d.ts +12 -12
  60. package/dist/controllers/utility/user_focus_controller.d.ts +10 -10
  61. package/dist/controllers/visual/clock_controller.d.ts +18 -18
  62. package/dist/controllers/visual/countdown_controller.d.ts +53 -53
  63. package/dist/controllers/visual/duration_controller.d.ts +27 -27
  64. package/dist/controllers/visual/tabs_controller.d.ts +37 -37
  65. package/dist/controllers/visual/time_distance_controller.d.ts +18 -18
  66. package/dist/controllers/visual/tree_view_controller.d.ts +29 -29
  67. package/dist/index.d.ts +66 -66
  68. package/dist/stimulus-library.cjs.js +2 -0
  69. package/dist/stimulus-library.cjs.js.map +1 -0
  70. package/dist/stimulus-library.es.js +2 -0
  71. package/dist/stimulus-library.es.js.map +1 -0
  72. package/dist/stimulus-library.umd.js +1 -1
  73. package/dist/stimulus-library.umd.js.map +1 -1
  74. package/dist/utilities/base_controller.d.ts +13 -13
  75. package/dist/utilities/base_controller.d.ts.map +1 -1
  76. package/dist/utilities/elements.d.ts +13 -13
  77. package/dist/utilities/ephemeral_controller.d.ts +5 -5
  78. package/dist/utilities/event_bus.d.ts +3 -3
  79. package/dist/utilities/requestSubmit.d.ts +2 -2
  80. package/dist/utilities/scroll.d.ts +10 -10
  81. package/dist/utilities/turbo.d.ts +1 -1
  82. package/package.json +16 -10
  83. package/dist/stimulus-library.js +0 -2
  84. package/dist/stimulus-library.js.map +0 -1
  85. package/dist/stimulus-library.modern.js +0 -2
  86. package/dist/stimulus-library.modern.js.map +0 -1
  87. package/dist/stimulus-library.module.js +0 -2
  88. package/dist/stimulus-library.module.js.map +0 -1
  89. package/src/controllers/ajax/async_block_controller.ts +0 -28
  90. package/src/controllers/ajax/lazy_block_controller.ts +0 -31
  91. package/src/controllers/ajax/load_block_controller.ts +0 -59
  92. package/src/controllers/ajax/poll_block_controller.ts +0 -32
  93. package/src/controllers/anchor_spy_controller.ts +0 -47
  94. package/src/controllers/back_link_controller.ts +0 -49
  95. package/src/controllers/clipboard_controller.ts +0 -47
  96. package/src/controllers/confirm_controller.ts +0 -50
  97. package/src/controllers/confirm_navigation_controller.ts +0 -51
  98. package/src/controllers/debug_controller.ts +0 -11
  99. package/src/controllers/disable_with_controller.ts +0 -116
  100. package/src/controllers/dismissable_controller.ts +0 -12
  101. package/src/controllers/element_save_controller.ts +0 -93
  102. package/src/controllers/empty_dom_controller.ts +0 -105
  103. package/src/controllers/forms/auto_submit_form_controller.ts +0 -59
  104. package/src/controllers/forms/autosize_controller.ts +0 -41
  105. package/src/controllers/forms/char_count_controller.ts +0 -91
  106. package/src/controllers/forms/checkbox_select_all_controller.ts +0 -57
  107. package/src/controllers/forms/detect_dirty_controller.ts +0 -116
  108. package/src/controllers/forms/detect_dirty_form_controller.ts +0 -127
  109. package/src/controllers/forms/disable_inputs_controller.ts +0 -44
  110. package/src/controllers/forms/enable_inputs_controller.ts +0 -44
  111. package/src/controllers/forms/form_rc_controller.ts +0 -20
  112. package/src/controllers/forms/form_save_controller.ts +0 -141
  113. package/src/controllers/forms/limited_selection_checkboxes_controller.ts +0 -44
  114. package/src/controllers/forms/navigate_form_errors_controller.ts +0 -144
  115. package/src/controllers/forms/nested_form_controller.ts +0 -68
  116. package/src/controllers/forms/password_confirm_controller.ts +0 -68
  117. package/src/controllers/forms/password_peek_controller.ts +0 -27
  118. package/src/controllers/forms/remote_form_controller.ts +0 -34
  119. package/src/controllers/forms/sync_inputs_controller.ts +0 -89
  120. package/src/controllers/forms/value_warn_controller.ts +0 -107
  121. package/src/controllers/forms/word_count_controller.ts +0 -86
  122. package/src/controllers/media/fallback_image_controller.ts +0 -108
  123. package/src/controllers/media/lightbox_image_controller.ts +0 -89
  124. package/src/controllers/media/media_player_controller.ts +0 -37
  125. package/src/controllers/prefetch_controller.ts +0 -99
  126. package/src/controllers/responsive_iframe_controller.ts +0 -75
  127. package/src/controllers/scroll/scroll_container_controller.ts +0 -73
  128. package/src/controllers/scroll/scroll_into_focus_controller.ts +0 -34
  129. package/src/controllers/scroll/scroll_to_bottom_controller.ts +0 -35
  130. package/src/controllers/scroll/scroll_to_controller.ts +0 -38
  131. package/src/controllers/scroll/scroll_to_top_controller.ts +0 -35
  132. package/src/controllers/self_destruct_controller.ts +0 -23
  133. package/src/controllers/sticky_controller.ts +0 -84
  134. package/src/controllers/tables/table_sort_controller.ts +0 -105
  135. package/src/controllers/tables/table_truncate_controller.ts +0 -106
  136. package/src/controllers/teleport_controller.ts +0 -64
  137. package/src/controllers/temporary_state_controller.ts +0 -82
  138. package/src/controllers/toggle_class_controller.ts +0 -149
  139. package/src/controllers/turbo_frame_rc_controller.ts +0 -77
  140. package/src/controllers/turbo_frame_refresh_controller.ts +0 -51
  141. package/src/controllers/utility/intersection_controller.ts +0 -51
  142. package/src/controllers/utility/interval_controller.ts +0 -34
  143. package/src/controllers/utility/presence_controller.ts +0 -13
  144. package/src/controllers/utility/timeout_controller.ts +0 -30
  145. package/src/controllers/utility/user_focus_controller.ts +0 -40
  146. package/src/controllers/visual/clock_controller.ts +0 -75
  147. package/src/controllers/visual/countdown_controller.ts +0 -198
  148. package/src/controllers/visual/duration_controller.ts +0 -106
  149. package/src/controllers/visual/tabs_controller.ts +0 -162
  150. package/src/controllers/visual/time_distance_controller.ts +0 -66
  151. package/src/controllers/visual/tree_view_controller.ts +0 -154
  152. package/src/index.ts +0 -71
  153. package/src/utilities/base_controller.ts +0 -143
  154. package/src/utilities/elements.ts +0 -47
  155. package/src/utilities/ephemeral_controller.ts +0 -45
  156. package/src/utilities/event_bus.ts +0 -3
  157. package/src/utilities/requestSubmit.ts +0 -23
  158. package/src/utilities/scroll.ts +0 -101
  159. package/src/utilities/turbo.ts +0 -3
  160. package/src/utilities/types.d.ts +0 -4
  161. 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
- }