探偵
https://lh3.googleusercontent.com/a/ACg8ocIgA0FVYbWJVncofUECKR9ZJIQ5gLMG8ycxtmsswNQ-FkEHzYjb=s96-c#.png
怪しくない者です
探偵は名前
Amazonアソシエイト・プログラム参加中
もしかしてこのページってあまりピン留めすべきではないのかもしれない
メモ
RiJ2024wの見返したいアーカイブをまとめたいが
ページ作るほどピックアップできてないので一旦メモ
UserJS
code:script.js
(() => {
cosense.PageMenu.addMenu({
title: '見出し',
icon: 'fas fa-list',
onClick: () => {
cosense.PageMenu('見出し').removeAllItems();
/* ページタイトルはスキップ */
// for (let line of cosense.Page.lines) {
for (const index, line of Object.entries(cosense.Page.lines)) { if (index==0) continue;
if (!line.section.start) continue;
const image = line.nodes && getIconUrl(line.nodes);
if(image == '/api/pages/tantei/hr/icon') continue;
const noIcon = !!image;
const title = line.nodes ? renderPlainText(line.nodes, {noIcon}) : line.text;
const onClick = () => location.hash = line.id;
cosense.PageMenu('見出し').addItem({title, image, onClick});
}
}
});
const renderPlainText = (node, options) => {
if (node instanceof Array) return node.map(node => renderPlainText(node, options)).join('');
if (typeof node === 'string') return node;
switch (node.type) {
case 'icon':
case 'strong-icon':
return options.noIcon ? ' ' : node.unit.page;
}
return renderPlainText(node.children, options);
}
const getIconUrl = (node) => {
if (/icon/.test(node.type)) {
return /api/pages/${node.unit.project || cosense.Project.name}/${node.unit.page}/icon;
}
if (node instanceof Array) {
return node.map(getIconUrl).find(img => img);
}
if (node.children) return getIconUrl(node.children)
return null;
}
})();
メモ
スタレ
card-wrapper
500%
w320
genshin
gt-avatar-img
500%
zzz
gt-card__avatar gt-card__agent-avatar
500%
magick mogrify -resize 320x -kmeans 256 -format webp -quality 80 *.png
magick convert -size 128x128 xc:none -draw "roundrectangle 0,0 127,127 10,10" xen.png -resize 128x128 -compose src-in -composite -unsharp 0x1 xen.webp