mirror of
https://github.com/027xiguapi/code-box.git
synced 2026-04-28 15:22:15 +00:00
119 lines
3.3 KiB
TypeScript
119 lines
3.3 KiB
TypeScript
import type {
|
|
PlasmoCSConfig,
|
|
PlasmoCSUIProps,
|
|
PlasmoGetOverlayAnchor,
|
|
PlasmoGetShadowHostId,
|
|
PlasmoGetStyle
|
|
} from "plasmo"
|
|
import React, { type FC } from "react"
|
|
|
|
import { useMessage } from "@plasmohq/messaging/hook"
|
|
import { useStorage } from "@plasmohq/storage/dist/hook"
|
|
|
|
import TagBtnStyle from "~component/tagBtn/style"
|
|
import Tags from "~component/ui/tags"
|
|
import ToolBox from "~component/ui/toolBox"
|
|
import { i18n, saveHtml, saveMarkdown } from "~tools"
|
|
import useCssCodeHook from "~utils/cssCodeHook"
|
|
import { useEditMarkdown } from "~utils/editMarkdownHook"
|
|
import { useParseMarkdown } from "~utils/parseMarkdownHook"
|
|
import { Print } from "~utils/print"
|
|
import Turndown from "~utils/turndown"
|
|
|
|
export const config: PlasmoCSConfig = {
|
|
matches: ["https://*.segmentfault.com/**"]
|
|
}
|
|
|
|
const turndownService = Turndown()
|
|
const articleTitle = document
|
|
.querySelector<HTMLElement>("head title")
|
|
.innerText.trim()
|
|
|
|
const HOST_ID = "codebox-segmentfault"
|
|
export const getShadowHostId: PlasmoGetShadowHostId = () => HOST_ID
|
|
|
|
export const getOverlayAnchor: PlasmoGetOverlayAnchor = async () =>
|
|
document.querySelector(".article-wrap.container")
|
|
|
|
export const getStyle: PlasmoGetStyle = () => TagBtnStyle()
|
|
|
|
const PlasmoOverlay: FC<PlasmoCSUIProps> = ({ anchor }) => {
|
|
const [parseContent, setParseContent] = useParseMarkdown()
|
|
const [allShowTag, setAllShowTag] = useStorage("config-allShowTag", true)
|
|
const [showTag, setShowTag] = useStorage<boolean>(
|
|
"segmentfault-showTag",
|
|
true
|
|
)
|
|
const [cssCode, runCss] = useCssCodeHook("segmentfault")
|
|
const [content, setContent] = useEditMarkdown()
|
|
|
|
useMessage(async (req, res) => {
|
|
if (req.name == "segmentfault-isShow") {
|
|
res.send({ isShow: true })
|
|
}
|
|
if (req.name == "segmentfault-editMarkdown") {
|
|
editMarkdown()
|
|
}
|
|
if (req.name == "segmentfault-downloadMarkdown") {
|
|
downloadMarkdown()
|
|
}
|
|
if (req.name == "segmentfault-downloadHtml") {
|
|
downloadHtml()
|
|
}
|
|
if (req.name == "segmentfault-downloadPdf") {
|
|
downloadPdf()
|
|
}
|
|
})
|
|
|
|
function getDescription() {
|
|
const summary = document.querySelector<HTMLMetaElement>(
|
|
'meta[name="description"]'
|
|
).content
|
|
summary && prompt("文章摘要:", summary)
|
|
}
|
|
|
|
function downloadPdf() {
|
|
const article = document.querySelector<HTMLElement>(".container")
|
|
if (article) {
|
|
Print.print(article, { title: articleTitle })
|
|
.then(() => console.log("Printing complete"))
|
|
.catch((error) => console.error("Printing failed:", error))
|
|
}
|
|
}
|
|
|
|
function editMarkdown() {
|
|
const dom = document.querySelector(".container")
|
|
setContent(dom, articleTitle)
|
|
}
|
|
|
|
function downloadMarkdown() {
|
|
const html = document.querySelector(".container")
|
|
const markdown = turndownService.turndown(html)
|
|
saveMarkdown(markdown, articleTitle)
|
|
}
|
|
|
|
function downloadHtml() {
|
|
const dom = document.querySelector(".container")
|
|
saveHtml(dom, articleTitle)
|
|
}
|
|
|
|
function parseMarkdown() {
|
|
const dom = document.querySelector(".container")
|
|
setParseContent(dom)
|
|
}
|
|
|
|
return showTag && allShowTag ? (
|
|
<ToolBox
|
|
onGetDescription={getDescription}
|
|
onEditMarkdown={editMarkdown}
|
|
onDownloadMarkdown={downloadMarkdown}
|
|
onPrint={downloadPdf}
|
|
onParseMarkdown={parseMarkdown}
|
|
/>
|
|
) : (
|
|
<></>
|
|
)
|
|
}
|
|
|
|
export default PlasmoOverlay
|