●PageMenu:リンク先ページのコードを取得して追記する
目的
CSSやScriptを内容ごとに別ページで管理したいが、大量importの形を取りたくない
→各ページの内容を自動でコピペしたらいいのでは
挙動
開いているページ内に貼られたページリンク全てについて、
style.cssまたはscript.jsのコードブロックの内容を取得し、
開いているページの一番下に追加する
注意
自分用なので動作の保証はしません
追加の際に有効なページの数だけ一時的にウインドウを別タブで開きます
20秒すると自動で閉じます(新しいタブの読み込み完了までに必要な時間を確保する必要があります)
コードがあまりにも長い場合、仕様上この形式では取得できません
取得したいページのコードブロックのタイトルが「style.css」「script.js」でないと動作しないので、他の人のプロジェクトのコードをそのまま取得できるとは限りません
自分のプロジェクト内でやることを想定したスクリプトです
code:script.js
(()=>{
scrapbox.PageMenu.addMenu({
title: 'AddCodes',
});
scrapbox.PageMenu('AddCodes').addItem({
title: 'AddStyle',
onClick: () => {addCodes('style.css')},
})
scrapbox.PageMenu('AddCodes').addItem({
title: 'AddScript',
onClick: () => {addCodes('script.js')},
})
function addCodes(type){
const links = document.querySelectorAll('.lines .page-link');
links.forEach(link=>{
fetch(/api/code${link.href.replace('https://scrapbox.io','')}/${type})
.then(response => response.text())
.then(text => {
if(!text) return;
const str = code:${type}\n\t + text.replace(/\n/g,'\n\t');
const write = window.open(https://scrapbox.io/${scrapbox.Project.name}/${scrapbox.Page.title}?body=${encodeURIComponent(str)});
setTimeout(()=>write.close(),20000); // 閉じるまでが長過ぎる場合は20000の部分を減らしてください
});
})
}
})();
余談
取得したいページの指定についてはtableを使うとかコードブロック内に記述するとか色々やりようがある(多分)