// ==UserScript==
// @name Mutinga! (Silenciar Usuarios)
// @version 1.4.3a
// @description Ocultar post, shouts y comentarios de usuarios
// @author master_ripper
// @match http://www.taringa.net/*
// @match https://www.taringa.net/*
// @grant none
// @namespace https://gf.qytechs.cn/users/89223
// ==/UserScript==
/* TODO
- Boton en perfil
- Overlay con los usuarios bloqueados
*/
(function() {
function getmutedUsers() {
if (localStorage.mutedUsers === undefined) {
localStorage.setItem('mutedUsers', '[]');
return [];
}
var dee = JSON.parse(localStorage.mutedUsers);
return dee;
}
function addUser(user) {
var dee = JSON.parse(localStorage.mutedUsers);
//Check that the users isn't already muted
if (dee.indexOf(user)<0) {
dee.push(user);
console.log("Added User: ",user);
localStorage.mutedUsers = JSON.stringify(dee);
}
}
function searchUser(user) {
var dee = JSON.parse(localStorage.mutedUsers);
//Check that the users isn't already muted
return (dee.indexOf(user)>=0);
}
function delUser(user) {
var dee = JSON.parse(localStorage.mutedUsers);
var indx = dee.indexOf(user);
//Check if user exist in list
if (indx > -1) {
dee.splice(indx, 1);
localStorage.mutedUsers = JSON.stringify(dee);
console.log("Deleted User: ",user);
}
}
var box = `<div class="box" id="blockedcrap">
<div class="title clearfix">
<h2>Usuarios Muteados</h2>
</div>
<!--<div style="margin-top: 8px; width: 95%">
<input type="text" class="input" style="width: 100%;" id="usersBlock" autocomplete="off" placeholder="Usuario a Silenciar">
<button class="btn r" style="width: 100%; margin-top: 5px;">Silenciar</button>
</div>-->
<div class="list" style="max-height: 300px; overflow-x: hidden;">
</div>
</div>`;
//var list_elements = '<div class="list-element"><b>%username%</b><span style="cursor:pointer" class="value delUser" data-users="%username%">Desbloquear</span></div>';
$("body").on("click", "#blockedcrap button", function(e) {
var usersBlock = $("#usersBlock").val().trim();
if ($.inArray(usersBlock, getmutedUsers()) == -1) {
addUser(usersBlock);
$("#blockedcrap > div.list").append(list_elements.replace(/%username%/g, usersBlock));
}
});
function hidePosts(user){
var selector = 'a[title="' + user + '"]';
var usuario = document.querySelectorAll(selector);
for (i = 0; i < usuario.length; i++) {
usuario[i].parentNode.parentNode.style.display = 'none';
}
var usuario2 = $('p:contains('+user+')');
//console.log(usuario2);
for (var i = usuario2.length - 1; i >= 0; i--) {
usuario2[i].parentNode.parentNode.style.display= 'none';
}
}
function hideShouts(user){
var selector = 'a.hovercard.shout-user_name[href="http://www.taringa.net/' + user + '"]';
var usuario = document.querySelectorAll(selector);
for (i = 0; i < usuario.length; i++) {
usuario[i].parentNode.parentNode.parentNode.parentNode.style.display = 'none';
}
//HomePage shouts
var selector2 = 'a.shoutsb__user[href="http://www.taringa.net/' + user + '"]';
var usuario2 = document.querySelectorAll(selector2);
for (i = 0; i < usuario2.length; i++) {
usuario2[i].parentNode.style.display = 'none';
}
}
function hideComments(user){
var commentselector = 'div.comment-text a:not(.muted)[href*="/' + user + '"]';
var comments = document.querySelectorAll(commentselector);
//console.log("Comments: ",comments);
for (i = 0; i < comments.length; i++) {
$(comments[i]).addClass('muted');
var com = comments[i].parentNode;
while(!com.classList.contains('comment')){
com = com.parentNode;
}
if (com.parentNode.classList.contains('comment-replies-container')) {
com = com.parentNode;
}
console.log("com= ",com);
com.style.display = 'none';
}
}
function hideContent(){
var userslist = getmutedUsers();
userslist.forEach(function (user){
if (window.location.pathname.indexOf('/mi')>-1 || window.location.pathname.indexOf('/shouts')>-1) {
hideShouts(user);
}
if (window.location.pathname.length === 1){ //Hide posts on home page
hidePosts(user);
}
else{
hideComments(user);
}
});
}
var list_elements = `<div class="list-element" style="height:25px;">
<div class="container">
<div style="float:left;width: 10%;box-sizing:border-box;">
<img src="%avatarurl%" class="avatar-32" style="height: 26px;width: 26px;margin: -2px 0 -6px -7px;display: inline-block;">
</div>
<div style="float:left;width: 55%;box-sizing:border-box;">
<div style="padding-top: 3px;">%username%</div>
</div>
<div style="float:left; width:35%; box-sizing:border-box;">
<div style="padding-top: 3px;cursor:pointer;" class="value delUser" data-users="%username%">Desbloquear</div>
</div>
<div style="clear:both;"></div>
</div>
</div>`;
function showList(){
var modalbackground = `<div id="mysimplemodaloverlay" class="simplemodal-overlay" style="opacity: 0.75; position: fixed; left: 0px; top: 0px; z-index: 1001; background-color: #000;"></div>`;
$('body').append(modalbackground);
$('#mysimplemodaloverlay').css({ width: window.innerWidth, height: window.innerHeight });
var modalcontainer = `<div class="simplemodalcontainer" id="mysimplemodalcontainer" style="position: fixed; z-index: 1002; height: 360px; width: 360px; background-color: rgb(238, 238, 238); border-width: 4px; border-style: solid; border-color: rgb(68, 68, 68); border-image: initial; padding: 12px;">
<a class="modalCloseImg simplemodal-close icon-cerrar" style="width: 25px;height: 29px;display: inline;z-index: 3200;position: absolute;top: -21px;right: -18px;cursor: pointer;font-size: x-large;color: rgb(255, 96, 96);" title="Cerrar"></a>
<div class="simplemodal-wrap" style="height: 100%; outline: 0px; width: 100%; overflow-x: hidden;" tabindex="-1">
<div class="list" style="overflow-x: hidden;">
</div>
</div>`;
$('body').append(modalcontainer);
$('#mysimplemodalcontainer').css({ left: (window.innerWidth-360)/2, top: (window.innerHeight-360)/2 });
$('body').on('click', '#mysimplemodalcontainer > a.modalCloseImg', function(event) {
event.preventDefault();
$('#mysimplemodalcontainer').remove();
$('#mysimplemodaloverlay').remove();
});
var userslist = getmutedUsers();
var $list = $("#mysimplemodalcontainer > div > div.list");
userslist.forEach(function (user){
var list_el = list_elements.replace(/%username%/g, user);
var avatarurl;
$.get('https://api.taringa.net/user/nick/view/'+user,function(res,status){
avatarurl=res.avatar.small;
console.log("avatarurl inside: ",avatarurl);
$list.append(list_el.replace(/%avatarurl%/g, avatarurl));
});
//console.log("avatarurl outside: ",avatarurl);
});
}
function propagateButtons(){
//Comments Buttons
var buttonhide = `<li class="">
<a class="addUnlike mutebtn" username="%username%" title="Silenciar Usuario">
<i class="icon-no-ver"></i>
</a>
</li>`;
$('div.comment-text a:not(.comment-content a)').each(function() {
var $a = $(this);
var name = $a.text();
var buttonhide_ = buttonhide.replace(/%username%/g,name);
$a.closest('.comment').find('.comment-actions ul:not(.hasmutebtn)').append(buttonhide_).addClass('hasmutebtn');
});
//Shout Buttons
var muteatshout = `<li><div class="icon-no-ver shout-action shout-mutebtn" username="%username%">Silenciar</div></li>`;
$('a.hovercard.shout-user_name').each(function() {
var $a = $(this);
var name = $a.text();
var muteatshout_ = muteatshout.replace(/%username%/g,name);
$a.closest('.shout-heading').find('ul.shouts_actions:not(.hasmutebtn)').append(muteatshout_).addClass('hasmutebtn');
});
//Profile Buttons
if (document.body.classList.contains('section-perfil')) {
var logged_user = $('span.user-name').text().trim();
var username = window.location.pathname.substr(1);
if(logged_user != username){
//Other Profile
var buttonAddUser = `<a title="Silenciar" class="btn g muteprofile" username="%username%" style="display:none;">
<div class="btn-text follow-text">
Silenciar
</div>
</a>`;
var buttonMutedUser = `<a title="Quitar de la lista negra" class="btn r unmuteprofile" username="%username%" style="display:none;">
<div class="btn-text follow-text">
Silenciado
</div>
</a>`;
$('div.follow-buttons').after(buttonMutedUser.replace(/%username%/g,username), buttonAddUser.replace(/%username%/g,username));
if (searchUser(username)) { //Search user in db
//Blocked User
$('a.unmuteprofile').css('display', 'inline-block');
}
else{
//Not Blocked User
$('a.muteprofile').css('display', 'inline-block');
}
}
else{
//Own profile
var buttonShowList = `<a title="Ver Lista de Usuarios Silenciados" class="btn g showlistbtn">
<div class="btn-text follow-text">
Usuarios Silenciados
</div>
</a>`;
$('a.btn[href="/cuenta"]').after(buttonShowList);
}
}
}
function vanishComment(comm){
comm[0].style= 'transition : opacity 0.5s linear; opacity : 0';
}
function assignActions(){
//Comments Buttons
var mutebtns = document.querySelectorAll('a.mutebtn:not(.action-assigned)');
for (var i = 0, len = mutebtns.length; i < len; i++) {
mutebtns[i].addEventListener("click", function() {
addUser(this.getAttribute("username"));
$(this).addClass('action-assigned');
vanishComment($(this).closest('.comment'));
setTimeout(hideContent,750);
});
}
//Shout Buttons
var shoutmutebtns = document.querySelectorAll('div.shout-mutebtn:not(.action-assigned)');
for (var i = 0, len = shoutmutebtns.length; i < len; i++) {
shoutmutebtns[i].addEventListener("click", function() {
addUser(this.getAttribute("username"));
$(this).addClass('action-assigned');
vanishComment($(this).closest('.shout-item'));
setTimeout(hideContent,500);
});
}
if (document.body.classList.contains('section-perfil')) {
var muteprofilebtn = document.querySelectorAll('a.muteprofile:not(.action-assigned)');
for (var i = 0, len = muteprofilebtn.length; i < len; i++) {
muteprofilebtn[i].addEventListener("click", function() {
addUser(this.getAttribute("username"));
$(this).addClass('action-assigned');
$(this).css('display', 'none');
$('a.unmuteprofile').css('display', 'inline-block');
});
}
var unmuteprofilebtn = document.querySelectorAll('a.unmuteprofile:not(.action-assigned)');
for (var i = 0, len = unmuteprofilebtn.length; i < len; i++) {
unmuteprofilebtn[i].addEventListener("click", function() {
delUser(this.getAttribute("username"));
$(this).addClass('action-assigned');
$(this).css('display', 'none');
$('a.muteprofile').css('display', 'inline-block');
});
}
var showlistbtn = document.querySelectorAll('a.showlistbtn:not(.action-assigned)');
for (var i = 0, len = showlistbtn.length; i < len; i++) {
showlistbtn[i].addEventListener("click", function() {
showList();
$(this).addClass('action-assigned');
});
}
$("body").on("click", ".delUser", function(e){
delUser($(this).data("users"));
$(this).closest("div.list-element").remove();
});
}
}
function main() {
propagateButtons();
assignActions();
hideContent();
}
$(document).ready(function(e) {
main();
});
$(document).ajaxSuccess(function(event, jqXHR, settings) {
if (settings.url.indexOf('/comments') > -1 || settings.url.indexOf('ajax/feed/fetch') > -1 || settings.url.indexOf('serv/more') > -1 ) {
main();
}
});
})();