rashita
倉下忠憲のwebアバター的な存在。だいたいのサービスでrashitaか「らした」で登録しているが、twitterだけrashita2である。
Netgraphy
著作リスト
モットー
好きな言葉
以下UserScriptの設定
script.jsscrapbox.PopupMenu.addButton({
title: 'Del',
onClick: () =>{return ""}
});
scrapbox.PopupMenu.addButton({
title: '* を足す',
onClick: text =>{
return "* " + text;
}
});
リンクページ取得
script.jsconst getlinkpage = function () {
const url = location.href.replace("io/", "io/api/pages/");
let x = new XMLHttpRequest();
x.open("get", url, false);
x.send(null);
let json = x.responseText;
let pagedata = JSON.parse( json );
let linkPagesData = pagedata["links"];
//ループで回して、リンクページの本文を取得していく
let pageContents = [];
let rooturl = location.href.replace("io/", "io/api/pages/").replace(new RegExp("/" + encodeURI(scrapbox.Page.title) + "$"),"/");
for (let i = 0, len = linkPagesData.length; i < len; ++i) {
let relatedurl = rooturl + encodeURI(linkPagesData[i]) + "/text";
//これでXMLHttpRequestを回していく
let y = new XMLHttpRequest();
y.open("get", relatedurl, false);
y.send(null);
let c = y.responseText;
if (! (c == '{"name":"NotFoundError","message":"Page not found."}') ){
c = removehashtag(c,scrapbox.Page.title); //もとハッシュタグを削除しない場合はこの行をコメントアウト
c = removebracket(c);//本文中からブラケット[]を取り除かない場合はこの行をコメントアウト
pageContents.push(addmargin(c));
}
}
//取得したページの中身を使って、新しいwindowをオープンする。
var win = window.open();
win.document.open();
win.document.write(`<title>temporary</title>`);
win.document.write('<pre>');
win.document.write(pageContents.join('\n'));
win.document.write('</pre>');
win.document.close();
}
function removehashtag(text,pageTitle){//本文中からもともとのハッシュタグを削除する
return text.replace(new RegExp('#' + scrapbox.Page.title),"")
}
function removebracket(text){//本文中から閉じと開きのブラケットを削除する
return text.replace(/\[|\]/g,"")
}
function addmargin(text){ //二行目以降に半角スペースを追加する
return text.replace(/\n/g,"\n ")
}
scrapbox.PageMenu.addMenu({
title: 'リンクページ取得',
image: 'https://gyazo.com/da0408108eda84e56a587630be5e4524/raw',
onClick:getlinkpage
})
script.jsscrapbox.PopupMenu.addButton({
title: 'shorten',
onClick: text => {
const lines = text.split(/[\r\n]/g);
var body = [];
for (var i = 0, len = lines.length; i < len; ++i) {
body[i] = lines[i].replace(/^\s\s\s\s/g, '') .replace(/\s\s\s\s/g, ' ').replace(/^$/g,'');
}
return body.join('\n');
}
})
script.jsscrapbox.PageMenu.addMenu({
title: '末尾',
image: 'https://gyazo.com/d288e4b1c57fbe767452e5d142424a42/raw',
onClick: () => {
$("html,body").animate({scrollTop:$('.related-page-sort-menu').offset().top});
}
})
script.js scrapbox.PopupMenu.addButton({
title: 'branch',
onClick: text => {
const lines = text.split(/[\r\n]/g)
const title = lines[0]
.trim()
.replace(/\[[^\]]+.icon\]/gm, '')
.replace(/[\[\]]/g, '')
const projectRoot = (() => {
const tmp = location.href.split('/')
tmp.pop()
return tmp.join('/')
})()
const currentPageTitle = decodeURIComponent(location.href.split(/\//g).pop())
lines.shift()
const body = encodeURIComponent(lines.join('\n'))
window.open(`${projectRoot}/${title}?body=${body}`)
return `[${title}]`
}
})
関連ページの取得(工事中ですが、ある程度は動きます)
script0.jsconst makepage = function () {
const url = location.href.replace("io/", "io/api/pages/");
let x = new XMLHttpRequest();
x.open("get", url, false);
x.send(null);
let json = x.responseText;
let pagedata = JSON.parse( json );
let relatedPagesData = pagedata["relatedPages"];
let relatedPagesDatalinks1hop = relatedPagesData["links1hop"];
//ループで回して、関連ページの本文を取得していく
let pageContents = [];
let rooturl = location.href.replace("io/", "io/api/pages/").replace(new RegExp("/" + encodeURI(scrapbox.Page.title) + "$"),"/");
for (let i = 0, len = relatedPagesDatalinks1hop.length; i < len; ++i) {
let relatedurl = rooturl + relatedPagesDatalinks1hop[i]["title"] + "/text";
//これでXMLHttpRequestを回していく
let y = new XMLHttpRequest();
y.open("get", relatedurl, false);
y.send(null);
//各ページに含まれる[]を取り除いたり、関連ページのおおもとのページのハッシュタグを削除してもいい。ただし、本文中に書き込まれている場合はややこしい。
let c = y.responseText;
c = removehashtag(c,scrapbox.Page.title); //もとハッシュタグを削除しない場合はこの行をコメントアウト
c = removebracket(c)//本文中からブラケット[]を取り除かない場合はこの行をコメントアウト
pageContents.push(addmargin(c));
}
//取得したページの中身を使って、新しいwindowをオープンする。
var win = window.open();
win.document.open();
win.document.write(`<title>temporary</title>`);
win.document.write('<pre>');
win.document.write(pageContents.join('\n'));
win.document.write('</pre>');
win.document.close();
}
function removehashtag(text,pageTitle){//本文中からもともとのハッシュタグを削除する
return text.replace(new RegExp('#' + scrapbox.Page.title),"")
}
function removebracket(text){
return text.replace(/\[|\]/g,"")
}
function addmargin(text){ //二行目以降に半角スペースを追加する
return text.replace(/\n/g,"\n ")
}
scrapbox.PageMenu.addMenu({
title: '関連ページ取得',
image: 'https://gyazo.com/da0408108eda84e56a587630be5e4524/raw',
onClick:makepage
})
ツイートボタン
script.js scrapbox.PageMenu.addItem({
title: 'Tweet',
image: 'https://twitter.com/favicon.ico',
onClick: () => window.open(`https://twitter.com/intent/tweet?url=${encodeURIComponent(location.href)}&text=${encodeURIComponent(window.scrapbox.Page.title)}`)
})
old-script.jsconst intervalTime = 10000
let isStarted = false
let interval = undefined
scrapbox.PageMenu.addMenu({
title: 'random-screen-saver',
image: 'https://gyazo.com/c08a5e4439ded1540bc05b31da9d58c9/raw'
})
scrapbox.PageMenu('random-screen-saver').addItem({
title: () => (isStarted)? "end screen saver." : "start screen saver!",
onClick: () => {
isStarted = !isStarted
if (!isStarted) {
clearInterval(interval)
return
}
clickRandomButton()
interval = setInterval(clickRandomButton, intervalTime)
}
})
function clickRandomButton() {
const button = $('.random-jump-button')
if (!button) return
// location.href = button.attr('href');
button[0].click()
}