status barに文字カウントを表示する(event版)
script.js(() => {
const statusDom = document.createElement('div')
document.querySelector('.status-bar').appendChild(statusDom)
updateStatusDom()
updateCount()
scrapbox.on('layout:changed', updateStatusDom)
scrapbox.on('lines:changed', updateCount)
function updateStatusDom () {
if (scrapbox.Layout !== 'page') {
document.querySelector('.status-bar').removeChild(statusDom)
} else {
document.querySelector('.status-bar').appendChild(statusDom)
}
}
function updateCount () {
if (!window.scrapbox.Page.lines) return
const chars = scrapbox.Page.lines.map(line => line.text.length).reduce((a, b) => a + b)
const words = scrapbox.Page.lines.map(line => line.text.split(/\s/).length).reduce((a, b) => a + b)
const lines = scrapbox.Page.lines.length
statusDom.innerText = `${lines}lines ${words}words ${chars}char`
}
})()
これまではページのデータが更新されたことを検知するまともな手段がなかった
setIntervalで window.scrapbox.Page.lines
をひたすら監視
どちらかしかなかった
ポイント
page list画面で文字カウントを表示しない
画面レイアウトの変更イベントで表示・非表示を切り替えている