GlobalTools

挂载到window下一级属性集合-常用工具函数

目前為 2023-12-14 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         GlobalTools
// @namespace    http://tampermonkey.net/
// @version      0.2.2
// @description  挂载到window下一级属性集合-常用工具函数
// @author       Enjoy
// @match        *://*/*
// @match        file:///*
// @homepage      https://greasyfork.org/zh-CN/scripts/468302-%E5%B7%A5%E5%85%B7%E5%87%BD%E6%95%B0tls
// @license MIT
// @icon         https://foruda.gitee.com/avatar/1698283059572409586/4867929_enjoy_li_1698283059.png!avatar200
// @grant        none
// ==/UserScript==

/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ 61:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var _typeof = (__webpack_require__(698)["default"]);
function _regeneratorRuntime() {
  "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
  module.exports = _regeneratorRuntime = function _regeneratorRuntime() {
    return e;
  }, module.exports.__esModule = true, module.exports["default"] = module.exports;
  var t,
    e = {},
    r = Object.prototype,
    n = r.hasOwnProperty,
    o = Object.defineProperty || function (t, e, r) {
      t[e] = r.value;
    },
    i = "function" == typeof Symbol ? Symbol : {},
    a = i.iterator || "@@iterator",
    c = i.asyncIterator || "@@asyncIterator",
    u = i.toStringTag || "@@toStringTag";
  function define(t, e, r) {
    return Object.defineProperty(t, e, {
      value: r,
      enumerable: !0,
      configurable: !0,
      writable: !0
    }), t[e];
  }
  try {
    define({}, "");
  } catch (t) {
    define = function define(t, e, r) {
      return t[e] = r;
    };
  }
  function wrap(t, e, r, n) {
    var i = e && e.prototype instanceof Generator ? e : Generator,
      a = Object.create(i.prototype),
      c = new Context(n || []);
    return o(a, "_invoke", {
      value: makeInvokeMethod(t, r, c)
    }), a;
  }
  function tryCatch(t, e, r) {
    try {
      return {
        type: "normal",
        arg: t.call(e, r)
      };
    } catch (t) {
      return {
        type: "throw",
        arg: t
      };
    }
  }
  e.wrap = wrap;
  var h = "suspendedStart",
    l = "suspendedYield",
    f = "executing",
    s = "completed",
    y = {};
  function Generator() {}
  function GeneratorFunction() {}
  function GeneratorFunctionPrototype() {}
  var p = {};
  define(p, a, function () {
    return this;
  });
  var d = Object.getPrototypeOf,
    v = d && d(d(values([])));
  v && v !== r && n.call(v, a) && (p = v);
  var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
  function defineIteratorMethods(t) {
    ["next", "throw", "return"].forEach(function (e) {
      define(t, e, function (t) {
        return this._invoke(e, t);
      });
    });
  }
  function AsyncIterator(t, e) {
    function invoke(r, o, i, a) {
      var c = tryCatch(t[r], t, o);
      if ("throw" !== c.type) {
        var u = c.arg,
          h = u.value;
        return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
          invoke("next", t, i, a);
        }, function (t) {
          invoke("throw", t, i, a);
        }) : e.resolve(h).then(function (t) {
          u.value = t, i(u);
        }, function (t) {
          return invoke("throw", t, i, a);
        });
      }
      a(c.arg);
    }
    var r;
    o(this, "_invoke", {
      value: function value(t, n) {
        function callInvokeWithMethodAndArg() {
          return new e(function (e, r) {
            invoke(t, n, e, r);
          });
        }
        return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
      }
    });
  }
  function makeInvokeMethod(e, r, n) {
    var o = h;
    return function (i, a) {
      if (o === f) throw new Error("Generator is already running");
      if (o === s) {
        if ("throw" === i) throw a;
        return {
          value: t,
          done: !0
        };
      }
      for (n.method = i, n.arg = a;;) {
        var c = n.delegate;
        if (c) {
          var u = maybeInvokeDelegate(c, n);
          if (u) {
            if (u === y) continue;
            return u;
          }
        }
        if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
          if (o === h) throw o = s, n.arg;
          n.dispatchException(n.arg);
        } else "return" === n.method && n.abrupt("return", n.arg);
        o = f;
        var p = tryCatch(e, r, n);
        if ("normal" === p.type) {
          if (o = n.done ? s : l, p.arg === y) continue;
          return {
            value: p.arg,
            done: n.done
          };
        }
        "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
      }
    };
  }
  function maybeInvokeDelegate(e, r) {
    var n = r.method,
      o = e.iterator[n];
    if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
    var i = tryCatch(o, e.iterator, r.arg);
    if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
    var a = i.arg;
    return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
  }
  function pushTryEntry(t) {
    var e = {
      tryLoc: t[0]
    };
    1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
  }
  function resetTryEntry(t) {
    var e = t.completion || {};
    e.type = "normal", delete e.arg, t.completion = e;
  }
  function Context(t) {
    this.tryEntries = [{
      tryLoc: "root"
    }], t.forEach(pushTryEntry, this), this.reset(!0);
  }
  function values(e) {
    if (e || "" === e) {
      var r = e[a];
      if (r) return r.call(e);
      if ("function" == typeof e.next) return e;
      if (!isNaN(e.length)) {
        var o = -1,
          i = function next() {
            for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
            return next.value = t, next.done = !0, next;
          };
        return i.next = i;
      }
    }
    throw new TypeError(_typeof(e) + " is not iterable");
  }
  return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
    value: GeneratorFunctionPrototype,
    configurable: !0
  }), o(GeneratorFunctionPrototype, "constructor", {
    value: GeneratorFunction,
    configurable: !0
  }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
    var e = "function" == typeof t && t.constructor;
    return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
  }, e.mark = function (t) {
    return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
  }, e.awrap = function (t) {
    return {
      __await: t
    };
  }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
    return this;
  }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
    void 0 === i && (i = Promise);
    var a = new AsyncIterator(wrap(t, r, n, o), i);
    return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
      return t.done ? t.value : a.next();
    });
  }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
    return this;
  }), define(g, "toString", function () {
    return "[object Generator]";
  }), e.keys = function (t) {
    var e = Object(t),
      r = [];
    for (var n in e) r.push(n);
    return r.reverse(), function next() {
      for (; r.length;) {
        var t = r.pop();
        if (t in e) return next.value = t, next.done = !1, next;
      }
      return next.done = !0, next;
    };
  }, e.values = values, Context.prototype = {
    constructor: Context,
    reset: function reset(e) {
      if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
    },
    stop: function stop() {
      this.done = !0;
      var t = this.tryEntries[0].completion;
      if ("throw" === t.type) throw t.arg;
      return this.rval;
    },
    dispatchException: function dispatchException(e) {
      if (this.done) throw e;
      var r = this;
      function handle(n, o) {
        return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
      }
      for (var o = this.tryEntries.length - 1; o >= 0; --o) {
        var i = this.tryEntries[o],
          a = i.completion;
        if ("root" === i.tryLoc) return handle("end");
        if (i.tryLoc <= this.prev) {
          var c = n.call(i, "catchLoc"),
            u = n.call(i, "finallyLoc");
          if (c && u) {
            if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
            if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
          } else if (c) {
            if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
          } else {
            if (!u) throw new Error("try statement without catch or finally");
            if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
          }
        }
      }
    },
    abrupt: function abrupt(t, e) {
      for (var r = this.tryEntries.length - 1; r >= 0; --r) {
        var o = this.tryEntries[r];
        if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
          var i = o;
          break;
        }
      }
      i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
      var a = i ? i.completion : {};
      return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
    },
    complete: function complete(t, e) {
      if ("throw" === t.type) throw t.arg;
      return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
    },
    finish: function finish(t) {
      for (var e = this.tryEntries.length - 1; e >= 0; --e) {
        var r = this.tryEntries[e];
        if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
      }
    },
    "catch": function _catch(t) {
      for (var e = this.tryEntries.length - 1; e >= 0; --e) {
        var r = this.tryEntries[e];
        if (r.tryLoc === t) {
          var n = r.completion;
          if ("throw" === n.type) {
            var o = n.arg;
            resetTryEntry(r);
          }
          return o;
        }
      }
      throw new Error("illegal catch attempt");
    },
    delegateYield: function delegateYield(e, r, n) {
      return this.delegate = {
        iterator: values(e),
        resultName: r,
        nextLoc: n
      }, "next" === this.method && (this.arg = t), y;
    }
  }, e;
}
module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;

/***/ }),

/***/ 698:
/***/ ((module) => {

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

  return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
    return typeof o;
  } : function (o) {
    return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
  }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(o);
}
module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;

/***/ }),

/***/ 687:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// TODO(Babel 8): Remove this file.

var runtime = __webpack_require__(61)();
module.exports = runtime;

// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=
try {
  regeneratorRuntime = runtime;
} catch (accidentalStrictMode) {
  if (typeof globalThis === "object") {
    globalThis.regeneratorRuntime = runtime;
  } else {
    Function("r", "regeneratorRuntime = r")(runtime);
  }
}


/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
(() => {
"use strict";

;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
  try {
    var info = gen[key](arg);
    var value = info.value;
  } catch (error) {
    reject(error);
    return;
  }
  if (info.done) {
    resolve(value);
  } else {
    Promise.resolve(value).then(_next, _throw);
  }
}
function _asyncToGenerator(fn) {
  return function () {
    var self = this,
      args = arguments;
    return new Promise(function (resolve, reject) {
      var gen = fn.apply(self, args);
      function _next(value) {
        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
      }
      function _throw(err) {
        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
      }
      _next(undefined);
    });
  };
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js
function _typeof(o) {
  "@babel/helpers - typeof";

  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
    return typeof o;
  } : function (o) {
    return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
  }, _typeof(o);
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toPrimitive.js

function _toPrimitive(input, hint) {
  if (_typeof(input) !== "object" || input === null) return input;
  var prim = input[Symbol.toPrimitive];
  if (prim !== undefined) {
    var res = prim.call(input, hint || "default");
    if (_typeof(res) !== "object") return res;
    throw new TypeError("@@toPrimitive must return a primitive value.");
  }
  return (hint === "string" ? String : Number)(input);
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js


function _toPropertyKey(arg) {
  var key = _toPrimitive(arg, "string");
  return _typeof(key) === "symbol" ? key : String(key);
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js

function _defineProperty(obj, key, value) {
  key = _toPropertyKey(key);
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
  } else {
    obj[key] = value;
  }
  return obj;
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js
function _arrayWithHoles(arr) {
  if (Array.isArray(arr)) return arr;
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js
function _iterableToArrayLimit(r, l) {
  var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
  if (null != t) {
    var e,
      n,
      i,
      u,
      a = [],
      f = !0,
      o = !1;
    try {
      if (i = (t = t.call(r)).next, 0 === l) {
        if (Object(t) !== t) return;
        f = !1;
      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
    } catch (r) {
      o = !0, n = r;
    } finally {
      try {
        if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
      } finally {
        if (o) throw n;
      }
    }
    return a;
  }
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js
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;
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js

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);
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js
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.");
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js




function _slicedToArray(arr, i) {
  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js

function _arrayWithoutHoles(arr) {
  if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js
function _iterableToArray(iter) {
  if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js
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.");
}
;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js




function _toConsumableArray(arr) {
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
// EXTERNAL MODULE: ./node_modules/@babel/runtime/regenerator/index.js
var regenerator = __webpack_require__(687);
var regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);
;// CONCATENATED MODULE: ./src/GlobalTools.js






function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = GlobalTools_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 GlobalTools_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return GlobalTools_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 GlobalTools_arrayLikeToArray(o, minLen); }
function GlobalTools_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 ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }

run(window);
function run(win) {
  // getLogObjectValue(['$0', 'temp1'])
  windowProxy();
  var tools = {
    backPrototype: backPrototype,
    createPlainFile: createPlainFile,
    getRegMobile: getRegMobile,
    phoneFormat: phoneFormat,
    getRegName: getRegName,
    getRegEmail: getRegEmail,
    getRegIDCard: getRegIDCard,
    getQuery: getQuery,
    toSearch: toSearch,
    transformThousandth: transformThousandth,
    deleteProperty: deleteProperty,
    asyncRequire: asyncRequire,
    transformData: transformData,
    previewFile: previewFile,
    dateUtil: dateUtil,
    toWithOpener: toWithOpener,
    downloadFile: downloadFile,
    base64ToBlob: base64ToBlob,
    base64ImgtoFile: base64ImgtoFile,
    isHasBtnPower: isHasBtnPower,
    getBrowerEnv: getBrowerEnv,
    formatReportDataToStr: formatReportDataToStr,
    copyStrToClipboard: copyStrToClipboard,
    getPropertiesOfObj: getPropertiesOfObj,
    lgd: lgd,
    lgd0: lgd0,
    lgdt1: lgdt1,
    getPrototypeChainOfObject: getPrototypeChainOfObject,
    getLogObjectValue: getLogObjectValue
  };
  function getPrototypeChainOfObject(Obj) {
    /** @描述 对象原型链 */

    var idx = 0;
    var str = "".concat(Obj.name || '参数', "\u7684\u539F\u578B\u94FE\u662F\uFF1A ");
    next(Obj);
    return str;

    /** @描述 递归 */
    function next(obj) {
      var _ObjType$match;
      var ObjType = Object.toLocaleString.call(obj);
      var ObjFlag = ((_ObjType$match = ObjType.match(/^\[object ([a-zA-Z]+)\]/)) === null || _ObjType$match === void 0 ? void 0 : _ObjType$match[1]) || _typeof(ObjType);
      str += "\u7B2C ".concat(idx, " \u7EA7\u3010").concat(ObjFlag, "\u3011.__proto__ \u25B6\uFE0F ");
      idx++;
      if (obj.__proto__) {
        next(obj.__proto__);
      } else {
        str += "\u7B2C ".concat(idx, " \u7EA7\u3010null\u3011");
      }
    }
  }
  function lgdt1() {
    var _console;
    for (var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {
      rest[_key] = arguments[_key];
    }
    /** @描述 以对象形式打印 $0 */
    (_console = console).log.apply(_console, ["temp1 ==%O", temp1].concat(rest));
  }
  function lgd() {
    var _console3;
    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
      args[_key2] = arguments[_key2];
    }
    /** @描述 以对象形式打印 temp1 */

    var desc = args[0],
      rest = args.slice(1);
    if (rest.length && typeof desc === 'string') {
      var _console2;
      return (_console2 = console).log.apply(_console2, ["".concat(desc, " %O")].concat(_toConsumableArray(rest)));
    }
    (_console3 = console).log.apply(_console3, ["%O"].concat(args));
  }
  function lgd0() {
    var _console4;
    for (var _len3 = arguments.length, rest = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
      rest[_key3] = arguments[_key3];
    }
    /** @描述 以对象形式打印 $0 */
    (_console4 = console).log.apply(_console4, ["$0 ==%O", $0].concat(rest));
  }
  function backPrototype(resourceObj) {
    /**
     * @description 对象原型链:继承谁的属性和方法
     * @param {*} resourceObj
     * @returns {*} string
     */

    var str = '';
    next(resourceObj);
    str = str + 'null';
    console.log("%c \u8BE5\u5BF9\u8C61\u539F\u578B\u94FE\u662F\uFF1A", 'color:red', str);
    return str;
    function next(obj) {
      var _ObjType$match2;
      var ObjType = Object.toLocaleString.call(obj);
      var ObjFlag = ((_ObjType$match2 = ObjType.match(/^\[object ([a-zA-Z]+)\]/)) === null || _ObjType$match2 === void 0 ? void 0 : _ObjType$match2[1]) || '无';
      str = str + ObjFlag + ' + .__proto__ >> ';
      if (obj.__proto__) {
        next(obj.__proto__);
      }
    }
  }
  function createPlainFile() {
    var content = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
      a: 'a'
    };
    var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'name';
    /**
     * @description 创建文本文件
     * @param {string} [content={ a: 'a' }]
     * @param {string} [name='name']
     */

    // 下载保存json文件
    var eleLink = document.createElement('a');
    eleLink.download = name + '.json';
    // 字符内容转变成blob地址
    var data = JSON.stringify(content, undefined, 4);
    var blob = new Blob([data], {
      type: 'text/json'
    });
    eleLink.href = URL.createObjectURL(blob);
    // 触发点击
    eleLink.click();
    // 然后移除
  }

  function getRegMobile() {
    /** @描述 正则 - 手机号 */
    return /^1[2|3|4|5|6|7|8|9][\d]{9}$/;
  }
  function phoneFormat() {
    var phone = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
    /** @描述 格式化 - 手机号 */
    if (!phone || !/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(phone)) return;
    phone = phone.replace(/\D/g, '').slice(0, 11);
    phone = phone.replace(/^(\d{3})/, '$1  ').replace(/(\d{4})/, '$1  ').replace(/[\s]+$/, '');
    return phone;
  }
  function getRegName() {
    /** @描述 正则 - 姓名 */

    return /^[0-9|A-Za-z|\u4e00-\u9fa5|\s]+$/;
  }
  function getRegEmail() {
    /** @描述 正则 - 邮箱 */

    return /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i;
  }
  function getRegIDCard() {
    /** @描述 正则 - 大陆身份证号码 */
    return /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
  }
  function getQuery() {
    var search = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.location.search;
    /** @描述 获取 url 参数 */

    var query = {};
    search.substr(1).split('&').forEach(function (str) {
      var strArr = str.split('=');
      var key = strArr[0];
      if (!key) return;
      var val = decodeURIComponent(strArr[1]);
      try {
        val = JSON.parse(val);
      } catch (err) {}
      query[key] = val;
    });
    return query;
  }
  function toSearch() {
    var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
    /** @描述 转换成 url search */
    var arr = Object.keys(obj).map(function (key) {
      var val = obj[key];
      if (typeof val !== 'string') {
        try {
          val = JSON.stringify(val);
        } catch (err) {
          console.error(err);
        }
      }
      return "".concat(key, "=").concat(encodeURIComponent(val));
    });
    return '?' + arr.join('&');
  }
  function transformThousandth(value, fixed) {
    /**
     * 格式化金额 千分符
     * @param value
     * @param fixed
     */

    var needFixed = fixed != null;
    var num = Number(value);
    if (isNaN(num)) {
      return needFixed ? 0 .toFixed(fixed) : '0';
    }
    // return (needFixed ? num.toFixed(fixed) : num.toString()).replace(/(\d{1,3})(?=(\d{3})+(?:$|\.))/g, '$1,')
    var str = needFixed ? num.toFixed(fixed) : num.toString();
    var arr = str.split('.');
    var result = arr[0] ? arr[0].replace(/(?=(?!\b)(\d{3})+$)/g, ',') : '0';
    if (arr[1] != null) {
      result += ".".concat(arr[1]);
    }
    return result;
  }
  function deleteProperty() {
    var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
    var v = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [undefined, null, ''];
    /**
     * 删除指定值的属性
     * @param obj
     */

    var res = {};
    var isArray = Array.isArray(v);
    for (var key in obj) {
      if (isArray) {
        if (!v.includes(obj[key])) res[key] = obj[key];
      } else {
        if (obj[key] !== v) res[key] = obj[key];
      }
    }
    return res;
  }
  function asyncRequire(url, name, type) {
    /**
     * 通过插入标签以加载 js/css 文件
     * @param {String} url 需要载入的 js/css url
     * @param {String} name 文件载入后挂载到 window 下的变量名
     * @param {String} type 文件类型 默认取后缀名
     */

    return new Promise(function (resolve, reject) {
      var head = document.head || document.getElementsByTagName('head')[0] || document.body;
      var filePath = url.split('?')[0];
      var ext = filePath.substring(filePath.lastIndexOf('.') + 1);
      if (document.getElementById("async-require-".concat(name || 'unknown'))) {
        return resolve(name ? window[name] : 'loaded');
      }
      var element;
      if (ext == 'js' || type == 'js') {
        element = document.createElement('script');
        element.src = url;
        element.onload = function (e) {
          return resolve(name ? window[name] : e);
        };
      } else if (ext == 'css' || type == 'css') {
        element = document.createElement('link');
        element.rel = 'stylesheet';
        element.type = 'text/css';
        element.href = url;
        element.onload = resolve;
      } else {
        return console.warn('好像有点不对劲...请指定文件类型: js | css');
      }
      element.id = "async-require-".concat(name);
      element.onerror = reject;
      head.appendChild(element);
    });
  }
  function transformData(sourceData, relation) {
    /**
     * 返回数据
     * @param {Array} sourceData 原数组
     * @param {Array} 映射字段
     */

    return sourceData.map(function (item) {
      var _relation = _slicedToArray(relation, 2),
        key = _relation[0],
        name = _relation[1];
      return {
        label: item[name],
        value: item[key]
      };
    });
  }
  function previewFile(fileUrl) {
    /**
     * 在线预览文件
     * @param  {String}  fileUrl  静态资源地址
     */

    var link = document.createElement('a');
    link.href = fileUrl;
    var ext = (link.pathname.split('.')[1] || '').toLowerCase();
    var allowedExt = {
      bmp: 1,
      gif: 1,
      jpg: 1,
      jpeg: 1,
      png: 1,
      apng: 1,
      webp: 1,
      htm: 1,
      html: 1,
      pdf: 1
    };
    if (ext && allowedExt[ext]) {
      var _window;
      var url = "https://static.hrwork.com/tools/pdfviewer/index.html?file=".concat(encodeURIComponent(fileUrl));
      if ((_window = window) !== null && _window !== void 0 && _window.__ZPA_CRX) {
        return void dispatchEvent(new CustomEvent('$create_tab', {
          detail: url
        }));
      }
      window.open(url);
    } else {
      alert("\u4E0D\u652F\u6301\u5728\u7EBF\u9884\u89C8\u6B64\u7C7B\u578B(".concat(ext !== null && ext !== void 0 ? ext : '', ")\u6587\u4EF6"));
    }
  }
  function dateUtil() {
    var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();
    /**
     * 获取特定格式日期
     * date: 可以为日期字符串、日期对象,不传参数默认当前系统时间
     * format: 输出日期时间格式, 不传参数默认 YYYY-MM-DD HH:mm:ss 格式
     * 例:
     * dateUtil().format()
     * // 2022-06-16 11:56:02
     *
     * // 不传入日期,默认以当前日期,格式化为特定格式日期
     * dateUtil().format('YYYY年MM月DD日 (周W) HH时mm分ss秒')
     * // 2022年06月16日 (周四) 12时01分51秒
     *
     * // 传入指定日期(string | date),格式化为指定格式日期(string)
     * dateUtil('2015.7.12').format('YYYY年MM月DD日 HH时mm秒ss分 星期W')
     * // 2015年07月12日 00时00分00秒 星期三
     */

    time = typeof time === 'string' ? time.replace(/-/g, '/') : time;
    var date = isNaN(new Date(time)) ? time : new Date(time);
    return {
      date: date,
      format: format
    };
    function format() {
      var rule = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'YYYY-MM-DD HH:mm:ss';
      var weeks = ['日', '一', '二', '三', '四', '五', '六'];
      var padStart = function padStart(d) {
        return (d + '').padStart(2, '0');
      };
      var M = date.getMonth() + 1 + '';
      var D = date.getDate() + '';
      var H = date.getHours() + '';
      var m = date.getMinutes() + '';
      var s = date.getSeconds() + '';
      return rule.replace('YYYY', date.getFullYear()).replace('MM', padStart(M)).replace('M', M).replace('DD', padStart(D)).replace('D', D).replace('HH', padStart(H)).replace('H', H).replace('mm', padStart(m)).replace('m', m).replace('ss', padStart(s)).replace('s', s).replace(/W/, weeks[date.getDay()]).replace(/w/, date.getDay());
    }
  }
  function toWithOpener(href) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    /**
     * 共享opener跳转
     * @param { Object } router  如:
     * @param { Object } options  如:
     */

    var _options$target = options.target,
      target = _options$target === void 0 ? '_blank' : _options$target,
      routes = options.routes;
    var win = window.open(href, target);
    // 设置新打开页面的面包屑
    if (routes && Array.isArray(routes)) {
      var cloneRoutes = _toConsumableArray(routes);
      cloneRoutes.shift();
      cloneRoutes[cloneRoutes.length - 1] = _objectSpread(_objectSpread({}, cloneRoutes[cloneRoutes.length - 1]), {}, {
        a: true,
        path: '/zhaopintong/' + location.hash
      });
      win.sessionStorage.parent_routes = JSON.stringify(cloneRoutes);
    }
    return win;
  }
  function downloadFile(href) {
    var fileName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
    /**
     * 通过url一键下载图片
     * @param { String } href  如:
     * @param { String } fileName  如:
     */

    if (!href) {
      return;
    }
    var aLink = document.createElement('a');
    aLink.download = fileName + Date.now();
    aLink.href = href;
    aLink.click();
  }
  function base64ToBlob(base64Code) {
    /**
     * base64转Blob对象
     * @param { String } code  如:
     */

    var parts = base64Code.split(';base64,');
    var contentType = parts[0].split(':')[1];
    var raw = window.atob(parts[1]);
    var rawLength = raw.length;
    var uint8Array = new Uint8Array(rawLength);
    for (var i = 0; i < rawLength; i++) {
      uint8Array[i] = raw.charCodeAt(i);
    }
    return new Blob([uint8Array], {
      type: contentType
    });
  }
  function base64ImgtoFile(base64Code) {
    var filename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'file';
    /**
     * base64转文件对象
     * @param { String } base64Code  如:
     * @param { String } filename  如:
     */

    var arr = base64Code.split(',');
    var mime = arr[0].match(/:(.*?);/)[1];
    var suffix = mime.split('/')[1];
    var bstr = atob(arr[1]);
    var n = bstr.length;
    var u8arr = new Uint8Array(n);
    while (n--) {
      u8arr[n] = bstr.charCodeAt(n);
    }
    return new File([u8arr], "".concat(filename, ".").concat(suffix), {
      type: mime
    });
  }
  function isHasBtnPower() {
    var powerList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
    var code = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
    /**
     * @description 判断角色是否有页面级按钮的权限
     * @param {*} [powerList=[]]
     * @param {string} [code='']
     * @returns {*}  {boolean}
     */

    if (!code) return false;
    if (typeof code === 'string') code = [code];
    var _iterator = _createForOfIteratorHelper(code),
      _step;
    try {
      for (_iterator.s(); !(_step = _iterator.n()).done;) {
        var _powerList$includes;
        var value = _step.value;
        if (powerList !== null && powerList !== void 0 && (_powerList$includes = powerList.includes) !== null && _powerList$includes !== void 0 && _powerList$includes.call(powerList, value)) return true;
      }
    } catch (err) {
      _iterator.e(err);
    } finally {
      _iterator.f();
    }
    return false;
  }
  function getBrowerEnv() {
    /** @描述 判断当前浏览器运行环境 */

    var userAgent = window.navigator.userAgent.toLowerCase();
    var agents = ['Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod'];
    // 是否为支付宝环境
    var isAliPay = /alipayclient/.test(userAgent);
    // 是否为淘宝环境
    var isTaoBao = /windvane/.test(userAgent);
    // 是否为企业微信环境
    var isWxWork = /wxwork/.test(userAgent);
    // 是否为微信环境
    var isWeChat = /micromessenger/.test(userAgent) && !isWxWork;
    // 是否为移动端
    var isPhone = agents.some(function (x) {
      return new RegExp(x.toLocaleLowerCase()).test(userAgent);
    });
    return {
      isAliPay: isAliPay,
      isTaoBao: isTaoBao,
      isWxWork: isWxWork,
      isWeChat: isWeChat,
      isPhone: isPhone
    };
  }

  //
  function formatReportDataToStr() {
    var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
    var headerLabel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
    /** @描述 格式化报表数据拼接成字符串,以便复制到剪贴板 */

    return arr.reduce(function (pre, cur) {
      return pre + headerLabel.reduceRight(function (pre2, cur2) {
        return "".concat(cur[cur2.key], "\t").concat(pre2);
      }, '\n');
    }, headerLabel.reduceRight(function (pre, cur) {
      return "".concat(cur.title, "\t").concat(pre);
    }, '\n'));
  }
  function copyStrToClipboard(value) {
    /** @描述 把字符串复制到剪贴板 */

    var textarea = document.createElement('textarea');
    textarea.value = value;
    document.body.appendChild(textarea);
    textarea.select();
    document.execCommand('Copy');
    document.body.removeChild(textarea);
  }
  function copyStrToClipboardOfNavigator(_x) {
    return _copyStrToClipboardOfNavigator.apply(this, arguments);
  }
  function _copyStrToClipboardOfNavigator() {
    _copyStrToClipboardOfNavigator = _asyncToGenerator( /*#__PURE__*/regenerator_default().mark(function _callee(value) {
      return regenerator_default().wrap(function _callee$(_context) {
        while (1) switch (_context.prev = _context.next) {
          case 0:
            _context.next = 2;
            return navigator.clipboard.writeText(value);
          case 2:
            return _context.abrupt("return", _context.sent);
          case 3:
          case "end":
            return _context.stop();
        }
      }, _callee);
    }));
    return _copyStrToClipboardOfNavigator.apply(this, arguments);
  }
  function getPropertiesOfObj(_ref) {
    var _ref$obj = _ref.obj,
      obj = _ref$obj === void 0 ? {} : _ref$obj,
      _ref$keys = _ref.keys,
      keys = _ref$keys === void 0 ? [] : _ref$keys;
    /**
     * @描述 获取对象的指定属性集合
     * @param {*} { obj = {}, keys = [] }
     * @returns {*}
     */

    var newObj = {};
    keys.forEach(function (key) {
      newObj[key] = obj[key];
    });
    return newObj;
  }

  /** @描述 定义以对象形式 获取window属性值 */
  function getLogObjectValue(arr) {
    var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
    var suffix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '_o';
    var win2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : win;
    /** @描述 定义以对象形式 获取window属性值 */
    arr.forEach(function (newKey) {
      Object.defineProperty(win2, "".concat(newKey), {
        get: function get() {
          console.log('%O', win2[newKey]);
          return win2[newKey];
        }
      });
    });
  }

  /** @描述 代理window,读取属性时,即打印对象 */
  function windowProxy() {
    var win2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : win;
    /** @描述 代理window,读取属性时,即打印对象 */
    var result;
    win2.enjoy_wp = new Proxy(win2, {
      get: function get(obj, prop) {
        result = obj[prop];
        console.log("\uD83C\uDF8F ".concat(prop, "=%O"), result);
        return result;
      }
    });
  }
  if (win.enjoy_tl) {
    console.error('win.enjoy_tl已经存在,请使用win.enjoy_tls');
    if (!win.enjoy_tls) win.enjoy_tls = tools;
    return;
  }
  win.enjoy_tl = tools;
  Object.defineProperty(tools, 'fns', {
    /** @描述 对象下的函数名列表 */get: function get() {
      return Object.keys(tools);
    }
  });
}
})();

/******/ })()
;