テンプレートJS
#UserScript
https://scrapbox.io/files/6629ce7dba7a560025581988.png
/scrasobox/テンプレートを使ってページを作成(UserScript版)のJavaScript
UserCSS
Template
code:script.js
addTemplateItemsToPageMenu()
function addTemplateItemsToPageMenu() {
テンプレートの定義
TemplateにTXT形式でテンプレートを記載する
code:script.js
const __templates = [
{
title: '📘 論文メモ',
template: '/api/code/kameLayout/Template/thesis.txt'
},
{
title: '📘 研究進捗',
template: '/api/code/kameLayout/Template/research.txt'
},
{
title: '📘 授業ノート',
template: '/api/code/kameLayout/Template/classNote.txt'
},
{
title: '📘 マイノート',
template: '/api/code/kameLayout/Template/myNote.txt'
},
{
title: '📘 参考書',
template: '/api/code/kameLayout/Template/reference.txt'
},
{
title: '⏰ 授業スケジュール',
template: '/api/code/kameLayout/Template/classSchedule.txt'
},
{
title: '⏰ 各授業スケジュール',
template: '/api/code/kameLayout/Template/lessonSchedule.txt'
},
{
title: '💻 AtCoder',
template: '/api/code/kameLayout/Template/atcoder.txt'
},
{
title: '💻 作業報告書',
template: '/api/code/kameLayout/Template/workReport.txt'
},
{
title: '💻 請求書',
template: '/api/code/kameLayout/Template/payStatement.txt'
},
]
code:script.js
const __templMenuTitle = 'Templates'
scrapbox.PageMenu.addMenu({ title: __templMenuTitle, image: 'https://scrapbox.io/files/6629ce7dba7a560025581988.png', onClick: () => { } })
__templates.forEach((i) => {
scrapbox.PageMenu(__templMenuTitle).addItem({
title: i.title,
onClick: () => { __loadTemplate(i.template) }})
})
var __loadTemplate = function (templateUrl) {
if (scrapbox.Page.lines && scrapbox.Page.lines.length == 1) {
// タイトル行をクリックしたことにする
const line = document.getElementById('L' + scrapbox.Page.lines0.id)
const lastChar = line.querySelector('span.char-index:last-of-type')
const textarea = document.getElementById('text-input')
lastChar.dispatchEvent(new MouseEvent('click', {bubbles: true, cancelable: true}))
textarea.dispatchEvent(new KeyboardEvent('keydown', {bubbles: true, cancelable: true, keyCode: 35}))
// テンプレートを読み込む
$('#text-input').load(templateUrl, function (response, status, xhr) {
if (status == "success") {
try {
// 読み込んだテンプレートをテキストエリアにセットしまして
textarea.value = /\.js$/.test(templateUrl) ? eval(response) : response
// テキストエリアのinputイベントを出しまして
textarea.dispatchEvent(new InputEvent('input', {bubbles: true, cancelable: true}))
} catch (ex) {
console.log("だめでした>< \n" + ex)
}
} else {
console.log("だめでした>< \n" + status)
}
})
}
}
}