generated at
特定のページのみを含んだexport用dataを生成するbookmarklet
テロメアを含んだscrapboxのimport機能用JSON dataを生成するBookmarklet

用途

仕様
任意のscrapbox page上で発動するbookmarklet
実行すると、そのページに含まれている全てのリンク先のページデータを一つのJSON fileにまとめ、downloadする
空リンク・外部プロジェクトのリンク・外部リンクは除く

更新
2021-08-03
19:47:20 refactoring
19:41:07 開いているページそのものをexportするversionを追加した
2020-09-25 13:48:06 URLに用いるページタイトルを正しくescapeするようにした

bookmarklet.js
javascript:(()=>{let s=document.createElement("script");s.src='https://scrapbox.io/api/code/customize/特定のページのみを含んだexport用dataを生成するbookmarklet/script.js';document.body.appendChild(s);})()
script.js
javascript:(async () => { if(document.domain !== 'scrapbox.io') return; // ページ内の全リンクを取得 const res = await fetch( `/api/pages/${scrapbox.Project.name}/${encodeURIComponent(scrapbox.Page.title)}` ); const {links} = await res.json(); // 空リンクを除いて、URL用タイトルを取得する const titles = links.flatMap(link => { const page = scrapbox.Project.pages.find(page => page.title == link || page.titleLc == link); return page?.exists ? [page.titleLc] : []; }); // debug用 console.log(titles); // export用page dataを作成 const promises = titles.map(async pageName => { const res2 = await fetch( `/api/pages/${scrapbox.Project.name}/${encodeURIComponent(pageName)}` ); const {title, created, updated, lines} = await res2.json(); return {title, created, updated, lines}; }); const exportPages = {pages: await Promise.all(promises)};

script.js
const blob = new Blob( [JSON.stringify(exportPages)], {type: 'application/json'} ); // download dataを作成 const url = window.URL.createObjectURL(blob); // download linkを生成 // 同一scrapbox pageに隠しa要素を作り、それを踏んでdownloadを実行する const a = document.createElement('a'); a.href = url; a.download = 'import.json'; a.style.display = 'none'; document.body.appendChild(a); // downloadを実行 a.click(); // 後始末 window.URL.revokeObjectURL(url); a.parentNode.removeChild(a); })();

開いているページそのものをexportするversion
bookmarklet2.js
javascript:(()=>{let s=document.createElement("script");s.src='https://scrapbox.io/api/code/customize/特定のページのみを含んだexport用dataを生成するbookmarklet/script2.js';document.body.appendChild(s);})()

script2.js
javascript:(async() => { if(document.domain !== 'scrapbox.io') return; const targetPage = `/api/pages/${scrapbox.Project.name}/${encodeURIComponent(scrapbox.Page.title)}`; const response = await fetch(targetPage); const json = await response.json(); const exportData = {pages: [{ title: json.title, created: json.created, updated: json.updated, lines: json.lines, },],}; const blob = new Blob([JSON.stringify(exportData,null,' ')], {type: 'octet/stream'}); // download dataを作成 const url = window.URL.createObjectURL(blob); // download linkを生成 // 同一scrapbox pageに隠しa要素を作り、それを踏んでdownloadを実行する const a = document.createElement('a'); a.href = url; a.download = 'import.json'; a.style.display = 'none'; document.body.appendChild(a); // downloadを実行 a.click(); // 後始末 window.URL.revokeObjectURL(url); a.parentNode.removeChild(a); })();