ms
gifmasからのアイコン取得
アイコン名を入力、選択してgmasを選択でアイコン表示。
code:script.js
scrapbox.PopupMenu.addButton({
title: 'gmas',
onClick: text => [[/gifmas/${text}.icon]]
})
/icons/hr.icon
code:script.js
scrapbox.PopupMenu.addButton({
title: '—',
onClick: text => [/icons/hr.icon]
})
/ITSUMOFUCK/Parrot.iconicic用のUserScript
code:script.js
scrapbox.PopupMenu.addButton({
title: 'icic',
onClick: text => [/icic/${text}.icon]
})
/ITSUMOFUCK/Parrot.icon修飾記法済みテキストをプレーンテキストに直すUserScript。記法記号は全部取り除くようになっている力技のため、半角空白や特殊記号が取り除かれてしまうことに注意。
code:script.js
scrapbox.PopupMenu.addButton({
title: '🈚',
onClick: text => {
const plain = text
.replace(/\[+/g, '')
.replace(/\]+/g, '')
.replace(/(\!|\{|\}|\_|\~|\-|\*+|$) /, '');
return plain;
}
})
/ITSUMOFUCK/Sad_Parrot.iconParrotアイコンの簡略化するUserScript。選択時に出るparrot icon
ボタンを追加。例: Sad を選択してparrot iconを押すと・・・?
code:script.js
scrapbox.PopupMenu.addButton({
title: 'to🐦',
onClick: text => [/ITSUMOFUCK/${text}_Parrot.icon]
})
/ITSUMOFUCK/Parrot.icon付箋化するボタンを追加
code:script.js
scrapbox.PopupMenu.addButton({
title: '🏷️',
onClick: text => [~ ${text}]
})
/ITSUMOFUCK/Parrot.icon右ふきだしボタンを追加
code:script.js
scrapbox.PopupMenu.addButton({
title: '💬>',
onClick: text => [} ${text}]
})
/ITSUMOFUCK/Parrot.icon左ふきだしボタンを追加
code:script.js
scrapbox.PopupMenu.addButton({
title: '<💬',
onClick: text => [{ ${text}]
})
/ITSUMOFUCK/Parrot.icon選択した文の先頭にparrotを置くボタンを追加するUserScript
code:script.js
scrapbox.PopupMenu.addButton({
title: '🐤',
onClick: text => [/ITSUMOFUCK/Parrot.icon]${text}
})
/ITSUMOFUCK/Fast_Parrot.iconマーカーを引けるようにするUserScript
code:script.js
// 選択した文字列にマーカー
scrapbox.PopupMenu.addButton({
title: '🌈',
onClick: text => [[${text}]]
})
/ITSUMOFUCK/sleepy_Parrot.icon↓の線を表示するスクリプト
/icons/hr.icon
/ITSUMOFUCK/Fast_Parrot.icon*1新規記事作成の際のテンプレートを選択できるUserScript
code:script.js
(function() {
// テンプレートとして使用するページのリスト
const encodedList = tempList.map(value => encodeURIComponent(value.replace(/ /g, '_')));
const targetProject = scrapbox.Project.name;
const events = click.loadTemp_${targetProject} keydown.loadTemp_${targetProject};
const selector = '.search-form .dropdown-menu a';
$('.navbar').off(events, selector);
$('.navbar').on(events, selector, async event => {
if (scrapbox.Project.name !== targetProject) {
$(event.delegateTarget).off(events, selector);
return;
}
if (event.type === 'keydown' && event.key !== 'Enter') {
return;
}
const targetTitle = event.target.href.split('/').pop();
if (!encodedList.includes(targetTitle)) return;
event.preventDefault();
event.stopPropagation();
try {
const text = await fetchPageText(targetTitle);
const lines = text.split('\n');
if (lines.length <= 1) {
throw new Error('No page body.');
}
lines.shift();
const body = lines.join('\n');
if (scrapbox.Page.lines) { // 個別ページが開かれている時
const isOk = confirm('現在のページに適用しますか?');
if (isOk) {
appendText(body);
document.activeElement.blur();
document.getElementsByClassName('mobile-search-toggle')0.click(); document.getElementById('text-input').focus();
return;
}
}
event.target.href = https://scrapbox.io/${scrapbox.Project.name}/new?body=${encodeURIComponent(body)};
event.target.click();
document.getElementsByClassName('mobile-search-toggle')0.click(); } catch (error) {
console.error(error);
alert(error.message);
}
});
async function fetchPageText(encodedPageTitle) {
const url = https://scrapbox.io/api/pages/${scrapbox.Project.name}/${encodedPageTitle}/text;
const response = await fetch(url);
if (!response.ok) {
throw new Error(${response.status} ${response.statusText});
}
const text = await response.text();
return text;
}
function appendText(text) {
const textArea = document.getElementById('text-input');
const keydownEvent = {
event: document.createEvent('UIEvent'),
dispatch: function(keyCode) {
this.event.keyCode = keyCode;
textArea.dispatchEvent(this.event);
}
};
keydownEvent.event.initEvent('keydown', true, true);
const titleLineLengh = Array.from(scrapbox.Page.lines0.text).length; for (let i = 0; i < titleLineLengh; i++) {
keydownEvent.dispatch(39); // →
}
keydownEvent.dispatch(13); // Enter
textArea.value = text;
textArea.dispatchEvent(new InputEvent('input', { bubbles: true, cancelable: true }));
}
})();
/icons/hr.icon
/ITSUMOFUCK/Fast_Parrot.icon*1選択テキストTex化関連
code:script.js
//Texで囲むやつ
scrapbox.PopupMenu.addButton({
title: 'Tex',
onClick: text => {
return '$ ' + text + '';
}
})
//{}で囲むやつ
scrapbox.PopupMenu.addButton({
title: '{ }',
onClick: text => {
return '{' + text + '}';
}
})
//{$ a_i} みたいな感じにするやつ
scrapbox.PopupMenu.addButton({
title: '{$ _}',
onClick: text => {
return '$ ' + text.replace(/ /g, '_') + '';
}
})
//空白をアンダーバーに変換するやつ
scrapbox.PopupMenu.addButton({
title: '__',
onClick: text => {
return text.replace(/ /g, '_');
}
})
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}]
}
})