![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/www/html/libs/absol-acomp/out/ |
Upload File : |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: Hanger.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: Hanger.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>import '../css/hanger.css'; import ACore from "../ACore"; import Vec2 from "absol/src/Math/Vec2"; import BrowserDetector from "absol/src/Detector/BrowserDetector"; import { findChangedTouchByIdent } from "absol/src/HTML5/EventEmitter"; import AElement from "absol/src/HTML5/AElement"; var _ = ACore._; var $ = ACore.$; /**** * @extends AElement * @constructor */ function Hanger() { this.addClass('as-hanger'); this.defineEvent(['predrag', 'dragstart', 'drag', 'dragend']); this._hangOn = 0; this._hangerPointerData = null; this.on2({ mousedown: this.eventHandler.hangerPointerDown, touchstart: this.eventHandler.hangerPointerDown, }); this._touchEvents = { touchend: this.eventHandler.hangerPointerFinish, touchcancel: this.eventHandler.hangerPointerFinish, touchmove: this.eventHandler.hangerPointerMove } this._mouseEvents = { mouseup: this.eventHandler.hangerPointerFinish, mouseleave: this.eventHandler.hangerPointerFinish, mousemove: this.eventHandler.hangerPointerMove }; } Hanger.tag = 'hanger'; Hanger.render = function () { return _('div'); }; Hanger.prototype.on2 = function () { if (arguments.length == 1) { for (var name in arguments[0]) { Hanger.prototype.on2.call(this, name, arguments[0][name]); } } else if (arguments.length == 2) { this.addEventListener(arguments[0], arguments[1], BrowserDetector.supportPassiveEvent ? { passive: false } : true); } }; Hanger.prototype.off2 = function () { if (arguments.length == 1) { for (var name in arguments[0]) { Hanger.prototype.off2.call(this, name, arguments[0][name]); } } else if (arguments.length == 2) { this.removeEventListener(arguments[0], arguments[1], BrowserDetector.supportPassiveEvent ? { passive: false } : true); } }; Hanger.property = {}; /** * @type {Hanger} */ Hanger.property.hangOn = { set: function (value) { if (!(value > 0)) value = 0; this._hangOn = value; }, get: function () { return this._hangOn; } }; /** * @type {Hanger} */ Hanger.eventHandler = {}; Hanger.eventHandler.hangerPointerDown = function (event) { if (this._hangerPointerData) return; var bound = this.getBoundingClientRect(); var startingPoint; var isTouch = event.type === 'touchstart'; var pointerIdent = -1; var target; if (isTouch) { var touch = event.changedTouches[0]; target = touch.target; pointerIdent = touch.identifier; startingPoint = new Vec2(touch.clientX, touch.clientY); } else { startingPoint = new Vec2(event.clientX, event.clientY); target = event.target; } var offsetVec = startingPoint.sub(new Vec2(bound.left, bound.top)); this._hangerPointerData = { state: 0, isTouch: isTouch, bound: bound, startingPoint: startingPoint, offsetVec: offsetVec, pointerIdent: pointerIdent, target: target }; var preDragEvent = { type: 'predrag', originEvent: event, isTouch: isTouch, bound: bound, startingPoint: startingPoint, currentPoint: startingPoint, offsetVec: offsetVec, pointerIdent: pointerIdent, canceled: false, cancel: function () { this.canceled = true; }, clientX: startingPoint.x, clientY: startingPoint.y, target: target, preventDefault: function () { event.preventDefault(); } }; this.emit('predrag', preDragEvent, this); if (preDragEvent.canceled) { this._hangerPointerData = null; return; } ; if (isTouch) this.on2.call(document, this._touchEvents) else this.on2.call(document, this._mouseEvents); }; Hanger.eventHandler.hangerPointerMove = function (event) { var pointerData = this._hangerPointerData; var isTouch = pointerData.isTouch; var pointerIdent = -2; var currentPoint; if (isTouch) { var touch = findChangedTouchByIdent(event, pointerData.pointerIdent); if (touch) { pointerIdent = touch.identifier; currentPoint = new Vec2(touch.clientX, touch.clientY); } } else { currentPoint = new Vec2(event.clientX, event.clientY); pointerIdent = -1; } if (pointerIdent != pointerData.pointerIdent) return; pointerData.currentPoint = currentPoint; if (pointerData.state == 0) { var distance = currentPoint.sub(pointerData.startingPoint).abs(); if (distance >= this._hangOn) { var dragStartEvent = { type: 'dragstart', originEvent: event, isTouch: isTouch, bound: pointerData.bound, startingPoint: pointerData.startingPoint, offsetVec: pointerData.offsetVec, pointerIdent: pointerIdent, currentPoint: currentPoint, target: pointerData.target, clientX: currentPoint.x, clientY: currentPoint.y, preventDefault: function () { event.preventDefault(); } }; pointerData.trackedScrollers = (() => { var res = []; var c = this._hangerPointerData.target; while (c) { c.addEventListener('scroll', this.eventHandler.trackingScroll); res.push(c); c = c.parentElement; } document.addEventListener('scroll', this.eventHandler.trackingScroll); res.push(document); return res; })(); pointerData.state = 1; this.emit('dragstart', dragStartEvent, this); } } if (pointerData.state === 1) { var dragEvent = { type: 'drag', originEvent: event, isTouch: isTouch, bound: pointerData.bound, startingPoint: pointerData.startingPoint, offsetVec: pointerData.offsetVec, pointerIdent: pointerIdent, currentPoint: currentPoint, target: pointerData.target, clientX: currentPoint.x, clientY: currentPoint.y, preventDefault: function () { event.preventDefault(); } }; this.emit('drag', dragEvent, this); } }; Hanger.eventHandler.hangerPointerFinish = function (event) { var pointerData = this._hangerPointerData; var isTouch = event.type === 'touchend'; if (pointerData.isTouch !== isTouch) return; var pointerIdent = -2; var currentPoint; if (isTouch) { var touch = findChangedTouchByIdent(event, pointerData.pointerIdent); if (touch) { pointerIdent = touch.identifier; currentPoint = new Vec2(touch.clientX, touch.clientY); } } else { currentPoint = new Vec2(event.clientX, event.clientY); pointerIdent = -1; } if (pointerIdent !== pointerData.pointerIdent) return; if (pointerData.state === 1) { pointerData.trackedScrollers.forEach(elt=> elt.removeEventListener('scroll',this.eventHandler.trackingScroll)); var dragEndEvent = { type: 'dragend', originEvent: event, isTouch: isTouch, bound: pointerData.bound, startingPoint: pointerData.startingPoint, offsetVec: pointerData.offsetVec, pointerIdent: pointerIdent, currentPoint: currentPoint, target: pointerData.target, clientX: currentPoint.x, clientY: currentPoint.y, preventDefault: function () { event.preventDefault(); } }; this.emit('dragend', dragEndEvent, this); } this._hangerPointerData = null; if (isTouch) this.off2.call(document, this._touchEvents) else this.off2.call(document, this._mouseEvents); }; Hanger.eventHandler.trackingScroll = function (event) { var pointerData = this._hangerPointerData; var currentPoint = pointerData.currentPoint; var dragEvent = { type: 'drag', originEvent: event, isTouch: false, bound: pointerData.bound, startingPoint: pointerData.startingPoint, offsetVec: pointerData.offsetVec, pointerIdent: pointerData.pointerIdent, currentPoint: currentPoint, target: pointerData.target, clientX: currentPoint.x, clientY: currentPoint.y, isScrolling: true, preventDefault: function () { // event.preventDefault(); } }; this.emit('drag', dragEvent, this); }; ACore.install(Hanger); export default Hanger; </code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="CalendarInput.html">CalendarInput</a></li><li><a href="CandyBoxButton.html">CandyBoxButton</a></li><li><a href="ChromeCalendar.html">ChromeCalendar</a></li><li><a href="CircleSectionLabel.html">CircleSectionLabel</a></li><li><a href="Cluster.html">Cluster</a></li><li><a href="ClusterIconInfo.html">ClusterIconInfo</a></li><li><a href="ClusterIconStyle.html">ClusterIconStyle</a></li><li><a href="ContextCaptor.html">ContextCaptor</a></li><li><a href="DateInput.html">DateInput</a></li><li><a href="DateInput2.html">DateInput2</a></li><li><a href="DropPanel.html">DropPanel</a></li><li><a href="DropPanelStack.html">DropPanelStack</a></li><li><a href="FlexiconButton.html">FlexiconButton</a></li><li><a href="MarkerClusterer.html">MarkerClusterer</a></li><li><a href="MarkerClustererOptions.html">MarkerClustererOptions</a></li><li><a href="SearchTextInput.html">SearchTextInput</a></li><li><a href="Sprite.html">Sprite</a></li><li><a href="Time24Input.html">Time24Input</a></li></ul><h3>Events</h3><ul><li><a href="MarkerClusterer.html#event:click">click</a></li><li><a href="MarkerClusterer.html#event:clusteringbegin">clusteringbegin</a></li><li><a href="MarkerClusterer.html#event:clusteringend">clusteringend</a></li><li><a href="MarkerClusterer.html#event:mouseout">mouseout</a></li><li><a href="MarkerClusterer.html#event:mouseover">mouseover</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$windowTitleText">$windowTitleText</a></li><li><a href="global.html#AddIcon">AddIcon</a></li><li><a href="global.html#calcMinHMTime">calcMinHMTime</a></li><li><a href="global.html#cleanMenuItemProperty">cleanMenuItemProperty</a></li><li><a href="global.html#preventNotNumberInput">preventNotNumberInput</a></li><li><a href="global.html#vScrollIntoView">vScrollIntoView</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a> on Wed Jan 04 2023 18:18:58 GMT+0700 (Indochina Time) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>