generated at
rescrap

script.js
const projects = new Promise((resolve, reject) => { fetch('https://scrapbox.io/api/projects') .then(response => response.json()) .then(json => json.projects) .then(resolve) .catch(reject) }) const rescrap = project => { const { title, lines } = scrapbox.Page const body = lines.reduce((acc, { text }) => `${acc}\n${text}`, '').trim() + `\n\nfrom [/${scrapbox.Project.name}/${title}]\n` const link = `https://scrapbox.io/${encodeURIComponent(project)}/new?body=${encodeURIComponent(body)}` console.log(body) window.open(link, '_blank', 'noopener') } const rescrapProjectFilterInput = document.createElement('input') rescrapProjectFilterInput.type = 'text' rescrapProjectFilterInput.id = 'rescrap-filtering-input' rescrapProjectFilterInput.addEventListener('input', async e => { scrapbox.PageMenu('re-scrap').removeAllItems() const query = rescrapProjectFilterInput.value.toLowerCase() for (const { name, displayName } of await projects) { if (!name.toLowerCase().includes(query) && !displayName.toLowerCase().includes(query)) continue scrapbox.PageMenu('re-scrap').addItem({ title: displayName, onClick: () => { rescrap(name) } }) } }) scrapbox.PageMenu.addMenu({ title: 're-scrap', image: 'https://gyazo.com/024fe39c0328fabb99566c6ad743ee54/raw', onClick: async () => { scrapbox.PageMenu('re-scrap').addItem({ title: 'Now loading...', onClick: () => null }) await projects scrapbox.PageMenu('re-scrap').removeAllItems() for (const { name, displayName } of await projects) { scrapbox.PageMenu('re-scrap').addItem({ title: displayName, onClick: () => { rescrap(name) } }) } const ul = document.querySelector('ul[aria-labelledby="re-scrap"].dropdown-menu') rescrapProjectFilterInput.value = '' ul.prepend(rescrapProjectFilterInput) rescrapProjectFilterInput.focus() } })

style.css
ul[aria-labelledby="re-scrap"].dropdown-menu>li>a { width: 300px; text-overflow: ellipsis; display: list-item; }