vue-debounce
Version:
A simple vue directive for debounce
2 lines (1 loc) • 1.35 kB
JavaScript
function e(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),c=0;c<t;c++)o[c]=arguments[c];const l=()=>{n=null,e.apply(this,o)};clearTimeout(n),n=setTimeout(l,r),n||e.apply(this,o)};return o.cancel=()=>{clearTimeout(n),n=null},o}function t(e){return e.map((e=>e.toLowerCase()))}function n(e,n){const r=e?e["debounce-events"]:[];return r&&r.length>0?Array.isArray(r)?t(r):t(r.split(",")):t((o=n,Array.isArray(o)?o:null==o?[]:[o]));var o}function r(e){return""===e}function o(e,t){return"Enter"===e&&(!t.lock||t.unlock)}function c(e,t,n){return r(e)&&n.fireonempty&&("Enter"===t||" "===t)}var l={debounce:e,vueDebounce:function(){let{lock:t=!1,listenTo:l="keyup",defaultTime:u="300ms",fireOnEmpty:a=!1,cancelOnEmpty:i=!1,trim:s=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{created(m,f,p){let{value:y,arg:v=u,modifiers:g}=f;console.log(v);const d=Object.assign({lock:t,trim:s,fireonempty:a,cancelonempty:i},g),k=n(p.props,l),b=e((e=>{y(e.target.value,e)}),v);function h(e){const t=d.trim?e.target.value.trim():e.target.value;r(t)&&d.cancelonempty?b.cancel():o(e.key,d)||c(t,e.key,d)?(b.cancel(),y(e.target.value,e)):b(e)}k.forEach((e=>{m.addEventListener(e,h)}))}}}};export{l as default};