@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
JavaScript
/**
* @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==