Nrem
Mi estas Nrem, fojfoja bilderartisto, ktp.
(Nomu min kiel /enrem/, /nerem/, aŭ ajna laŭ via plaĉo)
通りすがりの邪仙。
Bildsimboloj
Bilderartojn de Nrem
https://gyazo.com/ffcfe76ff99df43069e08163cdd47d84https://gyazo.com/f8e2ccbe6a4aeb236157ac31d7195996https://gyazo.com/4ec1ea5dda8591cc4fb4dacc06c95d9e
活動内容
Nrem as an artist
Pixel arts / Bilderartoj
https://gyazo.com/85f1ad54cbabcda8dc60c11bc9cab411https://gyazo.com/c968a3606c01e8d4ec1df38c8f61802ehttps://gyazo.com/2e25787f9419a787a767e3570c13486ahttps://gyazo.com/36aaed6d7683eff4dfa7dd11f25eee75https://gyazo.com/af594708c46f36373d0bec6d5bc88d84
https://gyazo.com/37cbd948afca07c3cd72eadd64307794https://gyazo.com/0bfd7eef8f0740470ccfa58285010949https://gyazo.com/cd63512a3a7df4f830533ae465dfb7fdhttps://gyazo.com/664903ec68836b8c686adc16ca71e274https://gyazo.com/35558f3fe0110c336ba52aab81dd6ab3
Nrem en Aliaj Cosense-Notejoj
table:Profiloj de Nrem ĉe Cosense-projektoj
URI Cosense-projekto
Sub
UserCSS & UserScript
Hierarchy Extension
code:script.js
行頭に引用符をつける
/customize/shokai#592e263197c2910000308320
code:script.js
scrapbox.PopupMenu.addButton({
title: 'quote',
onClick: text => text.split(/\n/).map(line => > ${line}).join('\n')
})
Scrapboxのコードブロック記法で空白文字可視化
status barに文字カウントを表示する(event版)
? 有効にしても動作せず、UserScript全体が動作しなくなる
ポップアップメニュー
ページメニューボタンの拡張
scrapbox.PageMenu.addMenu()は競合するため同時に一つまで。
階層構造が見やすい見出しを出すユーザースクリプト
code:script.js
/* (function () { */
scrapbox.PageMenu.addMenu({
title: '見出し',
onClick: () => {
scrapbox.PageMenu('見出し').removeAllItems()
var deepest = 0;
for (let line of scrapbox.Page.lines) {
if (!line.section.start) continue
var depth = line.nodes ? calcDepth(line.nodes) : 0
if (deepest < depth) deepest = depth
}
console.log('deepest index is ' + deepest)
for (let line of scrapbox.Page.lines) {
if (!line.section.start) continue
const image = line.nodes && getIconUrl(line.nodes)
const noIcon = !!image
const title = line.nodes ? renderPlainText(line.nodes, {noIcon, level: 0}, deepest) : line.text
const onClick = () => location.hash = line.id
scrapbox.PageMenu('見出し').addItem({title, image, onClick})
}
}
})
function calcDepth (node) {
if (node instanceof Array) return node.map(node => calcDepth(node)).reduce(function(a,b) {return Math.max(a,b);}, 0)
if (typeof node === 'string') return 0
if (node.type == 'deco') {
var deco = '*'
for (var i=1; i<=5; i++) {
if (node.unit.deco == deco) return i
deco = deco + '*'
}
}
return calcDepth(node.children)
}
function renderPlainText (node, options, deepest) {
if (node instanceof Array) return node.map(node => renderPlainText(node, options, deepest)).join('')
if (typeof node === 'string') {
var indent = deepest - options.level
var item = node
if (options.level == 1) item = '・' + item
if (options.level == 2) item = '● ' + item
if (options.level == 3) item = '■ ' + item
if (options.level == 4) item = '■ ' + item
if (options.level == 5) item = '■ ' + item
for (var i=0; i<indent; i++) item = ' ' + item;
return item
}
var new_options = Object.assign({}, options)
switch (node.type) {
case 'icon':
case 'strong-icon':
return options.noIcon ? ' ' : node.unit.page
case 'deco':
new_options.level = 0
var deco = '*'
for (var i=1; i<=5; i++) {
if (node.unit.deco == deco) new_options.level = i
deco = deco + '*'
}
}
return renderPlainText(node.children, new_options, deepest)
}
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
}
/* })() */
どこでも RUN JavaScript Button with HTML&CSS
制御盤
code:style.css
:root, .app {
--b-hide-not-pinned-notes: n;
--b-hide-telomeres: n;
--b-hide-page-menu-items: n;
--b-kashi-nenecesajn-informojn: n;
}
@media (prefers-color-scheme: dark) {
:root {
--project-theme: "";
}
}
.container > .stream-page-column {
display: block !important;
}
.stream {
display: block !important;
}