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 です。

History

  1. 2016/01/22 05:01:58 - 2016-01-22
  2. 2016/01/17 00:55:38 - 2016-01-17
  3. 2016/01/17 00:39:54 - 2016-01-17
  4. 2016/01/17 00:31:03 - 2016-01-17