@angular/core 18.0.0-next.4 → 18.0.0-next.6
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/esm2022/primitives/event-dispatch/contract_binary.mjs +10 -0
- package/esm2022/primitives/event-dispatch/index.mjs +13 -0
- package/esm2022/primitives/event-dispatch/src/a11y_click.mjs +54 -0
- package/esm2022/primitives/event-dispatch/src/accessibility.mjs +35 -0
- package/esm2022/primitives/event-dispatch/src/attribute.mjs +72 -0
- package/esm2022/primitives/event-dispatch/src/base_dispatcher.mjs +196 -0
- package/esm2022/primitives/event-dispatch/src/cache.mjs +95 -0
- package/esm2022/primitives/event-dispatch/src/char.mjs +35 -0
- package/esm2022/primitives/event-dispatch/src/custom_events.mjs +63 -0
- package/esm2022/primitives/event-dispatch/src/dispatcher.mjs +254 -0
- package/esm2022/primitives/event-dispatch/src/dom.mjs +48 -0
- package/esm2022/primitives/event-dispatch/src/earlyeventcontract.mjs +36 -0
- package/esm2022/primitives/event-dispatch/src/event.mjs +638 -0
- package/esm2022/primitives/event-dispatch/src/event_contract_container.mjs +63 -0
- package/esm2022/primitives/event-dispatch/src/event_contract_defines.mjs +48 -0
- package/esm2022/primitives/event-dispatch/src/event_contract_multi_container.mjs +192 -0
- package/esm2022/primitives/event-dispatch/src/event_handler.mjs +9 -0
- package/esm2022/primitives/event-dispatch/src/event_info.mjs +199 -0
- package/esm2022/primitives/event-dispatch/src/event_type.mjs +244 -0
- package/esm2022/primitives/event-dispatch/src/eventcontract.mjs +675 -0
- package/esm2022/primitives/event-dispatch/src/key_code.mjs +21 -0
- package/esm2022/primitives/event-dispatch/src/legacy_dispatcher.mjs +9 -0
- package/esm2022/primitives/event-dispatch/src/property.mjs +35 -0
- package/esm2022/primitives/event-dispatch/src/register_events.mjs +32 -0
- package/esm2022/primitives/event-dispatch/src/replay.mjs +389 -0
- package/esm2022/primitives/event-dispatch/src/restriction.mjs +15 -0
- package/esm2022/primitives/signals/index.mjs +3 -3
- package/esm2022/primitives/signals/src/computed.mjs +5 -3
- package/esm2022/primitives/signals/src/graph.mjs +14 -9
- package/esm2022/primitives/signals/src/signal.mjs +2 -2
- package/esm2022/primitives/signals/src/watch.mjs +2 -2
- package/esm2022/src/application/application_ref.mjs +4 -2
- package/esm2022/src/change_detection/scheduling/flags.mjs +10 -0
- package/esm2022/src/change_detection/scheduling/ng_zone_scheduling.mjs +18 -33
- package/esm2022/src/change_detection/scheduling/zoneless_scheduling.mjs +1 -1
- package/esm2022/src/change_detection/scheduling/zoneless_scheduling_impl.mjs +111 -9
- package/esm2022/src/core.mjs +3 -1
- package/esm2022/src/core_private_export.mjs +2 -3
- package/esm2022/src/debug/debug_node.mjs +1 -1
- package/esm2022/src/defer/instructions.mjs +31 -8
- package/esm2022/src/di/host_tag_name_token.mjs +65 -0
- package/esm2022/src/di/index.mjs +2 -1
- package/esm2022/src/errors.mjs +1 -1
- package/esm2022/src/hydration/annotate.mjs +15 -1
- package/esm2022/src/hydration/event_replay.mjs +181 -0
- package/esm2022/src/hydration/tokens.mjs +6 -1
- package/esm2022/src/metadata/directives.mjs +1 -62
- package/esm2022/src/pending_tasks.mjs +54 -11
- package/esm2022/src/platform/platform_ref.mjs +3 -3
- package/esm2022/src/render3/component_ref.mjs +1 -1
- package/esm2022/src/render3/context_discovery.mjs +15 -1
- package/esm2022/src/render3/instructions/control_flow.mjs +55 -8
- package/esm2022/src/render3/list_reconciliation.mjs +41 -1
- package/esm2022/src/testability/testability.mjs +2 -30
- package/esm2022/src/util/callback_scheduler.mjs +14 -3
- package/esm2022/src/version.mjs +1 -1
- package/esm2022/src/zone/ng_zone.mjs +22 -6
- package/esm2022/testing/src/async.mjs +2 -10
- package/esm2022/testing/src/component_fixture.mjs +7 -12
- package/esm2022/testing/src/defer.mjs +1 -2
- package/esm2022/testing/src/logger.mjs +3 -3
- package/esm2022/testing/src/test_bed_common.mjs +1 -6
- package/esm2022/testing/src/testing.mjs +1 -2
- package/event-dispatch-contract.min.js +1 -0
- package/fesm2022/core.mjs +608 -174
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +3044 -0
- package/fesm2022/primitives/event-dispatch.mjs.map +1 -0
- package/fesm2022/primitives/signals.mjs +17 -10
- package/fesm2022/primitives/signals.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -1
- package/fesm2022/testing.mjs +35 -54
- package/fesm2022/testing.mjs.map +1 -1
- package/index.d.ts +199 -115
- package/package.json +10 -1
- package/primitives/event-dispatch/index.d.ts +627 -0
- package/primitives/signals/index.d.ts +1 -1
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/migrations/{transfer-state → http-providers}/bundle.js +254 -68
- package/schematics/migrations/http-providers/bundle.js.map +7 -0
- package/schematics/migrations/invalid-two-way-bindings/bundle.js +690 -413
- package/schematics/migrations/invalid-two-way-bindings/bundle.js.map +3 -3
- package/schematics/migrations.json +6 -16
- package/schematics/ng-generate/control-flow-migration/bundle.js +693 -417
- package/schematics/ng-generate/control-flow-migration/bundle.js.map +3 -3
- package/schematics/ng-generate/standalone-migration/bundle.js +1072 -735
- package/schematics/ng-generate/standalone-migration/bundle.js.map +3 -3
- package/testing/index.d.ts +2 -15
- package/esm2022/testing/src/private_export.mjs +0 -9
- package/schematics/migrations/block-template-entities/bundle.js +0 -22853
- package/schematics/migrations/block-template-entities/bundle.js.map +0 -7
- package/schematics/migrations/compiler-options/bundle.js +0 -582
- package/schematics/migrations/compiler-options/bundle.js.map +0 -7
- package/schematics/migrations/transfer-state/bundle.js.map +0 -7
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { bootstrapEventContract } from './src/register_events';
|
|
9
|
+
window['__jsaction_bootstrap'] = bootstrapEventContract;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RfYmluYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL2NvbnRyYWN0X2JpbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RCxNQUFjLENBQUMsc0JBQXNCLENBQUMsR0FBRyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2Jvb3RzdHJhcEV2ZW50Q29udHJhY3R9IGZyb20gJy4vc3JjL3JlZ2lzdGVyX2V2ZW50cyc7XG5cbih3aW5kb3cgYXMgYW55KVsnX19qc2FjdGlvbl9ib290c3RyYXAnXSA9IGJvb3RzdHJhcEV2ZW50Q29udHJhY3Q7XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
export { Dispatcher, registerDispatcher } from './src/dispatcher';
|
|
9
|
+
export { EventContractContainer } from './src/event_contract_container';
|
|
10
|
+
export { EventContract } from './src/eventcontract';
|
|
11
|
+
export { bootstrapEventContract } from './src/register_events';
|
|
12
|
+
export { EventInfoWrapper } from './src/event_info';
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQge0Rpc3BhdGNoZXIsIHJlZ2lzdGVyRGlzcGF0Y2hlcn0gZnJvbSAnLi9zcmMvZGlzcGF0Y2hlcic7XG5leHBvcnQge0V2ZW50Q29udHJhY3RDb250YWluZXJ9IGZyb20gJy4vc3JjL2V2ZW50X2NvbnRyYWN0X2NvbnRhaW5lcic7XG5leHBvcnQge0V2ZW50Q29udHJhY3R9IGZyb20gJy4vc3JjL2V2ZW50Y29udHJhY3QnO1xuZXhwb3J0IHtib290c3RyYXBFdmVudENvbnRyYWN0fSBmcm9tICcuL3NyYy9yZWdpc3Rlcl9ldmVudHMnO1xuZXhwb3J0IHtFdmVudEluZm9XcmFwcGVyfSBmcm9tICcuL3NyYy9ldmVudF9pbmZvJztcbiJdfQ==
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import * as eventLib from './event';
|
|
9
|
+
import * as eventInfoLib from './event_info';
|
|
10
|
+
import { EventType } from './event_type';
|
|
11
|
+
/**
|
|
12
|
+
* Update `EventInfo` to be `eventType = 'click'` and sets `a11yClickKey` if it
|
|
13
|
+
* is a a11y click.
|
|
14
|
+
*/
|
|
15
|
+
export function updateEventInfoForA11yClick(eventInfo) {
|
|
16
|
+
if (!eventLib.isActionKeyEvent(eventInfoLib.getEvent(eventInfo))) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
eventInfoLib.setA11yClickKey(eventInfo, true);
|
|
20
|
+
// A 'click' triggered by a DOM keypress should be mapped to the 'click'
|
|
21
|
+
// jsaction.
|
|
22
|
+
eventInfoLib.setEventType(eventInfo, EventType.CLICK);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Call `preventDefault` on an a11y click if it is space key or to prevent the
|
|
26
|
+
* browser's default action for native HTML controls.
|
|
27
|
+
*/
|
|
28
|
+
export function preventDefaultForA11yClick(eventInfo) {
|
|
29
|
+
if (!eventInfoLib.getA11yClickKey(eventInfo) ||
|
|
30
|
+
(!eventLib.isSpaceKeyEvent(eventInfoLib.getEvent(eventInfo)) &&
|
|
31
|
+
!eventLib.shouldCallPreventDefaultOnNativeHtmlControl(eventInfoLib.getEvent(eventInfo)))) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
eventLib.preventDefault(eventInfoLib.getEvent(eventInfo));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Sets the `action` to `clickonly` for a click event that is not an a11y click
|
|
38
|
+
* and if there is not already a click action.
|
|
39
|
+
*/
|
|
40
|
+
export function populateClickOnlyAction(actionElement, eventInfo, actionMap) {
|
|
41
|
+
if (
|
|
42
|
+
// If there's already an action, don't attempt to set a CLICKONLY
|
|
43
|
+
eventInfoLib.getAction(eventInfo) ||
|
|
44
|
+
// Only attempt CLICKONLY if the type is CLICK
|
|
45
|
+
eventInfoLib.getEventType(eventInfo) !== EventType.CLICK ||
|
|
46
|
+
// a11y clicks are never CLICKONLY
|
|
47
|
+
eventInfoLib.getA11yClickKey(eventInfo) ||
|
|
48
|
+
actionMap[EventType.CLICKONLY] === undefined) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
eventInfoLib.setEventType(eventInfo, EventType.CLICKONLY);
|
|
52
|
+
eventInfoLib.setAction(eventInfo, actionMap[EventType.CLICKONLY], actionElement);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYTExeV9jbGljay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvcHJpbWl0aXZlcy9ldmVudC1kaXNwYXRjaC9zcmMvYTExeV9jbGljay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssUUFBUSxNQUFNLFNBQVMsQ0FBQztBQUNwQyxPQUFPLEtBQUssWUFBWSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXZDOzs7R0FHRztBQUNILE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxTQUFpQztJQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pFLE9BQU87SUFDVCxDQUFDO0lBQ0QsWUFBWSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsd0VBQXdFO0lBQ3hFLFlBQVk7SUFDWixZQUFZLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxTQUFpQztJQUMxRSxJQUNFLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7UUFDeEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxRCxDQUFDLFFBQVEsQ0FBQywyQ0FBMkMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFDMUYsQ0FBQztRQUNELE9BQU87SUFDVCxDQUFDO0lBQ0QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsYUFBc0IsRUFDdEIsU0FBaUMsRUFDakMsU0FBa0M7SUFFbEM7SUFDRSxpRUFBaUU7SUFDakUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDakMsOENBQThDO1FBQzlDLFlBQVksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssU0FBUyxDQUFDLEtBQUs7UUFDeEQsa0NBQWtDO1FBQ2xDLFlBQVksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1FBQ3ZDLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssU0FBUyxFQUM1QyxDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFDRCxZQUFZLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsWUFBWSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNuRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIGV2ZW50TGliIGZyb20gJy4vZXZlbnQnO1xuaW1wb3J0ICogYXMgZXZlbnRJbmZvTGliIGZyb20gJy4vZXZlbnRfaW5mbyc7XG5pbXBvcnQge0V2ZW50VHlwZX0gZnJvbSAnLi9ldmVudF90eXBlJztcblxuLyoqXG4gKiBVcGRhdGUgYEV2ZW50SW5mb2AgdG8gYmUgYGV2ZW50VHlwZSA9ICdjbGljaydgIGFuZCBzZXRzIGBhMTF5Q2xpY2tLZXlgIGlmIGl0XG4gKiBpcyBhIGExMXkgY2xpY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVFdmVudEluZm9Gb3JBMTF5Q2xpY2soZXZlbnRJbmZvOiBldmVudEluZm9MaWIuRXZlbnRJbmZvKSB7XG4gIGlmICghZXZlbnRMaWIuaXNBY3Rpb25LZXlFdmVudChldmVudEluZm9MaWIuZ2V0RXZlbnQoZXZlbnRJbmZvKSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZXZlbnRJbmZvTGliLnNldEExMXlDbGlja0tleShldmVudEluZm8sIHRydWUpO1xuICAvLyBBICdjbGljaycgdHJpZ2dlcmVkIGJ5IGEgRE9NIGtleXByZXNzIHNob3VsZCBiZSBtYXBwZWQgdG8gdGhlICdjbGljaydcbiAgLy8ganNhY3Rpb24uXG4gIGV2ZW50SW5mb0xpYi5zZXRFdmVudFR5cGUoZXZlbnRJbmZvLCBFdmVudFR5cGUuQ0xJQ0spO1xufVxuXG4vKipcbiAqIENhbGwgYHByZXZlbnREZWZhdWx0YCBvbiBhbiBhMTF5IGNsaWNrIGlmIGl0IGlzIHNwYWNlIGtleSBvciB0byBwcmV2ZW50IHRoZVxuICogYnJvd3NlcidzIGRlZmF1bHQgYWN0aW9uIGZvciBuYXRpdmUgSFRNTCBjb250cm9scy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0Rm9yQTExeUNsaWNrKGV2ZW50SW5mbzogZXZlbnRJbmZvTGliLkV2ZW50SW5mbykge1xuICBpZiAoXG4gICAgIWV2ZW50SW5mb0xpYi5nZXRBMTF5Q2xpY2tLZXkoZXZlbnRJbmZvKSB8fFxuICAgICghZXZlbnRMaWIuaXNTcGFjZUtleUV2ZW50KGV2ZW50SW5mb0xpYi5nZXRFdmVudChldmVudEluZm8pKSAmJlxuICAgICAgIWV2ZW50TGliLnNob3VsZENhbGxQcmV2ZW50RGVmYXVsdE9uTmF0aXZlSHRtbENvbnRyb2woZXZlbnRJbmZvTGliLmdldEV2ZW50KGV2ZW50SW5mbykpKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZXZlbnRMaWIucHJldmVudERlZmF1bHQoZXZlbnRJbmZvTGliLmdldEV2ZW50KGV2ZW50SW5mbykpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGBhY3Rpb25gIHRvIGBjbGlja29ubHlgIGZvciBhIGNsaWNrIGV2ZW50IHRoYXQgaXMgbm90IGFuIGExMXkgY2xpY2tcbiAqIGFuZCBpZiB0aGVyZSBpcyBub3QgYWxyZWFkeSBhIGNsaWNrIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvcHVsYXRlQ2xpY2tPbmx5QWN0aW9uKFxuICBhY3Rpb25FbGVtZW50OiBFbGVtZW50LFxuICBldmVudEluZm86IGV2ZW50SW5mb0xpYi5FdmVudEluZm8sXG4gIGFjdGlvbk1hcDoge1trZXk6IHN0cmluZ106IHN0cmluZ30sXG4pIHtcbiAgaWYgKFxuICAgIC8vIElmIHRoZXJlJ3MgYWxyZWFkeSBhbiBhY3Rpb24sIGRvbid0IGF0dGVtcHQgdG8gc2V0IGEgQ0xJQ0tPTkxZXG4gICAgZXZlbnRJbmZvTGliLmdldEFjdGlvbihldmVudEluZm8pIHx8XG4gICAgLy8gT25seSBhdHRlbXB0IENMSUNLT05MWSBpZiB0aGUgdHlwZSBpcyBDTElDS1xuICAgIGV2ZW50SW5mb0xpYi5nZXRFdmVudFR5cGUoZXZlbnRJbmZvKSAhPT0gRXZlbnRUeXBlLkNMSUNLIHx8XG4gICAgLy8gYTExeSBjbGlja3MgYXJlIG5ldmVyIENMSUNLT05MWVxuICAgIGV2ZW50SW5mb0xpYi5nZXRBMTF5Q2xpY2tLZXkoZXZlbnRJbmZvKSB8fFxuICAgIGFjdGlvbk1hcFtFdmVudFR5cGUuQ0xJQ0tPTkxZXSA9PT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBldmVudEluZm9MaWIuc2V0RXZlbnRUeXBlKGV2ZW50SW5mbywgRXZlbnRUeXBlLkNMSUNLT05MWSk7XG4gIGV2ZW50SW5mb0xpYi5zZXRBY3Rpb24oZXZlbnRJbmZvLCBhY3Rpb25NYXBbRXZlbnRUeXBlLkNMSUNLT05MWV0sIGFjdGlvbkVsZW1lbnQpO1xufVxuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Defines special EventInfo and Event properties used when
|
|
10
|
+
* A11Y_SUPPORT_IN_DISPATCHER is enabled.
|
|
11
|
+
*/
|
|
12
|
+
export var Attribute;
|
|
13
|
+
(function (Attribute) {
|
|
14
|
+
/**
|
|
15
|
+
* An event-type set when the event contract detects a KEYDOWN event but
|
|
16
|
+
* doesn't know if the key press can be treated like a click. The dispatcher
|
|
17
|
+
* will use this event-type to parse the keypress and handle it accordingly.
|
|
18
|
+
*/
|
|
19
|
+
Attribute["MAYBE_CLICK_EVENT_TYPE"] = "maybe_click";
|
|
20
|
+
/**
|
|
21
|
+
* A property added to a dispatched event that had the MAYBE_CLICK_EVENTTYPE
|
|
22
|
+
* event-type but could not be used as a click. The dispatcher sets this
|
|
23
|
+
* property for non-global dispatches before it retriggers the event and it
|
|
24
|
+
* signifies that the event contract should not dispatch this event globally.
|
|
25
|
+
*/
|
|
26
|
+
Attribute["SKIP_GLOBAL_DISPATCH"] = "a11ysgd";
|
|
27
|
+
/**
|
|
28
|
+
* A property added to a dispatched event that had the MAYBE_CLICK_EVENTTYPE
|
|
29
|
+
* event-type but could not be used as a click. The dispatcher sets this
|
|
30
|
+
* property before it retriggers the event and it signifies that the event
|
|
31
|
+
* contract should not look at CLICK actions for KEYDOWN events.
|
|
32
|
+
*/
|
|
33
|
+
Attribute["SKIP_A11Y_CHECK"] = "a11ysc";
|
|
34
|
+
})(Attribute || (Attribute = {}));
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzaWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvcHJpbWl0aXZlcy9ldmVudC1kaXNwYXRjaC9zcmMvYWNjZXNzaWJpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFDSCxNQUFNLENBQU4sSUFBWSxTQXVCWDtBQXZCRCxXQUFZLFNBQVM7SUFDbkI7Ozs7T0FJRztJQUNILG1EQUFzQyxDQUFBO0lBRXRDOzs7OztPQUtHO0lBQ0gsNkNBQWdDLENBQUE7SUFFaEM7Ozs7O09BS0c7SUFDSCx1Q0FBMEIsQ0FBQTtBQUM1QixDQUFDLEVBdkJXLFNBQVMsS0FBVCxTQUFTLFFBdUJwQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIERlZmluZXMgc3BlY2lhbCBFdmVudEluZm8gYW5kIEV2ZW50IHByb3BlcnRpZXMgdXNlZCB3aGVuXG4gKiBBMTFZX1NVUFBPUlRfSU5fRElTUEFUQ0hFUiBpcyBlbmFibGVkLlxuICovXG5leHBvcnQgZW51bSBBdHRyaWJ1dGUge1xuICAvKipcbiAgICogQW4gZXZlbnQtdHlwZSBzZXQgd2hlbiB0aGUgZXZlbnQgY29udHJhY3QgZGV0ZWN0cyBhIEtFWURPV04gZXZlbnQgYnV0XG4gICAqIGRvZXNuJ3Qga25vdyBpZiB0aGUga2V5IHByZXNzIGNhbiBiZSB0cmVhdGVkIGxpa2UgYSBjbGljay4gVGhlIGRpc3BhdGNoZXJcbiAgICogd2lsbCB1c2UgdGhpcyBldmVudC10eXBlIHRvIHBhcnNlIHRoZSBrZXlwcmVzcyBhbmQgaGFuZGxlIGl0IGFjY29yZGluZ2x5LlxuICAgKi9cbiAgTUFZQkVfQ0xJQ0tfRVZFTlRfVFlQRSA9ICdtYXliZV9jbGljaycsXG5cbiAgLyoqXG4gICAqIEEgcHJvcGVydHkgYWRkZWQgdG8gYSBkaXNwYXRjaGVkIGV2ZW50IHRoYXQgaGFkIHRoZSBNQVlCRV9DTElDS19FVkVOVFRZUEVcbiAgICogZXZlbnQtdHlwZSBidXQgY291bGQgbm90IGJlIHVzZWQgYXMgYSBjbGljay4gVGhlIGRpc3BhdGNoZXIgc2V0cyB0aGlzXG4gICAqIHByb3BlcnR5IGZvciBub24tZ2xvYmFsIGRpc3BhdGNoZXMgYmVmb3JlIGl0IHJldHJpZ2dlcnMgdGhlIGV2ZW50IGFuZCBpdFxuICAgKiBzaWduaWZpZXMgdGhhdCB0aGUgZXZlbnQgY29udHJhY3Qgc2hvdWxkIG5vdCBkaXNwYXRjaCB0aGlzIGV2ZW50IGdsb2JhbGx5LlxuICAgKi9cbiAgU0tJUF9HTE9CQUxfRElTUEFUQ0ggPSAnYTExeXNnZCcsXG5cbiAgLyoqXG4gICAqIEEgcHJvcGVydHkgYWRkZWQgdG8gYSBkaXNwYXRjaGVkIGV2ZW50IHRoYXQgaGFkIHRoZSBNQVlCRV9DTElDS19FVkVOVFRZUEVcbiAgICogZXZlbnQtdHlwZSBidXQgY291bGQgbm90IGJlIHVzZWQgYXMgYSBjbGljay4gVGhlIGRpc3BhdGNoZXIgc2V0cyB0aGlzXG4gICAqIHByb3BlcnR5IGJlZm9yZSBpdCByZXRyaWdnZXJzIHRoZSBldmVudCBhbmQgaXQgc2lnbmlmaWVzIHRoYXQgdGhlIGV2ZW50XG4gICAqIGNvbnRyYWN0IHNob3VsZCBub3QgbG9vayBhdCBDTElDSyBhY3Rpb25zIGZvciBLRVlET1dOIGV2ZW50cy5cbiAgICovXG4gIFNLSVBfQTExWV9DSEVDSyA9ICdhMTF5c2MnLFxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBFdmVudCB7XG4gICAgW0F0dHJpYnV0ZS5NQVlCRV9DTElDS19FVkVOVF9UWVBFXT86IGJvb2xlYW47XG4gICAgW0F0dHJpYnV0ZS5TS0lQX0dMT0JBTF9ESVNQQVRDSF0/OiBib29sZWFuO1xuICAgIFtBdHRyaWJ1dGUuU0tJUF9BMTFZX0NIRUNLXT86IGJvb2xlYW47XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
export var Attribute;
|
|
9
|
+
(function (Attribute) {
|
|
10
|
+
/**
|
|
11
|
+
* The jsaction attribute defines a mapping of a DOM event to a
|
|
12
|
+
* generic event (aka jsaction), to which the actual event handlers
|
|
13
|
+
* that implement the behavior of the application are bound. The
|
|
14
|
+
* value is a semicolon separated list of colon separated pairs of
|
|
15
|
+
* an optional DOM event name and a jsaction name. If the optional
|
|
16
|
+
* DOM event name is omitted, 'click' is assumed. The jsaction names
|
|
17
|
+
* are dot separated pairs of a namespace and a simple jsaction
|
|
18
|
+
* name. If the namespace is absent, it is taken from the closest
|
|
19
|
+
* ancestor element with a jsnamespace attribute, if there is
|
|
20
|
+
* any. If there is no ancestor with a jsnamespace attribute, the
|
|
21
|
+
* simple name is assumed to be the jsaction name.
|
|
22
|
+
*
|
|
23
|
+
* Used by EventContract.
|
|
24
|
+
*/
|
|
25
|
+
Attribute["JSACTION"] = "jsaction";
|
|
26
|
+
/**
|
|
27
|
+
* The jsnamespace attribute provides the namespace part of the
|
|
28
|
+
* jaction names occurring in the jsaction attribute where it's
|
|
29
|
+
* missing.
|
|
30
|
+
*
|
|
31
|
+
* Used by EventContract.
|
|
32
|
+
*/
|
|
33
|
+
Attribute["JSNAMESPACE"] = "jsnamespace";
|
|
34
|
+
/**
|
|
35
|
+
* The oi attribute is a log impression tag for impression logging
|
|
36
|
+
* and action tracking. For an element that carries a jsaction
|
|
37
|
+
* attribute, the element is identified for the purpose of
|
|
38
|
+
* impression logging and click tracking by the dot separated path
|
|
39
|
+
* of all oi attributes in the chain of ancestors of the element.
|
|
40
|
+
*
|
|
41
|
+
* Used by ActionFlow.
|
|
42
|
+
*/
|
|
43
|
+
Attribute["OI"] = "oi";
|
|
44
|
+
/**
|
|
45
|
+
* The ved attribute is an encoded ClickTrackingCGI proto to track
|
|
46
|
+
* visual elements.
|
|
47
|
+
*
|
|
48
|
+
* Used by ActionFlow.
|
|
49
|
+
*/
|
|
50
|
+
Attribute["VED"] = "ved";
|
|
51
|
+
/**
|
|
52
|
+
* The vet attribute is the visual element type used to identify tracked
|
|
53
|
+
* visual elements.
|
|
54
|
+
*/
|
|
55
|
+
Attribute["VET"] = "vet";
|
|
56
|
+
/**
|
|
57
|
+
* Support for iteration on reprocessing.
|
|
58
|
+
*
|
|
59
|
+
* Used by ActionFlow.
|
|
60
|
+
*/
|
|
61
|
+
Attribute["JSINSTANCE"] = "jsinstance";
|
|
62
|
+
/**
|
|
63
|
+
* All click jsactions that happen on the element that carries this
|
|
64
|
+
* attribute or its descendants are automatically logged.
|
|
65
|
+
* Impressions of jsactions on these elements are tracked too, if
|
|
66
|
+
* requested by the impression() method of ActionFlow.
|
|
67
|
+
*
|
|
68
|
+
* Used by ActionFlow.
|
|
69
|
+
*/
|
|
70
|
+
Attribute["JSTRACK"] = "jstrack";
|
|
71
|
+
})(Attribute || (Attribute = {}));
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9hdHRyaWJ1dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsTUFBTSxDQUFOLElBQVksU0FvRVg7QUFwRUQsV0FBWSxTQUFTO0lBQ25COzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsa0NBQXFCLENBQUE7SUFFckI7Ozs7OztPQU1HO0lBQ0gsd0NBQTJCLENBQUE7SUFFM0I7Ozs7Ozs7O09BUUc7SUFDSCxzQkFBUyxDQUFBO0lBRVQ7Ozs7O09BS0c7SUFDSCx3QkFBVyxDQUFBO0lBRVg7OztPQUdHO0lBQ0gsd0JBQVcsQ0FBQTtJQUVYOzs7O09BSUc7SUFDSCxzQ0FBeUIsQ0FBQTtJQUV6Qjs7Ozs7OztPQU9HO0lBQ0gsZ0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQXBFVyxTQUFTLEtBQVQsU0FBUyxRQW9FcEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0IGVudW0gQXR0cmlidXRlIHtcbiAgLyoqXG4gICAqIFRoZSBqc2FjdGlvbiBhdHRyaWJ1dGUgZGVmaW5lcyBhIG1hcHBpbmcgb2YgYSBET00gZXZlbnQgdG8gYVxuICAgKiBnZW5lcmljIGV2ZW50IChha2EganNhY3Rpb24pLCB0byB3aGljaCB0aGUgYWN0dWFsIGV2ZW50IGhhbmRsZXJzXG4gICAqIHRoYXQgaW1wbGVtZW50IHRoZSBiZWhhdmlvciBvZiB0aGUgYXBwbGljYXRpb24gYXJlIGJvdW5kLiBUaGVcbiAgICogdmFsdWUgaXMgYSBzZW1pY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgY29sb24gc2VwYXJhdGVkIHBhaXJzIG9mXG4gICAqIGFuIG9wdGlvbmFsIERPTSBldmVudCBuYW1lIGFuZCBhIGpzYWN0aW9uIG5hbWUuIElmIHRoZSBvcHRpb25hbFxuICAgKiBET00gZXZlbnQgbmFtZSBpcyBvbWl0dGVkLCAnY2xpY2snIGlzIGFzc3VtZWQuIFRoZSBqc2FjdGlvbiBuYW1lc1xuICAgKiBhcmUgZG90IHNlcGFyYXRlZCBwYWlycyBvZiBhIG5hbWVzcGFjZSBhbmQgYSBzaW1wbGUganNhY3Rpb25cbiAgICogbmFtZS4gSWYgdGhlIG5hbWVzcGFjZSBpcyBhYnNlbnQsIGl0IGlzIHRha2VuIGZyb20gdGhlIGNsb3Nlc3RcbiAgICogYW5jZXN0b3IgZWxlbWVudCB3aXRoIGEganNuYW1lc3BhY2UgYXR0cmlidXRlLCBpZiB0aGVyZSBpc1xuICAgKiBhbnkuIElmIHRoZXJlIGlzIG5vIGFuY2VzdG9yIHdpdGggYSBqc25hbWVzcGFjZSBhdHRyaWJ1dGUsIHRoZVxuICAgKiBzaW1wbGUgbmFtZSBpcyBhc3N1bWVkIHRvIGJlIHRoZSBqc2FjdGlvbiBuYW1lLlxuICAgKlxuICAgKiBVc2VkIGJ5IEV2ZW50Q29udHJhY3QuXG4gICAqL1xuICBKU0FDVElPTiA9ICdqc2FjdGlvbicsXG5cbiAgLyoqXG4gICAqIFRoZSBqc25hbWVzcGFjZSBhdHRyaWJ1dGUgcHJvdmlkZXMgdGhlIG5hbWVzcGFjZSBwYXJ0IG9mIHRoZVxuICAgKiBqYWN0aW9uIG5hbWVzIG9jY3VycmluZyBpbiB0aGUganNhY3Rpb24gYXR0cmlidXRlIHdoZXJlIGl0J3NcbiAgICogbWlzc2luZy5cbiAgICpcbiAgICogVXNlZCBieSBFdmVudENvbnRyYWN0LlxuICAgKi9cbiAgSlNOQU1FU1BBQ0UgPSAnanNuYW1lc3BhY2UnLFxuXG4gIC8qKlxuICAgKiBUaGUgb2kgYXR0cmlidXRlIGlzIGEgbG9nIGltcHJlc3Npb24gdGFnIGZvciBpbXByZXNzaW9uIGxvZ2dpbmdcbiAgICogYW5kIGFjdGlvbiB0cmFja2luZy4gRm9yIGFuIGVsZW1lbnQgdGhhdCBjYXJyaWVzIGEganNhY3Rpb25cbiAgICogYXR0cmlidXRlLCB0aGUgZWxlbWVudCBpcyBpZGVudGlmaWVkIGZvciB0aGUgcHVycG9zZSBvZlxuICAgKiBpbXByZXNzaW9uIGxvZ2dpbmcgYW5kIGNsaWNrIHRyYWNraW5nIGJ5IHRoZSBkb3Qgc2VwYXJhdGVkIHBhdGhcbiAgICogb2YgYWxsIG9pIGF0dHJpYnV0ZXMgaW4gdGhlIGNoYWluIG9mIGFuY2VzdG9ycyBvZiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogVXNlZCBieSBBY3Rpb25GbG93LlxuICAgKi9cbiAgT0kgPSAnb2knLFxuXG4gIC8qKlxuICAgKiBUaGUgdmVkIGF0dHJpYnV0ZSBpcyBhbiBlbmNvZGVkIENsaWNrVHJhY2tpbmdDR0kgcHJvdG8gdG8gdHJhY2tcbiAgICogdmlzdWFsIGVsZW1lbnRzLlxuICAgKlxuICAgKiBVc2VkIGJ5IEFjdGlvbkZsb3cuXG4gICAqL1xuICBWRUQgPSAndmVkJyxcblxuICAvKipcbiAgICogVGhlIHZldCBhdHRyaWJ1dGUgaXMgdGhlIHZpc3VhbCBlbGVtZW50IHR5cGUgdXNlZCB0byBpZGVudGlmeSB0cmFja2VkXG4gICAqIHZpc3VhbCBlbGVtZW50cy5cbiAgICovXG4gIFZFVCA9ICd2ZXQnLFxuXG4gIC8qKlxuICAgKiBTdXBwb3J0IGZvciBpdGVyYXRpb24gb24gcmVwcm9jZXNzaW5nLlxuICAgKlxuICAgKiBVc2VkIGJ5IEFjdGlvbkZsb3cuXG4gICAqL1xuICBKU0lOU1RBTkNFID0gJ2pzaW5zdGFuY2UnLFxuXG4gIC8qKlxuICAgKiBBbGwgY2xpY2sganNhY3Rpb25zIHRoYXQgaGFwcGVuIG9uIHRoZSBlbGVtZW50IHRoYXQgY2FycmllcyB0aGlzXG4gICAqIGF0dHJpYnV0ZSBvciBpdHMgZGVzY2VuZGFudHMgYXJlIGF1dG9tYXRpY2FsbHkgbG9nZ2VkLlxuICAgKiBJbXByZXNzaW9ucyBvZiBqc2FjdGlvbnMgb24gdGhlc2UgZWxlbWVudHMgYXJlIHRyYWNrZWQgdG9vLCBpZlxuICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGltcHJlc3Npb24oKSBtZXRob2Qgb2YgQWN0aW9uRmxvdy5cbiAgICpcbiAgICogVXNlZCBieSBBY3Rpb25GbG93LlxuICAgKi9cbiAgSlNUUkFDSyA9ICdqc3RyYWNrJyxcbn1cbiJdfQ==
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { Attribute as AccessibilityAttribute } from './accessibility';
|
|
9
|
+
import * as eventLib from './event';
|
|
10
|
+
import { EventInfoWrapper } from './event_info';
|
|
11
|
+
import { EventType } from './event_type';
|
|
12
|
+
import { replayEvent } from './replay';
|
|
13
|
+
import { Restriction } from './restriction';
|
|
14
|
+
/**
|
|
15
|
+
* Receives a DOM event, determines the jsaction associated with the source
|
|
16
|
+
* element of the DOM event, and invokes the handler associated with the
|
|
17
|
+
* jsaction.
|
|
18
|
+
*/
|
|
19
|
+
export class BaseDispatcher {
|
|
20
|
+
/**
|
|
21
|
+
* Options are:
|
|
22
|
+
* 1. `eventReplayer`: When the event contract dispatches replay events
|
|
23
|
+
* to the Dispatcher, the Dispatcher collects them and in the next tick
|
|
24
|
+
* dispatches them to the `eventReplayer`.
|
|
25
|
+
* @param dispatchDelegate A function that should handle dispatching an `EventInfoWrapper` to handlers.
|
|
26
|
+
*/
|
|
27
|
+
constructor(dispatchDelegate, { eventReplayer = undefined } = {}) {
|
|
28
|
+
this.dispatchDelegate = dispatchDelegate;
|
|
29
|
+
/** The queue of events. */
|
|
30
|
+
this.queuedEventInfoWrappers = [];
|
|
31
|
+
/** Whether the event replay is scheduled. */
|
|
32
|
+
this.eventReplayScheduled = false;
|
|
33
|
+
this.eventReplayer = eventReplayer;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Receives an event or the event queue from the EventContract. The event
|
|
37
|
+
* queue is copied and it attempts to replay.
|
|
38
|
+
* If event info is passed in it looks for an action handler that can handle
|
|
39
|
+
* the given event. If there is no handler registered queues the event and
|
|
40
|
+
* checks if a loader is registered for the given namespace. If so, calls it.
|
|
41
|
+
*
|
|
42
|
+
* Alternatively, if in global dispatch mode, calls all registered global
|
|
43
|
+
* handlers for the appropriate event type.
|
|
44
|
+
*
|
|
45
|
+
* The three functionalities of this call are deliberately not split into
|
|
46
|
+
* three methods (and then declared as an abstract interface), because the
|
|
47
|
+
* interface is used by EventContract, which lives in a different jsbinary.
|
|
48
|
+
* Therefore the interface between the three is defined entirely in terms that
|
|
49
|
+
* are invariant under jscompiler processing (Function and Array, as opposed
|
|
50
|
+
* to a custom type with method names).
|
|
51
|
+
*
|
|
52
|
+
* @param eventInfo The info for the event that triggered this call or the
|
|
53
|
+
* queue of events from EventContract.
|
|
54
|
+
* @param isGlobalDispatch If true, dispatches a global event instead of a
|
|
55
|
+
* regular jsaction handler.
|
|
56
|
+
* @return An `EventInfo` for the `EventContract` to handle again if the
|
|
57
|
+
* `Dispatcher` tried to resolve an a11y event as a click but failed.
|
|
58
|
+
*/
|
|
59
|
+
dispatch(eventInfo, isGlobalDispatch) {
|
|
60
|
+
const eventInfoWrapper = new EventInfoWrapper(eventInfo);
|
|
61
|
+
if (eventInfoWrapper.getIsReplay()) {
|
|
62
|
+
if (isGlobalDispatch || !this.eventReplayer) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const resolved = resolveA11yEvent(eventInfoWrapper, isGlobalDispatch);
|
|
66
|
+
if (!resolved) {
|
|
67
|
+
// Send the event back through the `EventContract` by dispatching to
|
|
68
|
+
// the browser.
|
|
69
|
+
replayEvent(eventInfoWrapper.getEvent(), eventInfoWrapper.getTargetElement(), eventInfoWrapper.getEventType());
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
this.queueEventInfoWrapper(eventInfoWrapper);
|
|
73
|
+
this.scheduleEventReplay();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const resolved = resolveA11yEvent(eventInfoWrapper, isGlobalDispatch);
|
|
77
|
+
if (!resolved) {
|
|
78
|
+
// Reset action information.
|
|
79
|
+
eventInfoWrapper.setAction(undefined);
|
|
80
|
+
return eventInfoWrapper.eventInfo;
|
|
81
|
+
}
|
|
82
|
+
this.dispatchDelegate(eventInfoWrapper, isGlobalDispatch);
|
|
83
|
+
}
|
|
84
|
+
/** Queue an `EventInfoWrapper` for replay. */
|
|
85
|
+
queueEventInfoWrapper(eventInfoWrapper) {
|
|
86
|
+
this.queuedEventInfoWrappers.push(eventInfoWrapper);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Replays queued events, if any. The replaying will happen in its own
|
|
90
|
+
* stack once the current flow cedes control. This is done to mimic
|
|
91
|
+
* browser event handling.
|
|
92
|
+
*/
|
|
93
|
+
scheduleEventReplay() {
|
|
94
|
+
if (this.eventReplayScheduled ||
|
|
95
|
+
!this.eventReplayer ||
|
|
96
|
+
this.queuedEventInfoWrappers.length === 0) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.eventReplayScheduled = true;
|
|
100
|
+
Promise.resolve().then(() => {
|
|
101
|
+
this.eventReplayScheduled = false;
|
|
102
|
+
this.eventReplayer(this.queuedEventInfoWrappers);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* If a 'MAYBE_CLICK_EVENT_TYPE' event was dispatched, updates the eventType
|
|
108
|
+
* to either click or keydown based on whether the keydown action can be
|
|
109
|
+
* treated as a click. For MAYBE_CLICK_EVENT_TYPE events that are just
|
|
110
|
+
* keydowns, we set flags on the event object so that the event contract
|
|
111
|
+
* does't try to dispatch it as a MAYBE_CLICK_EVENT_TYPE again.
|
|
112
|
+
*
|
|
113
|
+
* @param isGlobalDispatch Whether the eventInfo is meant to be dispatched to
|
|
114
|
+
* the global handlers.
|
|
115
|
+
* @return Returns false if the a11y event could not be resolved and should
|
|
116
|
+
* be re-dispatched.
|
|
117
|
+
*/
|
|
118
|
+
function resolveA11yEvent(eventInfoWrapper, isGlobalDispatch = false) {
|
|
119
|
+
if (eventInfoWrapper.getEventType() !== AccessibilityAttribute.MAYBE_CLICK_EVENT_TYPE) {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
if (isA11yClickEvent(eventInfoWrapper, isGlobalDispatch)) {
|
|
123
|
+
if (shouldPreventDefault(eventInfoWrapper)) {
|
|
124
|
+
eventLib.preventDefault(eventInfoWrapper.getEvent());
|
|
125
|
+
}
|
|
126
|
+
// If the keydown event can be treated as a click, we change the eventType
|
|
127
|
+
// to 'click' so that the dispatcher can retrieve the right handler for
|
|
128
|
+
// it. Even though EventInfo['action'] corresponds to the click action,
|
|
129
|
+
// the global handler and any custom 'getHandler' implementations may rely
|
|
130
|
+
// on the eventType instead.
|
|
131
|
+
eventInfoWrapper.setEventType(EventType.CLICK);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// Otherwise, if the keydown can't be treated as a click, we need to
|
|
135
|
+
// retrigger it because now we need to look for 'keydown' actions instead.
|
|
136
|
+
eventInfoWrapper.setEventType(EventType.KEYDOWN);
|
|
137
|
+
if (!isGlobalDispatch) {
|
|
138
|
+
// This prevents the event contract from setting the
|
|
139
|
+
// AccessibilityAttribute.MAYBE_CLICK_EVENT_TYPE type for Keydown
|
|
140
|
+
// events.
|
|
141
|
+
eventInfoWrapper.getEvent()[AccessibilityAttribute.SKIP_A11Y_CHECK] = true;
|
|
142
|
+
// Since globally dispatched events will get handled by the dispatcher,
|
|
143
|
+
// don't have the event contract dispatch it again.
|
|
144
|
+
eventInfoWrapper.getEvent()[AccessibilityAttribute.SKIP_GLOBAL_DISPATCH] = true;
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Returns true if the default action for this event should be prevented
|
|
152
|
+
* before the event handler is envoked.
|
|
153
|
+
*/
|
|
154
|
+
function shouldPreventDefault(eventInfoWrapper) {
|
|
155
|
+
const actionElement = eventInfoWrapper.getAction()?.element;
|
|
156
|
+
// For parity with no-a11y-support behavior.
|
|
157
|
+
if (!actionElement) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
// Prevent scrolling if the Space key was pressed
|
|
161
|
+
if (eventLib.isSpaceKeyEvent(eventInfoWrapper.getEvent())) {
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
// or prevent the browser's default action for native HTML controls.
|
|
165
|
+
if (eventLib.shouldCallPreventDefaultOnNativeHtmlControl(eventInfoWrapper.getEvent())) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
// Prevent browser from following <a> node links if a jsaction is present
|
|
169
|
+
// and we are dispatching the action now. Note that the targetElement may be
|
|
170
|
+
// a child of an anchor that has a jsaction attached. For that reason, we
|
|
171
|
+
// need to check the actionElement rather than the targetElement.
|
|
172
|
+
if (actionElement.tagName === 'A') {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Returns true if the given key event can be treated as a 'click'.
|
|
179
|
+
*
|
|
180
|
+
* @param isGlobalDispatch Whether the eventInfo is meant to be dispatched to
|
|
181
|
+
* the global handlers.
|
|
182
|
+
*/
|
|
183
|
+
function isA11yClickEvent(eventInfoWrapper, isGlobalDispatch) {
|
|
184
|
+
return ((isGlobalDispatch || eventInfoWrapper.getAction() !== undefined) &&
|
|
185
|
+
eventLib.isActionKeyEvent(eventInfoWrapper.getEvent()));
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Registers deferred functionality for an EventContract and a Jsaction
|
|
189
|
+
* Dispatcher.
|
|
190
|
+
*/
|
|
191
|
+
export function registerDispatcher(eventContract, dispatcher) {
|
|
192
|
+
eventContract.ecrd((eventInfo, globalDispatch) => {
|
|
193
|
+
return dispatcher.dispatch(eventInfo, globalDispatch);
|
|
194
|
+
}, Restriction.I_AM_THE_JSACTION_FRAMEWORK);
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV9kaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9iYXNlX2Rpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFNBQVMsSUFBSSxzQkFBc0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sS0FBSyxRQUFRLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBWSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXZDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDckMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVUxQzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFRekI7Ozs7OztPQU1HO0lBQ0gsWUFDbUIsZ0JBR1IsRUFDVCxFQUFDLGFBQWEsR0FBRyxTQUFTLEtBQWdDLEVBQUU7UUFKM0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUd4QjtRQWxCWCwyQkFBMkI7UUFDViw0QkFBdUIsR0FBdUIsRUFBRSxDQUFDO1FBR2xFLDZDQUE2QztRQUNyQyx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFnQm5DLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F1Qkc7SUFDSCxRQUFRLENBQUMsU0FBb0IsRUFBRSxnQkFBMEI7UUFDdkQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELElBQUksZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUNuQyxJQUFJLGdCQUFnQixJ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Z0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FDdkQsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLGFBQXFDLEVBQ3JDLFVBQTBCO0lBRTFCLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFvQixFQUFFLGNBQXdCLEVBQUUsRUFBRTtRQUNwRSxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3hELENBQUMsRUFBRSxXQUFXLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7QXR0cmlidXRlIGFzIEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGV9IGZyb20gJy4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgKiBhcyBldmVudExpYiBmcm9tICcuL2V2ZW50JztcbmltcG9ydCB7RXZlbnRJbmZvLCBFdmVudEluZm9XcmFwcGVyfSBmcm9tICcuL2V2ZW50X2luZm8nO1xuaW1wb3J0IHtFdmVudFR5cGV9IGZyb20gJy4vZXZlbnRfdHlwZSc7XG5pbXBvcnQge1VucmVuYW1lZEV2ZW50Q29udHJhY3R9IGZyb20gJy4vZXZlbnRjb250cmFjdCc7XG5pbXBvcnQge3JlcGxheUV2ZW50fSBmcm9tICcuL3JlcGxheSc7XG5pbXBvcnQge1Jlc3RyaWN0aW9ufSBmcm9tICcuL3Jlc3RyaWN0aW9uJztcbi8qKlxuICogQSByZXBsYXllciBpcyBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIHF1ZXVlZCBldmVudHMsXG4gKiBlaXRoZXIgZnJvbSB0aGUgYEV2ZW50Q29udHJhY3RgIG9yIHdoZW4gdGhlcmUgYXJlIG5vIGRldGVjdGVkIGhhbmRsZXJzLlxuICovXG5leHBvcnQgdHlwZSBSZXBsYXllciA9IChldmVudEluZm9XcmFwcGVyczogRXZlbnRJbmZvV3JhcHBlcltdKSA9PiB2b2lkO1xuLyoqXG4gKiBBIGhhbmRsZXIgaXMgZGlzcGF0Y2hlZCB0byBkdXJpbmcgbm9ybWFsIGhhbmRsaW5nLlxuICovXG5leHBvcnQgdHlwZSBFdmVudEluZm9XcmFwcGVySGFuZGxlciA9IChldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyKSA9PiB2b2lkO1xuLyoqXG4gKiBSZWNlaXZlcyBhIERPTSBldmVudCwgZGV0ZXJtaW5lcyB0aGUganNhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzb3VyY2VcbiAqIGVsZW1lbnQgb2YgdGhlIERPTSBldmVudCwgYW5kIGludm9rZXMgdGhlIGhhbmRsZXIgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICoganNhY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlRGlzcGF0Y2hlciB7XG4gIC8qKiBUaGUgcXVldWUgb2YgZXZlbnRzLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHF1ZXVlZEV2ZW50SW5mb1dyYXBwZXJzOiBFdmVudEluZm9XcmFwcGVyW10gPSBbXTtcbiAgLyoqIFRoZSByZXBsYXllciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgcXVldWVkIGV2ZW50cy4gKi9cbiAgcHJpdmF0ZSBldmVudFJlcGxheWVyPzogUmVwbGF5ZXI7XG4gIC8qKiBXaGV0aGVyIHRoZSBldmVudCByZXBsYXkgaXMgc2NoZWR1bGVkLiAqL1xuICBwcml2YXRlIGV2ZW50UmVwbGF5U2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgYXJlOlxuICAgKiAgIDEuIGBldmVudFJlcGxheWVyYDogV2hlbiB0aGUgZXZlbnQgY29udHJhY3QgZGlzcGF0Y2hlcyByZXBsYXkgZXZlbnRzXG4gICAqICAgICAgdG8gdGhlIERpc3BhdGNoZXIsIHRoZSBEaXNwYXRjaGVyIGNvbGxlY3RzIHRoZW0gYW5kIGluIHRoZSBuZXh0IHRpY2tcbiAgICogICAgICBkaXNwYXRjaGVzIHRoZW0gdG8gdGhlIGBldmVudFJlcGxheWVyYC5cbiAgICogQHBhcmFtIGRpc3BhdGNoRGVsZWdhdGUgQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBoYW5kbGUgZGlzcGF0Y2hpbmcgYW4gYEV2ZW50SW5mb1dyYXBwZXJgIHRvIGhhbmRsZXJzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNwYXRjaERlbGVnYXRlOiAoXG4gICAgICBldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyLFxuICAgICAgaXNHbG9iYWxEaXNwYXRjaD86IGJvb2xlYW4sXG4gICAgKSA9PiB2b2lkLFxuICAgIHtldmVudFJlcGxheWVyID0gdW5kZWZpbmVkfToge2V2ZW50UmVwbGF5ZXI/OiBSZXBsYXllcn0gPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5ldmVudFJlcGxheWVyID0gZXZlbnRSZXBsYXllcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNlaXZlcyBhbiBldmVudCBvciB0aGUgZXZlbnQgcXVldWUgZnJvbSB0aGUgRXZlbnRDb250cmFjdC4gVGhlIGV2ZW50XG4gICAqIHF1ZXVlIGlzIGNvcGllZCBhbmQgaXQgYXR0ZW1wdHMgdG8gcmVwbGF5LlxuICAgKiBJZiBldmVudCBpbmZvIGlzIHBhc3NlZCBpbiBpdCBsb29rcyBmb3IgYW4gYWN0aW9uIGhhbmRsZXIgdGhhdCBjYW4gaGFuZGxlXG4gICAqIHRoZSBnaXZlbiBldmVudC4gIElmIHRoZXJlIGlzIG5vIGhhbmRsZXIgcmVnaXN0ZXJlZCBxdWV1ZXMgdGhlIGV2ZW50IGFuZFxuICAgKiBjaGVja3MgaWYgYSBsb2FkZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZS4gSWYgc28sIGNhbGxzIGl0LlxuICAgKlxuICAgKiBBbHRlcm5hdGl2ZWx5LCBpZiBpbiBnbG9iYWwgZGlzcGF0Y2ggbW9kZSwgY2FsbHMgYWxsIHJlZ2lzdGVyZWQgZ2xvYmFsXG4gICAqIGhhbmRsZXJzIGZvciB0aGUgYXBwcm9wcmlhdGUgZXZlbnQgdHlwZS5cbiAgICpcbiAgICogVGhlIHRocmVlIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGlzIGNhbGwgYXJlIGRlbGliZXJhdGVseSBub3Qgc3BsaXQgaW50b1xuICAgKiB0aHJlZSBtZXRob2RzIChhbmQgdGhlbiBkZWNsYXJlZCBhcyBhbiBhYnN0cmFjdCBpbnRlcmZhY2UpLCBiZWNhdXNlIHRoZVxuICAgKiBpbnRlcmZhY2UgaXMgdXNlZCBieSBFdmVudENvbnRyYWN0LCB3aGljaCBsaXZlcyBpbiBhIGRpZmZlcmVudCBqc2JpbmFyeS5cbiAgICogVGhlcmVmb3JlIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgdGhyZWUgaXMgZGVmaW5lZCBlbnRpcmVseSBpbiB0ZXJtcyB0aGF0XG4gICAqIGFyZSBpbnZhcmlhbnQgdW5kZXIganNjb21waWxlciBwcm9jZXNzaW5nIChGdW5jdGlvbiBhbmQgQXJyYXksIGFzIG9wcG9zZWRcbiAgICogdG8gYSBjdXN0b20gdHlwZSB3aXRoIG1ldGhvZCBuYW1lcykuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudEluZm8gVGhlIGluZm8gZm9yIHRoZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIGNhbGwgb3IgdGhlXG4gICAqICAgICBxdWV1ZSBvZiBldmVudHMgZnJvbSBFdmVudENvbnRyYWN0LlxuICAgKiBAcGFyYW0gaXNHbG9iYWxEaXNwYXRjaCBJZiB0cnVlLCBkaXNwYXRjaGVzIGEgZ2xvYmFsIGV2ZW50IGluc3RlYWQgb2YgYVxuICAgKiAgICAgcmVndWxhciBqc2FjdGlvbiBoYW5kbGVyLlxuICAgKiBAcmV0dXJuIEFuIGBFdmVudEluZm9gIGZvciB0aGUgYEV2ZW50Q29udHJhY3RgIHRvIGhhbmRsZSBhZ2FpbiBpZiB0aGVcbiAgICogICAgYERpc3BhdGNoZXJgIHRyaWVkIHRvIHJlc29sdmUgYW4gYTExeSBldmVudCBhcyBhIGNsaWNrIGJ1dCBmYWlsZWQuXG4gICAqL1xuICBkaXNwYXRjaChldmVudEluZm86IEV2ZW50SW5mbywgaXNHbG9iYWxEaXNwYXRjaD86IGJvb2xlYW4pOiBFdmVudEluZm8gfCB2b2lkIHtcbiAgICBjb25zdCBldmVudEluZm9XcmFwcGVyID0gbmV3IEV2ZW50SW5mb1dyYXBwZXIoZXZlbnRJbmZvKTtcbiAgICBpZiAoZXZlbnRJbmZvV3JhcHBlci5nZXRJc1JlcGxheSgpKSB7XG4gICAgICBpZiAoaXNHbG9iYWxEaXNwYXRjaCB8fCAhdGhpcy5ldmVudFJlcGxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUExMXlFdmVudChldmVudEluZm9XcmFwcGVyLCBpc0dsb2JhbERpc3BhdGNoKTtcbiAgICAgIGlmICghcmVzb2x2ZWQpIHtcbiAgICAgICAgLy8gU2VuZCB0aGUgZXZlbnQgYmFjayB0aHJvdWdoIHRoZSBgRXZlbnRDb250cmFjdGAgYnkgZGlzcGF0Y2hpbmcgdG9cbiAgICAgICAgLy8gdGhlIGJyb3dzZXIuXG4gICAgICAgIHJlcGxheUV2ZW50KFxuICAgICAgICAgIGV2ZW50SW5mb1dyYXBwZXIuZ2V0RXZlbnQoKSxcbiAgICAgICAgICBldmVudEluZm9XcmFwcGVyLmdldFRhcmdldEVsZW1lbnQoKSxcbiAgICAgICAgICBldmVudEluZm9XcmFwcGVyLmdldEV2ZW50VHlwZSgpLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnF1ZXVlRXZlbnRJbmZvV3JhcHBlcihldmVudEluZm9XcmFwcGVyKTtcbiAgICAgIHRoaXMuc2NoZWR1bGVFdmVudFJlcGxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVBMTF5RXZlbnQoZXZlbnRJbmZvV3JhcHBlciwgaXNHbG9iYWxEaXNwYXRjaCk7XG4gICAgaWYgKCFyZXNvbHZlZCkge1xuICAgICAgLy8gUmVzZXQgYWN0aW9uIGluZm9ybWF0aW9uLlxuICAgICAgZXZlbnRJbmZvV3JhcHBlci5zZXRBY3Rpb24odW5kZWZpbmVkKTtcbiAgICAgIHJldHVybiBldmVudEluZm9XcmFwcGVyLmV2ZW50SW5mbztcbiAgICB9XG4gICAgdGhpcy5kaXNwYXRjaERlbGVnYXRlKGV2ZW50SW5mb1dyYXBwZXIsIGlzR2xvYmFsRGlzcGF0Y2gpO1xuICB9XG5cbiAgLyoqIFF1ZXVlIGFuIGBFdmVudEluZm9XcmFwcGVyYCBmb3IgcmVwbGF5LiAqL1xuICBxdWV1ZUV2ZW50SW5mb1dyYXBwZXIoZXZlbnRJbmZvV3JhcHBlcjogRXZlbnRJbmZvV3JhcHBlcikge1xuICAgIHRoaXMucXVldWVkRXZlbnRJbmZvV3JhcHBlcnMucHVzaChldmVudEluZm9XcmFwcGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYXlzIHF1ZXVlZCBldmVudHMsIGlmIGFueS4gVGhlIHJlcGxheWluZyB3aWxsIGhhcHBlbiBpbiBpdHMgb3duXG4gICAqIHN0YWNrIG9uY2UgdGhlIGN1cnJlbnQgZmxvdyBjZWRlcyBjb250cm9sLiBUaGlzIGlzIGRvbmUgdG8gbWltaWNcbiAgICogYnJvd3NlciBldmVudCBoYW5kbGluZy5cbiAgICovXG4gIHNjaGVkdWxlRXZlbnRSZXBsYXkoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5ldmVudFJlcGxheVNjaGVkdWxlZCB8fFxuICAgICAgIXRoaXMuZXZlbnRSZXBsYXllciB8fFxuICAgICAgdGhpcy5xdWV1ZWRFdmVudEluZm9XcmFwcGVycy5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ldmVudFJlcGxheVNjaGVkdWxlZCA9IHRydWU7XG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmV2ZW50UmVwbGF5U2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmV2ZW50UmVwbGF5ZXIhKHRoaXMucXVldWVkRXZlbnRJbmZvV3JhcHBlcnMpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogSWYgYSAnTUFZQkVfQ0xJQ0tfRVZFTlRfVFlQRScgZXZlbnQgd2FzIGRpc3BhdGNoZWQsIHVwZGF0ZXMgdGhlIGV2ZW50VHlwZVxuICogdG8gZWl0aGVyIGNsaWNrIG9yIGtleWRvd24gYmFzZWQgb24gd2hldGhlciB0aGUga2V5ZG93biBhY3Rpb24gY2FuIGJlXG4gKiB0cmVhdGVkIGFzIGEgY2xpY2suIEZvciBNQVlCRV9DTElDS19FVkVOVF9UWVBFIGV2ZW50cyB0aGF0IGFyZSBqdXN0XG4gKiBrZXlkb3ducywgd2Ugc2V0IGZsYWdzIG9uIHRoZSBldmVudCBvYmplY3Qgc28gdGhhdCB0aGUgZXZlbnQgY29udHJhY3RcbiAqIGRvZXMndCB0cnkgdG8gZGlzcGF0Y2ggaXQgYXMgYSBNQVlCRV9DTElDS19FVkVOVF9UWVBFIGFnYWluLlxuICpcbiAqIEBwYXJhbSBpc0dsb2JhbERpc3BhdGNoIFdoZXRoZXIgdGhlIGV2ZW50SW5mbyBpcyBtZWFudCB0byBiZSBkaXNwYXRjaGVkIHRvXG4gKiAgICAgdGhlIGdsb2JhbCBoYW5kbGVycy5cbiAqIEByZXR1cm4gUmV0dXJucyBmYWxzZSBpZiB0aGUgYTExeSBldmVudCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgYW5kIHNob3VsZFxuICogICAgYmUgcmUtZGlzcGF0Y2hlZC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUExMXlFdmVudChldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyLCBpc0dsb2JhbERpc3BhdGNoID0gZmFsc2UpOiBib29sZWFuIHtcbiAgaWYgKGV2ZW50SW5mb1dyYXBwZXIuZ2V0RXZlbnRUeXBlKCkgIT09IEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGUuTUFZQkVfQ0xJQ0tfRVZFTlRfVFlQRSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0ExMXlDbGlja0V2ZW50KGV2ZW50SW5mb1dyYXBwZXIsIGlzR2xvYmFsRGlzcGF0Y2gpKSB7XG4gICAgaWYgKHNob3VsZFByZXZlbnREZWZhdWx0KGV2ZW50SW5mb1dyYXBwZXIpKSB7XG4gICAgICBldmVudExpYi5wcmV2ZW50RGVmYXVsdChldmVudEluZm9XcmFwcGVyLmdldEV2ZW50KCkpO1xuICAgIH1cbiAgICAvLyBJZiB0aGUga2V5ZG93biBldmVudCBjYW4gYmUgdHJlYXRlZCBhcyBhIGNsaWNrLCB3ZSBjaGFuZ2UgdGhlIGV2ZW50VHlwZVxuICAgIC8vIHRvICdjbGljaycgc28gdGhhdCB0aGUgZGlzcGF0Y2hlciBjYW4gcmV0cmlldmUgdGhlIHJpZ2h0IGhhbmRsZXIgZm9yXG4gICAgLy8gaXQuIEV2ZW4gdGhvdWdoIEV2ZW50SW5mb1snYWN0aW9uJ10gY29ycmVzcG9uZHMgdG8gdGhlIGNsaWNrIGFjdGlvbixcbiAgICAvLyB0aGUgZ2xvYmFsIGhhbmRsZXIgYW5kIGFueSBjdXN0b20gJ2dldEhhbmRsZXInIGltcGxlbWVudGF0aW9ucyBtYXkgcmVseVxuICAgIC8vIG9uIHRoZSBldmVudFR5cGUgaW5zdGVhZC5cbiAgICBldmVudEluZm9XcmFwcGVyLnNldEV2ZW50VHlwZShFdmVudFR5cGUuQ0xJQ0spO1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlIGtleWRvd24gY2FuJ3QgYmUgdHJlYXRlZCBhcyBhIGNsaWNrLCB3ZSBuZWVkIHRvXG4gICAgLy8gcmV0cmlnZ2VyIGl0IGJlY2F1c2Ugbm93IHdlIG5lZWQgdG8gbG9vayBmb3IgJ2tleWRvd24nIGFjdGlvbnMgaW5zdGVhZC5cbiAgICBldmVudEluZm9XcmFwcGVyLnNldEV2ZW50VHlwZShFdmVudFR5cGUuS0VZRE9XTik7XG4gICAgaWYgKCFpc0dsb2JhbERpc3BhdGNoKSB7XG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSBldmVudCBjb250cmFjdCBmcm9tIHNldHRpbmcgdGhlXG4gICAgICAvLyBBY2Nlc3NpYmlsaXR5QXR0cmlidXRlLk1BWUJFX0NMSUNLX0VWRU5UX1RZUEUgdHlwZSBmb3IgS2V5ZG93blxuICAgICAgLy8gZXZlbnRzLlxuICAgICAgZXZlbnRJbmZvV3JhcHBlci5nZXRFdmVudCgpW0FjY2Vzc2liaWxpdHlBdHRyaWJ1dGUuU0tJUF9BMTFZX0NIRUNLXSA9IHRydWU7XG4gICAgICAvLyBTaW5jZSBnbG9iYWxseSBkaXNwYXRjaGVkIGV2ZW50cyB3aWxsIGdldCBoYW5kbGVkIGJ5IHRoZSBkaXNwYXRjaGVyLFxuICAgICAgLy8gZG9uJ3QgaGF2ZSB0aGUgZXZlbnQgY29udHJhY3QgZGlzcGF0Y2ggaXQgYWdhaW4uXG4gICAgICBldmVudEluZm9XcmFwcGVyLmdldEV2ZW50KClbQWNjZXNzaWJpbGl0eUF0dHJpYnV0ZS5TS0lQX0dMT0JBTF9ESVNQQVRDSF0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGlzIGV2ZW50IHNob3VsZCBiZSBwcmV2ZW50ZWRcbiAqIGJlZm9yZSB0aGUgZXZlbnQgaGFuZGxlciBpcyBlbnZva2VkLlxuICovXG5mdW5jdGlvbiBzaG91bGRQcmV2ZW50RGVmYXVsdChldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IGFjdGlvbkVsZW1lbnQgPSBldmVudEluZm9XcmFwcGVyLmdldEFjdGlvbigpPy5lbGVtZW50O1xuICAvLyBGb3IgcGFyaXR5IHdpdGggbm8tYTExeS1zdXBwb3J0IGJlaGF2aW9yLlxuICBpZiAoIWFjdGlvbkVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gUHJldmVudCBzY3JvbGxpbmcgaWYgdGhlIFNwYWNlIGtleSB3YXMgcHJlc3NlZFxuICBpZiAoZXZlbnRMaWIuaXNTcGFjZUtleUV2ZW50KGV2ZW50SW5mb1dyYXBwZXIuZ2V0RXZlbnQoKSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBvciBwcmV2ZW50IHRoZSBicm93c2VyJ3MgZGVmYXVsdCBhY3Rpb24gZm9yIG5hdGl2ZSBIVE1MIGNvbnRyb2xzLlxuICBpZiAoZXZlbnRMaWIuc2hvdWxkQ2FsbFByZXZlbnREZWZhdWx0T25OYXRpdmVIdG1sQ29udHJvbChldmVudEluZm9XcmFwcGVyLmdldEV2ZW50KCkpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gUHJldmVudCBicm93c2VyIGZyb20gZm9sbG93aW5nIDxhPiBub2RlIGxpbmtzIGlmIGEganNhY3Rpb24gaXMgcHJlc2VudFxuICAvLyBhbmQgd2UgYXJlIGRpc3BhdGNoaW5nIHRoZSBhY3Rpb24gbm93LiBOb3RlIHRoYXQgdGhlIHRhcmdldEVsZW1lbnQgbWF5IGJlXG4gIC8vIGEgY2hpbGQgb2YgYW4gYW5jaG9yIHRoYXQgaGFzIGEganNhY3Rpb24gYXR0YWNoZWQuIEZvciB0aGF0IHJlYXNvbiwgd2VcbiAgLy8gbmVlZCB0byBjaGVjayB0aGUgYWN0aW9uRWxlbWVudCByYXRoZXIgdGhhbiB0aGUgdGFyZ2V0RWxlbWVudC5cbiAgaWYgKGFjdGlvbkVsZW1lbnQudGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4ga2V5IGV2ZW50IGNhbiBiZSB0cmVhdGVkIGFzIGEgJ2NsaWNrJy5cbiAqXG4gKiBAcGFyYW0gaXNHbG9iYWxEaXNwYXRjaCBXaGV0aGVyIHRoZSBldmVudEluZm8gaXMgbWVhbnQgdG8gYmUgZGlzcGF0Y2hlZCB0b1xuICogICAgIHRoZSBnbG9iYWwgaGFuZGxlcnMuXG4gKi9cbmZ1bmN0aW9uIGlzQTExeUNsaWNrRXZlbnQoZXZlbnRJbmZvV3JhcHBlcjogRXZlbnRJbmZvV3JhcHBlciwgaXNHbG9iYWxEaXNwYXRjaD86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAoaXNHbG9iYWxEaXNwYXRjaCB8fCBldmVudEluZm9XcmFwcGVyLmdldEFjdGlvbigpICE9PSB1bmRlZmluZWQpICYmXG4gICAgZXZlbnRMaWIuaXNBY3Rpb25LZXlFdmVudChldmVudEluZm9XcmFwcGVyLmdldEV2ZW50KCkpXG4gICk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGRlZmVycmVkIGZ1bmN0aW9uYWxpdHkgZm9yIGFuIEV2ZW50Q29udHJhY3QgYW5kIGEgSnNhY3Rpb25cbiAqIERpc3BhdGNoZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckRpc3BhdGNoZXIoXG4gIGV2ZW50Q29udHJhY3Q6IFVucmVuYW1lZEV2ZW50Q29udHJhY3QsXG4gIGRpc3BhdGNoZXI6IEJhc2VEaXNwYXRjaGVyLFxuKSB7XG4gIGV2ZW50Q29udHJhY3QuZWNyZCgoZXZlbnRJbmZvOiBFdmVudEluZm8sIGdsb2JhbERpc3BhdGNoPzogYm9vbGVhbikgPT4ge1xuICAgIHJldHVybiBkaXNwYXRjaGVyLmRpc3BhdGNoKGV2ZW50SW5mbywgZ2xvYmFsRGlzcGF0Y2gpO1xuICB9LCBSZXN0cmljdGlvbi5JX0FNX1RIRV9KU0FDVElPTl9GUkFNRVdPUkspO1xufVxuIl19
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { Property } from './property';
|
|
9
|
+
/**
|
|
10
|
+
* Map from jsaction annotation to a parsed map from event name to action name.
|
|
11
|
+
*/
|
|
12
|
+
const parseCache = {};
|
|
13
|
+
/**
|
|
14
|
+
* Reads the jsaction parser cache from the given DOM Element.
|
|
15
|
+
*
|
|
16
|
+
* @param element .
|
|
17
|
+
* @return Map from event to qualified name of the jsaction bound to it.
|
|
18
|
+
*/
|
|
19
|
+
export function get(element) {
|
|
20
|
+
// @ts-ignore
|
|
21
|
+
return element[Property.JSACTION];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Writes the jsaction parser cache to the given DOM Element.
|
|
25
|
+
*
|
|
26
|
+
* @param element .
|
|
27
|
+
* @param actionMap Map from event to qualified name of the jsaction bound to
|
|
28
|
+
* it.
|
|
29
|
+
*/
|
|
30
|
+
export function set(element, actionMap) {
|
|
31
|
+
// @ts-ignore
|
|
32
|
+
element[Property.JSACTION] = actionMap;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Looks up the parsed action map from the source jsaction attribute value.
|
|
36
|
+
*
|
|
37
|
+
* @param text Unparsed jsaction attribute value.
|
|
38
|
+
* @return Parsed jsaction attribute value, if already present in the cache.
|
|
39
|
+
*/
|
|
40
|
+
export function getParsed(text) {
|
|
41
|
+
return parseCache[text];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Inserts the parse result for the given source jsaction value into the cache.
|
|
45
|
+
*
|
|
46
|
+
* @param text Unparsed jsaction attribute value.
|
|
47
|
+
* @param parsed Attribute value parsed into the action map.
|
|
48
|
+
*/
|
|
49
|
+
export function setParsed(text, parsed) {
|
|
50
|
+
parseCache[text] = parsed;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Clears the jsaction parser cache from the given DOM Element.
|
|
54
|
+
*
|
|
55
|
+
* @param element .
|
|
56
|
+
*/
|
|
57
|
+
export function clear(element) {
|
|
58
|
+
if (Property.JSACTION in element) {
|
|
59
|
+
delete element[Property.JSACTION];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Reads the cached jsaction namespace from the given DOM
|
|
64
|
+
* Element. Undefined means there is no cached value; null is a cached
|
|
65
|
+
* jsnamespace attribute that's absent.
|
|
66
|
+
*
|
|
67
|
+
* @param element .
|
|
68
|
+
* @return .
|
|
69
|
+
*/
|
|
70
|
+
export function getNamespace(element) {
|
|
71
|
+
// @ts-ignore
|
|
72
|
+
return element[Property.JSNAMESPACE];
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Writes the cached jsaction namespace to the given DOM Element. Null
|
|
76
|
+
* represents a jsnamespace attribute that's absent.
|
|
77
|
+
*
|
|
78
|
+
* @param element .
|
|
79
|
+
* @param jsnamespace .
|
|
80
|
+
*/
|
|
81
|
+
export function setNamespace(element, jsnamespace) {
|
|
82
|
+
// @ts-ignore
|
|
83
|
+
element[Property.JSNAMESPACE] = jsnamespace;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Clears the cached jsaction namespace from the given DOM Element.
|
|
87
|
+
*
|
|
88
|
+
* @param element .
|
|
89
|
+
*/
|
|
90
|
+
export function clearNamespace(element) {
|
|
91
|
+
if (Property.JSNAMESPACE in element) {
|
|
92
|
+
delete element[Property.JSNAMESPACE];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFcEM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBNkMsRUFBRSxDQUFDO0FBRWhFOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUFnQjtJQUNsQyxhQUFhO0lBQ2IsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQWdCLEVBQUUsU0FBa0M7SUFDdEUsYUFBYTtJQUNiLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBWTtJQUNwQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQVksRUFBRSxNQUErQjtJQUNyRSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxPQUFnQjtJQUNwQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksT0FBTyxFQUFFLENBQUM7UUFDakMsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsT0FBZ0I7SUFDM0MsYUFBYTtJQUNiLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFnQixFQUFFLFdBQTBCO0lBQ3ZFLGFBQWE7SUFDYixPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsT0FBZ0I7SUFDN0MsSUFBSSxRQUFRLENBQUMsV0FBVyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1Byb3BlcnR5fSBmcm9tICcuL3Byb3BlcnR5JztcblxuLyoqXG4gKiBNYXAgZnJvbSBqc2FjdGlvbiBhbm5vdGF0aW9uIHRvIGEgcGFyc2VkIG1hcCBmcm9tIGV2ZW50IG5hbWUgdG8gYWN0aW9uIG5hbWUuXG4gKi9cbmNvbnN0IHBhcnNlQ2FjaGU6IHtba2V5OiBzdHJpbmddOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfX0gPSB7fTtcblxuLyoqXG4gKiBSZWFkcyB0aGUganNhY3Rpb24gcGFyc2VyIGNhY2hlIGZyb20gdGhlIGdpdmVuIERPTSBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IC5cbiAqIEByZXR1cm4gTWFwIGZyb20gZXZlbnQgdG8gcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGpzYWN0aW9uIGJvdW5kIHRvIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGVsZW1lbnQ6IEVsZW1lbnQpOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIGVsZW1lbnRbUHJvcGVydHkuSlNBQ1RJT05dO1xufVxuXG4vKipcbiAqIFdyaXRlcyB0aGUganNhY3Rpb24gcGFyc2VyIGNhY2hlIHRvIHRoZSBnaXZlbiBET00gRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAuXG4gKiBAcGFyYW0gYWN0aW9uTWFwIE1hcCBmcm9tIGV2ZW50IHRvIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBqc2FjdGlvbiBib3VuZCB0b1xuICogICAgIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0KGVsZW1lbnQ6IEVsZW1lbnQsIGFjdGlvbk1hcDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgLy8gQHRzLWlnbm9yZVxuICBlbGVtZW50W1Byb3BlcnR5LkpTQUNUSU9OXSA9IGFjdGlvbk1hcDtcbn1cblxuLyoqXG4gKiBMb29rcyB1cCB0aGUgcGFyc2VkIGFjdGlvbiBtYXAgZnJvbSB0aGUgc291cmNlIGpzYWN0aW9uIGF0dHJpYnV0ZSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gdGV4dCBVbnBhcnNlZCBqc2FjdGlvbiBhdHRyaWJ1dGUgdmFsdWUuXG4gKiBAcmV0dXJuIFBhcnNlZCBqc2FjdGlvbiBhdHRyaWJ1dGUgdmFsdWUsIGlmIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgY2FjaGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJzZWQodGV4dDogc3RyaW5nKToge1trZXk6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQge1xuICByZXR1cm4gcGFyc2VDYWNoZVt0ZXh0XTtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIHRoZSBwYXJzZSByZXN1bHQgZm9yIHRoZSBnaXZlbiBzb3VyY2UganNhY3Rpb24gdmFsdWUgaW50byB0aGUgY2FjaGUuXG4gKlxuICogQHBhcmFtIHRleHQgVW5wYXJzZWQganNhY3Rpb24gYXR0cmlidXRlIHZhbHVlLlxuICogQHBhcmFtIHBhcnNlZCBBdHRyaWJ1dGUgdmFsdWUgcGFyc2VkIGludG8gdGhlIGFjdGlvbiBtYXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYXJzZWQodGV4dDogc3RyaW5nLCBwYXJzZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KSB7XG4gIHBhcnNlQ2FjaGVbdGV4dF0gPSBwYXJzZWQ7XG59XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBqc2FjdGlvbiBwYXJzZXIgY2FjaGUgZnJvbSB0aGUgZ2l2ZW4gRE9NIEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoZWxlbWVudDogRWxlbWVudCkge1xuICBpZiAoUHJvcGVydHkuSlNBQ1RJT04gaW4gZWxlbWVudCkge1xuICAgIGRlbGV0ZSBlbGVtZW50W1Byb3BlcnR5LkpTQUNUSU9OXTtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBjYWNoZWQganNhY3Rpb24gbmFtZXNwYWNlIGZyb20gdGhlIGdpdmVuIERPTVxuICogRWxlbWVudC4gVW5kZWZpbmVkIG1lYW5zIHRoZXJlIGlzIG5vIGNhY2hlZCB2YWx1ZTsgbnVsbCBpcyBhIGNhY2hlZFxuICoganNuYW1lc3BhY2UgYXR0cmlidXRlIHRoYXQncyBhYnNlbnQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLlxuICogQHJldHVybiAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lc3BhY2UoZWxlbWVudDogRWxlbWVudCk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQge1xuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBlbGVtZW50W1Byb3BlcnR5LkpTTkFNRVNQQUNFXTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgdGhlIGNhY2hlZCBqc2FjdGlvbiBuYW1lc3BhY2UgdG8gdGhlIGdpdmVuIERPTSBFbGVtZW50LiBOdWxsXG4gKiByZXByZXNlbnRzIGEganNuYW1lc3BhY2UgYXR0cmlidXRlIHRoYXQncyBhYnNlbnQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLlxuICogQHBhcmFtIGpzbmFtZXNwYWNlIC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldE5hbWVzcGFjZShlbGVtZW50OiBFbGVtZW50LCBqc25hbWVzcGFjZTogc3RyaW5nIHwgbnVsbCkge1xuICAvLyBAdHMtaWdub3JlXG4gIGVsZW1lbnRbUHJvcGVydHkuSlNOQU1FU1BBQ0VdID0ganNuYW1lc3BhY2U7XG59XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBjYWNoZWQganNhY3Rpb24gbmFtZXNwYWNlIGZyb20gdGhlIGdpdmVuIERPTSBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyTmFtZXNwYWNlKGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgaWYgKFByb3BlcnR5LkpTTkFNRVNQQUNFIGluIGVsZW1lbnQpIHtcbiAgICBkZWxldGUgZWxlbWVudFtQcm9wZXJ0eS5KU05BTUVTUEFDRV07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
export const Char = {
|
|
9
|
+
/**
|
|
10
|
+
* The separator between the namespace and the action name in the
|
|
11
|
+
* jsaction attribute value.
|
|
12
|
+
*/
|
|
13
|
+
NAMESPACE_ACTION_SEPARATOR: '.',
|
|
14
|
+
/**
|
|
15
|
+
* The separator between the event name and action in the jsaction
|
|
16
|
+
* attribute value.
|
|
17
|
+
*/
|
|
18
|
+
EVENT_ACTION_SEPARATOR: ':',
|
|
19
|
+
/**
|
|
20
|
+
* The separator between the logged oi attribute values in the &oi=
|
|
21
|
+
* URL parameter value.
|
|
22
|
+
*/
|
|
23
|
+
OI_SEPARATOR: '.',
|
|
24
|
+
/**
|
|
25
|
+
* The separator between the key and the value pairs in the &cad=
|
|
26
|
+
* URL parameter value.
|
|
27
|
+
*/
|
|
28
|
+
CAD_KEY_VALUE_SEPARATOR: ':',
|
|
29
|
+
/**
|
|
30
|
+
* The separator between the key-value pairs in the &cad= URL
|
|
31
|
+
* parameter value.
|
|
32
|
+
*/
|
|
33
|
+
CAD_SEPARATOR: ',',
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvcHJpbWl0aXZlcy9ldmVudC1kaXNwYXRjaC9zcmMvY2hhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUc7SUFDbEI7OztPQUdHO0lBQ0gsMEJBQTBCLEVBQUUsR0FBRztJQUUvQjs7O09BR0c7SUFDSCxzQkFBc0IsRUFBRSxHQUFHO0lBRTNCOzs7T0FHRztJQUNILFlBQVksRUFBRSxHQUFHO0lBRWpCOzs7T0FHRztJQUNILHVCQUF1QixFQUFFLEdBQUc7SUFFNUI7OztPQUdHO0lBQ0gsYUFBYSxFQUFFLEdBQUc7Q0FDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQgY29uc3QgQ2hhciA9IHtcbiAgLyoqXG4gICAqIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgbmFtZXNwYWNlIGFuZCB0aGUgYWN0aW9uIG5hbWUgaW4gdGhlXG4gICAqIGpzYWN0aW9uIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICovXG4gIE5BTUVTUEFDRV9BQ1RJT05fU0VQQVJBVE9SOiAnLicsXG5cbiAgLyoqXG4gICAqIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgZXZlbnQgbmFtZSBhbmQgYWN0aW9uIGluIHRoZSBqc2FjdGlvblxuICAgKiBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqL1xuICBFVkVOVF9BQ1RJT05fU0VQQVJBVE9SOiAnOicsXG5cbiAgLyoqXG4gICAqIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgbG9nZ2VkIG9pIGF0dHJpYnV0ZSB2YWx1ZXMgaW4gdGhlICZvaT1cbiAgICogVVJMIHBhcmFtZXRlciB2YWx1ZS5cbiAgICovXG4gIE9JX1NFUEFSQVRPUjogJy4nLFxuXG4gIC8qKlxuICAgKiBUaGUgc2VwYXJhdG9yIGJldHdlZW4gdGhlIGtleSBhbmQgdGhlIHZhbHVlIHBhaXJzIGluIHRoZSAmY2FkPVxuICAgKiBVUkwgcGFyYW1ldGVyIHZhbHVlLlxuICAgKi9cbiAgQ0FEX0tFWV9WQUxVRV9TRVBBUkFUT1I6ICc6JyxcblxuICAvKipcbiAgICogVGhlIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBrZXktdmFsdWUgcGFpcnMgaW4gdGhlICZjYWQ9IFVSTFxuICAgKiBwYXJhbWV0ZXIgdmFsdWUuXG4gICAqL1xuICBDQURfU0VQQVJBVE9SOiAnLCcsXG59O1xuIl19
|