linuxdo-next

一个呼吸顺畅的 linux.do 论坛

Устаревшая версия за 09.03.2024. Перейдите к последней версии.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Для установки этого скрипта вам необходимо установить расширение, такое как Tampermonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name         linuxdo-next
// @namespace    linuxdo-next
// @version      0.1.0
// @author       delph1s
// @description  一个呼吸顺畅的 linux.do 论坛
// @license      GPLv2
// @iconURL      https://cdn.linux.do/uploads/default/original/1X/3a18b4b0da3e8cf96f7eea15241c3d251f28a39b.png
// @match        *://linux.do/
// @match        *://linux.do/*
// @require      https://cdn.jsdelivr.net/npm/[email protected]/umd/react.production.min.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]/umd/react-dom.production.min.js
// @grant        GM_addStyle
// @run-at       document-end
// ==/UserScript==

(i=>{if(typeof GM_addStyle=="function"){GM_addStyle(i);return}const t=document.createElement("style");t.textContent=i,document.head.append(t)})(" #linuxdo-next-plugin div{display:inline-block}div#linuxdo-next-plugin{display:inline-block;visibility:visible;position:absolute;top:120px;right:10px} ");

(function (require$$0, require$$0$1) {
  'use strict';

  var jsxRuntime = { exports: {} };
  var reactJsxRuntime_production_min = {};
  /**
   * @license React
   * react-jsx-runtime.production.min.js
   *
   * Copyright (c) Facebook, Inc. and its affiliates.
   *
   * This source code is licensed under the MIT license found in the
   * LICENSE file in the root directory of this source tree.
   */
  var f = require$$0, k = Symbol.for("react.element"), l = Symbol.for("react.fragment"), m$1 = Object.prototype.hasOwnProperty, n = f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, p = { key: true, ref: true, __self: true, __source: true };
  function q(c, a, g) {
    var b, d = {}, e = null, h = null;
    void 0 !== g && (e = "" + g);
    void 0 !== a.key && (e = "" + a.key);
    void 0 !== a.ref && (h = a.ref);
    for (b in a)
      m$1.call(a, b) && !p.hasOwnProperty(b) && (d[b] = a[b]);
    if (c && c.defaultProps)
      for (b in a = c.defaultProps, a)
        void 0 === d[b] && (d[b] = a[b]);
    return { $$typeof: k, type: c, key: e, ref: h, props: d, _owner: n.current };
  }
  reactJsxRuntime_production_min.Fragment = l;
  reactJsxRuntime_production_min.jsx = q;
  reactJsxRuntime_production_min.jsxs = q;
  {
    jsxRuntime.exports = reactJsxRuntime_production_min;
  }
  var jsxRuntimeExports = jsxRuntime.exports;
  var client = {};
  var m = require$$0$1;
  {
    client.createRoot = m.createRoot;
    client.hydrateRoot = m.hydrateRoot;
  }
  function Modal(props) {
    return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "modal-container", children: [
      /* @__PURE__ */ jsxRuntimeExports.jsx(
        "div",
        {
          id: "ember628",
          className: "ember-view modal d-modal create-invite-modal",
          "data-keyboard": "false",
          "aria-modal": "true",
          role: "dialog",
          "aria-labelledby": "discourse-modal-title",
          children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "d-modal__container", children: [
            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "d-modal__header", children: [
              /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "d-modal__title", children: /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { id: "discourse-modal-title", className: "d-modal__title-text", children: "创建邀请" }) }),
              /* @__PURE__ */ jsxRuntimeExports.jsx(
                "button",
                {
                  className: "btn no-text btn-icon btn-transparent modal-close",
                  title: "关闭",
                  type: "button",
                  onClick: () => props.setModalVisible(false),
                  children: /* @__PURE__ */ jsxRuntimeExports.jsx(
                    "svg",
                    {
                      className: "fa d-icon d-icon-times svg-icon svg-string",
                      xmlns: "http://www.w3.org/2000/svg",
                      children: /* @__PURE__ */ jsxRuntimeExports.jsx("use", { href: "#times" })
                    }
                  )
                }
              )
            ] }),
            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "d-modal__body", tabIndex: -1, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { children: [
              /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "input-group input-email", children: [
                /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { htmlFor: "invite-email", children: [
                  /* @__PURE__ */ jsxRuntimeExports.jsx(
                    "svg",
                    {
                      className: "fa d-icon d-icon-envelope svg-icon svg-string",
                      xmlns: "http://www.w3.org/2000/svg",
                      children: /* @__PURE__ */ jsxRuntimeExports.jsx("use", { href: "#envelope" })
                    }
                  ),
                  "限制为"
                ] }),
                /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "invite-email-container", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
                  "input",
                  {
                    id: "invite-email",
                    className: "ember-text-field ember-view",
                    placeholder: "[email protected] 或者 example.com",
                    type: "text"
                  }
                ) })
              ] }),
              /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "input-group invite-max-redemptions", children: [
                /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { htmlFor: "invite-max-redemptions", children: [
                  /* @__PURE__ */ jsxRuntimeExports.jsx(
                    "svg",
                    {
                      className: "fa d-icon d-icon-users svg-icon svg-string",
                      xmlns: "http://www.w3.org/2000/svg",
                      children: /* @__PURE__ */ jsxRuntimeExports.jsx("use", { href: "#users" })
                    }
                  ),
                  "最大使用次数"
                ] }),
                /* @__PURE__ */ jsxRuntimeExports.jsx(
                  "input",
                  {
                    id: "invite-max-redemptions",
                    className: "ember-text-field ember-view",
                    min: "1",
                    max: "10",
                    type: "number"
                  }
                )
              ] }),
              /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "input-group input-expires-at", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { children: [
                /* @__PURE__ */ jsxRuntimeExports.jsx(
                  "svg",
                  {
                    className: "fa d-icon d-icon-far-clock svg-icon svg-string",
                    xmlns: "http://www.w3.org/2000/svg",
                    children: /* @__PURE__ */ jsxRuntimeExports.jsx("use", { href: "#far-clock" })
                  }
                ),
                "于 3 天过期"
              ] }) })
            ] }) }),
            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "d-modal__footer", children: [
              /* @__PURE__ */ jsxRuntimeExports.jsxs("button", { className: "btn btn-icon-text btn-primary save-invite", type: "button", children: [
                /* @__PURE__ */ jsxRuntimeExports.jsx(
                  "svg",
                  {
                    className: "fa d-icon d-icon-link svg-icon svg-string",
                    xmlns: "http://www.w3.org/2000/svg",
                    children: /* @__PURE__ */ jsxRuntimeExports.jsx("use", { href: "#link" })
                  }
                ),
                /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "d-button-label", children: "保存邀请" })
              ] }),
              /* @__PURE__ */ jsxRuntimeExports.jsxs(
                "button",
                {
                  className: "btn btn-icon-text btn-primary send-invite",
                  disabled: false,
                  title: "限制只允许电子邮件邀请并发送邀请电子邮件",
                  type: "button",
                  children: [
                    /* @__PURE__ */ jsxRuntimeExports.jsx(
                      "svg",
                      {
                        className: "fa d-icon d-icon-envelope svg-icon svg-string",
                        xmlns: "http://www.w3.org/2000/svg",
                        children: /* @__PURE__ */ jsxRuntimeExports.jsx("use", { href: "#envelope" })
                      }
                    ),
                    /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "d-button-label", children: "保存并发送电子邮件" })
                  ]
                }
              )
            ] })
          ] })
        }
      ),
      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "d-modal__backdrop" })
    ] });
  }
  function App() {
    const [logModalVisible, setLogModalVisible] = require$$0.useState(false);
    require$$0.useEffect(() => {
      const containerSelector = "header.d-header div.contents div.panel ul";
      document.querySelector(containerSelector);
      document.createElement("li");
    }, []);
    return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
      /* @__PURE__ */ jsxRuntimeExports.jsx(
        "button",
        {
          className: "btn btn-default create reply-to-post no-text btn-icon",
          title: "开始进行自动点赞",
          type: "button",
          onClick: () => setLogModalVisible(true),
          children: /* @__PURE__ */ jsxRuntimeExports.jsx(
            "svg",
            {
              className: "fa d-icon d-icon-paper-plane svg-icon prefix-icon svg-string",
              xmlns: "http://www.w3.org/2000/svg",
              children: /* @__PURE__ */ jsxRuntimeExports.jsx("use", { href: "#paper-plane" })
            }
          )
        }
      ),
      logModalVisible && /* @__PURE__ */ jsxRuntimeExports.jsx(Modal, { setModalVisible: setLogModalVisible })
    ] });
  }
  const appendLinuxDoNext = () => {
    const app = document.createElement("div");
    app.setAttribute("id", "linuxdo-next-plugin");
    document.body.append(app);
    return app;
  };
  client.createRoot(appendLinuxDoNext()).render(
    /* @__PURE__ */ jsxRuntimeExports.jsx(require$$0.StrictMode, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(App, {}) })
  );

})(React, ReactDOM);