switch-status-icon
code:script.js
import { deleteLine } from '../delete-line/script.js'
import { goLine } from '/api/code/takker/scrapbox-userscript-std/mod.ts'
export const switchStatusIcon = () => {
const statuses = 'pending', 'public'
const pattern = \\[(${statuses.join('|')})\.icon\\]
const regex = new RegExp(pattern)
// 最初にヒットしたアイコンを対象とする
const matched = scrapbox.Page.lines
.map((line, index) => ({ index, line }))
.find(({ line }) => regex.test(line.text))
if (!matched) {
scrapbox.Page.insertLine([${statuses[0]}.icon], 1)
} else if (matched.line.text === [${statuses.at(-1)}.icon]) {
goLine(matched.index)
deleteLine()
} else {
const currentStatus = matched.line.text.match(/\[(^\]+)\.icon\]/)1
const nextStatus = statusesstatuses.indexOf(currentStatus) + 1
scrapbox.Page.updateLine([${nextStatus}.icon], matched.index)
}
}
code:menu.js
import { switchStatusIcon } from './script.js'
scrapbox.PageMenu.addMenu({
title: 'Switch Status',
image: 'https://scrapbox.io/files/672f25faf4667d612151506b.svg',
onClick: () => {
switchStatusIcon()
},
})
https://gyazo.com/9f5477b195e7c701b5f85930549fa357
page-menu