// 自定义指令
export default {
  increase: { // 自增
    inserted: function (el) {
      //console.log('【inserted】 inserted');
      const endText = el.innerText;
      // const endText = el.dataset.value;
      const end = el.innerText * 1;
      const step = el.dataset.step;
      el.innerText = 0;
      const timer = setInterval(function () {
        el.innerText = el.innerText * 1 + step * 1;
        if (el.innerText >= end) {
          clearInterval(timer);
          el.innerText = endText;
        }
      }, 200);
    }
  },
  input: {
    bind (el, bidding, vnode) {
      const input = el.tagName === 'INPUT' ? el : el.querySelector('input');
      input.addEventListener('compositionstart', () => {
        vnode.locking = true; // 解决中文输入双向绑定失效
      });
      input.addEventListener('compositionend', () => {
        vnode.locking = false; // 解决中文输入双向绑定失效
        input.dispatchEvent(new Event('input'));
      });
      // 输入监听处理
      input.onkeyup = () => {
        if (vnode.locking) return;
        let regObj = {
          num: /\D/g, // 只能输入数字可以0开头
          int: /\D/g,  // 只能输入整数
          float: /[^\.\d]/g, // 只能输入数字、浮点数
          numEn: /[^a-zA-Z0-9]/g, // 只能输入数字、字母
          en: /[^a-zA-Z]/g, // 只能输入字母
          numEnCn: /[^A-Za-z0-9-\u4e00-\u9fa5]/g // 只能输入汉字、数字、字母^A-Za-z0-9\u4e00-\u9fa5
        };

        for (let key in bidding.modifiers) {
          let reg = regObj[key];
          if (key === 'float') {
            // v-input.flot="4" // 小数点位数
            onlyFloat(input, bidding.value || 2);
          } else {
            input.value = input.value.replace(reg, '');
          }
          // 使用Number函数最多16位，超过16位会转换为0
          if (key === 'int') {
            input.value = input.value && Number(input.value);
          }
        }
        input.dispatchEvent(new Event('input'));
      };
    }
  }
};

function onlyFloat (input, n) {
  let value = input.value;
  value = value.replace(/[^\d.]/g, '');
  value = value.replace(/^\./g, '');
  value = value.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.');
  if (n && Number(n) > 0) { // 限制n位
    var d = new Array(Number(n)).fill('\\d').join('');
    var reg = new RegExp(`^(\\-)*(\\d+)\\.(${d}).*$`, 'ig');
    value = value.replace(reg, '$1$2.$3');
  }
  if (value && !value.includes('.')) {
    value = Number(value).toString(); // 去掉开头多个0
  }
  input.value = value;
};
