立方

https://qq.com#立方

分享者: NRHSYD (2776)发布时间: 6天前

该用户很懒,什么介绍也没有写!
二维码导入
{
    "articleStyle": 0,
    "contentBlacklist": "",
    "customOrder": -10098533,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\":\"\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "loginUi": "",
    "loginUrl": "",
    "ruleArticles": "<js>\nconst ori = baseUrl.slice(baseUrl.indexOf('#') + 1);\nconst sort = ori.split('★').map((item) => {\n    const parts = item.split('☆');\n    return {\n        title: parts[1],\n        date: parts[2],\n        img: parts[3],\n        link: parts[0]\n    };\n});\nJSON.stringify(sort);\n<\/js>\n$.[*]",
    "ruleContent": "",
    "ruleDescription": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=0\">\n  <style>\n    @keyframes tip {\n      0% {\n        opacity: 0;\n        transform: translateY(-24px);\n      }\n      30%,\n      70% {\n        opacity: 1;\n        transform: translateY(0);\n      }\n      100% { opacity: 0; }\n    }\n    \n    * {\n      line-height: 1em;\n      margin: 0;\n      padding: 0;\n      word-break: break-all;\n      -webkit-tap-highlight-color: transparent;\n      -webkit-touch-callout: none;\n      -webkit-user-select: none;\n      -khtml-user-select: none;\n      -moz-user-select: none;\n      -ms-user-select: none;\n      user-select: none;\n    }\n    \n    *:focus { outline: none; }\n    \n    input,\n    textarea { -webkit-user-select: auto; }\n    \n    body {\n      background: #f4f5f7;\n      display: flex;\n      flex-wrap: wrap;\n      place-content: center;\n      place-items: start;\n      padding: 15px;\n      color: #001944;\n    }\n    \n    label:has(#y)+div {\n      opacity: 0;\n      max-height: 0;\n      overflow: hidden;\n      transition: .3s;\n    }\n    \n    label:has(#y:checked)+div {\n      opacity: 1;\n      max-height: 50px;\n    }\n    \n    .card {\n      border-top: .5px solid rgba(255, 255, 255, .9);\n      border-radius: 24px;\n      background: rgba(255, 255, 255, .8);\n      box-shadow: 0 10px 20px rgba(0, 0, 0, .05);\n      padding: 30px;\n      margin: 12.5px;\n      width: 250px;\n      height: auto;\n    }\n    \n    .card details+div {\n      overflow: hidden;\n      max-height: 0;\n      opacity: 0;\n      transition: .6s;\n    }\n    \n    .card details[open]+div {\n      max-height: 666px;\n      opacity: 1;\n    }\n    \n    .card details summary {\n      font-size: 24px;\n      font-weight: 700;\n      user-select: none;\n      outline: 0;\n      opacity: .4;\n      transition: .6s;\n      display: block;\n      list-style: none;\n    }\n    \n    .card details[open] summary {\n      opacity: 1;\n      margin-bottom: 6px;\n      font-size: 20.5px;\n    }\n    \n    .flex {\n      display: flex;\n      flex-wrap: wrap;\n    }\n    \n    .tip {\n      position: fixed;\n      z-index: 9;\n      top: 45px;\n      border-radius: .75em;\n      padding: .9em;\n      background-color: rgba(99, 99, 99, .9);\n      box-shadow: 0 5px 20px rgba(0, 0, 0, .2);\n      color: #fff;\n      opacity: 0;\n      animation: tip 1s;\n      backdrop-filter: blur(15px);\n    }\n    \n    .txt-box { position: relative; }\n    \n    .txt-box button {\n      position: absolute;\n      top: 19px;\n      margin: 0;\n      padding: .3em;\n      border-radius: .3em;\n      background: rgba(0, 0, 0, .15);\n      color: #fff;\n      font-size: 12px;\n      z-index: 9;\n      display: none;\n    }\n    \n    .clear-btn { right: 9px; }\n    \n    .copy-btn { right: 44px; }\n    \n    .txt-box:hover .clear-btn,\n    .txt-box:hover .copy-btn { display: block; }\n    \n    span {\n      background: rgba(0, 0, 0, .04);\n      padding: .15em .3em;\n      border-radius: .5em;\n      margin-left: .5em;\n      font-family: serif;\n      font-size: 12px;\n      opacity: .75;\n    }\n    \n    button {\n      font-size: 13.5px;\n      font-weight: 700;\n      color: #4360b7;\n      background: #e7eeff;\n      padding: .65em .9em;\n      margin-top: 9px;\n      margin-right: 9px;\n      opacity: .81;\n      border-radius: 2em;\n      border: none;\n      transition: .3s;\n      cursor: pointer;\n    }\n    \n    button:active {\n      background: #d6ddee;\n      transform: scale(.95);\n    }\n    \n    textarea {\n      margin-top: 9px;\n      padding: 9px;\n      width: 100%;\n      box-sizing: border-box;\n      line-height: 1.2em;\n      font-size: 14px;\n      font-family: serif;\n      resize: none;\n      border-radius: 9px;\n      color: #333;\n      border: 2px solid rgba(0, 0, 0, .1);\n      background: rgba(0, 0, 0, .006);\n    }\n    \n    input[type=\"checkbox\"],\n    input[type=\"radio\"] {\n      vertical-align: bottom;\n      appearance: none;\n      margin: 0 .5em;\n      width: 1em;\n      height: 1em;\n      box-sizing: border-box;\n      background: rgba(0, 0, 0, .006);\n      border: 2px solid rgba(0, 0, 0, .1);\n      border-radius: 9px;\n      cursor: pointer;\n      transition: .15s;\n    }\n    \n    input:checked {\n      border-color: #4360b7;\n      background: #e7eeff;\n      opacity: .81;\n    }\n    \n    label {\n      display: inline-block;\n      margin-top: 9px;\n      margin-bottom: 0;\n      font-size: 14px;\n      font-family: serif;\n      cursor: pointer;\n    }\n  <\/style>\n  <title>写源助手<\/title>\n<\/head>\n\n<body>\n  <div class=\"card\">\n    <details>\n      <summary>格式化发现<\/summary>\n    <\/details>\n    <div>\n      <div class=\"txt-box\">\n        <button class=\"clear-btn\" onclick=\"clearText(this)\">清空<\/button>\n        <textarea id=\"text\" rows=\"4\" placeholder=\"请输入要处理的内容\"><\/textarea>\n        <button class=\"copy-btn\" onclick=\"copyText(this)\">复制<\/button>\n      <\/div>\n      <div class=\"flex\">\n        <button onclick=\"htmlToDisc()\">html转旧发现<\/button>\n        <button onclick=\"switchFormat()\">新旧发现互转<\/button>\n      <\/div>\n      <label>&nbsp;每行列数<span>仅新发现<\/span><\/label>\n      <div class=\"flex\">\n        <button onclick=\"setColumn(null)\">自动<\/button>\n        <button onclick=\"setColumn(1)\">1<\/button>\n        <button onclick=\"setColumn(.4)\">2<\/button>\n        <button onclick=\"setColumn(.25)\">3<\/button>\n        <button onclick=\"setColumn(.2)\">4<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"card\">\n    <details>\n      <summary>匹配 \/ 替换<\/summary>\n    <\/details>\n    <div>\n      <div class=\"txt-box\">\n        <button class=\"clear-btn\" onclick=\"clearText(this)\">清空<\/button>\n        <textarea id=\"text1\" rows=\"4\" placeholder=\"请输入要处理的内容\"><\/textarea>\n        <button class=\"copy-btn\" onclick=\"copyText(this)\">复制<\/button>\n      <\/div>\n      <div class=\"txt-box\">\n        <button class=\"clear-btn\" onclick=\"clearText(this)\">清空<\/button>\n        <textarea id=\"matchText\" rows=\"1\" placeholder=\"请输入正则表达式\"><\/textarea>\n        <button class=\"copy-btn\" onclick=\"copyText(this)\">复制<\/button>\n      <\/div>\n      <label><input id=\"g\" type=\"checkbox\" checked>全局匹配<span>g<\/span><\/label>\n      <label><input id=\"i\" type=\"checkbox\">忽略大小写<span>i<\/span><\/label>\n      <label><input id=\"m\" type=\"checkbox\">多行模式<span>m<\/span><\/label>\n      <label><input id=\"s\" type=\"checkbox\">点号通配<span>s<\/span><\/label>\n      <label><input id=\"u\" type=\"checkbox\">Unicode<span>u<\/span><\/label>\n      <label><input id=\"y\" type=\"checkbox\">粘连匹配<span>y<\/span><\/label>\n      <div class=\"txt-box\">\n        <button class=\"clear-btn\" onclick=\"clearText(this)\">清空<\/button>\n        <textarea id=\"lastIndex\" rows=\"1\" placeholder=\"lastIndex,用于粘连匹配\"><\/textarea>\n        <button class=\"copy-btn\" onclick=\"copyText(this)\">复制<\/button>\n      <\/div>\n      <div class=\"txt-box\">\n        <button class=\"clear-btn\" onclick=\"clearText(this)\">清空<\/button>\n        <textarea id=\"replaceText\" rows=\"1\" placeholder=\"想要替换成什么\"><\/textarea>\n        <button class=\"copy-btn\" onclick=\"copyText(this)\">复制<\/button>\n      <\/div>\n      <div class=\"flex\">\n        <button onclick=\"insertReplaceText('{\\{page}}')\">{&#123;page}}<\/button>\n        <button onclick=\"insertReplaceText('\\\\')\">\\<\/button>\n        <button onclick=\"insertReplaceText('<')\">&lt;<\/button>\n        <button onclick=\"insertReplaceText('>')\">&gt;<\/button>\n      <\/div>\n      <div class=\"flex\">\n        <button onclick=\"regexMatch()\">匹配<\/button>\n        <button onclick=\"regexReplace()\">替换<\/button>\n        <button onclick=\"resetAll()\">重置匹配替换<\/button>\n      <\/div>\n      <div class=\"txt-box\">\n        <button class=\"clear-btn\" onclick=\"clearText(this)\">清空<\/button>\n        <textarea id=\"matchResult\" rows=\"4\" placeholder=\"匹配结果\"><\/textarea>\n        <button class=\"copy-btn\" onclick=\"copyText(this)\">复制<\/button>\n      <\/div>\n      <div class=\"txt-box\">\n        <button class=\"clear-btn\" onclick=\"clearText(this)\">清空<\/button>\n        <textarea id=\"replaceResult\" rows=\"4\" placeholder=\"替换结果\"><\/textarea>\n        <button class=\"copy-btn\" onclick=\"copyText(this)\">复制<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"card\">\n    <details>\n      <summary>编码 \/ 转义<\/summary>\n    <\/details>\n    <div>\n      <div class=\"txt-box\">\n        <button class=\"clear-btn\" onclick=\"clearText(this)\">清空<\/button>\n        <textarea id=\"text2\" rows=\"4\" placeholder=\"请输入要处理的内容\"><\/textarea>\n        <button class=\"copy-btn\" onclick=\"copyText(this)\">复制<\/button>\n      <\/div>\n      <label><input id=\"more\" type=\"checkbox\">处理更多字符<\/label>\n      <div class=\"flex\">\n        <button onclick=\"encodeURL()\">url 编码<\/button>\n        <button onclick=\"decodeURL()\">url 解码<\/button>\n        <button onclick=\"encodeHTML()\">html 转义<\/button>\n        <button onclick=\"decodeHTML()\">html 反转义<\/button>\n      <\/div>\n      <div id=\"temp\" hidden><\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"card\">\n    <details>\n      <summary>工具 \/ 教程<\/summary>\n    <\/details>\n    <div>\n      <div class=\"flex\">\n        <button onclick=\"window.open('https:\/\/base64.guru\/converter')\">base64<\/button>\n        <button onclick=\"window.open('https:\/\/tool.lu\/zhconvert')\">简繁转换<\/button>\n        <button onclick=\"window.open('https:\/\/www.wetools.com\/js-compress')\">js压缩<\/button>\n        <button onclick=\"window.open('https:\/\/www.yuque.com\/legado\/yuan')\">写源教程①<\/button>\n        <button onclick=\"window.open('https:\/\/www.yuque.com\/120031xufengnian\/yuedu')\">写源教程②<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <script>\n    const $ = (id) => document.getElementById(id);\n    \n    const textEl = $('text');\n    const text1El = $('text1');\n    const text2El = $('text2');\n    const matchTextEl = $('matchText');\n    const lastIndexEl = $('lastIndex');\n    const matchResultEl = $('matchResult');\n    const replaceTextEl = $('replaceText');\n    const replaceResultEl = $('replaceResult');\n    const more = $('more');\n    const temp = $('temp');\n    const flags = ['g', 'i', 'm', 's', 'u', 'y']\n      .reduce((acc, flag) => {\n        acc[flag] = $(flag);\n        return acc;\n      }, {});\n\n    const showTip = (text) => {\n      const tip = document.createElement('p');\n      tip.className = \"tip\";\n      tip.textContent = text;\n      document.body.appendChild(tip);\n      setTimeout(() => tip.remove(), 2000);\n    };\n\n    const htmlToDisc = () => {\n      const text = textEl.value;\n      if (!text) return textEl.focus();\n      try {\n        const links = Array.from(new DOMParser()\n          .parseFromString(text, 'text\/html')\n          .querySelectorAll('a[href]'))\n          .filter(a => {\n            const url = a.getAttribute('href').trim().toLowerCase();\n            return !url.startsWith('javascript:') && !url.startsWith('#');\n          })\n          .map(a => a.textContent.trim() + \"::\" + a.getAttribute('href').trim());\n        const num = links.length;\n        if (num > 0) {\n          textEl.value = links.join('\\n');\n          showTip(`提取到 ${num} 条发现`);\n        } else showTip('未提取到发现');\n      } catch (error) {\n        showTip('html 解析失败');\n      }\n    };\n    \n    const switchFormat = () => {\n      const text = textEl.value\n      if (!text) return textEl.focus();\n      let result = \"\";\n      try {\n        result = JSON.parse(text)\n          .map(({ title = \"\", url = \"\" }) => title + \"::\" + url)\n          .join('\\n');\n      } catch (error) {\n        result = JSON.stringify(text\n          .replace(\/&&\/g, '\\n')\n          .split(\/\\s*\\n+\\s*\/)\n          .map(line => {\n            const [title, ...url] = line.split('::').map(s => s.trim());\n            return { title: title, url: url.join('::') };\n          }));\n      }\n      result ? textEl.value = result: showTip('格式转换失败');\n    };\n    \n    const setColumn = (n) => {\n      const text = textEl.value;\n      if (!text) return textEl.focus();\n      try {\n        const json = JSON.parse(text);\n        json.forEach(item => {\n          item.style = {\n            layout_flexGrow: 1,\n            layout_flexBasisPercent: n\n          };\n        });\n        textEl.value = JSON.stringify(json);\n      } catch (error) {\n        showTip('列数设置失败');\n      }\n    };\n    \n    const buildRegex = () => {\n      const text = text1El.value;\n      if (!text) return text1El.focus();\n      const matchText = matchTextEl.value;\n      if (!matchText) return matchTextEl.focus();\n      const options = Object.keys(flags).filter(flag => flags[flag].checked).join('');\n      try {\n        const regex = new RegExp(matchText, options);\n        regex.lastIndex = parseInt(lastIndexEl.value) || 0;;\n        return { text, regex };\n      } catch (error) {\n        showTip('构建正则表达式失败');\n      }\n    };\n    \n    const regexMatch = () => {\n      const result = buildRegex();\n      if (!result) return;\n      const { text, regex } = result;\n      const match = text.match(regex);\n      if (match) {\n        if (regex.flags.includes('g')) {\n          showTip(`找到 ${match.length} 个匹配项`);\n          matchResultEl.value = match.join('\\n');\n        } else {\n          showTip(`匹配位置:` + match.index);\n          matchResultEl.value = match[0];\n        }\n      } else {\n        matchResultEl.value = \"\";\n        showTip('未找到匹配项');\n      }\n    };\n    \n    const insertReplaceText = (text) => {\n      const start = replaceTextEl.selectionStart;\n      const lastValue = replaceTextEl.value;\n      replaceTextEl.value = lastValue.slice(0, start) + text + lastValue.slice(start + replaceTextEl.selectionEnd - start);\n      replaceTextEl.focus();\n      replaceTextEl.setSelectionRange(start + text.length, start + text.length);\n    };\n    \n    const regexReplace = () => {\n      const result = buildRegex();\n      if (!result) return;\n      const { text, regex } = result;\n      regexMatch();\n      replaceResultEl.value = text.replace(regex, replaceTextEl.value);\n    };\n    \n    const resetAll = () => {\n      const fields = ['matchText', 'matchResult', 'lastIndex', 'replaceText', 'replaceResult'];\n      fields.forEach(field => $(`${field}`).value = \"\");\n      showTip('重置匹配替换成功');\n    };\n    \n    const encodeURL = () => {\n      const text = text2El.value;\n      if (!text) return text2El.focus();\n      text2El.value = more.checked? encodeURIComponent(text) : encodeURI(text);\n      showTip('URLEncode 编码成功');\n    };\n    \n    const decodeURL = () => {\n      const text = text2El.value;\n      if (!text) return text2El.focus();\n      try {\n        text2El.value = decodeURIComponent(text);\n        showTip('URLDecode 解码成功');\n      } catch (error) {\n        showTip('URLDecode 解码失败');\n      }\n    };\n\n    const encodeHTML = () => {\n      const text = text2El.value;\n      if (!text) return text2El.focus();\n      if (more.checked) text2El.value = text.split('').map(c => `&#${c.charCodeAt(0)};`).join('');\n      else {\n        temp.textContent = text;\n        text2El.value = temp.innerHTML;\n      }\n      showTip('html 转义成功');\n    };\n      \n    const decodeHTML = () => {\n      const text = text2El.value;\n      if (!text) return text2El.focus();\n      try {\n        temp.innerHTML = text.replace(\/<br\\s*\\\/?>\/gi, '\\n').replace(\/<\/g, '&#60;').replace(\/>\/g, '&#62;');\n        text2El.value = temp.textContent;\n        showTip('html 反转义成功');\n      } catch (error) {\n        showTip('html 反转义失败');\n      }\n    };\n\n    const clearText = (button) => {\n      button.nextElementSibling.value = \"\";\n      showTip('清空成功');\n    };\n\n    const copyText = (button) => {\n      const text = button.previousElementSibling.value;\n      if (!text) return showTip('内容为空');\n      navigator.clipboard.writeText(text)\n        .then(() => showTip('复制成功'))\n        .catch(() => showTip('复制失败'));\n    };\n  <\/script>\n<\/body>\n\n<\/html>\n🔵<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n  <head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=0\">\n    <title>随心导入<\/title>\n    <style>\n    @keyframes tip {\n      0% {\n        opacity: 0;\n        transform: translateY(-24px);\n      }\n      30%,\n      70% {\n        opacity: 1;\n        transform: translateY(0);\n      }\n      100% { opacity: 0; }\n    }\n    \n    * {\n      line-height: 1em;\n      margin: 0;\n      padding: 0;\n      word-break: break-all;\n      -webkit-tap-highlight-color: transparent;\n      -webkit-touch-callout: none;\n      -webkit-user-select: none;\n      -khtml-user-select: none;\n      -moz-user-select: none;\n      -ms-user-select: none;\n      user-select: none;\n    }\n    \n    *:focus { outline: none; }\n    \n    textarea { -webkit-user-select: auto; }\n    \n    body {\n      background: #f4f5f7;\n      display: flex;\n      flex-wrap: wrap;\n      place-content: center;\n      place-items: start;\n      padding: 15px;\n      color: #001944;\n    }\n    \n    .card {\n      border-top: .5px solid rgba(255, 255, 255, .9);\n      border-radius: 24px;\n      background: rgba(255, 255, 255, .8);\n      box-shadow: 0 10px 20px rgba(0, 0, 0, .05);\n      padding: 30px;\n      margin: 12.5px;\n      width: 250px;\n      height: auto;\n    }\n    \n    .card details+div {\n      overflow: hidden;\n      max-height: 0;\n      opacity: 0;\n      transition: .6s;\n    }\n    \n    .card details[open]+div {\n      max-height: 666px;\n      opacity: 1;\n    }\n    \n    .card details summary {\n      font-size: 24px;\n      font-weight: 700;\n      user-select: none;\n      outline: 0;\n      opacity: .4;\n      transition: .6s;\n      display: block;\n      list-style: none;\n    }\n    \n    .card details[open] summary {\n      opacity: 1;\n      margin-bottom: 6px;\n      font-size: 20.5px;\n    }\n    \n    .flex {\n      display: flex;\n      flex-wrap: wrap;\n      align-items: stretch;\n      gap: 1.3px;\n    }\n    \n    .tip {\n      position: fixed;\n      z-index: 9;\n      top: 45px;\n      border-radius: .75em;\n      padding: .9em;\n      background-color: rgba(99, 99, 99, .9);\n      box-shadow: 0 5px 20px rgba(0, 0, 0, .2);\n      color: #fff;\n      opacity: 0;\n      animation: tip 1s;\n      backdrop-filter: blur(15px);\n    }\n    \n    .txt-box { position: relative; }\n    \n    .txt-box button {\n      position: absolute;\n      top: 19px;\n      margin: 0;\n      padding: .3em;\n      border-radius: .3em;\n      background: rgba(0, 0, 0, .15);\n      color: #fff;\n      font-size: 12px;\n      z-index: 9;\n      display: none;\n    }\n    \n    .clear-btn { right: 9px; }\n    \n    .copy-btn { right: 44px; }\n    \n    .txt-box:hover .clear-btn,\n    .txt-box:hover .copy-btn { display: block; }\n    \n    .span {\n      background: rgba(0, 0, 0, .04);\n      place-content: center;\n      place-items: stretch;\n      padding: auto .3em;\n      font-family: serif;\n      font-size: 13.5px;\n      opacity: .75;\n    }\n    \n    button {\n      font-size: 13.5px;\n      font-weight: 700;\n      color: #4360b7;\n      flex-grow: 1;\n      background: #e7eeff;\n      padding: .75em .9em;\n      opacity: .81;\n      border: none;\n      transition: .3s;\n      cursor: pointer;\n    }\n    \n    button:active {\n      background: #d6ddee;\n      transform: scale(.95);\n    }\n    \n    textarea {\n      margin-top: 9px;\n      padding: 9px;\n      width: 100%;\n      box-sizing: border-box;\n      line-height: 1.2em;\n      font-size: 14px;\n      font-family: serif;\n      resize: none;\n      border-radius: 9px;\n      color: #333;\n      border: 2px solid rgba(0, 0, 0, .1);\n      background: rgba(0, 0, 0, .006);\n    }\n\n    .select-wrapper {\n      display: flex;\n      align-items: center;\n      margin-top: 9px;\n      border: 2px solid rgba(0, 0, 0, 0.1);\n      border-radius: 9px;\n      overflow: hidden;\n      font-size: 14px;\n      color: #333;\n  }\n\n    .import-select {\n        flex: 1;\n        padding: 9px;\n        border: none;\n        appearance: none;\n        font-family: serif;\n        font-size: 14px;\n        background: rgba(0, 0, 0, 0.006);\n        -webkit-appearance: none;\n        -moz-appearance: none;\n      }\n\n    .import-select::-ms-expand {\n      display: none;\n    }\n\n    #import {\n      margin: 0;\n      padding: 10px 12px;\n      flex-grow: 0;\n      border-radius: 0;\n      border-left: 1px solid rgba(0, 0, 0, 0.1);\n    }\n      \n    #import:active {\n      transform: none;\n    }\n      \n    .grid {\n      display: grid;\n      margin-top: 9px;\n      width: 100%;\n      grid-template-columns: 2fr 5fr;\n      grid-gap: 1.3px;\n      place-items: stretch;\n      place-content: center;\n      border-radius: 9px;\n      overflow: hidden;\n    }\n    <\/style>\n  <\/head>\n\n  <body>\n    <div class=\"card\">\n      <details id=\"main\" open>\n        <summary>随心导入<\/summary>\n      <\/details>\n      <div>\n        <div class=\"txt-box\">\n          <button class=\"clear-btn\" onclick=\"clearText(this)\">清空<\/button>\n          <textarea id=\"url\" rows=\"4\" placeholder=\"请输入资源链接\"><\/textarea>\n          <button class=\"copy-btn\" onclick=\"copyText(this)\">复制<\/button>\n        <\/div>\n        <div class=\"select-wrapper\">\n          <select id=\"path\" class=\"import-select\" name=\"path\">\n            <option value=\"auto\" selected>自动识别<\/option>\n            <option value=\"bookSource\">书源<\/option>\n            <option value=\"rssSource\">订阅源<\/option>\n            <option value=\"replaceRule\">替换规则<\/option>\n            <option value=\"textTocRule\">TXT目录规则<\/option>\n            <option value=\"httpTTS\">TTS<\/option>\n            <option value=\"theme\">主题<\/option>\n            <option value=\"readConfig\">排版<\/option>\n            <option value=\"dictRule\">字典规则<\/option>\n          <\/select>\n          <button id=\"import\" onclick=\"importUrl()\">导入<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n    <div class=\"card\">\n      <details open>\n        <summary>长期链接<\/summary>\n      <\/details>\n      <div>\n        <div class=\"grid\">\n        <div class=\"flex span\">书源<\/div>\n        <div class=\"flex\">\n          <button onclick=\"setUrl('https:\/\/raw.githubusercontent.com\/shidahuilang\/shuyuan\/shuyuan\/good.json★1')\">大灰狼<\/button>\n          <button onclick=\"setUrl('https:\/\/raw.githubusercontent.com\/zmn001125\/booksources\/master\/sources\/guaner.txt★1')\">关耳<\/button>\n          <button onclick=\"setUrl('https:\/\/raw.githubusercontent.com\/XIU2\/Yuedu\/master\/shuyuan★1')\">XIU2<\/button>\n          <button onclick=\"setUrl('https:\/\/raw.githubusercontent.com\/cyao2q\/yuedu\/master\/shuyuan★1')\">漠星曜<\/button>\n          <button onclick=\"setUrl('https:\/\/raw.githubusercontent.com\/PB-pobing\/pobing\/pb\/sy.json★1')\">破冰<\/button>\n          <button onclick=\"setUrl('https:\/\/raw.githubusercontent.com\/yc-sy\/yd\/refs\/heads\/master\/sy.json★1')\">一程<\/button>\n        <\/div>\n        <div class=\"flex span\">订阅源<\/div>\n        <div class=\"flex\">\n          <button onclick=\"setUrl('https:\/\/raw.githubusercontent.com\/yc-sy\/yd\/refs\/heads\/master\/dy.json★2')\">一程<\/button>\n          <button onclick=\"setUrl('https:\/\/raw.githubusercontent.com\/nrhsyd\/yd\/refs\/heads\/main\/rss.json★2')\">NRHSYD<\/button>\n        <\/div>\n        <div class=\"flex span\">替换规则<\/div>\n        <div class=\"flex\">\n          <button onclick=\"setUrl('https:\/\/raw.githubusercontent.com\/shidahuilang\/shuyuan\/shuyuan\/jinghua.json★3')\">大灰狼<\/button>\n        <\/div>\n        <div class=\"flex span\">TTS<\/div>\n        <div class=\"flex\">\n          <button onclick=\"setUrl('https:\/\/raw.githubusercontent.com\/shidahuilang\/shuyuan\/shuyuan\/tts.json★5')\">大灰狼<\/button>\n        <\/div>\n        <div class=\"flex span\">主题<\/div>\n        <div class=\"flex\">\n          <button onclick=\"setUrl('https:\/\/raw.githubusercontent.com\/nrhsyd\/yd\/refs\/heads\/main\/theme.json★6')\">NRHSYD<\/button>\n        <\/div>\n        <div class=\"flex span\">字典规则<\/div>\n        <div class=\"flex\">\n          <button onclick=\"setUrl('https:\/\/raw.githubusercontent.com\/nrhsyd\/yd\/refs\/heads\/main\/dict.json★8')\">NRHSYD<\/button>\n        <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n    <script>\n      const $ = (id) => document.getElementById(id);\n\n      const urlEl = $('url');\n      const path = $('path');\n      const main = $('main');\n\n      const showTip = (text) => {\n        const tip = document.createElement(\"p\");\n        tip.className = \"tip\";\n        tip.textContent = text;\n        document.body.appendChild(tip);\n        setTimeout(() => tip.remove(), 2000);\n      };\n\n      const importUrl = () => {\n        const url = urlEl.value;\n        if (!url) return urlEl.focus();\n        window.open(`yuedu:\/\/import\/${path.value}?src=` + encodeURIComponent(url));\n      };\n\n      const setUrl = (starSplit) => {\n        const splitEl = starSplit.split('★');\n        let newUrl = splitEl[0];\n        if (\/^https:\\\/\\\/raw.githubusercontent.com\\\/\/i.test(newUrl)) newUrl = \"https:\/\/gitproxy.click\/\" + newUrl;\n        urlEl.value = newUrl;\n        path.selectedIndex = parseInt(splitEl[1]) || 0;\n        main.open = true;\n        urlEl.focus();\n        showTip('请点击导入按钮');\n      };\n\n      const clearText = (button) => {\n        button.nextElementSibling.value = \"\";\n        path.selectedIndex = 0;\n        showTip('清空成功');\n      };\n\n      const copyText = (button) => {\n        const text = button.previousElementSibling.value;\n        if (!text) return showTip('内容为空');\n        navigator.clipboard.writeText(text)\n          .then(() => showTip('复制成功'))\n          .catch(() => showTip('复制失败'));\n      };\n    <\/script>\n  <\/body>\n\n<\/html>\n{{}}\n@js:\nconst u = \"{{$.link}}\";\n\/^\\d+$\/.test(u) ? result.split('🔵')[u]: \"\";",
    "ruleImage": "$.img",
    "ruleLink": "$.link",
    "rulePubDate": "$.date",
    "ruleTitle": "$.title",
    "shouldOverrideUrlLoading": "if (\/s?q=\/.test(url)) {\n  java.searchBook(java.toURL(url).searchParams.get('q').split(' ')[0]);\n  1;\n}",
    "singleUrl": false,
    "sortUrl": "工具::https:\/\/qq.com#1☆随心导入☆支持多种导入格式~★0☆写源助手☆会有用喔(大概)\n\n寻书::https:\/\/qq.com#https:\/\/quark.sm.cn\/api\/rest?method=Novelnew.home&format=html&schema=v2&cate=全部&rank=rank_hot&gender=male☆夸克热搜-小说☆什么野榜★https:\/\/www.qidiantu.com☆起点图☆养书要从幼苗抓起\n\n找源::https:\/\/qq.com#https:\/\/yckceo.vip☆源仓库☆好源很多的仓库★https:\/\/taoba.cf☆源社区☆好人很多的论坛★https:\/\/shuyuan.yiove.com☆Yiove 书源仓库☆书源收集★http:\/\/fabu.yihulove.top☆YX源仓库☆书源收集★https:\/\/legado.aoaostar.com☆@AOAOSTAR☆收集整理★http:\/\/yuedu.miaogongzi.net\/gx.html☆@喵公子☆收集整理★https:\/\/source.jwyihao.top☆@吉王义昊☆书源发布★https:\/\/skybook.pages.dev☆@明月照大江☆书源发布★https:\/\/qyyuapi.com☆@xiaohan231☆书源发布★https:\/\/yolo52.github.io\/Yuedu☆@Yolo☆书源发布★https:\/\/dashabi.tk☆@大灰狼☆书源发布★https:\/\/www.jingluo.love☆@鲸落☆书源发布★https:\/\/www.luoyacheng.ip-ddns.com☆@洛娅橙☆书源发布★http:\/\/www.qingtian618.com☆@晴天☆书源发布★http:\/\/www.yesui.me☆@情无羁☆书源发布★http:\/\/fb.shushan.vip:9999☆@书山☆书源发布★https:\/\/yuzhi.ip-ddns.com☆@遇知☆书源发布",
    "sourceComment": "",
    "sourceIcon": "data:image\/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9IiM0NDQiIGQ9Ik04LjQyMiAyMC42MThDMTAuMTc4IDIxLjU0IDExLjA1NiAyMiAxMiAyMlYxMkwyLjYzOCA3LjA3M2EzLjE5NiAzLjE5NiAwIDAgMC0uMDQuMDY3QzIgOC4xNTQgMiA5LjQxNyAyIDExLjk0MnYuMTE3YzAgMi41MjQgMCAzLjc4Ny41OTcgNC44MDFjLjU5OCAxLjAxNSAxLjY3NCAxLjU4IDMuODI1IDIuNzA5eiIvPjxwYXRoIGZpbGw9IiM0NDQiIGQ9Im0xNy41NzcgNC40MzJsLTItMS4wNUMxMy44MjIgMi40NjEgMTIuOTQ0IDIgMTIgMmMtLjk0NSAwLTEuODIyLjQ2LTMuNTc4IDEuMzgybC0yIDEuMDVDNC4zMTggNS41MzYgMy4yNDIgNi4xIDIuNjM4IDcuMDcyTDEyIDEybDkuMzYyLTQuOTI3Yy0uNjA2LS45NzMtMS42OC0xLjUzNy0zLjc4NS0yLjY0MSIgb3BhY2l0eT0iLjciLz48cGF0aCBmaWxsPSIjNDQ0IiBkPSJNMjEuNDAzIDcuMTRhMy4xNTMgMy4xNTMgMCAwIDAtLjA0MS0uMDY3TDEyIDEydjEwYy45NDQgMCAxLjgyMi0uNDYgMy41NzgtMS4zODJsMi0xLjA1YzIuMTUxLTEuMTI5IDMuMjI3LTEuNjkzIDMuODI1LTIuNzA4Yy41OTctMS4wMTQuNTk3LTIuMjc3LjU5Ny00Ljh2LS4xMTdjMC0yLjUyNSAwLTMuNzg4LS41OTctNC44MDIiIG9wYWNpdHk9Ii41Ii8+PC9zdmc+",
    "sourceName": "立方",
    "sourceUrl": "https:\/\/qq.com#立方",
    "style": ""
}
广告