最新ツイート表示が好き!

  • /*
     * @title 最新ツイート表示が好き!
     * @description 今後は https://greasyfork.org/ja/scripts/400695-i-like-latest-tweets 参照(Twitter のタイムラインが「ホーム」になったときに、最新ツイート表示に切り替える)
     * @include https://twitter.com/*
     * @include https://mobile.twitter.com/*
     * @license MIT License
     * @require 
     * @javascript_url
     */
    
    ( () => {
    let
        status = 'idle';
    
    const
        FixToLatestTweetTimeline = new class {
            constructor() {
                this.status = 'idle';
                this.update_status();
            }
            
            update_status() {
                switch ( this.status ) {
                    case 'idle' : {
                        let home_mode_button = this.get_home_mode_button();
                        
                        if ( ! home_mode_button ) {
                            break;
                        }
                        
                        console.log( '「ホーム」を検知!最新ツイート表示へ切り変えます!' );
                        
                        home_mode_button.click();
                        
                        this.status = 'wait_menu';
                        break;
                    }
                    case 'wait_menu': {
                        let change_to_recent_mode_button = this.get_change_to_recent_mode_button();
                        
                        if ( ! change_to_recent_mode_button ) {
                            break;
                        }
                        
                        change_to_recent_mode_button.click();
                        
                        console.log( '最新ツイート表示へ切り替え中…' );
                        
                        this.status = 'wait_home_mode_button_off';
                        break;
                    }
                    
                    case 'wait_home_mode_button_off' : {
                        let home_mode_button = this.get_home_mode_button();
                        
                        if ( home_mode_button ) {
                            break;
                        }
                        
                        console.log( '最新ツイート表示に切り替わりました!' );
                        this.status = 'idle';
                        break;
                    }
                }
            }
            
            get_home_mode_button() {
                return document.querySelector( 'div[role="button"][aria-label="トップツイートがオンになります"]' );
            }
            
            get_change_to_recent_mode_button() {
                return Array.from( document.querySelectorAll( 'div[role="menu"] div[role="menuitem"] > div > div > span' ) ).filter( span => 0 <= span.textContent.indexOf( '最新ツイート表示に切り替える' ) )[ 0 ];
            }
        },
        
        observer = new MutationObserver( ( records ) => {
            if ( new URL( location.href ).pathname != '/home' ) {
                return;
            }
            FixToLatestTweetTimeline.update_status();
        } );
    
    observer.observe( document.body, { childList: true, subtree: true } );
    
    } )();
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2020/04/14 22:45:26 - 2020-04-14
  2. 2020/04/14 22:41:42 - 2020-04-14
  3. 2020/04/12 07:39:22 - 2020-04-12