copylet
by
noromanba
2016-01-24 [2016/01/24 11:56:31]
(Forked from
2copylet by
noromanba)
show minified code on Hatena::Let; for copy of mobile
@@ -1,24 +1,45 @@
/*
- * @title copylet
- * @description show minified code on Hatena::Let when 2-exec; for copy of mobile
+ * @title xcopylet
+ * @description show minified code on Hatena::Let; for copy of mobile
* @include http://let.hatelabo.jp/*
* @include http://let.st-hatelabo.com/*
- * @contributor mino90 http://let.hatelabo.jp/mino90/let/gYC-xYDKx6O-dA (Fork of)
+ * @contributor mino90 http://let.hatelabo.ne.jp/mino90/let/gYC-xYDKx6O-dA
+ * @contributor noromanba http://let.hatelabo.jp/noromanba/let/hLHUzoSn6YtX (Fork of)
* @license MIT License http://opensource.org/licenses/MIT
* @javascript_url
*/
-// needs execute twice
+// WIP
+// - [x] only once execute
+// - [ ] @javascript_url-nize both of loader-code
+// - TODO support @require e.g.
+// http://let.hatelabo.jp/mattn/let/gYC-ypuU7rrgaQ
+// Hatena::Let loader's bug; missing semicolons of loder
+// - self patching? WTH
+
(() => {
- if (location.hostname === 'let.hatelabo.jp') {
- location.hostname = 'let.st-hatelabo.com';
+ 'use strict';
+
+ if (!/let\.(?:st\-)?hatelabo\.(?:jp|com)$/.test(location.hostname) ||
+ location.pathname.split('/').slice(1) < 3) {
return;
}
- if (location.hostname === 'let.st-hatelabo.com') {
- const iframe = document.body.querySelector('iframe[src^="http://let.st-hatelabo.com"]');
- const raw = iframe.contentDocument.querySelector('a[href^="javascript:"]');
- window.prompt(raw.textContent, raw.href);
- }
+ let title = document.body.querySelector('#bookmarklet-title .title');
+ // trim and delete "Fork"
+ title = title.firstChild.textContent;
+
+ const packed = document.body.querySelector('.information a[href$="packed.js"]');
+
+ const xhr = new XMLHttpRequest();
+ xhr.open('GET', packed.href);
+ xhr.timeout = 2000;
+ xhr.addEventListener('load', () => {
+ if (xhr.readyState === 4 && xhr.status === 200) {
+ // TBD modal copy textarea
+ window.prompt(title, 'javascript:' + xhr.responseText);
+ }
+ });
+ xhr.send();
})();
/*
* @title xcopylet
* @description show minified code on Hatena::Let; for copy of mobile
* @include http://let.hatelabo.jp/*
* @include http://let.st-hatelabo.com/*
* @contributor mino90 http://let.hatelabo.ne.jp/mino90/let/gYC-xYDKx6O-dA
* @contributor noromanba http://let.hatelabo.jp/noromanba/let/hLHUzoSn6YtX (Fork of)
* @license MIT License http://opensource.org/licenses/MIT
* @javascript_url
*/
// WIP
// - [x] only once execute
// - [ ] @javascript_url-nize both of loader-code
// - TODO support @require e.g.
// http://let.hatelabo.jp/mattn/let/gYC-ypuU7rrgaQ
// Hatena::Let loader's bug; missing semicolons of loder
// - self patching? WTH
(() => {
'use strict';
if (!/let\.(?:st\-)?hatelabo\.(?:jp|com)$/.test(location.hostname) ||
location.pathname.split('/').slice(1) < 3) {
return;
}
let title = document.body.querySelector('#bookmarklet-title .title');
// trim and delete "Fork"
title = title.firstChild.textContent;
const packed = document.body.querySelector('.information a[href$="packed.js"]');
const xhr = new XMLHttpRequest();
xhr.open('GET', packed.href);
xhr.timeout = 2000;
xhr.addEventListener('load', () => {
if (xhr.readyState === 4 && xhr.status === 200) {
// TBD modal copy textarea
window.prompt(title, 'javascript:' + xhr.responseText);
}
});
xhr.send();
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。