Skip to content

Instantly share code, notes, and snippets.

@houkanshan
Last active December 22, 2016 16:32
Show Gist options
  • Save houkanshan/3a48bf702e115e1ae966 to your computer and use it in GitHub Desktop.
Save houkanshan/3a48bf702e115e1ae966 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name hide douban feeds
// @namespace http://houkanshan.github.io/
// @version 0.6.0
// @description I dont care.
// @match http*://www.douban.com/*
// @require http://libs.baidu.com/underscore/1.3.3/underscore-min.js
// @require http://libs.baidu.com/jquery/2.0.3/jquery.min.js
// @copyright 2014+, Houkanshan
// ==/UserScript==
//
// GistID: 3a48bf702e115e1ae966
var blockedCSS = (function () {/*
.blocked-feed .mod {
height: 54px;
overflow: hidden;
opacity: 0.2;
margin-bottom: 14px;
}
.blocked-feed .action-block:before {
content: '+';
}
.action-block:before {
content: '×';
float: right;
color: #ebebeb;
margin-top: -16px;
height: 12px;
width: 12px;
line-height: 12px;
vertical-align: middle;
display: block;
cursor: pointer;
}
.status-wrapper .others {
bottom: auto!important;
position: static!important;
width: 100%;
}
.status-wrapper .actions {
display: block!important;
position: static!important;
}
.status-real-wrapper .actions {
padding-bottom: 0;
}
*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
insertCSS(blockedCSS)
var softBlockWords = ['李易峰', '股市', '套牢', '大盘', '调整', '跌停', '大跌', '跳水', '跌', '抄底', '做空', '月饼', '发工资', '某荚', '贵荚', '豌豆荚', '宋冬野', '烂体验体验站']
var hardBlockWords = ['要参加线上活动', '八卦来了']
var blockIdKey = 'blocked_feed_ids'
var blockIds = localStorage[blockIdKey] ? JSON.parse(localStorage[blockIdKey]) : []
var whiteWords = []
var listSel = '.stream-items'
var feedSel = '[data-sid]'
var idBlockedSel = '[data-sid="' + blockIds.join('"], [data-sid="') + '"]'
var list = $(listSel)
var feeds = list.find(feedSel)
var blockedFeeds = list.find(idBlockedSel)
//$('.status-wrapper').find('.actions').attr('style', 'position:static!important;display:block!important').end()
$('.status-real-wrapper').off('click').css('margin-top', 0)
blockedFeeds = blockedFeeds.add(feeds.filter(function(i, el) {
var text = el.textContent
var hardRemove = _.some(hardBlockWords, function(word) {
return text.match(word)
})
if (hardRemove) {
el.remove()
return false
}
return _.some(softBlockWords, function(word) {
return text.match(word)
}) && !_.some(whiteWords, function(word) {
return text.match(word)
})
}))
blockedFeeds.addClass('blocked-feed')
feeds.prepend('<span class="action-block">')
list.on('click', '.action-block', function(e){
var el = $(e.currentTarget)
var feed = el.closest(feedSel)
var sid = feed.data('sid')
var hasBlocked = feed.is('.blocked-feed')
if (hasBlocked) {
blockIds = _.without(blockIds, sid)
localStorage[blockIdKey] = JSON.stringify(blockIds)
feed.removeClass('blocked-feed')
} else {
blockIds.push(sid)
localStorage[blockIdKey] = JSON.stringify(blockIds)
feed.addClass('blocked-feed')
}
})
list.on('click', '.blocked-feed', function(e) {
var el = $(e.currentTarget)
el.removeClass('blocked-feed')
})
function insertCSS(css, options) {
var elem = document.createElement('style');
elem.setAttribute('type', 'text/css');
if ('textContent' in elem) {
elem.textContent = css;
} else {
elem.styleSheet.cssText = css;
}
var head = document.getElementsByTagName('head')[0];
if (options && options.prepend) {
head.insertBefore(elem, head.childNodes[0]);
} else {
head.appendChild(elem);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment