@creative-web-solution/front-library 7.0.6 → 7.1.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/CHANGELOG.md +30 -0
- package/DOM/Class.ts +10 -12
- package/DOM/DocumentSize.ts +3 -1
- package/DOM/Filter.ts +0 -2
- package/DOM/Index.ts +1 -3
- package/DOM/Manipulation.ts +0 -3
- package/DOM/Matrix.ts +12 -12
- package/DOM/Offset.ts +4 -5
- package/DOM/OuterSize.ts +12 -12
- package/DOM/PageToDOM.ts +2 -2
- package/DOM/Position.ts +3 -3
- package/DOM/Size.ts +3 -7
- package/DOM/StrToDOM.ts +0 -1
- package/DOM/Styles.ts +3 -12
- package/DOM/Traversing.ts +0 -6
- package/DOM/WindowScroll.ts +3 -1
- package/DOM/WindowSize.ts +3 -1
- package/DOM/Wrap.ts +0 -1
- package/Events/DeviceOrientation.ts +27 -31
- package/Events/EventsManager.ts +10 -25
- package/Events/Gesture.ts +36 -37
- package/Events/HistoryController.ts +11 -17
- package/Events/ImageLoad.ts +35 -19
- package/Events/IntersectObserver.ts +15 -19
- package/Events/KeyboardHandler.ts +10 -8
- package/Events/MediaQueriesEvents.ts +53 -51
- package/Events/OnAnimationEnd.ts +5 -6
- package/Events/OnTransitionEnd.ts +3 -3
- package/Events/PubSub.ts +5 -8
- package/Events/TouchHover.ts +18 -21
- package/Events/WindowEvents.ts +26 -30
- package/Helpers/Colors.ts +7 -23
- package/Helpers/Cookie.ts +5 -12
- package/Helpers/Coordinates.ts +0 -7
- package/Helpers/Debounce.ts +3 -7
- package/Helpers/Defer.ts +1 -1
- package/Helpers/GetValue.ts +0 -2
- package/Helpers/Insert.ts +0 -1
- package/Helpers/Sequential.ts +0 -2
- package/Helpers/Slice.ts +0 -3
- package/Helpers/Throttle.ts +0 -1
- package/Helpers/TransitionHelpers.ts +95 -0
- package/Helpers/Type.ts +1 -14
- package/Helpers/Unique.ts +3 -3
- package/Helpers/UrlParser.ts +14 -23
- package/Helpers/Wait.ts +1 -1
- package/Modules/Accordion/Tab.ts +19 -17
- package/Modules/Accordion/index.ts +27 -19
- package/Modules/Autocomplete.ts +95 -101
- package/Modules/DragSlider.ts +72 -63
- package/Modules/GlobalState.ts +60 -53
- package/Modules/LoadGMap.ts +4 -7
- package/Modules/Notifications/Notification.ts +28 -32
- package/Modules/Notifications/index.ts +43 -36
- package/Modules/Popin/Popin.ts +100 -110
- package/Modules/Popin/PopinAccessibility.ts +8 -8
- package/Modules/Popin/PopinBackground.ts +12 -12
- package/Modules/Popin/PopinController.ts +24 -30
- package/Modules/Popin/Tools.ts +18 -19
- package/Modules/QuickTemplate.ts +4 -6
- package/Modules/ScrollSnap.ts +110 -104
- package/Modules/SkinCheckbox.ts +52 -38
- package/Modules/SkinFile.ts +63 -53
- package/Modules/SkinRadio.ts +63 -43
- package/Modules/SkinSelect.ts +117 -101
- package/Modules/Slider/Slide.ts +49 -52
- package/Modules/Slider/Slider.ts +100 -136
- package/Modules/Slider/SliderControls.ts +60 -59
- package/Modules/Tabs/Tab.ts +28 -24
- package/Modules/Tabs/index.ts +36 -26
- package/Modules/Validator/Date.ts +2 -1
- package/Modules/Validator/Equals.ts +1 -1
- package/Modules/Validator/Internal/Input.ts +366 -0
- package/Modules/Validator/Internal/InputValidator.ts +99 -0
- package/Modules/Validator/Internal/ValidatorFunctionsController.ts +58 -0
- package/Modules/Validator/Max.ts +1 -1
- package/Modules/Validator/Min.ts +1 -1
- package/Modules/Validator/MultiRequired.ts +5 -5
- package/Modules/Validator/Number.ts +1 -0
- package/Modules/Validator/Pattern.ts +1 -1
- package/Modules/Validator/Recaptcha.ts +1 -0
- package/Modules/Validator/Required.ts +3 -2
- package/Modules/Validator/ServerCheck.ts +23 -15
- package/Modules/Validator/Tools/GetQueryFromForm.ts +1 -6
- package/Modules/Validator/Tools/IsDate.ts +2 -3
- package/Modules/Validator/Tools/IsEmail.ts +2 -5
- package/Modules/Validator/Tools/IsEmpty.ts +0 -2
- package/Modules/Validator/Tools/IsNumber.ts +0 -2
- package/Modules/Validator/Tools/IsUrl.ts +1 -3
- package/Modules/Validator/Tools/Label.ts +5 -15
- package/Modules/Validator/Tools/RadioButton.ts +4 -10
- package/Modules/Validator/Url.ts +1 -0
- package/Modules/Validator/index.ts +36 -36
- package/Modules/YouTubePlayer.ts +18 -16
- package/README.md +1 -1
- package/Types/Accordion.d.ts +41 -0
- package/Types/Autocomplete.d.ts +94 -0
- package/Types/DOM.d.ts +69 -0
- package/Types/DragSlider.d.ts +56 -0
- package/Types/EventsHelpers.d.ts +390 -0
- package/Types/GLImageTransition.d.ts +47 -43
- package/Types/GlobalState.d.ts +9 -0
- package/Types/Helpers.d.ts +63 -0
- package/Types/Notifications.d.ts +48 -44
- package/Types/Popin.d.ts +113 -0
- package/Types/ScrollSnap.d.ts +66 -0
- package/Types/SkinCheckbox.d.ts +35 -0
- package/Types/SkinFile.d.ts +45 -0
- package/Types/SkinRadio.d.ts +37 -0
- package/Types/SkinSelect.d.ts +72 -0
- package/Types/Slider.d.ts +106 -0
- package/Types/Tabs.d.ts +33 -0
- package/Types/Validator.d.ts +99 -0
- package/Types/YouTubePlayer.d.ts +27 -0
- package/Types/index.d.ts +22 -21
- package/WebGL/GLImageTransition/GLImageTransition.ts +83 -80
- package/WebGL/GLImageTransition/Presets/Cellular.ts +11 -11
- package/WebGL/GLImageTransition/Presets/Fade.ts +2 -3
- package/WebGL/GLImageTransition/Presets/HorizontalMovingGrid.ts +9 -9
- package/WebGL/GLImageTransition/Presets/PresetSample.ts +11 -9
- package/WebGL/GLImageTransition/Presets/Solarisation.ts +7 -12
- package/package.json +1 -1
- package/Modules/Template.ts +0 -209
- package/Types/AccordionTypes.d.ts +0 -29
- package/Types/AutocompleteTypes.d.ts +0 -85
- package/Types/DOMTypes.d.ts +0 -62
- package/Types/DragSliderTypes.d.ts +0 -52
- package/Types/EventsHelpersTypes.d.ts +0 -370
- package/Types/GlobalStateTypes.d.ts +0 -5
- package/Types/HelpersTypes.d.ts +0 -23
- package/Types/MediaPreloaderTypes.d.ts +0 -12
- package/Types/PopinTypes.d.ts +0 -83
- package/Types/ScrollSnapTypes.d.ts +0 -62
- package/Types/SkinCheckboxTypes.d.ts +0 -23
- package/Types/SkinFileTypes.d.ts +0 -34
- package/Types/SkinRadioTypes.d.ts +0 -24
- package/Types/SkinSelectTypes.d.ts +0 -48
- package/Types/SliderTypes.d.ts +0 -97
- package/Types/TabsTypes.d.ts +0 -22
- package/Types/ValidatorTypes.d.ts +0 -61
- package/Types/YouTubePlayerTypes.d.ts +0 -23
package/Modules/Popin/Popin.ts
CHANGED
|
@@ -4,44 +4,45 @@ import { extend } from '../../Helpers/Extend';
|
|
|
4
4
|
import { strToDOM } from '../../DOM/StrToDOM';
|
|
5
5
|
import { append } from '../../DOM/Manipulation';
|
|
6
6
|
import { windowSize } from '../../DOM/WindowSize';
|
|
7
|
-
import template from '../Template';
|
|
8
7
|
import PopinBackground from './PopinBackground';
|
|
9
8
|
import PopinAccessibility from './PopinAccessibility';
|
|
10
9
|
import { defaultOptions, CLICK_EVENT_NAME } from './Tools';
|
|
10
|
+
import quickTemplate from '../QuickTemplate';
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Create a simple popin
|
|
15
|
-
* @class Popin
|
|
16
15
|
*
|
|
17
16
|
* @see extra/modules/popin.md for details.
|
|
18
17
|
*
|
|
19
|
-
* @example
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* let popin = new Popin( popinOptions );
|
|
20
21
|
* popin.load( 'my-url.html', {method: 'post'} );
|
|
22
|
+
* ```
|
|
21
23
|
*/
|
|
22
24
|
export default class Popin {
|
|
23
25
|
|
|
24
26
|
#loadingPromise: Promise<void> | null = null;
|
|
25
|
-
#loaderOpened
|
|
26
|
-
#popinOpened
|
|
27
|
+
#loaderOpened = false;
|
|
28
|
+
#popinOpened = false;
|
|
27
29
|
#$loader: HTMLElement;
|
|
28
|
-
#templates:
|
|
29
|
-
#selectors:
|
|
30
|
-
#animations:
|
|
31
|
-
#errorTpl;
|
|
30
|
+
#templates: FLib.Popin.TemplatesOptions;
|
|
31
|
+
#selectors: FLib.Popin.SelectorsOptions;
|
|
32
|
+
#animations: FLib.Popin.AnimationsOptions;
|
|
32
33
|
#$popinContent: HTMLElement;
|
|
33
34
|
#$initialFocus;
|
|
34
35
|
#isInlinePopin: boolean;
|
|
35
36
|
#focusControl: PopinAccessibility;
|
|
36
37
|
#keyboardControls;
|
|
37
|
-
#options:
|
|
38
|
-
#controllerOptions:
|
|
38
|
+
#options: FLib.Popin.Options;
|
|
39
|
+
#controllerOptions: FLib.Popin.ControllerOptions | undefined;
|
|
39
40
|
#backgroundLayer: PopinBackground;
|
|
40
41
|
#tick;
|
|
41
42
|
#$popin: HTMLElement;
|
|
42
43
|
|
|
43
44
|
|
|
44
|
-
constructor ( userOptions:
|
|
45
|
+
constructor ( userOptions: FLib.Popin.OptionsInit = {}, $popin?: HTMLElement, _controllerOptions?: FLib.Popin.ControllerOptions ) {
|
|
45
46
|
|
|
46
47
|
if ( !( "AbortController" in window ) ) {
|
|
47
48
|
throw 'This plugin uses fecth and AbortController. You may need to add a polyfill for this browser.';
|
|
@@ -51,8 +52,8 @@ export default class Popin {
|
|
|
51
52
|
this.#controllerOptions = _controllerOptions;
|
|
52
53
|
|
|
53
54
|
if ( _controllerOptions ) {
|
|
54
|
-
this.#options = userOptions;
|
|
55
|
-
this.#backgroundLayer = _controllerOptions.background
|
|
55
|
+
this.#options = userOptions as FLib.Popin.Options;
|
|
56
|
+
this.#backgroundLayer = _controllerOptions.background;
|
|
56
57
|
}
|
|
57
58
|
else {
|
|
58
59
|
this.#options = extend( defaultOptions, userOptions );
|
|
@@ -60,18 +61,17 @@ export default class Popin {
|
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
|
|
63
|
-
this.#templates = this.#options.templates
|
|
64
|
-
this.#selectors = this.#options.selectors
|
|
65
|
-
this.#animations = this.#options.animations
|
|
64
|
+
this.#templates = this.#options.templates;
|
|
65
|
+
this.#selectors = this.#options.selectors;
|
|
66
|
+
this.#animations = this.#options.animations;
|
|
66
67
|
// Add loader in the popin
|
|
67
|
-
this.#$loader = strToDOM( this.#templates.popinLoader
|
|
68
|
+
this.#$loader = strToDOM( this.#templates.popinLoader ) as HTMLElement;
|
|
68
69
|
|
|
69
70
|
if ( $popin ) {
|
|
70
71
|
this.#$popin = $popin;
|
|
71
72
|
}
|
|
72
73
|
else {
|
|
73
|
-
const popinHtml = this.#templates.popin
|
|
74
|
-
this.#errorTpl = template( this.#templates.errorMessage! );
|
|
74
|
+
const popinHtml = this.#templates.popin;
|
|
75
75
|
|
|
76
76
|
// Add popin template
|
|
77
77
|
this.#$popin = strToDOM( popinHtml ) as HTMLElement;
|
|
@@ -81,7 +81,7 @@ export default class Popin {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
// Init the element that will receive the content
|
|
84
|
-
this.#$popinContent = this.#$popin.querySelector( this.#selectors.popinContent
|
|
84
|
+
this.#$popinContent = this.#$popin.querySelector( this.#selectors.popinContent ) || this.#$popin;
|
|
85
85
|
|
|
86
86
|
// Keyboard TAB focus control
|
|
87
87
|
this.#focusControl = new PopinAccessibility( this.#$popin );
|
|
@@ -133,7 +133,7 @@ export default class Popin {
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
#addAccessibility = (): void => {
|
|
137
137
|
this.#focusControl.refresh();
|
|
138
138
|
this.#focusControl.toggleTabIndexNavigation( true );
|
|
139
139
|
this.#focusControl.focusFirstElement();
|
|
@@ -143,23 +143,23 @@ export default class Popin {
|
|
|
143
143
|
// ------------------------------ LOADER
|
|
144
144
|
|
|
145
145
|
|
|
146
|
-
|
|
146
|
+
#openLoader = (): Promise<any> => {
|
|
147
147
|
if ( this.#loaderOpened ) {
|
|
148
148
|
return Promise.resolve();
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
return this.#animations.openLoader
|
|
151
|
+
return this.#animations.openLoader( this.#$loader ).then( () => {
|
|
152
152
|
this.#loaderOpened = true;
|
|
153
153
|
} );
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
|
|
157
|
-
|
|
157
|
+
#closeLoader = (): Promise<void> => {
|
|
158
158
|
if ( !this.#loaderOpened ) {
|
|
159
159
|
return Promise.resolve();
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
return this.#animations.closeLoader
|
|
162
|
+
return this.#animations.closeLoader( this.#$loader ).then( () => {
|
|
163
163
|
this.#loaderOpened = false;
|
|
164
164
|
} );
|
|
165
165
|
}
|
|
@@ -168,23 +168,23 @@ export default class Popin {
|
|
|
168
168
|
// ------------------------------ POPIN SHOW/HIDE
|
|
169
169
|
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
#showBackgroundLayer = (): Promise<void> => {
|
|
172
172
|
return this.#backgroundLayer ? this.#backgroundLayer.open() : Promise.resolve();
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
|
|
176
|
-
|
|
176
|
+
#hideBackgroundLayer = (): Promise<void> => {
|
|
177
177
|
return this.#backgroundLayer ? this.#backgroundLayer.close() : Promise.resolve();
|
|
178
178
|
}
|
|
179
179
|
|
|
180
180
|
|
|
181
|
-
|
|
181
|
+
#openPopin = (): Promise<void> => {
|
|
182
182
|
if ( this.#popinOpened ) {
|
|
183
183
|
return Promise.resolve();
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
this.#$initialFocus = document.activeElement;
|
|
187
|
-
this
|
|
187
|
+
this.#resize();
|
|
188
188
|
|
|
189
189
|
if ( this.#options.autoResize ) {
|
|
190
190
|
on( window, {
|
|
@@ -193,12 +193,12 @@ export default class Popin {
|
|
|
193
193
|
} );
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
-
return this
|
|
196
|
+
return this.#showBackgroundLayer()
|
|
197
197
|
.then( () => {
|
|
198
198
|
if ( this.#isInlinePopin ) {
|
|
199
|
-
this
|
|
199
|
+
this.#addAccessibility();
|
|
200
200
|
}
|
|
201
|
-
return this.#animations.initOpenPopin
|
|
201
|
+
return this.#animations.initOpenPopin( this.#$popin );
|
|
202
202
|
} )
|
|
203
203
|
.then( () => {
|
|
204
204
|
if ( this.#options.onOpen ) {
|
|
@@ -206,7 +206,7 @@ export default class Popin {
|
|
|
206
206
|
}
|
|
207
207
|
} )
|
|
208
208
|
.then( () => {
|
|
209
|
-
return this.#animations.openPopin
|
|
209
|
+
return this.#animations.openPopin( this.#$popin );
|
|
210
210
|
} )
|
|
211
211
|
.then( () => {
|
|
212
212
|
this.#popinOpened = true;
|
|
@@ -214,7 +214,7 @@ export default class Popin {
|
|
|
214
214
|
}
|
|
215
215
|
|
|
216
216
|
|
|
217
|
-
|
|
217
|
+
#closePopin = (): Promise<void> => {
|
|
218
218
|
if ( !this.#popinOpened ) {
|
|
219
219
|
return Promise.resolve();
|
|
220
220
|
}
|
|
@@ -225,8 +225,8 @@ export default class Popin {
|
|
|
225
225
|
} );
|
|
226
226
|
|
|
227
227
|
return this.#animations
|
|
228
|
-
.closePopin
|
|
229
|
-
.then( this
|
|
228
|
+
.closePopin( this.#$popin )
|
|
229
|
+
.then( this.#hideBackgroundLayer.bind( this ) )
|
|
230
230
|
.then( () => {
|
|
231
231
|
if ( this.#options.onClose ) {
|
|
232
232
|
return this.#options.onClose.call( this, this.#$popin );
|
|
@@ -236,7 +236,7 @@ export default class Popin {
|
|
|
236
236
|
this.#popinOpened = false;
|
|
237
237
|
|
|
238
238
|
if ( !this.#isInlinePopin ) {
|
|
239
|
-
this
|
|
239
|
+
this.#clearPopin();
|
|
240
240
|
}
|
|
241
241
|
this.#$initialFocus.focus();
|
|
242
242
|
});
|
|
@@ -246,35 +246,35 @@ export default class Popin {
|
|
|
246
246
|
// ------------------------------ POPIN CONTENT
|
|
247
247
|
|
|
248
248
|
|
|
249
|
-
|
|
250
|
-
window.requestAnimationFrame( this
|
|
249
|
+
#resizeRAF = (): void => {
|
|
250
|
+
window.requestAnimationFrame( this.#resize.bind( this ) );
|
|
251
251
|
}
|
|
252
252
|
|
|
253
253
|
|
|
254
|
-
|
|
254
|
+
#setPopin = ( resp: string ): Promise<void> => {
|
|
255
255
|
this.#$popinContent.innerHTML = resp;
|
|
256
256
|
|
|
257
|
-
return this.#options.onLoad
|
|
257
|
+
return this.#options.onLoad( this.#$popin ).then( this.#resizeRAF.bind( this ) );
|
|
258
258
|
}
|
|
259
259
|
|
|
260
260
|
|
|
261
|
-
|
|
261
|
+
#clearPopin = (): void => {
|
|
262
262
|
this.#$popinContent.innerHTML = '';
|
|
263
|
-
this
|
|
263
|
+
this.#resizeRAF();
|
|
264
264
|
this.#focusControl.toggleTabIndexNavigation( false );
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
|
|
268
|
-
|
|
269
|
-
this.#$popinContent.innerHTML = this.#
|
|
270
|
-
this
|
|
268
|
+
#setPopinError = ( message: string ): void => {
|
|
269
|
+
this.#$popinContent.innerHTML = quickTemplate( this.#templates.errorMessage, { "message": message } );
|
|
270
|
+
this.#resizeRAF();
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
|
|
274
274
|
// ------------------------------ POPIN LOADING
|
|
275
275
|
|
|
276
276
|
|
|
277
|
-
|
|
277
|
+
#_load = ( url: string, type: FLib.Popin.ResponseType, userRequestOptions?: RequestInit ): Promise<void> => {
|
|
278
278
|
let requestOptions: RequestInit ;
|
|
279
279
|
|
|
280
280
|
this.#loadingPromise = new Promise( ( resolve, reject ) => {
|
|
@@ -288,8 +288,8 @@ export default class Popin {
|
|
|
288
288
|
requestOptions = extend( {}, requestOptions, userRequestOptions );
|
|
289
289
|
}
|
|
290
290
|
|
|
291
|
-
this
|
|
292
|
-
.then( () => this
|
|
291
|
+
this.#openPopin()
|
|
292
|
+
.then( () => this.#openLoader() )
|
|
293
293
|
.then( () => {
|
|
294
294
|
fetch(
|
|
295
295
|
url,
|
|
@@ -300,8 +300,7 @@ export default class Popin {
|
|
|
300
300
|
return response;
|
|
301
301
|
}
|
|
302
302
|
else {
|
|
303
|
-
|
|
304
|
-
/** @ts-expect-error */
|
|
303
|
+
const error: Error & { response? } = new Error( response.statusText );
|
|
305
304
|
error.response = response;
|
|
306
305
|
throw error;
|
|
307
306
|
}
|
|
@@ -331,31 +330,31 @@ export default class Popin {
|
|
|
331
330
|
} )
|
|
332
331
|
.then(
|
|
333
332
|
data => {
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
333
|
+
const [ body, response ] = data;
|
|
334
|
+
const isHttpError = response.status < 200 || response.status >= 300;
|
|
335
|
+
const normResponse = this.#options.normalize( body, response, isHttpError );
|
|
337
336
|
|
|
338
337
|
if ( normResponse.success ) {
|
|
339
|
-
this
|
|
340
|
-
this
|
|
338
|
+
this.#setPopin( normResponse.data ).then( () => {
|
|
339
|
+
this.#addAccessibility();
|
|
341
340
|
resolve();
|
|
342
341
|
} );
|
|
343
342
|
}
|
|
344
343
|
else {
|
|
345
|
-
this
|
|
346
|
-
this
|
|
344
|
+
this.#setPopinError( this.#options.errorMessage );
|
|
345
|
+
this.#addAccessibility();
|
|
347
346
|
reject();
|
|
348
347
|
}
|
|
349
348
|
},
|
|
350
349
|
err => {
|
|
351
|
-
this
|
|
352
|
-
this
|
|
350
|
+
this.#setPopinError( this.#options.errorMessage );
|
|
351
|
+
this.#addAccessibility();
|
|
353
352
|
reject( err );
|
|
354
353
|
}
|
|
355
354
|
)
|
|
356
355
|
.finally( () => {
|
|
357
356
|
this.#loadingPromise = null;
|
|
358
|
-
this
|
|
357
|
+
this.#closeLoader();
|
|
359
358
|
} );
|
|
360
359
|
})
|
|
361
360
|
.catch( err => reject( err ) );
|
|
@@ -366,15 +365,15 @@ export default class Popin {
|
|
|
366
365
|
}
|
|
367
366
|
|
|
368
367
|
|
|
369
|
-
|
|
370
|
-
return this
|
|
368
|
+
#_loadLink = ( $link: HTMLAnchorElement ): Promise<void> => {
|
|
369
|
+
return this.#_load(
|
|
371
370
|
$link.href,
|
|
372
|
-
this.#options.setLinkResponseType
|
|
371
|
+
this.#options.setLinkResponseType( $link.href, $link ),
|
|
373
372
|
);
|
|
374
373
|
}
|
|
375
374
|
|
|
376
375
|
|
|
377
|
-
|
|
376
|
+
#_loadForm = ( $form: HTMLFormElement ): Promise<void> => {
|
|
378
377
|
let validationResult;
|
|
379
378
|
|
|
380
379
|
if ( this.#options.checkValidity ) {
|
|
@@ -389,9 +388,9 @@ export default class Popin {
|
|
|
389
388
|
|
|
390
389
|
return validationProm
|
|
391
390
|
.then( () => {
|
|
392
|
-
return this
|
|
391
|
+
return this.#_load(
|
|
393
392
|
$form.action,
|
|
394
|
-
this.#options.setFormResponseType
|
|
393
|
+
this.#options.setFormResponseType( $form ),
|
|
395
394
|
{
|
|
396
395
|
"body": new FormData( $form ),
|
|
397
396
|
"method": $form.method || 'POST'
|
|
@@ -400,17 +399,17 @@ export default class Popin {
|
|
|
400
399
|
}
|
|
401
400
|
|
|
402
401
|
|
|
403
|
-
#openPopinHandler = ( e ) => {
|
|
402
|
+
#openPopinHandler = ( e: Event ): void => {
|
|
404
403
|
e.preventDefault();
|
|
405
404
|
|
|
406
405
|
if ( this.#loadingPromise ) {
|
|
407
406
|
return;
|
|
408
407
|
}
|
|
409
408
|
|
|
410
|
-
const $target = e.target;
|
|
409
|
+
const $target = e.target as HTMLElement;
|
|
411
410
|
|
|
412
411
|
if ( $target.nodeName === 'FORM' ) {
|
|
413
|
-
this
|
|
412
|
+
this.#_loadForm( $target as HTMLFormElement );
|
|
414
413
|
return;
|
|
415
414
|
}
|
|
416
415
|
|
|
@@ -420,29 +419,29 @@ export default class Popin {
|
|
|
420
419
|
return;
|
|
421
420
|
}
|
|
422
421
|
|
|
423
|
-
this
|
|
422
|
+
this.#_loadLink( $target as HTMLAnchorElement );
|
|
424
423
|
}
|
|
425
424
|
|
|
426
425
|
|
|
427
|
-
#closePopinHandler = ( e ) => {
|
|
426
|
+
#closePopinHandler = ( e: Event ): void => {
|
|
428
427
|
e.preventDefault();
|
|
429
428
|
|
|
430
429
|
if ( this.#controllerOptions ) {
|
|
431
430
|
return this.#controllerOptions.controller.close();
|
|
432
431
|
}
|
|
433
432
|
|
|
434
|
-
this
|
|
433
|
+
this.#closePopin();
|
|
435
434
|
}
|
|
436
435
|
|
|
437
436
|
|
|
438
|
-
|
|
437
|
+
#resize = (): void => {
|
|
439
438
|
if ( !this.#options.autoResize ) {
|
|
440
439
|
return;
|
|
441
440
|
}
|
|
442
441
|
|
|
443
442
|
const viewportSize = windowSize();
|
|
444
443
|
|
|
445
|
-
const maxHeight = viewportSize.height - this.#options.marginHeight
|
|
444
|
+
const maxHeight = viewportSize.height - this.#options.marginHeight * 2;
|
|
446
445
|
|
|
447
446
|
this.#$popinContent.style.maxHeight = `${ maxHeight }px`;
|
|
448
447
|
|
|
@@ -450,123 +449,114 @@ export default class Popin {
|
|
|
450
449
|
}
|
|
451
450
|
|
|
452
451
|
|
|
453
|
-
#resizeHandler = () => {
|
|
452
|
+
#resizeHandler = (): void => {
|
|
454
453
|
if ( this.#tick ) {
|
|
455
454
|
return;
|
|
456
455
|
}
|
|
457
456
|
|
|
458
457
|
this.#tick = true;
|
|
459
458
|
|
|
460
|
-
window.requestAnimationFrame( this
|
|
459
|
+
window.requestAnimationFrame( this.#resize.bind( this ) );
|
|
461
460
|
}
|
|
462
461
|
|
|
463
462
|
|
|
464
463
|
/**
|
|
465
464
|
* Load a page from a link and display the result it in the popin
|
|
466
|
-
*
|
|
467
|
-
* @param $link
|
|
468
465
|
*/
|
|
469
466
|
loadLink( $link: HTMLAnchorElement ): Promise<void> {
|
|
470
467
|
if ( this.#loadingPromise ) {
|
|
471
468
|
return this.#loadingPromise;
|
|
472
469
|
}
|
|
473
470
|
|
|
474
|
-
return this
|
|
475
|
-
}
|
|
471
|
+
return this.#_loadLink( $link );
|
|
472
|
+
}
|
|
476
473
|
|
|
477
474
|
|
|
478
475
|
/**
|
|
479
476
|
* Send a form and display the result it in the popin
|
|
480
|
-
*
|
|
481
|
-
* @param $form
|
|
482
477
|
*/
|
|
483
478
|
loadForm( $form: HTMLFormElement ): Promise<void> {
|
|
484
479
|
if ( this.#loadingPromise ) {
|
|
485
480
|
return this.#loadingPromise;
|
|
486
481
|
}
|
|
487
482
|
|
|
488
|
-
return this
|
|
489
|
-
}
|
|
483
|
+
return this.#_loadForm( $form );
|
|
484
|
+
}
|
|
490
485
|
|
|
491
486
|
|
|
492
487
|
/**
|
|
493
488
|
* Load a file and display it in the popin
|
|
494
489
|
*
|
|
495
|
-
* @param url
|
|
496
490
|
* @param data - All parameters available for window.fetch
|
|
497
|
-
* @param [type=text]
|
|
498
491
|
*/
|
|
499
|
-
load( url: string, data?: RequestInit, type:
|
|
492
|
+
load( url: string, data?: RequestInit, type: FLib.Popin.ResponseType = 'text' ): Promise<void> {
|
|
500
493
|
if ( this.#loadingPromise ) {
|
|
501
494
|
return this.#loadingPromise;
|
|
502
495
|
}
|
|
503
496
|
|
|
504
|
-
return this
|
|
497
|
+
return this.#_load(
|
|
505
498
|
url,
|
|
506
499
|
type,
|
|
507
500
|
data
|
|
508
501
|
);
|
|
509
|
-
}
|
|
510
|
-
|
|
502
|
+
}
|
|
511
503
|
|
|
512
504
|
/**
|
|
513
505
|
* Insert some html in the popin and open it
|
|
514
506
|
*
|
|
515
|
-
* @param html
|
|
516
507
|
* @param openFirst - Open the popin THEN insert the html
|
|
517
508
|
*/
|
|
518
509
|
set( html: string, openFirst?: boolean ): Promise<void> {
|
|
519
510
|
if ( openFirst ) {
|
|
520
|
-
return this
|
|
511
|
+
return this.#openPopin().then( () => this.#setPopin( html ) );
|
|
521
512
|
}
|
|
522
|
-
return this
|
|
523
|
-
}
|
|
513
|
+
return this.#setPopin( html ).then( () => this.#openPopin() );
|
|
514
|
+
}
|
|
524
515
|
|
|
525
516
|
|
|
526
517
|
/**
|
|
527
518
|
* Remove the content of the popin
|
|
528
519
|
*/
|
|
529
|
-
clear() {
|
|
530
|
-
return this
|
|
531
|
-
}
|
|
520
|
+
clear(): void {
|
|
521
|
+
return this.#clearPopin();
|
|
522
|
+
}
|
|
532
523
|
|
|
533
524
|
|
|
534
525
|
/**
|
|
535
526
|
* Close the popin
|
|
536
527
|
*/
|
|
537
528
|
close(): Promise<void> {
|
|
538
|
-
return this
|
|
539
|
-
}
|
|
529
|
+
return this.#closePopin();
|
|
530
|
+
}
|
|
540
531
|
|
|
541
532
|
|
|
542
533
|
/**
|
|
543
534
|
* Open the popin
|
|
544
535
|
*/
|
|
545
536
|
open(): Promise<void> {
|
|
546
|
-
return this
|
|
547
|
-
}
|
|
537
|
+
return this.#openPopin();
|
|
538
|
+
}
|
|
548
539
|
|
|
549
540
|
|
|
550
541
|
/**
|
|
551
542
|
* Open the popin loading
|
|
552
543
|
*/
|
|
553
544
|
openLoading(): Promise<void> {
|
|
554
|
-
return this
|
|
555
|
-
}
|
|
556
|
-
|
|
545
|
+
return this.#openLoader()
|
|
546
|
+
}
|
|
557
547
|
|
|
558
548
|
/**
|
|
559
549
|
* Close the popin loading
|
|
560
550
|
*/
|
|
561
551
|
closeLoading(): Promise<void> {
|
|
562
|
-
return this
|
|
563
|
-
}
|
|
552
|
+
return this.#closeLoader()
|
|
553
|
+
}
|
|
564
554
|
|
|
565
555
|
|
|
566
556
|
/**
|
|
567
557
|
* Remove all events, css class or inline styles
|
|
568
558
|
*/
|
|
569
|
-
destroy() {
|
|
559
|
+
destroy(): void {
|
|
570
560
|
off(
|
|
571
561
|
this.#$popin,
|
|
572
562
|
{
|
|
@@ -594,5 +584,5 @@ export default class Popin {
|
|
|
594
584
|
if ( this.#keyboardControls ) {
|
|
595
585
|
this.#keyboardControls.off();
|
|
596
586
|
}
|
|
597
|
-
}
|
|
587
|
+
}
|
|
598
588
|
}
|
|
@@ -3,9 +3,9 @@ import { toggleTabIndex, FOCUSABLE_ELEMENTS_SELECTOR } from './Tools';
|
|
|
3
3
|
|
|
4
4
|
export default class PopinAccessibility {
|
|
5
5
|
|
|
6
|
-
#$elements:
|
|
7
|
-
#$firstElement: HTMLElement |
|
|
8
|
-
#$lastElement: HTMLElement |
|
|
6
|
+
#$elements: NodeListOf<HTMLElement> | undefined;
|
|
7
|
+
#$firstElement: HTMLElement | undefined;
|
|
8
|
+
#$lastElement: HTMLElement | undefined;
|
|
9
9
|
#$popin: HTMLElement;
|
|
10
10
|
|
|
11
11
|
|
|
@@ -18,7 +18,7 @@ export default class PopinAccessibility {
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
focusFirstElement() {
|
|
21
|
+
focusFirstElement(): void {
|
|
22
22
|
if ( !this.#$firstElement ) {
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
@@ -26,7 +26,7 @@ export default class PopinAccessibility {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
handleBackwardTab( e ) {
|
|
29
|
+
handleBackwardTab( e: Event ): void {
|
|
30
30
|
if ( !this.#$elements?.length || !this.#$firstElement ) {
|
|
31
31
|
e.preventDefault();
|
|
32
32
|
return;
|
|
@@ -38,7 +38,7 @@ export default class PopinAccessibility {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
handleForwardTab( e ) {
|
|
41
|
+
handleForwardTab( e: Event ): void {
|
|
42
42
|
if ( this.#$elements?.length || !this.#$lastElement ) {
|
|
43
43
|
e.preventDefault();
|
|
44
44
|
return;
|
|
@@ -50,7 +50,7 @@ export default class PopinAccessibility {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
toggleTabIndexNavigation( activate ) {
|
|
53
|
+
toggleTabIndexNavigation( activate: boolean ): void {
|
|
54
54
|
toggleTabIndex( this.#$elements, this.#$popin, activate );
|
|
55
55
|
|
|
56
56
|
if ( activate ) {
|
|
@@ -59,7 +59,7 @@ export default class PopinAccessibility {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
refresh() {
|
|
62
|
+
refresh(): void {
|
|
63
63
|
this.#$elements = this.#$popin.querySelectorAll( FOCUSABLE_ELEMENTS_SELECTOR );
|
|
64
64
|
this.#$firstElement = this.#$elements[ 0 ] as HTMLElement;
|
|
65
65
|
this.#$lastElement = this.#$elements[ this.#$elements.length - 1 ] as HTMLElement;
|