@nascentdigital/funnel-core 4.4.4
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/dist/app/AppConfig.d.ts +41 -0
- package/dist/app/AppConfig.js +93 -0
- package/dist/app/BrandConfig.d.ts +13 -0
- package/dist/app/BrandConfig.js +2 -0
- package/dist/app/FeaturesConfig.d.ts +6 -0
- package/dist/app/FeaturesConfig.js +2 -0
- package/dist/app/RegionsConfig.d.ts +43 -0
- package/dist/app/RegionsConfig.js +113 -0
- package/dist/app/UIConfig.d.ts +4 -0
- package/dist/app/UIConfig.js +2 -0
- package/dist/app/index.d.ts +5 -0
- package/dist/app/index.js +21 -0
- package/dist/consent/ConsentCategory.d.ts +12 -0
- package/dist/consent/ConsentCategory.js +28 -0
- package/dist/consent/ConsentService.d.ts +15 -0
- package/dist/consent/ConsentService.js +37 -0
- package/dist/consent/index.d.ts +2 -0
- package/dist/consent/index.js +18 -0
- package/dist/errors/IsometricError.d.ts +19 -0
- package/dist/errors/IsometricError.js +30 -0
- package/dist/errors/IsometricErrorModule.d.ts +11 -0
- package/dist/errors/IsometricErrorModule.js +2 -0
- package/dist/errors/IsometricErrorUtils.d.ts +9 -0
- package/dist/errors/IsometricErrorUtils.js +85 -0
- package/dist/errors/SerializedIsometricError.d.ts +10 -0
- package/dist/errors/SerializedIsometricError.js +15 -0
- package/dist/errors/api/ApiError.d.ts +15 -0
- package/dist/errors/api/ApiError.js +23 -0
- package/dist/errors/api/ApiErrors.d.ts +7 -0
- package/dist/errors/api/ApiErrors.js +67 -0
- package/dist/errors/api/ArgumentError.d.ts +7 -0
- package/dist/errors/api/ArgumentError.js +18 -0
- package/dist/errors/api/ConcurrencyError.d.ts +4 -0
- package/dist/errors/api/ConcurrencyError.js +11 -0
- package/dist/errors/api/ConflictError.d.ts +4 -0
- package/dist/errors/api/ConflictError.js +11 -0
- package/dist/errors/api/DependencyError.d.ts +4 -0
- package/dist/errors/api/DependencyError.js +11 -0
- package/dist/errors/api/IllegalStateError.d.ts +4 -0
- package/dist/errors/api/IllegalStateError.js +11 -0
- package/dist/errors/api/InvalidOperationError.d.ts +4 -0
- package/dist/errors/api/InvalidOperationError.js +11 -0
- package/dist/errors/api/NotAuthenticatedError.d.ts +4 -0
- package/dist/errors/api/NotAuthenticatedError.js +11 -0
- package/dist/errors/api/NotAuthorizedError.d.ts +4 -0
- package/dist/errors/api/NotAuthorizedError.js +11 -0
- package/dist/errors/api/NotAvailableError.d.ts +4 -0
- package/dist/errors/api/NotAvailableError.js +11 -0
- package/dist/errors/api/NotFoundError.d.ts +4 -0
- package/dist/errors/api/NotFoundError.js +11 -0
- package/dist/errors/api/NotImplementedError.d.ts +4 -0
- package/dist/errors/api/NotImplementedError.js +11 -0
- package/dist/errors/api/OfflineError.d.ts +4 -0
- package/dist/errors/api/OfflineError.js +11 -0
- package/dist/errors/api/RangeError.d.ts +4 -0
- package/dist/errors/api/RangeError.js +11 -0
- package/dist/errors/api/ServerError.d.ts +4 -0
- package/dist/errors/api/ServerError.js +11 -0
- package/dist/errors/api/TimeoutError.d.ts +4 -0
- package/dist/errors/api/TimeoutError.js +11 -0
- package/dist/errors/api/index.d.ts +16 -0
- package/dist/errors/api/index.js +32 -0
- package/dist/errors/index.d.ts +5 -0
- package/dist/errors/index.js +26 -0
- package/dist/forms/FormModel.d.ts +47 -0
- package/dist/forms/FormModel.js +149 -0
- package/dist/forms/Forms.d.ts +15 -0
- package/dist/forms/Forms.js +35 -0
- package/dist/forms/IFormService.d.ts +6 -0
- package/dist/forms/IFormService.js +2 -0
- package/dist/forms/TranslateSchema.d.ts +8 -0
- package/dist/forms/TranslateSchema.js +2 -0
- package/dist/forms/index.d.ts +4 -0
- package/dist/forms/index.js +20 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +49 -0
- package/dist/regionalization/Country.d.ts +266 -0
- package/dist/regionalization/Country.js +338 -0
- package/dist/regionalization/Language.d.ts +199 -0
- package/dist/regionalization/Language.js +237 -0
- package/dist/regionalization/Locale.d.ts +28 -0
- package/dist/regionalization/Locale.js +49 -0
- package/dist/regionalization/Localized.d.ts +10 -0
- package/dist/regionalization/Localized.js +36 -0
- package/dist/regionalization/LocalizedCopy.d.ts +9 -0
- package/dist/regionalization/LocalizedCopy.js +26 -0
- package/dist/regionalization/Regionalization.d.ts +50 -0
- package/dist/regionalization/Regionalization.js +260 -0
- package/dist/regionalization/Regions.d.ts +2 -0
- package/dist/regionalization/Regions.js +2 -0
- package/dist/regionalization/index.d.ts +7 -0
- package/dist/regionalization/index.js +23 -0
- package/dist/schema/Asset.d.ts +23 -0
- package/dist/schema/Asset.js +36 -0
- package/dist/schema/AssetScope.d.ts +75 -0
- package/dist/schema/AssetScope.js +146 -0
- package/dist/schema/Block.d.ts +105 -0
- package/dist/schema/Block.js +122 -0
- package/dist/schema/ChangeSet.d.ts +108 -0
- package/dist/schema/ChangeSet.js +187 -0
- package/dist/schema/Collection.d.ts +197 -0
- package/dist/schema/Collection.js +165 -0
- package/dist/schema/CollectionModel.d.ts +30 -0
- package/dist/schema/CollectionModel.js +383 -0
- package/dist/schema/CollectionSnapshot.d.ts +11 -0
- package/dist/schema/CollectionSnapshot.js +12 -0
- package/dist/schema/Fields.d.ts +31 -0
- package/dist/schema/Fields.js +21 -0
- package/dist/schema/Form.d.ts +31 -0
- package/dist/schema/Form.js +23 -0
- package/dist/schema/LinkedCollectionModel.d.ts +9 -0
- package/dist/schema/LinkedCollectionModel.js +19 -0
- package/dist/schema/LinkedData.d.ts +44 -0
- package/dist/schema/LinkedData.js +288 -0
- package/dist/schema/LinkedPageModel.d.ts +11 -0
- package/dist/schema/LinkedPageModel.js +26 -0
- package/dist/schema/Optional.d.ts +23 -0
- package/dist/schema/Optional.js +34 -0
- package/dist/schema/Page.d.ts +299 -0
- package/dist/schema/Page.js +244 -0
- package/dist/schema/PageModel.d.ts +58 -0
- package/dist/schema/PageModel.js +881 -0
- package/dist/schema/PageQuery.d.ts +60 -0
- package/dist/schema/PageQuery.js +116 -0
- package/dist/schema/PageRoute.d.ts +7 -0
- package/dist/schema/PageRoute.js +48 -0
- package/dist/schema/PageSnapshot.d.ts +11 -0
- package/dist/schema/PageSnapshot.js +12 -0
- package/dist/schema/Section.d.ts +71 -0
- package/dist/schema/Section.js +35 -0
- package/dist/schema/Seo.d.ts +13 -0
- package/dist/schema/Seo.js +25 -0
- package/dist/schema/Site.d.ts +40 -0
- package/dist/schema/Site.js +87 -0
- package/dist/schema/SiteModel.d.ts +5 -0
- package/dist/schema/SiteModel.js +10 -0
- package/dist/schema/Tag.d.ts +28 -0
- package/dist/schema/Tag.js +59 -0
- package/dist/schema/TagGroup.d.ts +26 -0
- package/dist/schema/TagGroup.js +64 -0
- package/dist/schema/field/Field.d.ts +179 -0
- package/dist/schema/field/Field.js +309 -0
- package/dist/schema/field/base/AssetField.d.ts +148 -0
- package/dist/schema/field/base/AssetField.js +206 -0
- package/dist/schema/field/base/BooleanField.d.ts +21 -0
- package/dist/schema/field/base/BooleanField.js +38 -0
- package/dist/schema/field/base/CollectionField.d.ts +34 -0
- package/dist/schema/field/base/CollectionField.js +85 -0
- package/dist/schema/field/base/DateField.d.ts +21 -0
- package/dist/schema/field/base/DateField.js +37 -0
- package/dist/schema/field/base/DynamicPagesField.d.ts +36 -0
- package/dist/schema/field/base/DynamicPagesField.js +50 -0
- package/dist/schema/field/base/EmbeddedVideoField.d.ts +45 -0
- package/dist/schema/field/base/EmbeddedVideoField.js +176 -0
- package/dist/schema/field/base/EnumField.d.ts +40 -0
- package/dist/schema/field/base/EnumField.js +131 -0
- package/dist/schema/field/base/FormField.d.ts +25 -0
- package/dist/schema/field/base/FormField.js +48 -0
- package/dist/schema/field/base/LinkField.d.ts +103 -0
- package/dist/schema/field/base/LinkField.js +201 -0
- package/dist/schema/field/base/PageField.d.ts +46 -0
- package/dist/schema/field/base/PageField.js +83 -0
- package/dist/schema/field/base/RichTextField.d.ts +71 -0
- package/dist/schema/field/base/RichTextField.js +196 -0
- package/dist/schema/field/base/TextField.d.ts +33 -0
- package/dist/schema/field/base/TextField.js +86 -0
- package/dist/schema/field/base/TimestampField.d.ts +25 -0
- package/dist/schema/field/base/TimestampField.js +41 -0
- package/dist/schema/field/base/index.d.ts +13 -0
- package/dist/schema/field/base/index.js +29 -0
- package/dist/schema/field/composite/ListField.d.ts +47 -0
- package/dist/schema/field/composite/ListField.js +107 -0
- package/dist/schema/field/composite/ObjectField.d.ts +56 -0
- package/dist/schema/field/composite/ObjectField.js +19 -0
- package/dist/schema/field/composite/index.d.ts +2 -0
- package/dist/schema/field/composite/index.js +18 -0
- package/dist/schema/field/index.d.ts +3 -0
- package/dist/schema/field/index.js +19 -0
- package/dist/schema/index.d.ts +25 -0
- package/dist/schema/index.js +41 -0
- package/dist/services/EventBus.d.ts +17 -0
- package/dist/services/EventBus.js +37 -0
- package/dist/services/humanVerification/IHumanVerification.d.ts +8 -0
- package/dist/services/humanVerification/IHumanVerification.js +2 -0
- package/dist/services/humanVerification/index.d.ts +1 -0
- package/dist/services/humanVerification/index.js +17 -0
- package/dist/services/index.d.ts +3 -0
- package/dist/services/index.js +19 -0
- package/dist/services/leadGen/Contact.d.ts +40 -0
- package/dist/services/leadGen/Contact.js +38 -0
- package/dist/services/leadGen/ILeadGen.d.ts +16 -0
- package/dist/services/leadGen/ILeadGen.js +2 -0
- package/dist/services/leadGen/index.d.ts +2 -0
- package/dist/services/leadGen/index.js +18 -0
- package/dist/types/BoxedValue.d.ts +3 -0
- package/dist/types/BoxedValue.js +2 -0
- package/dist/types/Callback.d.ts +9 -0
- package/dist/types/Callback.js +2 -0
- package/dist/types/DateString.d.ts +35 -0
- package/dist/types/DateString.js +172 -0
- package/dist/types/FilterConditionally.d.ts +3 -0
- package/dist/types/FilterConditionally.js +2 -0
- package/dist/types/MaybeConditionalValue.d.ts +8 -0
- package/dist/types/MaybeConditionalValue.js +12 -0
- package/dist/types/Ordinal.d.ts +17 -0
- package/dist/types/Ordinal.js +38 -0
- package/dist/types/OverridableStringUnion.d.ts +2 -0
- package/dist/types/OverridableStringUnion.js +2 -0
- package/dist/types/PartialBy.d.ts +1 -0
- package/dist/types/PartialBy.js +2 -0
- package/dist/types/PickData.d.ts +6 -0
- package/dist/types/PickData.js +2 -0
- package/dist/types/Provider.d.ts +4 -0
- package/dist/types/Provider.js +2 -0
- package/dist/types/RequiredBy.d.ts +1 -0
- package/dist/types/RequiredBy.js +2 -0
- package/dist/types/Result.d.ts +16 -0
- package/dist/types/Result.js +2 -0
- package/dist/types/Timestamp.d.ts +17 -0
- package/dist/types/Timestamp.js +57 -0
- package/dist/types/Transform.d.ts +4 -0
- package/dist/types/Transform.js +2 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.js +30 -0
- package/dist/ui/Accessible.d.ts +5 -0
- package/dist/ui/Accessible.js +15 -0
- package/dist/ui/BlockThemes.d.ts +19 -0
- package/dist/ui/BlockThemes.js +29 -0
- package/dist/ui/ColorMode.d.ts +12 -0
- package/dist/ui/ColorMode.js +49 -0
- package/dist/ui/File.d.ts +43 -0
- package/dist/ui/File.js +55 -0
- package/dist/ui/FileType.d.ts +8 -0
- package/dist/ui/FileType.js +48 -0
- package/dist/ui/ImageSource.d.ts +12 -0
- package/dist/ui/ImageSource.js +48 -0
- package/dist/ui/MimeType.d.ts +28 -0
- package/dist/ui/MimeType.js +110 -0
- package/dist/ui/Placement.d.ts +21 -0
- package/dist/ui/Placement.js +135 -0
- package/dist/ui/Position.d.ts +6 -0
- package/dist/ui/Position.js +42 -0
- package/dist/ui/Selector.d.ts +6 -0
- package/dist/ui/Selector.js +23 -0
- package/dist/ui/SemanticColor.d.ts +8 -0
- package/dist/ui/SemanticColor.js +237 -0
- package/dist/ui/Visual.d.ts +24 -0
- package/dist/ui/Visual.js +66 -0
- package/dist/ui/block-layout/BlockLayout.d.ts +99 -0
- package/dist/ui/block-layout/BlockLayout.js +286 -0
- package/dist/ui/block-layout/index.d.ts +1 -0
- package/dist/ui/block-layout/index.js +17 -0
- package/dist/ui/browser/BlurHasher.d.ts +13 -0
- package/dist/ui/browser/BlurHasher.js +76 -0
- package/dist/ui/browser/Browser.d.ts +107 -0
- package/dist/ui/browser/Browser.js +313 -0
- package/dist/ui/browser/ImageProxy.d.ts +30 -0
- package/dist/ui/browser/ImageProxy.js +132 -0
- package/dist/ui/browser/InputEvent.d.ts +13 -0
- package/dist/ui/browser/InputEvent.js +2 -0
- package/dist/ui/browser/SVGProxy.d.ts +9 -0
- package/dist/ui/browser/SVGProxy.js +59 -0
- package/dist/ui/browser/VideoProxy.d.ts +42 -0
- package/dist/ui/browser/VideoProxy.js +235 -0
- package/dist/ui/browser/index.d.ts +6 -0
- package/dist/ui/browser/index.js +22 -0
- package/dist/ui/fields/Field.d.ts +80 -0
- package/dist/ui/fields/Field.js +298 -0
- package/dist/ui/fields/FieldList.d.ts +80 -0
- package/dist/ui/fields/FieldList.js +421 -0
- package/dist/ui/fields/FieldListValidator.d.ts +9 -0
- package/dist/ui/fields/FieldListValidator.js +37 -0
- package/dist/ui/fields/FieldModel.d.ts +15 -0
- package/dist/ui/fields/FieldModel.js +28 -0
- package/dist/ui/fields/FieldSerializer.d.ts +13 -0
- package/dist/ui/fields/FieldSerializer.js +71 -0
- package/dist/ui/fields/FieldValidator.d.ts +19 -0
- package/dist/ui/fields/FieldValidator.js +98 -0
- package/dist/ui/fields/ObjectField.d.ts +75 -0
- package/dist/ui/fields/ObjectField.js +288 -0
- package/dist/ui/fields/errors.json +44 -0
- package/dist/ui/fields/index.d.ts +7 -0
- package/dist/ui/fields/index.js +23 -0
- package/dist/ui/fields/validators/AssetValidator.d.ts +9 -0
- package/dist/ui/fields/validators/AssetValidator.js +25 -0
- package/dist/ui/fields/validators/DateValidator.d.ts +9 -0
- package/dist/ui/fields/validators/DateValidator.js +41 -0
- package/dist/ui/fields/validators/EnumValidator.d.ts +10 -0
- package/dist/ui/fields/validators/EnumValidator.js +77 -0
- package/dist/ui/fields/validators/GenericValidator.d.ts +6 -0
- package/dist/ui/fields/validators/GenericValidator.js +22 -0
- package/dist/ui/fields/validators/LinkValidator.d.ts +9 -0
- package/dist/ui/fields/validators/LinkValidator.js +146 -0
- package/dist/ui/fields/validators/RichTextValidator.d.ts +6 -0
- package/dist/ui/fields/validators/RichTextValidator.js +35 -0
- package/dist/ui/fields/validators/TextValidator.d.ts +10 -0
- package/dist/ui/fields/validators/TextValidator.js +138 -0
- package/dist/ui/fields/validators/TimestampValidator.d.ts +9 -0
- package/dist/ui/fields/validators/TimestampValidator.js +41 -0
- package/dist/ui/fields/validators/ValidatorHelper.d.ts +23 -0
- package/dist/ui/fields/validators/ValidatorHelper.js +55 -0
- package/dist/ui/fields/validators/index.d.ts +8 -0
- package/dist/ui/fields/validators/index.js +24 -0
- package/dist/ui/geometry/AspectRatio.d.ts +27 -0
- package/dist/ui/geometry/AspectRatio.js +77 -0
- package/dist/ui/geometry/Bounds.d.ts +4 -0
- package/dist/ui/geometry/Bounds.js +11 -0
- package/dist/ui/geometry/Frame.d.ts +3 -0
- package/dist/ui/geometry/Frame.js +2 -0
- package/dist/ui/geometry/Insets.d.ts +14 -0
- package/dist/ui/geometry/Insets.js +14 -0
- package/dist/ui/geometry/PixelSize.d.ts +1 -0
- package/dist/ui/geometry/PixelSize.js +2 -0
- package/dist/ui/geometry/Point.d.ts +7 -0
- package/dist/ui/geometry/Point.js +15 -0
- package/dist/ui/geometry/Rect.d.ts +19 -0
- package/dist/ui/geometry/Rect.js +68 -0
- package/dist/ui/geometry/ScreenSize.d.ts +1 -0
- package/dist/ui/geometry/ScreenSize.js +2 -0
- package/dist/ui/geometry/Size.d.ts +7 -0
- package/dist/ui/geometry/Size.js +9 -0
- package/dist/ui/geometry/index.d.ts +9 -0
- package/dist/ui/geometry/index.js +25 -0
- package/dist/ui/index.d.ts +18 -0
- package/dist/ui/index.js +34 -0
- package/dist/ui/responsive/Breakpoint.d.ts +8 -0
- package/dist/ui/responsive/Breakpoint.js +24 -0
- package/dist/ui/responsive/BreakpointObserver.d.ts +16 -0
- package/dist/ui/responsive/BreakpointObserver.js +104 -0
- package/dist/ui/responsive/Breakpoints.d.ts +5 -0
- package/dist/ui/responsive/Breakpoints.js +15 -0
- package/dist/ui/responsive/ResponsiveValue.d.ts +7 -0
- package/dist/ui/responsive/ResponsiveValue.js +26 -0
- package/dist/ui/responsive/index.d.ts +4 -0
- package/dist/ui/responsive/index.js +20 -0
- package/dist/ui/richtext/LexicalUtils.d.ts +31 -0
- package/dist/ui/richtext/LexicalUtils.js +314 -0
- package/dist/ui/richtext/StyledTextNode.d.ts +33 -0
- package/dist/ui/richtext/StyledTextNode.js +101 -0
- package/dist/ui/richtext/index.d.ts +2 -0
- package/dist/ui/richtext/index.js +18 -0
- package/dist/utils/ArrayUtils.d.ts +17 -0
- package/dist/utils/ArrayUtils.js +66 -0
- package/dist/utils/ByteSize.d.ts +19 -0
- package/dist/utils/ByteSize.js +33 -0
- package/dist/utils/DateUtils.d.ts +15 -0
- package/dist/utils/DateUtils.js +100 -0
- package/dist/utils/Deferral.d.ts +28 -0
- package/dist/utils/Deferral.js +107 -0
- package/dist/utils/Duration.d.ts +7 -0
- package/dist/utils/Duration.js +35 -0
- package/dist/utils/Fn.d.ts +14 -0
- package/dist/utils/Fn.js +52 -0
- package/dist/utils/ObjectUtils.d.ts +89 -0
- package/dist/utils/ObjectUtils.js +159 -0
- package/dist/utils/Random.d.ts +15 -0
- package/dist/utils/Random.js +72 -0
- package/dist/utils/StringUtils.d.ts +10 -0
- package/dist/utils/StringUtils.js +51 -0
- package/dist/utils/UrlUtils.d.ts +22 -0
- package/dist/utils/UrlUtils.js +119 -0
- package/dist/utils/Value.d.ts +23 -0
- package/dist/utils/Value.js +122 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.js +28 -0
- package/dist/utils/isDefined.d.ts +1 -0
- package/dist/utils/isDefined.js +6 -0
- package/package.json +64 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BlobVideoProxy = exports.ElementVideoProxy = exports.VideoProxy = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const errors_1 = require("../../errors");
|
|
6
|
+
const BlurHasher_1 = require("./BlurHasher");
|
|
7
|
+
// base
|
|
8
|
+
class VideoProxy {
|
|
9
|
+
constructor(video) {
|
|
10
|
+
this.video = video;
|
|
11
|
+
// initialize instance variables
|
|
12
|
+
this._state$ = new rxjs_1.BehaviorSubject('uninitialized');
|
|
13
|
+
// bind methods (helps with callbacks)
|
|
14
|
+
this.onLoadData = this.onLoadData.bind(this);
|
|
15
|
+
this.onError = this.onError.bind(this);
|
|
16
|
+
this.onPlay = this.onPlay.bind(this);
|
|
17
|
+
this.onSeeking = this.onSeeking.bind(this);
|
|
18
|
+
this.onSeeked = this.onSeeked.bind(this);
|
|
19
|
+
this.onPause = this.onPause.bind(this);
|
|
20
|
+
// add listeners
|
|
21
|
+
video.addEventListener('loadeddata', this.onLoadData);
|
|
22
|
+
video.addEventListener('canplay', this.onLoadData);
|
|
23
|
+
video.addEventListener('canplaythrough', this.onLoadData);
|
|
24
|
+
video.addEventListener('error', this.onError);
|
|
25
|
+
video.addEventListener('play', this.onPlay);
|
|
26
|
+
video.addEventListener('pause', this.onPause);
|
|
27
|
+
video.addEventListener('seeking', this.onSeeking);
|
|
28
|
+
video.addEventListener('seeked', this.onSeeked);
|
|
29
|
+
// check current state
|
|
30
|
+
this.state = video.error
|
|
31
|
+
? 'error'
|
|
32
|
+
: video.readyState < HTMLMediaElement.HAVE_ENOUGH_DATA
|
|
33
|
+
? 'loading'
|
|
34
|
+
: video.seeking
|
|
35
|
+
? 'seeking'
|
|
36
|
+
: video.paused
|
|
37
|
+
? 'ready'
|
|
38
|
+
: 'playing';
|
|
39
|
+
}
|
|
40
|
+
get state$() {
|
|
41
|
+
return this._state$.asObservable();
|
|
42
|
+
}
|
|
43
|
+
get state() {
|
|
44
|
+
return this._state$.getValue();
|
|
45
|
+
}
|
|
46
|
+
set state(state) {
|
|
47
|
+
// ignore if disposed
|
|
48
|
+
const { _state$ } = this;
|
|
49
|
+
const prevState = this.state;
|
|
50
|
+
if (prevState === 'disposed') {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// update
|
|
54
|
+
_state$.next(state);
|
|
55
|
+
}
|
|
56
|
+
get loaded() {
|
|
57
|
+
switch (this.state) {
|
|
58
|
+
case 'ready':
|
|
59
|
+
case 'playing':
|
|
60
|
+
case 'seeking':
|
|
61
|
+
return true;
|
|
62
|
+
default:
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
get intrinsicSize() {
|
|
67
|
+
// throw if not ready
|
|
68
|
+
const { video, loaded } = this;
|
|
69
|
+
if (!loaded) {
|
|
70
|
+
throw new errors_1.InvalidOperationError('Cannot access size of unloaded video');
|
|
71
|
+
}
|
|
72
|
+
// return image size
|
|
73
|
+
return {
|
|
74
|
+
width: video.videoWidth,
|
|
75
|
+
height: video.videoHeight
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
get duration() {
|
|
79
|
+
// throw if not ready
|
|
80
|
+
const { video, loaded } = this;
|
|
81
|
+
if (!loaded) {
|
|
82
|
+
throw new errors_1.InvalidOperationError('Cannot access duration of unloaded video');
|
|
83
|
+
}
|
|
84
|
+
// return duration
|
|
85
|
+
return video.duration;
|
|
86
|
+
}
|
|
87
|
+
waitUntil(...states) {
|
|
88
|
+
return (0, rxjs_1.firstValueFrom)(this._state$.pipe((0, rxjs_1.filter)(state => states.includes(state))));
|
|
89
|
+
}
|
|
90
|
+
async waitUntilReady() {
|
|
91
|
+
// wait for ready/error
|
|
92
|
+
const state = await this.waitUntil('ready', 'error', 'disposed');
|
|
93
|
+
// throw if error
|
|
94
|
+
if (state === 'error') {
|
|
95
|
+
throw new errors_1.NotAvailableError('Video could not be loaded');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async seek(positionInSeconds) {
|
|
99
|
+
// ensure initialization is done
|
|
100
|
+
const { video, loaded } = this;
|
|
101
|
+
if (!loaded) {
|
|
102
|
+
await this.waitUntilReady();
|
|
103
|
+
}
|
|
104
|
+
// skip if already at that position
|
|
105
|
+
if (video.currentTime === positionInSeconds) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// seek to new position
|
|
109
|
+
video.currentTime = positionInSeconds;
|
|
110
|
+
this.state = 'seeking';
|
|
111
|
+
// wait for seek to complete
|
|
112
|
+
await this.waitUntilReady();
|
|
113
|
+
}
|
|
114
|
+
async play({ playbackRate = 1, loop = false } = {}) {
|
|
115
|
+
// ensure initialization is done
|
|
116
|
+
const { video, loaded } = this;
|
|
117
|
+
if (!loaded) {
|
|
118
|
+
await this.waitUntilReady();
|
|
119
|
+
}
|
|
120
|
+
// set options
|
|
121
|
+
video.playbackRate = playbackRate;
|
|
122
|
+
video.loop = loop;
|
|
123
|
+
// play if required
|
|
124
|
+
if (video.paused) {
|
|
125
|
+
// play video
|
|
126
|
+
await video.play();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async pause() {
|
|
130
|
+
// ensure initialization is done
|
|
131
|
+
const { video, loaded } = this;
|
|
132
|
+
if (!loaded) {
|
|
133
|
+
await this.waitUntilReady();
|
|
134
|
+
}
|
|
135
|
+
// pause if required
|
|
136
|
+
if (!video.paused) {
|
|
137
|
+
video.pause();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async getBlurHash() {
|
|
141
|
+
// return hash if already computed
|
|
142
|
+
const { video, _blurHash } = this;
|
|
143
|
+
if (_blurHash) {
|
|
144
|
+
return _blurHash;
|
|
145
|
+
}
|
|
146
|
+
// ensure initialization is done
|
|
147
|
+
if (!this.loaded) {
|
|
148
|
+
await this.waitUntilReady();
|
|
149
|
+
}
|
|
150
|
+
// create hash
|
|
151
|
+
this._blurHash = BlurHasher_1.BlurHasher.createHash(video);
|
|
152
|
+
// return has
|
|
153
|
+
return this._blurHash;
|
|
154
|
+
}
|
|
155
|
+
dispose() {
|
|
156
|
+
// mark disposed
|
|
157
|
+
this._state$.next('disposed');
|
|
158
|
+
// remove listeners
|
|
159
|
+
const { video } = this;
|
|
160
|
+
video.removeEventListener('loadeddata', this.onLoadData);
|
|
161
|
+
video.removeEventListener('canplay', this.onLoadData);
|
|
162
|
+
video.removeEventListener('canplaythrough', this.onLoadData);
|
|
163
|
+
video.removeEventListener('error', this.onError);
|
|
164
|
+
video.removeEventListener('play', this.onPlay);
|
|
165
|
+
video.removeEventListener('pause', this.onPause);
|
|
166
|
+
video.removeEventListener('seeking', this.onSeeking);
|
|
167
|
+
video.removeEventListener('seeked', this.onSeeked);
|
|
168
|
+
}
|
|
169
|
+
onLoadData() {
|
|
170
|
+
// skip if not ready
|
|
171
|
+
const { video } = this;
|
|
172
|
+
if (video.readyState < HTMLMediaElement.HAVE_ENOUGH_DATA) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
// mark loaded
|
|
176
|
+
this.state = video.paused
|
|
177
|
+
? 'ready'
|
|
178
|
+
: 'playing';
|
|
179
|
+
}
|
|
180
|
+
onError() {
|
|
181
|
+
this.state = 'error';
|
|
182
|
+
}
|
|
183
|
+
onPlay() {
|
|
184
|
+
this.state = 'playing';
|
|
185
|
+
}
|
|
186
|
+
onSeeking() {
|
|
187
|
+
this.state = 'seeking';
|
|
188
|
+
}
|
|
189
|
+
onSeeked() {
|
|
190
|
+
this.state = this.video.readyState < HTMLMediaElement.HAVE_ENOUGH_DATA
|
|
191
|
+
? 'loading'
|
|
192
|
+
: 'ready';
|
|
193
|
+
}
|
|
194
|
+
onPause() {
|
|
195
|
+
this.state = this.video.readyState < HTMLMediaElement.HAVE_ENOUGH_DATA
|
|
196
|
+
? 'loading'
|
|
197
|
+
: 'ready';
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
exports.VideoProxy = VideoProxy;
|
|
201
|
+
// element
|
|
202
|
+
class ElementVideoProxy extends VideoProxy {
|
|
203
|
+
constructor(video) {
|
|
204
|
+
super(video);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
exports.ElementVideoProxy = ElementVideoProxy;
|
|
208
|
+
// blob
|
|
209
|
+
class BlobVideoProxy extends VideoProxy {
|
|
210
|
+
constructor(blob) {
|
|
211
|
+
// create hidden video and load blob
|
|
212
|
+
const video = document.createElement('video');
|
|
213
|
+
const src = URL.createObjectURL(blob);
|
|
214
|
+
video.src = src;
|
|
215
|
+
const style = video.style;
|
|
216
|
+
style.position = 'absolute';
|
|
217
|
+
style.pointerEvents = 'none';
|
|
218
|
+
style.opacity = '0';
|
|
219
|
+
// construct base
|
|
220
|
+
super(video);
|
|
221
|
+
this.blob = blob;
|
|
222
|
+
// initialize instance variables
|
|
223
|
+
this._src = src;
|
|
224
|
+
}
|
|
225
|
+
dispose() {
|
|
226
|
+
// call base
|
|
227
|
+
super.dispose();
|
|
228
|
+
// revoke src
|
|
229
|
+
const { video, _src } = this;
|
|
230
|
+
URL.revokeObjectURL(_src);
|
|
231
|
+
// clean up dom
|
|
232
|
+
video.remove();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
exports.BlobVideoProxy = BlobVideoProxy;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./BlurHasher"), exports);
|
|
18
|
+
__exportStar(require("./Browser"), exports);
|
|
19
|
+
__exportStar(require("./ImageProxy"), exports);
|
|
20
|
+
__exportStar(require("./InputEvent"), exports);
|
|
21
|
+
__exportStar(require("./SVGProxy"), exports);
|
|
22
|
+
__exportStar(require("./VideoProxy"), exports);
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import * as Schema from '../../schema';
|
|
3
|
+
import { EventBus } from '../../services';
|
|
4
|
+
import { FieldValidator } from './FieldValidator';
|
|
5
|
+
export declare class Field<TSchema extends Schema.Field.Type = Schema.Field.Type> {
|
|
6
|
+
private readonly eventBus;
|
|
7
|
+
readonly schema: TSchema;
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly required: boolean;
|
|
11
|
+
private readonly publishedValue;
|
|
12
|
+
private _initialValue;
|
|
13
|
+
private _value;
|
|
14
|
+
private _editing;
|
|
15
|
+
private _sandboxed;
|
|
16
|
+
private _sandboxedValue;
|
|
17
|
+
private readonly _validator;
|
|
18
|
+
private _errors;
|
|
19
|
+
private _optIn?;
|
|
20
|
+
private _optOut?;
|
|
21
|
+
private _shouldFocus?;
|
|
22
|
+
constructor(args: Field.ConstructorArgs<TSchema>);
|
|
23
|
+
get events$(): Observable<Field.Event>;
|
|
24
|
+
get isComposite(): boolean;
|
|
25
|
+
get exists(): boolean;
|
|
26
|
+
get valid(): boolean;
|
|
27
|
+
get error(): FieldValidator.Error | undefined;
|
|
28
|
+
getErrors(level: FieldValidator.Error.Level): readonly FieldValidator.Error[];
|
|
29
|
+
get errors(): ReadonlyArray<FieldValidator.Error>;
|
|
30
|
+
get defaultValue(): Field.Value<TSchema> | undefined;
|
|
31
|
+
get initialValue(): Field.Value<TSchema> | undefined;
|
|
32
|
+
get hasValue(): boolean;
|
|
33
|
+
get value(): Field.Value<TSchema> | undefined;
|
|
34
|
+
set value(value: Field.Value<TSchema> | undefined);
|
|
35
|
+
coerceValue(value: Field.Value<TSchema> | undefined): void;
|
|
36
|
+
get modified(): boolean;
|
|
37
|
+
get changed(): boolean;
|
|
38
|
+
get editing(): boolean;
|
|
39
|
+
set editing(editing: boolean);
|
|
40
|
+
get sandboxed(): boolean;
|
|
41
|
+
sandbox(): void;
|
|
42
|
+
commit(): void;
|
|
43
|
+
rollback(): void;
|
|
44
|
+
get canOptOut(): boolean;
|
|
45
|
+
optIn(): void;
|
|
46
|
+
optOut(): void;
|
|
47
|
+
get shouldFocus(): boolean;
|
|
48
|
+
didFocus(): void;
|
|
49
|
+
validate(silent?: boolean): ReadonlyArray<FieldValidator.Error>;
|
|
50
|
+
migrate(previous: Field<TSchema>): void;
|
|
51
|
+
reset(initialValue?: Schema.Field.Data<TSchema> | null): void;
|
|
52
|
+
clone({ schema, eventBus, name, required }?: Field.CloneArgs<TSchema>): Field<TSchema>;
|
|
53
|
+
private raiseEvent;
|
|
54
|
+
}
|
|
55
|
+
export declare namespace Field {
|
|
56
|
+
type CloneArgs<TSchema extends Schema.Field.Type> = {
|
|
57
|
+
schema?: TSchema;
|
|
58
|
+
eventBus?: EventBus;
|
|
59
|
+
name?: string;
|
|
60
|
+
required?: boolean;
|
|
61
|
+
};
|
|
62
|
+
type ConstructorArgs<TSchema extends Schema.Field.Type> = {
|
|
63
|
+
eventBus: EventBus;
|
|
64
|
+
schema: TSchema;
|
|
65
|
+
id: string;
|
|
66
|
+
name: string;
|
|
67
|
+
publishedValue?: Value<TSchema>;
|
|
68
|
+
initialValue?: Value<TSchema>;
|
|
69
|
+
required: boolean;
|
|
70
|
+
};
|
|
71
|
+
type Value<TSchema extends Schema.Field.Type = Schema.Field.Type> = Schema.Field.Data<TSchema>;
|
|
72
|
+
interface Event extends EventBus.Event<'Field', Event.Type> {
|
|
73
|
+
field: Field;
|
|
74
|
+
}
|
|
75
|
+
namespace Event {
|
|
76
|
+
type Type = 'changed' | 'editing' | 'validation' | 'reset';
|
|
77
|
+
function filter(event: EventBus.Event): event is Event;
|
|
78
|
+
function create(event: EventBus.Args<Event>): Event;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Field = void 0;
|
|
37
|
+
const rxjs_1 = require("rxjs");
|
|
38
|
+
const errors_1 = require("../../errors");
|
|
39
|
+
const Schema = __importStar(require("../../schema"));
|
|
40
|
+
const services_1 = require("../../services");
|
|
41
|
+
const utils_1 = require("../../utils");
|
|
42
|
+
const FieldValidator_1 = require("./FieldValidator");
|
|
43
|
+
// class
|
|
44
|
+
class Field {
|
|
45
|
+
constructor(args) {
|
|
46
|
+
var _a;
|
|
47
|
+
// initialize instance variables
|
|
48
|
+
this.eventBus = args.eventBus;
|
|
49
|
+
this.schema = args.schema;
|
|
50
|
+
this.id = args.id;
|
|
51
|
+
this.name = args.name;
|
|
52
|
+
this.required = args.required;
|
|
53
|
+
this.publishedValue = args.publishedValue;
|
|
54
|
+
this._initialValue = (_a = args.initialValue) !== null && _a !== void 0 ? _a : this.defaultValue;
|
|
55
|
+
this._value = this._initialValue;
|
|
56
|
+
this._editing = false;
|
|
57
|
+
this._sandboxed = false;
|
|
58
|
+
this._validator = FieldValidator_1.FieldValidator.create(this);
|
|
59
|
+
// validate
|
|
60
|
+
this._errors = this._validator.validate(this, this._initialValue);
|
|
61
|
+
}
|
|
62
|
+
get events$() {
|
|
63
|
+
return this.eventBus.events$.pipe((0, rxjs_1.filter)(Field.Event.filter), (0, rxjs_1.filter)(e => e.field === this));
|
|
64
|
+
}
|
|
65
|
+
get isComposite() {
|
|
66
|
+
switch (this.schema.type) {
|
|
67
|
+
case 'asset':
|
|
68
|
+
case 'link':
|
|
69
|
+
return true;
|
|
70
|
+
default:
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
get exists() {
|
|
75
|
+
const { initialValue, _optIn = false, _optOut = false, schema: { required } } = this;
|
|
76
|
+
return (initialValue !== undefined && !_optOut) || required || _optIn;
|
|
77
|
+
}
|
|
78
|
+
get valid() {
|
|
79
|
+
return this.errors.length === 0;
|
|
80
|
+
}
|
|
81
|
+
get error() {
|
|
82
|
+
return FieldValidator_1.FieldValidator.Error.mostRelevant(this._errors);
|
|
83
|
+
}
|
|
84
|
+
getErrors(level) {
|
|
85
|
+
return this._validator.filter(this._errors, level);
|
|
86
|
+
}
|
|
87
|
+
get errors() {
|
|
88
|
+
return this._errors;
|
|
89
|
+
}
|
|
90
|
+
get defaultValue() {
|
|
91
|
+
// no default if it's not required
|
|
92
|
+
const { schema } = this;
|
|
93
|
+
if (!schema.required) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
// or use default
|
|
97
|
+
switch (schema.type) {
|
|
98
|
+
case 'enum':
|
|
99
|
+
return schema.defaultOption
|
|
100
|
+
? Schema.EnumField.Value.toData(schema.defaultOption)
|
|
101
|
+
: undefined;
|
|
102
|
+
case 'boolean':
|
|
103
|
+
return Schema.BooleanField.Value.toData(schema.defaultValue);
|
|
104
|
+
default:
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
get initialValue() {
|
|
109
|
+
return this._initialValue;
|
|
110
|
+
}
|
|
111
|
+
get hasValue() {
|
|
112
|
+
var _a;
|
|
113
|
+
return ((_a = this._value) === null || _a === void 0 ? void 0 : _a.value) !== undefined;
|
|
114
|
+
}
|
|
115
|
+
get value() {
|
|
116
|
+
return this._value;
|
|
117
|
+
}
|
|
118
|
+
set value(value) {
|
|
119
|
+
// skip if value hasn't changed
|
|
120
|
+
if (utils_1.Value.equals(this._value, value)) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
// update value
|
|
124
|
+
this._value = value;
|
|
125
|
+
// raise change event
|
|
126
|
+
this.raiseEvent('changed');
|
|
127
|
+
// raise error (if any)
|
|
128
|
+
this.validate();
|
|
129
|
+
}
|
|
130
|
+
coerceValue(value) {
|
|
131
|
+
// skip if value hasn't changed
|
|
132
|
+
if (utils_1.Value.equals(this._value, value)) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
// update value
|
|
136
|
+
this._value = value;
|
|
137
|
+
// raise error (if any)
|
|
138
|
+
this.validate(true);
|
|
139
|
+
}
|
|
140
|
+
get modified() {
|
|
141
|
+
const { _value, initialValue, _optIn, _optOut } = this;
|
|
142
|
+
return _optOut || _optIn || !utils_1.Value.equals(_value, initialValue);
|
|
143
|
+
}
|
|
144
|
+
get changed() {
|
|
145
|
+
const { _value, publishedValue } = this;
|
|
146
|
+
return !utils_1.Value.equals(_value, publishedValue);
|
|
147
|
+
}
|
|
148
|
+
get editing() {
|
|
149
|
+
return this._editing;
|
|
150
|
+
}
|
|
151
|
+
set editing(editing) {
|
|
152
|
+
// skip if unchanged
|
|
153
|
+
if (this._editing === editing) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
// update
|
|
157
|
+
this._editing = editing;
|
|
158
|
+
// raise event
|
|
159
|
+
this.raiseEvent('editing');
|
|
160
|
+
}
|
|
161
|
+
get sandboxed() {
|
|
162
|
+
return this._sandboxed;
|
|
163
|
+
}
|
|
164
|
+
sandbox() {
|
|
165
|
+
// throw if already sandboxed
|
|
166
|
+
if (this._sandboxed) {
|
|
167
|
+
throw new errors_1.InvalidOperationError('Cannot invoke sandbox() on Field multiple times.');
|
|
168
|
+
}
|
|
169
|
+
// sandbox field
|
|
170
|
+
this._sandboxedValue = this._value;
|
|
171
|
+
this._sandboxed = true;
|
|
172
|
+
// raise event
|
|
173
|
+
this.raiseEvent('changed');
|
|
174
|
+
}
|
|
175
|
+
commit() {
|
|
176
|
+
// throw if not sandboxed
|
|
177
|
+
if (!this._sandboxed) {
|
|
178
|
+
throw new errors_1.InvalidOperationError('Cannot invoke commit() on Field before sandbox().');
|
|
179
|
+
}
|
|
180
|
+
// clear sandbox
|
|
181
|
+
this._sandboxed = false;
|
|
182
|
+
// raise event
|
|
183
|
+
this.raiseEvent('changed');
|
|
184
|
+
}
|
|
185
|
+
rollback() {
|
|
186
|
+
// throw if not sandboxed
|
|
187
|
+
if (!this._sandboxed) {
|
|
188
|
+
throw new errors_1.InvalidOperationError('Cannot invoke commit() on Field before sandbox().');
|
|
189
|
+
}
|
|
190
|
+
// rollback sandbox
|
|
191
|
+
this._value = this._sandboxedValue;
|
|
192
|
+
this._sandboxed = false;
|
|
193
|
+
// raise event
|
|
194
|
+
this.raiseEvent('changed');
|
|
195
|
+
}
|
|
196
|
+
get canOptOut() {
|
|
197
|
+
return !this.schema.required;
|
|
198
|
+
}
|
|
199
|
+
optIn() {
|
|
200
|
+
// skip if required
|
|
201
|
+
const { schema } = this;
|
|
202
|
+
if (schema.required) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
// set value
|
|
206
|
+
this._optIn = true;
|
|
207
|
+
this._shouldFocus = true;
|
|
208
|
+
this._optOut = false;
|
|
209
|
+
this.value = {
|
|
210
|
+
type: schema.type
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
optOut() {
|
|
214
|
+
// skip if required
|
|
215
|
+
const { schema } = this;
|
|
216
|
+
if (schema.required) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
// clear value
|
|
220
|
+
this._optIn = false;
|
|
221
|
+
this._optOut = true;
|
|
222
|
+
this.value = undefined;
|
|
223
|
+
}
|
|
224
|
+
get shouldFocus() {
|
|
225
|
+
return this._shouldFocus === true;
|
|
226
|
+
}
|
|
227
|
+
didFocus() {
|
|
228
|
+
delete this._shouldFocus;
|
|
229
|
+
}
|
|
230
|
+
validate(silent = false) {
|
|
231
|
+
// validate (skip if nothing has changed
|
|
232
|
+
const errors = this._validator.validate(this, this._value);
|
|
233
|
+
if (utils_1.Value.equals(errors, this._errors)) {
|
|
234
|
+
return this._errors;
|
|
235
|
+
}
|
|
236
|
+
// update errors
|
|
237
|
+
this._errors = errors;
|
|
238
|
+
// raise event if not silent
|
|
239
|
+
if (!silent) {
|
|
240
|
+
this.raiseEvent('validation');
|
|
241
|
+
}
|
|
242
|
+
// return errors
|
|
243
|
+
return errors;
|
|
244
|
+
}
|
|
245
|
+
migrate(previous) {
|
|
246
|
+
this._value = previous.value;
|
|
247
|
+
this._editing = true;
|
|
248
|
+
this._sandboxed = previous._sandboxed;
|
|
249
|
+
this._sandboxedValue = previous._sandboxedValue;
|
|
250
|
+
}
|
|
251
|
+
reset(initialValue) {
|
|
252
|
+
// reset initial value if it's set
|
|
253
|
+
if (initialValue !== undefined) {
|
|
254
|
+
this._initialValue = initialValue !== null && initialValue !== void 0 ? initialValue : undefined;
|
|
255
|
+
}
|
|
256
|
+
// reset value
|
|
257
|
+
delete this._optIn;
|
|
258
|
+
delete this._optOut;
|
|
259
|
+
this.value = this._initialValue;
|
|
260
|
+
// revalidate
|
|
261
|
+
this.validate();
|
|
262
|
+
// clear sandbox
|
|
263
|
+
this._sandboxed = false;
|
|
264
|
+
this._sandboxedValue = undefined;
|
|
265
|
+
// raise reset event
|
|
266
|
+
this.raiseEvent('reset');
|
|
267
|
+
}
|
|
268
|
+
clone({ schema, eventBus, name, required } = {}) {
|
|
269
|
+
return new Field({
|
|
270
|
+
eventBus: eventBus !== null && eventBus !== void 0 ? eventBus : this.eventBus,
|
|
271
|
+
schema: schema !== null && schema !== void 0 ? schema : this.schema,
|
|
272
|
+
id: this.id,
|
|
273
|
+
name: name !== null && name !== void 0 ? name : this.name,
|
|
274
|
+
publishedValue: this.publishedValue,
|
|
275
|
+
initialValue: this.initialValue,
|
|
276
|
+
required: required !== null && required !== void 0 ? required : this.required
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
raiseEvent(type) {
|
|
280
|
+
this.eventBus.publish(Field.Event.create({ type, field: this }));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
exports.Field = Field;
|
|
284
|
+
// extension
|
|
285
|
+
(function (Field) {
|
|
286
|
+
let Event;
|
|
287
|
+
(function (Event) {
|
|
288
|
+
// methods
|
|
289
|
+
function filter(event) {
|
|
290
|
+
return event.domain === 'Field';
|
|
291
|
+
}
|
|
292
|
+
Event.filter = filter;
|
|
293
|
+
function create(event) {
|
|
294
|
+
return services_1.EventBus.createEvent(Object.assign({ domain: 'Field' }, event));
|
|
295
|
+
}
|
|
296
|
+
Event.create = create;
|
|
297
|
+
})(Event = Field.Event || (Field.Event = {}));
|
|
298
|
+
})(Field || (exports.Field = Field = {}));
|