万用网页标记器

轻松地标记网页任意元素,删除/更改烦人的内容,以及提供更多的快捷功能

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         万用网页标记器
// @namespace    https://palerock.cn
// @version      2.0.1
// @description  轻松地标记网页任意元素,删除/更改烦人的内容,以及提供更多的快捷功能
// @author       Cangshi
// @include      *
// @run-at       document-start
// @grant        none
// ==/UserScript==

(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.easymark = {}));
}(this, (function (exports) { 'use strict';

  function _classCallCheck(instance, Constructor) {
    if (!(instance instanceof Constructor)) {
      throw new TypeError("Cannot call a class as a 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);
    }
  }

  function _createClass(Constructor, protoProps, staticProps) {
    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
    if (staticProps) _defineProperties(Constructor, staticProps);
    return Constructor;
  }

  function _defineProperty(obj, key, value) {
    if (key in obj) {
      Object.defineProperty(obj, key, {
        value: value,
        enumerable: true,
        configurable: true,
        writable: true
      });
    } else {
      obj[key] = value;
    }

    return obj;
  }

  var ManagerStatus;

  (function (ManagerStatus) {
    ManagerStatus[ManagerStatus["REST"] = 0] = "REST";
    ManagerStatus[ManagerStatus["STARTING"] = 1] = "STARTING";
    ManagerStatus[ManagerStatus["STOP"] = 2] = "STOP";
  })(ManagerStatus || (ManagerStatus = {}));

  function _createForOfIteratorHelper$3(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$4(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }

  function _unsupportedIterableToArray$4(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$4(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$4(o, minLen); }

  function _arrayLikeToArray$4(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
  var MarkerManager = /*#__PURE__*/function () {
    function MarkerManager() {
      _classCallCheck(this, MarkerManager);

      _defineProperty(this, "markers", []);

      _defineProperty(this, "status", ManagerStatus.REST);
    }

    _createClass(MarkerManager, [{
      key: "registerMarker",
      value: function registerMarker(marker) {
        if (!this.markers.includes(marker)) {
          this.markers.push(marker);
        }
      }
    }, {
      key: "getMarkedItems",
      value: function getMarkedItems() {
        return this.markers.reduce(function (results, marker) {
          var _iterator = _createForOfIteratorHelper$3(marker.getMarkedItems()),
              _step;

          try {
            for (_iterator.s(); !(_step = _iterator.n()).done;) {
              var item = _step.value;

              if (!results.includes(item)) {
                results.push(item);
              }
            }
          } catch (err) {
            _iterator.e(err);
          } finally {
            _iterator.f();
          }

          return results;
        }, []);
      }
    }, {
      key: "removeMarker",
      value: function removeMarker(marker) {
        marker.deactivate();
        this.markers = this.markers.filter(function (m) {
          return m !== marker;
        });
      }
    }, {
      key: "start",
      value: function start() {
        if (this.status !== ManagerStatus.STARTING) {
          var _iterator2 = _createForOfIteratorHelper$3(this.markers),
              _step2;

          try {
            for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
              var marker = _step2.value;
              marker.activate();
            }
          } catch (err) {
            _iterator2.e(err);
          } finally {
            _iterator2.f();
          }

          this.status = ManagerStatus.STARTING;
        }
      }
    }, {
      key: "stop",
      value: function stop() {
        if (this.status === ManagerStatus.STARTING) {
          var _iterator3 = _createForOfIteratorHelper$3(this.markers),
              _step3;

          try {
            for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
              var marker = _step3.value;
              marker.deactivate();
            }
          } catch (err) {
            _iterator3.e(err);
          } finally {
            _iterator3.f();
          }

          this.status = ManagerStatus.STOP;
        }
      }
    }, {
      key: "end",
      value: function end(force) {
        if ([ManagerStatus.STOP, ManagerStatus.REST].includes(this.status)) {
          var _iterator4 = _createForOfIteratorHelper$3(this.markers),
              _step4;

          try {
            for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
              var marker = _step4.value;
              marker.unmarkAll(force);
            }
          } catch (err) {
            _iterator4.e(err);
          } finally {
            _iterator4.f();
          }

          this.status = ManagerStatus.REST;
        }
      }
    }, {
      key: "canEnd",
      get: function get() {
        return this.status === ManagerStatus.STOP;
      }
    }]);

    return MarkerManager;
  }();

  function _assertThisInitialized(self) {
    if (self === void 0) {
      throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
    }

    return self;
  }

  function _setPrototypeOf(o, p) {
    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
      o.__proto__ = p;
      return o;
    };

    return _setPrototypeOf(o, p);
  }

  function _inherits(subClass, superClass) {
    if (typeof superClass !== "function" && superClass !== null) {
      throw new TypeError("Super expression must either be null or a function");
    }

    subClass.prototype = Object.create(superClass && superClass.prototype, {
      constructor: {
        value: subClass,
        writable: true,
        configurable: true
      }
    });
    if (superClass) _setPrototypeOf(subClass, superClass);
  }

  function _typeof(obj) {
    "@babel/helpers - typeof";

    if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
      _typeof = function _typeof(obj) {
        return typeof obj;
      };
    } else {
      _typeof = function _typeof(obj) {
        return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
      };
    }

    return _typeof(obj);
  }

  function _possibleConstructorReturn(self, call) {
    if (call && (_typeof(call) === "object" || typeof call === "function")) {
      return call;
    }

    return _assertThisInitialized(self);
  }

  function _getPrototypeOf(o) {
    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
      return o.__proto__ || Object.getPrototypeOf(o);
    };
    return _getPrototypeOf(o);
  }

  function _superPropBase(object, property) {
    while (!Object.prototype.hasOwnProperty.call(object, property)) {
      object = _getPrototypeOf(object);
      if (object === null) break;
    }

    return object;
  }

  function _get(target, property, receiver) {
    if (typeof Reflect !== "undefined" && Reflect.get) {
      _get = Reflect.get;
    } else {
      _get = function _get(target, property, receiver) {
        var base = _superPropBase(target, property);
        if (!base) return;
        var desc = Object.getOwnPropertyDescriptor(base, property);

        if (desc.get) {
          return desc.get.call(receiver);
        }

        return desc.value;
      };
    }

    return _get(target, property, receiver || target);
  }

  function createCommonjsModule(fn) {
    var module = { exports: {} };
  	return fn(module, module.exports), module.exports;
  }

  var genOrderedId_1 = createCommonjsModule(function (module, exports) {
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.genOrderedId = void 0;
  let initialId = 1;
  function genOrderedId() {
      return initialId++;
  }
  exports.genOrderedId = genOrderedId;
  });

  function _createForOfIteratorHelper$2(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$3(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }

  function _unsupportedIterableToArray$3(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$3(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$3(o, minLen); }

  function _arrayLikeToArray$3(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
  var BasicMarker = /*#__PURE__*/function () {
    function BasicMarker() {
      _classCallCheck(this, BasicMarker);

      _defineProperty(this, "markedList", []);
    }

    _createClass(BasicMarker, [{
      key: "mark",
      value: function mark(origin) {
        var target = origin;

        if (!target.isMarked && !target.preventMark) {
          if (!target.hasMarked) {
            target.uniqueId = String(genOrderedId_1.genOrderedId());
          }

          target.hasMarked = true;
          target.isMarked = true;

          if (!this.markedList.includes(target)) {
            this.markedList.push(target);
          }

          if (target instanceof EventTarget) {
            target.dispatchEvent(new CustomEvent('marked', {
              composed: true,
              bubbles: true
            }));
          }
        }

        return target;
      }
    }, {
      key: "unmark",
      value: function unmark(target, force) {
        if (target.isMarked && (!target.preventUnmark || force)) {
          this.markedList = this.markedList.filter(function (item) {
            return item != target;
          });

          if (target instanceof EventTarget) {
            target.dispatchEvent(new CustomEvent('unmarked', {
              composed: true,
              bubbles: true
            }));
          }

          target.isMarked = false;
        }

        return target;
      }
    }, {
      key: "activate",
      value: function activate() {}
    }, {
      key: "deactivate",
      value: function deactivate() {}
    }, {
      key: "unmarkAll",
      value: function unmarkAll(force) {
        var _iterator = _createForOfIteratorHelper$2(this.markedList),
            _step;

        try {
          for (_iterator.s(); !(_step = _iterator.n()).done;) {
            var item = _step.value;
            this.unmark(item, force);
          }
        } catch (err) {
          _iterator.e(err);
        } finally {
          _iterator.f();
        }
      }
    }, {
      key: "getMarkedItems",
      value: function getMarkedItems() {
        return this.markedList || [];
      }
    }]);

    return BasicMarker;
  }();

  function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }

  function _isNativeReflectConstruct$1() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
  var EventMarker = /*#__PURE__*/function (_BasicMarker) {
    _inherits(EventMarker, _BasicMarker);

    var _super = _createSuper$1(EventMarker);

    function EventMarker(host) {
      var _this;

      _classCallCheck(this, EventMarker);

      _this = _super.call(this);
      _this.host = host;

      _defineProperty(_assertThisInitialized(_this), "markEvent", void 0);

      _defineProperty(_assertThisInitialized(_this), "unmarkEvent", void 0);

      _defineProperty(_assertThisInitialized(_this), "onMarked", void 0);

      _defineProperty(_assertThisInitialized(_this), "onUnmarked", void 0);

      _defineProperty(_assertThisInitialized(_this), "isListenMark", false);

      _defineProperty(_assertThisInitialized(_this), "isListenUnmark", false);

      _this.onMarked = function (event) {
        if (event.target) {
          _this.mark(event.target);
        }
      };

      _this.onUnmarked = function (event) {
        if (event.target) {
          _this.unmark(event.target);
        }
      };

      return _this;
    }

    _createClass(EventMarker, [{
      key: "startListenEvent",
      value: function startListenEvent() {
        if (this.markEvent && !this.isListenMark) {
          this.host.addEventListener(this.markEvent, this.onMarked);
          this.isListenMark = true;
        }

        if (this.unmarkEvent && !this.isListenUnmark) {
          this.host.addEventListener(this.unmarkEvent, this.onUnmarked);
          this.isListenUnmark = true;
        }
      }
    }, {
      key: "stopListenEvent",
      value: function stopListenEvent() {
        if (this.markEvent && this.isListenMark) {
          this.host.removeEventListener(this.markEvent, this.onMarked);
          this.isListenMark = false;
        }

        if (this.unmarkEvent && this.isListenUnmark) {
          this.host.removeEventListener(this.unmarkEvent, this.onUnmarked);
          this.isListenUnmark = false;
        }
      }
    }, {
      key: "activate",
      value: function activate() {
        _get(_getPrototypeOf(EventMarker.prototype), "activate", this).call(this);

        this.startListenEvent();
      }
    }, {
      key: "deactivate",
      value: function deactivate() {
        _get(_getPrototypeOf(EventMarker.prototype), "deactivate", this).call(this);

        this.stopListenEvent();
      }
    }]);

    return EventMarker;
  }(BasicMarker);

  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }

  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
  var MouseMoveMarker = /*#__PURE__*/function (_EventMarker) {
    _inherits(MouseMoveMarker, _EventMarker);

    var _super = _createSuper(MouseMoveMarker);

    function MouseMoveMarker() {
      var _this;

      _classCallCheck(this, MouseMoveMarker);

      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
        args[_key] = arguments[_key];
      }

      _this = _super.call.apply(_super, [this].concat(args));

      _defineProperty(_assertThisInitialized(_this), "markEvent", 'mousemove');

      _defineProperty(_assertThisInitialized(_this), "unmarkEvent", 'mouseout');

      return _this;
    }

    return MouseMoveMarker;
  }(EventMarker);

  function _createForOfIteratorHelper$1(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$2(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }

  function _unsupportedIterableToArray$2(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$2(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$2(o, minLen); }

  function _arrayLikeToArray$2(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }

  var EasyMarker = /*#__PURE__*/function () {
    function EasyMarker(managers, host) {
      var _this = this;

      _classCallCheck(this, EasyMarker);

      _defineProperty(this, "host", void 0);

      _defineProperty(this, "events", []);

      _defineProperty(this, "listenedEventNameList", []);

      _defineProperty(this, "markerManagers", void 0);

      _defineProperty(this, "eventHandler", void 0);

      this.host = host || window;
      this.markerManagers = managers || [];

      this.eventHandler = function (e) {
        var eventName = e.type;

        var targetEvents = _this.events.filter(function (e) {
          return e.name === eventName;
        }).sort(function (a, b) {
          return a.priority > b.priority ? -1 : 1;
        });

        var _iterator = _createForOfIteratorHelper$1(targetEvents),
            _step;

        try {
          for (_iterator.s(); !(_step = _iterator.n()).done;) {
            var event = _step.value;
            var target = e.target;

            if (event.global) {
              if (event.single) {
                event.callback({
                  event: e,
                  detail: e.detail,
                  target: target,
                  marker: _this
                });
              } else {
                var _iterator2 = _createForOfIteratorHelper$1(_this.getMarkedItems()),
                    _step2;

                try {
                  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
                    var item = _step2.value;
                    event.callback({
                      event: e,
                      detail: e.detail,
                      target: item,
                      marker: _this
                    });
                  }
                } catch (err) {
                  _iterator2.e(err);
                } finally {
                  _iterator2.f();
                }
              }
            } else if (target.isMarked) {
              event.callback({
                event: e,
                detail: e.detail,
                target: target,
                marker: _this
              });
            }
          }
        } catch (err) {
          _iterator.e(err);
        } finally {
          _iterator.f();
        }
      };
    }

    _createClass(EasyMarker, [{
      key: "exit",
      value: function exit() {
        var _iterator3 = _createForOfIteratorHelper$1(this.markerManagers),
            _step3;

        try {
          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
            var manager = _step3.value;
            manager.stop();
            manager.end(true);
          }
        } catch (err) {
          _iterator3.e(err);
        } finally {
          _iterator3.f();
        }
      }
    }, {
      key: "getMarkedItems",
      value: function getMarkedItems() {
        return this.markerManagers.reduce(function (results, manager) {
          var _iterator4 = _createForOfIteratorHelper$1(manager.getMarkedItems()),
              _step4;

          try {
            for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
              var item = _step4.value;

              if (!results.includes(item)) {
                results.push(item);
              }
            }
          } catch (err) {
            _iterator4.e(err);
          } finally {
            _iterator4.f();
          }

          return results;
        }, []);
      }
    }, {
      key: "addManager",
      value: function addManager(manager) {
        if (!this.markerManagers.includes(manager)) {
          this.markerManagers.push(manager);
        }
      }
    }, {
      key: "registerEvents",
      value: function registerEvents(events) {
        var _iterator5 = _createForOfIteratorHelper$1(events),
            _step5;

        try {
          for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
            var event = _step5.value;
            this.registerEvent(event);
          }
        } catch (err) {
          _iterator5.e(err);
        } finally {
          _iterator5.f();
        }
      }
    }, {
      key: "registerEvent",
      value: function registerEvent(event) {
        this.events.push(event);
        this.listenEvent(event.name);
      }
    }, {
      key: "listenEvent",
      value: function listenEvent(eventName) {
        if (!eventName) {
          return;
        }

        var eventNameExist = this.listenedEventNameList.includes(eventName);

        if (!eventNameExist) {
          this.host.addEventListener(eventName, this.eventHandler);
          this.listenedEventNameList.push(eventName);
        }
      }
    }, {
      key: "denyEvent",
      value: function denyEvent(eventName) {
        if (!eventName) {
          return;
        }

        var index = this.listenedEventNameList.indexOf(eventName);

        if (index >= 0) {
          this.host.removeEventListener(eventName, this.eventHandler);
          this.listenedEventNameList.splice(index, 0);
        }
      }
    }]);

    return EasyMarker;
  }();

  function _arrayLikeToArray$1(arr, len) {
    if (len == null || len > arr.length) len = arr.length;

    for (var i = 0, arr2 = new Array(len); i < len; i++) {
      arr2[i] = arr[i];
    }

    return arr2;
  }

  function _arrayWithoutHoles(arr) {
    if (Array.isArray(arr)) return _arrayLikeToArray$1(arr);
  }

  function _iterableToArray(iter) {
    if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
  }

  function _unsupportedIterableToArray$1(o, minLen) {
    if (!o) return;
    if (typeof o === "string") return _arrayLikeToArray$1(o, minLen);
    var n = Object.prototype.toString.call(o).slice(8, -1);
    if (n === "Object" && o.constructor) n = o.constructor.name;
    if (n === "Map" || n === "Set") return Array.from(o);
    if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$1(o, minLen);
  }

  function _nonIterableSpread() {
    throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }

  function _toConsumableArray(arr) {
    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray$1(arr) || _nonIterableSpread();
  }

  function _arrayWithHoles(arr) {
    if (Array.isArray(arr)) return arr;
  }

  function _nonIterableRest() {
    throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }

  function _toArray(arr) {
    return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray$1(arr) || _nonIterableRest();
  }

  function _iterableToArrayLimit(arr, i) {
    var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]);

    if (_i == null) return;
    var _arr = [];
    var _n = true;
    var _d = false;

    var _s, _e;

    try {
      for (_i = _i.call(arr); !(_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"] != null) _i["return"]();
      } finally {
        if (_d) throw _e;
      }
    }

    return _arr;
  }

  function _slicedToArray(arr, i) {
    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray$1(arr, i) || _nonIterableRest();
  }

  var styleMapping = [[[HTMLImageElement, HTMLVideoElement, HTMLCanvasElement, SVGSVGElement, SVGPathElement], 'filter: invert(100%)', '-webkit-filter: invert(100%)'], [[HTMLElement], 'box-shadow: 0 0 0 999px rgba(252,248,118,0.64) inset']];

  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }

  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }

  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
  function getStyleList(ele) {
    return styleMapping.filter(function (_ref) {
      var _ref2 = _slicedToArray(_ref, 1),
          _ref2$ = _toArray(_ref2[0]),
          types = _ref2$.slice(0);

      var _iterator = _createForOfIteratorHelper(types),
          _step;

      try {
        for (_iterator.s(); !(_step = _iterator.n()).done;) {
          var type = _step.value;

          if (ele instanceof type) {
            return true;
          }
        }
      } catch (err) {
        _iterator.e(err);
      } finally {
        _iterator.f();
      }

      return false;
    }).reduce(function (results, _ref3) {
      var _ref4 = _toArray(_ref3),
          styles = _ref4.slice(1);

      results.push.apply(results, _toConsumableArray(styles));
      return results;
    }, []);
  }
  function addStyle(ele) {
    if (!ele) {
      return;
    }

    var styleList = (ele.getAttribute('style') || '').split(';');
    var hasChanged = false;

    var _iterator2 = _createForOfIteratorHelper(getStyleList(ele)),
        _step2;

    try {
      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
        var style = _step2.value;

        if (!styleList.includes(style)) {
          styleList.push(style);
          hasChanged = true;
        }
      }
    } catch (err) {
      _iterator2.e(err);
    } finally {
      _iterator2.f();
    }

    hasChanged && ele.setAttribute('style', styleList.join(';'));
  }
  function removeStyle(ele) {
    if (!ele) {
      return;
    }

    var styleList = (ele.getAttribute('style') || '').split(';').map(function (s) {
      return s.trim();
    });
    var hasChanged = false;

    var _iterator3 = _createForOfIteratorHelper(getStyleList(ele)),
        _step3;

    try {
      for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
        var style = _step3.value;
        var index = styleList.indexOf(style.trim());

        if (index >= 0) {
          styleList.splice(index, 1);
          hasChanged = true;
        }
      }
    } catch (err) {
      _iterator3.e(err);
    } finally {
      _iterator3.f();
    }

    hasChanged && ele.setAttribute('style', styleList.join(';'));
  }
  var ele = document.createElement('span');
  ele.setAttribute('style', 'display: block!important;color: black;position: absolute;background: white;padding: 2px;border-radius: 6px;top: 402.797px;left: 584px;font-size: 10px;border: 1px solid #ddd;min-width: 40px;text-align: center;z-index: 999999');
  ele['preventMark'] = true;
  function showNodeName(node) {
    var _node$getBoundingClie = node.getBoundingClientRect(),
        x = _node$getBoundingClie.left,
        y = _node$getBoundingClie.bottom;

    ele.style.top = y + 1 + document.documentElement.scrollTop + 'px';
    ele.style.left = x + 'px';
    ele.innerText = node.nodeName;
    document.body.appendChild(ele);
  }
  function hideNodeName() {
    if (ele.parentNode) {
      ele.parentNode.removeChild(ele);
    }
  }

  var events = [{
    name: 'marked',
    callback: function callback(_ref) {
      _ref.event;
          _ref.detail;
          var target = _ref.target;
      addStyle(target);
      showNodeName(target);
    },
    priority: -99
  }, {
    name: 'unmarked',
    callback: function callback(_ref2) {
      _ref2.event;
          _ref2.detail;
          var target = _ref2.target;
      removeStyle(target);
      hideNodeName();
    },
    priority: -99
  }];

  function matchShortcutKey(event, shortcutKey) {
    return _matchShortcutKey(event, parseShortcutKeyExpression(shortcutKey));
  }

  function _matchShortcutKey(event, condition) {
    return Object.entries(condition).every(function (_ref) {
      var _ref2 = _slicedToArray(_ref, 2),
          key = _ref2[0],
          value = _ref2[1];

      return event[key] === value;
    });
  }

  function parseShortcutKeyExpression(expression) {
    var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '+';
    var parts = expression.split(separator).map(function (p) {
      return p.trim();
    }).filter(function (p) {
      return p;
    });
    var targetCode = parts.pop() || 'UNKNOWN_KEY';
    var resultCondition = {
      code: targetCode
    };
    parts.forEach(function (p) {
      resultCondition[p + 'Key'] = true;
    });
    return resultCondition;
  }

  var inputEvents = [{
    name: 'keydown',
    callback: function callback(_ref) {
      var event = _ref.event;
          _ref.detail;
          var target = _ref.target;

      if (matchShortcutKey(event, 'shift + KeyT') && target instanceof HTMLInputElement && target.type === 'password') {
        target.type = 'text';
      }
    },
    global: true
  }, {
    name: 'keydown',
    callback: function callback(_ref2) {
      var event = _ref2.event;
          _ref2.detail;
          var target = _ref2.target;

      if (matchShortcutKey(event, 'shift + KeyP') && target instanceof HTMLInputElement) {
        target.type = 'password';
      }
    },
    global: true
  }];

  var deleteHistories = [];
  var removeElementEvents = [{
    name: 'keydown',
    callback: function callback(_ref) {
      var event = _ref.event;
          _ref.detail;
          var target = _ref.target,
          marker = _ref.marker;

      if (matchShortcutKey(event, 'shift + Backspace')) {
        if (target.parentNode) {
          marker.exit();

          var _Array$prototype$slic = Array.prototype.slice.call(target.parentNode.childNodes).map(function (n, i) {
            return [n, i];
          }).find(function (_ref2) {
            var _ref3 = _slicedToArray(_ref2, 1),
                n = _ref3[0];

            return n === target;
          }),
              _Array$prototype$slic2 = _slicedToArray(_Array$prototype$slic, 2),
              index = _Array$prototype$slic2[1];

          deleteHistories.push([target.parentNode, target, index]);
          target.parentNode.removeChild(target);
        }
      }
    },
    global: true
  }, {
    name: 'keydown',
    callback: function callback(_ref4) {
      var event = _ref4.event;
          _ref4.detail;
          _ref4.target;
          _ref4.marker;

      if (event.code === 'KeyZ' && (event.metaKey || event.ctrlKey)) {
        var _ref5 = deleteHistories.pop() || [],
            _ref6 = _slicedToArray(_ref5, 3),
            parent = _ref6[0],
            node = _ref6[1],
            index = _ref6[2];

        if (parent && node) {
          if (index != null) {
            var beforeNode = parent.childNodes[index];

            if (beforeNode) {
              parent.insertBefore(node, beforeNode);
              return;
            }
          }

          parent.appendChild(node);
        }
      }
    },
    global: true,
    single: true
  }];

  var editableEvents = [{
    name: 'keydown',
    callback: function callback(_ref) {
      var event = _ref.event;
          _ref.detail;
          var target = _ref.target;
          _ref.marker;

      if (matchShortcutKey(event, 'shift + KeyE')) {
        var existEditableValue = target.getAttribute('contenteditable');
        var currentEditable = existEditableValue != null && ['', 'true'].includes(existEditableValue.toLowerCase());
        var isEditable = target.isEditable;

        if (!currentEditable && !isEditable) {
          event.preventDefault();
          target.setAttribute('contenteditable', 'true');
          target.isEditable = true;
          target.preventUnmark = true;
          target.focus();
        }
      }
    },
    global: true
  }, {
    name: 'unmarked',
    callback: function callback(_ref2) {
      _ref2.event;
          _ref2.detail;
          var target = _ref2.target;
          _ref2.marker;

      if (target.isEditable) {
        target.removeAttribute('contenteditable');
        target.isEditable = false;
        target.preventUnmark = false;
      }
    }
  }];

  var focusEvents = [];

  function start() {
    var manager = new MarkerManager();
    manager.registerMarker(new MouseMoveMarker(window));
    var eventManager = new EasyMarker([manager]);
    eventManager.registerEvents(focusEvents);
    eventManager.registerEvents(events);
    eventManager.registerEvents(inputEvents);
    eventManager.registerEvents(removeElementEvents);
    eventManager.registerEvents(editableEvents);
    window.addEventListener('keydown', function (e) {
      if (['MetaLeft', 'ControlLeft'].includes(e.code)) {
        manager.start();
      } else if (e.code === 'Escape') {
        eventManager.exit();
      }
    });
    window.addEventListener('keyup', function (e) {
      if (['MetaLeft', 'ControlLeft'].includes(e.code)) {
        manager.stop();
      }
    });
    window.addEventListener('mouseout', function (e) {
      if (manager.canEnd && e.target['isMarked']) {
        manager.end();
      }
    });
  }

  exports.EasyMarker = EasyMarker;
  exports.start = start;

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

})));


if (window.easymark) {
    window.easymark.start();
}