Paste Filter
todo
複数規則の一体化
命名/保存機能
editorとsaved filterのインターフェイス分離
code:script.js
import {insertText} from '/api/code/customize/scrapbox-insert-text/script.js';
import {parse} from '/api/code/customize/html2sb/script.js';
let converterId = "null"
function getConverter(fId) {
switch(fId) {
case "null":
return null;
case "regex":
return (x => {
console.log({x, pattern});
if (pattern.replaceText === null && pattern.regexPattern === null) {
return x
}
return x.replace(pattern.regexPattern, pattern.replaceText)
})
case "html2sb":
return (x => parse({html:x}));
default:
throw new Error("fId should be one of null, regex, html2sb. Received: " + fId);
}
}
document.addEventListener('paste', async event => {
console.log({event, pattern, converterId});
const type = 'text/html';
const d = event.clipboardData;
let converter = getConverter(converterId);
if (!document.querySelector("main")?.contains(event.target)) return;
if (converter === null) return;
let input = "";
event.preventDefault();
if (!(d.types && d.types.indexOf('Files') == -1 && -1 < d.types.indexOf(type))) {
input = await navigator.clipboard.readText().catch(() => "");
if (!input) return;
} else {
input = d.getData(type);
}
const text = converter(input);
insertText({
text,
cursor: document.getElementById('text-input'),
});
});
scrapbox.PageMenu.addMenu({
title: "Paste Filter",
});
scrapbox.PageMenu("Paste Filter").addItem({
title: "none",
onClick: () => {converterId = "null"},
});
scrapbox.PageMenu("Paste Filter").addItem({
title: "regex",
onClick: () => {converterId = "regex"; main();},
});
scrapbox.PageMenu("Paste Filter").addItem({
title: "html2sb",
onClick: () => {converterId = "html2sb"},
});