generated at
今日のページをnavbarから開くUserScript
navbar(画面右上)にボタンを表示して、「今日のページ」を開く
日付ページ、日記ページとも
今日のページを取得してみて、内容がまだ空ならテンプレート(空行と日付リンク)を書くが、空でなければ単に開く
現在のデザインは空行数行 + 前後の日付へのリンク
日付リンクは下においている
関連ページリストに表示された時に、日付リンクしか見えないのが残念なので
空白をあらかじめ置くことで、好きに書けるスペースを確保している気持ち
真っ白なノート的な
好きに変えて下さい
黄色い行選択を解除しておく
(方法はわからない)

更新履歴
適当にrefactoringした
Promiseのmethod chainを async/await に展開
a.click() を使う
2021/1/6:onclickが繰り返し発火するバグ修正
開くタブを選べるようにした
ページ遷移をwindow.openからa.hrefに変えた
普通にクリックしたら現在のタブ、右クリック→新しいタブで開くとかをしたら新しいタブで開く
すでになにか書いてあっても日付タグがなければ挿入するようにした

UserScript
script.js
(() => { const navbar = document.getElementsByClassName('navbar-menu')[0]; // see https://nota.github.io/kamon/example/ navbar.insertAdjacentHTML('beforeend', `<li class="today-btn"> <a> <span class="kamon kamon-pencil"></span> </a> </li>`); function getDate(i) { const d = new Date(); d.setDate(d.getDate() + i); return [`${d.getFullYear()}`, `${d.getMonth() + 1}`, `${d.getDate()}`]; } const projectName = scrapbox.Project.name; const today = getDate(0); const prev = getDate(-1); const next = getDate(1); const title = encodeURIComponent(`${today[0]}/${today[1]}/${today[2]}`); const todayPage = `https://scrapbox.io/api/pages/${projectName}/${title}`; const dateTag = `[${prev[0]}/${prev[1]}/${prev[2]}] -> [${today[0]}/${today[1]}]/${today[2]} -> [${next[0]}/${next[1]}/${next[2]}]`; const todayButton = navbar.lastElementChild; todayButton.addEventListener('click', (e) => { const res = await fetch(todayPage); const json = await res.json(); const body = json.lines.every(line => !line.text.includes(dateTag)) ? encodeURIComponent( '\n'.repeat(8) // 書く場所 + dateTag + '\n' ) : ''; const a = todayButton.getElementsByTagName('a')[0]; a.href = `https://scrapbox.io/${projectName}/${title}?body=${body}`; //a.click(); let obj = {}; for (const key in e) { obj[key] = key != 'bubbles' ? e[key] : false; } const e_ = new MouseEvent(e.type, obj); a.dispatchEvent(e_); }); })();


開発メモ
onclickが何回も発生してしまうバグ
もらったeventをそのままdispatchEventしていたので、bubbleされてまたliのclick eventが発火してループになっていた
eventはsetterをもたないらしいので、for文で書き写しつつbubblesだけfalseにして新しいイベントをつくり、そっちをdispatch
もっといいやり方がありそう...
a.click() で済むのでは?takker
/villagepump/web browserで便利なショートカット#5ffc13721280f0000007a619を使いたいので、Ctrl+clickとかShift+clickとかの場合に、キーの情報を引き継ぎたいyosider
なるほどtakker
eventのクローンづくりとfetch処理とでPromiseしてみた
後者が圧倒的に遅いので、結局速度的には同じかsequentialのほうが少し速い感じだった
Promise.all()は一度に大量のfetch処理をするときに威力を発揮する

JavaScript