您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Materialize Twitch
// ==UserScript== // @name Twitch Material Design // @namespace // @version 0.1 // @description Materialize Twitch // @author d3xtr0 // @match *.twitch.tv/* // @grant GM_getValue // @grant GM_setValue // ==/UserScript== (function() { 'use strict'; var betterttv = true; $(function(){ var cssstyle = ` <style> .app-main{ top:50px !important; } .material-header{ height:50px; width:100%; background:#6441a4; } #material_logo{ height:30px; margin:10px; fill:#fff; display:inline-block; } .material-hamburger{ //height:25px; fill:#fff; vertical-align: top; margin:10px; cursor:pointer; } #sidebar_search{ position:absolute; display: inline-block; width: 400px; max-width:30%; vertical-align: top; left: 50%; margin-top: 7px; transform:translateX(-50%); } #sidebar_search input, #sidebar_search input:focus, #left_col .warp input{ height:35px; background-color:rgba(255,255,255,0.15) !important; box-shadow:0 1px 1.5px rgba(0,0,0,.06),0 1px 1px rgba(0,0,0,.12); } .leaf-wrapper svg{ left:10px; } .leaf-wrapper svg path{ fill:rgba(255,255,255,0.8); } #left_close{ display:none; } .material-avatar{ position:absolute; right:10px; top:5px; } .material-avatar img{ height:40px; width:40px; border-radius:50%; } .warp{ height: calc(100vh - 50px); min-height: calc(100vh - 50px); } .chat-buttons-container .button, .profile-info .buttons .button, #channel_actions .button{ box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12) !important; transition:all .25s; border:0 !important; } .chat-buttons-container .button:hover, .profile-info .buttons .button:hover, #channel_actions .button:hover{ box-shadow:0 4px 9px 0 rgba(0,0,0,0.18),0 4px 13px 0 rgba(0,0,0,0.15) !important; } #chat_text_input, #chat_text_login, .ember-chat .chat-interface textarea{ border:0 !important; } </style>`; var header = ` <div class="material-header"> <svg data-ember-action="" class="material-hamburger" height="25px" id="Layer_1" style="enable-background:new 0 0 32 32;" version="1.1" viewBox="0 0 32 32" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M4,10h24c1.104,0,2-0.896,2-2s-0.896-2-2-2H4C2.896,6,2,6.896,2,8S2.896,10,4,10z M28,14H4c-1.104,0-2,0.896-2,2 s0.896,2,2,2h24c1.104,0,2-0.896,2-2S29.104,14,28,14z M28,22H4c-1.104,0-2,0.896-2,2s0.896,2,2,2h24c1.104,0,2-0.896,2-2 S29.104,22,28,22z"/></svg> <a aria-label="Twitch" href="/" id="material_logo" title="Twitch"> <svg aria-label="Twitch - Main Page" class="svg-logo_twitch" height="32px" role="img" version="1.1" viewBox="0 0 94 32" width="94px" x="0px" y="0px"> <title>Twitch</title> <desc>Main Page</desc> <path clip-rule="evenodd" d="M88,5h-6V0h-9l-6,5h-5.5L59,7.5V5h-5V0H36v5H16l-5-5H0v22l5,5.25L14,32h6v-1.5l3,1.5h12l2-3l1,3h7v-3l3,3h8l0.5-3l2.5,3h10l3-3v3h4l3-3v3h7l7-6V10L88,5z M13,13H8v6h5v6H6l-4-4V2h6v5h5V13z M36,21.5L32.5,25H15V7h6v12h2V7h6v12h2V7h5V21.5z M44,25h-6V7h6V25z M44,5h-6V2h6V5z M57,13h-5v6h5v6h-7l-4-4V2h6v5h5V13z M72,13h-7v6h7v6h-9l-4-4V11l4-4h9V13z M91,25h-6V13h-5v12h-6V2h6v5h7l4,4V25z" fill-rule="evenodd"></path> </svg> </a> <div class="material-avatar"><a href="" data-ember-action="" data-tt_content="profile" original-title="Profile"></a></div> </div> `; $('body').append(header); var search = $('#sidebar_search').clone(); $('#sidebar_search').remove(); var avatar = $('.warp .warp__avatar > img').eq(0).clone(); var profile_url = $('a.warp__tipsy[href$="/profile"]').attr("href"); var profile_action = $('a.warp__tipsy[href$="/profile"]').attr("data-ember-action"); $('.material-header').append(search); $('.material-header .material-avatar a').append(avatar); $('.material-header .material-avatar a').attr("href",profile_url); $('.material-header .material-avatar a').attr("data-href",profile_url); $('.material-header .material-avatar a').attr("data-ember-action",profile_action); var more_stuff = $('.warp__list.warp__list--sm.drawer__item').clone(); $('.warp__list.warp__list--sm.drawer__item').remove(); var user_links = $('.warp__anchor.warp__list .warp__drawer > ul').clone(); $('.warp__anchor.warp__list .warp__drawer > ul').remove(); $('.warp__anchor.warp__list .warp__drawer').append(more_stuff); $('.drawer .tse-content').append('<dt class="warp__item warp__item--header"><span>Channel</span></dt>'); $('.drawer .tse-content').append(user_links); updateGames(); $('.material-hamburger').attr('data-ember-action',$('#left_close').attr('data-ember-action')); $('.drawer .warp__item.drawer__item.drawer__item--brick').remove(); // remove logo $('body').append(cssstyle); /* BetterTTV */ if(betterttv){ $('.drawer .tse-content').append('<ul class="warp__list warp__list--md"><li class="warp__item"><a class="warp__tipsy bttvLink" data-tt_medium="twitch_leftnav" href="javascript:void(0);" original-title="BetterTTV Settings"><figure class="warp__avatar bttvSettingsIconDropDown"></figure><span class="drawer__item">BetterTTV Settings</span></a></li></ul>'); $('body').on('click','.bttvLink',function(){ $('#bttvSettingsPanel').toggle(); }); } /* Follow Games */ $('body').on('click','.follow-button a.follow',function(){ if (typeof gmGet("twgames") !== "undefined" && gmGet("twgames") !== "undefined" && gmGet("twgames") != "[]") { var games = JSON.parse(gmGet("twgames")); }else{ var games = []; } var title = $('h2.title').clone().children().remove().end().text().trim(); var id = games.indexOf(title); if (id == -1) { games.push(title); }else{ games.splice(id, 1); } gmSet("twgames", JSON.stringify(games)); updateGames(); }); function updateGames(){ $('.material-games').remove(); if (typeof gmGet("twgames") !== "undefined" && gmGet("twgames") !== "undefined" && gmGet("twgames") != "[]") { var games = JSON.parse(gmGet("twgames")); var gamestr = '<div class="material-games"><dt class="warp__item warp__item--header"><span>Games</span></dt><ul class="warp__list">'; for (var i = 0; i < games.length; i++) { gamestr += '<li class="warp__item"><a href="/directory/game/' + encodeURIComponent(games[i]) + '">' + games[i] + '</a></li>'; } gamestr += '</ul></div>'; $('.tse-content .warp__list').eq(0).after(gamestr); } } function gmGet(name) { var theValue = GM_getValue(name); return theValue; } function gmSet(name, value) { GM_setValue(name, value); } }); })();