vue-debounce
Version:
A simple vue directive for debounce
2 lines (1 loc) • 1.61 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).vueDebounce={})}(this,(function(e){"use strict";function t(e,t){let n=null;const r="number"==typeof t?t:function(e){const[t,n="ms"]=String(e).split(/(ms|s)/i);return Number(t)*{ms:1,s:1e3}[n]}(t),o=function(){for(var t=arguments.length,o=new Array(t),u=0;u<t;u++)o[u]=arguments[u];clearTimeout(n),n=setTimeout((()=>{n=null,e.apply(this,o)}),r),n||e.apply(this,o)};return o.cancel=()=>{clearTimeout(n),n=null},o}function n(e){return e.map((e=>e.toLowerCase()))}function r(e,t){const r=e?e["debounce-events"]:[];return r&&r.length>0?Array.isArray(r)?n(r):n(r.split(",")):n((o=t,Array.isArray(o)?o:null==o?[]:[o]));var o}function o(e){return""===e}function u(){let{lock:e=!1,listenTo:n="keyup",defaultTime:u="300ms",fireOnEmpty:i=!1,cancelOnEmpty:c=!1,trim:l=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{created(a,s,f){let{value:p,arg:m=u,modifiers:y}=s;const d=Object.assign({lock:e,trim:l,fireonempty:i,cancelonempty:c},y),v=r(f.props,n),g=t((e=>{p(e.target.value,e)}),m);function b(e){const t=d.trim?e.target.value.trim():e.target.value;o(t)&&d.cancelonempty?g.cancel():function(e,t){return"Enter"===e&&(!t.lock||t.unlock)}(e.key,d)||function(e,t,n){return o(e)&&n.fireonempty&&("Enter"===t||" "===t)}(t,e.key,d)?(g.cancel(),p(e.target.value,e)):g(e)}v.forEach((e=>{a.addEventListener(e,b)}))}}}e.debounce=t,e.default=u,e.vueDebounce=u,Object.defineProperty(e,"__esModule",{value:!0})}));