您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Fix annoyances of of gitter.im FreeCodeCamp channels
// ==UserScript== // @name Gitter Done for FreeCodeCamp // @namespace http://aimless.info/ // @version 0.4 // @description Fix annoyances of of gitter.im FreeCodeCamp channels // @author Chuck Adams // @match https://gitter.im/FreeCodeCamp/* // @grant unsafeWindow // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js // ==/UserScript== (function() { 'use strict'; //// config var STFU = ['@camperbot']; var GAGGED_TEXT = '...'; //// main var $ = unsafeWindow.jQuery; addStyles(); var targetNodes = $("#chat-container"); var MutationObserver = window.MutationObserver || window.WebKitMutationObserver; var myObserver = new MutationObserver(mutationObserved); var obsConfig = { childList: true, characterData: false, attributes: false, subtree: true }; targetNodes.each(function () { myObserver.observe (this, obsConfig); }); //// end main function mutationObserved(recs) { _.each(recs, handleMutation); } function handleMutation(rec) { _.each(rec.addedNodes, nodeAdded); } function addStyles() { // Bit of a hack but it does the job $('<style>.gagged .chat-item__content { display: none; }</style>').appendTo('head'); $('<style>.gagged .chat-item__actions { display: none; }</style>').appendTo('head'); $('<style>.gagged .avatar__image { border: 5px double #fcf; }</style>').appendTo('head'); $('<style>.muffled-screaming { display: none; position: absolute; top: 0; left: 64px; white-space: nowrap; }</style>').appendTo('head'); $('<style>.muffled-screaming.audible { display: inline; color: #ccc; font-style: italic; }</style>').appendTo('head'); } function nodeAdded(node) { var from = $('.chat-item__username', node); if (from.length === 0) return; var who = from.text(); if (who === '') return; if (_.contains(STFU, who)) { gag(node); } } function gag(node) { var avatar = $('img.avatar__image', node); if (avatar.length === 0) return; // node is deeper than we wanted $(node).addClass('gagged'); avatar.click(function () { ungag(node); }); var screams = $('.muffled-screaming', node); if (screams.length === 0) { $('<span class="muffled-screaming audible">' + GAGGED_TEXT + '</span>').insertAfter(avatar); screams = $('.muffled-screaming', node); } screams.addClass('audible'); } function ungag(node) { $(node).removeClass('gagged'); var avatar = $('img.avatar__image', node); avatar.click(function () { gag(node); }); $('.muffled-screaming', node).removeClass('audible'); } })();