Twimedi
@@ -1,39 +1,53 @@
/*
- * @title twit原寸(改)
- * @description twitter画像原寸ボタン(http://hogas.moe/tooi.html)のtwit原寸を、1ページで全画像を表示するよう改修
- * @include https://twitter.com/*
- * @license MIT License
+ * @title Twimedi
+ * @description open current tweet medias in new tab/window
+ * @include *://twitter.com/*
+ * @contributor furyu-tei http://let.hatelabo.jp/furyu-tei/let/hJmcx4_e4fIl (Fork of)
+ * @license MIT License http://opensource.org/licenses/MIT
* @javascript_url
*/
-( function( w, d ) {
-'use strict';
+// via id:furyu-tei
+// http://let.hatelabo.jp/furyu-tei/let/hLHUyOKF-tI4
+// http://let.hatelabo.jp/furyu-tei/let/hJmcyOHMtZQz
+
+(() => {
+ // needs statuses?
+ // https://twitter.com/<SCREEN_NAME>/status/<TWEET_ID>
+ if (!/twitter\.com/.test(location.hostname) ||
+ //*/
+ location.pathname.split('/').slice(1) < 3) { // TBD RegExp
+ /*/
+ // ES7 Array#includes c.f.
+ // http://kangax.github.io/compat-table/es7/
+ location.pathname.split('/').includes('status') {
+ //*/
+ return;
+ }
+
+ const mediaURLs = Array.from(document.body.querySelectorAll([
+ '.expansion-container',
+ '.AdaptiveMedia',
+ 'img[src]', // TBD other medias
+ ].join(' '))).filter(media => !!media.src).map(media => {
+ // TBD .jpg:SIZE check
+ return media.src + ':orig';
+ });
+ if (!mediaURLs.length) return;
+
+ // TODO strict DOM construction c.f.
+ // http://let.hatelabo.jp/noromanba/let/hLHX5oTN2bUh
+ const page = window.open('about:blank', '_blank');
+ page.document.write('<head><title>' + document.title + '</title></head>');
+ page.document.write('<body style="text-align:center; background-color:black;">');
+ mediaURLs.forEach(url => {
+ page.document.write([
+ '<a href="' + url + '">',
+ '<img src="' + url + '"',
+ 'style="max-width: 100%; max-height: 100%;">',
+ '</a>',
+ ].join(''));
+ });
+ page.document.close();
+})();
-var urls = [];
-
-[].forEach.call( d.querySelectorAll( '.permalink-tweet-container .AdaptiveMedia-photoContainer img' ), function( img ) {
- if ( img.src ) urls.push( img.src.replace( /:\w*$/, '' ) + ':orig' );
-} );
-
-if ( urls.length <= 0 ) return;
-
-d = w.open( 'about:blank' ).document;
-d.open();
-d.write( '<body></body>' );
-d.close();
-
-urls.forEach( function( url ) {
- var img = d.createElement( 'img' ),
- link = d.createElement( 'a' ),
- p = d.createElement( 'p' ),
- img_style = img.style;
- img.src = link.href = url;
- img_style.maxWidth = '100%';
- img_style.height = 'auto';
- link.target = '_blank';
- link.appendChild( img );
- p.appendChild( link );
- d.body.appendChild( p );
-} );
-
-} )( window, document );
/*
* @title Twimedi
* @description open current tweet medias in new tab/window
* @include *://twitter.com/*
* @contributor furyu-tei http://let.hatelabo.jp/furyu-tei/let/hJmcx4_e4fIl (Fork of)
* @license MIT License http://opensource.org/licenses/MIT
* @javascript_url
*/
// via id:furyu-tei
// http://let.hatelabo.jp/furyu-tei/let/hLHUyOKF-tI4
// http://let.hatelabo.jp/furyu-tei/let/hJmcyOHMtZQz
(() => {
// needs statuses?
// https://twitter.com/<SCREEN_NAME>/status/<TWEET_ID>
if (!/twitter\.com/.test(location.hostname) ||
//*/
location.pathname.split('/').slice(1) < 3) { // TBD RegExp
/*/
// ES7 Array#includes c.f.
// http://kangax.github.io/compat-table/es7/
location.pathname.split('/').includes('status') {
//*/
return;
}
const mediaURLs = Array.from(document.body.querySelectorAll([
'.expansion-container',
'.AdaptiveMedia',
'img[src]', // TBD other medias
].join(' '))).filter(media => !!media.src).map(media => {
// TBD .jpg:SIZE check
return media.src + ':orig';
});
if (!mediaURLs.length) return;
// TODO strict DOM construction c.f.
// http://let.hatelabo.jp/noromanba/let/hLHX5oTN2bUh
const page = window.open('about:blank', '_blank');
page.document.write('<head><title>' + document.title + '</title></head>');
page.document.write('<body style="text-align:center; background-color:black;">');
mediaURLs.forEach(url => {
page.document.write([
'<a href="' + url + '">',
'<img src="' + url + '"',
'style="max-width: 100%; max-height: 100%;">',
'</a>',
].join(''));
});
page.document.close();
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。