kekule
Version:
Open source JavaScript toolkit for chemoinformatics
1 lines • 385 kB
JavaScript
"undefined"!=typeof window&&"undefined"!=typeof document&&function(e,t,i,n){"use strict";function s(e,t,i){return setTimeout(u(e,i),t)}function r(e,t,i){return!!Array.isArray(e)&&(a(e,i[t],i),!0)}function a(e,t,i){var s;if(e)if(e.forEach)e.forEach(t,i);else if(e.length!==n)for(s=0;s<e.length;)t.call(i,e[s],s,e),s++;else for(s in e)e.hasOwnProperty(s)&&t.call(i,e[s],s,e)}function o(t,i,n){var s="DEPRECATED METHOD: "+i+"\n"+n+" AT \n";return function(){var i=new Error("get-stack-trace"),n=i&&i.stack?i.stack.replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.<anonymous>\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",r=e.console&&(e.console.warn||e.console.log);return r&&r.call(e.console,s,n),t.apply(this,arguments)}}function l(e,t,i){var n,s=t.prototype;(n=e.prototype=Object.create(s)).constructor=e,n._super=s,i&&Q(n,i)}function u(e,t){return function(){return e.apply(t,arguments)}}function d(e,t){return typeof e==ie?e.apply(t&&t[0]||n,t):e}function h(e,t){return e===n?t:e}function g(e,t,i){a(f(t),function(t){e.addEventListener(t,i,!1)})}function c(e,t,i){a(f(t),function(t){e.removeEventListener(t,i,!1)})}function p(e,t){for(;e;){if(e==t)return!0;e=e.parentNode}return!1}function E(e,t){return e.indexOf(t)>-1}function f(e){return e.trim().split(/\s+/g)}function T(e,t,i){if(e.indexOf&&!i)return e.indexOf(t);for(var n=0;n<e.length;){if(i&&e[n][i]==t||!i&&e[n]===t)return n;n++}return-1}function C(e){return Array.prototype.slice.call(e,0)}function m(e,t,i){for(var n=[],s=[],r=0;r<e.length;){var a=t?e[r][t]:e[r];T(s,a)<0&&n.push(e[r]),s[r]=a,r++}return i&&(n=t?n.sort(function(e,i){return e[t]>i[t]}):n.sort()),n}function v(e,t){for(var i,s,r=t[0].toUpperCase()+t.slice(1),a=0;a<ee.length;){if((s=(i=ee[a])?i+r:t)in e)return s;a++}return n}function y(t){var i=t.ownerDocument||t;return i.defaultView||i.parentWindow||e}function S(e,t){var i=this;this.manager=e,this.callback=t,this.element=e.element,this.target=e.options.inputTarget,this.domHandler=function(t){d(e.options.enable,[e])&&i.handler(t)},this.init()}function P(e,t,i){var n=i.pointers.length,s=i.changedPointers.length,r=t&Ee&&n-s==0,a=t&(Te|Ce)&&n-s==0;i.isFirst=!!r,i.isFinal=!!a,r&&(e.session={}),i.eventType=t,function(e,t){var i=e.session,n=t.pointers,s=n.length;i.firstInput||(i.firstInput=A(t)),s>1&&!i.firstMultiple?i.firstMultiple=A(t):1===s&&(i.firstMultiple=!1);var r=i.firstInput,a=i.firstMultiple,o=a?a.center:r.center,l=t.center=D(n);t.timeStamp=re(),t.deltaTime=t.timeStamp-r.timeStamp,t.angle=k(o,l),t.distance=R(o,l),function(e,t){var i=t.center,n=e.offsetDelta||{},s=e.prevDelta||{},r=e.prevInput||{};t.eventType!==Ee&&r.eventType!==Te||(s=e.prevDelta={x:r.deltaX||0,y:r.deltaY||0},n=e.offsetDelta={x:i.x,y:i.y}),t.deltaX=s.x+(i.x-n.x),t.deltaY=s.y+(i.y-n.y)}(i,t),t.offsetDirection=I(t.deltaX,t.deltaY);var u=O(t.deltaTime,t.deltaX,t.deltaY);t.overallVelocityX=u.x,t.overallVelocityY=u.y,t.overallVelocity=se(u.x)>se(u.y)?u.x:u.y,t.scale=a?function(e,t){return R(t[0],t[1],Ie)/R(e[0],e[1],Ie)}(a.pointers,n):1,t.rotation=a?function(e,t){return k(t[1],t[0],Ie)+k(e[1],e[0],Ie)}(a.pointers,n):0,t.maxPointers=i.prevInput?t.pointers.length>i.prevInput.maxPointers?t.pointers.length:i.prevInput.maxPointers:t.pointers.length,_(i,t);var d=e.element;p(t.srcEvent.target,d)&&(d=t.srcEvent.target),t.target=d}(e,i),e.emit("hammer.input",i),e.recognize(i),e.session.prevInput=i}function _(e,t){var i,s,r,a,o=e.lastInterval||t,l=t.timeStamp-o.timeStamp;if(t.eventType!=Ce&&(l>pe||o.velocity===n)){var u=t.deltaX-o.deltaX,d=t.deltaY-o.deltaY,h=O(l,u,d);s=h.x,r=h.y,i=se(h.x)>se(h.y)?h.x:h.y,a=I(u,d),e.lastInterval=t}else i=o.velocity,s=o.velocityX,r=o.velocityY,a=o.direction;t.velocity=i,t.velocityX=s,t.velocityY=r,t.direction=a}function A(e){for(var t=[],i=0;i<e.pointers.length;)t[i]={clientX:ne(e.pointers[i].clientX),clientY:ne(e.pointers[i].clientY)},i++;return{timeStamp:re(),pointers:t,center:D(t),deltaX:e.deltaX,deltaY:e.deltaY}}function D(e){var t=e.length;if(1===t)return{x:ne(e[0].clientX),y:ne(e[0].clientY)};for(var i=0,n=0,s=0;t>s;)i+=e[s].clientX,n+=e[s].clientY,s++;return{x:ne(i/t),y:ne(n/t)}}function O(e,t,i){return{x:t/e||0,y:i/e||0}}function I(e,t){return e===t?me:se(e)>=se(t)?0>e?ve:ye:0>t?Se:Pe}function R(e,t,i){i||(i=Oe);var n=t[i[0]]-e[i[0]],s=t[i[1]]-e[i[1]];return Math.sqrt(n*n+s*s)}function k(e,t,i){i||(i=Oe);var n=t[i[0]]-e[i[0]],s=t[i[1]]-e[i[1]];return 180*Math.atan2(s,n)/Math.PI}function K(){this.evEl=ke,this.evWin=Ke,this.pressed=!1,S.apply(this,arguments)}function W(){this.evEl=Le,this.evWin=be,S.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function N(){this.evTarget=xe,this.evWin=Me,this.started=!1,S.apply(this,arguments)}function L(){this.evTarget=Ve,this.targetIds={},S.apply(this,arguments)}function b(){S.apply(this,arguments);var e=u(this.handler,this);this.touch=new L(this.manager,e),this.mouse=new K(this.manager,e),this.primaryTouch=null,this.lastTouches=[]}function B(e){var t=e.changedPointers[0];if(t.identifier===this.primaryTouch){var i={x:t.clientX,y:t.clientY};this.lastTouches.push(i);var n=this.lastTouches;setTimeout(function(){var e=n.indexOf(i);e>-1&&n.splice(e,1)},Fe)}}function x(e,t){this.manager=e,this.set(t)}function M(e){this.options=Q({},this.defaults,e||{}),this.id=le++,this.manager=null,this.options.enable=h(this.options.enable,!0),this.state=Ze,this.simultaneous={},this.requireFail=[]}function w(e){return e&nt?"cancel":e&tt?"end":e&et?"move":e&Qe?"start":""}function V(e){return e==Pe?"down":e==Se?"up":e==ve?"left":e==ye?"right":""}function F(e,t){var i=t.manager;return i?i.get(e):e}function U(){M.apply(this,arguments)}function H(){U.apply(this,arguments),this.pX=null,this.pY=null}function G(){U.apply(this,arguments)}function z(){M.apply(this,arguments),this._timer=null,this._input=null}function j(){U.apply(this,arguments)}function X(){U.apply(this,arguments)}function Y(){M.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function $(e,t){return(t=t||{}).recognizers=h(t.recognizers,$.defaults.preset),new J(e,t)}function J(e,t){this.options=Q({},$.defaults,t||{}),this.options.inputTarget=this.options.inputTarget||e,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=e,this.input=function(e){var t=e.options.inputClass;return new(t||(de?W:he?L:ue?b:K))(e,P)}(this),this.touchAction=new x(this,this.options.touchAction),q(this,!0),a(this.options.recognizers,function(e){var t=this.add(new e[0](e[1]));e[2]&&t.recognizeWith(e[2]),e[3]&&t.requireFailure(e[3])},this)}function q(e,t){var i,n=e.element;n.style&&(a(e.options.cssProps,function(s,r){i=v(n.style,r),t?(e.oldCssProps[i]=n.style[i],n.style[i]=s):n.style[i]=e.oldCssProps[i]||""}),t||(e.oldCssProps={}))}function Z(e,i){var n=t.createEvent("Event");n.initEvent(e,!0,!0),n.gesture=i,i.target.dispatchEvent(n)}var Q,ee=["","webkit","Moz","MS","ms","o"],te=t.createElement("div"),ie="function",ne=Math.round,se=Math.abs,re=Date.now;Q="function"!=typeof Object.assign?function(e){if(e===n||null===e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),i=1;i<arguments.length;i++){var s=arguments[i];if(s!==n&&null!==s)for(var r in s)s.hasOwnProperty(r)&&(t[r]=s[r])}return t}:Object.assign;var ae=o(function(e,t,i){for(var s=Object.keys(t),r=0;r<s.length;)(!i||i&&e[s[r]]===n)&&(e[s[r]]=t[s[r]]),r++;return e},"extend","Use `assign`."),oe=o(function(e,t){return ae(e,t,!0)},"merge","Use `assign`."),le=1,ue="ontouchstart"in e,de=v(e,"PointerEvent")!==n,he=ue&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),ge="touch",ce="mouse",pe=25,Ee=1,fe=2,Te=4,Ce=8,me=1,ve=2,ye=4,Se=8,Pe=16,_e=ve|ye,Ae=Se|Pe,De=_e|Ae,Oe=["x","y"],Ie=["clientX","clientY"];S.prototype={handler:function(){},init:function(){this.evEl&&g(this.element,this.evEl,this.domHandler),this.evTarget&&g(this.target,this.evTarget,this.domHandler),this.evWin&&g(y(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&c(this.element,this.evEl,this.domHandler),this.evTarget&&c(this.target,this.evTarget,this.domHandler),this.evWin&&c(y(this.element),this.evWin,this.domHandler)}};var Re={mousedown:Ee,mousemove:fe,mouseup:Te},ke="mousedown",Ke="mousemove mouseup";l(K,S,{handler:function(e){var t=Re[e.type];t&Ee&&0===e.button&&(this.pressed=!0),t&fe&&1!==e.which&&(t=Te),this.pressed&&(t&Te&&(this.pressed=!1),this.callback(this.manager,t,{pointers:[e],changedPointers:[e],pointerType:ce,srcEvent:e}))}});var We={pointerdown:Ee,pointermove:fe,pointerup:Te,pointercancel:Ce,pointerout:Ce},Ne={2:ge,3:"pen",4:ce,5:"kinect"},Le="pointerdown",be="pointermove pointerup pointercancel";e.MSPointerEvent&&!e.PointerEvent&&(Le="MSPointerDown",be="MSPointerMove MSPointerUp MSPointerCancel"),l(W,S,{handler:function(e){var t=this.store,i=!1,n=e.type.toLowerCase().replace("ms",""),s=We[n],r=Ne[e.pointerType]||e.pointerType,a=r==ge,o=T(t,e.pointerId,"pointerId");s&Ee&&(0===e.button||a)?0>o&&(t.push(e),o=t.length-1):s&(Te|Ce)&&(i=!0),0>o||(t[o]=e,this.callback(this.manager,s,{pointers:t,changedPointers:[e],pointerType:r,srcEvent:e}),i&&t.splice(o,1))}});var Be={touchstart:Ee,touchmove:fe,touchend:Te,touchcancel:Ce},xe="touchstart",Me="touchstart touchmove touchend touchcancel";l(N,S,{handler:function(e){var t=Be[e.type];if(t===Ee&&(this.started=!0),this.started){var i=function(e,t){var i=C(e.touches),n=C(e.changedTouches);return t&(Te|Ce)&&(i=m(i.concat(n),"identifier",!0)),[i,n]}.call(this,e,t);t&(Te|Ce)&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,t,{pointers:i[0],changedPointers:i[1],pointerType:ge,srcEvent:e})}}});var we={touchstart:Ee,touchmove:fe,touchend:Te,touchcancel:Ce},Ve="touchstart touchmove touchend touchcancel";l(L,S,{handler:function(e){var t=we[e.type],i=function(e,t){var i=C(e.touches),n=this.targetIds;if(t&(Ee|fe)&&1===i.length)return n[i[0].identifier]=!0,[i,i];var s,r,a=C(e.changedTouches),o=[],l=this.target;if(r=i.filter(function(e){return p(e.target,l)}),t===Ee)for(s=0;s<r.length;)n[r[s].identifier]=!0,s++;for(s=0;s<a.length;)n[a[s].identifier]&&o.push(a[s]),t&(Te|Ce)&&delete n[a[s].identifier],s++;return o.length?[m(r.concat(o),"identifier",!0),o]:void 0}.call(this,e,t);i&&this.callback(this.manager,t,{pointers:i[0],changedPointers:i[1],pointerType:ge,srcEvent:e})}});var Fe=2500,Ue=25;l(b,S,{handler:function(e,t,i){var n=i.pointerType==ge,s=i.pointerType==ce;if(!(s&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(n)(function(e,t){e&Ee?(this.primaryTouch=t.changedPointers[0].identifier,B.call(this,t)):e&(Te|Ce)&&B.call(this,t)}).call(this,t,i);else if(s&&function(e){for(var t=e.srcEvent.clientX,i=e.srcEvent.clientY,n=0;n<this.lastTouches.length;n++){var s=this.lastTouches[n],r=Math.abs(t-s.x),a=Math.abs(i-s.y);if(Ue>=r&&Ue>=a)return!0}return!1}.call(this,i))return;this.callback(e,t,i)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var He=v(te.style,"touchAction"),Ge=He!==n,ze="compute",je="auto",Xe="manipulation",Ye="none",$e="pan-x",Je="pan-y",qe=function(){if(!Ge)return!1;var t={},i=e.CSS&&e.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(n){t[n]=!i||e.CSS.supports("touch-action",n)}),t}();x.prototype={set:function(e){e==ze&&(e=this.compute()),Ge&&this.manager.element.style&&qe[e]&&(this.manager.element.style[He]=e),this.actions=e.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var e=[];return a(this.manager.recognizers,function(t){d(t.options.enable,[t])&&(e=e.concat(t.getTouchAction()))}),function(e){if(E(e,Ye))return Ye;var t=E(e,$e),i=E(e,Je);return t&&i?Ye:t||i?t?$e:Je:E(e,Xe)?Xe:je}(e.join(" "))},preventDefaults:function(e){var t=e.srcEvent,i=e.offsetDirection;if(!this.manager.session.prevented){var n=this.actions,s=E(n,Ye)&&!qe[Ye],r=E(n,Je)&&!qe[Je],a=E(n,$e)&&!qe[$e];if(s){var o=1===e.pointers.length,l=e.distance<2,u=e.deltaTime<250;if(o&&l&&u)return}return a&&r?void 0:s||r&&i&_e||a&&i&Ae?this.preventSrc(t):void 0}t.preventDefault()},preventSrc:function(e){this.manager.session.prevented=!0,e.preventDefault()}};var Ze=1,Qe=2,et=4,tt=8,it=tt,nt=16;M.prototype={defaults:{},set:function(e){return Q(this.options,e),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(e){if(r(e,"recognizeWith",this))return this;var t=this.simultaneous;return t[(e=F(e,this)).id]||(t[e.id]=e,e.recognizeWith(this)),this},dropRecognizeWith:function(e){return r(e,"dropRecognizeWith",this)?this:(e=F(e,this),delete this.simultaneous[e.id],this)},requireFailure:function(e){if(r(e,"requireFailure",this))return this;var t=this.requireFail;return-1===T(t,e=F(e,this))&&(t.push(e),e.requireFailure(this)),this},dropRequireFailure:function(e){if(r(e,"dropRequireFailure",this))return this;e=F(e,this);var t=T(this.requireFail,e);return t>-1&&this.requireFail.splice(t,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(e){return!!this.simultaneous[e.id]},emit:function(e){function t(t){i.manager.emit(t,e)}var i=this,n=this.state;tt>n&&t(i.options.event+w(n)),t(i.options.event),e.additionalEvent&&t(e.additionalEvent),n>=tt&&t(i.options.event+w(n))},tryEmit:function(e){return this.canEmit()?this.emit(e):void(this.state=32)},canEmit:function(){for(var e=0;e<this.requireFail.length;){if(!(this.requireFail[e].state&(32|Ze)))return!1;e++}return!0},recognize:function(e){var t=Q({},e);return d(this.options.enable,[this,t])?(this.state&(it|nt|32)&&(this.state=Ze),this.state=this.process(t),void(this.state&(Qe|et|tt|nt)&&this.tryEmit(t))):(this.reset(),void(this.state=32))},process:function(e){},getTouchAction:function(){},reset:function(){}},l(U,M,{defaults:{pointers:1},attrTest:function(e){var t=this.options.pointers;return 0===t||e.pointers.length===t},process:function(e){var t=this.state,i=e.eventType,n=t&(Qe|et),s=this.attrTest(e);return n&&(i&Ce||!s)?t|nt:n||s?i&Te?t|tt:t&Qe?t|et:Qe:32}}),l(H,U,{defaults:{event:"pan",threshold:10,pointers:1,direction:De},getTouchAction:function(){var e=this.options.direction,t=[];return e&_e&&t.push(Je),e&Ae&&t.push($e),t},directionTest:function(e){var t=this.options,i=!0,n=e.distance,s=e.direction,r=e.deltaX,a=e.deltaY;return s&t.direction||(t.direction&_e?(s=0===r?me:0>r?ve:ye,i=r!=this.pX,n=Math.abs(e.deltaX)):(s=0===a?me:0>a?Se:Pe,i=a!=this.pY,n=Math.abs(e.deltaY))),e.direction=s,i&&n>t.threshold&&s&t.direction},attrTest:function(e){return U.prototype.attrTest.call(this,e)&&(this.state&Qe||!(this.state&Qe)&&this.directionTest(e))},emit:function(e){this.pX=e.deltaX,this.pY=e.deltaY;var t=V(e.direction);t&&(e.additionalEvent=this.options.event+t),this._super.emit.call(this,e)}}),l(G,U,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[Ye]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||this.state&Qe)},emit:function(e){if(1!==e.scale){var t=e.scale<1?"in":"out";e.additionalEvent=this.options.event+t}this._super.emit.call(this,e)}}),l(z,M,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[je]},process:function(e){var t=this.options,i=e.pointers.length===t.pointers,n=e.distance<t.threshold,r=e.deltaTime>t.time;if(this._input=e,!n||!i||e.eventType&(Te|Ce)&&!r)this.reset();else if(e.eventType&Ee)this.reset(),this._timer=s(function(){this.state=it,this.tryEmit()},t.time,this);else if(e.eventType&Te)return it;return 32},reset:function(){clearTimeout(this._timer)},emit:function(e){this.state===it&&(e&&e.eventType&Te?this.manager.emit(this.options.event+"up",e):(this._input.timeStamp=re(),this.manager.emit(this.options.event,this._input)))}}),l(j,U,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[Ye]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||this.state&Qe)}}),l(X,U,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:_e|Ae,pointers:1},getTouchAction:function(){return H.prototype.getTouchAction.call(this)},attrTest:function(e){var t,i=this.options.direction;return i&(_e|Ae)?t=e.overallVelocity:i&_e?t=e.overallVelocityX:i&Ae&&(t=e.overallVelocityY),this._super.attrTest.call(this,e)&&i&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers==this.options.pointers&&se(t)>this.options.velocity&&e.eventType&Te},emit:function(e){var t=V(e.offsetDirection);t&&this.manager.emit(this.options.event+t,e),this.manager.emit(this.options.event,e)}}),l(Y,M,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[Xe]},process:function(e){var t=this.options,i=e.pointers.length===t.pointers,n=e.distance<t.threshold,r=e.deltaTime<t.time;if(this.reset(),e.eventType&Ee&&0===this.count)return this.failTimeout();if(n&&r&&i){if(e.eventType!=Te)return this.failTimeout();var a=!this.pTime||e.timeStamp-this.pTime<t.interval,o=!this.pCenter||R(this.pCenter,e.center)<t.posThreshold;if(this.pTime=e.timeStamp,this.pCenter=e.center,o&&a?this.count+=1:this.count=1,this._input=e,0===this.count%t.taps)return this.hasRequireFailures()?(this._timer=s(function(){this.state=it,this.tryEmit()},t.interval,this),Qe):it}return 32},failTimeout:function(){return this._timer=s(function(){this.state=32},this.options.interval,this),32},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==it&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),$.VERSION="2.0.8",$.defaults={domEvents:!1,touchAction:ze,enable:!0,inputTarget:null,inputClass:null,preset:[[j,{enable:!1}],[G,{enable:!1},["rotate"]],[X,{direction:_e}],[H,{direction:_e},["swipe"]],[Y],[Y,{event:"doubletap",taps:2},["tap"]],[z]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};J.prototype={set:function(e){return Q(this.options,e),e.touchAction&&this.touchAction.update(),e.inputTarget&&(this.input.destroy(),this.input.target=e.inputTarget,this.input.init()),this},stop:function(e){this.session.stopped=e?2:1},recognize:function(e){var t=this.session;if(!t.stopped){this.touchAction.preventDefaults(e);var i,n=this.recognizers,s=t.curRecognizer;(!s||s&&s.state&it)&&(s=t.curRecognizer=null);for(var r=0;r<n.length;)i=n[r],2===t.stopped||s&&i!=s&&!i.canRecognizeWith(s)?i.reset():i.recognize(e),!s&&i.state&(Qe|et|tt)&&(s=t.curRecognizer=i),r++}},get:function(e){if(e instanceof M)return e;for(var t=this.recognizers,i=0;i<t.length;i++)if(t[i].options.event==e)return t[i];return null},add:function(e){if(r(e,"add",this))return this;var t=this.get(e.options.event);return t&&this.remove(t),this.recognizers.push(e),e.manager=this,this.touchAction.update(),e},remove:function(e){if(r(e,"remove",this))return this;if(e=this.get(e)){var t=this.recognizers,i=T(t,e);-1!==i&&(t.splice(i,1),this.touchAction.update())}return this},on:function(e,t){if(e!==n&&t!==n){var i=this.handlers;return a(f(e),function(e){i[e]=i[e]||[],i[e].push(t)}),this}},off:function(e,t){if(e!==n){var i=this.handlers;return a(f(e),function(e){t?i[e]&&i[e].splice(T(i[e],t),1):delete i[e]}),this}},emit:function(e,t){this.options.domEvents&&Z(e,t);var i=this.handlers[e]&&this.handlers[e].slice();if(i&&i.length){t.type=e,t.preventDefault=function(){t.srcEvent.preventDefault()};for(var n=0;n<i.length;)i[n](t),n++}},destroy:function(){this.element&&q(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},Q($,{INPUT_START:Ee,INPUT_MOVE:fe,INPUT_END:Te,INPUT_CANCEL:Ce,STATE_POSSIBLE:Ze,STATE_BEGAN:Qe,STATE_CHANGED:et,STATE_ENDED:tt,STATE_RECOGNIZED:it,STATE_CANCELLED:nt,STATE_FAILED:32,DIRECTION_NONE:me,DIRECTION_LEFT:ve,DIRECTION_RIGHT:ye,DIRECTION_UP:Se,DIRECTION_DOWN:Pe,DIRECTION_HORIZONTAL:_e,DIRECTION_VERTICAL:Ae,DIRECTION_ALL:De,Manager:J,Input:S,TouchAction:x,TouchInput:L,MouseInput:K,PointerEventInput:W,TouchMouseInput:b,SingleTouchInput:N,Recognizer:M,AttrRecognizer:U,Tap:Y,Pan:H,Swipe:X,Pinch:G,Rotate:j,Press:z,on:g,off:c,each:a,merge:oe,extend:ae,assign:Q,inherit:l,bindFn:u,prefixed:v}),(void 0!==e?e:"undefined"!=typeof self?self:{}).Hammer=$,"function"==typeof define&&define.amd?define(function(){return $}):"undefined"!=typeof module&&module.exports?module.exports=$:e.Hammer=$}(window,document),Kekule.Operation=Class.create(ObjectEx,{CLASS_NAME:"Kekule.Operation",initialize:function(){this.tryApplySuper("initialize")},initProperties:function(){},isReversible:function(){return!0},execute:function(){return this.doExecute()},doExecute:function(){},reverse:function(){return this.isReversible()||Kekule.raise(Kekule.$L("ErrorMsg.COMMAND_NOT_REVERSIBLE")),this.doReverse()},doReverse:function(){}}),Kekule.Operation.State={UNEXECUTED:0,EXECUTED:1},Kekule.MacroOperation=Class.create(Kekule.Operation,{CLASS_NAME:"Kekule.MacroOperation",initialize:function(e){this.tryApplySuper("initialize"),this.setChildren(e||[])},initProperties:function(){this.defineProp("children",{dataType:DataType.ARRAY})},isReversible:function(){for(var e=this.getChildren(),t=0,i=e.length;t<i;++t)if(!e[t].isReversible())return!1;return!0},doExecute:function(){for(var e=this.getChildren(),t=0,i=e.length;t<i;++t)e[t].execute()},doReverse:function(){for(var e=this.getChildren(),t=e.length-1;t>=0;--t)e[t].reverse()},add:function(e){return this.getChildren().push(e)},remove:function(e){var t=this.getChildren(),i=t.indexOf(e);return i>=0?t.splice(i,1):null},getChildAt:function(e){return this.getChildren()[e]},getChildCount:function(){return this.getChildren().length}}),Kekule.OperationHistory=Class.create(ObjectEx,{CLASS_NAME:"Kekule.OperationHistory",initialize:function(e){this.tryApplySuper("initialize"),this.setCapacity(e||null)},initProperties:function(){this.defineProp("capacity",{dataType:DataType.INT}),this.defineProp("operations",{dataType:DataType.ARRAY,getter:function(){var e=this.getPropStoreFieldValue("operations");return e||(e=[],this.setPropStoreFieldValue("operations",e)),e}}),this.defineProp("currIndex",{dataType:DataType.INT,serializable:!1}),this.defineEvent("push"),this.defineEvent("pop"),this.defineEvent("undo"),this.defineEvent("redo")},checkCapacity:function(){var e=this.getCapacity();if(e&&!(e<=0))for(var t=this.getPropStoreFieldValue("operations");t&&t.length>e;)t.shift(),this.getCurrIndex()>0&&this.setCurrIndex(this.getCurrIndex()-1)},getOperationCount:function(){return this.getOperations().length},getOperationAt:function(e){return this.getOperations()[e]},getCurrOperation:function(){var e=this.getCurrIndex();return e>=0?this.getOperations()[e]:null},clear:function(){this.setOperations([]),this.setCurrIndex(-1),this.invokeEvent("clear",{currOperIndex:this.getCurrIndex()}),this.invokeEvent("operChange")},push:function(e){var t=this.getOperations(),i=this.getCurrIndex();i<t.length&&t.splice(i+1,t.length-i-1),t.push(e),this.setCurrIndex(t.length-1),this.checkCapacity(),this.invokeEvent("push",{operation:e,currOperIndex:this.getCurrIndex()}),this.invokeEvent("operChange")},pop:function(){var e,t=this.getCurrIndex();return this.canPop()?(e=this.getOperations()[t],this.setCurrIndex(--t),this.invokeEvent("pop",{operation:e,currOperIndex:this.getCurrIndex()}),this.invokeEvent("operChange")):e=null,e},canPop:function(){return this.getCurrIndex()>=0&&!!this.getOperations().length},unpop:function(){var e,t=this.getCurrIndex();this.getOperations();return this.canUnpop()?(this.setCurrIndex(++t),e=this.getOperations()[t]):e=null,e},canUnpop:function(){return this.getCurrIndex()<this.getOperations().length-1},replaceOperation:function(e,t){var i=this.getOperations(),n=i.lastIndexOf(e);return n>=0?(console.log("replace operation",n===i.length-1),i.splice(n,1,t)):null},undo:function(){var e=this.pop();return e&&e.isReversible()&&e.reverse(),this.invokeEvent("undo",{operation:e,currOperIndex:this.getCurrIndex()}),this.invokeEvent("operChange"),e},undoAll:function(){for(;this.canUndo;)this.undo()},canUndo:function(){return this.canPop()},redo:function(){var e=this.unpop();return e&&e.execute(),this.invokeEvent("redo",{operation:e,currOperIndex:this.getCurrIndex()}),this.invokeEvent("operChange"),e},canRedo:function(){return this.canUnpop()}}),function(){Kekule.Action=Class.create(ObjectEx,{CLASS_NAME:"Kekule.Action",HTML_CLASSNAME:null,initialize:function(){this.tryApplySuper("initialize"),this.setPropStoreFieldValue("linkedWidgets",[]),this.setPropStoreFieldValue("enabled",!0),this.setPropStoreFieldValue("visible",!0),this.setPropStoreFieldValue("displayed",!0),this.setPropStoreFieldValue("htmlClassName",this.getInitialHtmlClassName()),this.setBubbleEvent(!0),this.reactWidgetExecuteBind=this.reactWidgetExecute.bind(this)},finalize:function(){var e=this.getOwner();e&&e.actionRemoved&&e.actionRemoved(this),this.unlinkAllWidgets(),this.setPropStoreFieldValue("linkedWidgets",[]),this._lastHtmlEvent=null,this.tryApplySuper("finalize")},initProperties:function(){this.defineProp("enabled",{dataType:DataType.BOOL,setter:function(e){e!==this.getEnabled()&&(this.setPropStoreFieldValue("enabled",e),this.updateAllWidgetsProp("enabled",e))}}),this.defineProp("visible",{dataType:DataType.BOOL,setter:function(e){e!==this.getVisible()&&(this.setPropStoreFieldValue("visible",e),this.updateAllWidgetsProp("visible",e))}}),this.defineProp("displayed",{dataType:DataType.BOOL,setter:function(e){e!==this.getDisplayed()&&(this.setPropStoreFieldValue("displayed",e),this.updateAllWidgetsProp("displayed",e))}}),this.defineProp("checked",{dataType:DataType.BOOL,setter:function(e){e!==this.getChecked()&&(this.setPropStoreFieldValue("checked",e),this.updateAllWidgetsProp("checked",e),this.checkedChanged())}}),this.defineProp("checkGroup",{dataType:DataType.STRING}),this.defineProp("hint",{dataType:DataType.STRING,setter:function(e){e&&e!==this.getHint()&&(this.setPropStoreFieldValue("hint",e),this.updateAllWidgetsProp("hint",e))}}),this.defineProp("text",{dataType:DataType.STRING,setter:function(e){e&&e!==this.getText()&&(this.setPropStoreFieldValue("text",e),this.updateAllWidgetsProp("text",e))}}),this.defineProp("shortcutKeys",{dataType:DataType.ARRAY}),this.defineProp("shortcutKey",{dataType:DataType.STRING,serializable:!1,getter:function(){return this.getShortCutKeys()[0]},setter:function(e){this.setShortcutKeys(Kekule.ArrayUtils.toArray(e))}}),this.defineProp("htmlClassName",{dataType:DataType.STRING,setter:function(e){var t=this.getHtmlClassName();this.setPropStoreFieldValue("htmlClassName",e),this.updateAllWidgetClassName(e,t)}}),this.defineProp("owner",{dataType:DataType.OBJECT,serializable:!1,setter:null}),this.defineProp("linkedWidgets",{dataType:DataType.ARRAY,serializable:!1,setter:null}),this.defineProp("invoker",{dataType:"Kekule.Widget.BaseWidget",serializable:!1,setter:null})},getHigherLevelObj:function(){return this.getOwner()},invokeEvent:function(e,t){t||(t={}),t.invoker||(t.invoker=this.getInvoker()),this.tryApplySuper("invokeEvent",[e,t])},getInitialHtmlClassName:function(){return this.HTML_CLASSNAME||null},getActionList:function(){var e=this.getOwner();return e instanceof Kekule.ActionList?e:null},checkedChanged:function(){var e=this.getActionList();e&&e.actionCheckedChanged(this)},linkWidget:function(e){var t=this.getLinkedWidgets();if(t.indexOf(e)<0){var i=this.getText();i&&this.updateWidgetProp(e,"text",i);var n=this.getHint();return n&&this.updateWidgetProp(e,"hint",n),this.updateWidgetProp(e,"enabled",this.getEnabled()),this.updateWidgetProp(e,"displayed",this.getDisplayed()),this.updateWidgetProp(e,"visible",this.getVisible()),this.updateWidgetProp(e,"checked",this.getChecked()),this.updateWidgetProp(e,"shortcutKeys",this.getShortcutKeys()),this.updateWidgetClassName(e,this.getHtmlClassName(),null),e.addEventListener("execute",this.reactWidgetExecuteBind),t.push(e),this}},unlinkWidget:function(e){var t=this.getLinkedWidgets(),i=t.indexOf(e);i>=0&&(this.updateWidgetClassName(e,null,this.getHtmlClassName()),e.removeEventListener("execute",this.reactWidgetExecuteBind),t.splice(i,1))},unlinkAllWidgets:function(){for(var e=this.getLinkedWidgets(),t=e.length-1;t>=0;--t)this.unlinkWidget(e[t])},reactWidgetExecute:function(e){return this.execute(e.target,e.htmlEvent)},execute:function(e,t){if(!t||t!==this._lastHtmlEvent||t.__$periodicalExecuting$__){var i=this.getChecked();this.getCheckGroup()&&i||(this.doExecute(e,t),this.getCheckGroup()&&this.setChecked(!0)),this.setPropStoreFieldValue("invoker",e),this._lastHtmlEvent=t,this.invokeEvent("execute",{htmlEvent:t,invoker:e})}return this},doExecute:function(e,t){},update:function(){return this.doUpdate(),this},doUpdate:function(){},updateAllWidgetsProp:function(e,t){for(var i=this.getLinkedWidgets(),n=0,s=i.length;n<s;++n){var r=i[n];this.updateWidgetProp(r,e,t)}},updateWidgetProp:function(e,t,i){e.hasProperty(t)&&e.setPropValue(t,i)},updateWidgetClassName:function(e,t,i){i&&e.removeClassName(i,!0),t&&e.addClassName(t,!0)},updateAllWidgetClassName:function(e,t){for(var i=this.getLinkedWidgets(),n=0,s=i.length;n<s;++n){var r=i[n];this.updateWidgetClassName(r,e,t)}}}),Kekule.ActionList=Class.create(ObjectEx,{CLASS_NAME:"Kekule.ActionList",initialize:function(){this.tryApplySuper("initialize"),this.setPropStoreFieldValue("actions",[]),this.setPropStoreFieldValue("ownActions",!0),this.setPropStoreFieldValue("autoUpdate",!0),this.reactActionExecutedBind=this.reactActionExecuted.bind(this),this.addEventListener("execute",this.reactActionExecutedBind)},finalize:function(){this.removeEventListener("execute",this.reactActionExecutedBind),this.clear(),this.setPropStoreFieldValue("actions",null),this.tryApplySuper("finalize")},initProperties:function(){this.defineProp("actions",{dataType:DataType.ARRAY,serializable:!1,setter:null}),this.defineProp("ownActions",{dataType:DataType.BOOL}),this.defineProp("autoUpdate",{dataType:DataType.BOOL,setter:function(e){this.setPropStoreFieldValue("autoUpdate",e),e&&this.updateAll()}})},hasActionChecked:function(e){return!!this.getCheckedAction(e)},getCheckedAction:function(e){for(var t=this.getActions(),i=0,n=t.length;i<n;++i){var s=t[i];if(s.getCheckGroup()===e&&s.getChecked())return s}return null},actionAdded:function(e){if(this.getOwnActions()){var t=e.getOwner();t&&t.actionRemoved&&t.actionRemoved(e),e.setPropStoreFieldValue("owner",this)}Kekule.ArrayUtils.pushUnique(this.getActions(),e),e.update()},actionRemoved:function(e){Kekule.ArrayUtils.remove(this.getActions(),e),e.setPropStoreFieldValue("owner",null)},actionCheckedChanged:function(e){if(e&&e.getChecked()){var t=e.getCheckGroup();if(t)for(var i=this.getActions(),n=0,s=i.length;n<s;++n){var r=i[n];r!==e&&r.getCheckGroup()===t&&r.getChecked()&&r.setChecked(!1)}}},reactActionExecuted:function(e){e.target instanceof Kekule.Action&&(this.invokeEvent("execute",{action:e.target}),this.getAutoUpdate()&&this.updateAll())},getActionCount:function(){return this.getActions().length},getActionLength:function(){return this.getActions().length},getActionAt:function(e){return this.getActions()[e]},indexOfAction:function(e){return this.getActions().indexOf(e)},setActionIndex:function(e,t){var i=this.getActions();if(i){var n=i.indexOf(e);n>=0&&n!==t&&(i.splice(n,1),i.splice(t,0,e))}return this},hasAction:function(e){return this.indexOfAction(e)>=0},add:function(e){return this.actionAdded(e),this},remove:function(e){return this.actionRemoved(e),this.getOwnActions()&&e.finalize(),this},removeAt:function(e){var t=this.getActions(),i=t[e];return i&&(Kekule.ArrayUtils.removeAt(t,e),this.actionRemoved(i)),this},clear:function(){for(var e=this.getActions(),t=e.length-1;t>=0;--t)this.actionRemoved(e[t]);return this.setPropStoreFieldValue("actions",[]),this},updateAll:function(){for(var e=this.getActions(),t=0,i=e.length;t<i;++t)e[t].update();return this}}),Kekule.ActionFileOpen=Class.create(Kekule.Action,{CLASS_NAME:"Kekule.ActionFileOpen",initialize:function(){this.tryApplySuper("initialize")},initProperties:function(){this.defineProp("filters",{dataType:DataType.ARRAY})},doUpdate:function(){this.tryApplySuper("doUpdate"),this.setEnabled(this.getEnabled()&&Kekule.NativeServices.showFilePickerDialog)},doExecute:function(e){var t=e.getElement().ownerDocument,i=this,n=this.getInvoker();this.openFilePicker(t,function(e,t,s){e&&i.fileOpened(s,n)})},openFilePicker:function(e,t){return Kekule.NativeServices.showFilePickerDialog(e,t,{mode:"open",filters:this.getFilters()})},fileOpened:function(e,t){this.doFileOpened(e,t),this.invokeEvent("open",{files:e,file:e[0]})},doFileOpened:function(e,t){}}),Kekule.ActionLoadFileData=Class.create(Kekule.Action,{CLASS_NAME:"Kekule.ActionLoadFileData",initialize:function(){this.tryApplySuper("initialize")},initProperties:function(){this.defineProp("filters",{dataType:DataType.ARRAY}),this.defineProp("binaryDetector",{dataType:DataType.FUNCTION,serializable:!1})},doUpdate:function(){this.tryApplySuper("doUpdate"),this.setEnabled(this.getEnabled()&&Kekule.NativeServices.canLoadFileData())},doExecute:function(e){var t=e.getElement().ownerDocument,i=this,n=this.getInvoker();this.loadFileData(t,function(e,t,s){i.dataLoaded(t,s,!!e,n)})},loadFileData:function(e,t){return Kekule.NativeServices.loadFileData(e,t,{filters:this.getFilters(),binaryDetector:this.getBinaryDetector()})},reactFileLoad:function(e,t,i){this.dataLoaded(t,i,!!e)},dataLoaded:function(e,t,i,n){this.doDataLoaded(e,t,i,n),this.invokeEvent("load",{fileName:t,data:e,success:i})},doDataLoaded:function(e,t,i,n){}}),Kekule.ActionFileSave=Class.create(Kekule.Action,{CLASS_NAME:"Kekule.ChemWidget.ActionFileSave",initialize:function(e,t){this.tryApplySuper("initialize"),e&&this.setData(e),t&&this.setFileName(t)},initProperties:function(){this.defineProp("data",{dataType:DataType.STRING,serializable:!1}),this.defineProp("fileName",{dataType:DataType.STRING,serializable:!1}),this.defineProp("filters",{dataType:DataType.ARRAY})},doUpdate:function(){this.tryApplySuper("doUpdate"),this.setEnabled(this.getEnabled()&&Kekule.NativeServices.canSaveFileData())},doExecute:function(e){var t;e?t=e.getElement().ownerDocument:t=document;Kekule.NativeServices.saveFileData(t,this.getData(),null,{initialFileName:this.getFileName(),filters:this.getFilters()})}}),Kekule.ActionManager={_namedActionMap:null,_getNamedActionMap:function(t){var i=e._namedActionMap;return!i&&t&&(i=new Kekule.MapEx,e._namedActionMap=i),i},getRegisteredActionsOfClass:function(t,i){var n=e._getNamedActionMap(i);if(n){var s=n.get(t);return!s&&i&&(s={},n.set(t,s)),s}return null},registerNamedActionClass:function(t,i,n){e.getRegisteredActionsOfClass(n,!0)[t]=i},unregisterNamedActionClass:function(t,i){var n=e.getRegisteredActionsOfClass(i,!1);n&&n[t]&&delete n[t]},getActionClassOfName:function(t,i,n){var s=ClassEx.isClass(i)?i:i.getClass&&i.getClass();if(!s)return null;var r=e.getRegisteredActionsOfClass(s,!1),a=r&&r[t];if(!a&&n){var o=ClassEx.getSuperClass(s);a=o?e.getActionClassOfName(t,o,n):null}return a}};var e=Kekule.ActionManager}(),function(){"use strict";Kekule.Widget={DEF_EVENT_HANDLER_PREFIX:"react_",getEventHandleFuncName:function(e){return Kekule.Widget.DEF_EVENT_HANDLER_PREFIX+e},getTouchGestureHandleFuncName:function(e){return Kekule.Widget.DEF_EVENT_HANDLER_PREFIX+e}}}(),function(){"use strict";Kekule.DataBingItem=Class.create(ObjectEx,{CLASS_NAME:"Kekule.DataBingItem",initialize:function(e,t,i,n){this.tryApplySuper("initialize"),this.setSource(e),this.setSourceName(t),this.setTarget(i),this.setTargetName(n)},initProperties:function(){this.defineProp("source",{dataType:DataType.OBJECTEX,serializable:!1}),this.defineProp("sourceName",{dataType:DataType.STRING,serializable:!1}),this.defineProp("target",{dataType:DataType.OBJECTEX,serializable:!1}),this.defineProp("targetName",{dataType:DataType.STRING,serializable:!1})},updateData:function(e){var t=this.getSource(),i=this.getTarget(),n=this.getSourceName(),s=this.getTargetName();if(t&&i&&n&&s)if(e){var r=i.getDataByBindingName(s);t.setDataByBindingName(n,r)}else{r=t.getDataByBindingName(n);i.setDataByBindingName(s,r)}}}),ClassEx.extend(ObjectEx,{getDataByBindingName:function(e){return this.hasProperty(e)?this.getPropValue(e):DataType.isFunctionValue(this[e])?this[e]():void 0},setDataByBindingName:function(e,t){var i=t,n=this.getPropInfo(e);if(n){var s=n.dataType,r=DataType.getType(t);s!==r&&r===DataType.STRING&&(i=DataType.StringUtils.deserializeValue(t))}return this.setPropValue(e,i),this},createDataBinding:function(e,t,i){var n=new Kekule.DataBingItem(e,t,this,i);return this.getDataBindings(!0).push(n),n},removeDataBinding:function(e){Kekule.ArrayUtils.remove(this.getDataBindings(),e)},updateBindingData:function(e){var t=this.getDataBindings();if(t&&t.length)for(var i=0,n=t.length;i<n;++i)t[i].updateData(e)}}),ClassEx.defineProp(ObjectEx,"dataBindings",{dataType:DataType.ARRAY,scope:Class.PropertyScope.PRIVATE,getter:function(e){var t=this.getPropStoreFieldValue("dataBindings");return!t&&e&&(t=[],this.setPropStoreFieldValue("dataBindings",t)),t}})}(),function(){"use strict";Kekule.globalOptions.add("widget.events",{forceSimulatePointerEvent:!1}),Kekule.Widget.UiEvents=["click","dblclick","mousedown","mousemove","mouseout","mouseover","mouseup","keydown","keyup","keypress","touchstart","touchend","touchcancel","touchmove","pointerdown","pointermove","pointerout","pointerover","pointerup","drag","dragend","dragenter","dragexit","dragleave","dragover","dragstart","drop"],Kekule.Widget.UiLocalEvents=["blur","focus","mouseenter","mouseleave","mousewheel","pointerenter","pointerleave"],Kekule.Widget.TouchGestures=["hold","tap","doubletap","swipe","swipeup","swipedown","swipeleft","swiperight","transform","transformstart","transformend","rotate","rotatestart","rotatemove","rotateend","rotatecancel","pinch","pinchstart","pinchmove","pinchend","pinchcancel","pinchin","pinchout","pan","panstart","panmove","panend","pancancel","panleft","panright","panup","pandown"];var e=Kekule.ArrayUtils;Kekule.Widget.HtmlEventMatcher=Class.create(ObjectEx,{CLASS_NAME:"Kekule.Widget.HtmlEventMatcher",initialize:function(e){this.tryApplySuper("initialize",[]),this.setEventParams(e||{})},initProperties:function(){this.defineProp("eventParams",{dataType:DataType.HASH}),this._defineEventParamProp("eventType",DataType.STRING,"type")},doFinalize:function(){this.tryApplySuper("doFinalize")},_defineEventParamProp:function(e,t,i){var n=e||i;return this.defineProp(e,{dataType:t,serializable:!1,getter:function(){return this.getEventParams()[n]},setter:function(e){this.getEventParams()[n]=e}})},match:function(e){return(e.getType&&e.getType()||e.type)===this.getEventType()},execOnMatch:function(e,t){var i=this.match(e);return i&&t&&(i=this.doExecTarget(e,t)),i},doExecTarget:function(e,t){var i;return i=DataType.isFunctionValue(t)?t.apply(null,[e,this]):!(!t.execute||!DataType.isFunctionValue(t.execute))&&(DataType.isObjectExValue(t)?t instanceof Kekule.Widget.BaseWidget?t.execute(e):t instanceof Kekule.Action?t.execute(this,e):t.execute(e,this):t.execute(e,this)),Kekule.ObjUtils.isUnset(i)&&(i=!0),i}}),Kekule.Widget.HtmlEventResponser=Class.create(ObjectEx,{CLASS_NAME:"Kekule.Widget.HtmlEventResponser",initialize:function(e,t,i){this.setPropStoreFieldValue("eventMatcher",e),this.setPropStoreFieldValue("execTarget",t),this.tryApplySuper("initialize",[]),this.setExclusive(i||!1)},initProperties:function(){this._defineMatcherRelatedProp("eventParams",{dataType:DataType.HASH}),this._defineMatcherRelatedProp("eventType",DataType.STRING,"type"),this.defineProp("execTarget",{dataType:DataType.VARIANT,serializable:!1}),this.defineProp("exclusive",{dataType:DataType.BOOL,serializable:!1}),this.defineProp("eventMatcher",{dataType:"Kekule.Widget.HtmlEventMatcher",serializable:!1,setter:null,scope:Class.PropertyScope.PRIVATE})},doFinalize:function(){this.setExecTarget(null);var e=this.getEventMatcher();e&&e.finalize(),this.tryApplySuper("doFinalize")},_defineMatcherRelatedProp:function(e,t,i){var n=e||i;return this.defineProp(e,{dataType:t,getter:function(){return this.getEventMatcher().getPropValue(n)},setter:function(e){this.getEventMatcher().setPropValue(n,e)}})},reactTo:function(e){var t=!1,i=this.getEventMatcher();if(i&&(t=i.match(e))){var n=this.getExecTarget();n&&(t=i.doExecTarget(e,n)),t=t&&this.getExclusive(),this.invokeEvent("execute",{htmlEvent:e,execTarget:n})}return t}}),Kekule.Widget.HtmlEventDispatcher=Class.create(ObjectEx,{CLASS_NAME:"Kekule.Widget.HtmlEventDispatcher",initialize:function(){this.setPropStoreFieldValue("responsers",{}),this.tryApplySuper("initialize",[])},initProperties:function(){this.defineProp("responsers",{dataType:DataType.HASH,scope:Class.PropertyScope.PRIVATE,serializable:!1,setter:null})},doFinalize:function(){for(var e=this.getResponsers(),t=Object.getOwnPropertyNames(e),i=0,n=t.length;i<n;++i){var s=e[t[i]];if(s&&s.length)for(var r=s.length-1;r>=0;--r)s[r].finalize()}this.tryApplySuper("doFinalize")},getResponsersForType:function(e,t){var i=this.getResponsers()[e];return i||(i=[],this.getResponsers()[e]=i),i},registerResponser:function(t){var i=t.getEventType();if(i){var n=this.getResponsersForType(i,!0);e.pushUnique(n,t)}},unregisterResponser:function(e,t){var i=e.getEventType();if(i){var n=this.getResponsersForType(i);if(n&&n.length){var s=n.indexOf(e);s>=0&&(n.splice(s,1),t&&e.finalize())}}},addResponser:function(e,t,i){var n=new Kekule.Widget.HtmlEventResponser(e,t,i);return this.registerResponser(n),n},dispatch:function(e){var t=e.getType&&e.getType()||e.type;if(t){var i=this.getResponsersForType(t);if(i&&i.length)for(var n=i.length-1;n>=0;--n){if(i[n].reactTo(e)||e.cancelBubble)break}}}})}(),function(){var e=Kekule.ArrayUtils,t=Kekule.HtmlElementUtils;Kekule.Widget.HtmlTagNames={CHILD_SLOT_HOLDER:"slot",CHILD_HOLDER:"span"},Kekule.Widget.HtmlNames={CHILD_HOLDER:"children"},Kekule.Widget.HtmlClassNames={BASE:"K-Widget",DYN_CREATED:"K-Dynamic-Created",CHILD_HOLDER:"K-Child-Holder",TOP_LAYER:"K-Top-Layer",ISOLATED_LAYER:"K-Isolated-Layer",NORMAL_BACKGROUND:"K-Normal-Background",NONSELECTABLE:"K-NonSelectable",SELECTABLE:"K-Selectable",STYLE_INHERITED:"K-Style-Inherited",STYLE_UNDEPENDENT:"K-Style-Undependent",STATE_NORMAL:"K-State-Normal",STATE_DISABLED:"K-State-Disabled",STATE_HOVER:"K-State-Hover",STATE_ACTIVE:"K-State-Active",STATE_FOCUSED:"K-State-Focused",STATE_SELECTED:"K-State-Selected",STATE_CURRENT_SELECTED:"K-State-Current-Selected",STATE_CHECKED:"K-State-Checked",STATE_READONLY:"K-State-ReadOnly",SHOW_POPUP:"K-Show-Popup",SHOW_DIALOG:"K-Show-Dialog",SHOW_ACTIVE_MODAL:"K-Show-ActiveModal",SECTION:"K-Section",PART_CONTENT:"K-Content",PART_TEXT_CONTENT:"K-Text-Content",PART_ASSOC_TEXT_CONTENT:"K-Assoc-Text-Content",PART_IMG_CONTENT:"K-Img-Content",PART_GLYPH_CONTENT:"K-Glyph-Content",PART_PRI_GLYPH_CONTENT:"K-Pri-Glyph-Content",PART_ASSOC_GLYPH_CONTENT:"K-Assoc-Glyph-Content",PART_DECORATION_CONTENT:"K-Decoration-Content",PART_ERROR_REPORT:"K-Error-Report",FIRST_CHILD:"K-First-Child",LAST_CHILD:"K-Last-Child",TEXT_NO_WRAP:"K-No-Wrap",LAYOUT_H:"K-Layout-H",LAYOUT_V:"K-Layout-V",LAYOUT_G:"K-Layout-G",CORNER_ALL:"K-Corner-All",CORNER_LEFT:"K-Corner-Left",CORNER_RIGHT:"K-Corner-Right",CORNER_TOP:"K-Corner-Top",CORNER_BOTTOM:"K-Corner-Bottom",CORNER_TL:"K-Corner-TL",CORNER_TR:"K-Corner-TR",CORNER_BL:"K-Corner-BL",CORNER_BR:"K-Corner-BR",CORNER_LEADING:"K-Corner-Leading",CORNER_TAILING:"K-Corner-Tailing",FULLFILL:"K-Fulfill",NOWRAP:"K-No-Wrap",HIDE_TEXT:"K-Text-Hide",HIDE_GLYPH:"K-Glyph-Hide",SHOW_TEXT:"K-Text-Show",SHOW_GLYPH:"K-Glyph-Show",MODAL_BACKGROUND:"K-Modal-Background",DUMB_WIDGET:"K-Dumb-Widget",PLACEHOLDER:"K-PlaceHolder"};var i=Kekule.Widget.HtmlClassNames;Kekule.Widget.StyleMode={UNDEPENDENT:0,INHERITED:1},Kekule.Widget.Layout={HORIZONTAL:1,VERTICAL:2,GRID:4},Kekule.Widget.Position={AUTO:0,TOP:1,LEFT:2,BOTTOM:4,RIGHT:8,TOP_LEFT:3,TOP_RIGHT:9,BOTTOM_LEFT:6,BOTTOM_RIGHT:12},Kekule.Widget.Direction={AUTO:0,LTR:1,TTB:2,RTL:4,BTT:8,isInHorizontal:function(e){var t=Kekule.Widget.Direction;return!!(e&t.LTR||e&t.RTL)},isInVertical:function(e){var t=Kekule.Widget.Direction;return!!(e&t.TTB||e&t.BTT)}},Kekule.Widget.State={NORMAL:0,FOCUSED:1,HOVER:2,ACTIVE:3,DISABLED:-1};var n=Kekule.Widget.State;Kekule.Widget.ShowHideType={DROPDOWN:1,POPUP:2,DIALOG:3,DEFAULT:0},Kekule.Widget.DragDrop={ELEM_INDEX_DATA_TYPE:"application/x-kekule-dragdrop-elem-index"},Kekule.Widget._PointerHoldParams={DURATION_THRESHOLD:1e3,MOVEMENT_THRESHOLD:10};Kekule.Widget.BaseWidget=Class.create(ObjectEx,{CLASS_NAME:"Kekule.Widget.BaseWidget",BINDABLE_TAG_NAMES:null,DEF_PERIODICAL_EXEC_DELAY:500,DEF_PERIODICAL_EXEC_INTERVAL:100,STYLE_RES_FIELD:"__$style_resources__",initialize:function(e,t){this._stateClassName=null,this._isDismissed=!1,this._pendingHtmlClassNames="",this._enableShowHideEvents=!0,this._reactElemAttribMutationBind=this._reactElemAttribMutation.bind(this),this.reactTouchGestureBind=this.reactTouchGesture.bind(this),this.setPropStoreFieldValue("inheritEnabled",!0),this.setPropStoreFieldValue("inheritStatic",!0),this.setPropStoreFieldValue("selfEnabled",!0),this.setPropStoreFieldValue("selfStatic",!1),this.setPropStoreFieldValue("periodicalExecDelay",this.DEF_PERIODICAL_EXEC_DELAY),this.setPropStoreFieldValue("periodicalExecInterval",this.DEF_PERIODICAL_EXEC_INTERVAL),this.setPropStoreFieldValue("useNormalBackground",!0),this.setPropStoreFieldValue("inheritedStyles",[]),this.setPropStoreFieldValue("droppableDataKinds",["string"]),this.setPropStoreFieldValue("htmlEventDispatcher",new Kekule.Widget.HtmlEventDispatcher),this._touchActionNoneTouchStartHandlerBind=this._touchActionNoneTouchStartHandler.bind(this),this.tryApplySuper("initialize"),this.setPropStoreFieldValue("isDumb",!!t),t||(this.reactUiEventBind=this.reactUiEvent.bind(this)),e&&(e instanceof Kekule.Widget.BaseWidget?(this.setDocument(e.getDocument()),this.createElement(),this.setParent(e)):e.documentElement?(this.setDocument(e),this.createElement()):(this.setDocument(e.ownerDocument),this.setElement(e))),this._stateClassName=null,this._layoutClassName=null,this.getLayout()||this.setLayout(Kekule.Widget.Layout.HORIZONTAL),this._periodicalExecBind=this._periodicalExec.bind(this),this.setBubbleEvent(!0),this.setInheritBubbleUiEvents(!0),this.stateChanged();var i=this.getGlobalManager();i&&i.notifyWidgetCreated(this)},initProperties:function(){this.defineProp("isDumb",{dataType:DataType.BOOL,serializable:!1,scope:Class.PropertyScope.PUBLIC,setter:function(e){if(this.getIsDumb()!=e){this.setPropStoreFieldValue("isDumb",e);var t=this.getElement();t&&(e?this.uninstallUiEventHandlers(t):this.installUiEventHandlers(t))}}}),this.defineProp("bubbleUiEvents",{dataType:DataType.BOOL,scope:Class.PropertyScope.PUBLIC}),this.defineProp("inheritBubbleUiEvents",{dataType:DataType.BOOL,scope:Class.PropertyScope.PUBLIC}),this.defineProp("touchAction",{dataType:DataType.STRING,scope:Class.PropertyScope.PUBLIC,setter:function(e){var t=this.getCoreElement();t&&(t.style.touchAction=e,"none"===e?Kekule.X.Event.addListener(t,"touchstart",this._touchActionNoneTouchStartHandlerBind,{passive:!1}):Kekule.X.Event.removeListener(t,"touchstart",this._touchActionNoneTouchStartHandlerBind,{passive:!1}))}}),this.defineProp("parent",{dataType:"Kekule.Widget.BaseWidget",serializable:!1,scope:Class.PropertyScope.PUBLISHED,setter:function(e){var t=this.getParent();t&&t._removeChild(this),e&&e._addChild(this),this.setPropStoreFieldValue("parent",e)}}),this.defineProp("childWidgets",{dataType:DataType.ARRAY,serializable:!1,setter:null,scope:Class.PropertyScope.PUBLIC,getter:function(){var e=this.getPropStoreFieldValue("childWidgets");return e||(e=[],this.setPropStoreFieldValue("childWidgets",e)),e}}),this.defineProp("document",{dataType:DataType.OBJECT,serializable:!1,scope:Class.PropertyScope.PUBLIC}),this.defineProp("element",{dataType:DataType.OBJECT,serializable:!1,scope:Class.PropertyScope.PUBLIC,setter:function(e){var t=this.getElement();e!==t&&(this.setPropStoreFieldValue("element",e),this.elementChanged(e,t))}}),this.defineProp("observeElementAttribChanges",{dataType:DataType.BOOL,setter:function(e){!!e!=!!this.getObserveElementAttribChanges()&&(this.setPropStoreFieldValue("observeElementAttribChanges",e),this.observeElementAttribChangesChanged(!!e))}}),this.defineElemAttribMappingProp("id","id"),this.defineProp("draggable",{dataType:DataType.BOOL,serializable:!1,scope:Class.PropertyScope.PUBLIC,getter:function(){return Kekule.StrUtils.strToBool(this.getElement().getAttribute("draggable")||"")},setter:function(e){this.getElement().setAttribute("draggable",e?"true":"false")}}),this.defineProp("droppable",{dataType:DataType.BOOL,scope:Class.PropertyScope.PUBLIC}),this.defineProp("droppableDataKinds",{dataType:DataType.ARRAY,scope:Class.PropertyScope.PUBLIC}),this.defineProp("fileDroppable",{dataType:DataType.ARRAY,serializable:!1,scope:Class.PropertyScope.PUBLIC,getter:function(){if(!this.getDroppable())return!1;var e=this.getDroppableDataKinds();return!e||e&&e.indexOf&&e.indexOf("file")>=0},setter:function(e){e&&!this.getDroppable()&&this.setDroppable(!0);var t=this.getPropStoreFieldValue("droppableDataKinds");if(t){var i=t.indexOf("file");!e&&i>=0?t.splice(i,1):e&&i<0&&t.push("file")}else e||this.setDroppableDataKinds(["string"])}}),this.defineElemStyleMappingProp("width","width"),this.defineElemStyleMappingProp("height","height"),this.defineProp("offsetParent",{dataType:DataType.OBJECT,serializable:!1,scope:Class.PropertyScope.PUBLIC,getter:function(){return this.getElement().offsetParent},setter:null}),this.defineProp("offsetLeft",{dataType:DataType.INT,serializable:!1,getter:function(){return this.getElement().offsetLeft},setter:null}),this.defineProp("offsetTop",{dataType:DataType.INT,serializable:!1,getter:function(){return this.getElement().offsetTop},setter:null}),this.defineProp("offsetWidth",{dataType:DataType.INT,serializable:!1,getter:function(){return this.getElement().offsetWidth},setter:null}),this.defineProp("offsetHeigh