'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _addDomEventListener = require('add-dom-event-listener');

var _addDomEventListener2 = _interopRequireDefault(_addDomEventListener);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var docStyle = window.document.documentElement.style; /**
                                                       * @文件说明: 构建 DOM 对象的操作常见函数
                                                       * @创建人: pjtools@vip.qq.com
                                                       * @创建时间: 2020-05-20 09:52:24
                                                       */

var testProp = function testProp(props) {
  if (!docStyle) return props[0];
  for (var i = 0; i < props.length; i++) {
    if (props[i] in docStyle) {
      return props[i];
    }
  }
  return props[0];
};
var selectProp = testProp(['userSelect', 'MozUserSelect', 'WebkitUserSelect', 'msUserSelect']);
var transformProp = testProp(['transform', 'WebkitTransform']);
var _suppressClick = function _suppressClick(e) {
  e.preventDefault();
  e.stopPropagation();
  window.removeEventListener('click', _suppressClick, true);
};
var userSelect = void 0;

var DOM = {
  /**
   * 动态创建DOM对象
   * @param {String} tagName HTML标签名
   * @param {String} className Class类名
   * @param {HTMLElement} container 待追加到DOM父级对象
   */
  create: function create(tagName, className, container) {
    var el = window.document.createElement(tagName);
    if (className !== undefined) {
      el.className = className;
    }
    container && container.appendChild(el);
    return el;
  },


  /**
   * 禁用浏览器的原生Drag操作
   *
   */
  disableDrag: function disableDrag() {
    if (docStyle && selectProp) {
      userSelect = docStyle[selectProp];
      docStyle[selectProp] = 'none';
    }
  },


  /**
   * 启用浏览器的原生Drag操作
   */
  enableDrag: function enableDrag() {
    if (docStyle && selectProp) {
      docStyle[selectProp] = userSelect;
    }
  },


  /**
   * 设定指定HTML Element对象的样式transform属性
   * @param {HTMLElement} el 待设定的DOM对象
   * @param {string} value 待设定的属性值
   */
  setTransform: function setTransform(el, value) {
    el.style[transformProp] = value;
  },


  /**
   * 绑定DOM对象的事件监听对象
   * Example：
   * const event = onEventListener(document, 'click', () => {});
   * event.remove();
   *
   * @param {HTMLElement} target 待绑定的DOM对象
   * @param {String} eventType 事件类型
   * @param {Function} cb 事件函数
   * @param {Object} option 事件的选项参数
   */
  onEventListener: function onEventListener(target, eventType, cb, option) {
    return (0, _addDomEventListener2['default'])(target, eventType, cb, option);
  },


  /**
   * 获取指定DOM对象的鼠标Mouse相对偏移量
   * @param {HTMLElement} el DOM对象
   * @param {Event} e 事件Event对象
   * @param {MapboxGL} mapboxgl MapboxGL对象，设定则返回mapboxgl.Point对象
   */
  mousePos: function mousePos(el, e, mapboxgl) {
    var rect = el.getBoundingClientRect();
    var x = e.clientX - rect.left - el.clientLeft;
    var y = e.clientY - rect.top - el.clientTop;
    return mapboxgl ? new mapboxgl.Point(x, y) : { x: x, y: y };
  },


  /**
   * 获取鼠标的按键类型，0：左键（正键） 1：中键 2：右键（反键）
   * @param {Event} e 事件Event对象
   */
  mouseButton: function mouseButton(e) {
    if (e.type === 'mousedown' || e.type === 'mouseup') {
      if (typeof window.InstallTrigger !== 'undefined' && e.button === 2 && e.ctrlKey && window.navigator.platform.toUpperCase().indexOf('MAC') >= 0) {
        return 0;
      }
      return e.button;
    }
    return null;
  },


  /**
   * 阻止鼠标单击的事件默认行为与冒泡
   */
  suppressClick: function suppressClick() {
    window.addEventListener('click', _suppressClick, true);
    window.setTimeout(function () {
      window.removeEventListener('click', _suppressClick, true);
    }, 0);
  },


  /**
   * 删除指定的DOM对象
   * @param {HTMLElement} el 待移除的DOM对象
   */
  remove: function remove(el) {
    if (el.parentNode) {
      el.parentNode.removeChild(el);
    }
  }
};

exports['default'] = DOM;