vevet 1.4.27 → 2.0.1-dev.3
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/LICENSE +1 -1
- package/README.md +7 -71
- package/build/cdn/index.js +12 -0
- package/build/cdn/index.js.LICENSE.txt +14 -0
- package/build/cjs/app/Application.js +297 -0
- package/build/cjs/app/events/PageLoad.js +74 -0
- package/build/cjs/app/events/Viewport.js +303 -0
- package/build/cjs/base/Callbacks.js +232 -0
- package/build/cjs/base/Component.js +56 -0
- package/build/cjs/base/Module.js +262 -0
- package/build/cjs/base/MutableProp.js +165 -0
- package/build/cjs/base/Plugin.js +56 -0
- package/build/cjs/components/animation-frame/AnimationFrame.js +183 -0
- package/build/cjs/components/canvas/Ctx2D.js +200 -0
- package/build/cjs/components/canvas/Ctx2DPrerender.js +72 -0
- package/build/cjs/components/cursor/CustomCursor.js +344 -0
- package/build/cjs/components/dragger/Dragger.js +229 -0
- package/build/cjs/components/dragger/DraggerDirection.js +77 -0
- package/build/cjs/components/dragger/DraggerMove.js +84 -0
- package/build/cjs/components/loading/Preloader.js +229 -0
- package/build/cjs/components/loading/ProgressPreloader.js +377 -0
- package/build/cjs/components/page/Page.js +353 -0
- package/build/cjs/components/scroll/custom-scroll/CustomScroll.js +517 -0
- package/build/cjs/components/scroll/plugins/SmoothScrollDragPlugin.js +178 -0
- package/build/cjs/components/scroll/plugins/SmoothScrollKeyboardPlugin.js +138 -0
- package/build/cjs/components/scroll/scrollable/ScrollEventsBase.js +133 -0
- package/build/cjs/components/scroll/scrollable/ScrollView.js +315 -0
- package/build/cjs/components/scroll/scrollbar/Bar.js +315 -0
- package/build/cjs/components/scroll/scrollbar/ScrollBar.js +206 -0
- package/build/cjs/components/scroll/smooth-scroll/SmoothScroll.js +625 -0
- package/build/cjs/components/scroll/types.js +2 -0
- package/build/cjs/components/split-text/SplitText.js +233 -0
- package/build/cjs/components/text/SplitText.js +329 -0
- package/build/cjs/components/timeline/StaticTimeline.js +137 -0
- package/build/cjs/components/timeline/Timeline.js +190 -0
- package/build/cjs/index.js +87 -0
- package/build/cjs/utils/common/index.js +12 -0
- package/build/cjs/utils/common/mergeWithoutArrays.js +19 -0
- package/build/cjs/utils/common/randID.js +11 -0
- package/build/cjs/utils/common/timeoutCallback.js +17 -0
- package/build/cjs/utils/errors.js +8 -0
- package/build/cjs/utils/listeners/index.js +10 -0
- package/build/cjs/utils/listeners/intersectionObserverSupported.js +11 -0
- package/build/cjs/utils/listeners/onScroll.js +47 -0
- package/build/cjs/utils/math/boundVal.js +16 -0
- package/build/cjs/utils/math/index.js +12 -0
- package/build/cjs/utils/math/lerp.js +15 -0
- package/build/cjs/utils/math/scopeProgress.js +25 -0
- package/build/cjs/utils/types/general.js +2 -0
- package/build/cjs/utils/types/utility.js +2 -0
- package/build/es/app/Application.js +210 -0
- package/build/es/app/events/PageLoad.js +47 -0
- package/build/es/app/events/Viewport.js +232 -0
- package/build/es/base/Callbacks.js +205 -0
- package/build/es/base/Component.js +32 -0
- package/build/es/base/Module.js +225 -0
- package/build/es/base/MutableProp.js +152 -0
- package/build/es/base/Plugin.js +31 -0
- package/build/es/components/animation-frame/AnimationFrame.js +145 -0
- package/build/es/components/canvas/Ctx2D.js +133 -0
- package/build/es/components/canvas/Ctx2DPrerender.js +37 -0
- package/build/es/components/cursor/CustomCursor.js +274 -0
- package/build/es/components/dragger/Dragger.js +175 -0
- package/build/es/components/dragger/DraggerDirection.js +42 -0
- package/build/es/components/dragger/DraggerMove.js +56 -0
- package/build/es/components/loading/Preloader.js +164 -0
- package/build/es/components/loading/ProgressPreloader.js +304 -0
- package/build/es/components/page/Page.js +283 -0
- package/build/es/components/scroll/custom-scroll/CustomScroll.js +486 -0
- package/build/es/components/scroll/plugins/SmoothScrollDragPlugin.js +140 -0
- package/build/es/components/scroll/plugins/SmoothScrollKeyboardPlugin.js +109 -0
- package/build/es/components/scroll/scrollable/ScrollEventsBase.js +79 -0
- package/build/es/components/scroll/scrollable/ScrollView.js +264 -0
- package/build/es/components/scroll/scrollbar/Bar.js +262 -0
- package/build/es/components/scroll/scrollbar/ScrollBar.js +152 -0
- package/build/es/components/scroll/smooth-scroll/SmoothScroll.js +519 -0
- package/build/es/components/scroll/types.js +1 -0
- package/build/es/components/split-text/SplitText.js +199 -0
- package/build/es/components/text/SplitText.js +270 -0
- package/build/es/components/timeline/StaticTimeline.js +92 -0
- package/build/es/components/timeline/Timeline.js +141 -0
- package/build/es/index.js +37 -0
- package/build/es/utils/common/index.js +4 -0
- package/build/es/utils/common/mergeWithoutArrays.js +13 -0
- package/build/es/utils/common/randID.js +7 -0
- package/build/es/utils/common/timeoutCallback.js +14 -0
- package/build/es/utils/errors.js +5 -0
- package/build/es/utils/listeners/index.js +3 -0
- package/build/es/utils/listeners/intersectionObserverSupported.js +8 -0
- package/build/es/utils/listeners/onScroll.js +44 -0
- package/build/es/utils/math/boundVal.js +12 -0
- package/build/es/utils/math/index.js +4 -0
- package/build/es/utils/math/lerp.js +11 -0
- package/build/es/utils/math/scopeProgress.js +22 -0
- package/build/es/utils/types/general.js +1 -0
- package/build/es/utils/types/utility.js +1 -0
- package/build/types/app/Application.d.ts +161 -0
- package/build/types/app/Application.d.ts.map +1 -0
- package/build/types/app/events/PageLoad.d.ts +28 -0
- package/build/types/app/events/PageLoad.d.ts.map +1 -0
- package/build/types/app/events/Viewport.d.ts +137 -0
- package/build/types/app/events/Viewport.d.ts.map +1 -0
- package/build/types/base/Callbacks.d.ts +174 -0
- package/build/types/base/Callbacks.d.ts.map +1 -0
- package/build/types/base/Component.d.ts +48 -0
- package/build/types/base/Component.d.ts.map +1 -0
- package/build/types/base/Module.d.ts +179 -0
- package/build/types/base/Module.d.ts.map +1 -0
- package/build/types/base/MutableProp.d.ts +142 -0
- package/build/types/base/MutableProp.d.ts.map +1 -0
- package/build/types/base/Plugin.d.ts +35 -0
- package/build/types/base/Plugin.d.ts.map +1 -0
- package/build/types/components/animation-frame/AnimationFrame.d.ts +96 -0
- package/build/types/components/animation-frame/AnimationFrame.d.ts.map +1 -0
- package/build/types/components/canvas/Ctx2D.d.ts +111 -0
- package/build/types/components/canvas/Ctx2D.d.ts.map +1 -0
- package/build/types/components/canvas/Ctx2DPrerender.d.ts +41 -0
- package/build/types/components/canvas/Ctx2DPrerender.d.ts.map +1 -0
- package/build/types/components/cursor/CustomCursor.d.ts +181 -0
- package/build/types/components/cursor/CustomCursor.d.ts.map +1 -0
- package/build/types/components/dragger/Dragger.d.ts +120 -0
- package/build/types/components/dragger/Dragger.d.ts.map +1 -0
- package/build/types/components/dragger/DraggerDirection.d.ts +39 -0
- package/build/types/components/dragger/DraggerDirection.d.ts.map +1 -0
- package/build/types/components/dragger/DraggerMove.d.ts +49 -0
- package/build/types/components/dragger/DraggerMove.d.ts.map +1 -0
- package/build/types/components/loading/Preloader.d.ts +107 -0
- package/build/types/components/loading/Preloader.d.ts.map +1 -0
- package/build/types/components/loading/ProgressPreloader.d.ts +166 -0
- package/build/types/components/loading/ProgressPreloader.d.ts.map +1 -0
- package/build/types/components/page/Page.d.ts +126 -0
- package/build/types/components/page/Page.d.ts.map +1 -0
- package/build/types/components/scroll/custom-scroll/CustomScroll.d.ts +322 -0
- package/build/types/components/scroll/custom-scroll/CustomScroll.d.ts.map +1 -0
- package/build/types/components/scroll/plugins/SmoothScrollDragPlugin.d.ts +97 -0
- package/build/types/components/scroll/plugins/SmoothScrollDragPlugin.d.ts.map +1 -0
- package/build/types/components/scroll/plugins/SmoothScrollKeyboardPlugin.d.ts +34 -0
- package/build/types/components/scroll/plugins/SmoothScrollKeyboardPlugin.d.ts.map +1 -0
- package/build/types/components/scroll/scrollable/ScrollEventsBase.d.ts +60 -0
- package/build/types/components/scroll/scrollable/ScrollEventsBase.d.ts.map +1 -0
- package/build/types/components/scroll/scrollable/ScrollView.d.ts +140 -0
- package/build/types/components/scroll/scrollable/ScrollView.d.ts.map +1 -0
- package/build/types/components/scroll/scrollbar/Bar.d.ts +84 -0
- package/build/types/components/scroll/scrollbar/Bar.d.ts.map +1 -0
- package/build/types/components/scroll/scrollbar/ScrollBar.d.ts +109 -0
- package/build/types/components/scroll/scrollbar/ScrollBar.d.ts.map +1 -0
- package/build/types/components/scroll/smooth-scroll/SmoothScroll.d.ts +307 -0
- package/build/types/components/scroll/smooth-scroll/SmoothScroll.d.ts.map +1 -0
- package/build/types/components/scroll/types.d.ts +11 -0
- package/build/types/components/scroll/types.d.ts.map +1 -0
- package/build/types/components/split-text/SplitText.d.ts +118 -0
- package/build/types/components/split-text/SplitText.d.ts.map +1 -0
- package/build/types/components/text/SplitText.d.ts +118 -0
- package/build/types/components/text/SplitText.d.ts.map +1 -0
- package/build/types/components/timeline/StaticTimeline.d.ts +92 -0
- package/build/types/components/timeline/StaticTimeline.d.ts.map +1 -0
- package/build/types/components/timeline/Timeline.d.ts +101 -0
- package/build/types/components/timeline/Timeline.d.ts.map +1 -0
- package/build/types/index.d.ts +38 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/utils/common/index.d.ts +5 -0
- package/build/types/utils/common/index.d.ts.map +1 -0
- package/build/types/utils/common/mergeWithoutArrays.d.ts +6 -0
- package/build/types/utils/common/mergeWithoutArrays.d.ts.map +1 -0
- package/build/types/utils/common/randID.d.ts +5 -0
- package/build/types/utils/common/randID.d.ts.map +1 -0
- package/build/types/utils/common/timeoutCallback.d.ts +6 -0
- package/build/types/utils/common/timeoutCallback.d.ts.map +1 -0
- package/build/types/utils/errors.d.ts +3 -0
- package/build/types/utils/errors.d.ts.map +1 -0
- package/build/types/utils/listeners/index.d.ts +4 -0
- package/build/types/utils/listeners/index.d.ts.map +1 -0
- package/build/types/utils/listeners/intersectionObserverSupported.d.ts +2 -0
- package/build/types/utils/listeners/intersectionObserverSupported.d.ts.map +1 -0
- package/build/types/utils/listeners/onScroll.d.ts +10 -0
- package/build/types/utils/listeners/onScroll.d.ts.map +1 -0
- package/build/types/utils/math/boundVal.d.ts +5 -0
- package/build/types/utils/math/boundVal.d.ts.map +1 -0
- package/build/types/utils/math/index.d.ts +5 -0
- package/build/types/utils/math/index.d.ts.map +1 -0
- package/build/types/utils/math/lerp.d.ts +5 -0
- package/build/types/utils/math/lerp.d.ts.map +1 -0
- package/build/types/utils/math/scopeProgress.d.ts +20 -0
- package/build/types/utils/math/scopeProgress.d.ts.map +1 -0
- package/build/types/utils/types/general.d.ts +7 -0
- package/build/types/utils/types/general.d.ts.map +1 -0
- package/build/types/utils/types/utility.d.ts +14 -0
- package/build/types/utils/types/utility.d.ts.map +1 -0
- package/package.json +88 -82
- package/src/cdn/index.js +3 -0
- package/src/sass/base.scss +3 -0
- package/src/sass/components/cursor/_custom-cursor.scss +63 -0
- package/src/sass/components/index.scss +6 -0
- package/src/sass/components/loading/_preloader.scss +15 -0
- package/src/sass/components/scroll/_scrollbar.scss +73 -0
- package/src/sass/components/scroll/_smooth-scroll.scss +17 -0
- package/src/sass/index.scss +3 -0
- package/src/sass/mixins/_scroll.scss +7 -0
- package/{dist/scss → src/sass}/mixins/_transition.scss +8 -4
- package/src/sass/mixins/_viewport.scss +69 -0
- package/src/sass/mixins/index.scss +3 -0
- package/src/ts/app/Application.ts +350 -0
- package/src/ts/app/events/PageLoad.ts +79 -0
- package/src/ts/app/events/Viewport.ts +365 -0
- package/src/ts/base/Callbacks.ts +380 -0
- package/src/ts/base/Component.ts +83 -0
- package/src/ts/base/Module.ts +385 -0
- package/src/ts/base/MutableProp.ts +242 -0
- package/src/ts/base/Plugin.ts +76 -0
- package/src/ts/components/animation-frame/AnimationFrame.ts +264 -0
- package/src/ts/components/canvas/Ctx2D.ts +260 -0
- package/src/ts/components/canvas/Ctx2DPrerender.ts +96 -0
- package/src/ts/components/cursor/CustomCursor.ts +462 -0
- package/src/ts/components/dragger/Dragger.ts +313 -0
- package/src/ts/components/dragger/DraggerDirection.ts +106 -0
- package/src/ts/components/dragger/DraggerMove.ts +114 -0
- package/src/ts/components/loading/Preloader.ts +279 -0
- package/src/ts/components/loading/ProgressPreloader.ts +484 -0
- package/src/ts/components/page/Page.ts +421 -0
- package/src/ts/components/scroll/plugins/SmoothScrollDragPlugin.ts +251 -0
- package/src/ts/components/scroll/plugins/SmoothScrollKeyboardPlugin.ts +166 -0
- package/src/ts/components/scroll/scrollable/ScrollEventsBase.ts +151 -0
- package/src/ts/components/scroll/scrollable/ScrollView.ts +435 -0
- package/src/ts/components/scroll/scrollbar/Bar.ts +364 -0
- package/src/ts/components/scroll/scrollbar/ScrollBar.ts +292 -0
- package/src/ts/components/scroll/smooth-scroll/SmoothScroll.ts +861 -0
- package/src/ts/components/scroll/types.ts +10 -0
- package/src/ts/components/text/SplitText.ts +418 -0
- package/src/ts/components/timeline/StaticTimeline.ts +197 -0
- package/src/ts/components/timeline/Timeline.ts +256 -0
- package/src/ts/index.ts +94 -0
- package/src/ts/utils/common/index.ts +9 -0
- package/src/ts/utils/common/mergeWithoutArrays.ts +20 -0
- package/src/ts/utils/common/randID.ts +9 -0
- package/src/ts/utils/common/timeoutCallback.ts +16 -0
- package/src/ts/utils/errors.ts +6 -0
- package/src/ts/utils/listeners/index.ts +7 -0
- package/src/ts/utils/listeners/intersectionObserverSupported.ts +10 -0
- package/src/ts/utils/listeners/onScroll.ts +56 -0
- package/src/ts/utils/math/boundVal.ts +15 -0
- package/src/ts/utils/math/index.ts +9 -0
- package/src/ts/utils/math/lerp.ts +16 -0
- package/src/ts/utils/math/scopeProgress.ts +23 -0
- package/src/ts/utils/types/general.ts +7 -0
- package/src/ts/utils/types/utility.ts +34 -0
- package/dist/js/AJAXEvent.js +0 -355
- package/dist/js/Application.js +0 -345
- package/dist/js/ColumnsModule.js +0 -392
- package/dist/js/CursorModule.js +0 -390
- package/dist/js/DraggerModule.js +0 -792
- package/dist/js/Event.js +0 -538
- package/dist/js/FilterModule.js +0 -943
- package/dist/js/FormModule.js +0 -706
- package/dist/js/FrameModule.js +0 -229
- package/dist/js/IntervalModule.js +0 -270
- package/dist/js/KeydownModule.js +0 -293
- package/dist/js/LoadEvent.js +0 -106
- package/dist/js/MenuBaseModule.js +0 -292
- package/dist/js/MenuModule.js +0 -265
- package/dist/js/MenuTimelineModule.js +0 -321
- package/dist/js/Module.js +0 -478
- package/dist/js/PageAjaxModule.js +0 -1010
- package/dist/js/PageLoadMediaPlugin.js +0 -285
- package/dist/js/PageModule.js +0 -440
- package/dist/js/PaginationModule.js +0 -961
- package/dist/js/PaginationScrollPlugin.js +0 -209
- package/dist/js/Plugin.js +0 -114
- package/dist/js/PopupModule.js +0 -942
- package/dist/js/PreloaderModule.js +0 -724
- package/dist/js/ResponsiveProp.js +0 -301
- package/dist/js/ScrollAnchorModule.js +0 -554
- package/dist/js/ScrollAnimateModule.js +0 -419
- package/dist/js/ScrollBarPlugin.js +0 -594
- package/dist/js/ScrollDragPlugin.js +0 -396
- package/dist/js/ScrollModule.js +0 -1071
- package/dist/js/ScrollViewModule.js +0 -388
- package/dist/js/SelectModule.js +0 -860
- package/dist/js/SliderCanvasModule.js +0 -733
- package/dist/js/SliderControlsPlugin.js +0 -247
- package/dist/js/SliderCounterPlugin.js +0 -278
- package/dist/js/SliderDotsPlugin.js +0 -270
- package/dist/js/SliderDragSwipePlugin.js +0 -245
- package/dist/js/SliderIntervalPlugin.js +0 -192
- package/dist/js/SliderKeydownPlugin.js +0 -185
- package/dist/js/SliderModule.js +0 -1062
- package/dist/js/SliderWheelPlugin.js +0 -194
- package/dist/js/TextAnimateModule.js +0 -663
- package/dist/js/TextSplitModule.js +0 -785
- package/dist/js/TimelineBaseModule.js +0 -405
- package/dist/js/TimelineModule.js +0 -494
- package/dist/js/URLEvent.js +0 -239
- package/dist/js/ViewportEvent.js +0 -465
- package/dist/js/WheelEventModule.js +0 -295
- package/dist/js/domChildOf.js +0 -46
- package/dist/js/domChildren.js +0 -47
- package/dist/js/domInsertAfter.js +0 -32
- package/dist/js/domRemoveChildren.js +0 -26
- package/dist/js/easing.js +0 -363
- package/dist/js/eventListenerAdd.js +0 -87
- package/dist/js/eventListenerGet.js +0 -49
- package/dist/js/eventListenerRemove.js +0 -36
- package/dist/js/generateId.js +0 -29
- package/dist/js/getBrowserName.js +0 -60
- package/dist/js/getOsName.js +0 -39
- package/dist/js/getVevetProperties.js +0 -22
- package/dist/js/index.js +0 -519
- package/dist/js/mathScopeProgress.js +0 -32
- package/dist/js/mathSpreadScopeProgress.js +0 -35
- package/dist/js/merge.js +0 -33
- package/dist/js/normalizeWheel.js +0 -97
- package/dist/js/text_animate_module_addons/_composite_elementary.js +0 -196
- package/dist/js/text_animate_module_addons/_elementary.js +0 -88
- package/dist/js/timeoutCallback.js +0 -26
- package/dist/js/vevet.js +0 -10
- package/dist/scss/_prefix.scss +0 -1
- package/dist/scss/classes/_clear.scss +0 -5
- package/dist/scss/classes/_col-row.scss +0 -48
- package/dist/scss/classes/_display.scss +0 -65
- package/dist/scss/classes/_document-reset.scss +0 -28
- package/dist/scss/classes/_document.scss +0 -7
- package/dist/scss/classes/_overflow.scss +0 -39
- package/dist/scss/classes/_position.scss +0 -55
- package/dist/scss/classes/_text.scss +0 -24
- package/dist/scss/classes/_transition.scss +0 -22
- package/dist/scss/classes/_wrap.scss +0 -31
- package/dist/scss/classes/index.scss +0 -14
- package/dist/scss/index.scss +0 -3
- package/dist/scss/mixins/_clear.scss +0 -6
- package/dist/scss/mixins/_display.scss +0 -6
- package/dist/scss/mixins/_form.scss +0 -14
- package/dist/scss/mixins/_position.scss +0 -42
- package/dist/scss/mixins/_reset.scss +0 -17
- package/dist/scss/mixins/_responsive.scss +0 -88
- package/dist/scss/mixins/index.scss +0 -7
- package/dist/scss/modules/columns/_settings.scss +0 -1
- package/dist/scss/modules/columns/index.scss +0 -19
- package/dist/scss/modules/cursor/_settings.scss +0 -7
- package/dist/scss/modules/cursor/index.scss +0 -15
- package/dist/scss/modules/form/_settings.scss +0 -15
- package/dist/scss/modules/form/index.scss +0 -57
- package/dist/scss/modules/index.scss +0 -11
- package/dist/scss/modules/menu/_button.scss +0 -58
- package/dist/scss/modules/menu/_menu.scss +0 -25
- package/dist/scss/modules/menu/_settings.scss +0 -23
- package/dist/scss/modules/menu/index.scss +0 -3
- package/dist/scss/modules/pagination/_settings.scss +0 -6
- package/dist/scss/modules/pagination/index.scss +0 -24
- package/dist/scss/modules/popup/_settings.scss +0 -26
- package/dist/scss/modules/popup/index.scss +0 -294
- package/dist/scss/modules/preloader/_settings.scss +0 -3
- package/dist/scss/modules/preloader/index.scss +0 -19
- package/dist/scss/modules/scroll/_settings.scss +0 -22
- package/dist/scss/modules/scroll/index.scss +0 -94
- package/dist/scss/modules/select/_settings.scss +0 -28
- package/dist/scss/modules/select/index.scss +0 -142
- package/dist/scss/modules/slider/_settings.scss +0 -35
- package/dist/scss/modules/slider/index.scss +0 -153
- package/dist/scss/modules/text/_settings.scss +0 -1
- package/dist/scss/modules/text/index.scss +0 -19
- package/dist/types/types.d.ts +0 -18763
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import isMobileJs from 'ismobilejs';
|
|
2
|
+
import { detect } from 'detect-browser';
|
|
3
|
+
import PCancelable from 'p-cancelable';
|
|
4
|
+
import { Viewport } from './events/Viewport';
|
|
5
|
+
import { PageLoad } from './events/PageLoad';
|
|
6
|
+
/**
|
|
7
|
+
* Vevet Application
|
|
8
|
+
*/
|
|
9
|
+
export class Application {
|
|
10
|
+
/**
|
|
11
|
+
* @example
|
|
12
|
+
* const app = Application({
|
|
13
|
+
* page: 'home'
|
|
14
|
+
* });
|
|
15
|
+
*/
|
|
16
|
+
constructor(data = {}) {
|
|
17
|
+
/**
|
|
18
|
+
* Pages (instances)
|
|
19
|
+
*/
|
|
20
|
+
this._pages = [];
|
|
21
|
+
/**
|
|
22
|
+
* Current Page (instance).
|
|
23
|
+
*/
|
|
24
|
+
this._page = false;
|
|
25
|
+
// check if the application already exists
|
|
26
|
+
if (window.vevetApp) {
|
|
27
|
+
throw new Error('Vevet Application already exists!');
|
|
28
|
+
}
|
|
29
|
+
// set defaults
|
|
30
|
+
this._prop = Object.assign(Object.assign({}, this.defaultProp), data);
|
|
31
|
+
this._prefix = this.prop.prefix;
|
|
32
|
+
// initialize the application
|
|
33
|
+
// Define that you're using Vevet
|
|
34
|
+
this._sayHi();
|
|
35
|
+
// add the application to the window
|
|
36
|
+
window.vevetApp = this;
|
|
37
|
+
// get type of device
|
|
38
|
+
const ifmobile = isMobileJs();
|
|
39
|
+
this._isPhone = ifmobile.phone;
|
|
40
|
+
this.html.classList.toggle(`${this.prefix}phone`, this._isPhone);
|
|
41
|
+
this._isTablet = ifmobile.tablet;
|
|
42
|
+
this.html.classList.toggle(`${this.prefix}tablet`, this._isTablet);
|
|
43
|
+
this._isMobile = ifmobile.phone || ifmobile.tablet;
|
|
44
|
+
this.html.classList.toggle(`${this.prefix}mobile`, this._isMobile);
|
|
45
|
+
this._isDesktop = !this._isMobile;
|
|
46
|
+
this.html.classList.toggle(`${this.prefix}desktop`, this._isDesktop);
|
|
47
|
+
// get browser info
|
|
48
|
+
const browserData = detect();
|
|
49
|
+
// get OS name
|
|
50
|
+
if (browserData === null || browserData === void 0 ? void 0 : browserData.os) {
|
|
51
|
+
const osName = browserData.os.split(' ')[0].toLowerCase();
|
|
52
|
+
this.html.classList.add(`${this.prefix}os-${osName}`);
|
|
53
|
+
this._osName = osName;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this._osName = '';
|
|
57
|
+
}
|
|
58
|
+
// get browser name
|
|
59
|
+
if (browserData === null || browserData === void 0 ? void 0 : browserData.name) {
|
|
60
|
+
const browserName = browserData.name.toLowerCase();
|
|
61
|
+
this.html.classList.add(`${this.prefix}browser-${browserName}`);
|
|
62
|
+
this._browserName = browserName;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this._browserName = '';
|
|
66
|
+
}
|
|
67
|
+
// browserData
|
|
68
|
+
// create default helpers
|
|
69
|
+
this._pageLoad = new PageLoad();
|
|
70
|
+
this._viewport = new Viewport();
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Application properties.
|
|
74
|
+
*/
|
|
75
|
+
get prop() {
|
|
76
|
+
return this._prop;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Default properties.
|
|
80
|
+
*/
|
|
81
|
+
get defaultProp() {
|
|
82
|
+
return {
|
|
83
|
+
tablet: 1199,
|
|
84
|
+
phone: 899,
|
|
85
|
+
prefix: 'v-',
|
|
86
|
+
easing: [0.25, 0.1, 0.25, 1],
|
|
87
|
+
viewportResizeTimeout: 0,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
get prefix() {
|
|
91
|
+
return this._prefix;
|
|
92
|
+
}
|
|
93
|
+
get isPhone() {
|
|
94
|
+
return this._isPhone;
|
|
95
|
+
}
|
|
96
|
+
get isTablet() {
|
|
97
|
+
return this._isTablet;
|
|
98
|
+
}
|
|
99
|
+
get isMobile() {
|
|
100
|
+
return this._isMobile;
|
|
101
|
+
}
|
|
102
|
+
get isDesktop() {
|
|
103
|
+
return this._isDesktop;
|
|
104
|
+
}
|
|
105
|
+
get osName() {
|
|
106
|
+
return this._osName;
|
|
107
|
+
}
|
|
108
|
+
get browserName() {
|
|
109
|
+
return this._browserName;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get document element.
|
|
113
|
+
*/
|
|
114
|
+
get doc() {
|
|
115
|
+
return document;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get HTML element
|
|
119
|
+
*/
|
|
120
|
+
get html() {
|
|
121
|
+
return document.documentElement;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get body element.
|
|
125
|
+
*/
|
|
126
|
+
get body() {
|
|
127
|
+
return document.body;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get an array of existing pages.
|
|
131
|
+
* A new element is added to the array when {@linkcode Vevet.Page.create} is called.
|
|
132
|
+
*/
|
|
133
|
+
get pages() {
|
|
134
|
+
return this._pages;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get the current page instance.
|
|
138
|
+
*/
|
|
139
|
+
get page() {
|
|
140
|
+
return this._page;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Set the current page instance.
|
|
144
|
+
*/
|
|
145
|
+
set page(val) {
|
|
146
|
+
this._page = val;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Action on page created
|
|
150
|
+
*/
|
|
151
|
+
onPageCreated() {
|
|
152
|
+
return new PCancelable((resolve) => {
|
|
153
|
+
if (this._page) {
|
|
154
|
+
this._page.onCreate().then(() => {
|
|
155
|
+
resolve(this.page);
|
|
156
|
+
});
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
setTimeout(() => {
|
|
160
|
+
this.onPageCreated().then(() => {
|
|
161
|
+
resolve(this.page);
|
|
162
|
+
});
|
|
163
|
+
}, 30);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Action on page shown
|
|
168
|
+
*/
|
|
169
|
+
onPageShown() {
|
|
170
|
+
return new PCancelable((resolve) => {
|
|
171
|
+
this.onPageCreated().then(() => {
|
|
172
|
+
if (this._page) {
|
|
173
|
+
this._page.onShow().then(() => {
|
|
174
|
+
resolve(this.page);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
get pageLoad() {
|
|
181
|
+
return this._pageLoad;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Action on page laoded
|
|
185
|
+
*/
|
|
186
|
+
onPageLoaded() {
|
|
187
|
+
return new PCancelable((resolve) => {
|
|
188
|
+
this._pageLoad.onLoaded(() => {
|
|
189
|
+
resolve();
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
get viewport() {
|
|
194
|
+
return this._viewport;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Defines that you're using Vevet.
|
|
198
|
+
*/
|
|
199
|
+
_sayHi() {
|
|
200
|
+
const msg = 'Vevet';
|
|
201
|
+
const style = [
|
|
202
|
+
'padding: 1rem 1.5rem;',
|
|
203
|
+
'background: #5F2580;',
|
|
204
|
+
'font: 1rem/1 Arial;',
|
|
205
|
+
'color: #ffffff;',
|
|
206
|
+
].join('');
|
|
207
|
+
// eslint-disable-next-line no-console
|
|
208
|
+
console.log('%c%s', style, msg);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Callbacks } from '../../base/Callbacks';
|
|
2
|
+
/**
|
|
3
|
+
* Callbacks on page loaded.
|
|
4
|
+
*/
|
|
5
|
+
export class PageLoad extends Callbacks {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(false);
|
|
8
|
+
this._loaded = false;
|
|
9
|
+
this._init();
|
|
10
|
+
}
|
|
11
|
+
get loaded() {
|
|
12
|
+
return this._loaded;
|
|
13
|
+
}
|
|
14
|
+
_setEvents() {
|
|
15
|
+
if (document.readyState === 'complete') {
|
|
16
|
+
this._handleLoaded();
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
window.addEventListener('load', () => {
|
|
20
|
+
this._handleLoaded();
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* When the page is loaded.
|
|
26
|
+
*/
|
|
27
|
+
_handleLoaded() {
|
|
28
|
+
const app = this._app;
|
|
29
|
+
const { prefix } = app;
|
|
30
|
+
this._loaded = true;
|
|
31
|
+
app.html.classList.remove(`${prefix}loading`);
|
|
32
|
+
app.body.classList.remove(`${prefix}loading`);
|
|
33
|
+
app.html.classList.add(`${prefix}loaded`);
|
|
34
|
+
this.tbt('', false);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Add a callback on page load.
|
|
38
|
+
* If the page is already loaded, the callback will be immediately triggered.
|
|
39
|
+
*/
|
|
40
|
+
onLoaded(callback) {
|
|
41
|
+
if (this.loaded) {
|
|
42
|
+
callback();
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
return this.add('', callback.bind(this));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { Callbacks } from '../../base/Callbacks';
|
|
2
|
+
import { timeoutCallback } from '../../utils/common';
|
|
3
|
+
/**
|
|
4
|
+
* Viewport size types
|
|
5
|
+
*/
|
|
6
|
+
var SizeTypes;
|
|
7
|
+
(function (SizeTypes) {
|
|
8
|
+
SizeTypes["Desktop"] = "desktop";
|
|
9
|
+
SizeTypes["Tablet"] = "tablet";
|
|
10
|
+
SizeTypes["Phone"] = "phone";
|
|
11
|
+
})(SizeTypes || (SizeTypes = {}));
|
|
12
|
+
/**
|
|
13
|
+
* Orientation types
|
|
14
|
+
*/
|
|
15
|
+
var OrientationTypes;
|
|
16
|
+
(function (OrientationTypes) {
|
|
17
|
+
OrientationTypes["Landscape"] = "landscape";
|
|
18
|
+
OrientationTypes["Portrait"] = "portrait";
|
|
19
|
+
})(OrientationTypes || (OrientationTypes = {}));
|
|
20
|
+
/**
|
|
21
|
+
* Callbacks on window resize.
|
|
22
|
+
* Here the names of the OS, Browser, and Device are also available. <br>
|
|
23
|
+
*/
|
|
24
|
+
export class Viewport extends Callbacks {
|
|
25
|
+
constructor() {
|
|
26
|
+
super(false);
|
|
27
|
+
this._width = 0;
|
|
28
|
+
this._height = 0;
|
|
29
|
+
this._prevSize = { w: 0, h: 0 };
|
|
30
|
+
this._isDesktop = false;
|
|
31
|
+
this._isTablet = false;
|
|
32
|
+
this._isPhone = false;
|
|
33
|
+
this._init();
|
|
34
|
+
}
|
|
35
|
+
get width() {
|
|
36
|
+
return this._width;
|
|
37
|
+
}
|
|
38
|
+
get height() {
|
|
39
|
+
return this._height;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get VW value
|
|
43
|
+
*/
|
|
44
|
+
get vw() {
|
|
45
|
+
return this.width / 100;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get VH value
|
|
49
|
+
*/
|
|
50
|
+
get vh() {
|
|
51
|
+
return this.height / 100;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get previous Viewport size
|
|
55
|
+
*/
|
|
56
|
+
get prevSize() {
|
|
57
|
+
return this._prevSize;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* If width greater than height.
|
|
61
|
+
*/
|
|
62
|
+
get isLandscape() {
|
|
63
|
+
return this.width > this.height;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* If width less than height.
|
|
67
|
+
*/
|
|
68
|
+
get isPortrait() {
|
|
69
|
+
return this.width < this.height;
|
|
70
|
+
}
|
|
71
|
+
get isDesktop() {
|
|
72
|
+
return this._isDesktop;
|
|
73
|
+
}
|
|
74
|
+
get isTablet() {
|
|
75
|
+
return this._isTablet;
|
|
76
|
+
}
|
|
77
|
+
get isPhone() {
|
|
78
|
+
return this._isPhone;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Device pixel ratio
|
|
82
|
+
*/
|
|
83
|
+
get dpr() {
|
|
84
|
+
if (typeof window.devicePixelRatio !== 'undefined') {
|
|
85
|
+
return window.devicePixelRatio;
|
|
86
|
+
}
|
|
87
|
+
return 1;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Device pixel ratio. For non-mobile devices it is always 1.
|
|
91
|
+
*/
|
|
92
|
+
get lowerDesktopDPR() {
|
|
93
|
+
if (this._app.isDesktop) {
|
|
94
|
+
return 1;
|
|
95
|
+
}
|
|
96
|
+
return this.dpr;
|
|
97
|
+
}
|
|
98
|
+
// Extra constructor
|
|
99
|
+
_constructor() {
|
|
100
|
+
super._constructor();
|
|
101
|
+
this._setValues();
|
|
102
|
+
}
|
|
103
|
+
// Set events on resize
|
|
104
|
+
_setEvents() {
|
|
105
|
+
window.addEventListener('resize', () => {
|
|
106
|
+
timeoutCallback(() => {
|
|
107
|
+
this._onResize();
|
|
108
|
+
}, this._app.prop.viewportResizeTimeout);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Set viewport values
|
|
113
|
+
*/
|
|
114
|
+
_setValues() {
|
|
115
|
+
const app = this._app;
|
|
116
|
+
const { html } = app;
|
|
117
|
+
const appProp = app.prop;
|
|
118
|
+
// set sizes
|
|
119
|
+
this._width = html.clientWidth;
|
|
120
|
+
this._height = html.clientHeight;
|
|
121
|
+
this._prevSize = {
|
|
122
|
+
w: this._width,
|
|
123
|
+
h: this._height,
|
|
124
|
+
};
|
|
125
|
+
// size values
|
|
126
|
+
const { width } = this;
|
|
127
|
+
this._isDesktop = width >= appProp.tablet;
|
|
128
|
+
this._isTablet = width <= appProp.tablet && width > appProp.phone;
|
|
129
|
+
this._isPhone = width <= appProp.phone;
|
|
130
|
+
// update other values
|
|
131
|
+
this._updateClasses();
|
|
132
|
+
this._updateCSSVars();
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Change classes of the document element.
|
|
136
|
+
*/
|
|
137
|
+
_updateClasses() {
|
|
138
|
+
// set viewport type
|
|
139
|
+
const viewportSizeTypes = [
|
|
140
|
+
SizeTypes.Desktop,
|
|
141
|
+
SizeTypes.Tablet,
|
|
142
|
+
SizeTypes.Phone,
|
|
143
|
+
];
|
|
144
|
+
if (this.isDesktop) {
|
|
145
|
+
this._updateBreakpointClasses(SizeTypes.Desktop, viewportSizeTypes);
|
|
146
|
+
}
|
|
147
|
+
else if (this.isTablet) {
|
|
148
|
+
this._updateBreakpointClasses(SizeTypes.Tablet, viewportSizeTypes);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
this._updateBreakpointClasses(SizeTypes.Phone, viewportSizeTypes);
|
|
152
|
+
}
|
|
153
|
+
// set orientation type
|
|
154
|
+
const orientationTypes = [
|
|
155
|
+
OrientationTypes.Landscape,
|
|
156
|
+
OrientationTypes.Portrait,
|
|
157
|
+
];
|
|
158
|
+
if (this.isLandscape) {
|
|
159
|
+
this._updateBreakpointClasses(OrientationTypes.Landscape, orientationTypes);
|
|
160
|
+
}
|
|
161
|
+
else if (this.isPortrait) {
|
|
162
|
+
this._updateBreakpointClasses(OrientationTypes.Portrait, orientationTypes);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
this._updateBreakpointClasses('', orientationTypes);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Change breakpoint classes of the document element.
|
|
170
|
+
*/
|
|
171
|
+
_updateBreakpointClasses(activeType, types) {
|
|
172
|
+
const { html } = this._app;
|
|
173
|
+
const { prefix } = this._app;
|
|
174
|
+
types.forEach((type) => {
|
|
175
|
+
if (type === activeType) {
|
|
176
|
+
html.classList.add(`${prefix}viewport-${type}`);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
html.classList.remove(`${prefix}viewport-${type}`);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Update CSS vars
|
|
185
|
+
*/
|
|
186
|
+
_updateCSSVars() {
|
|
187
|
+
const { html } = this._app;
|
|
188
|
+
html.style.setProperty('--vw', `${this.vw}px`);
|
|
189
|
+
html.style.setProperty('--vh', `${this.vh}px`);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Launch callbacks on resize.
|
|
193
|
+
*/
|
|
194
|
+
_onResize() {
|
|
195
|
+
// copy previous values
|
|
196
|
+
const prevWidth = this._prevSize.w;
|
|
197
|
+
const prevHeight = this._prevSize.h;
|
|
198
|
+
// set viewport values
|
|
199
|
+
this._setValues();
|
|
200
|
+
// copy size
|
|
201
|
+
const { width, height } = this;
|
|
202
|
+
// get changes in viewport
|
|
203
|
+
const changes = {
|
|
204
|
+
widthChanged: width !== prevWidth,
|
|
205
|
+
heightChanged: height !== prevHeight,
|
|
206
|
+
orientationChanged: (width > height) !== (prevWidth > prevHeight),
|
|
207
|
+
};
|
|
208
|
+
// only when width is changed
|
|
209
|
+
if (width !== prevWidth && height === prevHeight) {
|
|
210
|
+
this.tbt('w_', changes);
|
|
211
|
+
}
|
|
212
|
+
// only when height is changed
|
|
213
|
+
if (height !== prevHeight && width === prevWidth) {
|
|
214
|
+
this.tbt('h_', changes);
|
|
215
|
+
}
|
|
216
|
+
// when height & width are changed
|
|
217
|
+
if (width !== prevWidth && height !== prevHeight) {
|
|
218
|
+
this.tbt('wh', changes);
|
|
219
|
+
this.tbt('hw', changes);
|
|
220
|
+
}
|
|
221
|
+
// when width is changed
|
|
222
|
+
if (width !== prevWidth) {
|
|
223
|
+
this.tbt('w', changes);
|
|
224
|
+
}
|
|
225
|
+
// when height changed
|
|
226
|
+
if (height !== prevHeight) {
|
|
227
|
+
this.tbt('h', changes);
|
|
228
|
+
}
|
|
229
|
+
// on any change
|
|
230
|
+
this.tbt('', changes);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { timeoutCallback, randID } from '../utils/common';
|
|
2
|
+
/**
|
|
3
|
+
* A class for callbacks' manipulation.
|
|
4
|
+
*/
|
|
5
|
+
export class Callbacks {
|
|
6
|
+
/**
|
|
7
|
+
* @example
|
|
8
|
+
* const callback = new Callbacks();
|
|
9
|
+
*/
|
|
10
|
+
constructor(callInit = true) {
|
|
11
|
+
this._app = window.vevetApp;
|
|
12
|
+
this._callbacks = [];
|
|
13
|
+
// initialize callbacks
|
|
14
|
+
if (callInit) {
|
|
15
|
+
this._init();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get all callbacks
|
|
20
|
+
*/
|
|
21
|
+
get callbacks() {
|
|
22
|
+
return this._callbacks;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Initialize the class.
|
|
26
|
+
*/
|
|
27
|
+
_init() {
|
|
28
|
+
this._constructor();
|
|
29
|
+
this._setEvents();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* An empty method that is called in {@linkcode Callbacks._init}.
|
|
33
|
+
*/
|
|
34
|
+
_constructor() {
|
|
35
|
+
// code
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* An empty method that is called in {@linkcode Callbacks._init}.
|
|
39
|
+
*/
|
|
40
|
+
_setEvents() {
|
|
41
|
+
// code
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Adds a callback
|
|
45
|
+
* @param target - Callback target name
|
|
46
|
+
* @param func - Callback function
|
|
47
|
+
* @param data - Callback data
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* const onTarget = callback.add("target-name", () => {
|
|
51
|
+
* alert("callback");
|
|
52
|
+
* });
|
|
53
|
+
*/
|
|
54
|
+
add(target, func, data = {}) {
|
|
55
|
+
const id = randID('callback');
|
|
56
|
+
const obj = {
|
|
57
|
+
id,
|
|
58
|
+
on: true,
|
|
59
|
+
data: Object.assign({ target,
|
|
60
|
+
// @ts-ignore
|
|
61
|
+
do: func }, data),
|
|
62
|
+
};
|
|
63
|
+
this._callbacks.push(obj);
|
|
64
|
+
this._onAdd(id);
|
|
65
|
+
return {
|
|
66
|
+
id,
|
|
67
|
+
remove: this.remove.bind(this, id),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Use it to implement some actions after adding a callback.
|
|
72
|
+
*/
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
74
|
+
_onAdd(id) {
|
|
75
|
+
// code
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Remove a callback.
|
|
79
|
+
*/
|
|
80
|
+
remove(id, removeProtected = false) {
|
|
81
|
+
// remove the callback and get new ones
|
|
82
|
+
let removed = false;
|
|
83
|
+
const newCallbacks = this._callbacks.filter((callback) => {
|
|
84
|
+
// if not ID overlap
|
|
85
|
+
if (callback.id !== id) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
// to be removed
|
|
89
|
+
const { data } = callback;
|
|
90
|
+
if (data.protected && !removeProtected) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
this._onRemove(id);
|
|
94
|
+
removed = true;
|
|
95
|
+
return false;
|
|
96
|
+
});
|
|
97
|
+
// replace the callbacks' array
|
|
98
|
+
this._callbacks = newCallbacks;
|
|
99
|
+
// return results
|
|
100
|
+
return removed;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Use it to implement some actions after removing a callback.
|
|
104
|
+
*/
|
|
105
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
106
|
+
_onRemove(id) {
|
|
107
|
+
// code
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Remove all callbacks.
|
|
111
|
+
*/
|
|
112
|
+
removeAll(removeProtected = false) {
|
|
113
|
+
while (this._callbacks.length > 0) {
|
|
114
|
+
this.remove(this._callbacks[0].id, removeProtected);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Enable/disable a callback.
|
|
119
|
+
* @param id - ID of the callback
|
|
120
|
+
* @param enabled - True to enable, false to disable.
|
|
121
|
+
*/
|
|
122
|
+
turn(id, enabled = true) {
|
|
123
|
+
const callback = this.get(id);
|
|
124
|
+
if (callback) {
|
|
125
|
+
callback.on = enabled;
|
|
126
|
+
this._onTurn(id);
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Use it to implement some actions after enabling or disabling a callback.
|
|
133
|
+
*/
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
135
|
+
_onTurn(id) {
|
|
136
|
+
// code
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get a callback by id
|
|
140
|
+
*/
|
|
141
|
+
get(id) {
|
|
142
|
+
const callbacks = this._callbacks.filter((callback) => callback.id === id);
|
|
143
|
+
if (callbacks.length > 0) {
|
|
144
|
+
return callbacks[0];
|
|
145
|
+
}
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Trigger a callback. It will work only if the callback is enabled.
|
|
150
|
+
*/
|
|
151
|
+
_trigger(callback, arg) {
|
|
152
|
+
// check if enabled
|
|
153
|
+
if (!callback.on) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const { timeout, once } = callback.data;
|
|
157
|
+
const func = callback.data.do;
|
|
158
|
+
// launch
|
|
159
|
+
if (timeout) {
|
|
160
|
+
if (arg) {
|
|
161
|
+
timeoutCallback(this._triggerFunc.bind(this, func, arg), timeout);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
timeoutCallback(this._triggerFunc.bind(this, func, false), timeout);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else if (arg) {
|
|
168
|
+
this._triggerFunc(func, arg);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
this._triggerFunc(func, false);
|
|
172
|
+
}
|
|
173
|
+
// remove once-callback
|
|
174
|
+
if (once) {
|
|
175
|
+
this.remove(callback.id);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Launch a callback's function
|
|
180
|
+
*/
|
|
181
|
+
_triggerFunc(func, arg) {
|
|
182
|
+
if (arg) {
|
|
183
|
+
func(arg);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
func();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Trigger all enabled callbacks under a certain target name. (TBT: Trigger by target).
|
|
191
|
+
*/
|
|
192
|
+
tbt(target, arg) {
|
|
193
|
+
this._callbacks.forEach((callback) => {
|
|
194
|
+
if (callback.data.target === target) {
|
|
195
|
+
this._trigger(callback, arg);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Destroy the callbacks
|
|
201
|
+
*/
|
|
202
|
+
destroy() {
|
|
203
|
+
this.removeAll(true);
|
|
204
|
+
}
|
|
205
|
+
}
|