diff --git a/contents/custom.tsx b/contents/custom.tsx index ab077ac..71695ce 100644 --- a/contents/custom.tsx +++ b/contents/custom.tsx @@ -4,7 +4,7 @@ import { useEffect, useState } from "react" import { useMessage } from "@plasmohq/messaging/hook" import { useStorage } from "@plasmohq/storage/hook" -import { addCss, saveHtml, setIcon } from "~tools" +import { addCss, saveTxt, setIcon } from "~tools" const documentClone = document.cloneNode(true) const article = new Readability(documentClone as Document, {}).parse() @@ -44,12 +44,16 @@ export default function Custom() { function getCodes() { let codes = [] let codesTxt = [] - const _codes = document.querySelectorAll("code") + const _codes = document.querySelectorAll("pre") _codes.forEach((code) => { - const pre = code.closest("pre") - if (pre) { + let codeTxt = code.innerText + if (code.querySelector("code")) { + codeTxt = code.querySelector("code").innerText + } + codeTxt = codeTxt.replace(/\n/g, "") + if (codeTxt.length > 8) { codes.push(code) - codesTxt.push(code.innerText.replace(/\n/g, "")) + codesTxt.push(codeTxt) } }) setCodes(codes) @@ -58,12 +62,15 @@ export default function Custom() { function scrollIntoViewCode(data) { const code = codes[data.index] - code.scrollIntoView() + code && code.scrollIntoView() } function downloadCode(data) { - const code = codes[data.index] - saveHtml(code, article.title) + let code = codes[data.index] + if (code && code.querySelector("code")) { + code = code.querySelector("code") + } + code && saveTxt(code.innerText, article.title) } return
diff --git a/package.json b/package.json index 8161153..a281de3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-box", "displayName": "__MSG_extensionName__", - "version": "0.6.0", + "version": "0.6.1", "description": "__MSG_extensionDescription__", "author": "027xiguapi. <458813868@qq.com>", "scripts": { diff --git a/public/app.md b/public/app.md index c056bcf..a2a3ceb 100644 --- a/public/app.md +++ b/public/app.md @@ -26,27 +26,27 @@ https://github.com/027xiguapi/code-box 1. 一键下载对话框html或markdown文件 2. 关闭AI对话框 ### 简书 -1. 一键下载对话框html或markdown文件 +1. 一键下载文章html或markdown文件 2. 一键复制代码 3. 不再提示展开阅读全文,且完整展示文章 4. 不会再出现强制登录弹窗 ### 脚本之家 -1. 一键下载对话框html或markdown文件 +1. 一键下载文章html或markdown文件 2. 打开任意一个脚本之家博客即可开始复制代码 3. 未登录脚本之家状态下,支持选中代码 4. 屏蔽广告 5. 移动端未登录脚本之家状态下,代码右上角按钮一键复制 ### 博客园 -1. 一键下载对话框html或markdown文件 +1. 一键下载文章html或markdown文件 2. 一键复制代码 ### 51CTO博客 -1. 一键下载对话框html或markdown文件 +1. 一键下载文章html或markdown文件 2. 未登录51CTO博客状态下,支持选中代码 3. 未登录51CTO博客状态下,代码右上角按钮一键复制 4. 未登录51CTO博客状态下,不会再出现强制登录弹窗 5. 移动端未登录51CTO博客状态下,代码右上角按钮一键复制 ### php中文网 -1. 一键下载对话框html或markdown文件 +1. 一键下载文章html或markdown文件 2. 未登录php中文网状态下,支持选中代码 3. 未登录php中文网状态下,代码右上角按钮一键复制 4. 未登录php中文网状态下,不会再出现强制登录弹窗 diff --git a/tools.ts b/tools.ts index 49d196f..963aa1c 100644 --- a/tools.ts +++ b/tools.ts @@ -26,6 +26,14 @@ export function setIcon(active: boolean) { }) } +export function saveTxt(txt: string, filename?: string) { + if (txt) { + const blob = new Blob([txt], { type: "text/plain;charset=utf-8" }) + filename = filename || "CodeBox-page" + saveAs(blob, `${filename}.txt`) + } +} + export function saveHtml(dom: Element, filename?: string) { if (dom) { const htmlContent = dom.outerHTML