in_gain
https://gyazo.com/abad26c3b42a53fb0fcb10cef3071da9
それなりに働いているはずなのにいつも金欠おじさん。ソシャゲとネトゲへの課金をやめると幸せになれる(なれない)。 ソシャゲもネトゲも課金をやめました。今月もまだ6000円くらいしか課金してません。すごくない?めっちゃえらくない?in_gain.icon 課金をやめました まだ6000円くらいしか課金してません ・・・??
in_gain.icon10000円までは無課金in_gain.icon
課金やめられませんでした。in_gain.icon
そもそも競馬なんてやるからいけない(けど去年は全額キャッシュバックされました!!やったね!!)
ちょっとだけ頻度を減らしましたin_gain.icon
最近増えましたin_gain.icon
in_gain.iconこんな感じで表示されます!!
code:script.js
scrapbox.PopupMenu.addButton({
title: 'red',
onClick: text => {
return text.split('\n').map(line => {
const trimedLine = line.trimStart() //trimStart()で先頭の空白だけ削除できる(MDNありがとう)
if (trimedLine) {
const spaces = line.match(/^\s+/) ? line.match(/^\s+/)0 : '' //matchで空白の文字列を受け取る const attr = '!' //今回付与する属性
//1:"[]の前の普通のテキスト" 2:"[属性" 3:"[]内のテキスト 4:"]" 5:"その他" let temp = trimedLine; //while用の一時変数
let returnText = spaces
while (temp.match(regexText)) {
let val = temp.match(regexText)
returnText += val1.trim() ? [${attr} ${val[1]}]${val[2]}${attr} ${val[3]}${val[4]} : ${val[1]}${val[2]}${attr} ${val[3]}${val[4]}
}
returnText += trimedLine.match(regexText) ? temp ? [${attr} ${temp}] : '' : [${attr} ${trimedLine}]
return returnText;
}else{
return trimedLine;
}
}).join('\n')
}
})
scrapbox.PopupMenu.addButton({
title: 'underline',
onClick: text => {
return text.split('\n').map(line => {
const trimedLine = line.trimStart() //trimStart()で先頭の空白だけ削除できる(MDNありがとう)
if (trimedLine) {
const spaces = line.match(/^\s+/) ? line.match(/^\s+/)0 : '' //matchで空白の文字列を受け取る const attr = '_' //今回付与する属性
//1:"[]の前の普通のテキスト" 2:"[属性" 3:"[]内のテキスト 4:"]" 5:"その他" let temp = trimedLine; //while用の一時変数
let returnText = spaces
while (temp.match(regexText)) {
let val = temp.match(regexText)
returnText += val1.trim() ? [${attr} ${val[1]}]${val[2]}${attr} ${val[3]}${val[4]} : ${val[1]}${val[2]}${attr} ${val[3]}${val[4]}
}
returnText += trimedLine.match(regexText) ? temp ? [${attr} ${temp}] : '' : [${attr} ${trimedLine}]
return returnText;
}else{
return trimedLine;
}
}).join('\n')
}
})
//吹き出し作成
scrapbox.PopupMenu.addButton({
title: '💬',
onClick: text => {
if (text.trim()) {
return text.split('\n').map(line => {
const user = 'in_gain'//自分のアイコン名に変更するなりして使用してください。
//ふと思ったけど、アイコンをつけたくない!という場合もあるか?と思ったので、少し処理を変更。
const icon = user ? [${user}.icon] : '' //userが空欄の場合は空欄
const trimedLine = line.trimStart();
if (trimedLine) {
const spaces = line.match(/^\s+/) ? line.match(/^\s+/)0 : '' //matchで空白の文字列を受け取る const attr = '{' //今回付与する属性
//1:"[]の前の普通のテキスト" 2:"[属性" 3:"[]内のテキスト 4:"]" 5:"その他" let temp = trimedLine; //while用の一時変数
let returnText = spaces
while (temp.match(regexText)) {
let val = temp.match(regexText)
returnText += val1.trim() ? ${icon}[${attr} ${val[1]}]${val[2]}${attr} ${val[3]}${val[4]} : ${icon}${val[1]}${val[2]}${attr} ${val[3]}${val[4]}
}
returnText += trimedLine.match(regexText) ? temp ? ${icon}[${attr} ${temp}] : ''
: ${icon}[${attr} ${trimedLine}]
return returnText;
}else{
return trimedLine;
}
}).join('\n')
}
}
})
//装飾を外す
scrapbox.PopupMenu.addButton({
title:'🆑',
onClick: text =>{
return text.split('\n').map(line =>{
const trimedLine = line.trimStart() //trimStart()で先頭の空白だけ削除できる(MDNありがとう)
const spaces = line.match(/^\s+/) ? line.match(/^\s+/)0 : '' //matchで空白の文字列を受け取る //1:"[]の前の普通のテキスト" 2:"[属性" 3:"[]内のテキスト 4:"]" 5:"その他" let temp = trimedLine; //while用の一時変数
let returnText = spaces
while(temp.match(regexText)){
let val = temp.match(regexText)
returnText += ${val[1]}${val[3]}
}
returnText += trimedLine.match(regexText) ? ${temp} : ${trimedLine}
return returnText
}).join('\n')
}
})
//google検索ボタン _ みたいのを削ぎ落とすべきかな scrapbox.PopupMenu.addButton({
title: '🔎',
onClick: text => window.open(http://google.co.jp/search?q=${text})
})
//google画像検索ボタン 上とほぼ同じ
scrapbox.PopupMenu.addButton({
title: '📷🔎',
onClick: text => window.open(http://google.co.jp/search?q=${text}&tbm=isch)
})
const shinyColorChangeScript = function () {
const シャイニーオブジェクト = {
櫻木真乃: 'rgb(255, 186, 214)',
風野灯織: 'rgb(20 , 67 , 132)',
八宮めぐる: 'rgb(255, 224, 18 )',
月岡恋鐘: 'rgb(248, 76 , 173)',
田中摩美々: 'rgb(168, 70 , 251)',
白瀬咲耶: 'rgb(0 , 96 , 70 )',
三峰結華: 'rgb(59 , 145, 196)',
幽谷霧子: 'rgb(217, 242, 255)',
小宮果穂: 'rgb(229, 46 , 28 )',
園田智代子: 'rgb(249, 59 , 90 )',
西城樹里: 'rgb(255, 198, 2 )',
杜野凛世: 'rgb(89 , 195, 235)',
有栖川夏葉: 'rgb(90 , 230, 67 )',
大崎甘奈: 'rgb(245, 66 , 117)',
大崎甜花: 'rgb(231, 91 , 236)',
桑山千雪: 'rgb(251, 250, 250)',
芹沢あさひ: 'rgb(243, 1 , 0 )',
黛冬優子: 'rgb(92 , 230, 38 )',
和泉愛依: 'rgb(255, 0 , 255)',
浅倉透: 'rgb(80 , 208, 208)',
樋口円香: 'rgb(190, 30 , 62 )',
福丸小糸: 'rgb(121, 103, 195)',
市川雛菜: 'rgb(255, 198, 57 )',
七草はづき: 'rgb(138, 223, 255)',
イルミネ: 'rgb(255, 167, 0 )',
アンティーカ: 'rgb(133, 57 , 152)',
放クラ: 'rgb(250, 131, 51 )',
アルスト: 'rgb(228, 59 , 128)',
ストレイ: 'rgb(231, 18 , 18 )'
}
//上記オブジェクトのキー値でループを開始。
Object.keys(シャイニーオブジェクト).forEach(アイドル => {
//(今回だけ例外的に)***アイコンの形で説明文(つまりアイコン名称)が記載されているイメージアイコンを探す
const $icons = $(img[alt="${アイドル}アイコン"][class="icon"]);
$.each($icons, (idx, elm) => {
let nextElm = elm.parentNode.parentNode.parentNode.nextElementSibling;
const colorArr = [シャイニーオブジェクトアイドル]; for (; nextElm && nextElm.querySelector('imgclass="icon"'); nextElm = nextElm.nextElementSibling) { const img = nextElm.firstChild.querySelector('img');
const 隣のアイドル = img.alt.slice(0, -4); //'アイコン'が入っちゃうので、slice.
colorArr.push(シャイニーオブジェクト隣のアイドル); }
}
const percentage = Math.round(100 / colorArr.length);
let gradient = '';
colorArr.forEach((data, idx) => { gradient += ${data} ${percentage * idx}%, ${data} ${percentage * (idx + 1)}%, });
gradient = gradient.substring(0, gradient.length - 1);
const style = background: linear-gradient(${gradient}); -webkit-background-clip: text; -webkit-text-fill-color: rgba(255,255,255,0.0); color: #ff0000;;
let 見たよ = null;
for (; nextElm; nextElm = nextElm.nextElementSibling) {
const target = nextElm ? nextElm.children : [];
const fn = elm => {
const tgt = selector.length === 0 ? elm : selector ; for(let i=0;i<tgt.length;i++){
if(style.length > tgti.style.cssText.length)tgti.style.cssText = style; }
}
}
for (let i = 0; i < target.length; i++) {
if ( iconSelector && Object.keys(シャイニーオブジェクト).includes(iconSelector.alt.slice(0, -4))) {
見たよ = 'アイドルのアイコン'
}
}
if (!見たよ) {
Array.prototype.forEach.call(target, fn);
}
}
})
})
}
const observer = new MutationObserver(mutations => shinyColorChangeScript(mutations));
const observeElm = document.querySelector('.lines');
const config = { childList: true};
observer.observe(observeElm, config);
const commonColorChangeScript = function(){
const 色を変更したいアイコン名とカラーコードを指定して下さい = {
in_gain : '#5BBA28'
}
//流石に名前が長いので、仮変数を(こっそり)指定。バレない。
const obj = 色を変更したいアイコン名とカラーコードを指定して下さい;
//上記オブジェクトのキー値でループを開始。
Object.keys(obj).forEach(keys => {
//説明文にアイコン名が載っているので、そこから絞り込む
const $icons = $(img[alt="${keys}"][class="icon"]);
$.each($icons, (idx, elm) => {
let nextElm = elm.parentNode.parentNode.parentNode.nextElementSibling;
for (;nextElm && nextElm.firstChild && nextElm.firstChild.classList.length === 0; nextElm = nextElm.nextElementSibling) {}
const style = color:${obj[keys]};
const target = nextElm ? nextElm.children : [];
const fn = elm => elm.style.cssText = style;
Array.prototype.forEach.call(target,fn);
})
})
}
const commonColorChangeObserver = new MutationObserver( mutations => commonColorChangeScript(mutations) );
const commonColorChangeObserveElm = document.querySelector('.lines');
const commonConfig = {childList:true};
commonColorChangeObserver.observe(commonColorChangeObserveElm,commonConfig);
// 選択された文字列をScrapboxプロジェクト内で検索する
// Scapbox検索ボックスを使ったときと同じ結果ページを開く
scrapbox.PopupMenu.addButton({
title: 'スクボ内検索',
onClick: function (text) {
var projectName = 'x68trpg';
}
});
/* ページ内の一部を切り取って別のページに */
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}]
}
})
const erasingPageFunc = function(tgt){
/*mutationを検知したnodeのtypeがchildListで、かつaddedNodeが含まれない場合は実行しない */
if(tgt && tgt0.type === "childList" && tgt.filter(elm => elm.addedNodes.length > 0).length === 0) return false; /* 以下処理 */
const erasingPage = /特に無い/ //表示を消したいページの正規表現
let targetPage = document.querySelectorAll('.page-list-item'); //ページリスト取得
let parentNode = document.querySelector('.grid'); //親ノード取得(例外処理回避のため)
/* 各ページリストのタイトルとerasingPageが一致したものをNodeから除外 */
targetPage.forEach(elm => {
if(elm.querySelector('.header').textContent.match(erasingPage) && parentNode.contains(elm)){
parentNode.removeChild(elm);
}})
}
//gridクラスにmutationObserverを設置。
const erasingPageObserver = new MutationObserver(mutations => erasingPageFunc(mutations));
const erasingPageObserverElm = document.querySelector('.grid');
const erasingPageConfig = {childList:true};
erasingPageObserver.observe(erasingPageObserverElm,erasingPageConfig);
//(初回起動時、gridのdisplay:blockの場合)処理を実行)
$(document).ready(()=>{if(document.querySelectorAll('.container')2.style.display === 'block')erasingPageFunc()})