From c782f06814c6e94024bcaf9b69adaf0a36cfada1 Mon Sep 17 00:00:00 2001 From: Albert Yi Date: Wed, 1 Aug 2018 15:25:54 -0700 Subject: [PATCH] remove unused assets --- app/javascript/vendor/jquery-dropdown.js | 147 - .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 212 -> 0 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 208 -> 0 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 335 -> 0 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 207 -> 0 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 262 -> 0 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 262 -> 0 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 332 -> 0 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 280 -> 0 bytes .../assets/images/ui-icons_222222_256x240.png | Bin 6922 -> 0 bytes .../assets/images/ui-icons_2e83ff_256x240.png | Bin 4549 -> 0 bytes .../assets/images/ui-icons_454545_256x240.png | Bin 6992 -> 0 bytes .../assets/images/ui-icons_888888_256x240.png | Bin 6999 -> 0 bytes .../assets/images/ui-icons_cd0a0a_256x240.png | Bin 4549 -> 0 bytes vendor/assets/javascripts/hammer.js | 3240 ----------------- vendor/assets/javascripts/hammer.min.js | 7 - .../jquery-ui-autocomplete-1.11.2.js | 610 ---- vendor/assets/javascripts/jquery.dropdown.js | 147 - .../assets/javascripts/jquery.dropdown.min.js | 9 - vendor/assets/javascripts/jquery.hammer.js | 33 - vendor/assets/javascripts/jquery.hotkeys.js | 204 -- vendor/assets/javascripts/jquery.qtip.js | 2122 ----------- vendor/assets/javascripts/jquery.timeout.js | 47 - vendor/assets/javascripts/stupidtable.js | 281 -- vendor/assets/javascripts/ugoira_player.js | 521 --- .../stylesheets/jquery-ui-1.11.2.min.scss | 7 - .../assets/stylesheets/jquery.dropdown.scss | 90 - vendor/assets/stylesheets/jquery.qtip.scss | 557 --- 28 files changed, 8022 deletions(-) delete mode 100644 app/javascript/vendor/jquery-dropdown.js delete mode 100755 vendor/assets/images/ui-bg_flat_0_aaaaaa_40x100.png delete mode 100755 vendor/assets/images/ui-bg_flat_75_ffffff_40x100.png delete mode 100755 vendor/assets/images/ui-bg_glass_55_fbf9ee_1x400.png delete mode 100755 vendor/assets/images/ui-bg_glass_65_ffffff_1x400.png delete mode 100755 vendor/assets/images/ui-bg_glass_75_dadada_1x400.png delete mode 100755 vendor/assets/images/ui-bg_glass_75_e6e6e6_1x400.png delete mode 100755 vendor/assets/images/ui-bg_glass_95_fef1ec_1x400.png delete mode 100755 vendor/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png delete mode 100755 vendor/assets/images/ui-icons_222222_256x240.png delete mode 100755 vendor/assets/images/ui-icons_2e83ff_256x240.png delete mode 100755 vendor/assets/images/ui-icons_454545_256x240.png delete mode 100755 vendor/assets/images/ui-icons_888888_256x240.png delete mode 100755 vendor/assets/images/ui-icons_cd0a0a_256x240.png delete mode 100644 vendor/assets/javascripts/hammer.js delete mode 100644 vendor/assets/javascripts/hammer.min.js delete mode 100644 vendor/assets/javascripts/jquery-ui-autocomplete-1.11.2.js delete mode 100644 vendor/assets/javascripts/jquery.dropdown.js delete mode 100644 vendor/assets/javascripts/jquery.dropdown.min.js delete mode 100644 vendor/assets/javascripts/jquery.hammer.js delete mode 100644 vendor/assets/javascripts/jquery.hotkeys.js delete mode 100644 vendor/assets/javascripts/jquery.qtip.js delete mode 100644 vendor/assets/javascripts/jquery.timeout.js delete mode 100644 vendor/assets/javascripts/stupidtable.js delete mode 100644 vendor/assets/javascripts/ugoira_player.js delete mode 100644 vendor/assets/stylesheets/jquery-ui-1.11.2.min.scss delete mode 100644 vendor/assets/stylesheets/jquery.dropdown.scss delete mode 100644 vendor/assets/stylesheets/jquery.qtip.scss diff --git a/app/javascript/vendor/jquery-dropdown.js b/app/javascript/vendor/jquery-dropdown.js deleted file mode 100644 index f83f239eb..000000000 --- a/app/javascript/vendor/jquery-dropdown.js +++ /dev/null @@ -1,147 +0,0 @@ -/* - * jQuery Dropdown: A simple dropdown plugin - * - * Contribute: https://github.com/claviska/jquery-dropdown - * - * @license: MIT license: http://opensource.org/licenses/MIT - * - */ -if (jQuery) (function ($) { - - $.extend($.fn, { - jqDropdown: function (method, data) { - - switch (method) { - case 'show': - show(null, $(this)); - return $(this); - case 'hide': - hide(); - return $(this); - case 'attach': - return $(this).attr('data-jq-dropdown', data); - case 'detach': - hide(); - return $(this).removeAttr('data-jq-dropdown'); - case 'disable': - return $(this).addClass('jq-dropdown-disabled'); - case 'enable': - hide(); - return $(this).removeClass('jq-dropdown-disabled'); - } - - } - }); - - function show(event, object) { - - var trigger = event ? $(this) : object, - jqDropdown = $(trigger.attr('data-jq-dropdown')), - isOpen = trigger.hasClass('jq-dropdown-open'); - - // In some cases we don't want to show it - if (event) { - if ($(event.target).hasClass('jq-dropdown-ignore')) return; - - event.preventDefault(); - event.stopPropagation(); - } else { - if (trigger !== object.target && $(object.target).hasClass('jq-dropdown-ignore')) return; - } - hide(); - - if (isOpen || trigger.hasClass('jq-dropdown-disabled')) return; - - // Show it - trigger.addClass('jq-dropdown-open'); - jqDropdown - .data('jq-dropdown-trigger', trigger) - .show(); - - // Position it - position(); - - // Trigger the show callback - jqDropdown - .trigger('show', { - jqDropdown: jqDropdown, - trigger: trigger - }); - - } - - function hide(event) { - - // In some cases we don't hide them - var targetGroup = event ? $(event.target).parents().addBack() : null; - - // Are we clicking anywhere in a jq-dropdown? - if (targetGroup && targetGroup.is('.jq-dropdown')) { - // Is it a jq-dropdown menu? - if (targetGroup.is('.jq-dropdown-menu')) { - // Did we click on an option? If so close it. - if (!targetGroup.is('A')) return; - } else { - // Nope, it's a panel. Leave it open. - return; - } - } - - // Trigger the event early, so that it might be prevented on the visible popups - var hideEvent = jQuery.Event("hide"); - - $(document).find('.jq-dropdown:visible').each(function () { - var jqDropdown = $(this); - jqDropdown - .hide() - .removeData('jq-dropdown-trigger') - .trigger('hide', { jqDropdown: jqDropdown }); - }); - - if(!hideEvent.isDefaultPrevented()) { - // Hide any jq-dropdown that may be showing - $(document).find('.jq-dropdown:visible').each(function () { - var jqDropdown = $(this); - jqDropdown - .hide() - .removeData('jq-dropdown-trigger') - .trigger('hide', { jqDropdown: jqDropdown }); - }); - - // Remove all jq-dropdown-open classes - $(document).find('.jq-dropdown-open').removeClass('jq-dropdown-open'); - } - } - - function position() { - - var jqDropdown = $('.jq-dropdown:visible').eq(0), - trigger = jqDropdown.data('jq-dropdown-trigger'), - hOffset = trigger ? parseInt(trigger.attr('data-horizontal-offset') || 0, 10) : null, - vOffset = trigger ? parseInt(trigger.attr('data-vertical-offset') || 0, 10) : null; - - if (jqDropdown.length === 0 || !trigger) return; - - // Position the jq-dropdown relative-to-parent... - if (jqDropdown.hasClass('jq-dropdown-relative')) { - jqDropdown.css({ - left: jqDropdown.hasClass('jq-dropdown-anchor-right') ? - trigger.position().left - (jqDropdown.outerWidth(true) - trigger.outerWidth(true)) - parseInt(trigger.css('margin-right'), 10) + hOffset : - trigger.position().left + parseInt(trigger.css('margin-left'), 10) + hOffset, - top: trigger.position().top + trigger.outerHeight(true) - parseInt(trigger.css('margin-top'), 10) + vOffset - }); - } else { - // ...or relative to document - jqDropdown.css({ - left: jqDropdown.hasClass('jq-dropdown-anchor-right') ? - trigger.offset().left - (jqDropdown.outerWidth() - trigger.outerWidth()) + hOffset : trigger.offset().left + hOffset, - top: trigger.offset().top + trigger.outerHeight() + vOffset - }); - } - } - - $(document).on('click.jq-dropdown', '[data-jq-dropdown]', show); - $(document).on('click.jq-dropdown', hide); - $(window).on('resize', position); - -})(jQuery); \ No newline at end of file diff --git a/vendor/assets/images/ui-bg_flat_0_aaaaaa_40x100.png b/vendor/assets/images/ui-bg_flat_0_aaaaaa_40x100.png deleted file mode 100755 index 99e3f242dd160937cd89da6d64d5c36f1d520244..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`SzNU|?XFz2B6bfq{W3$=lt9f!VmFsDpul zfwRCPvY3H^!2^ulPG;LNFffRDx;TbdoKB8lW#?IZCh(a?@f1%zVFoVG8TwJ-GafTA zFsPQeMwFx^mZVxG7o{eaq%s&87@FuB8t59Dg%}!InVMM{8S5IDTNxNkmM))zq9Hdw ZB{QuOw}wY<=M_NC^>p=fS?83{1OR`UGh_e& diff --git a/vendor/assets/images/ui-bg_flat_75_ffffff_40x100.png b/vendor/assets/images/ui-bg_flat_75_ffffff_40x100.png deleted file mode 100755 index 5093a3238f59f83447966464bac1487874086b33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`SzPU|?XlBkzBmfq{W3$=lt9f$?sa@Dc_F z2F?PH$YKTt1`jZHJDF|Az`!8n>EaloaX$G6KNHX5CmNoiLJX%Sev;XITd$gdfkCyz zHKHUXu_V4C&)zj6_Wt~$(69C8ZG*AEl diff --git a/vendor/assets/images/ui-bg_glass_55_fbf9ee_1x400.png b/vendor/assets/images/ui-bg_glass_55_fbf9ee_1x400.png deleted file mode 100755 index b8a538b72e535fbdacc612a1221f62cf177e1ed4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4NVp#K6F?VU^=~1_lPUByV?@|6srw@%;`1 z0|RG)M`SSr1A_+`yPeFoV_;zD^>lFz@i_kWydoEqqe#QU`gutLIn5m#7PC1@7*=z< z4qF{*ka_oa1@pn?idNCG?#I#xABnmg_KyE?*?-^5WtQ9w5^aeR_t~yac{S@!?YDPv zA6UE+PxP!cNP1W1)vgiA6UYmdKI;Vst05uPFK>z>% diff --git a/vendor/assets/images/ui-bg_glass_65_ffffff_1x400.png b/vendor/assets/images/ui-bg_glass_65_ffffff_1x400.png deleted file mode 100755 index c01dd468b0ff59a7c108964aeb7726ee58f38a75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3nz`(%Zu54b$z`($i!6Akn(GK;%&a!_4^sFt`! zl%yncn&=uD=o*@Z7#docnpqhb=^B_@85op%R)?Z!$jwj5OsmAL UflcJ_OOQ)FUHx3vIVCg!0NbT9d;kCd diff --git a/vendor/assets/images/ui-bg_glass_75_dadada_1x400.png b/vendor/assets/images/ui-bg_glass_75_dadada_1x400.png deleted file mode 100755 index a7335653df9e70f9bca5d393a2fbbb104bb684ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4NVpz`(#DwYbxTfq{W3$=luK|9_FyhG!WV z7&r?&B8wRq7(Bq(?PRtch~eqt7-Dfcx#HLSM3G*lRg0syOXO7>-YHDpA$__aU+M5) zdmesc3Ax&YilB2Jz8D@Zwr>;vED;x%R8czZVX5Zf*PV+qLW@TigYhZ3=U|^b4qk*C!H$Npa XtrE8e7sDe{KpymT^>bP0l+XkKBcDx! diff --git a/vendor/assets/images/ui-bg_glass_75_e6e6e6_1x400.png b/vendor/assets/images/ui-bg_glass_75_e6e6e6_1x400.png deleted file mode 100755 index 0304956d3cea258aeff4512b58579486cf359b42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4NVpz`(#DwYbxTfq{W3$=luK|9_FyhG!WV z7&r?&B8wRq7(Bq(?PRtch~eqt7-DfcxnlZpgDyA0s~0z?^PKOMn0G(1!f^7#RJFsa zE!wUt^5iE;+*@X}r#r1e{=kQWGaf1%A3na7XZ{ljJITI9fi65u480EDR2cM3^BEWz zR7+eVN>UO_QmvAUQWHy38H@}JO>_+nbPdfy3=OSJ&8&=!bq&m|3=Aeqm(M}bkei>9 YnO2Eg!y~uz3Lp=9y85}Sb4q9e0F#+cSpWb4 diff --git a/vendor/assets/images/ui-bg_glass_95_fef1ec_1x400.png b/vendor/assets/images/ui-bg_glass_95_fef1ec_1x400.png deleted file mode 100755 index ff600c09f979617431388ceac2a0f7ce572b17f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4NVp#K6F?VU^=~1_lPUByV?@|6srw@%;`1 z0|RG)M`SSr1A_+`yPeFoV_;zD@^osu z70#KoDNS7a(g(9$>w4v)=k~@dJ=ET`c+$n|v%?pMm=wL;DKXQ`N-{RgN<#LT4zGs9 zpQBqITb$#sWOCQlNSQUC6XZPA64!{5l*E!$tK_28#FA77BLhPdT|)z1L$eS=Ln~7= vD*kacg+wc3y#jfq}u()z4*}Q$iB}r8RRv diff --git a/vendor/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/vendor/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png deleted file mode 100755 index bf6cda21dcd2fb2e2d409bf9902e7276e16e282f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 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 BB7*<` diff --git a/vendor/assets/images/ui-icons_2e83ff_256x240.png b/vendor/assets/images/ui-icons_2e83ff_256x240.png deleted file mode 100755 index 84b601bf0f726bf95801da487deaf2344a32e4b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4549 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 G5}E)V<8j;o diff --git a/vendor/assets/images/ui-icons_454545_256x240.png b/vendor/assets/images/ui-icons_454545_256x240.png deleted file mode 100755 index b6db1acdd433be80a472b045018f25c7f2cf7e08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6992 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 diff --git a/vendor/assets/images/ui-icons_888888_256x240.png b/vendor/assets/images/ui-icons_888888_256x240.png deleted file mode 100755 index feea0e20264c4649b2ef03fe6705d69b4937c04e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6999 zcmeAS@N?(olHy`uVBq!ia0y~yU}RumVEDkn!oa}bIDba4!+xb=2!bx!Kh+T-@=H+i$gUX)&9yXke*&gG@^ z)wm6T3l=@vqi_Zqm95YXrU%Cv3 z^X-LOrY7exO@85`;92=2^^I~0qk;ATgTKZHuho6|c=*Rl;adjV($#&|gf(^ijo!#H zBj}#9m6J$AoyLKaQkp7-lglFHN*_5n91z>!>X6{E(@)Z!ZzjVHk%SP(MpfI`--V81 z<&)NWY3?{us@ZD!)GAfRGKDE2tYMwOR>$h^g0^?hI0b8cy|rv5w@~o9<>_ubjxT2( z5a7|(a5;ZqP0;D>4%bDLp0Tw3_?52S6Z(3hPHM1Zx$LR^tT#kf?8|EUvR>3R56p5GwXP(i${izO9 z)(puhOY@Aj&Ct3(_3x`IxyzRMp8X!nTWQ;{w<1qz0bg?de7)C=<8hvj@*;aW8NbDC@#8yWQnp}8mw&jeYG&Lon-;cRmT%XTJWEq}X4J5$`M`yR zUvD_=^hn=o_U_o71B#`>%`unOMlml_dogL-UOuibM(Z1Ab`^6jT{bgxL2T36%o`zV zW_NAds&M;qEZfA;MDarF*i(*@ybqRHz3weycGoptVZ-Le`g&U41A%2)XYOv<$sBU* z?s`rW8y;)+-9LYdKKeED0M^t13cbqWj7K`96&rpt%d5m>9XP5Kr8_S-f6MD&uZ24- zuN=Kwy_M^Q{Hmp?r*}s4&WJgic5O%JrHxO|R{k>b30c=@Fx}f>ujQ3J?dOj!vR%02 zy1n3qrB9zpInA%%E_J~+S!w&;vPB_p*07lIhU8~gB{r|yV;Qn%+FFKUHRk6#%wAl( zy5kqyhV^9}YmO<1)*3HUw^}wsI$Cyy=>*NEIxQ8Uit|rjYIdk)J@I$?${(Re6}q#N z8`g2X>R9;a%csrnB6VVAcf3lFRTI6xMnj#URO>+8-!jg1`{ex3m6r-$u&*^*ruNJE zEX(E3XQfU|E813jcOPqDb2bh(47|lZD~?tH&cH;w!(h718kG`o?7}s*!1n)X1Bk0Sf`zQC#b#qROA*pwd$#-_w9M|>Ryfnc>|#HR~Gk4js+CzwYF`jP zoZT_=V1$=>kkSG<<{5kw#Ml2+@{4#hTOf2p?ae9o+8sMquhrKm4F4Llwc$pYS-*-A z;{@K;r@EIe9z4CxmAi^1W!s)C=@pv|N@D{;s@Fw#SlQXJHTW>NWJifgZi{^U=Ge7e zs|*E9I-;CUgok$g+mduuIOVOOQI*phrcLuA_o`$n>CLKhY|6B4=-znso!p_G12?#D zud;jH^5vfEqzR6mt0a<^#GG5bwsCeF(=M553%HWaww?076zmi;WzES}FIj$NCGOKf zuBT3Hh*xKL%I>N6@K<6^sprC9vzWvMSIpim*gT(e%0}+U2!2qK)@Ohe2+;CR!j>_k z_moPe@dR-O^XP3SQ-rMoOBJI^%AbVh+^7?9V|#k%=)gMydUwHW5%_lEkJwL6@^=ajfo&6ayLeUOkscHS!&Ah`7 z{d@Jd;{3^&#Yy{TY_It@`Dl)0Ex#;dJbNdDN~rd~aK$C-?DM1Fue~h)>GJ2w3H(kP z&kBrrr#>kHE1GE*4k0AS$?^DgoL|FTf)}xI!pV%McVfnrc`oo z(9PZ=e==oJ|MDw(0wP}=6l`Lz3eLPPeDa;LP0*A|ZUg;Qn=CCi|9tmiX~^{JCk}j! zV=DhH$lLt8QE;2yB71{=##aj(tN+IuWbrB4OfHjHoX-8>Mj)&{iDQuJ+pEG5{L<&} z6^Bdr&ma7ef2Hl5sQ~AJoR~uGGhu!&6}y+-Z<}!WQdZ+8pE*gofA=lxu?_XM`Sw}t z`sTA{*FR4SVp+Ckr@d5gf7ZN(%Wo$gVlS?LroJSG%T6}*-`^OPC>`#`&EcDFe)%W! z+{82e_bV~WwKILhCh{AeFJ|ISY}_35bluZK{+r{P^qvPy-Mx5^#$UT*-k07t$DC(N zK46v`_nI8JC8zu2(ir9~FLyP%hFDOq@Ky^d)DukGGP++{L#)E}F1gqy6U(>7GK48C|T7)BR_J1>E@_ z%A56hjmD!)uTF-XBjJUTZ8M&BAK=cBUY^N+?E2+f0_;2+#Vh)P*?!GY2vIDaw2mo4 z+{NMQug|}WyLl`RWWW5rdTOP`k*h2*i6@@QvdxNQo^|$PqtetOrg>vO#^p45#rH;fnscui{NM25;zI?q8%{Nzh5ACjF7N4G&tz~o z%Votsw`iS5GfdC%^D5>_B{b=F-2OLh(XZtyyS!NH49m}k2VU{I<)W+<>Az<(ufRQS zvkd7lk*k3pZksx1xeY`u%^-^Cj`FGeQ?t@))eGIIHc< zUXlK8*7`*mH5=z|J*1sr<{|d}NqgotN4c8VA0itMO!}}lio-U}%QYsU-iY6TYX(zY z?2o^5(iBW1S{5YK+Xwd>$ZY-|7&qmny%*C1Lyp{{Dwp4(!=-k8#0auE!;fg}Z)! zFO4c`bd`H9vfOcJ{Ugmh)_Kp&dAC~2`>W}0IHkRa!R1Z=noL(gj%4@szg}%VE9&-} z)BaF$P0R5e^V>~DO^#Y^))CLCdUVbIs&EbuALkD_^WurpKh*1-A3t7jR@I5APdx3H zkyXNi{YPfYJXkSlUdVr@4I!J@gkL3P<%z#s&gJ&Q_34>cI;V9C`tmkCa5G_7zq~Tr zC%ov2(mK(AXukZ!$?_lb_na!0n*Bf|`%Ix<_NBGW`=8&9S#Xv$@1gwGg^PB6*)~z{ zeB`N$;EiD#j+cH-n{uUa<+T!R{VS_=*Ol&IE|52nEAQ8>x+(Esi^=SL$F?L!w)5Fm zmAt%kIq%)C^t$Qqjn11#>gc>^X!(2Ehc`v)hi%PV;hJvYn#i36kE;%Bu{T=C&Jwe1 zsr-WlX%A2DIr8IAOr3gK{ifc6dLMP-v;( zSrGK#o1TKg>xWLNf78r%PJRD5Z{PXd++nX<{=T}Ve{S*WVtD}g zq1;LG$M2gxdcASqCF5`NuRf_XeaAFu(o@MhlXrC}{f=g^;l1Ov=3epn{$Kw>Eu-R? zJJwpnzf5ycj4J#(J)U1!H0J!jC%OuauXGb^N&|y+nky&F`10m|(wSJ z?okstR@`H_cbe7i%;N)^|GI?#%ypTY-ue6GrYZfiGZ_j!lSJ9{yjUYb+BV9bOv?J3 zeMhC^fG_Ls|Aui(yv_dDEL(7T|K|;sy(^vLH*AtmD_Y;^`h`XC{A1s``Rf@!Sj657 zX{nHiIB~qxlwH0*zTSqdm+#5dl6V9D01?Oiatj`Q*oNBeG4W?m+Fa=F_;SgzJFjIg zUA+0LY^HlsAVc4B(SkiiRagHqUvcf8VEpmB@vTr^{v&1`Q=2&ch-uGxqH?`Z*8WL2 zm*L`DKO_El+q|?m#Jgwygysn{(TxaV%F^}6Yx}wd;pKH=SHo5fX z(0@V^i>A)9?e5&MW0K67Ro^S8WfXTl&e2c{U8JsGD4zc4XW8GHAA)hqEP^XE{{9oo z*LdbMy`m}gR!rCBiO*lXefHtVzU!e!py);@NVYfmfJMT4~JXd%IEKcGT5x*9`npxwb_8i1jf#sq%m7of9SwCuE*m z9Cp%q`RuFCuH)Sri`h%mMLI0>I+l7l&lU7p<9#P|!SlD7KgA}Qwkhw4sQ9H^BhnCR zwcv`wqrT(0OW7{i+o$Nn6`C&dQM|+u+u>WZUWD(ur^x}4f~c2gte2d%dyww1Ypd@z zHn%tXy+pF6*;|FHRr-3O(9u}Aei zpH-6CzpnYm_>^alHs8|g^BL^db9@YBm^L$crZShTz@%JnU9%OM5B4|C-`F4jAX2U; zuUl$?yY{+WqE@2QY7%)KZhLU@3(IV_A4>Hz>dvq4o_uqC(u2Zx!gaPswA+@iX3@!7 zY|r|@cP-n6N3_5od$eEacVe^Z zJ9ar0sZ5cJi;w^RXr>qZ?!o+R7B_ZG(ypATy;JL7ep^=lhFqQk-QPRfvUjlUFyx$A z$~f_V_Y2jPwv)E)Z~dYBKuNlbtK-Ihlk!5@?LxZU0)iXsuTJ>qI_-zt2XC%#%rz53 z<>+R$l&-otOD?O%m_YH=Fe37rnUP|8oC<+0Cwdn%Nuuv!XuQJk~jyboEjF z&z(&jodKK;FU}SSyq>3hfZO5lMVsh`b{1$uU0I)Db5#Aq@&dE1DsxSDxqQ9hI)T0M z^ckk-T<;frI9_8`{yfgk{LPu_EA1;7{f?}ypC-IBpnS=j^Jy>aR$pPtZecU;)ITn@ zB>C)g+au?aeK#z7zh(XXMn{nb*MvERUAL|Lv>vZ|=ht{J@b$wVyOK_Zx^GNie)jm( z{OiXyw{E!T{BT95QulJx`{kya^d7L>SGz4$W-Y#?>*5i;I~&ilY!i_-PgS|C^0f1I zYdONCJt9#MSqm}yhv@&+b4Hjo$qM;)q6Ep zf9{u6N&EL4aNfJ$E^3*f-0t{*i~b*E=V;uI z`;YtiViTMVPxwsP*Y|gwg}ZYrwz1x@CBQKzFZIjA#{+T!SFZiiYwYHep&CdeG%#PYugfY_1n?=@1AVZZRwTUbS}w;E8=p`m(}xFj23mUIMklI zw=00P{PRzluX6hqbX-n6y5fNEYtEcPcjoFKhL{5B%^x?pR7@%EY78;H5W)E2#^evz zunkW=i_UK4_xFuC=fAW^b60Il?H;GMbFE%8JGMO4Z z%*+gau|X(W%4&^>i-*|$V6I=9nyOPd#QwyK6cuy@w|&~V`F?8X<#i4lxmRehcl1RylbAJ}KH@~{ER(1hX7Gp%}v5G01`BtAXa1L=aJ~XFN;g0F->PaFc8;;(W ze507{5Xcaw9abc?{wSAmYpUXEmNOfiPEXi(d-CdM{@)xIEITLhxa-P>L!F$;oIm$8 zgvyzOt$pdzc(MJbOE1UVEt|Fc?@s-2?SPHd8i|OUW$&Cojmtki2^iygm5c^&_kO+6 ze1c_x=x(pQ)3QzXeN(o+%`CO*_&OIQ2HjmR=j~E1nd*~ge0Xuqq;-cIg({0ruDnyo zy1Z=0yM>NMf+cONcBgAwYz{QHc$J?JjMBNh(Q2~pF0FI_r^%}F&3d=cQH4QwS55)* z2hVvaQ@gjAE)UlKD6oEmlY4PPrikCu)m1uW%j+7cdTdyG$N0WzC9iVvX$*e=*#b)Sw-z4cD1uj zWP7pEtNmxiJNt|c!Wnv^6iRGfwB6TNALfu^0H|FetEyUcVP3E)P12M3^(`1ooVQu_holv z{hDQ^G{j1)9ApweUS{WuKQ28x8804#B|ng-(4BLUH5l7;NSZHsbG|8ljNha zFIt)%+xoOVI=AmIGrrl*yG44Z#>V~nFUrLY_~$IG5)X(!`ucOY&%#+;=1bo%bIg(Q z`u+#3gkMTQisjZh=7Podd3835)C<3S#2vX}$8Xlgti{Po7B4ydlb^d>ezJyH)zx2~ zr^LgS*=ui%|9fRp2g`#!QyN*Gi{5v6@^Zev_J_}wzsy^{1m5}Erd7#nyGG#u9;1D$ zYPNmq{;4l*|9;OZ9oY#}_RrE*ExcLH5ckObheKZxf4u+x>r4N4{D1gO=5O4-Ey-UT zr{~}JBGtjdpts4ZfA-_u{hyZWct3n~Y5qg@J+9XOzM9uKC7k!Wz#h9V@v`<|eU40v zJ*FETen1*ThmA31@D$nG)SA4M6IF<2K7J|x_Nfb{FXfcmlf(o1OK)Ejd9^iW|Jya^ zPjEN%Hr~#We%V>gCY!^vMfR~=*p{!=856`C3=ND5dJL6qKV4Yp-cfn5<>dkK4f-oS zXmlot8-yu}T5hv!t$KT1%|T98k)J8|Z++~p<0l+N7-nb5mhN(A{n5Dq>#*+ba0azM zEdlll+zx*$w@uJ=TE;f-J*U}BnIFMY43P|KkI!#N%)Tr5dwbj5vwImL8O$D^FG$S3 zJMV98%W5``nHn{x6m|Zr6xyW*B+$f19p%C)Ea z8Go@xGWbX(7^V7t(p=thovXad$wYCec`=H%h6AQz>qZWyf7YSP|t zIP1juV-~J5dv@%rS-o{>&#Dz`vQkVaZk3-ub-Il z(;@C70|NtNlDE4HLkFv@2Ll5GXMsm#F#`hwi0#4Pb~4+Jfq_58)5S5Q;?~<(?&RCs z1ldk{ta>?PQtVD|;pH2zrJQ@FdUN&bUF&*p<>c;K@=~Zg_Wl3=6B%nB7PPlVoD#`> zJX!ZOhroean}%`*4Q@d}K|>~$32%0BT3?fQJLmBJnd*b<_6K=ZoH;Dyq$42W!<13o zQ!;hd17(IaOdmoV>9pWeHtjvSj4U?VsqkUO~BG-Z|}rnUfhM6W(rL{lN1%57(sI z@w;@3AD!J2YQX)>cZv9n=#KAP#oQlE5-PYiOg=R0g>u7O-ZL&XONE7H>UeH6^n35+ zzMyCFCpO{vj+cD_E?{t^qwwXt2Yr7Rw76zF%>CXn&vCOfW8ERG4`HtTAWJZ~Bj86pX6bAp2m0t2j5=n2jZ@)1)XJ(+M&GPO8A_`Mjc+6xE=tkVgxz=&b zYzDu_nM*acS=Yr9Tpwi?{{P8v&$-Nst)=kpdnQ3B*zIh8-2TNZw$txrE57J3{3y~Y zIdOM)ZH+ZUcEAFY5AqLRO-y+ZdFJxLscGvE+-C4zwZAT!)2=DPO1mfXz-s169DPUH z0>k7i8Dl!7ube-e${~0_z2U%m#~&sBV!;Qk%x7*k+I*R5@1Mxx3f~jA8(YpgaXg-O z`LCMPx`o|U2kr81I{fjb#wJ2RfP@aF%f6a9B-Ju|A^6D;Td%Xhi=gq2Lj8bA!mNgA2b# zubXIp^Bxy_<7}4qjNA`q9=Da>@cMbO5*WDkp5EJC?A~glm2H{4yU%rp#fxcs7ymoZ z|KP>>Dz>!T#b1jS8J^|wo4EGP5Al7wm~Z42UM^pAP0iN7ojs=3n=OHhTlv=)A*OFe zzl9#u?c441sm8t`*Y0r4`n0!SS=rC-d|*}kn#JVdvhIc>LVTZ>RX@_4mlr*kZ4%eN zGaFpFguJ;UcW~cuIe5EWcj-k=!T0k-wHdc~=h*JK+&pWRPr}8SKWp}@&gIya*Uy>w zhlPVv@Sgm$9=>kBlfuf4FHE;^YMA_gFyDSx+m3g?TtN{RlfNYVk6T)y^?~g%u6rNG zFZw@Y8q=E7I?KLKWeaCkRBf$tRdm}bacG+!x5#>p&|r^1gOp?CnjvBfK6AeovQRG2 zxyx4Z#cBI>@4vk-&L}Ww3H4M=>x#I~a?G_M_2*pSDMB-a8vb*6ziI1J%@vpS7Qbl7sU_x85&zkQeUgq@40UVRpVgTd6R6#Wmm5$7#Xw zeczepNxunQH_7{Gk6L=2U0$b*g7|h1#uq)cn(w&VeT0v`m3q?RrfQ+lrCIdt)Oj|= zrO_tOch8qD49wnP@Fh3eCw1GVt?|pv*Uo!lFw?=#P)Z@f!14R7sMc2p?t~>vFA;T} z7^cv2hKEUjd4W&KqU<}y91~pSy|%0~F%f$Z^?qH~Wmdn0qLMFm2~5*YFa6KS)5s~n z$n=eu$#G>LpNEr>kH=Mq$sdwgr?VaqxgZ}}Xv@Zswcz5T$Dh6=`yRN+{(HX>$ByFX ze7EJ^Pdmxz)o|&*vrj{2kiu7Xzre0#e;@QUU1s8&`pUre%4dei%>TNKt7=S+hKVlc zo)Y`uUF;p!X-;uWKkv<(Fm-*rN5iH6-}ds~Wl?$3U^7Xjos%o^!ILLPY}pPhOmTSC z%##dOM1K(HWwZtefN;s-0FSo%AxUaI zgX_PlIWoF`?_e?9>FLd|wc*VMm*UPDJXt++n=Yz<-m{nciSOT?mzgXW7wR=!UTwG` z!+1MON?L7h;Z%8s_nhn@Wx@Br%Gp&{I!ZU(J$B=B z)V%G_!`7YrcWjfue#N(%d%l}W=E_cX{v^NI2Yf0grvDUSwcd2{^WJL{HwR68 z`M5tTd{3goyfqGCvwY60g|B;Xtft&V-uigLY z?Clrk8?BQx=Ct2Gb)7LUKy7_-+b8MlW|M6K`-PuB`fjoB?9vI+n+%>lK4~~9^tU*7 zIP=1?Z`nHyEm8_MZR`%&-FLOeRXVni$-{!@(aFEd&%e9te%Wp2miIi{k9!}Gf6)Kw ztNNM+MSnYcn)xNA{fl1x-d6PX%<^x)FuYPZtWS1))!S>mr zjKP#Gt-{8TSbEC2V=Raf5Z=-YfX{WGi8 zBg9vv>e$t-NlpFzwr2TM2FC^8IF=r=)#OZ>^gHlwLalf}bWh7_?-lR-x;~$7dU2ll zhsbOFd3BoY`+rXNk7i2w?{E9u*!6jifT?=qO%?l(%rCZ>Pt3i~@OZL#NPU&G$kkSXx(mx$ zHP<}-Ep>m^d4`>{@ssS+OX{2kIrv<{;m9=|F&!0@=Xn_+L-J{kDU$;;4m)eDTG&n2ZzjK$$-l)5m z#kT6DuC32{)_&>Q_uH4_Pc4xw3Qu%0OPTR}`s)Q6%qtEAA1h{xK2X#5ef9IzQ@Qj_ z8H4H@mmSb}Y!b1d`^b^o-^|S#zN}xDV9Zv-_FL$~rn3Pe$9@*PQGei3XA@-ayUA#S z<{SlXg^RB@r?;OEE4U{1!)a^YHe03@tTo}M&aR1ByFbhze!7LB|MixW-c>aNIvP|sCZ}VPUzRq6I zCK13YyD)M6%srW3e*bvZ@E~GZ?F+?|h4WuyNLmt8W)Byj^8?T{x_W zWs3dEG=?7gv&a8FW7x|(O)T(`A=`lvM&X3rZM7T<9;dVa@A$~9Q_XT#Ff8hHcS!G) z^Ruti+k2i_Un=-?MWFX&AK#a$XWM$;)g5?O_~q4AK_PMWuGL>EPfO$)+_sby6coJ3 z9lXc-*Vpe^9Y6nlT_4-x@^FPRU z8!Kw`st`WyO6cn$<@{CoGgHSe|hkjtAsd^#SxEzxJQ zD5xYB6rA3}RP!j6Iqk^An=d#!?QYy&{Hxi0PYqK;K!QNPvZWTzhTd0aPjqZO(`&Qd zXy@VEO+U`Ddbbs|<~T6&IF!pQX2FKo>j3Fa>+gZ9SnpKW8dq(JY8f2+lD|LFDpDK6P|@vB8=%J@I= z-(4%+clPfaFSg)$E3T(3d6ygZezyJPaE&pKNV1`DHUua(8B^Jn#UbaZsQ;QdwO;IVA>ie0B-U%%FF zcbL!5ak4}@HhgDxZSB(sU)#mjn@@b{c4}SG^c2t@Ec*L}xul>{Kl4d_<4u`Et3RlBDs{9LIc z8L{a&7+N*rx_< zWhuX`g20T_-@7iwJ_UtLM+XOg*71jzo?LAH^Z&qx8eUEYd&Z~S+8TdYIDYx_AMbso z&3RB+xM@LU@yRFm@At}HWXk&^QE(aFF}v+nRBF@sK+ogEuKW_;6aU$zjD-XCFvgZ_i%2{vcp(ZSL`gHH|Cn_dS~WFZ?*$uPBG9 z|6jejf1PRFo`1FPnfU&$e=8x-aP9xA8x9wkb~(Jf`^U|tN9I5KmIGb0nsRnaFfcHv zmbgZgq$HN4S|t~yCYGc!7#SEE>lzs88W@Hcm|7VdTNxVY8dz8v7-%LOn1rGsH$Npa ztrE9}2-^xh1_lO6kPX54X(i=}MX3yqDfvmM3ZA)%>8U}fi7AzZCsS=eqconbelF{r G5}E*8!6`@p diff --git a/vendor/assets/javascripts/hammer.js b/vendor/assets/javascripts/hammer.js deleted file mode 100644 index 9cd1ba7a5..000000000 --- a/vendor/assets/javascripts/hammer.js +++ /dev/null @@ -1,3240 +0,0 @@ -/*! Hammer.JS - v2.0.8 - 2016-09-30 - * http://hammerjs.github.io/ - * - * Copyright (c) Jorik Tangelder; - * Licensed under the MIT license */ -(function(window, document, exportName, undefined) { -'use strict'; -/** - * @private - * use the val2 when val1 is undefined - * @param {*} val1 - * @param {*} val2 - * @returns {*} - */ -function ifUndefined(val1, val2) { - return val1 === undefined ? val2 : val1; -} - -var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o']; -var TEST_ELEMENT = document.createElement('div'); - -var TYPE_FUNCTION = 'function'; - -var round = Math.round; -var abs = Math.abs; -var now = Date.now; - -/** - * @private - * get the prefixed property - * @param {Object} obj - * @param {String} property - * @returns {String|Undefined} prefixed - */ -function prefixed(obj, property) { - var prefix = void 0; - var prop = void 0; - var camelProp = property[0].toUpperCase() + property.slice(1); - - var i = 0; - while (i < VENDOR_PREFIXES.length) { - prefix = VENDOR_PREFIXES[i]; - prop = prefix ? prefix + camelProp : property; - - if (prop in obj) { - return prop; - } - i++; - } - return undefined; -} - -function getTouchActionProps() { - if (!NATIVE_TOUCH_ACTION) { - return false; - } - var touchMap = {}; - var cssSupports = window.CSS && window.CSS.supports; - ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) { - - // If css.supports is not supported but there is native touch-action assume it supports - // all values. This is the case for IE 10 and 11. - return touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true; - }); - return touchMap; -} - -var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction'); -var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined; - -// magical touchAction value -var TOUCH_ACTION_COMPUTE = 'compute'; -var TOUCH_ACTION_AUTO = 'auto'; -var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented -var TOUCH_ACTION_NONE = 'none'; -var TOUCH_ACTION_PAN_X = 'pan-x'; -var TOUCH_ACTION_PAN_Y = 'pan-y'; -var TOUCH_ACTION_MAP = getTouchActionProps(); - -var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i; - -var SUPPORT_TOUCH = 'ontouchstart' in window; -var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined; -var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent); - -var INPUT_TYPE_TOUCH = 'touch'; -var INPUT_TYPE_PEN = 'pen'; -var INPUT_TYPE_MOUSE = 'mouse'; -var INPUT_TYPE_KINECT = 'kinect'; - -var COMPUTE_INTERVAL = 25; - -var INPUT_START = 1; -var INPUT_MOVE = 2; -var INPUT_END = 4; -var INPUT_CANCEL = 8; - -var DIRECTION_NONE = 1; -var DIRECTION_LEFT = 2; -var DIRECTION_RIGHT = 4; -var DIRECTION_UP = 8; -var DIRECTION_DOWN = 16; - -var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT; -var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN; -var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL; - -var PROPS_XY = ['x', 'y']; -var PROPS_CLIENT_XY = ['clientX', 'clientY']; - -var STATE_POSSIBLE = 1; -var STATE_BEGAN = 2; -var STATE_CHANGED = 4; -var STATE_ENDED = 8; -var STATE_RECOGNIZED = STATE_ENDED; -var STATE_CANCELLED = 16; -var STATE_FAILED = 32; - -/** - * @private - * extend object. - * means that properties in dest will be overwritten by the ones in src. - * @param {Object} target - * @param {...Object} objects_to_assign - * @returns {Object} target - */ -var assign = void 0; -if (typeof Object.assign !== 'function') { - assign = function assign(target) { - if (target === undefined || target === null) { - throw new TypeError('Cannot convert undefined or null to object'); - } - - var output = Object(target); - for (var index = 1; index < arguments.length; index++) { - var source = arguments[index]; - if (source !== undefined && source !== null) { - for (var nextKey in source) { - if (source.hasOwnProperty(nextKey)) { - output[nextKey] = source[nextKey]; - } - } - } - } - return output; - }; -} else { - assign = Object.assign; -} - -var assign$1 = assign; - -/** - * @private - * get a unique id - * @returns {number} uniqueId - */ -var _uniqueId = 1; -function uniqueId() { - return _uniqueId++; -} - -/** - * @private - * walk objects and arrays - * @param {Object} obj - * @param {Function} iterator - * @param {Object} context - */ -function each(obj, iterator, context) { - var i = void 0; - - if (!obj) { - return; - } - - if (obj.forEach) { - obj.forEach(iterator, context); - } else if (obj.length !== undefined) { - i = 0; - while (i < obj.length) { - iterator.call(context, obj[i], i, obj); - i++; - } - } else { - for (i in obj) { - obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj); - } - } -} - -/** - * @private - * if the argument is an array, we want to execute the fn on each entry - * if it aint an array we don't want to do a thing. - * this is used by all the methods that accept a single and array argument. - * @param {*|Array} arg - * @param {String} fn - * @param {Object} [context] - * @returns {Boolean} - */ -function invokeArrayArg(arg, fn, context) { - if (Array.isArray(arg)) { - each(arg, context[fn], context); - return true; - } - return false; -} - -/** - * @private - * find if a array contains the object using indexOf or a simple polyFill - * @param {Array} src - * @param {String} find - * @param {String} [findByKey] - * @return {Boolean|Number} false when not found, or the index - */ -function inArray(src, find, findByKey) { - if (src.indexOf && !findByKey) { - return src.indexOf(find); - } else { - var i = 0; - while (i < src.length) { - if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) { - // do not use === here, test fails - return i; - } - i++; - } - return -1; - } -} - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; -} : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; -}; - -var asyncGenerator = function () { - function AwaitValue(value) { - this.value = value; - } - - function AsyncGenerator(gen) { - var front, back; - - function send(key, arg) { - return new Promise(function (resolve, reject) { - var request = { - key: key, - arg: arg, - resolve: resolve, - reject: reject, - next: null - }; - - if (back) { - back = back.next = request; - } else { - front = back = request; - resume(key, arg); - } - }); - } - - function resume(key, arg) { - try { - var result = gen[key](arg); - var value = result.value; - - if (value instanceof AwaitValue) { - Promise.resolve(value.value).then(function (arg) { - resume("next", arg); - }, function (arg) { - resume("throw", arg); - }); - } else { - settle(result.done ? "return" : "normal", result.value); - } - } catch (err) { - settle("throw", err); - } - } - - function settle(type, value) { - switch (type) { - case "return": - front.resolve({ - value: value, - done: true - }); - break; - - case "throw": - front.reject(value); - break; - - default: - front.resolve({ - value: value, - done: false - }); - break; - } - - front = front.next; - - if (front) { - resume(front.key, front.arg); - } else { - back = null; - } - } - - this._invoke = send; - - if (typeof gen.return !== "function") { - this.return = undefined; - } - } - - if (typeof Symbol === "function" && Symbol.asyncIterator) { - AsyncGenerator.prototype[Symbol.asyncIterator] = function () { - return this; - }; - } - - AsyncGenerator.prototype.next = function (arg) { - return this._invoke("next", arg); - }; - - AsyncGenerator.prototype.throw = function (arg) { - return this._invoke("throw", arg); - }; - - AsyncGenerator.prototype.return = function (arg) { - return this._invoke("return", arg); - }; - - return { - wrap: function (fn) { - return function () { - return new AsyncGenerator(fn.apply(this, arguments)); - }; - }, - await: function (value) { - return new AwaitValue(value); - } - }; -}(); - -var classCallCheck = function (instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -}; - -var createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; -}(); - -var get = function get(object, property, receiver) { - if (object === null) object = Function.prototype; - var desc = Object.getOwnPropertyDescriptor(object, property); - - if (desc === undefined) { - var parent = Object.getPrototypeOf(object); - - if (parent === null) { - return undefined; - } else { - return get(parent, property, receiver); - } - } else if ("value" in desc) { - return desc.value; - } else { - var getter = desc.get; - - if (getter === undefined) { - return undefined; - } - - return getter.call(receiver); - } -}; - -var inherits = function (subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: false, - writable: true, - configurable: true - } - }); - if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; -}; - -var possibleConstructorReturn = function (self, call) { - if (!self) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return call && (typeof call === "object" || typeof call === "function") ? call : self; -}; - -var slicedToArray = function () { - function sliceIterator(arr, i) { - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; - - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"]) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - return function (arr, i) { - if (Array.isArray(arr)) { - return arr; - } else if (Symbol.iterator in Object(arr)) { - return sliceIterator(arr, i); - } else { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - }; -}(); - -/** - * @private - * let a boolean value also be a function that must return a boolean - * this first item in args will be used as the context - * @param {Boolean|Function} val - * @param {Array} [args] - * @returns {Boolean} - */ -function boolOrFn(val, args) { - if ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === TYPE_FUNCTION) { - return val.apply(args ? args[0] || undefined : undefined, args); - } - return val; -} - -/** - * @private - * get a recognizer by name if it is bound to a manager - * @param {Recognizer|String} otherRecognizer - * @param {Recognizer} recognizer - * @returns {Recognizer} - */ -function getRecognizerByNameIfManager(otherRecognizer, recognizer) { - var manager = recognizer.manager; - - if (manager) { - return manager.get(otherRecognizer); - } - return otherRecognizer; -} - -/** - * @private - * get a usable string, used as event postfix - * @param {constant} state - * @returns {String} state - */ -function stateStr(state) { - if (state & STATE_CANCELLED) { - return 'cancel'; - } else if (state & STATE_ENDED) { - return 'end'; - } else if (state & STATE_CHANGED) { - return 'move'; - } else if (state & STATE_BEGAN) { - return 'start'; - } - return ''; -} - -/** - * @private - * Recognizer flow explained; * - * All recognizers have the initial state of POSSIBLE when a input session starts. - * The definition of a input session is from the first input until the last input, with all it's movement in it. * - * Example session for mouse-input: mousedown -> mousemove -> mouseup - * - * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed - * which determines with state it should be. - * - * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to - * POSSIBLE to give it another change on the next cycle. - * - * Possible - * | - * +-----+---------------+ - * | | - * +-----+-----+ | - * | | | - * Failed Cancelled | - * +-------+------+ - * | | - * Recognized Began - * | - * Changed - * | - * Ended/Recognized - */ - -/** - * @private - * Recognizer - * Every recognizer needs to extend from this class. - * @constructor - * @param {Object} options - */ - -var Recognizer = function () { - function Recognizer(options) { - classCallCheck(this, Recognizer); - - this.options = assign$1({}, this.defaults, options || {}); - - this.id = uniqueId(); - - this.manager = null; - - // default is enable true - this.options.enable = ifUndefined(this.options.enable, true); - - this.state = STATE_POSSIBLE; - this.simultaneous = {}; - this.requireFail = []; - } - - /** - * @private - * set options - * @param {Object} options - * @return {Recognizer} - */ - - - createClass(Recognizer, [{ - key: 'set', - value: function set(options) { - assign$1(this.options, options); - - // also update the touchAction, in case something changed about the directions/enabled state - this.manager && this.manager.touchAction.update(); - return this; - } - - /** - * @private - * recognize simultaneous with an other recognizer. - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this - */ - - }, { - key: 'recognizeWith', - value: function recognizeWith(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) { - return this; - } - - var simultaneous = this.simultaneous; - - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - if (!simultaneous[otherRecognizer.id]) { - simultaneous[otherRecognizer.id] = otherRecognizer; - otherRecognizer.recognizeWith(this); - } - return this; - } - - /** - * @private - * drop the simultaneous link. it doesnt remove the link on the other recognizer. - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this - */ - - }, { - key: 'dropRecognizeWith', - value: function dropRecognizeWith(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) { - return this; - } - - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - delete this.simultaneous[otherRecognizer.id]; - return this; - } - - /** - * @private - * recognizer can only run when an other is failing - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this - */ - - }, { - key: 'requireFailure', - value: function requireFailure(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) { - return this; - } - - var requireFail = this.requireFail; - - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - if (inArray(requireFail, otherRecognizer) === -1) { - requireFail.push(otherRecognizer); - otherRecognizer.requireFailure(this); - } - return this; - } - - /** - * @private - * drop the requireFailure link. it does not remove the link on the other recognizer. - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this - */ - - }, { - key: 'dropRequireFailure', - value: function dropRequireFailure(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) { - return this; - } - - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - var index = inArray(this.requireFail, otherRecognizer); - if (index > -1) { - this.requireFail.splice(index, 1); - } - return this; - } - - /** - * @private - * has require failures boolean - * @returns {boolean} - */ - - }, { - key: 'hasRequireFailures', - value: function hasRequireFailures() { - return this.requireFail.length > 0; - } - - /** - * @private - * if the recognizer can recognize simultaneous with an other recognizer - * @param {Recognizer} otherRecognizer - * @returns {Boolean} - */ - - }, { - key: 'canRecognizeWith', - value: function canRecognizeWith(otherRecognizer) { - return !!this.simultaneous[otherRecognizer.id]; - } - - /** - * @private - * You should use `tryEmit` instead of `emit` directly to check - * that all the needed recognizers has failed before emitting. - * @param {Object} input - */ - - }, { - key: 'emit', - value: function emit(input) { - var self = this; - var state = this.state; - - - function emit(event) { - self.manager.emit(event, input); - } - - // 'panstart' and 'panmove' - if (state < STATE_ENDED) { - emit(self.options.event + stateStr(state)); - } - - emit(self.options.event); // simple 'eventName' events - - if (input.additionalEvent) { - // additional event(panleft, panright, pinchin, pinchout...) - emit(input.additionalEvent); - } - - // panend and pancancel - if (state >= STATE_ENDED) { - emit(self.options.event + stateStr(state)); - } - } - - /** - * @private - * Check that all the require failure recognizers has failed, - * if true, it emits a gesture event, - * otherwise, setup the state to FAILED. - * @param {Object} input - */ - - }, { - key: 'tryEmit', - value: function tryEmit(input) { - if (this.canEmit()) { - return this.emit(input); - } - // it's failing anyway - this.state = STATE_FAILED; - } - - /** - * @private - * can we emit? - * @returns {boolean} - */ - - }, { - key: 'canEmit', - value: function canEmit() { - var i = 0; - while (i < this.requireFail.length) { - if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) { - return false; - } - i++; - } - return true; - } - - /** - * @private - * update the recognizer - * @param {Object} inputData - */ - - }, { - key: 'recognize', - value: function recognize(inputData) { - // make a new copy of the inputData - // so we can change the inputData without messing up the other recognizers - var inputDataClone = assign$1({}, inputData); - - // is is enabled and allow recognizing? - if (!boolOrFn(this.options.enable, [this, inputDataClone])) { - this.reset(); - this.state = STATE_FAILED; - return; - } - - // reset when we've reached the end - if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) { - this.state = STATE_POSSIBLE; - } - - this.state = this.process(inputDataClone); - - // the recognizer has recognized a gesture - // so trigger an event - if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) { - this.tryEmit(inputDataClone); - } - } - - /** - * @private - * return the state of the recognizer - * the actual recognizing happens in this method - * @virtual - * @param {Object} inputData - * @returns {constant} STATE - */ - - /* jshint ignore:start */ - - }, { - key: 'process', - value: function process(inputData) {} - /* jshint ignore:end */ - - /** - * @private - * return the preferred touch-action - * @virtual - * @returns {Array} - */ - - }, { - key: 'getTouchAction', - value: function getTouchAction() {} - - /** - * @private - * called when the gesture isn't allowed to recognize - * like when another is being recognized or it is disabled - * @virtual - */ - - }, { - key: 'reset', - value: function reset() {} - }]); - return Recognizer; -}(); - -Recognizer.prototype.defaults = {}; - -/** - * @private - * This recognizer is just used as a base for the simple attribute recognizers. - * @constructor - * @extends Recognizer - */ - -var AttrRecognizer = function (_Recognizer) { - inherits(AttrRecognizer, _Recognizer); - - function AttrRecognizer() { - classCallCheck(this, AttrRecognizer); - return possibleConstructorReturn(this, (AttrRecognizer.__proto__ || Object.getPrototypeOf(AttrRecognizer)).apply(this, arguments)); - } - - /** - * @private - * Used to check if it the recognizer receives valid input, like input.distance > 10. - * @memberof AttrRecognizer - * @param {Object} input - * @returns {Boolean} recognized - */ - - - createClass(AttrRecognizer, [{ - key: 'attrTest', - value: function attrTest(input) { - var optionPointers = this.options.pointers; - return optionPointers === 0 || input.pointers.length === optionPointers; - } - - /** - * @private - * Process the input and return the state for the recognizer - * @memberof AttrRecognizer - * @param {Object} input - * @returns {*} State - */ - - }, { - key: 'process', - value: function process(input) { - var state = this.state; - var eventType = input.eventType; - - - var isRecognized = state & (STATE_BEGAN | STATE_CHANGED); - var isValid = this.attrTest(input); - - // on cancel input and we've recognized before, return STATE_CANCELLED - if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) { - return state | STATE_CANCELLED; - } else if (isRecognized || isValid) { - if (eventType & INPUT_END) { - return state | STATE_ENDED; - } else if (!(state & STATE_BEGAN)) { - return STATE_BEGAN; - } - return state | STATE_CHANGED; - } - return STATE_FAILED; - } - }]); - return AttrRecognizer; -}(Recognizer); - -AttrRecognizer.prototype.defaults = { - /** - * @private - * @type {Number} - * @default 1 - */ - pointers: 1 -}; - -/** - * @private - * Rotate - * Recognized when two or more pointer are moving in a circular motion. - * @constructor - * @extends AttrRecognizer - */ - -var RotateRecognizer = function (_AttrRecognizer) { - inherits(RotateRecognizer, _AttrRecognizer); - - function RotateRecognizer() { - classCallCheck(this, RotateRecognizer); - return possibleConstructorReturn(this, (RotateRecognizer.__proto__ || Object.getPrototypeOf(RotateRecognizer)).apply(this, arguments)); - } - - createClass(RotateRecognizer, [{ - key: 'getTouchAction', - value: function getTouchAction() { - return [TOUCH_ACTION_NONE]; - } - }, { - key: 'attrTest', - value: function attrTest(input) { - return get(RotateRecognizer.prototype.__proto__ || Object.getPrototypeOf(RotateRecognizer.prototype), 'attrTest', this).call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN); - } - }]); - return RotateRecognizer; -}(AttrRecognizer); - -RotateRecognizer.prototype.defaults = { - event: 'rotate', - threshold: 0, - pointers: 2 -}; - -/** - * @private - * Pinch - * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out). - * @constructor - * @extends AttrRecognizer - */ - -var PinchRecognizer = function (_AttrRecognizer) { - inherits(PinchRecognizer, _AttrRecognizer); - - function PinchRecognizer() { - classCallCheck(this, PinchRecognizer); - return possibleConstructorReturn(this, (PinchRecognizer.__proto__ || Object.getPrototypeOf(PinchRecognizer)).apply(this, arguments)); - } - - createClass(PinchRecognizer, [{ - key: 'getTouchAction', - value: function getTouchAction() { - return [TOUCH_ACTION_NONE]; - } - }, { - key: 'attrTest', - value: function attrTest(input) { - return get(PinchRecognizer.prototype.__proto__ || Object.getPrototypeOf(PinchRecognizer.prototype), 'attrTest', this).call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN); - } - }, { - key: 'emit', - value: function emit(input) { - if (input.scale !== 1) { - var inOut = input.scale < 1 ? 'in' : 'out'; - input.additionalEvent = this.options.event + inOut; - } - get(PinchRecognizer.prototype.__proto__ || Object.getPrototypeOf(PinchRecognizer.prototype), 'emit', this).call(this, input); - } - }]); - return PinchRecognizer; -}(AttrRecognizer); - -PinchRecognizer.prototype.defaults = { - event: 'pinch', - threshold: 0, - pointers: 2 -}; - -/** - * @private - * direction cons to string - * @param {constant} direction - * @returns {String} - */ -function directionStr(direction) { - if (direction === DIRECTION_DOWN) { - return 'down'; - } else if (direction === DIRECTION_UP) { - return 'up'; - } else if (direction === DIRECTION_LEFT) { - return 'left'; - } else if (direction === DIRECTION_RIGHT) { - return 'right'; - } - return ''; -} - -/** - * @private - * Pan - * Recognized when the pointer is down and moved in the allowed direction. - * @constructor - * @extends AttrRecognizer - */ - -var PanRecognizer = function (_AttrRecognizer) { - inherits(PanRecognizer, _AttrRecognizer); - - function PanRecognizer() { - classCallCheck(this, PanRecognizer); - - var _this = possibleConstructorReturn(this, (PanRecognizer.__proto__ || Object.getPrototypeOf(PanRecognizer)).apply(this, arguments)); - - _this.pX = null; - _this.pY = null; - return _this; - } - - createClass(PanRecognizer, [{ - key: 'getTouchAction', - value: function getTouchAction() { - var direction = this.options.direction; - - var actions = []; - if (direction & DIRECTION_HORIZONTAL) { - actions.push(TOUCH_ACTION_PAN_Y); - } - if (direction & DIRECTION_VERTICAL) { - actions.push(TOUCH_ACTION_PAN_X); - } - return actions; - } - }, { - key: 'directionTest', - value: function directionTest(input) { - var options = this.options; - - var hasMoved = true; - var distance = input.distance; - var direction = input.direction; - - var x = input.deltaX; - var y = input.deltaY; - - // lock to axis? - if (!(direction & options.direction)) { - if (options.direction & DIRECTION_HORIZONTAL) { - direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; - hasMoved = x !== this.pX; - distance = Math.abs(input.deltaX); - } else { - direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN; - hasMoved = y !== this.pY; - distance = Math.abs(input.deltaY); - } - } - input.direction = direction; - return hasMoved && distance > options.threshold && direction & options.direction; - } - }, { - key: 'attrTest', - value: function attrTest(input) { - return AttrRecognizer.prototype.attrTest.call(this, input) && ( // replace with a super call - this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input)); - } - }, { - key: 'emit', - value: function emit(input) { - - this.pX = input.deltaX; - this.pY = input.deltaY; - - var direction = directionStr(input.direction); - - if (direction) { - input.additionalEvent = this.options.event + direction; - } - get(PanRecognizer.prototype.__proto__ || Object.getPrototypeOf(PanRecognizer.prototype), 'emit', this).call(this, input); - } - }]); - return PanRecognizer; -}(AttrRecognizer); - -PanRecognizer.prototype.defaults = { - event: 'pan', - threshold: 10, - pointers: 1, - direction: DIRECTION_ALL -}; - -/** - * @private - * Swipe - * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction. - * @constructor - * @extends AttrRecognizer - */ - -var SwipeRecognizer = function (_AttrRecognizer) { - inherits(SwipeRecognizer, _AttrRecognizer); - - function SwipeRecognizer() { - classCallCheck(this, SwipeRecognizer); - return possibleConstructorReturn(this, (SwipeRecognizer.__proto__ || Object.getPrototypeOf(SwipeRecognizer)).apply(this, arguments)); - } - - createClass(SwipeRecognizer, [{ - key: 'getTouchAction', - value: function getTouchAction() { - return PanRecognizer.prototype.getTouchAction.call(this); - } - }, { - key: 'attrTest', - value: function attrTest(input) { - var direction = this.options.direction; - - var velocity = void 0; - - if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) { - velocity = input.overallVelocity; - } else if (direction & DIRECTION_HORIZONTAL) { - velocity = input.overallVelocityX; - } else if (direction & DIRECTION_VERTICAL) { - velocity = input.overallVelocityY; - } - - return get(SwipeRecognizer.prototype.__proto__ || Object.getPrototypeOf(SwipeRecognizer.prototype), 'attrTest', this).call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers === this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END; - } - }, { - key: 'emit', - value: function emit(input) { - var direction = directionStr(input.offsetDirection); - if (direction) { - this.manager.emit(this.options.event + direction, input); - } - - this.manager.emit(this.options.event, input); - } - }]); - return SwipeRecognizer; -}(AttrRecognizer); - -SwipeRecognizer.prototype.defaults = { - event: 'swipe', - threshold: 10, - velocity: 0.3, - direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL, - pointers: 1 -}; - -/** - * @private - * simple function bind - * @param {Function} fn - * @param {Object} context - * @returns {Function} - */ -function bindFn(fn, context) { - return function boundFn() { - return fn.apply(context, arguments); - }; -} - -/** - * @private - * set a timeout with a given scope - * @param {Function} fn - * @param {Number} timeout - * @param {Object} context - * @returns {number} - */ -function setTimeoutContext(fn, timeout, context) { - return setTimeout(bindFn(fn, context), timeout); -} - -/** - * @private - * calculate the absolute distance between two points - * @param {Object} p1 {x, y} - * @param {Object} p2 {x, y} - * @param {Array} [props] containing x and y keys - * @return {Number} distance - */ -function getDistance(p1, p2, props) { - if (!props) { - props = PROPS_XY; - } - var x = p2[props[0]] - p1[props[0]]; - var y = p2[props[1]] - p1[props[1]]; - - return Math.sqrt(x * x + y * y); -} - -/** - * @private - * A tap is recognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur - * between the given interval and position. The delay option can be used to recognize multi-taps without firing - * a single tap. - * - * The eventData from the emitted event contains the property `tapCount`, which contains the amount of - * multi-taps being recognized. - * @constructor - * @extends Recognizer - */ - -var TapRecognizer = function (_Recognizer) { - inherits(TapRecognizer, _Recognizer); - - function TapRecognizer() { - classCallCheck(this, TapRecognizer); - - // previous time and center, - // used for tap counting - var _this = possibleConstructorReturn(this, (TapRecognizer.__proto__ || Object.getPrototypeOf(TapRecognizer)).apply(this, arguments)); - - _this.pTime = false; - _this.pCenter = false; - - _this._timer = null; - _this._input = null; - _this.count = 0; - return _this; - } - - createClass(TapRecognizer, [{ - key: 'getTouchAction', - value: function getTouchAction() { - return [TOUCH_ACTION_MANIPULATION]; - } - }, { - key: 'process', - value: function process(input) { - var _this2 = this; - - var options = this.options; - - - var validPointers = input.pointers.length === options.pointers; - var validMovement = input.distance < options.threshold; - var validTouchTime = input.deltaTime < options.time; - - this.reset(); - - if (input.eventType & INPUT_START && this.count === 0) { - return this.failTimeout(); - } - - // we only allow little movement - // and we've reached an end event, so a tap is possible - if (validMovement && validTouchTime && validPointers) { - if (input.eventType !== INPUT_END) { - return this.failTimeout(); - } - - var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true; - var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold; - - this.pTime = input.timeStamp; - this.pCenter = input.center; - - if (!validMultiTap || !validInterval) { - this.count = 1; - } else { - this.count += 1; - } - - this._input = input; - - // if tap count matches we have recognized it, - // else it has began recognizing... - var tapCount = this.count % options.taps; - if (tapCount === 0) { - // no failing requirements, immediately trigger the tap event - // or wait as long as the multitap interval to trigger - if (!this.hasRequireFailures()) { - return STATE_RECOGNIZED; - } else { - this._timer = setTimeoutContext(function () { - _this2.state = STATE_RECOGNIZED; - _this2.tryEmit(); - }, options.interval, this); - return STATE_BEGAN; - } - } - } - return STATE_FAILED; - } - }, { - key: 'failTimeout', - value: function failTimeout() { - var _this3 = this; - - this._timer = setTimeoutContext(function () { - _this3.state = STATE_FAILED; - }, this.options.interval, this); - return STATE_FAILED; - } - }, { - key: 'reset', - value: function reset() { - clearTimeout(this._timer); - } - }, { - key: 'emit', - value: function emit() { - if (this.state === STATE_RECOGNIZED) { - this._input.tapCount = this.count; - this.manager.emit(this.options.event, this._input); - } - } - }]); - return TapRecognizer; -}(Recognizer); - -TapRecognizer.prototype.defaults = { - event: 'tap', - pointers: 1, - taps: 1, - interval: 300, // max time between the multi-tap taps - time: 250, // max time of the pointer to be down (like finger on the screen) - threshold: 9, // a minimal movement is ok, but keep it low - posThreshold: 10 // a multi-tap can be a bit off the initial position -}; - -/** - * @private - * Press - * Recognized when the pointer is down for x ms without any movement. - * @constructor - * @extends Recognizer - */ - -var PressRecognizer = function (_Recognizer) { - inherits(PressRecognizer, _Recognizer); - - function PressRecognizer() { - classCallCheck(this, PressRecognizer); - - var _this = possibleConstructorReturn(this, (PressRecognizer.__proto__ || Object.getPrototypeOf(PressRecognizer)).apply(this, arguments)); - - _this._timer = null; - _this._input = null; - return _this; - } - - createClass(PressRecognizer, [{ - key: 'getTouchAction', - value: function getTouchAction() { - return [TOUCH_ACTION_AUTO]; - } - }, { - key: 'process', - value: function process(input) { - var _this2 = this; - - var options = this.options; - - var validPointers = input.pointers.length === options.pointers; - var validMovement = input.distance < options.threshold; - var validTime = input.deltaTime > options.time; - - this._input = input; - - // we only allow little movement - // and we've reached an end event, so a tap is possible - if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) { - this.reset(); - } else if (input.eventType & INPUT_START) { - this.reset(); - this._timer = setTimeoutContext(function () { - _this2.state = STATE_RECOGNIZED; - _this2.tryEmit(); - }, options.time, this); - } else if (input.eventType & INPUT_END) { - return STATE_RECOGNIZED; - } - return STATE_FAILED; - } - }, { - key: 'reset', - value: function reset() { - clearTimeout(this._timer); - } - }, { - key: 'emit', - value: function emit(input) { - if (this.state !== STATE_RECOGNIZED) { - return; - } - - if (input && input.eventType & INPUT_END) { - this.manager.emit(this.options.event + 'up', input); - } else { - this._input.timeStamp = now(); - this.manager.emit(this.options.event, this._input); - } - } - }]); - return PressRecognizer; -}(Recognizer); - -PressRecognizer.prototype.defaults = { - event: 'press', - pointers: 1, - time: 251, // minimal time of the pointer to be pressed - threshold: 9 // a minimal movement is ok, but keep it low -}; - -/** - * @private - * small indexOf wrapper - * @param {String} str - * @param {String} find - * @returns {Boolean} found - */ -function inStr(str, find) { - return str.indexOf(find) > -1; -} - -/** - * @private - * when the touchActions are collected they are not a valid value, so we need to clean things up. * - * @param {String} actions - * @returns {*} - */ -function cleanTouchActions(actions) { - // none - if (inStr(actions, TOUCH_ACTION_NONE)) { - return TOUCH_ACTION_NONE; - } - - var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); - var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); - - // if both pan-x and pan-y are set (different recognizers - // for different directions, e.g. horizontal pan but vertical swipe?) - // we need none (as otherwise with pan-x pan-y combined none of these - // recognizers will work, since the browser would handle all panning - if (hasPanX && hasPanY) { - return TOUCH_ACTION_NONE; - } - - // pan-x OR pan-y - if (hasPanX || hasPanY) { - return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y; - } - - // manipulation - if (inStr(actions, TOUCH_ACTION_MANIPULATION)) { - return TOUCH_ACTION_MANIPULATION; - } - - return TOUCH_ACTION_AUTO; -} - -/** - * @private - * Touch Action - * sets the touchAction property or uses the js alternative - * @param {Manager} manager - * @param {String} value - * @constructor - */ - -var TouchAction = function () { - function TouchAction(manager, value) { - classCallCheck(this, TouchAction); - - this.manager = manager; - this.set(value); - } - - /** - * @private - * set the touchAction value on the element or enable the polyfill - * @param {String} value - */ - - - createClass(TouchAction, [{ - key: 'set', - value: function set(value) { - // find out the touch-action by the event handlers - if (value === TOUCH_ACTION_COMPUTE) { - value = this.compute(); - } - - if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) { - this.manager.element.style[PREFIXED_TOUCH_ACTION] = value; - } - this.actions = value.toLowerCase().trim(); - } - - /** - * @private - * just re-set the touchAction value - */ - - }, { - key: 'update', - value: function update() { - this.set(this.manager.options.touchAction); - } - - /** - * @private - * compute the value for the touchAction property based on the recognizer's settings - * @returns {String} value - */ - - }, { - key: 'compute', - value: function compute() { - var actions = []; - each(this.manager.recognizers, function (recognizer) { - if (boolOrFn(recognizer.options.enable, [recognizer])) { - actions = actions.concat(recognizer.getTouchAction()); - } - }); - return cleanTouchActions(actions.join(' ')); - } - - /** - * @private - * this method is called on each input cycle and provides the preventing of the browser behavior - * @param {Object} input - */ - - }, { - key: 'preventDefaults', - value: function preventDefaults(input) { - var srcEvent = input.srcEvent; - - var direction = input.offsetDirection; - - // if the touch action did prevented once this session - if (this.manager.session.prevented) { - srcEvent.preventDefault(); - return; - } - - var actions = this.actions; - - var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE]; - var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y]; - var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X]; - - if (hasNone) { - // do not prevent defaults if this is a tap gesture - var isTapPointer = input.pointers.length === 1; - var isTapMovement = input.distance < 2; - var isTapTouchTime = input.deltaTime < 250; - - if (isTapPointer && isTapMovement && isTapTouchTime) { - return; - } - } - - if (hasPanX && hasPanY) { - // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent - return; - } - - if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) { - return this.preventSrc(srcEvent); - } - } - - /** - * @private - * call preventDefault to prevent the browser's default behavior (scrolling in most cases) - * @param {Object} srcEvent - */ - - }, { - key: 'preventSrc', - value: function preventSrc(srcEvent) { - this.manager.session.prevented = true; - srcEvent.preventDefault(); - } - }]); - return TouchAction; -}(); - -/** - * @private - * find if a node is in the given parent - * @method hasParent - * @param {HTMLElement} node - * @param {HTMLElement} parent - * @return {Boolean} found - */ -function hasParent(node, parent) { - while (node) { - if (node === parent) { - return true; - } - node = node.parentNode; - } - return false; -} - -/** - * @private - * get the center of all the pointers - * @param {Array} pointers - * @return {Object} center contains `x` and `y` properties - */ -function getCenter(pointers) { - var pointersLength = pointers.length; - - // no need to loop when only one touch - if (pointersLength === 1) { - return { - x: round(pointers[0].clientX), - y: round(pointers[0].clientY) - }; - } - - var x = 0; - var y = 0; - var i = 0; - while (i < pointersLength) { - x += pointers[i].clientX; - y += pointers[i].clientY; - i++; - } - - return { - x: round(x / pointersLength), - y: round(y / pointersLength) - }; -} - -/** - * @private - * create a simple clone from the input used for storage of firstInput and firstMultiple - * @param {Object} input - * @returns {Object} clonedInputData - */ -function simpleCloneInputData(input) { - // make a simple copy of the pointers because we will get a reference if we don't - // we only need clientXY for the calculations - var pointers = []; - var i = 0; - while (i < input.pointers.length) { - pointers[i] = { - clientX: round(input.pointers[i].clientX), - clientY: round(input.pointers[i].clientY) - }; - i++; - } - - return { - timeStamp: now(), - pointers: pointers, - center: getCenter(pointers), - deltaX: input.deltaX, - deltaY: input.deltaY - }; -} - -/** - * @private - * calculate the angle between two coordinates - * @param {Object} p1 - * @param {Object} p2 - * @param {Array} [props] containing x and y keys - * @return {Number} angle - */ -function getAngle(p1, p2, props) { - if (!props) { - props = PROPS_XY; - } - var x = p2[props[0]] - p1[props[0]]; - var y = p2[props[1]] - p1[props[1]]; - return Math.atan2(y, x) * 180 / Math.PI; -} - -/** - * @private - * get the direction between two points - * @param {Number} x - * @param {Number} y - * @return {Number} direction - */ -function getDirection(x, y) { - if (x === y) { - return DIRECTION_NONE; - } - - if (abs(x) >= abs(y)) { - return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; - } - return y < 0 ? DIRECTION_UP : DIRECTION_DOWN; -} - -function computeDeltaXY(session, input) { - var center = input.center; - // let { offsetDelta:offset = {}, prevDelta = {}, prevInput = {} } = session; - // jscs throwing error on defalut destructured values and without defaults tests fail - - var offset = session.offsetDelta || {}; - var prevDelta = session.prevDelta || {}; - var prevInput = session.prevInput || {}; - - if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) { - prevDelta = session.prevDelta = { - x: prevInput.deltaX || 0, - y: prevInput.deltaY || 0 - }; - - offset = session.offsetDelta = { - x: center.x, - y: center.y - }; - } - - input.deltaX = prevDelta.x + (center.x - offset.x); - input.deltaY = prevDelta.y + (center.y - offset.y); -} - -/** - * @private - * calculate the velocity between two points. unit is in px per ms. - * @param {Number} deltaTime - * @param {Number} x - * @param {Number} y - * @return {Object} velocity `x` and `y` - */ -function getVelocity(deltaTime, x, y) { - return { - x: x / deltaTime || 0, - y: y / deltaTime || 0 - }; -} - -/** - * @private - * calculate the scale factor between two pointersets - * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out - * @param {Array} start array of pointers - * @param {Array} end array of pointers - * @return {Number} scale - */ -function getScale(start, end) { - return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY); -} - -/** - * @private - * calculate the rotation degrees between two pointersets - * @param {Array} start array of pointers - * @param {Array} end array of pointers - * @return {Number} rotation - */ -function getRotation(start, end) { - return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY); -} - -/** - * @private - * velocity is calculated every x ms - * @param {Object} session - * @param {Object} input - */ -function computeIntervalInputData(session, input) { - var last = session.lastInterval || input; - var deltaTime = input.timeStamp - last.timeStamp; - var velocity = void 0; - var velocityX = void 0; - var velocityY = void 0; - var direction = void 0; - - if (input.eventType !== INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) { - var deltaX = input.deltaX - last.deltaX; - var deltaY = input.deltaY - last.deltaY; - - var v = getVelocity(deltaTime, deltaX, deltaY); - velocityX = v.x; - velocityY = v.y; - velocity = abs(v.x) > abs(v.y) ? v.x : v.y; - direction = getDirection(deltaX, deltaY); - - session.lastInterval = input; - } else { - // use latest velocity info if it doesn't overtake a minimum period - velocity = last.velocity; - velocityX = last.velocityX; - velocityY = last.velocityY; - direction = last.direction; - } - - input.velocity = velocity; - input.velocityX = velocityX; - input.velocityY = velocityY; - input.direction = direction; -} - -/** -* @private - * extend the data with some usable properties like scale, rotate, velocity etc - * @param {Object} manager - * @param {Object} input - */ -function computeInputData(manager, input) { - var session = manager.session; - var pointers = input.pointers; - var pointersLength = pointers.length; - - // store the first input to calculate the distance and direction - - if (!session.firstInput) { - session.firstInput = simpleCloneInputData(input); - } - - // to compute scale and rotation we need to store the multiple touches - if (pointersLength > 1 && !session.firstMultiple) { - session.firstMultiple = simpleCloneInputData(input); - } else if (pointersLength === 1) { - session.firstMultiple = false; - } - - var firstInput = session.firstInput; - var firstMultiple = session.firstMultiple; - - var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center; - - var center = input.center = getCenter(pointers); - input.timeStamp = now(); - input.deltaTime = input.timeStamp - firstInput.timeStamp; - - input.angle = getAngle(offsetCenter, center); - input.distance = getDistance(offsetCenter, center); - - computeDeltaXY(session, input); - input.offsetDirection = getDirection(input.deltaX, input.deltaY); - - var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY); - input.overallVelocityX = overallVelocity.x; - input.overallVelocityY = overallVelocity.y; - input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y; - - input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1; - input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0; - - input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers; - - computeIntervalInputData(session, input); - - // find the correct target - var target = manager.element; - if (hasParent(input.srcEvent.target, target)) { - target = input.srcEvent.target; - } - input.target = target; -} - -/** - * @private - * handle input events - * @param {Manager} manager - * @param {String} eventType - * @param {Object} input - */ -function inputHandler(manager, eventType, input) { - var pointersLen = input.pointers.length; - var changedPointersLen = input.changedPointers.length; - var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0; - var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0; - - input.isFirst = !!isFirst; - input.isFinal = !!isFinal; - - if (isFirst) { - manager.session = {}; - } - - // source event is the normalized value of the domEvents - // like 'touchstart, mouseup, pointerdown' - input.eventType = eventType; - - // compute scale, rotation etc - computeInputData(manager, input); - - // emit secret event - manager.emit('hammer.input', input); - - manager.recognize(input); - manager.session.prevInput = input; -} - -/** - * @private - * split string on whitespace - * @param {String} str - * @returns {Array} words - */ - -function splitStr(str) { - return str.trim().split(/\s+/g); -} - -/** - * @private - * addEventListener with multiple events at once - * @param {EventTarget} target - * @param {String} types - * @param {Function} handler - */ -function addEventListeners(target, types, handler) { - each(splitStr(types), function (type) { - target.addEventListener(type, handler, false); - }); -} - -/** - * @private - * removeEventListener with multiple events at once - * @param {EventTarget} target - * @param {String} types - * @param {Function} handler - */ -function removeEventListeners(target, types, handler) { - each(splitStr(types), function (type) { - target.removeEventListener(type, handler, false); - }); -} - -/** - * @private - * get the window object of an element - * @param {HTMLElement} element - * @returns {DocumentView|Window} - */ -function getWindowForElement(element) { - var doc = element.ownerDocument || element; - return doc.defaultView || doc.parentWindow || window; -} - -/** - * @private - * create new input type manager - * @param {Manager} manager - * @param {Function} callback - * @returns {Input} - * @constructor - */ - -var Input = function () { - function Input(manager, callback) { - classCallCheck(this, Input); - - var self = this; - this.manager = manager; - this.callback = callback; - this.element = manager.element; - this.target = manager.options.inputTarget; - - // smaller wrapper around the handler, for the scope and the enabled state of the manager, - // so when disabled the input events are completely bypassed. - this.domHandler = function (ev) { - if (boolOrFn(manager.options.enable, [manager])) { - self.handler(ev); - } - }; - - this.init(); - } - /** - * @private - * should handle the inputEvent data and trigger the callback - * @virtual - */ - - - createClass(Input, [{ - key: 'handler', - value: function handler() {} - - /** - * @private - * bind the events - */ - - }, { - key: 'init', - value: function init() { - this.evEl && addEventListeners(this.element, this.evEl, this.domHandler); - this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler); - this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); - } - - /** - * @private - * unbind the events - */ - - }, { - key: 'destroy', - value: function destroy() { - this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler); - this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler); - this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); - } - }]); - return Input; -}(); - -var POINTER_INPUT_MAP = { - pointerdown: INPUT_START, - pointermove: INPUT_MOVE, - pointerup: INPUT_END, - pointercancel: INPUT_CANCEL, - pointerout: INPUT_CANCEL -}; - -// in IE10 the pointer types is defined as an enum -var IE10_POINTER_TYPE_ENUM = { - 2: INPUT_TYPE_TOUCH, - 3: INPUT_TYPE_PEN, - 4: INPUT_TYPE_MOUSE, - 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816 -}; - -var POINTER_ELEMENT_EVENTS = 'pointerdown'; -var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; - -// IE10 has prefixed support, and case-sensitive -if (window.MSPointerEvent && !window.PointerEvent) { - POINTER_ELEMENT_EVENTS = 'MSPointerDown'; - POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel'; -} - -/** - * @private - * Pointer events input - * @constructor - * @extends Input - */ - -var PointerEventInput = function (_Input) { - inherits(PointerEventInput, _Input); - - function PointerEventInput() { - classCallCheck(this, PointerEventInput); - - var _this = possibleConstructorReturn(this, (PointerEventInput.__proto__ || Object.getPrototypeOf(PointerEventInput)).apply(this, arguments)); - - _this.evEl = POINTER_ELEMENT_EVENTS; - _this.evWin = POINTER_WINDOW_EVENTS; - - _this.store = _this.manager.session.pointerEvents = []; - return _this; - } - - /** - * @private - * handle mouse events - * @param {Object} ev - */ - - - createClass(PointerEventInput, [{ - key: 'handler', - value: function handler(ev) { - var store = this.store; - - var removePointer = false; - - var eventTypeNormalized = ev.type.toLowerCase().replace('ms', ''); - var eventType = POINTER_INPUT_MAP[eventTypeNormalized]; - var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType; - - var isTouch = pointerType === INPUT_TYPE_TOUCH; - - // get index of the event in the store - var storeIndex = inArray(store, ev.pointerId, 'pointerId'); - - // start and mouse must be down - if (eventType & INPUT_START && (ev.button === 0 || isTouch)) { - if (storeIndex < 0) { - store.push(ev); - storeIndex = store.length - 1; - } - } else if (eventType & (INPUT_END | INPUT_CANCEL)) { - removePointer = true; - } - - // it not found, so the pointer hasn't been down (so it's probably a hover) - if (storeIndex < 0) { - return; - } - - // update the event in the store - store[storeIndex] = ev; - - this.callback(this.manager, eventType, { - pointers: store, - changedPointers: [ev], - pointerType: pointerType, - srcEvent: ev - }); - - if (removePointer) { - // remove from the store - store.splice(storeIndex, 1); - } - } - }]); - return PointerEventInput; -}(Input); - -/** - * @private - * convert array-like objects to real arrays - * @param {Object} obj - * @returns {Array} - */ -function toArray$1(obj) { - return Array.prototype.slice.call(obj, 0); -} - -/** - * @private - * unique array with objects based on a key (like 'id') or just by the array's value - * @param {Array} src [{id:1},{id:2},{id:1}] - * @param {String} [key] - * @param {Boolean} [sort=False] - * @returns {Array} [{id:1},{id:2}] - */ -function uniqueArray(src, key, sort) { - var results = []; - var values = []; - var i = 0; - - while (i < src.length) { - var val = key ? src[i][key] : src[i]; - if (inArray(values, val) < 0) { - results.push(src[i]); - } - values[i] = val; - i++; - } - - if (sort) { - if (!key) { - results = results.sort(); - } else { - results = results.sort(function (a, b) { - return a[key] > b[key]; - }); - } - } - - return results; -} - -var TOUCH_INPUT_MAP = { - touchstart: INPUT_START, - touchmove: INPUT_MOVE, - touchend: INPUT_END, - touchcancel: INPUT_CANCEL -}; - -var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel'; - -/** - * @private - * Multi-user touch events input - * @constructor - * @extends Input - */ - -var TouchInput = function (_Input) { - inherits(TouchInput, _Input); - - function TouchInput() { - classCallCheck(this, TouchInput); - - TouchInput.prototype.evTarget = TOUCH_TARGET_EVENTS; - TouchInput.prototype.targetIds = {}; - - var _this = possibleConstructorReturn(this, (TouchInput.__proto__ || Object.getPrototypeOf(TouchInput)).apply(this, arguments)); - - _this.evTarget = TOUCH_TARGET_EVENTS; - _this.targetIds = {}; - return _this; - } - - createClass(TouchInput, [{ - key: 'handler', - value: function handler(ev) { - var type = TOUCH_INPUT_MAP[ev.type]; - var touches = getTouches.call(this, ev, type); - if (!touches) { - return; - } - - this.callback(this.manager, type, { - pointers: touches[0], - changedPointers: touches[1], - pointerType: INPUT_TYPE_TOUCH, - srcEvent: ev - }); - } - }]); - return TouchInput; -}(Input); - -function getTouches(ev, type) { - var allTouches = toArray$1(ev.touches); - var targetIds = this.targetIds; - - // when there is only one touch, the process can be simplified - - if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) { - targetIds[allTouches[0].identifier] = true; - return [allTouches, allTouches]; - } - - var i = void 0; - var targetTouches = void 0; - var changedTouches = toArray$1(ev.changedTouches); - var changedTargetTouches = []; - var target = this.target; - - // get target touches from touches - - targetTouches = allTouches.filter(function (touch) { - return hasParent(touch.target, target); - }); - - // collect touches - if (type === INPUT_START) { - i = 0; - while (i < targetTouches.length) { - targetIds[targetTouches[i].identifier] = true; - i++; - } - } - - // filter changed touches to only contain touches that exist in the collected target ids - i = 0; - while (i < changedTouches.length) { - if (targetIds[changedTouches[i].identifier]) { - changedTargetTouches.push(changedTouches[i]); - } - - // cleanup removed touches - if (type & (INPUT_END | INPUT_CANCEL)) { - delete targetIds[changedTouches[i].identifier]; - } - i++; - } - - if (!changedTargetTouches.length) { - return; - } - - return [ - // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel' - uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches]; -} - -var MOUSE_INPUT_MAP = { - mousedown: INPUT_START, - mousemove: INPUT_MOVE, - mouseup: INPUT_END -}; - -var MOUSE_ELEMENT_EVENTS = 'mousedown'; -var MOUSE_WINDOW_EVENTS = 'mousemove mouseup'; - -/** - * @private - * Mouse events input - * @constructor - * @extends Input - */ - -var MouseInput = function (_Input) { - inherits(MouseInput, _Input); - - function MouseInput() { - classCallCheck(this, MouseInput); - - var _this = possibleConstructorReturn(this, (MouseInput.__proto__ || Object.getPrototypeOf(MouseInput)).apply(this, arguments)); - - _this.evEl = MOUSE_ELEMENT_EVENTS; - _this.evWin = MOUSE_WINDOW_EVENTS; - - _this.pressed = false; // mousedown state - return _this; - } - - /** - * @private - * handle mouse events - * @param {Object} ev - */ - - - createClass(MouseInput, [{ - key: 'handler', - value: function handler(ev) { - var eventType = MOUSE_INPUT_MAP[ev.type]; - - // on start we want to have the left mouse button down - if (eventType & INPUT_START && ev.button === 0) { - this.pressed = true; - } - - if (eventType & INPUT_MOVE && ev.which !== 1) { - eventType = INPUT_END; - } - - // mouse must be down - if (!this.pressed) { - return; - } - - if (eventType & INPUT_END) { - this.pressed = false; - } - - this.callback(this.manager, eventType, { - pointers: [ev], - changedPointers: [ev], - pointerType: INPUT_TYPE_MOUSE, - srcEvent: ev - }); - } - }]); - return MouseInput; -}(Input); - -/** - * @private - * Combined touch and mouse input - * - * Touch has a higher priority then mouse, and while touching no mouse events are allowed. - * This because touch devices also emit mouse events while doing a touch. - * - * @constructor - * @extends Input - */ - -var DEDUP_TIMEOUT = 2500; -var DEDUP_DISTANCE = 25; - -var TouchMouseInput = function (_Input) { - inherits(TouchMouseInput, _Input); - - function TouchMouseInput() { - classCallCheck(this, TouchMouseInput); - - var _this = possibleConstructorReturn(this, (TouchMouseInput.__proto__ || Object.getPrototypeOf(TouchMouseInput)).apply(this, arguments)); - - var handler = bindFn(_this.handler, _this); - _this.touch = new TouchInput(_this.manager, handler); - _this.mouse = new MouseInput(_this.manager, handler); - - _this.primaryTouch = null; - _this.lastTouches = []; - return _this; - } - - /** - * @private - * handle mouse and touch events - * @param {Hammer} manager - * @param {String} inputEvent - * @param {Object} inputData - */ - - - createClass(TouchMouseInput, [{ - key: 'handler', - value: function handler(manager, inputEvent, inputData) { - var isTouch = inputData.pointerType === INPUT_TYPE_TOUCH; - var isMouse = inputData.pointerType === INPUT_TYPE_MOUSE; - - if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) { - return; - } - - // when we're in a touch event, record touches to de-dupe synthetic mouse event - if (isTouch) { - recordTouches.call(this, inputEvent, inputData); - } else if (isMouse && isSyntheticEvent.call(this, inputData)) { - return; - } - - this.callback(manager, inputEvent, inputData); - } - - /** - * @private - * remove the event listeners - */ - - }, { - key: 'destroy', - value: function destroy() { - this.touch.destroy(); - this.mouse.destroy(); - } - }]); - return TouchMouseInput; -}(Input); - -function recordTouches(eventType, eventData) { - if (eventType & INPUT_START) { - this.primaryTouch = eventData.changedPointers[0].identifier; - setLastTouch.call(this, eventData); - } else if (eventType & (INPUT_END | INPUT_CANCEL)) { - setLastTouch.call(this, eventData); - } -} - -function setLastTouch(eventData) { - var _this2 = this; - - var _eventData$changedPoi = slicedToArray(eventData.changedPointers, 1); - - var touch = _eventData$changedPoi[0]; - - if (touch.identifier === this.primaryTouch) { - (function () { - var lastTouch = { x: touch.clientX, y: touch.clientY }; - _this2.lastTouches.push(lastTouch); - var lts = _this2.lastTouches; - var removeLastTouch = function removeLastTouch() { - var i = lts.indexOf(lastTouch); - if (i > -1) { - lts.splice(i, 1); - } - }; - setTimeout(removeLastTouch, DEDUP_TIMEOUT); - })(); - } -} - -function isSyntheticEvent(eventData) { - var x = eventData.srcEvent.clientX; - var y = eventData.srcEvent.clientY; - for (var i = 0; i < this.lastTouches.length; i++) { - var t = this.lastTouches[i]; - var dx = Math.abs(x - t.x); - var dy = Math.abs(y - t.y); - if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) { - return true; - } - } - return false; -} - -/** - * @private - * create new input type manager - * called by the Manager constructor - * @param {Hammer} manager - * @returns {Input} - */ -function createInputInstance(manager) { - var Type = void 0; - // let inputClass = manager.options.inputClass; - var inputClass = manager.options.inputClass; - - if (inputClass) { - Type = inputClass; - } else if (SUPPORT_POINTER_EVENTS) { - Type = PointerEventInput; - } else if (SUPPORT_ONLY_TOUCH) { - Type = TouchInput; - } else if (!SUPPORT_TOUCH) { - Type = MouseInput; - } else { - Type = TouchMouseInput; - } - return new Type(manager, inputHandler); -} - -var STOP = 1; -var FORCED_STOP = 2; - -/** -* @private - * Manager - * @param {HTMLElement} element - * @param {Object} [options] - * @constructor - */ - -var Manager = function () { - function Manager(element, options) { - var _this = this; - - classCallCheck(this, Manager); - - this.options = assign$1({}, Hammer.defaults, options || {}); - - this.options.inputTarget = this.options.inputTarget || element; - - this.handlers = {}; - this.session = {}; - this.recognizers = []; - this.oldCssProps = {}; - - this.element = element; - this.input = createInputInstance(this); - this.touchAction = new TouchAction(this, this.options.touchAction); - - toggleCssProps(this, true); - - each(this.options.recognizers, function (item) { - var recognizer = _this.add(new item[0](item[1])); - item[2] && recognizer.recognizeWith(item[2]); - item[3] && recognizer.requireFailure(item[3]); - }, this); - } - - /** - * @private - * set options - * @param {Object} options - * @returns {Manager} - */ - - - createClass(Manager, [{ - key: 'set', - value: function set(options) { - assign$1(this.options, options); - - // Options that need a little more setup - if (options.touchAction) { - this.touchAction.update(); - } - if (options.inputTarget) { - // Clean up existing event listeners and reinitialize - this.input.destroy(); - this.input.target = options.inputTarget; - this.input.init(); - } - return this; - } - - /** - * @private - * stop recognizing for this session. - * This session will be discarded, when a new [input]start event is fired. - * When forced, the recognizer cycle is stopped immediately. - * @param {Boolean} [force] - */ - - }, { - key: 'stop', - value: function stop(force) { - this.session.stopped = force ? FORCED_STOP : STOP; - } - - /** - * @private - * run the recognizers! - * called by the inputHandler function on every movement of the pointers (touches) - * it walks through all the recognizers and tries to detect the gesture that is being made - * @param {Object} inputData - */ - - }, { - key: 'recognize', - value: function recognize(inputData) { - var session = this.session; - - if (session.stopped) { - return; - } - - // run the touch-action polyfill - this.touchAction.preventDefaults(inputData); - - var recognizer = void 0; - var recognizers = this.recognizers; - - // this holds the recognizer that is being recognized. - // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED - // if no recognizer is detecting a thing, it is set to `null` - - var curRecognizer = session.curRecognizer; - - // reset when the last recognizer is recognized - // or when we're in a new session - - if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) { - curRecognizer = session.curRecognizer = null; - } - - var i = 0; - while (i < recognizers.length) { - recognizer = recognizers[i]; - - // find out if we are allowed try to recognize the input for this one. - // 1. allow if the session is NOT forced stopped (see the .stop() method) - // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one - // that is being recognized. - // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer. - // this can be setup with the `recognizeWith()` method on the recognizer. - if (session.stopped !== FORCED_STOP && ( // 1 - !curRecognizer || recognizer === curRecognizer || // 2 - recognizer.canRecognizeWith(curRecognizer))) { - // 3 - recognizer.recognize(inputData); - } else { - recognizer.reset(); - } - - // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the - // current active recognizer. but only if we don't already have an active recognizer - if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) { - curRecognizer = session.curRecognizer = recognizer; - } - i++; - } - } - - /** - * @private - * get a recognizer by its event name. - * @param {Recognizer|String} recognizer - * @returns {Recognizer|Null} - */ - - }, { - key: 'get', - value: function get(recognizer) { - if (recognizer instanceof Recognizer) { - return recognizer; - } - - var recognizers = this.recognizers; - - for (var i = 0; i < recognizers.length; i++) { - if (recognizers[i].options.event === recognizer) { - return recognizers[i]; - } - } - return null; - } - - /** - * @private add a recognizer to the manager - * existing recognizers with the same event name will be removed - * @param {Recognizer} recognizer - * @returns {Recognizer|Manager} - */ - - }, { - key: 'add', - value: function add(recognizer) { - if (invokeArrayArg(recognizer, 'add', this)) { - return this; - } - - // remove existing - var existing = this.get(recognizer.options.event); - if (existing) { - this.remove(existing); - } - - this.recognizers.push(recognizer); - recognizer.manager = this; - - this.touchAction.update(); - return recognizer; - } - - /** - * @private - * remove a recognizer by name or instance - * @param {Recognizer|String} recognizer - * @returns {Manager} - */ - - }, { - key: 'remove', - value: function remove(recognizer) { - if (invokeArrayArg(recognizer, 'remove', this)) { - return this; - } - - recognizer = this.get(recognizer); - - // let's make sure this recognizer exists - if (recognizer) { - var recognizers = this.recognizers; - - var index = inArray(recognizers, recognizer); - - if (index !== -1) { - recognizers.splice(index, 1); - this.touchAction.update(); - } - } - - return this; - } - - /** - * @private - * bind event - * @param {String} events - * @param {Function} handler - * @returns {EventEmitter} this - */ - - }, { - key: 'on', - value: function on(events, handler) { - if (events === undefined) { - return; - } - if (handler === undefined) { - return; - } - - var handlers = this.handlers; - - each(splitStr(events), function (event) { - handlers[event] = handlers[event] || []; - handlers[event].push(handler); - }); - return this; - } - - /** - * @private unbind event, leave emit blank to remove all handlers - * @param {String} events - * @param {Function} [handler] - * @returns {EventEmitter} this - */ - - }, { - key: 'off', - value: function off(events, handler) { - if (events === undefined) { - return; - } - - var handlers = this.handlers; - - each(splitStr(events), function (event) { - if (!handler) { - delete handlers[event]; - } else { - handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1); - } - }); - return this; - } - - /** - * @private emit event to the listeners - * @param {String} event - * @param {Object} data - */ - - }, { - key: 'emit', - value: function emit(event, data) { - // we also want to trigger dom events - if (this.options.domEvents) { - triggerDomEvent(event, data); - } - - // no handlers, so skip it all - var handlers = this.handlers[event] && this.handlers[event].slice(); - if (!handlers || !handlers.length) { - return; - } - - data.type = event; - data.preventDefault = function () { - data.srcEvent.preventDefault(); - }; - - var i = 0; - while (i < handlers.length) { - handlers[i](data); - i++; - } - } - - /** - * @private - * destroy the manager and unbinds all events - * it doesn't unbind dom events, that is the user own responsibility - */ - - }, { - key: 'destroy', - value: function destroy() { - this.element && toggleCssProps(this, false); - - this.handlers = {}; - this.session = {}; - this.input.destroy(); - this.element = null; - } - }]); - return Manager; -}(); - -function toggleCssProps(manager, add) { - var element = manager.element; - - if (!element.style) { - return; - } - var prop = void 0; - each(manager.options.cssProps, function (value, name) { - prop = prefixed(element.style, name); - if (add) { - manager.oldCssProps[prop] = element.style[prop]; - element.style[prop] = value; - } else { - element.style[prop] = manager.oldCssProps[prop] || ''; - } - }); - if (!add) { - manager.oldCssProps = {}; - } -} - -/** - * @private - * trigger dom event - * @param {String} event - * @param {Object} data - */ -function triggerDomEvent(event, data) { - var gestureEvent = document.createEvent('Event'); - gestureEvent.initEvent(event, true, true); - gestureEvent.gesture = data; - data.target.dispatchEvent(gestureEvent); -} - -/** - * @private - * Simple way to create a manager with a default set of recognizers. - * @param {HTMLElement} element - * @param {Object} [options] - * @constructor - */ - -var Hammer = function Hammer(element, options) { - classCallCheck(this, Hammer); - - options = options || {}; - options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset); - return new Manager(element, options); -}; - -Hammer.VERSION = '2.0.8'; - -/** - * @private - * default settings - * @namespace - */ -Hammer.defaults = { - /** - * @private - * set if DOM events are being triggered. - * But this is slower and unused by simple implementations, so disabled by default. - * @type {Boolean} - * @default false - */ - domEvents: false, - - /** - * @private - * The value for the touchAction property/fallback. - * When set to `compute` it will magically set the correct value based on the added recognizers. - * @type {String} - * @default compute - */ - touchAction: TOUCH_ACTION_COMPUTE, - - /** - * @private - * @type {Boolean} - * @default true - */ - enable: true, - - /** - * @private - * EXPERIMENTAL FEATURE -- can be removed/changed - * Change the parent input target element. - * If Null, then it is being set the to main element. - * @type {Null|EventTarget} - * @default null - */ - inputTarget: null, - - /** - * @private - * force an input class - * @type {Null|Function} - * @default null - */ - inputClass: null, - - /** - * @private - * Default recognizer setup when calling `Hammer()` - * When creating a new Manager these will be skipped. - * @type {Array} - */ - preset: [ - // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...] - [RotateRecognizer, { enable: false }], [PinchRecognizer, { enable: false }, ['rotate']], [SwipeRecognizer, { direction: DIRECTION_HORIZONTAL }], [PanRecognizer, { direction: DIRECTION_HORIZONTAL }, ['swipe']], [TapRecognizer], [TapRecognizer, { event: 'doubletap', taps: 2 }, ['tap']], [PressRecognizer]], - - /** - * @private - * Some CSS properties can be used to improve the working of Hammer. - * Add them to this method and they will be set when creating a new Manager. - * @namespace - */ - cssProps: { - /** - * @private - * Disables text selection to improve the dragging gesture. Mainly for desktop browsers. - * @type {String} - * @default 'none' - */ - userSelect: 'none', - - /** - * @private - * Disable the Windows Phone grippers when pressing an element. - * @type {String} - * @default 'none' - */ - touchSelect: 'none', - - /** - * @private - * Disables the default callout shown when you touch and hold a touch target. - * On iOS, when you touch and hold a touch target such as a link, Safari displays - * a callout containing information about the link. This property allows you to disable that callout. - * @type {String} - * @default 'none' - */ - touchCallout: 'none', - - /** - * @private - * Specifies whether zooming is enabled. Used by IE10> - * @type {String} - * @default 'none' - */ - contentZooming: 'none', - - /** - * @private - * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers. - * @type {String} - * @default 'none' - */ - userDrag: 'none', - - /** - * @private - * Overrides the highlight color shown when the user taps a link or a JavaScript - * clickable element in iOS. This property obeys the alpha value, if specified. - * @type {String} - * @default 'rgba(0,0,0,0)' - */ - tapHighlightColor: 'rgba(0,0,0,0)' - } -}; - -var SINGLE_TOUCH_INPUT_MAP = { - touchstart: INPUT_START, - touchmove: INPUT_MOVE, - touchend: INPUT_END, - touchcancel: INPUT_CANCEL -}; - -var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart'; -var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel'; - -/** - * @private - * Touch events input - * @constructor - * @extends Input - */ - -var SingleTouchInput = function (_Input) { - inherits(SingleTouchInput, _Input); - - function SingleTouchInput() { - classCallCheck(this, SingleTouchInput); - - var _this = possibleConstructorReturn(this, (SingleTouchInput.__proto__ || Object.getPrototypeOf(SingleTouchInput)).apply(this, arguments)); - - _this.evTarget = SINGLE_TOUCH_TARGET_EVENTS; - _this.evWin = SINGLE_TOUCH_WINDOW_EVENTS; - _this.started = false; - - Input.apply(_this, arguments); - return _this; - } - - createClass(SingleTouchInput, [{ - key: 'handler', - value: function handler(ev) { - var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; - - // should we handle the touch events? - if (type === INPUT_START) { - this.started = true; - } - - if (!this.started) { - return; - } - - var touches = normalizeSingleTouches.call(this, ev, type); - - // when done, reset the started state - if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) { - this.started = false; - } - - this.callback(this.manager, type, { - pointers: touches[0], - changedPointers: touches[1], - pointerType: INPUT_TYPE_TOUCH, - srcEvent: ev - }); - } - }]); - return SingleTouchInput; -}(Input); - -function normalizeSingleTouches(ev, type) { - var all = toArray$1(ev.touches); - var changed = toArray$1(ev.changedTouches); - - if (type & (INPUT_END | INPUT_CANCEL)) { - all = uniqueArray(all.concat(changed), 'identifier', true); - } - - return [all, changed]; -} - -/** - * @private - * wrap a method with a deprecation warning and stack trace - * @param {Function} method - * @param {String} name - * @param {String} message - * @returns {Function} A new function wrapping the supplied method. - */ -function deprecate(method, name, message) { - var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\n' + message + ' AT \n'; - return function () { - var e = new Error('get-stack-trace'); - var stack = e && e.stack ? e.stack.replace(/^[^\(]+?[\n$]/gm, '').replace(/^\s+at\s+/gm, '').replace(/^Object.\s*\(/gm, '{anonymous}()@') : 'Unknown Stack Trace'; - - var log = window.console && (window.console.warn || window.console.log); - if (log) { - log.call(window.console, deprecationMessage, stack); - } - return method.apply(this, arguments); - }; -} - -/** - * @private - * extend object. - * means that properties in dest will be overwritten by the ones in src. - * @param {Object} dest - * @param {Object} src - * @param {Boolean} [merge=false] - * @returns {Object} dest - */ -var extend = deprecate(function (dest, src, merge) { - var keys = Object.keys(src); - var i = 0; - while (i < keys.length) { - if (!merge || merge && dest[keys[i]] === undefined) { - dest[keys[i]] = src[keys[i]]; - } - i++; - } - return dest; -}, 'extend', 'Use `assign`.'); - -/** - * @private - * merge the values from src in the dest. - * means that properties that exist in dest will not be overwritten by src - * @param {Object} dest - * @param {Object} src - * @returns {Object} dest - */ -var merge = deprecate(function (dest, src) { - return extend(dest, src, true); -}, 'merge', 'Use `assign`.'); - -/** - * @private - * simple class inheritance - * @param {Function} child - * @param {Function} base - * @param {Object} [properties] - */ -function inherit(child, base, properties) { - var baseP = base.prototype; - var childP = void 0; - - childP = child.prototype = Object.create(baseP); - childP.constructor = child; - childP._super = baseP; - - if (properties) { - assign$1(childP, properties); - } -} - -// this prevents errors when Hammer is loaded in the presence of an AMD -// style loader but by script tag, not by the loader. - -assign$1(Hammer, { - INPUT_START: INPUT_START, - INPUT_MOVE: INPUT_MOVE, - INPUT_END: INPUT_END, - INPUT_CANCEL: INPUT_CANCEL, - - STATE_POSSIBLE: STATE_POSSIBLE, - STATE_BEGAN: STATE_BEGAN, - STATE_CHANGED: STATE_CHANGED, - STATE_ENDED: STATE_ENDED, - STATE_RECOGNIZED: STATE_RECOGNIZED, - STATE_CANCELLED: STATE_CANCELLED, - STATE_FAILED: STATE_FAILED, - - DIRECTION_NONE: DIRECTION_NONE, - DIRECTION_LEFT: DIRECTION_LEFT, - DIRECTION_RIGHT: DIRECTION_RIGHT, - DIRECTION_UP: DIRECTION_UP, - DIRECTION_DOWN: DIRECTION_DOWN, - DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL, - DIRECTION_VERTICAL: DIRECTION_VERTICAL, - DIRECTION_ALL: DIRECTION_ALL, - - Manager: Manager, - Input: Input, - TouchAction: TouchAction, - - TouchInput: TouchInput, - MouseInput: MouseInput, - PointerEventInput: PointerEventInput, - TouchMouseInput: TouchMouseInput, - SingleTouchInput: SingleTouchInput, - - Recognizer: Recognizer, - AttrRecognizer: AttrRecognizer, - Tap: TapRecognizer, - Pan: PanRecognizer, - Swipe: SwipeRecognizer, - Pinch: PinchRecognizer, - Rotate: RotateRecognizer, - Press: PressRecognizer, - - on: addEventListeners, - off: removeEventListeners, - each: each, - merge: merge, - extend: extend, - assign: assign$1, - inherit: inherit, - bindFn: bindFn, - prefixed: prefixed, - toArray: toArray$1, - inArray: inArray, - uniqueArray: uniqueArray, - splitStr: splitStr, - boolOrFn: boolOrFn, - hasParent: hasParent, - addEventListeners: addEventListeners, - removeEventListeners: removeEventListeners -}); - -/* jshint ignore:start */ -if (typeof define === 'function' && define.amd) { - define(function () { - return Hammer; - }); -} else if (typeof module !== 'undefined' && module.exports) { - module.exports = Hammer; -} else { - window[exportName] = Hammer; -} -/* jshint ignore:end */ -})(window, document, 'Hammer'); \ No newline at end of file diff --git a/vendor/assets/javascripts/hammer.min.js b/vendor/assets/javascripts/hammer.min.js deleted file mode 100644 index edadee159..000000000 --- a/vendor/assets/javascripts/hammer.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! Hammer.JS - v2.0.8 - 2016-04-23 - * http://hammerjs.github.io/ - * - * Copyright (c) 2016 Jorik Tangelder; - * Licensed under the MIT license */ -!function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(j(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",f=a.console&&(a.console.warn||a.console.log);return f&&f.call(a.console,e,d),b.apply(this,arguments)}}function i(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&la(d,c)}function j(a,b){return function(){return a.apply(b,arguments)}}function k(a,b){return typeof a==oa?a.apply(b?b[0]||d:d,b):a}function l(a,b){return a===d?b:a}function m(a,b,c){g(q(b),function(b){a.addEventListener(b,c,!1)})}function n(a,b,c){g(q(b),function(b){a.removeEventListener(b,c,!1)})}function o(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function p(a,b){return a.indexOf(b)>-1}function q(a){return a.trim().split(/\s+/g)}function r(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function u(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g1&&!c.firstMultiple?c.firstMultiple=D(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=E(d);b.timeStamp=ra(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=I(h,i),b.distance=H(h,i),B(c,b),b.offsetDirection=G(b.deltaX,b.deltaY);var j=F(b.deltaTime,b.deltaX,b.deltaY);b.overallVelocityX=j.x,b.overallVelocityY=j.y,b.overallVelocity=qa(j.x)>qa(j.y)?j.x:j.y,b.scale=g?K(g.pointers,d):1,b.rotation=g?J(g.pointers,d):0,b.maxPointers=c.prevInput?b.pointers.length>c.prevInput.maxPointers?b.pointers.length:c.prevInput.maxPointers:b.pointers.length,C(c,b);var k=a.element;o(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function B(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};b.eventType!==Ea&&f.eventType!==Ga||(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function C(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Ha&&(i>Da||h.velocity===d)){var j=b.deltaX-h.deltaX,k=b.deltaY-h.deltaY,l=F(i,j,k);e=l.x,f=l.y,c=qa(l.x)>qa(l.y)?l.x:l.y,g=G(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function D(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:pa(c/b),y:pa(d/b)}}function F(a,b,c){return{x:b/a||0,y:c/a||0}}function G(a,b){return a===b?Ia:qa(a)>=qa(b)?0>a?Ja:Ka:0>b?La:Ma}function H(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function I(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function J(a,b){return I(b[1],b[0],Ra)+I(a[1],a[0],Ra)}function K(a,b){return H(b[0],b[1],Ra)/H(a[0],a[1],Ra)}function L(){this.evEl=Ta,this.evWin=Ua,this.pressed=!1,x.apply(this,arguments)}function M(){this.evEl=Xa,this.evWin=Ya,x.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function N(){this.evTarget=$a,this.evWin=_a,this.started=!1,x.apply(this,arguments)}function O(a,b){var c=s(a.touches),d=s(a.changedTouches);return b&(Ga|Ha)&&(c=t(c.concat(d),"identifier",!0)),[c,d]}function P(){this.evTarget=bb,this.targetIds={},x.apply(this,arguments)}function Q(a,b){var c=s(a.touches),d=this.targetIds;if(b&(Ea|Fa)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=s(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return o(a.target,i)}),b===Ea)for(e=0;e-1&&d.splice(a,1)};setTimeout(e,cb)}}function U(a){for(var b=a.srcEvent.clientX,c=a.srcEvent.clientY,d=0;d=f&&db>=g)return!0}return!1}function V(a,b){this.manager=a,this.set(b)}function W(a){if(p(a,jb))return jb;var b=p(a,kb),c=p(a,lb);return b&&c?jb:b||c?b?kb:lb:p(a,ib)?ib:hb}function X(){if(!fb)return!1;var b={},c=a.CSS&&a.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(d){b[d]=c?a.CSS.supports("touch-action",d):!0}),b}function Y(a){this.options=la({},this.defaults,a||{}),this.id=v(),this.manager=null,this.options.enable=l(this.options.enable,!0),this.state=nb,this.simultaneous={},this.requireFail=[]}function Z(a){return a&sb?"cancel":a&qb?"end":a&pb?"move":a&ob?"start":""}function $(a){return a==Ma?"down":a==La?"up":a==Ja?"left":a==Ka?"right":""}function _(a,b){var c=b.manager;return c?c.get(a):a}function aa(){Y.apply(this,arguments)}function ba(){aa.apply(this,arguments),this.pX=null,this.pY=null}function ca(){aa.apply(this,arguments)}function da(){Y.apply(this,arguments),this._timer=null,this._input=null}function ea(){aa.apply(this,arguments)}function fa(){aa.apply(this,arguments)}function ga(){Y.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function ha(a,b){return b=b||{},b.recognizers=l(b.recognizers,ha.defaults.preset),new ia(a,b)}function ia(a,b){this.options=la({},ha.defaults,b||{}),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=a,this.input=y(this),this.touchAction=new V(this,this.options.touchAction),ja(this,!0),g(this.options.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function ja(a,b){var c=a.element;if(c.style){var d;g(a.options.cssProps,function(e,f){d=u(c.style,f),b?(a.oldCssProps[d]=c.style[d],c.style[d]=e):c.style[d]=a.oldCssProps[d]||""}),b||(a.oldCssProps={})}}function ka(a,c){var d=b.createEvent("Event");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var la,ma=["","webkit","Moz","MS","ms","o"],na=b.createElement("div"),oa="function",pa=Math.round,qa=Math.abs,ra=Date.now;la="function"!=typeof Object.assign?function(a){if(a===d||null===a)throw new TypeError("Cannot convert undefined or null to object");for(var b=Object(a),c=1;ch&&(b.push(a),h=b.length-1):e&(Ga|Ha)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Za={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},$a="touchstart",_a="touchstart touchmove touchend touchcancel";i(N,x,{handler:function(a){var b=Za[a.type];if(b===Ea&&(this.started=!0),this.started){var c=O.call(this,a,b);b&(Ga|Ha)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}}});var ab={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},bb="touchstart touchmove touchend touchcancel";i(P,x,{handler:function(a){var b=ab[a.type],c=Q.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}});var cb=2500,db=25;i(R,x,{handler:function(a,b,c){var d=c.pointerType==za,e=c.pointerType==Ba;if(!(e&&c.sourceCapabilities&&c.sourceCapabilities.firesTouchEvents)){if(d)S.call(this,b,c);else if(e&&U.call(this,c))return;this.callback(a,b,c)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var eb=u(na.style,"touchAction"),fb=eb!==d,gb="compute",hb="auto",ib="manipulation",jb="none",kb="pan-x",lb="pan-y",mb=X();V.prototype={set:function(a){a==gb&&(a=this.compute()),fb&&this.manager.element.style&&mb[a]&&(this.manager.element.style[eb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){k(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),W(a.join(" "))},preventDefaults:function(a){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=p(d,jb)&&!mb[jb],f=p(d,lb)&&!mb[lb],g=p(d,kb)&&!mb[kb];if(e){var h=1===a.pointers.length,i=a.distance<2,j=a.deltaTime<250;if(h&&i&&j)return}return g&&f?void 0:e||f&&c&Na||g&&c&Oa?this.preventSrc(b):void 0},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var nb=1,ob=2,pb=4,qb=8,rb=qb,sb=16,tb=32;Y.prototype={defaults:{},set:function(a){return la(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=_(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=_(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=_(a,this),-1===r(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=_(a,this);var b=r(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(b,a)}var c=this,d=this.state;qb>d&&b(c.options.event+Z(d)),b(c.options.event),a.additionalEvent&&b(a.additionalEvent),d>=qb&&b(c.options.event+Z(d))},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=tb)},canEmit:function(){for(var a=0;af?Ja:Ka,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ia:0>g?La:Ma,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return aa.prototype.attrTest.call(this,a)&&(this.state&ob||!(this.state&ob)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$(a.direction);b&&(a.additionalEvent=this.options.event+b),this._super.emit.call(this,a)}}),i(ca,aa,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&ob)},emit:function(a){if(1!==a.scale){var b=a.scale<1?"in":"out";a.additionalEvent=this.options.event+b}this._super.emit.call(this,a)}}),i(da,Y,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[hb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Ga|Ha)&&!f)this.reset();else if(a.eventType&Ea)this.reset(),this._timer=e(function(){this.state=rb,this.tryEmit()},b.time,this);else if(a.eventType&Ga)return rb;return tb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===rb&&(a&&a.eventType&Ga?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=ra(),this.manager.emit(this.options.event,this._input)))}}),i(ea,aa,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&ob)}}),i(fa,aa,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Na|Oa,pointers:1},getTouchAction:function(){return ba.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Na|Oa)?b=a.overallVelocity:c&Na?b=a.overallVelocityX:c&Oa&&(b=a.overallVelocityY),this._super.attrTest.call(this,a)&&c&a.offsetDirection&&a.distance>this.options.threshold&&a.maxPointers==this.options.pointers&&qa(b)>this.options.velocity&&a.eventType&Ga},emit:function(a){var b=$(a.offsetDirection);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),i(ga,Y,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[ib]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance", - options: { - appendTo: null, - autoFocus: false, - delay: 300, - minLength: 1, - position: { - my: "left top", - at: "left bottom", - collision: "none" - }, - source: null, - - // callbacks - change: null, - close: null, - focus: null, - open: null, - response: null, - search: null, - select: null - }, - - requestIndex: 0, - pending: 0, - - _create: function() { - // Some browsers only repeat keydown events, not keypress events, - // so we use the suppressKeyPress flag to determine if we've already - // handled the keydown event. #7269 - // Unfortunately the code for & in keypress is the same as the up arrow, - // so we use the suppressKeyPressRepeat flag to avoid handling keypress - // events when we know the keydown event was used to modify the - // search term. #7799 - var suppressKeyPress, suppressKeyPressRepeat, suppressInput, - nodeName = this.element[ 0 ].nodeName.toLowerCase(), - isTextarea = nodeName === "textarea", - isInput = nodeName === "input"; - - this.isMultiLine = - // Textareas are always multi-line - isTextarea ? true : - // Inputs are always single-line, even if inside a contentEditable element - // IE also treats inputs as contentEditable - isInput ? false : - // All other element types are determined by whether or not they're contentEditable - this.element.prop( "isContentEditable" ); - - this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ]; - this.isNewMenu = true; - - this.element - .addClass( "ui-autocomplete-input" ) - .attr( "autocomplete", "off" ); - - this._on( this.element, { - keydown: function( event ) { - if ( this.element.prop( "readOnly" ) ) { - suppressKeyPress = true; - suppressInput = true; - suppressKeyPressRepeat = true; - return; - } - - suppressKeyPress = false; - suppressInput = false; - suppressKeyPressRepeat = false; - var keyCode = $.ui.keyCode; - switch ( event.keyCode ) { - case keyCode.PAGE_UP: - suppressKeyPress = true; - this._move( "previousPage", event ); - break; - case keyCode.PAGE_DOWN: - suppressKeyPress = true; - this._move( "nextPage", event ); - break; - case keyCode.UP: - suppressKeyPress = true; - this._keyEvent( "previous", event ); - break; - case keyCode.DOWN: - suppressKeyPress = true; - this._keyEvent( "next", event ); - break; - case keyCode.ENTER: - // when menu is open and has focus - if ( this.menu.active ) { - // #6055 - Opera still allows the keypress to occur - // which causes forms to submit - suppressKeyPress = true; - event.preventDefault(); - this.menu.select( event ); - } - break; - case keyCode.TAB: - if ( this.menu.active ) { - this.menu.select( event ); - } - break; - case keyCode.ESCAPE: - if ( this.menu.element.is( ":visible" ) ) { - if ( !this.isMultiLine ) { - this._value( this.term ); - } - this.close( event ); - // Different browsers have different default behavior for escape - // Single press can mean undo or clear - // Double press in IE means clear the whole form - event.preventDefault(); - } - break; - default: - suppressKeyPressRepeat = true; - // search timeout should be triggered before the input value is changed - this._searchTimeout( event ); - break; - } - }, - keypress: function( event ) { - if ( suppressKeyPress ) { - suppressKeyPress = false; - if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { - event.preventDefault(); - } - return; - } - if ( suppressKeyPressRepeat ) { - return; - } - - // replicate some key handlers to allow them to repeat in Firefox and Opera - var keyCode = $.ui.keyCode; - switch ( event.keyCode ) { - case keyCode.PAGE_UP: - this._move( "previousPage", event ); - break; - case keyCode.PAGE_DOWN: - this._move( "nextPage", event ); - break; - case keyCode.UP: - this._keyEvent( "previous", event ); - break; - case keyCode.DOWN: - this._keyEvent( "next", event ); - break; - } - }, - input: function( event ) { - if ( suppressInput ) { - suppressInput = false; - event.preventDefault(); - return; - } - this._searchTimeout( event ); - }, - focus: function() { - this.selectedItem = null; - this.previous = this._value(); - }, - blur: function( event ) { - if ( this.cancelBlur ) { - delete this.cancelBlur; - return; - } - - clearTimeout( this.searching ); - this.close( event ); - this._change( event ); - } - }); - - this._initSource(); - this.menu = $( "