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,107 +0,0 @@
1
- import {BaseController} from "../../utilities/base_controller";
2
-
3
- export class ValueWarnController extends BaseController {
4
- static classes = ["inputWarning", "warningHide"];
5
- static targets = ["input", "warning"];
6
- static values = {max: Number, min: Number, minMessage: String, maxMessage: String};/* Classes*/
7
- declare readonly inputWarningClass: string;
8
- declare readonly hasInputWarningClass: boolean;
9
- declare readonly warningHideClass: string;
10
- declare readonly hasWarningHideClass: boolean;/* Targets*/
11
- declare readonly inputTarget: HTMLInputElement;
12
- declare readonly warningTarget: HTMLElement;/* Values*/
13
- declare readonly maxValue: number;
14
- declare readonly hasMaxValue: boolean;
15
- declare readonly minValue: number;
16
- declare readonly hasMinValue: boolean;
17
- declare readonly minMessageValue: string;
18
- declare readonly hasMinMessageValue: boolean;
19
- declare readonly maxMessageValue: string;
20
- declare readonly hasMaxMessageValue: boolean;
21
-
22
- get _maxMessage(): string {
23
- return this.hasMaxMessageValue ? this.maxMessageValue : `Value must be less than ${this.maxValue}`;
24
- }
25
-
26
- get _minMessage(): string {
27
- return this.hasMinMessageValue ? this.minMessageValue : `Value must be greater than ${this.minValue}`;
28
- }
29
-
30
- get _warningHideClasses(): string[] {
31
- return this.warningHideClass.split(" ");
32
- }
33
-
34
- get _defaultWarningHideClasses(): string[] {
35
- return ["hide"];
36
- }
37
-
38
- get _inputWarningClasses(): string[] {
39
- return this.inputWarningClass.split(" ");
40
- }
41
-
42
- get _defaultInputWarningClasses(): string[] {
43
- return [""];
44
- }
45
-
46
- initialize() {
47
- this._check = this._check.bind(this);
48
- }
49
-
50
- connect() {
51
- this._addWarningHideClasses(this.warningTarget);
52
- this.inputTarget.addEventListener("input", this._check);
53
- this._check();
54
- }
55
-
56
- disconnect() {
57
- this.inputTarget.removeEventListener("input", this._check);
58
- }
59
-
60
- private _check() {
61
- if (this.hasMinValue && Number.parseFloat(this.inputTarget.value) < this.minValue) {
62
- this._removeWarningHideClasses(this.warningTarget);
63
- this._addInputWarningClasses(this.inputTarget);
64
- this.warningTarget.innerText = this._minMessage;
65
- } else if (this.hasMaxValue && Number.parseFloat(this.inputTarget.value) > this.maxValue) {
66
- this._removeWarningHideClasses(this.warningTarget);
67
- this._addInputWarningClasses(this.inputTarget);
68
- this.warningTarget.innerText = this._maxMessage;
69
- } else {
70
- this._addWarningHideClasses(this.warningTarget);
71
- this._removeInputWarningClasses(this.inputTarget);
72
- this.warningTarget.innerText = "";
73
- }
74
- }
75
-
76
- private _addWarningHideClasses(el: HTMLElement = this.el) {
77
- if (this.hasWarningHideClass) {
78
- el.classList.add(...this._warningHideClasses);
79
- } else {
80
- el.classList.add(...this._defaultWarningHideClasses);
81
- }
82
- }
83
-
84
- private _removeWarningHideClasses(el: HTMLElement = this.el) {
85
- if (this.hasWarningHideClass) {
86
- el.classList.remove(...this._warningHideClasses);
87
- } else {
88
- el.classList.remove(...this._defaultWarningHideClasses);
89
- }
90
- }
91
-
92
- private _addInputWarningClasses(el: HTMLElement = this.el) {
93
- if (this.hasInputWarningClass) {
94
- el.classList.add(...this._inputWarningClasses);
95
- } else {
96
- el.classList.add(...this._defaultInputWarningClasses);
97
- }
98
- }
99
-
100
- private _removeInputWarningClasses(el: HTMLElement = this.el) {
101
- if (this.hasInputWarningClass) {
102
- el.classList.remove(...this._inputWarningClasses);
103
- } else {
104
- el.classList.remove(...this._defaultInputWarningClasses);
105
- }
106
- }
107
- }
@@ -1,86 +0,0 @@
1
- import {BaseController} from "../../utilities/base_controller";
2
-
3
- export class WordCountController extends BaseController {
4
-
5
- static targets = ["input", "output"];
6
- static values = {min: Number, max: Number};
7
- static classes = ["error"];
8
-
9
- declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;
10
- declare readonly outputTarget: HTMLElement;
11
- declare minValue: number;
12
- declare hasMinValue: boolean;
13
- declare maxValue: number;
14
- declare hasMaxValue: boolean;
15
-
16
- declare readonly errorClass: string;
17
- declare readonly hasErrorClass: boolean;
18
-
19
- get _errorClasses(): string[] {
20
- return this.errorClass.split(' ');
21
- }
22
-
23
- get _defaultErrorClasses(): string[] {
24
- return [];
25
- }
26
-
27
- initialize() {
28
- this._updateWordCount = this._updateWordCount.bind(this);
29
- }
30
-
31
- connect() {
32
- this._updateWordCount();
33
- this.inputTarget.addEventListener("input", this._updateWordCount);
34
- }
35
-
36
- disconnect() {
37
- this.inputTarget.removeEventListener("input", this._updateWordCount);
38
- }
39
-
40
- _updateWordCount() {
41
- let wordCount = 0;
42
- let textAreaValue = this.inputTarget.value;
43
- let matches = textAreaValue.match(/\S+/g);
44
- wordCount = (matches && matches.length) || 0;
45
- this.outputTarget.innerText = wordCount.toString();
46
- if (this.hasErrorClass) {
47
- if (this._isValidCount(wordCount)) {
48
- this._removeErrorClasses(this.outputTarget);
49
- } else {
50
- this._addErrorClasses(this.outputTarget);
51
- }
52
- }
53
- }
54
-
55
- private _addErrorClasses(el: HTMLElement = this.el) {
56
- if (this.hasErrorClass) {
57
- el.classList.add(...this._errorClasses);
58
- } else {
59
- el.classList.add(...this._defaultErrorClasses);
60
- }
61
- }
62
-
63
- private _removeErrorClasses(el: HTMLElement = this.el) {
64
- if (this.hasErrorClass) {
65
- el.classList.remove(...this._errorClasses);
66
- } else {
67
- el.classList.remove(...this._defaultErrorClasses);
68
- }
69
- }
70
-
71
- private _isValidCount(count: number) {
72
- let min = 0;
73
- let max = 99999;
74
-
75
- if (this.hasMinValue) {
76
- min = this.minValue;
77
- }
78
-
79
- if (this.hasMaxValue) {
80
- max = this.maxValue;
81
- }
82
-
83
- return count >= min && count <= max;
84
- }
85
-
86
- }
@@ -1,108 +0,0 @@
1
- import {BaseController} from "../../utilities/base_controller";
2
-
3
- export class FallbackImageController extends BaseController {
4
-
5
- static values = {placeholder: String};
6
- static classes = ["success", "fail"];
7
-
8
- declare readonly placeholderValue: string;
9
- declare readonly hasPlaceholderValue: boolean;
10
- declare readonly successClass: string;
11
- declare readonly hasSuccessClass: boolean;
12
- declare readonly failClass: string;
13
- declare readonly hasFailClass: boolean;
14
-
15
- get _successClasses(): string[] {
16
- return this.successClass.split(' ');
17
- }
18
-
19
- get _defaultSuccessClasses(): string[] {
20
- return [];
21
- }
22
-
23
- get _failClasses(): string[] {
24
- return this.failClass.split(' ');
25
- }
26
-
27
- get _defaultFailClasses(): string[] {
28
- return [];
29
- }
30
-
31
- initialize() {
32
- this._hasLoadedSuccessfully = this._hasLoadedSuccessfully.bind(this);
33
- this._success = this._success.bind(this);
34
- this._fail = this._fail.bind(this);
35
- }
36
-
37
- connect() {
38
- let element = this.el as HTMLImageElement;
39
-
40
- element.onerror = this._fail;
41
- if (element.complete && !this._hasLoadedSuccessfully()) {
42
- this._fail();
43
- } else {
44
- this._success();
45
- }
46
- }
47
-
48
- disconnect() {
49
- this._removeSuccessClasses();
50
- this._removeFailClasses();
51
- }
52
-
53
- private _success() {
54
- this._addSuccessClasses();
55
- }
56
-
57
- private _fail() {
58
- let element = this.el as HTMLImageElement;
59
- this._addFailClasses();
60
-
61
- if (this.hasPlaceholderValue && element.src !== this.placeholderValue) {
62
- this.dispatch(element, "fallback-image:placeholder");
63
- element.src = this.placeholderValue;
64
- element.onerror = this._fail;
65
- } else {
66
- this.dispatch(element, "fallback-image:fail");
67
- element.style.display = "none";
68
- }
69
- }
70
-
71
- private _hasLoadedSuccessfully(): boolean {
72
- let element = this.el as HTMLImageElement;
73
- return element.naturalHeight > 0 && element.naturalWidth > 0;
74
- }
75
-
76
- private _addFailClasses(el: HTMLElement = this.el) {
77
- if (this.hasFailClass) {
78
- el.classList.add(...this._failClasses);
79
- } else {
80
- el.classList.add(...this._defaultFailClasses);
81
- }
82
- }
83
-
84
- private _removeFailClasses(el: HTMLElement = this.el) {
85
- if (this.hasFailClass) {
86
- el.classList.remove(...this._failClasses);
87
- } else {
88
- el.classList.remove(...this._defaultFailClasses);
89
- }
90
- }
91
-
92
- private _addSuccessClasses(el: HTMLElement = this.el) {
93
- if (this.hasSuccessClass) {
94
- el.classList.add(...this._successClasses);
95
- } else {
96
- el.classList.add(...this._defaultSuccessClasses);
97
- }
98
- }
99
-
100
- private _removeSuccessClasses(el: HTMLElement = this.el) {
101
- if (this.hasSuccessClass) {
102
- el.classList.remove(...this._successClasses);
103
- } else {
104
- el.classList.remove(...this._defaultSuccessClasses);
105
- }
106
- }
107
-
108
- }
@@ -1,89 +0,0 @@
1
- import dialogPolyfill from "dialog-polyfill";
2
- import {BaseController} from "../../utilities/base_controller";
3
- import {scrollToElement} from "../../utilities/scroll";
4
-
5
- export class LightboxImageController extends BaseController {
6
-
7
- static values = {
8
- src: String,
9
- srcSet: String,
10
- sizes: String,
11
- };
12
- static classes = ["modal", "image"];
13
-
14
- declare readonly hasModalClass: boolean;
15
- declare readonly modalClass: string;
16
- declare readonly hasImageClass: boolean;
17
- declare readonly imageClass: string;
18
- declare readonly hasSrcValue: boolean;
19
- declare readonly srcValue: string;
20
- declare readonly hasSrcSetValue: boolean;
21
- declare readonly srcSetValue: string;
22
- declare readonly hasSizesValue: boolean;
23
- declare readonly sizesValue: string;
24
- _dialog: HTMLDialogElement | null = null;
25
-
26
- get _src(): string {
27
- return this.hasSrcValue ? this.srcValue : (this.el as HTMLImageElement).src;
28
- }
29
-
30
- get _srcSet(): string {
31
- return this.hasSrcSetValue ? this.srcSetValue : (this.el as HTMLImageElement).srcset;
32
- }
33
-
34
- get _sizes(): string {
35
- return this.hasSizesValue ? this.sizesValue : (this.el as HTMLImageElement).sizes;
36
- }
37
-
38
- get _modalClassName() {
39
- return this.hasModalClass ? this.modalClass : "image-lightbox-dialog";
40
- }
41
-
42
- get _imageClassName() {
43
- return this.hasImageClass ? this.imageClass : "image-lightbox-image";
44
- }
45
-
46
- initialize() {
47
- this.open = this.open.bind(this);
48
- this.close = this.close.bind(this);
49
- }
50
-
51
- connect() {
52
- }
53
-
54
- open() {
55
- let element = this.el as HTMLImageElement;
56
- if (this._dialog) {
57
- return;
58
- }
59
- this._dialog = document.createElement("dialog");
60
-
61
- let image = document.createElement("img") as HTMLImageElement;
62
- image.className = this._imageClassName;
63
- image.src = this._src;
64
- image.srcset = this._srcSet;
65
- image.sizes = this._sizes;
66
- this._dialog.appendChild(image);
67
-
68
- element.insertAdjacentElement("afterend", this._dialog);
69
- dialogPolyfill.registerDialog(this._dialog);
70
- this._dialog.className = this._modalClassName;
71
- // @ts-ignore Experimental API
72
- this._dialog.showModal();
73
- scrollToElement(this._dialog, {behavior: "smooth", block: "end"}).catch(() => this._dialog!.scrollIntoView(false));
74
- this._dialog.addEventListener("click", this.close);
75
- this._dialog.addEventListener("cancel", this.close);
76
- this._dialog.addEventListener("close", this.close);
77
- }
78
-
79
- close() {
80
- if (this._dialog) {
81
- // @ts-ignore Experimental API
82
- this._dialog.close();
83
- this._dialog.remove();
84
- this._dialog = null;
85
- scrollToElement(this.el, {behavior: "smooth", block: "end"}).catch(() => this.el.scrollIntoView(false));
86
- }
87
- }
88
-
89
- }
@@ -1,37 +0,0 @@
1
- import {BaseController} from "../../utilities/base_controller";
2
-
3
- export class MediaPlayerController extends BaseController {
4
-
5
- static targets = ["media"];
6
-
7
- declare readonly mediaTarget: HTMLMediaElement;
8
-
9
- initialize() {
10
- }
11
-
12
- connect() {
13
- }
14
-
15
- disconnect() {
16
- }
17
-
18
- async play(event?: Event) {
19
- event?.preventDefault();
20
- await this.mediaTarget.play();
21
- }
22
-
23
- pause(event?: Event) {
24
- event?.preventDefault();
25
- this.mediaTarget.pause();
26
- }
27
-
28
- restart(event?: Event) {
29
- event?.preventDefault();
30
- this.mediaTarget.currentTime = 0;
31
- }
32
-
33
- seek(event?: Event) {
34
- event?.preventDefault();
35
- this.mediaTarget.currentTime += 5;
36
- }
37
- }
@@ -1,99 +0,0 @@
1
- import {BaseController} from "../utilities/base_controller";
2
-
3
- export class PrefetchController extends BaseController {
4
-
5
- static values = {mode: String};
6
-
7
- declare readonly modeValue: "intersect" | "mouseover";
8
- declare readonly hasModeValue: boolean;
9
-
10
- get _mode(): string {
11
- return this.hasModeValue ? this.modeValue : "mouseover";
12
- }
13
-
14
- get _supportsPrefetch(): boolean {
15
- const link: HTMLLinkElement = document.createElement('link');
16
- return link.relList?.supports && link.relList?.supports('prefetch');
17
- }
18
-
19
- get _href(): string {
20
- return (this.el as HTMLAnchorElement).href;
21
- }
22
-
23
- get _existingPrefetch(): boolean {
24
- return (document.head.querySelectorAll(`link[rel="prefetch"][href="${this._href}"]`) || []).length > 0;
25
- }
26
-
27
- get _connectionSuitable(): boolean {
28
- // @ts-ignore
29
- const connection = navigator.connection;
30
-
31
- // no way to know what network state is. Allow prefetching
32
- if (!connection) {
33
- return true;
34
- }
35
-
36
- // Don't prefetch if network conditions are poor or user has enabled data-saving mode
37
- if (connection) {
38
- // @ts-ignore Experimental API
39
- if (connection.saveData) {
40
- this.warn('Data Saving is enabled');
41
- return false;
42
- }
43
-
44
- // @ts-ignore Experimental API
45
- if (/2g/.test(connection.effectiveType)) {
46
- this.warn("Network is too slow");
47
- return false;
48
- }
49
- }
50
- return true;
51
- }
52
-
53
- initialize(): void {
54
- this.prefetch = this.prefetch.bind(this);
55
- }
56
-
57
- connect(): void {
58
- if (!this._supportsPrefetch) {
59
- return;
60
- }
61
-
62
- switch (this._mode) {
63
- case "intersect":
64
- this._setupObserver();
65
- break;
66
- case "mouseover":
67
- this.el.addEventListener("mouseover", this.prefetch, {once: true});
68
- break;
69
- default:
70
- throw new Error(`'${this._mode}' is not a supported prefetch mode`);
71
- }
72
- }
73
-
74
- disconnect() {
75
- this.el.removeEventListener("mouseover", this.prefetch);
76
- }
77
-
78
- _setupObserver(): void {
79
- const observer: IntersectionObserver = new IntersectionObserver(
80
- ([entry]: IntersectionObserverEntry[], observer: IntersectionObserver) => {
81
- if (entry.isIntersecting) {
82
- this.prefetch();
83
- observer.unobserve(entry.target);
84
- }
85
- },
86
- );
87
- observer.observe(this.element);
88
- }
89
-
90
- prefetch() {
91
- if (this._existingPrefetch || !this._connectionSuitable) {
92
- return;
93
- }
94
- const link: HTMLLinkElement = document.createElement('link');
95
- Object.assign(link, {rel: 'prefetch', href: this._href, as: 'document'});
96
- document.head.appendChild(link);
97
- }
98
-
99
- }
@@ -1,75 +0,0 @@
1
- import {useDebounce, useWindowResize} from "stimulus-use";
2
- import {WindowResizePayload} from "stimulus-use/dist/use-window-resize/use-window-resize";
3
- import {BaseController} from "../utilities/base_controller";
4
-
5
- interface ResponsiveIframeMessage {
6
- name: string,
7
- height: number,
8
- }
9
-
10
- export class ResponsiveIframeWrapperController extends BaseController {
11
-
12
- initialize() {
13
- this.messageReceived = this.messageReceived.bind(this);
14
- }
15
-
16
- connect() {
17
- window.addEventListener("message", this.messageReceived);
18
- }
19
-
20
- disconnect() {
21
- window.removeEventListener("message", this.messageReceived);
22
- }
23
-
24
- messageReceived(message: MessageEvent<ResponsiveIframeMessage>) {
25
- let data = message.data;
26
- if (data.hasOwnProperty("name") && data.name === "iframe-body" && data.hasOwnProperty("height")) {
27
- this.resize(data.height);
28
- }
29
- }
30
-
31
- resize(height: number) {
32
- (this.el as HTMLIFrameElement).style.height = `${height}px`;
33
- }
34
-
35
- }
36
-
37
- export class ResponsiveIframeBodyController extends BaseController {
38
-
39
- static debounces = ["postUpdate"];
40
-
41
- declare observe: () => void;
42
- declare unobserve: () => void;
43
-
44
- connect() {
45
- // If this Window is inside a frame
46
- if (window.self !== window.top) {
47
- useWindowResize(this);
48
- useDebounce(this, {});
49
- this.postUpdate();
50
- } else {
51
- // Not an iframe
52
- }
53
- }
54
-
55
- windowResize(payload: WindowResizePayload) {
56
- this.postUpdate();
57
- };
58
-
59
- postUpdate() {
60
- let payload: ResponsiveIframeMessage = {name: "iframe-body", height: this.getHeight()};
61
- window.parent.postMessage(
62
- payload,
63
- "*",
64
- );
65
- }
66
-
67
- getHeight(): number {
68
- const body = document.body;
69
- const html = document.documentElement;
70
-
71
- // Get the largest height out of body and html's various height measurements
72
- return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);
73
- }
74
-
75
- }
@@ -1,73 +0,0 @@
1
- import {BaseController} from "../../utilities/base_controller";
2
- import {scrollAbsoluteBottom, scrollAbsoluteLeft, scrollAbsoluteTop, scrollDown, scrollLeft, scrollRight, scrollUp} from "../../utilities/scroll";
3
-
4
- export class ScrollContainerController extends BaseController {
5
-
6
- static values = {
7
- behaviour: String,
8
- increment: Number,
9
- };
10
-
11
- declare readonly behaviourValue: ScrollBehavior;
12
- declare readonly hasBehaviourValue: boolean;
13
-
14
- declare readonly incrementValue: number;
15
- declare readonly hasIncrementValue: boolean;
16
-
17
- get _increment(): number {
18
- return this.hasIncrementValue ? this.incrementValue : 50;
19
- }
20
-
21
- get _behaviour(): ScrollBehavior {
22
- if (this.hasBehaviourValue) {
23
- if (["auto", "smooth"].includes(this.behaviourValue)) {
24
- return this.behaviourValue;
25
- } else {
26
- throw new Error(`'${this.behaviourValue}' is not a recognised scroll behaviour`);
27
- }
28
- } else {
29
- return "auto";
30
- }
31
- }
32
-
33
- async scrollTop(event?: Event) {
34
- event?.preventDefault();
35
- await scrollAbsoluteTop(this.el, {behavior: this._behaviour});
36
- }
37
-
38
- async scrollBottom(event?: Event) {
39
- event?.preventDefault();
40
- await scrollAbsoluteBottom(this.el, {behavior: this._behaviour});
41
- }
42
-
43
- async scrollLeft(event?: Event) {
44
- event?.preventDefault();
45
- await scrollAbsoluteLeft(this.el, {behavior: this._behaviour});
46
- }
47
-
48
- async scrollRight(event?: Event) {
49
- event?.preventDefault();
50
- await scrollAbsoluteLeft(this.el, {behavior: this._behaviour});
51
- }
52
-
53
- async up(event?: Event) {
54
- event?.preventDefault();
55
- await scrollUp(this.el, this._increment, {behavior: this._behaviour});
56
- }
57
-
58
- async down(event?: Event) {
59
- event?.preventDefault();
60
- await scrollDown(this.el, this._increment, {behavior: this._behaviour});
61
- }
62
-
63
- async left(event?: Event) {
64
- event?.preventDefault();
65
- await scrollLeft(this.el, this._increment, {behavior: this._behaviour});
66
- }
67
-
68
- async right(event?: Event) {
69
- event?.preventDefault();
70
- await scrollRight(this.el, this._increment, {behavior: this._behaviour});
71
- }
72
- }
73
-