@creative-web-solution/front-library 7.0.7 → 7.1.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 +15 -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 +2 -3
- 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 +8 -6
- package/Helpers/Type.ts +1 -14
- package/Helpers/Unique.ts +3 -3
- package/Helpers/UrlParser.ts +13 -22
- package/Helpers/Wait.ts +1 -1
- package/Modules/Accordion/Tab.ts +18 -16
- package/Modules/Accordion/index.ts +24 -16
- 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 +11 -11
- package/Modules/Popin/PopinController.ts +23 -29
- package/Modules/Popin/Tools.ts +18 -19
- package/Modules/QuickTemplate.ts +4 -6
- package/Modules/ScrollSnap.ts +110 -104
- package/Modules/SkinCheckbox.ts +51 -37
- package/Modules/SkinFile.ts +62 -52
- package/Modules/SkinRadio.ts +62 -42
- package/Modules/SkinSelect.ts +116 -100
- 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 +27 -23
- package/Modules/Tabs/index.ts +35 -25
- package/Modules/Validator/Date.ts +2 -1
- package/Modules/Validator/Equals.ts +1 -1
- package/Modules/Validator/Internal/Input.ts +370 -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 +36 -0
- package/Types/Autocomplete.d.ts +95 -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 +30 -0
- package/Types/Notifications.d.ts +48 -44
- package/Types/Popin.d.ts +95 -0
- package/Types/ScrollSnap.d.ts +66 -0
- package/Types/SkinCheckbox.d.ts +26 -0
- package/Types/SkinFile.d.ts +38 -0
- package/Types/SkinRadio.d.ts +28 -0
- package/Types/SkinSelect.d.ts +59 -0
- package/Types/Slider.d.ts +106 -0
- package/Types/Tabs.d.ts +26 -0
- package/Types/Validator.d.ts +72 -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
|
@@ -8,26 +8,26 @@ export default class PopinBackground {
|
|
|
8
8
|
|
|
9
9
|
#$bgLayer: HTMLElement;
|
|
10
10
|
#isOpened: boolean;
|
|
11
|
-
#options:
|
|
11
|
+
#options: FLib.Popin.Options;
|
|
12
12
|
#popin: Popin | PopinController;
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
get isOpened() {
|
|
15
|
+
get isOpened(): boolean {
|
|
16
16
|
return this.#isOpened;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
constructor( popin: Popin | PopinController, options:
|
|
20
|
+
constructor( popin: Popin | PopinController, options: FLib.Popin.Options ) {
|
|
21
21
|
this.#isOpened = false;
|
|
22
22
|
this.#popin = popin;
|
|
23
23
|
this.#options = options;
|
|
24
|
-
this.#$bgLayer = strToDOM( options.templates
|
|
24
|
+
this.#$bgLayer = strToDOM( options.templates.bgLayer ) as HTMLElement;
|
|
25
25
|
|
|
26
26
|
document.body.appendChild( this.#$bgLayer );
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
open() {
|
|
30
|
+
open(): Promise<any> {
|
|
31
31
|
if ( this.#isOpened ) {
|
|
32
32
|
return Promise.resolve();
|
|
33
33
|
}
|
|
@@ -36,13 +36,13 @@ export default class PopinBackground {
|
|
|
36
36
|
this.#$bgLayer.addEventListener( CLICK_EVENT_NAME, this.#onBgClick );
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
return this.#options.animations
|
|
39
|
+
return this.#options.animations.openBg( this.#$bgLayer ).then( () => {
|
|
40
40
|
this.#isOpened = true;
|
|
41
41
|
} );
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
close() {
|
|
45
|
+
close(): Promise<any> {
|
|
46
46
|
if ( !this.#isOpened ) {
|
|
47
47
|
return Promise.resolve();
|
|
48
48
|
}
|
|
@@ -51,18 +51,18 @@ export default class PopinBackground {
|
|
|
51
51
|
this.#$bgLayer.removeEventListener( CLICK_EVENT_NAME, this.#onBgClick );
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
return this.#options.animations
|
|
54
|
+
return this.#options.animations.closeBg( this.#$bgLayer ).then( () => {
|
|
55
55
|
this.#isOpened = false;
|
|
56
56
|
} );
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
|
|
60
|
-
#onBgClick = () => {
|
|
60
|
+
#onBgClick = (): void => {
|
|
61
61
|
this.#popin.close();
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
|
|
65
|
-
destroy() {
|
|
65
|
+
destroy(): void {
|
|
66
66
|
this.#$bgLayer.removeEventListener( CLICK_EVENT_NAME, this.#onBgClick );
|
|
67
|
-
}
|
|
67
|
+
}
|
|
68
68
|
}
|
|
@@ -7,7 +7,6 @@ import { CLICK_EVENT_NAME, defaultOptions, toggleTabIndex } from './Tools';
|
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Create a controller tha manage all popin in the page
|
|
10
|
-
* @class PopinController
|
|
11
10
|
*
|
|
12
11
|
* @see extra/modules/popin.md for details.
|
|
13
12
|
*
|
|
@@ -16,13 +15,13 @@ import { CLICK_EVENT_NAME, defaultOptions, toggleTabIndex } from './Tools';
|
|
|
16
15
|
* popin.loadForm( $form );
|
|
17
16
|
*/
|
|
18
17
|
export default class PopinController {
|
|
19
|
-
#options:
|
|
20
|
-
#selectors:
|
|
18
|
+
#options: FLib.Popin.Options;
|
|
19
|
+
#selectors: FLib.Popin.SelectorsOptions;
|
|
21
20
|
#background: PopinBackground;
|
|
22
21
|
#popin: Popin;
|
|
23
22
|
|
|
24
23
|
|
|
25
|
-
constructor( userOptions:
|
|
24
|
+
constructor( userOptions: FLib.Popin.OptionsInit = {}, $popin?: HTMLElement ) {
|
|
26
25
|
|
|
27
26
|
if ( !( "AbortController" in window ) ) {
|
|
28
27
|
throw 'This plugin uses fecth and AbortController. You may need to add a polyfill for this browser.';
|
|
@@ -30,7 +29,7 @@ export default class PopinController {
|
|
|
30
29
|
|
|
31
30
|
this.#options = extend( defaultOptions, userOptions );
|
|
32
31
|
|
|
33
|
-
this.#selectors = this.#options.selectors
|
|
32
|
+
this.#selectors = this.#options.selectors;
|
|
34
33
|
|
|
35
34
|
// global var, only one background for all popin
|
|
36
35
|
this.#background = new PopinBackground( this, this.#options );
|
|
@@ -74,18 +73,18 @@ export default class PopinController {
|
|
|
74
73
|
|
|
75
74
|
} );
|
|
76
75
|
|
|
77
|
-
|
|
76
|
+
const $triggerOnLoadPopin = document.querySelector( `[${ this.#selectors.openOnLoadAttribute }]` );
|
|
78
77
|
|
|
79
78
|
if ( $triggerOnLoadPopin ) {
|
|
80
|
-
this
|
|
79
|
+
this.#parseElement(
|
|
81
80
|
$triggerOnLoadPopin as HTMLElement,
|
|
82
|
-
$triggerOnLoadPopin.getAttribute( this.#selectors.openOnLoadAttribute
|
|
81
|
+
$triggerOnLoadPopin.getAttribute( this.#selectors.openOnLoadAttribute )
|
|
83
82
|
);
|
|
84
83
|
}
|
|
85
84
|
}
|
|
86
85
|
|
|
87
86
|
|
|
88
|
-
|
|
87
|
+
#parseElement = ( $dom: HTMLElement, customUrl?: string | null ): Promise<void> => {
|
|
89
88
|
if ( customUrl ) {
|
|
90
89
|
return this.#popin.load( customUrl );
|
|
91
90
|
}
|
|
@@ -105,62 +104,55 @@ export default class PopinController {
|
|
|
105
104
|
|
|
106
105
|
|
|
107
106
|
|
|
108
|
-
#openPopinHandler = ( e ) => {
|
|
107
|
+
#openPopinHandler = ( e: Event): void => {
|
|
109
108
|
e.preventDefault();
|
|
110
109
|
|
|
111
|
-
this
|
|
110
|
+
this.#parseElement( e.target as HTMLElement );
|
|
112
111
|
}
|
|
113
112
|
|
|
114
113
|
|
|
115
114
|
/**
|
|
116
115
|
* Load a file and display it in the popin
|
|
117
116
|
*
|
|
118
|
-
* @param url
|
|
119
117
|
* @param data - All parameters available for window.fetch
|
|
120
|
-
* @param [type=text]
|
|
121
118
|
*/
|
|
122
|
-
load( url: string, data: RequestInit, type?:
|
|
119
|
+
load( url: string, data: RequestInit, type?: FLib.Popin.ResponseType ): Promise<void> {
|
|
123
120
|
return this.#popin.load( url, data, type );
|
|
124
|
-
}
|
|
121
|
+
}
|
|
125
122
|
|
|
126
123
|
|
|
127
124
|
/**
|
|
128
125
|
* Send a form and display the result it in the popin
|
|
129
|
-
*
|
|
130
|
-
* @param $form
|
|
131
126
|
*/
|
|
132
127
|
loadForm( $form: HTMLFormElement ): Promise<void> {
|
|
133
128
|
return this.#popin.loadForm( $form );
|
|
134
|
-
}
|
|
129
|
+
}
|
|
135
130
|
|
|
136
131
|
|
|
137
132
|
/**
|
|
138
133
|
* Load a page from a link and display the result it in the popin
|
|
139
|
-
*
|
|
140
|
-
* @param $link
|
|
141
134
|
*/
|
|
142
135
|
loadLink( $link: HTMLAnchorElement ): Promise<void> {
|
|
143
136
|
return this.#popin.loadLink( $link );
|
|
144
|
-
}
|
|
137
|
+
}
|
|
145
138
|
|
|
146
139
|
|
|
147
140
|
/**
|
|
148
141
|
* Insert some html in the popin and open it
|
|
149
142
|
*
|
|
150
|
-
* @param html
|
|
151
143
|
* @param openFirst - Open the popin THEN insert the html
|
|
152
144
|
*/
|
|
153
145
|
set( html: string, openFirst?: boolean ): Promise<void> {
|
|
154
146
|
return this.#popin.set( html, openFirst );
|
|
155
|
-
}
|
|
147
|
+
}
|
|
156
148
|
|
|
157
149
|
|
|
158
150
|
/**
|
|
159
151
|
* Remove the content of the popin
|
|
160
152
|
*/
|
|
161
|
-
clear() {
|
|
153
|
+
clear(): void {
|
|
162
154
|
return this.#popin.clear();
|
|
163
|
-
}
|
|
155
|
+
}
|
|
164
156
|
|
|
165
157
|
|
|
166
158
|
/**
|
|
@@ -168,7 +160,7 @@ export default class PopinController {
|
|
|
168
160
|
*/
|
|
169
161
|
close(): Promise<void> {
|
|
170
162
|
return this.#popin.close();
|
|
171
|
-
}
|
|
163
|
+
}
|
|
172
164
|
|
|
173
165
|
|
|
174
166
|
/**
|
|
@@ -176,13 +168,13 @@ export default class PopinController {
|
|
|
176
168
|
*/
|
|
177
169
|
open(): Promise<void> {
|
|
178
170
|
return this.#popin.open();
|
|
179
|
-
}
|
|
171
|
+
}
|
|
180
172
|
|
|
181
173
|
|
|
182
174
|
/**
|
|
183
175
|
* Remove all events, css class or inline styles
|
|
184
176
|
*/
|
|
185
|
-
destroy() {
|
|
177
|
+
destroy(): this {
|
|
186
178
|
this.#background.destroy();
|
|
187
179
|
this.#popin.destroy();
|
|
188
180
|
|
|
@@ -193,6 +185,8 @@ export default class PopinController {
|
|
|
193
185
|
"callback": this.#openPopinHandler
|
|
194
186
|
}
|
|
195
187
|
);
|
|
196
|
-
|
|
188
|
+
|
|
189
|
+
return this;
|
|
190
|
+
}
|
|
197
191
|
|
|
198
192
|
}
|
package/Modules/Popin/Tools.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
|
|
2
2
|
export const FOCUSABLE_ELEMENTS_SELECTOR = 'a,button,input,select,textarea';
|
|
3
3
|
|
|
4
|
-
export function toggleTabIndex( $elements, $popin, activate ) {
|
|
5
|
-
let tabIndex;
|
|
4
|
+
export function toggleTabIndex( $elements: NodeListOf<HTMLElement> | undefined | null, $popin: HTMLElement, activate: boolean ): void {
|
|
6
5
|
$elements = $elements || $popin.querySelectorAll( FOCUSABLE_ELEMENTS_SELECTOR );
|
|
7
|
-
tabIndex = activate ? '0' : '-1';
|
|
6
|
+
const tabIndex = activate ? '0' : '-1';
|
|
8
7
|
$elements.forEach( e => e.setAttribute( 'tabindex', tabIndex ) );
|
|
9
8
|
$popin.setAttribute( 'tabindex', tabIndex );
|
|
10
|
-
$popin.setAttribute( 'aria-hidden',
|
|
9
|
+
$popin.setAttribute( 'aria-hidden', activate ? 'false' : 'true' );
|
|
11
10
|
}
|
|
12
11
|
|
|
13
12
|
export const CLICK_EVENT_NAME = window.matchMedia( '(hover: none)' ).matches ? 'touchend' : 'click';
|
|
@@ -18,19 +17,19 @@ export const defaultOptions = {
|
|
|
18
17
|
"marginHeight": 20,
|
|
19
18
|
"autoResize": false,
|
|
20
19
|
"enableKeyboard": true,
|
|
21
|
-
"onLoad": () => {
|
|
20
|
+
"onLoad": (): Promise<any> => {
|
|
22
21
|
return Promise.resolve();
|
|
23
22
|
},
|
|
24
|
-
"setLinkResponseType": () => {
|
|
23
|
+
"setLinkResponseType": (): string => {
|
|
25
24
|
return 'text';
|
|
26
25
|
},
|
|
27
|
-
"setFormResponseType": () => {
|
|
26
|
+
"setFormResponseType": (): string => {
|
|
28
27
|
return 'text';
|
|
29
28
|
},
|
|
30
|
-
"checkValidity": () => {
|
|
29
|
+
"checkValidity": (): boolean => {
|
|
31
30
|
return true;
|
|
32
31
|
},
|
|
33
|
-
"normalize": body => {
|
|
32
|
+
"normalize": <V>( body: V ): { success: boolean, data: V } => {
|
|
34
33
|
return {
|
|
35
34
|
"success": true,
|
|
36
35
|
"data": body
|
|
@@ -41,7 +40,7 @@ export const defaultOptions = {
|
|
|
41
40
|
"popinLoader": "<div class=\"popin-loader\"></div>",
|
|
42
41
|
"popin": "<div class=\"popin\"><div class=\"popin-content\"></div></div>",
|
|
43
42
|
"bgLayer": "<div class=\"bg-popin\"></div>",
|
|
44
|
-
"errorMessage": "<div class=\"error\"
|
|
43
|
+
"errorMessage": "<div class=\"error\">{{ message }}</div>"
|
|
45
44
|
},
|
|
46
45
|
"selectors": {
|
|
47
46
|
"popin": ".popin",
|
|
@@ -52,32 +51,32 @@ export const defaultOptions = {
|
|
|
52
51
|
"openOnLoadAttribute": "data-onload-popin"
|
|
53
52
|
},
|
|
54
53
|
"animations": {
|
|
55
|
-
"openBg": $bg => {
|
|
54
|
+
"openBg": ( $bg: HTMLElement ): Promise<any> => {
|
|
56
55
|
$bg.style.display = 'block';
|
|
57
56
|
return Promise.resolve();
|
|
58
57
|
},
|
|
59
|
-
"closeBg": $bg => {
|
|
58
|
+
"closeBg": ( $bg: HTMLElement ): Promise<any> => {
|
|
60
59
|
$bg.style.display = 'none';
|
|
61
60
|
return Promise.resolve();
|
|
62
61
|
},
|
|
63
|
-
"initOpenPopin": $popin => {
|
|
62
|
+
"initOpenPopin": ( $popin: HTMLElement ): Promise<any> => {
|
|
64
63
|
$popin.style.display = 'block';
|
|
65
|
-
$popin.style.opacity = 0;
|
|
64
|
+
$popin.style.opacity = '0';
|
|
66
65
|
return Promise.resolve();
|
|
67
66
|
},
|
|
68
|
-
"openPopin": $popin => {
|
|
69
|
-
$popin.style.opacity = 1;
|
|
67
|
+
"openPopin": ( $popin: HTMLElement ): Promise<any> => {
|
|
68
|
+
$popin.style.opacity = '1';
|
|
70
69
|
return Promise.resolve();
|
|
71
70
|
},
|
|
72
|
-
"closePopin": $popin => {
|
|
71
|
+
"closePopin": ( $popin: HTMLElement ): Promise<any> => {
|
|
73
72
|
$popin.style.display = 'none';
|
|
74
73
|
return Promise.resolve();
|
|
75
74
|
},
|
|
76
|
-
"openLoader": $loader => {
|
|
75
|
+
"openLoader": ( $loader: HTMLElement ): Promise<any> => {
|
|
77
76
|
$loader.style.display = 'block';
|
|
78
77
|
return Promise.resolve();
|
|
79
78
|
},
|
|
80
|
-
"closeLoader": $loader => {
|
|
79
|
+
"closeLoader": ( $loader : HTMLElement): Promise<any> => {
|
|
81
80
|
$loader.style.display = 'none';
|
|
82
81
|
return Promise.resolve();
|
|
83
82
|
}
|
package/Modules/QuickTemplate.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Simple template function based on string substitution
|
|
3
|
-
* @function
|
|
4
|
-
*
|
|
5
|
-
* @param template
|
|
6
|
-
* @param data
|
|
7
3
|
*
|
|
8
4
|
* @example
|
|
9
|
-
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* let HTML = quickTemplate( 'My name is {{ lastname }}. {{ firstname }} {{ lastname }}.', { "firstname": "James", "lastname": "Bond" } );
|
|
7
|
+
* ```
|
|
10
8
|
*/
|
|
11
9
|
export default function quickTemplate( template: string, data: { [ key: string ]: string } ): string {
|
|
12
10
|
Object.keys( data ).forEach( key => {
|
|
13
|
-
template = template.replace( new RegExp( `{\\s*${ key }\\s*}`, 'g' ), data[ key ] );
|
|
11
|
+
template = template.replace( new RegExp( `{{\\s*${ key }\\s*}}`, 'g' ), data[ key ] );
|
|
14
12
|
} );
|
|
15
13
|
|
|
16
14
|
return template;
|