VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/libs/absol-acomp/out/Hanger.js.html
<!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>

VaKeR 2022