Inside page MassDelete
in Logseq, put the following code in a javascript code-block:const LS = logseq.api
const Module = logseq.Module
const Kits = Module.Kits
const Msg = Module.Msg
function advancedQuery(content, queryWord){
const queryStart = content.indexOf("[", queryWord + 5)
if (queryStart < 0) return
var queryEnd = queryStart + 1
var n = 1
while (n > 0) {
const close = content.indexOf("]", queryEnd)
if (close < 0) return
const open = content.indexOf("[", queryEnd)
if (close < open || open < 0) {
queryEnd = close + 1
n -= 1
continue
}
queryEnd = open + 1
n += 1
}
return content.slice(queryStart, queryEnd)
}
function simpleQuery(content, queryWord){
const queryStart = queryWord + 6
const queryEnd = content.indexOf("}}", queryStart)
return content.slice(queryStart, queryEnd)
}
function getBlocks(content, queryWord){
if (queryWord < 0) return
if (content[queryWord - 1] === ":") {
const query = advancedQuery(content, queryWord)
if (query) return LS.datascript_query(query).flat()
} else if (content.slice(queryWord - 2, queryWord) === "{{") {
const query = simpleQuery(content, queryWord)
if (query) return LS.custom_query(query)
}
}
logseq.kits.massdelete = Kits.addClickEventToButton.bind(null, function onDeleteParentClicked(e){
const child = e.target.closest("div.ls-block")
const parent = child.parentElement.closest("div.ls-block")
const blockId = parent.getAttribute("blockid")
const block = logseq.api.get_block(blockId)
const content = block.content.replace(/\n?.*[:][:].*\n?/g, "\n").trim()
const queryWord = content.indexOf("query")
const res = getBlocks(content, queryWord)
if (!res) return Msg.ofStatus("Missing query", "warning")
res.forEach( (r)=>{
const name = r.name
if (name) LS.delete_page(name)
else LS.remove_block(r.uuid)
})
Msg.ofStatus("Deleted " + res.length, "success")
})