适配logseq主题
logseq有light和dark两种主题模式,如果我们要让我们的插件在不同主题的下显示不同的配色。主要思路是通过获得logseq当前的状态。并改变当前html所对应的css。
实现
在无框架下的实现方式
无框架下的实现方式我们在之前之前写的renderer组件上进行修改让在dark模式下显示红色,light模式下显示黑色。
修改index.ts
logseq.App.onMacroRendererSlotted(({ slot, payload} ) => {
const [type,name,color] = payload.arguments
// 这里是新增的代码
const theme = top?.document
.querySelector("html")
?.getAttribute("data-theme") as typeof mode) ??
(matchMedia("prefers-color-scheme: dark").matches ? "dark" : "light");
//
if (type !== ':hello') return
logseq.provideUI({
key: 'hello',
reset: true,
slot, template: `
<div style="background-color: ${ theme === "dark"?"red":"green" }" class="hello"
data-block-uuid="${payload.uuid}"
data-on-click="msg" >
hello! ${name}
</div>
`,
})
})这段新增的代码来自logseq-plugin-heatmap的实现。我们这里直接借用。
修改下面组件的代码,让他判断当前的theme去选择css颜色。
现在看看效果


在logseq-plugin-template-react下的实现方式
logseq-plugin-template-react下的实现方式这个手脚架自带了windi CSS,所以我们将用windi CSS实现。同时我们将参考logseq-plugin-heatmap的实现。
在utils.ts中定义我们自己的hook。这个hook包装了logseq的api。
在App.tsx中
这样当logseq中的主题改变时,main的css也跟着改变。把css写在className是windi CSS的功能。
当然这才刚刚开始,这只是css中标识着dark和light的值跟着logseq一直改变而已。我们还要为我们的页面写不同的配色的css。我们以第四章中的create table插件为例。
在dashborad.css中修改,对应的是你组件的css,light和dark对应不同颜色的背景
这里是windi CSS的语法。我们在logseq中看看效果,不同主题成功切换了不同的配色。


ps:遇到一些windicss中的颜色无法使用,目前还没有找到原因。
最后更新于