Base64 デコード
by
pacochi
2017-04-14 [2017/04/14 16:27:47]
選択部分を Base64 のエンコード済み文字列とみなしてデコードします。時々化けます。
@@ -1,42 +1,34 @@
/*
* @title Base64 デコード
* @description 選択部分を Base64 のエンコード済み文字列とみなしてデコードします。時々化けます。
- * @include http://*
- * @require http://coderepos.org/share/export/38677/lang/javascript/Base64/trunk/base64.js
- * @require https://raw.github.com/gist/84db66f331610768a50f/b3a93db333aa20dff8bd16a34d523e5c286106d5/ecl_p.js
+ * @include *
+ * @javascript_url
*/
-(function () {
+((r = window.getSelection(), s = String(r), p = r.anchorNode, d, c) => {
-var s, r, p, c, d = document;
-
-if (d.selection) {
-
- r = d.selection.createRange();
- s = r.text;
- p = r.parentElement()
-
-} else {
-
- r = window.getSelection();
- s = String(r);
- p = r.anchorNode;
- if (p.nodeType == 3) p = p.parentNode
-
-}
-
-s = s.replace(/^[^a-zA-Z0-9=\+\/]+/, "").split(/[^a-zA-Z0-9=\+\/\s\r\n]/)[0].replace(/[\s\r\n]/g, "");
-
-if (p && s) {
-
- s = escape(Base64.fromBase64(s)).replace(/[%0]+$/, "");
- s = ECL["Unescape"+ECL.GetEscapeCodeType(s)](s);
-
- c = d.createElement("span");
- c.innerHTML = s.replace(/\r\n|[\r\n]/g, "<br />");
- c.style.cssText = "display:block;margin:1em;";
- p.appendChild(c)
-
-}
+ if (p.nodeType == 3) p = p.parentNode;
+ s = s.replace(/^[^a-zA-Z0-9=\+\/]+/, '').split(/[^a-zA-Z0-9=\+\/\s\r\n]/)[0].replace(/[\s\r\n]/g, '');
+ if (!p || !s) return;
+
+ s = escape(window.atob(s));
+ d = () => {
+
+ // TextDecoder 使おうとしたけど文字コード自動判別の仕方分かんなかった
+ s = ECL[`Unescape${ECL.GetEscapeCodeType(s)}`](s);
+ p.appendChild(Object.assign(document.createElement('span'), {
+ textContent: s,
+ style: 'display: block; margin: 1em; white-space: pre-wrap;'
+ }));
+
+ };
+
+ if (window.ECL) return d();
+
+ c = p.appendChild(document.createElement('script'));
+ c.addEventListener('load', d);
+ // http://www.junoe.jp/downloads/itoh/enc_js.shtml
+ // https://gist.github.com/pacochi/84db66f331610768a50f
+ c.src = 'https://cdn.rawgit.com/pacochi/84db66f331610768a50f/raw/167d9640b48aed4479a1396856fda5e1fe803a27/ecl_p.js';
})();
/*
* @title Base64 デコード
* @description 選択部分を Base64 のエンコード済み文字列とみなしてデコードします。時々化けます。
* @include *
* @javascript_url
*/
((r = window.getSelection(), s = String(r), p = r.anchorNode, d, c) => {
if (p.nodeType == 3) p = p.parentNode;
s = s.replace(/^[^a-zA-Z0-9=\+\/]+/, '').split(/[^a-zA-Z0-9=\+\/\s\r\n]/)[0].replace(/[\s\r\n]/g, '');
if (!p || !s) return;
s = escape(window.atob(s));
d = () => {
// TextDecoder 使おうとしたけど文字コード自動判別の仕方分かんなかった
s = ECL[`Unescape${ECL.GetEscapeCodeType(s)}`](s);
p.appendChild(Object.assign(document.createElement('span'), {
textContent: s,
style: 'display: block; margin: 1em; white-space: pre-wrap;'
}));
};
if (window.ECL) return d();
c = p.appendChild(document.createElement('script'));
c.addEventListener('load', d);
// http://www.junoe.jp/downloads/itoh/enc_js.shtml
// https://gist.github.com/pacochi/84db66f331610768a50f
c.src = 'https://cdn.rawgit.com/pacochi/84db66f331610768a50f/raw/167d9640b48aed4479a1396856fda5e1fe803a27/ecl_p.js';
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。