// ==UserScript==
// @name         boss外包公司提示
// @namespace    https://github.com/bosens-China/boss-outsourcing-tips
// @version      1.0.3
// @description  boss招聘对外包公司显式提醒
// @author       yliu
// @match        https://www.zhipin.com/job_detail/*
// @match        http://www.zhipin.com/job_detail/*
// @grant        none
// @license      MIT
// @downloadURL none
// ==/UserScript==
(function () {
  'use strict';
  const blacklist$1 = [
    "\u535A\u6717\u8F6F\u4EF6",
    "\u4E2D\u8F6F\u56FD\u9645",
    "\u4E1C\u8F6F\u96C6\u56E2",
    "\u535A\u5F66\u79D1\u6280",
    "\u4E2D\u7535\u91D1\u4FE1",
    "\u6CD5\u672C\u4FE1\u606F",
    "\u6D59\u5927\u7F51\u65B0",
    "\u5965\u535A\u6770\u5929",
    "\u6D6A\u6F6E",
    "\u8F6F\u901A\u52A8\u529B",
    "\u798F\u745E\u535A\u5FB7",
    "\u4FE1\u5FC5\u4F18",
    "\u5927\u5C55\u79D1\u6280",
    "\u6052\u751F\u7535\u5B50",
    "\u65E5\u7535\u5353\u8D8A\u8F6F\u4EF6",
    "\u5927\u8FDE\u534E\u4FE1",
    "\u4E2D\u548C\u8F6F\u4EF6",
    "\u65B0\u81F4\u8F6F\u4EF6",
    "\u827E\u65AF\u514B\u96F7",
    "\u6D77\u9686\u8F6F\u4EF6",
    "\u5927\u5B87\u5B99\u4FE1\u606F",
    "\u665F\u5CF0\u8F6F\u4EF6",
    "\u5BCC\u58EB\u901A\u4FE1\u606F",
    "NTTDATA",
    "\u5B8F\u667A\u79D1\u6280",
    "\u795E\u5DDE\u6570\u7801\u901A\u7528\u8F6F\u4EF6",
    "\u51CC\u5FD7\u8F6F\u4EF6",
    "\u97F3\u6CF0\u601D",
    "\u5FAE\u521B\u8F6F\u4EF6",
    "\u5F00\u76EE\u4F70\u94A7\u6210",
    "\u6D69\u9CB8\u667A\u80FD",
    "\u8BDA\u8FC8\u79D1\u6280",
    "\u6DA6\u548C\u8F6F\u4EF6",
    "ST \u65B0\u6D77",
    "\u6167\u535A\u4E91\u901A",
    "\u5929\u6E90\u8FEA\u79D1",
    "\u4E0A\u6D77\u601D\u82AE",
    "\u5854\u5854"
  ];
  const KeyWords = [
    "\u89E3\u51B3\u65B9\u6848",
    "\u6280\u672F\u670D\u52A1",
    "\u9A7B\u573A",
    "\u51FA\u5DEE",
    "\u73B0\u573A",
    "\u6D3E\u9063",
    "\u56FD\u5185\u9886\u5148",
    "\u670D\u52A1\u63D0\u4F9B\u5546",
    "\u6570\u5B57\u5316\u8F6C\u578B",
    "\u5B9A\u5236\u5316\u7CFB\u7EDF",
    "\u4E00\u7AD9\u5F0F\u670D\u52A1",
    "\u4E3A\u5BA2\u6237\u63D0\u4F9B",
    "\u4E00\u4F53\u5316",
    "\u664B\u5347\u9014\u5F84",
    "\u5DE5\u4F5C\u5730\u70B9",
    "\u5916\u6D3E",
    "od",
    "\u5B66\u4FE1\u7F51"
  ];
  const traverse = (dom, fn) => {
    const arr = Array.from(dom.childNodes);
    arr.forEach((item) => {
      if (item.nodeType === Node.ELEMENT_NODE) {
        traverse(item, fn);
        return;
      }
      fn(item);
    });
  };
  const keyWords = () => {
    const selectors = [
      ".info-primary h1",
      ".job-detail-section .job-sec-text",
      ".job-detail-company .job-sec-text"
    ];
    const store = /* @__PURE__ */ new Set();
    const effect = (el) => {
      var _a;
      if (el.nodeType !== Node.TEXT_NODE) {
        return;
      }
      let content = el.textContent || "";
      KeyWords.forEach((k) => {
        const reg = new RegExp(k, "ig");
        if (!reg.test(content)) {
          return;
        }
        const str = reg.source;
        store.add(str);
        content = content.replace(reg, `${k}`);
      });
      if (content === el.textContent) {
        return;
      }
      const fragment = document.createDocumentFragment();
      const span = document.createElement("span");
      span.innerHTML = content;
      while (span.firstChild) {
        fragment.appendChild(span.firstChild);
      }
      (_a = el.parentNode) == null ? void 0 : _a.replaceChild(fragment, el);
    };
    selectors.forEach((text) => {
      const dom = document.body.querySelector(text);
      if (!dom) {
        return;
      }
      traverse(dom, effect);
    });
    if (!store.size) {
      return true;
    }
    return {
      grade: store.size === 1 ? 0 : 1,
      text: `\u8BE5\u5C97\u4F4D\u63CF\u8FF0\u7B26\u5408\u5916\u5305\u5B9A\u4E49\uFF0C\u51FA\u73B0\u4E86\uFF1A
${[...store].map((item, index) => {
      return `${index + 1}. ${item}`;
    }).join("\n")}`
    };
  };
  const blacklist = () => {
    const dom = document.body.querySelector(
      `a[ka="job-detail-company_custompage"]`
    );
    if (!dom) {
      return true;
    }
    const content = dom.textContent || "";
    let text = "";
    const frequency = blacklist$1.some((KeyWord) => {
      if (content.includes(KeyWord)) {
        text = `\u516C\u53F8\u540D\u79F0\u4E3A\u5916\u5305\uFF1A${KeyWord}`;
        dom.style.color = "red";
        return true;
      }
      return false;
    });
    if (!frequency) {
      return true;
    }
    return { grade: 1, text };
  };
  class Chain {
    constructor(fn) {
      this.fn = fn;
    }
    next() {
      const result2 = this.fn();
      if (result2 === true && this.chain) {
        return this.chain.next.apply(this.chain);
      }
      return result2;
    }
    setNext(chain) {
      this.chain = chain;
      return chain;
    }
  }
  const chainKeyWords = new Chain(keyWords);
  const chainBlacklist = new Chain(blacklist);
  chainBlacklist.setNext(chainKeyWords);
  const result = chainBlacklist.next();
  var n$1,l$1,u$1,s$1=[];function y$1(l,u,t){var i,o,r,f={};for(r in u)"key"==r?i=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n$1.call(arguments,2):t),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return d$1(l,f,i,o,null)}function d$1(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==r?++u$1:r};return null==r&&null!=l$1.vnode&&l$1.vnode(f),f}function k$1(n){return n.children}n$1=s$1.slice,l$1={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l;}throw n}},u$1=0,"function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout;
  var _$1=0;function o$1(o,e,n,t,f,l){var s,u,a={};for(u in e)"ref"==u?s=e[u]:a[u]=e[u];var i={type:o,props:a,key:n,ref:s,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:--_$1,__source:f,__self:l};if("function"==typeof o&&(s=o.defaultProps))for(u in s)void 0===a[u]&&(a[u]=s[u]);return l$1.vnode&&l$1.vnode(i),i}
  var o=/[\s\n\\/='"\0<>]/,a=/^(xlink|xmlns|xml)([A-Z])/,n=/^accessK|^auto[A-Z]|^ch|^col|cont|cross|dateT|encT|form[A-Z]|frame|hrefL|inputM|maxL|minL|noV|playsI|readO|rowS|spellC|src[A-Z]|tabI|item[A-Z]/,i=/^ac|^ali|arabic|basel|cap|clipPath$|clipRule$|color|dominant|enable|fill|flood|font|glyph[^R]|horiz|image|letter|lighting|marker[^WUH]|overline|panose|pointe|paint|rendering|shape|stop|strikethrough|stroke|text[^L]|transform|underline|unicode|units|^v[^i]|^w|^xH/,l=/["&<]/;function s(e){if(0===e.length||!1===l.test(e))return e;for(var t=0,r=0,o="",a="";r");return z||("string"==typeof M?z=s(M):null!=M&&!1!==M&&!0!==M&&(z=C(M,l,"svg"===E||"foreignObject"!==E&&c,p,t))),f&&f(t),t.__=void 0,m&&m(t),!z&&S.has(E)?j+"/>":j+">"+z+""+E+">"}var S=new Set(["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"]),A=b;
  var __defProp = Object.defineProperty;
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
  var __hasOwnProp = Object.prototype.hasOwnProperty;
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  var __spreadValues = (a, b) => {
    for (var prop in b || (b = {}))
      if (__hasOwnProp.call(b, prop))
        __defNormalProp(a, prop, b[prop]);
    if (__getOwnPropSymbols)
      for (var prop of __getOwnPropSymbols(b)) {
        if (__propIsEnum.call(b, prop))
          __defNormalProp(a, prop, b[prop]);
      }
    return a;
  };
  const Notify = (props) => {
    const { grade } = props;
    const text = grade === 0 ? "\u26A0\uFE0F \u53EF\u80FD\u4E3A\u5916\u5305\u516C\u53F8" : "\u274C \u5916\u5305\u516C\u53F8";
    return /* @__PURE__ */ o$1(
      "a",
      {
        class: "btn",
        style: {
          width: "auto",
          minWidth: "55px",
          color: grade === 0 ? "#faad14" : "#ff4d4f",
          padding: "0 12px",
          background: "transparent",
          borderColor: "transparent"
        },
        children: text
      }
    );
  };
  const insertNotify = (props) => {
    const html = A(/* @__PURE__ */ o$1(Notify, __spreadValues({}, props)));
    const dom = document.body.querySelector(".btn-container");
    if (!dom) {
      return;
    }
    const div = document.createElement("div");
    div.innerHTML = html;
    dom.appendChild(div.firstElementChild);
  };
  const Reminder = ({ text }) => {
    return /* @__PURE__ */ o$1("details", { children: [
      /* @__PURE__ */ o$1("summary", { style: { cursor: "pointer" }, children: "\u67E5\u770B\u5177\u4F53\u5224\u5B9A\u89C4\u5219" }),
      /* @__PURE__ */ o$1("p", { style: { whiteSpace: "pre" }, children: text })
    ] });
  };
  const addReminder = (text) => {
    const dom = document.body.querySelector(".job-detail");
    if (!dom) {
      return;
    }
    const html = A(/* @__PURE__ */ o$1(Reminder, { text }));
    const t = document.createElement("div");
    t.innerHTML = html;
    dom.insertBefore(t, dom.firstChild);
  };
  (() => {
    if (typeof result === "boolean") {
      return;
    }
    insertNotify(result);
    addReminder(result.text);
  })();
})();