UNPKG

@haxtheweb/haxcms-nodejs

Version:

HAXcms single and multisite nodejs server, api, and administration

10 lines 10.7 kB
/** @license Copyright (c) 2017 The Polymer Project Authors. All rights reserved. This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt */ import"./boot.js";import{timeOut as e,microTask as t}from"./async.js";import{Debouncer as n}from"./debounce.js";import{passiveTouchGestures as o,cancelSyntheticClickEvents as i}from"./settings.js";import{wrap as r}from"./wrap.js";let u="string"==typeof document.head.style.touchAction,s="__polymerGestures",c="__polymerGesturesHandled",a="__polymerGesturesTouchAction",l=["mousedown","mousemove","mouseup","click"],f=[0,1,4,2],d=function(){try{return 1===new MouseEvent("test",{buttons:1}).buttons}catch(e){return!1}}();function isMouseEvent(e){return l.indexOf(e)>-1}let h=!1;function PASSIVE_TOUCH(e){if(!isMouseEvent(e)&&"touchend"!==e)return u&&h&&o?{passive:!0}:void 0}!function(){try{let e=Object.defineProperty({},"passive",{get(){h=!0}});window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(e){}}();let m=navigator.userAgent.match(/iP(?:[oa]d|hone)|Android/);const p=[],g={button:!0,input:!0,keygen:!0,meter:!0,output:!0,textarea:!0,progress:!0,select:!0},v={button:!0,command:!0,fieldset:!0,input:!0,keygen:!0,optgroup:!0,option:!0,select:!0,textarea:!0};function matchingLabels(e){let t=Array.prototype.slice.call(e.labels||[]);if(!t.length){t=[];try{let n=e.getRootNode();if(e.id){let o=n.querySelectorAll(`label[for = '${e.id}']`);for(let e=0;e<o.length;e++)t.push(o[e])}}catch(e){}}return t}let mouseCanceller=function(e){let t=e.sourceCapabilities;var n;if((!t||t.firesTouchEvents)&&(e[c]={skip:!0},"click"===e.type)){let t=!1,o=w(e);for(let e=0;e<o.length;e++){if(o[e].nodeType===Node.ELEMENT_NODE)if("label"===o[e].localName)p.push(o[e]);else if(n=o[e],g[n.localName]){let n=matchingLabels(o[e]);for(let e=0;e<n.length;e++)t=t||p.indexOf(n[e])>-1}if(o[e]===y.mouse.target)return}if(t)return;e.preventDefault(),e.stopPropagation()}};function setupTeardownMouseCanceller(e){let t=m?["click"]:l;for(let n,o=0;o<t.length;o++)n=t[o],e?(p.length=0,document.addEventListener(n,mouseCanceller,!0)):document.removeEventListener(n,mouseCanceller,!0)}function hasLeftMouseButton(e){let t=e.type;if(!isMouseEvent(t))return!1;if("mousemove"===t){let t=void 0===e.buttons?1:e.buttons;return e instanceof window.MouseEvent&&!d&&(t=f[e.which]||0),Boolean(1&t)}return 0===(void 0===e.button?0:e.button)}let y={mouse:{target:null,mouseIgnoreJob:null},touch:{x:0,y:0,id:-1,scrollDecided:!1}};function trackDocument(e,t,n){e.movefn=t,e.upfn=n,document.addEventListener("mousemove",t),document.addEventListener("mouseup",n)}function untrackDocument(e){document.removeEventListener("mousemove",e.movefn),document.removeEventListener("mouseup",e.upfn),e.movefn=null,e.upfn=null}i&&document.addEventListener("touchend",(function ignoreMouse(t){if(!i)return;y.mouse.mouseIgnoreJob||setupTeardownMouseCanceller(!0),y.mouse.target=w(t)[0],y.mouse.mouseIgnoreJob=n.debounce(y.mouse.mouseIgnoreJob,e.after(2500),(function(){setupTeardownMouseCanceller(),y.mouse.target=null,y.mouse.mouseIgnoreJob=null}))}),!!h&&{passive:!0});const w=window.ShadyDOM&&window.ShadyDOM.noPatch?window.ShadyDOM.composedPath:e=>e.composedPath&&e.composedPath()||[];export const gestures={};export const recognizers=[];export function deepTargetFind(e,t){let n=document.elementFromPoint(e,t),o=n;for(;o&&o.shadowRoot&&!window.ShadyDOM;){let i=o;if(o=o.shadowRoot.elementFromPoint(e,t),i===o)break;o&&(n=o)}return n}function _findOriginalTarget(e){const t=w(e);return t.length>0?t[0]:e.target}function _handleNative(e){let t,n=e.type,o=e.currentTarget[s];if(!o)return;let i=o[n];if(i){if(!e[c]&&(e[c]={},"touch"===n.slice(0,5))){let t=e.changedTouches[0];if("touchstart"===n&&1===e.touches.length&&(y.touch.id=t.identifier),y.touch.id!==t.identifier)return;u||"touchstart"!==n&&"touchmove"!==n||function _handleTouchAction(e){let t=e.changedTouches[0],n=e.type;if("touchstart"===n)y.touch.x=t.clientX,y.touch.y=t.clientY,y.touch.scrollDecided=!1;else if("touchmove"===n){if(y.touch.scrollDecided)return;y.touch.scrollDecided=!0;let n=function firstTouchAction(e){let t="auto",n=w(e);for(let e,o=0;o<n.length;o++)if(e=n[o],e[a]){t=e[a];break}return t}(e),o=!1,i=Math.abs(y.touch.x-t.clientX),r=Math.abs(y.touch.y-t.clientY);e.cancelable&&("none"===n?o=!0:"pan-x"===n?o=r>i:"pan-y"===n&&(o=i>r)),o?e.preventDefault():prevent("track")}}(e)}if(t=e[c],!t.skip){for(let n,o=0;o<recognizers.length;o++)n=recognizers[o],i[n.name]&&!t[n.name]&&n.flow&&n.flow.start.indexOf(e.type)>-1&&n.reset&&n.reset();for(let o,r=0;r<recognizers.length;r++)o=recognizers[r],i[o.name]&&!t[o.name]&&(t[o.name]=!0,o[n](e))}}}export function addListener(e,t,n){return!!gestures[t]&&(function _add(e,t,n){let o=gestures[t],i=o.deps,r=o.name,u=e[s];u||(e[s]=u={});for(let t,n,o=0;o<i.length;o++)t=i[o],m&&isMouseEvent(t)&&"click"!==t||(n=u[t],n||(u[t]=n={_count:0}),0===n._count&&e.addEventListener(t,_handleNative,PASSIVE_TOUCH(t)),n[r]=(n[r]||0)+1,n._count=(n._count||0)+1);e.addEventListener(t,n),o.touchAction&&setTouchAction(e,o.touchAction)}(e,t,n),!0)}export function removeListener(e,t,n){return!!gestures[t]&&(function _remove(e,t,n){let o=gestures[t],i=o.deps,r=o.name,u=e[s];if(u)for(let t,n,o=0;o<i.length;o++)t=i[o],n=u[t],n&&n[r]&&(n[r]=(n[r]||1)-1,n._count=(n._count||1)-1,0===n._count&&e.removeEventListener(t,_handleNative,PASSIVE_TOUCH(t)));e.removeEventListener(t,n)}(e,t,n),!0)}export function register(e){recognizers.push(e);for(let t=0;t<e.emits.length;t++)gestures[e.emits[t]]=e}export function setTouchAction(e,n){u&&e instanceof HTMLElement&&t.run((()=>{e.style.touchAction=n})),e[a]=n}function _fire(e,t,n){let o=new Event(t,{bubbles:!0,cancelable:!0,composed:!0});if(o.detail=n,r(e).dispatchEvent(o),o.defaultPrevented){let e=n.preventer||n.sourceEvent;e&&e.preventDefault&&e.preventDefault()}}export function prevent(e){let t=function _findRecognizerByEvent(e){for(let t,n=0;n<recognizers.length;n++){t=recognizers[n];for(let n,o=0;o<t.emits.length;o++)if(n=t.emits[o],n===e)return t}return null}(e);t.info&&(t.info.prevent=!0)}export function resetMouseCanceller(){y.mouse.mouseIgnoreJob&&y.mouse.mouseIgnoreJob.flush()}function downupFire(e,t,n,o){t&&_fire(t,e,{x:n.clientX,y:n.clientY,sourceEvent:n,preventer:o,prevent:function(e){return prevent(e)}})}function trackHasMovedEnough(e,t,n){if(e.prevent)return!1;if(e.started)return!0;let o=Math.abs(e.x-t),i=Math.abs(e.y-n);return o>=5||i>=5}function trackFire(e,t,n){if(!t)return;let o,i=e.moves[e.moves.length-2],r=e.moves[e.moves.length-1],u=r.x-e.x,s=r.y-e.y,c=0;i&&(o=r.x-i.x,c=r.y-i.y),_fire(t,"track",{state:e.state,x:n.clientX,y:n.clientY,dx:u,dy:s,ddx:o,ddy:c,sourceEvent:n,hover:function(){return deepTargetFind(n.clientX,n.clientY)}})}function trackForward(e,t,n){let o=Math.abs(t.clientX-e.x),i=Math.abs(t.clientY-e.y),r=_findOriginalTarget(n||t);!r||v[r.localName]&&r.hasAttribute("disabled")||(isNaN(o)||isNaN(i)||o<=25&&i<=25||function isSyntheticClick(e){if("click"===e.type){if(0===e.detail)return!0;let t=_findOriginalTarget(e);if(!t.nodeType||t.nodeType!==Node.ELEMENT_NODE)return!0;let n=t.getBoundingClientRect(),o=e.pageX,i=e.pageY;return!(o>=n.left&&o<=n.right&&i>=n.top&&i<=n.bottom)}return!1}(t))&&(e.prevent||_fire(r,"tap",{x:t.clientX,y:t.clientY,sourceEvent:t,preventer:n}))}register({name:"downup",deps:["mousedown","touchstart","touchend"],flow:{start:["mousedown","touchstart"],end:["mouseup","touchend"]},emits:["down","up"],info:{movefn:null,upfn:null},reset:function(){untrackDocument(this.info)},mousedown:function(e){if(!hasLeftMouseButton(e))return;let t=_findOriginalTarget(e),n=this;trackDocument(this.info,(function movefn(e){hasLeftMouseButton(e)||(downupFire("up",t,e),untrackDocument(n.info))}),(function upfn(e){hasLeftMouseButton(e)&&downupFire("up",t,e),untrackDocument(n.info)})),downupFire("down",t,e)},touchstart:function(e){downupFire("down",_findOriginalTarget(e),e.changedTouches[0],e)},touchend:function(e){downupFire("up",_findOriginalTarget(e),e.changedTouches[0],e)}}),register({name:"track",touchAction:"none",deps:["mousedown","touchstart","touchmove","touchend"],flow:{start:["mousedown","touchstart"],end:["mouseup","touchend"]},emits:["track"],info:{x:0,y:0,state:"start",started:!1,moves:[],addMove:function(e){this.moves.length>2&&this.moves.shift(),this.moves.push(e)},movefn:null,upfn:null,prevent:!1},reset:function(){this.info.state="start",this.info.started=!1,this.info.moves=[],this.info.x=0,this.info.y=0,this.info.prevent=!1,untrackDocument(this.info)},mousedown:function(e){if(!hasLeftMouseButton(e))return;let t=_findOriginalTarget(e),n=this,o=function movefn(e){let o=e.clientX,i=e.clientY;trackHasMovedEnough(n.info,o,i)&&(n.info.state=n.info.started?"mouseup"===e.type?"end":"track":"start","start"===n.info.state&&prevent("tap"),n.info.addMove({x:o,y:i}),hasLeftMouseButton(e)||(n.info.state="end",untrackDocument(n.info)),t&&trackFire(n.info,t,e),n.info.started=!0)};trackDocument(this.info,o,(function upfn(e){n.info.started&&o(e),untrackDocument(n.info)})),this.info.x=e.clientX,this.info.y=e.clientY},touchstart:function(e){let t=e.changedTouches[0];this.info.x=t.clientX,this.info.y=t.clientY},touchmove:function(e){let t=_findOriginalTarget(e),n=e.changedTouches[0],o=n.clientX,i=n.clientY;trackHasMovedEnough(this.info,o,i)&&("start"===this.info.state&&prevent("tap"),this.info.addMove({x:o,y:i}),trackFire(this.info,t,n),this.info.state="track",this.info.started=!0)},touchend:function(e){let t=_findOriginalTarget(e),n=e.changedTouches[0];this.info.started&&(this.info.state="end",this.info.addMove({x:n.clientX,y:n.clientY}),trackFire(this.info,t,n))}}),register({name:"tap",deps:["mousedown","click","touchstart","touchend"],flow:{start:["mousedown","touchstart"],end:["click","touchend"]},emits:["tap"],info:{x:NaN,y:NaN,prevent:!1},reset:function(){this.info.x=NaN,this.info.y=NaN,this.info.prevent=!1},mousedown:function(e){hasLeftMouseButton(e)&&(this.info.x=e.clientX,this.info.y=e.clientY)},click:function(e){hasLeftMouseButton(e)&&trackForward(this.info,e)},touchstart:function(e){const t=e.changedTouches[0];this.info.x=t.clientX,this.info.y=t.clientY},touchend:function(e){trackForward(this.info,e.changedTouches[0],e)}});export const findOriginalTarget=_findOriginalTarget;export const add=addListener;export const remove=removeListener;