swawa_yu
https://lh3.googleusercontent.com/a-/AOh14Ghw7ZXiOJ3Isi8oKlwIWJ3weYsh4tLGxrPm1BJD#.png
経歴とか所属とか
誕生日:2002-04-19
2022-04~ 広島大学教育学部
サークル HiCoder 代表 (2024年度)
くらいしか書くことない あまり所属を公にすると面倒なので。。。
セキュリティ・ミニキャンプ in 広島 2023
技育博'23
科学の甲子園'20
SuperCon'18 '19
JESO'19
趣味・興味
自作キーボード
メモツール
Web開発
ミニ四駆
合氣道
資格とか
応用情報技術者試験 (2024年4月の試験で合格)
User Script
code:script.js
scrapbox.TimeStamp.addFormat(']YYYY-MM-DD[')
scrapbox.TimeStamp.addFormat('[]YYYY-MM-DD[]')
scrapbox.TimeStamp.addFormat(']YYYY-MM-DD[ hh:mm')
code:script.js
scrapbox.PageMenu.addItem({
title: () => {
if (!scrapbox.Page.lines) return
const chars = scrapbox.Page.lines.map(line => line.text.length).reduce((a,b) => a + b)
const words = scrapbox.Page.lines.map(line => line.text.split(/\s+/).length).reduce((a,b) => a + b)
return ${chars}文字 ${words}単語 ${scrapbox.Page.lines.length}行
},
onClick: () => null
})
code:script.js
scrapbox.PopupMenu.addButton({
title: 'quote',
onClick: text => text.split(/\n/).map(line => > ${line}).join('\n')
})
code:script.js
scrapbox.PageMenu.addMenu({
title: '見出し',
onClick: () => {
scrapbox.PageMenu('見出し').removeAllItems()
for (let line of scrapbox.Page.lines) {
if (!line.section.start) continue
if (!line.text.startsWith("[#* ") && !line.text.startsWith("[#** ") && !line.text.startsWith("[#*** ")) continue
if (!line.nodes) continue
const image = ""
const noIcon = false
// hogeとhogeは先頭をインデントする。
const marginLeft = line.text.startsWith("[#* ") ? " ・" : ""
const marginLeft2 = line.text.startsWith("[#** ") ? "●" : ""
const title = marginLeft + marginLeft2 + renderPlainText(line.nodes)
const onClick = () => location.hash = line.id
scrapbox.PageMenu('見出し').addItem({ title, image, onClick })
}
}
})
function renderPlainText(node) {
if (node instanceof Array) return node.map(node => renderPlainText(node)).join('')
if (typeof node === 'string') return node
switch (node.type) {
case 'icon':
case 'strong-icon':
return node.unit.page
}
return renderPlainText(node.children)
}
function getIconUrl(node) {
if (/icon/.test(node.type)) {
return /api/pages/${node.unit.project||scrapbox.Project.name}/${node.unit.page}/icon
}
if (node instanceof Array) {
return node.map(getIconUrl).find(img => img)
}
return null
}
code:script.js
scrapbox.PopupMenu.addButton({
title: 'NewPage',
onClick: text => {
const lines = text.split(/\r\n/g) .trim()
.replace(/\^\+.icon\]/gm, '')
const projectRoot = (() => {
const tmp = location.href.split('/')
tmp.pop()
return tmp.join('/')
})()
const currentPageTitle = decodeURIComponent(location.href.split(/\//g).pop())
lines.unshift(from [${currentPageTitle}])
const body = encodeURIComponent(lines.join('\n'))
window.open(${projectRoot}/${title}?body=${body})
return [${title}]
}
})