@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
38 lines • 5.49 kB
JavaScript
/**
* When working with component host elements
* we cannot apply directives, eg. FocusIndicatorOriginDirective
* however we may still want the functionality to be applied to
* the host element. This class allows the host element to become
* a focus indicator origin
*/
export class FocusIndicatorOrigin {
constructor(_focusIndicatorOrigin, elementRef, renderer) {
this._focusIndicatorOrigin = _focusIndicatorOrigin;
/** Store all event handlers */
this._handlers = [];
// add event handlers
this._handlers = [
renderer.listen(elementRef.nativeElement, 'click', () => this.onClick()),
renderer.listen(elementRef.nativeElement, 'mousedown', () => this.onMouseDown()),
renderer.listen(elementRef.nativeElement, 'keydown', () => this.onKeydown())
];
}
/** Remove all event handlers */
destroy() {
this._handlers.forEach(handler => handler());
}
onMouseDown() {
this._isMouseEvent = true;
}
onClick() {
// if the click was triggered after a mousedown event then it is a keyboard event
this._focusIndicatorOrigin.setOrigin(this._isMouseEvent ? 'mouse' : 'keyboard');
// reset the mouse event flag
this._isMouseEvent = false;
}
onKeydown() {
this._isMouseEvent = false;
this._focusIndicatorOrigin.setOrigin('keyboard');
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtaW5kaWNhdG9yLW9yaWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9kaXJlY3RpdmVzL2FjY2Vzc2liaWxpdHkvZm9jdXMtaW5kaWNhdG9yL2ZvY3VzLWluZGljYXRvci1vcmlnaW4vZm9jdXMtaW5kaWNhdG9yLW9yaWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sb0JBQW9CO0lBUTdCLFlBQTZCLHFCQUFrRCxFQUFFLFVBQXNCLEVBQUUsUUFBbUI7UUFBL0YsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUE2QjtRQU4vRSwrQkFBK0I7UUFDZCxjQUFTLEdBQW1CLEVBQUUsQ0FBQztRQU81QyxxQkFBcUI7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNiLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hFLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2hGLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQy9FLENBQUM7SUFDTixDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLE9BQU87UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsT0FBTztRQUNILGlGQUFpRjtRQUNqRixJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEYsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvY3VzSW5kaWNhdG9yT3JpZ2luU2VydmljZSB9IGZyb20gJy4vZm9jdXMtaW5kaWNhdG9yLW9yaWdpbi5zZXJ2aWNlJztcblxuLyoqXG4gKiBXaGVuIHdvcmtpbmcgd2l0aCBjb21wb25lbnQgaG9zdCBlbGVtZW50c1xuICogd2UgY2Fubm90IGFwcGx5IGRpcmVjdGl2ZXMsIGVnLiBGb2N1c0luZGljYXRvck9yaWdpbkRpcmVjdGl2ZVxuICogaG93ZXZlciB3ZSBtYXkgc3RpbGwgd2FudCB0aGUgZnVuY3Rpb25hbGl0eSB0byBiZSBhcHBsaWVkIHRvXG4gKiB0aGUgaG9zdCBlbGVtZW50LiBUaGlzIGNsYXNzIGFsbG93cyB0aGUgaG9zdCBlbGVtZW50IHRvIGJlY29tZVxuICogYSBmb2N1cyBpbmRpY2F0b3Igb3JpZ2luXG4gKi9cbmV4cG9ydCBjbGFzcyBGb2N1c0luZGljYXRvck9yaWdpbiB7XG5cbiAgICAvKiogU3RvcmUgYWxsIGV2ZW50IGhhbmRsZXJzICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlcnM6ICgoKSA9PiB2b2lkKVtdID0gW107XG5cbiAgICAvKiogQ2xpY2sgZXZlbnRzIGNhbiBiZSB0cmlnZ2VkIGJ5IGJvdGggbW91c2UgYW5kIGtleWJvYXJkIHNvIHdlIHdhbnQgdG8gZW5zdXJlIHdlIGVtaXQgdGhlIGNvcnJlY3Qgb3JpZ2luICovXG4gICAgcHJpdmF0ZSBfaXNNb3VzZUV2ZW50OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfZm9jdXNJbmRpY2F0b3JPcmlnaW46IEZvY3VzSW5kaWNhdG9yT3JpZ2luU2VydmljZSwgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuXG4gICAgICAgIC8vIGFkZCBldmVudCBoYW5kbGVyc1xuICAgICAgICB0aGlzLl9oYW5kbGVycyA9IFtcbiAgICAgICAgICAgIHJlbmRlcmVyLmxpc3RlbihlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjbGljaycsICgpID0+IHRoaXMub25DbGljaygpKSxcbiAgICAgICAgICAgIHJlbmRlcmVyLmxpc3RlbihlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWRvd24nLCAoKSA9PiB0aGlzLm9uTW91c2VEb3duKCkpLFxuICAgICAgICAgICAgcmVuZGVyZXIubGlzdGVuKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2tleWRvd24nLCAoKSA9PiB0aGlzLm9uS2V5ZG93bigpKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKiBSZW1vdmUgYWxsIGV2ZW50IGhhbmRsZXJzICovXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IGhhbmRsZXIoKSk7XG4gICAgfVxuXG4gICAgb25Nb3VzZURvd24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzTW91c2VFdmVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgdGhlIGNsaWNrIHdhcyB0cmlnZ2VyZWQgYWZ0ZXIgYSBtb3VzZWRvd24gZXZlbnQgdGhlbiBpdCBpcyBhIGtleWJvYXJkIGV2ZW50XG4gICAgICAgIHRoaXMuX2ZvY3VzSW5kaWNhdG9yT3JpZ2luLnNldE9yaWdpbih0aGlzLl9pc01vdXNlRXZlbnQgPyAnbW91c2UnIDogJ2tleWJvYXJkJyk7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1vdXNlIGV2ZW50IGZsYWdcbiAgICAgICAgdGhpcy5faXNNb3VzZUV2ZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25LZXlkb3duKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc01vdXNlRXZlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZm9jdXNJbmRpY2F0b3JPcmlnaW4uc2V0T3JpZ2luKCdrZXlib2FyZCcpO1xuICAgIH1cblxufSJdfQ==