@blox/material
Version:
Material Components for Angular
174 lines • 25 kB
JavaScript
import { ElementRef, Renderer2, HostListener, Directive } from '@angular/core';
import { MDCRippleFoundation, util } from '@material/ripple';
import { events } from '@material/dom';
import { ponyfill } from '@material/dom';
import { MdcEventRegistry } from '../../utils/mdc.event.registry';
/** @docs-private */
export class AbstractMdcRipple {
constructor(_rippleElm, _renderer, _registry, doc) {
this._rippleElm = _rippleElm;
this._renderer = _renderer;
this._registry = _registry;
this.mdcRippleAdapter = {
browserSupportsCssVars: () => util.supportsCssVariables(this.document.defaultView),
isUnbounded: () => this._unbounded,
isSurfaceActive: () => this.isRippleSurfaceActive(),
isSurfaceDisabled: () => this.isRippleSurfaceDisabled(),
addClass: (className) => this.addClassToRipple(className),
removeClass: (className) => this.removeClassFromRipple(className),
containsEventTarget: (target) => this._rippleElm.nativeElement.contains(target),
registerInteractionHandler: (type, handler) => {
if (this.getRippleInteractionElement())
this._registry.listenElm(this._renderer, type, handler, this.getRippleInteractionElement().nativeElement, events.applyPassive());
},
deregisterInteractionHandler: (type, handler) => {
this._registry.unlisten(type, handler);
},
registerDocumentInteractionHandler: (type, handler) => this._registry.listenElm(this._renderer, type, handler, this.document, events.applyPassive()),
deregisterDocumentInteractionHandler: (type, handler) => this._registry.unlisten(type, handler),
registerResizeHandler: (handler) => {
this._registry.listenElm(this._renderer, 'resize', handler, this.document.defaultView);
},
deregisterResizeHandler: (handler) => {
this._registry.unlisten('resize', handler);
},
updateCssVariable: (name, value) => { this.getRippleStylingElement().nativeElement.style.setProperty(name, value); },
computeBoundingRect: () => this.computeRippleBoundingRect(),
getWindowPageOffset: () => ({ x: this.document.defaultView.pageXOffset, y: this.document.defaultView.pageYOffset })
};
/** @internal */
this._rippleFoundation = null;
this._unbounded = false;
this._rippleSurface = null;
// workaround compiler bug when using ViewEngine. Type Document fails compilation
this.document = doc;
}
/** @internal */
initRipple(unbounded = false) {
if (this._rippleFoundation)
throw new Error('initRipple() is called multiple times');
this._unbounded = unbounded;
this._rippleFoundation = new MDCRippleFoundation(this.mdcRippleAdapter);
this._rippleFoundation.init();
}
/** @internal */
destroyRipple() {
if (this._rippleFoundation) {
this._rippleFoundation.destroy();
this._rippleFoundation = null;
}
}
/** @internal */
reinitRipple() {
if (this._rippleFoundation) {
this.destroyRipple();
this.initRipple(this._unbounded);
}
}
/** @internal */
isRippleInitialized() {
return this._rippleFoundation != null;
}
/** @internal */
addRippleSurface(clazz, firstElement = false) {
this.destroyRippleSurface();
this._rippleSurface = this._renderer.createElement('div');
this._renderer.addClass(this._rippleSurface, clazz);
if (firstElement && this._rippleElm.nativeElement.children.length > 0) {
const firstChild = this._rippleElm.nativeElement.children.item(0);
this._renderer.insertBefore(this._rippleElm.nativeElement, this._rippleSurface, firstChild);
}
else
this._renderer.appendChild(this._rippleElm.nativeElement, this._rippleSurface);
return this._rippleSurface;
}
/** @internal */
destroyRippleSurface() {
if (this._rippleSurface) {
this._renderer.removeChild(this._rippleElm.nativeElement, this._rippleSurface);
this._rippleSurface = null;
}
}
activateRipple() {
if (this._rippleFoundation)
this._rippleFoundation.activate();
}
deactivateRipple() {
if (this._rippleFoundation)
this._rippleFoundation.deactivate();
}
layout() {
if (this._rippleFoundation)
this._rippleFoundation.layout();
}
get rippleSurface() {
return new ElementRef(this._rippleSurface);
}
getRippleInteractionElement() {
return this._rippleElm;
}
getRippleStylingElement() {
return this._rippleElm;
}
isRippleUnbounded() {
return this._unbounded;
}
/** @internal */
setRippleUnbounded(value) {
if (!!value !== this._unbounded) {
this._unbounded = !!value;
// despite what the documentation seems to indicate, you can't
// just change the unbounded property of an already initialized
// ripple. The initialization registers different handlers, and won't
// change those registrations when you change the unbounded property.
// Hence we destroy and re-init the whole thing:
this.reinitRipple();
}
}
isRippleSurfaceActive() {
let interactionElm = this.getRippleInteractionElement();
return !!interactionElm && this.isActiveElement(interactionElm.nativeElement);
}
isActiveElement(element) {
return element == null ? false : ponyfill.matches(element, ':active');
}
isRippleSurfaceDisabled() {
let interactionElm = this.getRippleInteractionElement();
return !!interactionElm && !!interactionElm.nativeElement.attributes.getNamedItem('disabled');
}
/** @internal */
addClassToRipple(name) {
this._renderer.addClass(this.getRippleStylingElement().nativeElement, name);
}
/** @internal */
removeClassFromRipple(name) {
this._renderer.removeClass(this.getRippleStylingElement().nativeElement, name);
}
computeRippleBoundingRect() {
return this._rippleElm.nativeElement.getBoundingClientRect();
}
/** @internal */
onFocus() {
if (this._rippleFoundation)
this._rippleFoundation.handleFocus();
}
/** @internal */
onBlur() {
if (this._rippleFoundation)
this._rippleFoundation.handleBlur();
}
}
AbstractMdcRipple.decorators = [
{ type: Directive }
];
AbstractMdcRipple.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 },
{ type: MdcEventRegistry },
{ type: undefined }
];
AbstractMdcRipple.propDecorators = {
onFocus: [{ type: HostListener, args: ['focusin',] }],
onBlur: [{ type: HostListener, args: ['focusout',] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QubWRjLnJpcHBsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3JpcHBsZS9hYnN0cmFjdC5tZGMucmlwcGxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFvQixJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFbEUsb0JBQW9CO0FBRXBCLE1BQU0sT0FBZ0IsaUJBQWlCO0lBbUNuQyxZQUFzQixVQUFzQixFQUFZLFNBQW9CLEVBQVksU0FBMkIsRUFDL0csR0FBUTtRQURVLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBWSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVksY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFsQzNHLHFCQUFnQixHQUFxQjtZQUN6QyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFZLENBQUM7WUFDbkYsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQ2xDLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDbkQsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQ3ZELFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztZQUN6RCxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7WUFDakUsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDL0UsMEJBQTBCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUU7Z0JBQzFDLElBQUksSUFBSSxDQUFDLDJCQUEyQixFQUFFO29CQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixFQUFHLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQzFJLENBQUM7WUFDRCw0QkFBNEIsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxrQ0FBa0MsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwSixvQ0FBb0MsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7WUFDL0YscUJBQXFCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBWSxDQUFDLENBQUM7WUFDNUYsQ0FBQztZQUNELHVCQUF1QixFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBQ0QsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BILG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtZQUMzRCxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFZLENBQUMsV0FBVyxFQUFDLENBQUM7U0FDdEgsQ0FBQTtRQUVELGdCQUFnQjtRQUNOLHNCQUFpQixHQUErQixJQUFJLENBQUM7UUFDdkQsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixtQkFBYyxHQUF1QixJQUFJLENBQUM7UUFLOUMsaUZBQWlGO1FBQ2pGLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBZSxDQUFBO0lBQ25DLENBQUM7SUFFRCxnQkFBZ0I7SUFDTixVQUFVLENBQUMsU0FBUyxHQUFHLEtBQUs7UUFDbEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELGdCQUFnQjtJQUNOLGFBQWE7UUFDbkIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCO0lBQ04sWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDcEM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCO0lBQ04sbUJBQW1CO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQztJQUMxQyxDQUFDO0lBRUQsZ0JBQWdCO0lBQ04sZ0JBQWdCLENBQUMsS0FBYSxFQUFFLFlBQVksR0FBRyxLQUFLO1FBQzFELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRCxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDL0Y7O1lBQ0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCO0lBQ04sb0JBQW9CO1FBQzFCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7U0FDOUI7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksSUFBSSxDQUFDLGlCQUFpQjtZQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksSUFBSSxDQUFDLGlCQUFpQjtZQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFjLGFBQWE7UUFDdkIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVTLDJCQUEyQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVTLHVCQUF1QjtRQUM3QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVTLGlCQUFpQjtRQUN2QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELGdCQUFnQjtJQUNOLGtCQUFrQixDQUFDLEtBQWM7UUFDdkMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzFCLDhEQUE4RDtZQUM5RCwrREFBK0Q7WUFDL0QscUVBQXFFO1lBQ3JFLHFFQUFxRTtZQUNyRSxnREFBZ0Q7WUFDaEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztJQUVTLHFCQUFxQjtRQUMzQixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUN4RCxPQUFPLENBQUMsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVTLGVBQWUsQ0FBQyxPQUFvQjtRQUMxQyxPQUFPLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVTLHVCQUF1QjtRQUM3QixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUN4RCxPQUFPLENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQsZ0JBQWdCO0lBQ04sZ0JBQWdCLENBQUMsSUFBWTtRQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELGdCQUFnQjtJQUNOLHFCQUFxQixDQUFDLElBQVk7UUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFUyx5QkFBeUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ2pFLENBQUM7SUFFRCxnQkFBZ0I7SUFDUyxPQUFPO1FBQzVCLElBQUksSUFBSSxDQUFDLGlCQUFpQjtZQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELGdCQUFnQjtJQUNVLE1BQU07UUFDNUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM1QyxDQUFDOzs7WUEvS0osU0FBUzs7O1lBUEQsVUFBVTtZQUFFLFNBQVM7WUFJckIsZ0JBQWdCOzs7O3NCQXlLcEIsWUFBWSxTQUFDLFNBQVM7cUJBTXRCLFlBQVksU0FBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBIb3N0TGlzdGVuZXIsIERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNRENSaXBwbGVGb3VuZGF0aW9uLCBNRENSaXBwbGVBZGFwdGVyLCB1dGlsIH0gZnJvbSAnQG1hdGVyaWFsL3JpcHBsZSc7XHJcbmltcG9ydCB7IGV2ZW50cyB9IGZyb20gJ0BtYXRlcmlhbC9kb20nO1xyXG5pbXBvcnQgeyBwb255ZmlsbCB9IGZyb20gJ0BtYXRlcmlhbC9kb20nO1xyXG5pbXBvcnQgeyBNZGNFdmVudFJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvbWRjLmV2ZW50LnJlZ2lzdHJ5JztcclxuXHJcbi8qKiBAZG9jcy1wcml2YXRlICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RNZGNSaXBwbGUge1xyXG4gICAgcHJpdmF0ZSBtZGNSaXBwbGVBZGFwdGVyOiBNRENSaXBwbGVBZGFwdGVyID0ge1xyXG4gICAgICAgIGJyb3dzZXJTdXBwb3J0c0Nzc1ZhcnM6ICgpID0+IHV0aWwuc3VwcG9ydHNDc3NWYXJpYWJsZXModGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldyEpLFxyXG4gICAgICAgIGlzVW5ib3VuZGVkOiAoKSA9PiB0aGlzLl91bmJvdW5kZWQsXHJcbiAgICAgICAgaXNTdXJmYWNlQWN0aXZlOiAoKSA9PiB0aGlzLmlzUmlwcGxlU3VyZmFjZUFjdGl2ZSgpLFxyXG4gICAgICAgIGlzU3VyZmFjZURpc2FibGVkOiAoKSA9PiB0aGlzLmlzUmlwcGxlU3VyZmFjZURpc2FibGVkKCksXHJcbiAgICAgICAgYWRkQ2xhc3M6IChjbGFzc05hbWUpID0+IHRoaXMuYWRkQ2xhc3NUb1JpcHBsZShjbGFzc05hbWUpLFxyXG4gICAgICAgIHJlbW92ZUNsYXNzOiAoY2xhc3NOYW1lKSA9PiB0aGlzLnJlbW92ZUNsYXNzRnJvbVJpcHBsZShjbGFzc05hbWUpLFxyXG4gICAgICAgIGNvbnRhaW5zRXZlbnRUYXJnZXQ6ICh0YXJnZXQpID0+IHRoaXMuX3JpcHBsZUVsbS5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCksXHJcbiAgICAgICAgcmVnaXN0ZXJJbnRlcmFjdGlvbkhhbmRsZXI6ICh0eXBlLCBoYW5kbGVyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFJpcHBsZUludGVyYWN0aW9uRWxlbWVudCgpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkubGlzdGVuRWxtKHRoaXMuX3JlbmRlcmVyLCB0eXBlLCBoYW5kbGVyLCB0aGlzLmdldFJpcHBsZUludGVyYWN0aW9uRWxlbWVudCgpIS5uYXRpdmVFbGVtZW50LCBldmVudHMuYXBwbHlQYXNzaXZlKCkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVyZWdpc3RlckludGVyYWN0aW9uSGFuZGxlcjogKHR5cGUsIGhhbmRsZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkudW5saXN0ZW4odHlwZSwgaGFuZGxlcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZWdpc3RlckRvY3VtZW50SW50ZXJhY3Rpb25IYW5kbGVyOiAodHlwZSwgaGFuZGxlcikgPT4gdGhpcy5fcmVnaXN0cnkubGlzdGVuRWxtKHRoaXMuX3JlbmRlcmVyLCB0eXBlLCBoYW5kbGVyLCB0aGlzLmRvY3VtZW50LCBldmVudHMuYXBwbHlQYXNzaXZlKCkpLFxyXG4gICAgICAgIGRlcmVnaXN0ZXJEb2N1bWVudEludGVyYWN0aW9uSGFuZGxlcjogKHR5cGUsIGhhbmRsZXIpID0+IHRoaXMuX3JlZ2lzdHJ5LnVubGlzdGVuKHR5cGUsIGhhbmRsZXIpLFxyXG4gICAgICAgIHJlZ2lzdGVyUmVzaXplSGFuZGxlcjogKGhhbmRsZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkubGlzdGVuRWxtKHRoaXMuX3JlbmRlcmVyLCAncmVzaXplJywgaGFuZGxlciwgdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldyEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVyZWdpc3RlclJlc2l6ZUhhbmRsZXI6IChoYW5kbGVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5LnVubGlzdGVuKCdyZXNpemUnLCBoYW5kbGVyKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHVwZGF0ZUNzc1ZhcmlhYmxlOiAobmFtZSwgdmFsdWUpID0+IHsgdGhpcy5nZXRSaXBwbGVTdHlsaW5nRWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUpOyB9LFxyXG4gICAgICAgIGNvbXB1dGVCb3VuZGluZ1JlY3Q6ICgpID0+IHRoaXMuY29tcHV0ZVJpcHBsZUJvdW5kaW5nUmVjdCgpLFxyXG4gICAgICAgIGdldFdpbmRvd1BhZ2VPZmZzZXQ6ICgpID0+ICh7eDogdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldyEucGFnZVhPZmZzZXQsIHk6IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXchLnBhZ2VZT2Zmc2V0fSlcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBwcm90ZWN0ZWQgX3JpcHBsZUZvdW5kYXRpb246IE1EQ1JpcHBsZUZvdW5kYXRpb24gfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgX3VuYm91bmRlZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfcmlwcGxlU3VyZmFjZTogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuICAgIHByb3RlY3RlZCBkb2N1bWVudDogRG9jdW1lbnQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9yaXBwbGVFbG06IEVsZW1lbnRSZWYsIHByb3RlY3RlZCBfcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJvdGVjdGVkIF9yZWdpc3RyeTogTWRjRXZlbnRSZWdpc3RyeSxcclxuICAgICAgICBkb2M6IGFueSkge1xyXG4gICAgICAgIC8vIHdvcmthcm91bmQgY29tcGlsZXIgYnVnIHdoZW4gdXNpbmcgVmlld0VuZ2luZS4gVHlwZSBEb2N1bWVudCBmYWlscyBjb21waWxhdGlvblxyXG4gICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2MgYXMgRG9jdW1lbnRcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBwcm90ZWN0ZWQgaW5pdFJpcHBsZSh1bmJvdW5kZWQgPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9yaXBwbGVGb3VuZGF0aW9uKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2luaXRSaXBwbGUoKSBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMnKTtcclxuICAgICAgICB0aGlzLl91bmJvdW5kZWQgPSB1bmJvdW5kZWQ7XHJcbiAgICAgICAgdGhpcy5fcmlwcGxlRm91bmRhdGlvbiA9IG5ldyBNRENSaXBwbGVGb3VuZGF0aW9uKHRoaXMubWRjUmlwcGxlQWRhcHRlcik7XHJcbiAgICAgICAgdGhpcy5fcmlwcGxlRm91bmRhdGlvbi5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgcHJvdGVjdGVkIGRlc3Ryb3lSaXBwbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JpcHBsZUZvdW5kYXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5fcmlwcGxlRm91bmRhdGlvbi5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JpcHBsZUZvdW5kYXRpb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBwcm90ZWN0ZWQgcmVpbml0UmlwcGxlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9yaXBwbGVGb3VuZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveVJpcHBsZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRSaXBwbGUodGhpcy5fdW5ib3VuZGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgcHJvdGVjdGVkIGlzUmlwcGxlSW5pdGlhbGl6ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JpcHBsZUZvdW5kYXRpb24gIT0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBwcm90ZWN0ZWQgYWRkUmlwcGxlU3VyZmFjZShjbGF6ejogc3RyaW5nLCBmaXJzdEVsZW1lbnQgPSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveVJpcHBsZVN1cmZhY2UoKTtcclxuICAgICAgICB0aGlzLl9yaXBwbGVTdXJmYWNlID0gdGhpcy5fcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fcmlwcGxlU3VyZmFjZSwgY2xhenopO1xyXG4gICAgICAgIGlmIChmaXJzdEVsZW1lbnQgJiYgdGhpcy5fcmlwcGxlRWxtLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5fcmlwcGxlRWxtLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4uaXRlbSgwKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuaW5zZXJ0QmVmb3JlKHRoaXMuX3JpcHBsZUVsbS5uYXRpdmVFbGVtZW50LCB0aGlzLl9yaXBwbGVTdXJmYWNlLCBmaXJzdENoaWxkKTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5fcmlwcGxlRWxtLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3JpcHBsZVN1cmZhY2UpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yaXBwbGVTdXJmYWNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIHByb3RlY3RlZCBkZXN0cm95UmlwcGxlU3VyZmFjZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcmlwcGxlU3VyZmFjZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLl9yaXBwbGVFbG0ubmF0aXZlRWxlbWVudCwgdGhpcy5fcmlwcGxlU3VyZmFjZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JpcHBsZVN1cmZhY2UgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhY3RpdmF0ZVJpcHBsZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcmlwcGxlRm91bmRhdGlvbilcclxuICAgICAgICAgICAgdGhpcy5fcmlwcGxlRm91bmRhdGlvbi5hY3RpdmF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlYWN0aXZhdGVSaXBwbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JpcHBsZUZvdW5kYXRpb24pXHJcbiAgICAgICAgICAgIHRoaXMuX3JpcHBsZUZvdW5kYXRpb24uZGVhY3RpdmF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxheW91dCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcmlwcGxlRm91bmRhdGlvbilcclxuICAgICAgICAgICAgdGhpcy5fcmlwcGxlRm91bmRhdGlvbi5sYXlvdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHJpcHBsZVN1cmZhY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50UmVmKHRoaXMuX3JpcHBsZVN1cmZhY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRSaXBwbGVJbnRlcmFjdGlvbkVsZW1lbnQoKTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JpcHBsZUVsbTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0UmlwcGxlU3R5bGluZ0VsZW1lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JpcHBsZUVsbTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgaXNSaXBwbGVVbmJvdW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VuYm91bmRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBwcm90ZWN0ZWQgc2V0UmlwcGxlVW5ib3VuZGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCEhdmFsdWUgIT09IHRoaXMuX3VuYm91bmRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl91bmJvdW5kZWQgPSAhIXZhbHVlO1xyXG4gICAgICAgICAgICAvLyBkZXNwaXRlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gc2VlbXMgdG8gaW5kaWNhdGUsIHlvdSBjYW4ndFxyXG4gICAgICAgICAgICAvLyBqdXN0IGNoYW5nZSB0aGUgdW5ib3VuZGVkIHByb3BlcnR5IG9mIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWRcclxuICAgICAgICAgICAgLy8gcmlwcGxlLiBUaGUgaW5pdGlhbGl6YXRpb24gcmVnaXN0ZXJzIGRpZmZlcmVudCBoYW5kbGVycywgYW5kIHdvbid0XHJcbiAgICAgICAgICAgIC8vIGNoYW5nZSB0aG9zZSByZWdpc3RyYXRpb25zIHdoZW4geW91IGNoYW5nZSB0aGUgdW5ib3VuZGVkIHByb3BlcnR5LlxyXG4gICAgICAgICAgICAvLyBIZW5jZSB3ZSBkZXN0cm95IGFuZCByZS1pbml0IHRoZSB3aG9sZSB0aGluZzpcclxuICAgICAgICAgICAgdGhpcy5yZWluaXRSaXBwbGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGlzUmlwcGxlU3VyZmFjZUFjdGl2ZSgpIHtcclxuICAgICAgICBsZXQgaW50ZXJhY3Rpb25FbG0gPSB0aGlzLmdldFJpcHBsZUludGVyYWN0aW9uRWxlbWVudCgpO1xyXG4gICAgICAgIHJldHVybiAhIWludGVyYWN0aW9uRWxtICYmIHRoaXMuaXNBY3RpdmVFbGVtZW50KGludGVyYWN0aW9uRWxtLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBpc0FjdGl2ZUVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCA9PSBudWxsID8gZmFsc2UgOiBwb255ZmlsbC5tYXRjaGVzKGVsZW1lbnQsICc6YWN0aXZlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGlzUmlwcGxlU3VyZmFjZURpc2FibGVkKCkge1xyXG4gICAgICAgIGxldCBpbnRlcmFjdGlvbkVsbSA9IHRoaXMuZ2V0UmlwcGxlSW50ZXJhY3Rpb25FbGVtZW50KCk7XHJcbiAgICAgICAgcmV0dXJuICEhaW50ZXJhY3Rpb25FbG0gJiYgISFpbnRlcmFjdGlvbkVsbS5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCdkaXNhYmxlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIHByb3RlY3RlZCBhZGRDbGFzc1RvUmlwcGxlKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuZ2V0UmlwcGxlU3R5bGluZ0VsZW1lbnQoKS5uYXRpdmVFbGVtZW50LCBuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBwcm90ZWN0ZWQgcmVtb3ZlQ2xhc3NGcm9tUmlwcGxlKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZ2V0UmlwcGxlU3R5bGluZ0VsZW1lbnQoKS5uYXRpdmVFbGVtZW50LCBuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY29tcHV0ZVJpcHBsZUJvdW5kaW5nUmVjdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmlwcGxlRWxtLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXNpbicpIG9uRm9jdXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JpcHBsZUZvdW5kYXRpb24pXHJcbiAgICAgICAgICAgIHRoaXMuX3JpcHBsZUZvdW5kYXRpb24uaGFuZGxlRm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcpIG9uQmx1cigpIHtcclxuICAgICAgICBpZiAodGhpcy5fcmlwcGxlRm91bmRhdGlvbilcclxuICAgICAgICAgICAgdGhpcy5fcmlwcGxlRm91bmRhdGlvbi5oYW5kbGVCbHVyKCk7XHJcbiAgICB9XHJcbn1cclxuIl19