UNPKG

@open-e/oe-coordinator

Version:

This module is used to detect mouse movement on the border of HTMLElement. Useful usecase is to enable resize event in `div` element when mouse is on the border of it.

248 lines 16.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { DEFAULT } from "../config"; import { ClickEvent } from "./utilities/click.component"; import { ClassEvent } from "./utilities/class.component"; export var PublicAPI; (function (PublicAPI) { PublicAPI.ClassBehavior = ClassEvent; PublicAPI.ClickBehavior = ClickEvent; var CoordinateComponent = /** @class */ (function () { function CoordinateComponent(element) { this.element = element; this._variation = DEFAULT.variation; // variation to detect on border this._element = element; this.setCoordinates(); this.addListener("mousemove"); this.addListener("mousedown"); this.addListener("mouseup"); this.detectMouseUpOutSide(); } /** * Return coordinates */ /** * Return coordinates * @return {?} */ CoordinateComponent.prototype.getCoordinates = /** * Return coordinates * @return {?} */ function () { return this._coordinates; }; /** * Detect when module is on border of element */ /** * Detect when module is on border of element * @return {?} */ CoordinateComponent.prototype.onBorder = /** * Detect when module is on border of element * @return {?} */ function () { return this._onBorder; }; /** * Detect hen drag starts */ /** * Detect hen drag starts * @return {?} */ CoordinateComponent.prototype.onDragStart = /** * Detect hen drag starts * @return {?} */ function () { return this._isDrag; }; /** * addEventListener to detect when on border * * @param name 'mousedown' | 'mouseup' | 'mouseover' */ /** * addEventListener to detect when on border * * @param {?} name 'mousedown' | 'mouseup' | 'mouseover' * @return {?} */ CoordinateComponent.prototype.addListener = /** * addEventListener to detect when on border * * @param {?} name 'mousedown' | 'mouseup' | 'mouseover' * @return {?} */ function (name) { var _this = this; this._element.addEventListener(name, (/** * @param {?} mouse * @return {?} */ function (mouse) { _this.detectOnborder(mouse); _this.detectOnDragStart(name, mouse); })); }; /** * Set variation to detect mouse on border * * @param value */ /** * Set variation to detect mouse on border * * @param {?} value * @return {?} */ CoordinateComponent.prototype.setVariation = /** * Set variation to detect mouse on border * * @param {?} value * @return {?} */ function (value) { this._variation = value; }; /** * calculate current coordinate of HTMlelement * * @param element */ /** * calculate current coordinate of HTMlelement * * @private * @return {?} */ CoordinateComponent.prototype.setCoordinates = /** * calculate current coordinate of HTMlelement * * @private * @return {?} */ function () { return (this._coordinates = Object.assign(this.element.getBoundingClientRect(), { clientWidth: this.element.clientWidth, clientHeight: this.element.clientHeight })); }; /** * Private method to assign drag start * * @param name * @param mouse */ /** * Private method to assign drag start * * @private * @param {?} name * @param {?} mouse * @return {?} */ CoordinateComponent.prototype.detectOnDragStart = /** * Private method to assign drag start * * @private * @param {?} name * @param {?} mouse * @return {?} */ function (name, mouse) { if (Object.values(this._onBorder).indexOf(true) != -1 && ["mousedown"].includes(name)) { this._isDrag = true; } else if (this._isDrag && ["mousedown", "mousemove"].includes(name)) { this._isDrag = true; } else { this._isDrag = false; } }; /** * detect when mouse click is on border * * @param mouse */ /** * detect when mouse click is on border * * @private * @param {?} mouse * @return {?} */ CoordinateComponent.prototype.detectOnborder = /** * detect when mouse click is on border * * @private * @param {?} mouse * @return {?} */ function (mouse) { this._onBorder = Object.assign(this._onBorder ? this._onBorder : {}, { left: mouse.offsetX < 0 + this._variation, right: mouse.offsetX > ((/** @type {?} */ (mouse.target))).clientWidth - this._variation, top: mouse.offsetY < 0 + this._variation, bottom: mouse.offsetY > ((/** @type {?} */ (mouse.target))).clientHeight - this._variation }); }; /** * @private * @return {?} */ CoordinateComponent.prototype.detectMouseUpOutSide = /** * @private * @return {?} */ function () { document.addEventListener("mouseup", (/** * @return {?} */ function () { this._isDrag = false; }).bind(this)); }; return CoordinateComponent; }()); PublicAPI.CoordinateComponent = CoordinateComponent; if (false) { /** * @type {?} * @private */ CoordinateComponent.prototype._element; /** * @type {?} * @private */ CoordinateComponent.prototype._coordinates; /** * @type {?} * @private */ CoordinateComponent.prototype._onBorder; /** * @type {?} * @private */ CoordinateComponent.prototype._isDrag; /** * @type {?} * @private */ CoordinateComponent.prototype._variation; /** @type {?} */ CoordinateComponent.prototype.element; } })(PublicAPI || (PublicAPI = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29vcmRpbmF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ab3Blbi1lL29lLWNvb3JkaW5hdG9yLyIsInNvdXJjZXMiOlsibW9kdWxlL2NsYXNzL2Nvb3JkaW5hdGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFekQsTUFBTSxLQUFXLFNBQVMsQ0EySHpCO0FBM0hELFdBQWlCLFNBQVM7SUFFYix1QkFBYSxHQUFHLFVBQVU7SUFDMUIsdUJBQWEsR0FBRyxVQUFVO0lBQ3JDO1FBT0UsNkJBQW1CLE9BQW9CO1lBQXBCLFlBQU8sR0FBUCxPQUFPLENBQWE7WUFGL0IsZUFBVSxHQUE4QixPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsZ0NBQWdDO1lBR2pHLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBRUQ7O1dBRUc7Ozs7O1FBQ0ksNENBQWM7Ozs7UUFBckI7WUFDRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0IsQ0FBQztRQUVEOztXQUVHOzs7OztRQUNJLHNDQUFROzs7O1FBQWY7WUFDRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEIsQ0FBQztRQUVEOztXQUVHOzs7OztRQUNJLHlDQUFXOzs7O1FBQWxC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RCxJQXNIQztJQXRIWSw2QkFBbUIsc0JBc0gvQixDQUFBOzs7Ozs7UUFySEMsdUNBQThCOzs7OztRQUM5QiwyQ0FBaUQ7Ozs7O1FBQ2pELHdDQUE0Qzs7Ozs7UUFDNUMsc0NBQXdDOzs7OztRQUN4Qyx5Q0FBa0U7O1FBRXRELHNDQUEyQjs7QUFnSDNDLENBQUMsRUEzSGdCLFNBQVMsS0FBVCxTQUFTLFFBMkh6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFB1YmxpY0ludGVyZmFjZSB9IGZyb20gXCIuLi9tb2RlbFwiO1xyXG5pbXBvcnQgeyBERUZBVUxUIH0gZnJvbSBcIi4uL2NvbmZpZ1wiO1xyXG5pbXBvcnQgeyBDbGlja0V2ZW50IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsaWNrLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDbGFzc0V2ZW50IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsYXNzLmNvbXBvbmVudFwiO1xyXG5cclxuZXhwb3J0IG5hbWVzcGFjZSBQdWJsaWNBUEkge1xyXG5cclxuICBleHBvcnQgdmFyIENsYXNzQmVoYXZpb3IgPSBDbGFzc0V2ZW50O1xyXG4gIGV4cG9ydCB2YXIgQ2xpY2tCZWhhdmlvciA9IENsaWNrRXZlbnQ7XHJcbiAgZXhwb3J0IGNsYXNzIENvb3JkaW5hdGVDb21wb25lbnQge1xyXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIF9jb29yZGluYXRlczogUHVibGljSW50ZXJmYWNlLkNvb3JkaW5hdGU7XHJcbiAgICBwcml2YXRlIF9vbkJvcmRlcjogUHVibGljSW50ZXJmYWNlLk9uQm9yZGVyO1xyXG4gICAgcHJpdmF0ZSBfaXNEcmFnOiBQdWJsaWNJbnRlcmZhY2UuaXNEcmFnO1xyXG4gICAgcHJpdmF0ZSBfdmFyaWF0aW9uOiBQdWJsaWNJbnRlcmZhY2UuVmFyaWF0aW9uID0gREVGQVVMVC52YXJpYXRpb247IC8vIHZhcmlhdGlvbiB0byBkZXRlY3Qgb24gYm9yZGVyXHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICB0aGlzLnNldENvb3JkaW5hdGVzKCk7XHJcbiAgICAgIHRoaXMuYWRkTGlzdGVuZXIoXCJtb3VzZW1vdmVcIik7XHJcbiAgICAgIHRoaXMuYWRkTGlzdGVuZXIoXCJtb3VzZWRvd25cIik7XHJcbiAgICAgIHRoaXMuYWRkTGlzdGVuZXIoXCJtb3VzZXVwXCIpO1xyXG4gICAgICB0aGlzLmRldGVjdE1vdXNlVXBPdXRTaWRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gY29vcmRpbmF0ZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvb3JkaW5hdGVzKCk6IFB1YmxpY0ludGVyZmFjZS5Db29yZGluYXRlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2Nvb3JkaW5hdGVzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZWN0IHdoZW4gbW9kdWxlIGlzIG9uIGJvcmRlciBvZiBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkJvcmRlcigpOiBQdWJsaWNJbnRlcmZhY2UuT25Cb3JkZXIge1xyXG4gICAgICByZXR1cm4gdGhpcy5fb25Cb3JkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlY3QgaGVuIGRyYWcgc3RhcnRzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkRyYWdTdGFydCgpOiBQdWJsaWNJbnRlcmZhY2UuaXNEcmFnIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2lzRHJhZztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGFkZEV2ZW50TGlzdGVuZXIgdG8gZGV0ZWN0IHdoZW4gb24gYm9yZGVyXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG5hbWUgJ21vdXNlZG93bicgfCAnbW91c2V1cCcgfCAnbW91c2VvdmVyJ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRkTGlzdGVuZXIobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCAobW91c2U6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLmRldGVjdE9uYm9yZGVyKG1vdXNlKTtcclxuICAgICAgICB0aGlzLmRldGVjdE9uRHJhZ1N0YXJ0KG5hbWUsIG1vdXNlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdmFyaWF0aW9uIHRvIGRldGVjdCBtb3VzZSBvbiBib3JkZXJcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFZhcmlhdGlvbih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuX3ZhcmlhdGlvbiA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogY2FsY3VsYXRlIGN1cnJlbnQgY29vcmRpbmF0ZSBvZiBIVE1sZWxlbWVudFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0Q29vcmRpbmF0ZXMoKTogUHVibGljSW50ZXJmYWNlLkNvb3JkaW5hdGUge1xyXG4gICAgICByZXR1cm4gKHRoaXMuX2Nvb3JkaW5hdGVzID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2xpZW50V2lkdGg6IHRoaXMuZWxlbWVudC5jbGllbnRXaWR0aCxcclxuICAgICAgICAgIGNsaWVudEhlaWdodDogdGhpcy5lbGVtZW50LmNsaWVudEhlaWdodFxyXG4gICAgICAgIH1cclxuICAgICAgKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcml2YXRlIG1ldGhvZCB0byBhc3NpZ24gZHJhZyBzdGFydFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gbW91c2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkZXRlY3RPbkRyYWdTdGFydChuYW1lOiBzdHJpbmcsIG1vdXNlOiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuX29uQm9yZGVyKS5pbmRleE9mKHRydWUpICE9IC0xICYmXHJcbiAgICAgICAgW1wibW91c2Vkb3duXCJdLmluY2x1ZGVzKG5hbWUpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuX2lzRHJhZyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNEcmFnICYmIFtcIm1vdXNlZG93blwiLCBcIm1vdXNlbW92ZVwiXS5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgIHRoaXMuX2lzRHJhZyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5faXNEcmFnID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGRldGVjdCB3aGVuIG1vdXNlIGNsaWNrIGlzIG9uIGJvcmRlclxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBtb3VzZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRldGVjdE9uYm9yZGVyKG1vdXNlOiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgIHRoaXMuX29uQm9yZGVyID0gT2JqZWN0LmFzc2lnbih0aGlzLl9vbkJvcmRlciA/IHRoaXMuX29uQm9yZGVyIDoge30sIHtcclxuICAgICAgICBsZWZ0OiBtb3VzZS5vZmZzZXRYIDwgMCArIHRoaXMuX3ZhcmlhdGlvbixcclxuICAgICAgICByaWdodDpcclxuICAgICAgICAgIG1vdXNlLm9mZnNldFggPlxyXG4gICAgICAgICAgKG1vdXNlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xpZW50V2lkdGggLSB0aGlzLl92YXJpYXRpb24sXHJcbiAgICAgICAgdG9wOiBtb3VzZS5vZmZzZXRZIDwgMCArIHRoaXMuX3ZhcmlhdGlvbixcclxuICAgICAgICBib3R0b206XHJcbiAgICAgICAgICBtb3VzZS5vZmZzZXRZID5cclxuICAgICAgICAgIChtb3VzZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsaWVudEhlaWdodCAtIHRoaXMuX3ZhcmlhdGlvblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRldGVjdE1vdXNlVXBPdXRTaWRlKCkge1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgIFwibW91c2V1cFwiLFxyXG4gICAgICAgIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgdGhpcy5faXNEcmFnID0gZmFsc2U7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==