/*
* @title Zalgolf ('unuse strict')
* @description ?ードでもじゃもじゃさせます。
* @include http://*
* @include https://*
* @contributor aTakaakiSeki http://qiita.com/aTakaakiSeki/items/614d5d178f717c6b2997
* @contributor noromanba http://let.hatelabo.jp/noromanba/let/hJmfhMi96I0W
* @license WTFTPL http://www.wtfpl.net/about/
* @javascript_url
*/
/*
javascript:d=document;r=n=>Math.random()*n|0;w=d.createTreeWalker(d,4,{acceptNode:n=>n[v]=n[v].replace(/[a-z]/ig,c=>[...c+URL].map(_=>c+=eval('"\\u03'+r(7)+r(10)+'"'))[r(30)])});for(v='nodeValue';w.nextNode(););void 0
*/
/* グローバルにめっちゃくっつくから気になる場合は宣言した方がいいと思うけど長い */
/* { let d, r, x, v, w; */
/*
"document" が長いから短縮、変数名は後で使い回す
*/
d = document;
/*
複数回使うからおまとめ。ついでに小数点削る
よいこは Math.trunc() をつかおうね
*/
r = n => Math.random() * n | 0;
/*
今はたと createTreeWalker のこと思い出した
*/
w = d.createTreeWalker(d,4,{acceptNode:
/*
n.nodeValue は変数に取っておこうとすると文字列として取っておかれる
だからせめて nodeValue って名前を短縮して字数を稼ぐ
*/
n => n[v] = n[v].replace(
/*
関数で replace する場合、正規表現内で括弧はなるべく使わないようにすると
(_,c)=>c が c=>c になって文字数を削減できる
\w でもいいかなと思ったら数字の横についた
*/
/[a-z]/ig,
/*
名前の短い最初からある関数に、その辺にある適当な文字列を足して
「cfunction Set() {
[native code]
}」
っていう 30字よりちょっと長い文字列を作ってる
それをスプレッド演算子でひらくと文字数分の長さの中身入り配列ができる
*/
c => [...c+URL].map(
/*
文字列を反復で繋げていくときは、配列に入れて join() より
ループの外で用意した変数に += していく方が短くなる傾向
文字列型の変数が用意できない時は逆転の可能性あり
['a','b','c'].map(c=>c).join('')
['a','b','c'].map(c=>c).join`` -2
['a','b','c'].map(c=>v+=c),v -4
*/
_ => c +=
/*
我が家では \u0370 からくっつかなくなったから範囲狭めてる
「̀ ́ ̂ ̃ ̄ ̅ ̆ ̇ ̈ ̉ ̊ ̋ ̌ ̍ ̎ ̏ ̐ ̑ ̒ ̓ ̔ ̕ ̖ ̗ ̘ ̙ ̚ ̛ ̜ ̝ ̞ ̟ ̠ ̡ ̢ ̣ ̤ ̥ ̦ ̧ ̨ ̩ ̪ ̫ ̬ ̭ ̮ ̯ ̰ ̱ ̲ ̳ ̴ ̵ ̶ ̷ ̸ ̹ ̺ ̻ ̼ ̽ ̾ ̿ ̀ ́ ͂ ̓ ̈́ ͅ ͆ ͇ ͈ ͉ ͊ ͋ ͌ ͍ ͎ ͏ ͐ ͑ ͒ ͓ ͔ ͕ ͖ ͗ ͘ ͙ ͚ ͛ ͜ ͝ ͞ ͟ ͠ ͡ ͢ ͣ ͤ ͥ ͦ ͧ ͨ ͩ ͪ ͫ ͬ ͭ ͮ ͯ 」
16進数で短くなることは 0xe8d4a51000 までないから基本的に十進数で書く
いや 0xe8d4a51000 なら 1e12 って書いた方が短いけど
String.fromCharCode(0x300+r(70))
String.fromCharCode(768+r(70)) -2
eval('"\\u03'+r(7)+r(10)+'"') -3
('0'+num).slice(-2) とか (''+num).padStart(2,'0') とかだと
縮まりそうにもなかったから Math.random() 短くして二回回した
よいこは String.fromCharCode() をつかおうね
CSP の関係で失敗するページがあったりするからね
*/
eval('"\\u03' + r(7) + r(10) + '"')
/*
['c0', 'c01', 'c012', 'c0123'…] みたいな配列ができてるから
その中からランダムで 30個目より前の要素を選んでる
30個目以降は無駄に生成してる訳だけどきにしない
*/
)[r(30)]
)
});
/*
for(;;) と while() は大体おんなじだけど、for の方は
for(ここ;;ここ) の部分にちょっとした式をつっこんでおけて
; の削減とか、うまくいけば {} の省略とかできるから、for(;;) の方がお得
for(;;ここ) に入れるとループ回数分実行されちゃうから軽めの式を入れようね
今回は短縮用の文字列入れてる
隙間空いてるからもうちょっと有効活用したい
*/
for(v = 'nodeValue'; w.nextNode(););
/*
ブックマークレットだから最後に undefined 返してる
void は typeof とかと同じ演算子の仲間だから void 0 って書ける
普段はローカル変数宣言かねて ((変数)=>{式})() にしてる
*/
void 0
/* 変数宣言したときに閉じるための括弧 */
/* } */
/* 以下 Fork 元のコード */
// orig code and reference c.f.
// http://qiita.com/aTakaakiSeki/items/614d5d178f717c6b2997
// slightly code-golf and ref/descr et al. c.f.
// https://gist.github.com/noromanba/3062530dc3970d93762a5775080715f8
/* oneliner-min
javascript:[].concat(...[...document.querySelectorAll(':not(style):not(script):not(:empty)')].map(e=>[...e.childNodes])).filter(n=>n.nodeName==='#text').map(n=>n.textContent=n.textContent.replace(/([a-z])/ig,(_,c)=>c+[...Array(Math.random()*30|0)].map(()=>String.fromCharCode(0x300+(Math.random()*79|0))).join('')));
*/
/* Devtools/Scratchpad-min
$x('//text()').map(n=>n.textContent=n.textContent.replace(/([a-z])/ig,(_,c)=>c+[...Array(Math.random()*30|0)].map(()=>String.fromCharCode(0x300+(Math.random()*79|0))).join('')));
*/
// unminified and reference
/*
{
'use strict';
const combiningChar = () => {
// 0-29 random N times repeat
return Array.from(Array(Math.trunc(Math.random() * 30)), () => {
// http://www.unicode.org/charts/PDF/U0300.pdf
// U0300-U034E: 79 = 0x04F
return String.fromCharCode(0x300 + Math.trunc(Math.random() * 0x04F))
}).join('');
};
// TBD
// - select text-node w/ Xpath and XPath's not()
// - unchain methods
// - extract flatten
Array.prototype.concat.apply([], Array.from(document.querySelectorAll([
'head title',
'body :not(style):not(script):not(:empty)',
]), node => [...node.childNodes]))
.filter(node => node.nodeType === Node.TEXT_NODE)
.forEach(textNode => {
textNode.textContent =
// TBD alnum
textNode.textContent.replace(/([a-z])/ig, (_, captured) => {
return captured + combiningChar();
});
});
// TBD handle autopaging
}
*/
// TIPS and TRICKS
//
// pseudo `Array#times()` idioms
//
// ES6/ES2015
// [...Array(10)].map((_, i) => i);
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// Array.from(Array(10), (_, i) => i);
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// Array.from(Array(10)).map((_, i) => i);
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// Array.from(Array(10).keys());
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
//
// ES5
// Array.apply(null, Array(10)).map(function(_, i) { return i; });
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// Array(10).join().split(',').map(function(_, i) { return i; });
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
//
//
// hex <-> decimal of Unicode Combining Character
//
// (79).toString(16)
// "4f"
// (0x4F).toString(10)
// "79"
//
// '0x0' + (0x300 + 1 * 79).toString(16).toUpperCase()
// "0x034F"
// '0x0' + (0x300 + 1 * 0x04F).toString(16).toUpperCase()
// "0x034F"