Fix annoyances of of gitter.im FreeCodeCamp channels
目前為
// ==UserScript==
// @name Gitter Done for FreeCodeCamp
// @namespace http://aimless.info/
// @version 0.1
// @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';
//// main
var $ = unsafeWindow.jQuery;
var STFU = ['@camperbot'];
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 nodeAdded(node) {
var msg = "nodeAdded:";
var from = $('.chat-item__username', node);
if (!from) return;
var who = from.text();
if (who === '') return;
msg += ' from:' + who;
if (_.contains(STFU, who)) {
msg += ' (STFU)';
gag(node);
}
console.log(msg);
}
function gag(node) {
// extreme, makes it hard to expand later
// $(node).hide();
// This at least hints something was said, plus a handle to expand later
$('.chat-item__content', node).hide();
$('.chat-item__actions', node).hide();
var avatar = $('img.avatar__image', node);
avatar.css('border', '5px double #fcf');
avatar.click(function () { ungag(node); });
}
function ungag(node) {
$('.chat-item__content', node).show();
$('.chat-item__actions', node).show();
var avatar = $('img.avatar__image', node);
avatar.css('border', 'unset');
avatar.click(function () { gag(node); });
}
})();