日報ページ作成script
以下のフォーマットを右側の+ボタンクリックから作成できる
code:ふぉーまっと
YYYY/M/D
曜日
導入は以下の手順
0. userscriptを有効化する
1. settingsに以下を追加(他のstyle.cssとの干渉がある場合は末尾に追加)
code:style.css
button#Templates.tool-btn:hover { text-decoration: none }
button#Templates.tool-btn::before { position: absolute; content: '\f067'; font: 900 21px/46px 'Font Awesome 5 Free' }
button#Templates.tool-btn img { opacity: 0 }
2. テンプレを作る
このテンプレを後続手順にてURLで参照させる
code:日報ページ作成script.js
(() => {
const today = new Date();
const yesterday = new Date(today);
yesterday.setDate(today.getDate() - 1);
const tomorrow = new Date(today);
tomorrow.setDate(today.getDate() + 1);
const formatDate = (date) => ${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()};
const formatMonth = (date) => ${date.getFullYear()}/${date.getMonth() + 1};
const dateString = formatDate(today);
const yesterdayString = formatDate(yesterday);
const tomorrowString = formatDate(tomorrow);
const monthString = formatMonth(today);
const dayOfWeek = getDayOfWeek(today);
return `${dateString}
${dayOfWeek}曜日
})();
3. 自分のページに以下を追加
テンプレートメニューの定義 のURLは各自で変える
手順2で作ったやつを参照させる形
別のscriptと干渉したり依存したりしていたのでchatGPT.iconにいじって貰った
code:script.js
// ユーザーページにテンプレートメニューを追加するスクリプト
function addTemplateItemsToPageMenu() {
// テンプレートメニューの定義(必要に応じて追加・変更してください)
const __templates = [
{ title: '📄 日報テンプレート', url: '/api/code/mouii/日報ページ作成script/日報ページ作成script.js' },
{ title: '📅 月次日記テンプレート', url: '/api/code/mouii/月次ページ作成script/月次テンプレート.js' }
];
const __templateMenuTitle = 'Templates';
// メニューを Scrapbox のページメニューに追加
scrapbox.PageMenu.addMenu({
title: __templateMenuTitle,
image: '/assets/img/logo.png',
onClick: () => {} // クリック時のアクションはここで指定(今回は何もしない)
});
// テンプレートを読み込みテキストエリアに反映する関数
const __loadTemplate = templateUrl => {
const textarea = document.getElementById('text-input');
if (!textarea) return;
// テキストエリアにフォーカスし、カーソルを末尾へ移動
textarea.focus();
textarea.setSelectionRange(textarea.value.length, textarea.value.length);
// fetch を使ってテンプレートの内容を取得
fetch(templateUrl)
.then(response => {
if (!response.ok) {
throw new Error("テンプレートの読み込みに失敗しました: " + response.status);
}
return response.text();
})
.then(responseText => {
try {
// テンプレート用スクリプトの内容を eval して実行し、テンプレート文字列を取得
const templateContent = eval(responseText);
// 既存の内容がある場合は改行を挟んで連結
const existingContent = textarea.value;
const newContent = existingContent
? existingContent + "\n\n" + templateContent
: templateContent;
textarea.value = newContent;
// 入力イベントを発火して Scrapbox 側に変更を伝える
textarea.dispatchEvent(new InputEvent('input', { bubbles: true, cancelable: true }));
// カーソルを末尾に移動
textarea.setSelectionRange(newContent.length, newContent.length);
console.log("テンプレートが追加されました");
} catch (ex) {
console.error("テンプレートの追加に失敗しました:", ex);
}
})
.catch(error => {
console.error(error);
});
};
// 各テンプレートをメニューアイテムとして追加
__templates.forEach(template => {
scrapbox.PageMenu(__templateMenuTitle).addItem({
title: template.title,
onClick: () => { __loadTemplate(template.url); }
});
});
}
// ユーザーページ読み込み時にテンプレートメニューを追加する
addTemplateItemsToPageMenu();
public.icon