別のprojectからページをインポートする
別のプロジェクトから一部のページをインポートする方法
全部のページをインポートしたいときはプロジェクトを統合したいを参照してください。
1. コピペ
一番簡単
scrapboxのページの実態はただのテキストなので、簡単にコピペできます。
手順
1. コピーしたいページにフォーカスを置く
2. Ctrl+Aを押してタイトルと本文をすべて選択する
3. Ctrl+Cを押してコピーする
4. インポート先のプロジェクトで新しいページを作る
5. Ctrl+Vを押してタイトルと本文を貼り付ける
6. 終了
2. UserScriptをつかう
mobile端末でも有効
↓のコードを置いたprojectからしかインポートできない
手順
以下のcode blockをインポート元のprojectの自分のページに書く
code:script.js
import '/api/code/scrapboxlab/別のprojectからページをインポートする/export.js';
scrapbox.PageMenu.addMenu({
title: 'export',
image: '/assets/img/logo.png'
});
scrapbox.PageMenu('export').addItem({
title: export this page to /PROJECT,
onClick: () => exportPage(PROJECT),
});
3. ブックマークレットをつかう
任意のprojectからインポートできる
手順
以下のcodeをコピペしてブックマークレットを作る
code:bookmarklet.js
javascript:((d,url)=>{let s=d.createElement('script');s.src='https://scrapbox.io/api/code/scrapboxlab/別のprojectからページをインポートする/bookmark.js';d.body.appendChild(s);})(document)
4. /help-jp/ページをインポート・エクスポートする機能を使う
複数のページをまとめてインポートしたいときに便利
作成日時と更新日時、テロメアを維持できる
正直ややこしいだいぶ楽になった
jsonデータを使います
「jsonってなんぞ?」という人は自分で調べてください
もしくは「1.コピペ」で一つ一つインポートして
手順
/customize/特定のページのみを含んだexport用dataを生成するbookmarkletをつかってjsonデータを作る
1. ↑の説明を元にインポート元のプロジェクトのページのjsonデータをdownloadする
2. 適当なブラウザ(Browser)でdownloadしたデータを開く
3. インポートしたいページのデータを選ぶ
ここで、インポートできる形式のjsonデータを作っておく。
形式はここに書いてある
4. インポート先のプロジェクトのSettings->Page Data->Import Pagesから作ったjsonデータをインポートする
code:export.js
export function exportPage(projectName) {
// scrapbox以外のページとapiのページはexport対象から外す
if(document.domain != 'scrapbox.io') return;
if(!scrapbox || scrapbox.Layout !== 'page') return;
const currentProjectName = scrapbox.Project.name;
const currentPageName = encodeURIComponent(scrapbox.Page.title);
// タイトル以外の行を取得する
const body = encodeURIComponent(scrapbox.Page.lines.slice(1).map(l => l.text).join('\n'));
window.open(https://scrapbox.io/${projectName}/${currentPageName}?body=${body});
}
code:bookmark.js
javascript: (async () => {
const targetProject = window.prompt('Export this page to...');
// scrapbox以外のページとapiのページはexport対象から外す
if(document.domain != 'scrapbox.io') return;
if(!scrapbox || scrapbox.Layout !== 'page') return;
const currentProjectName = scrapbox.Project.name;
const currentPageName = encodeURIComponent(scrapbox.Page.title);
// タイトル以外の行を取得する
const body = encodeURIComponent(scrapbox.Page.lines.slice(1).map(l => l.text).join('\n'));
window.open(https://scrapbox.io/${targetProject}/${currentPageName}?body=${body});
})();