cosense-srsの穴埋めを作るPopupMenu
ボタン
c1
選択範囲を穴埋めにする
押すと番号が増えるボタンと増えないボタンがある
後者は同時に穴埋めしたい箇所に使う
reset cloze
穴埋め番号を1に戻す
code:script.js
// IDの発行
var s="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&()*+,-./:;<=>?@[]^_`{|}~",a=()=>{let e=Math.floor(Math.random()*Number.MAX_SAFE_INTEGER),t="";for(;e>0;){let r=Math.floor(e/s.length),n=e%s.length;t+=sn,e=r}return t.split("").reverse().join("")}; scrapbox.PopupMenu.addButton({
title: (text) => "note ID",
onClick: (text) => {
if (!text.includes("\n")) return text.replace(/^(\s*)(.*)$/, $1\`${a()}\`$2);
const indent = Math.min(
...text.split("\n").map((line) => line.match(/^\s*/)?.0?.length ?? 0) );
return [
${" ".repeat(indent)}\`${a()}\`,
...text.split("\n").map((line) => ${line})
].join("\n");
},
});
let counter = 1;
// 新規穴埋め
scrapbox.PopupMenu.addButton({
title: (text) => text.includes("\n") ? "" : c${counter},
onClick: (text) => [!${"*".repeat(counter++)} ${text}],
});
// 番号を継続して穴埋め
scrapbox.PopupMenu.addButton({
// 最初は表示しない
title: (text) => text.includes("\n") || counter <= 1 ? "" : c${counter - 1},
onClick: (text) => [!${"*".repeat(Math.max(1, counter - 1))} ${text}],
});
// 穴埋め番号のリセット
scrapbox.PopupMenu.addButton({
title: () => counter > 1 ? "reset cloze" : "",
onClick: () => { counter = 1; },
});
穴埋め用CSS
code:css
.line {
--cosense-srs-cloze-text-color: #3cb371; strong.level{
.deco-\! {
color: var(--cosense-srs-cloze-text-color);
border-bottom: 2px solid var(--cosense-srs-cloze-text-color);
}
&:has(.deco-\!.deco-\*) {
font-weight: normal;
font-size: inherit;
line-height: inherit;
}
}
&:not(.cursor-line) .level-1 .deco-\! span.char-index {
visibility: hidden;
}
}