引用文の前のドットを消すUserScript
動作サンプル
――――――――――――(下は画像)―――――――――――――――――――――
――――――――――――(画像ここまで)―――――――――――――――――――
引用文2行目(正確には2行目以降)の箇条書きのドットが消えている。
1行目は残すようにしてある。
通常の箇条書きは変化なし。
ソース
removeDotBeforeQuote.jsfunction removeDotBeforeQuote(){
let lines = scrapbox.Page.lines // ScrapboxのAPIを叩いてページ内のデータを取得する。
let isMultiLineQuote = false // 引用ブロックの2行目以降はこのフラグがtrueになる。
let indentLevelBefore = 0 // 前の行のインデントの深さ。
if (lines == null) return
for (let line of lines){
if (!hasQuote(line.nodes)){
isMultiLineQuote = false
continue
}
let level = getIndentLevel(line)
if (!isMultiLineQuote || (isMultiLineQuote && level != indentLevelBefore) ){
// 複数行引用文の始行
// または 前の行と箇条書きの階層が変わった場合
isMultiLineQuote = true
indentLevelBefore = level
revivalDot(line)
continue
}
removeDot(line)
indentLevelBefore = level
}
function hasQuote(nodes){
if (typeof nodes != "object") return false
if (nodes.type == "quote") return true
return hasQuote(nodes.children)
}
function getIndentLevel(line){
if (typeof line.nodes != "object") return null
if (line.nodes.type != "indent") return null
return line.nodes.unit.tag.match(/\s/g).length
}
function removeDot(line){
let dotQuery = document.querySelector(`#L${line.id} .dot`)
if (dotQuery != null) dotQuery.classList.add("invisible")
}
function revivalDot(line){
let dotQuery = document.querySelector(`#L${line.id} .dot`)
if (dotQuery != null) dotQuery.classList.remove("invisible")
}
}
removeDotBeforeQuote();
scrapbox.on('lines:changed', removeDotBeforeQuote);
CSSじゃできなかったのか?
なのでドットを消すには <div>
自体を透明にするか、消すしかない。
後者でやったところ、特定条件下でScrapboxがクラッシュしたので前者にした。
既知のバグ
引用( >
)を削除した後も点が消えたままになっている。
一応、ページを再起動するか、再度インデントすれば直る。