Enable/Disable custom submission types with keywords
// ==UserScript==
// @name FA SubFilter
// @namespace FurAffinity
// @version 3.0.0
// @description Enable/Disable custom submission types with keywords
// @author JaysonHusky
// @grant GM_getValue
// @grant GM_setValue
// @match *://www.furaffinity.net/msg/submissions*
// @match *://www.furaffinity.net/gallery*
// @match *://www.furaffinity.net/favorites*
// @match *://www.furaffinity.net/browse*
// @match *://www.furaffinity.net/controls/user-settings/*
// @require https://code.jquery.com/jquery-latest.js
// ==/UserScript==
(function() {
'use strict';
var target_mode="on";
var TemplateStyle=$('body').attr('data-static-path');
if(TemplateStyle===undefined){throw new Error("SubFilter: An error occured. [Code: ERR_TPL_VARS_MIS]");}
// Setup keywords
var SubFilter_Keywords;
var sf_ud_keywords;
// Begin loading
function FASFM_Load(){
sf_ud_keywords=GM_getValue('fasfm');
if(sf_ud_keywords>""){
SubFilter_Keywords=sf_ud_keywords.split(",");
$('#fafsm_settings').val(sf_ud_keywords.replace(/,/g,", "));
}
else {
console.log("SubFilter: An error occured while attempting to retrieve keywords. [Code: ERR_KEYS_UNDEFINED]");
}
}
// Add Special Stylesheet for keywords
var JaysCSS=document.createElement('style');
var jayStyle=document.createTextNode(`
i.fafsm{
margin-right:5px;
padding:1px;
}
span.fafx-update-status{
font-weight:bold;
color:#04fd04;
float:right;
clear:right;
display:none;
}
#customfacontrolpanel{
/*border:1px dashed white;
background:rgba(1,0,0,0.1);
padding:5px;
border-radius:5px;*/
margin-top:20px;
}
.JaySB{
background: #36393d;
padding: 7px 14px 14px 14px;
}
#speciallisting li{
margin-left:20px;
}
`);
JaysCSS.appendChild(jayStyle);
document.getElementsByTagName('body')[0].appendChild(JaysCSS);
// Save settings
function FAFSM_SaveSettings(fasfm){
GM_setValue('fasfm',fasfm);
}
// Load Control Panel
var pathx=window.location.pathname;
if(~pathx.indexOf("/controls/user-settings/")){
// Update
$(document.body).on('click','#fafsm_saveit',function(){
var fafsm_set=$("input[name='fafsm_setting']").val().replace(/ /g,"").replace(/ /g,"");
FAFSM_SaveSettings(fafsm_set);
$('.fafx-update-status').fadeIn('slow');
setTimeout(function(){
$('.fafx-update-status').fadeOut('slow');
}, 5000);
});
if(TemplateStyle=="/themes/beta"){
$('.content .section-body').after(`
<div id="customfacontrolpanel" class="JaySB">
<h2>SubFilter Control Panel <span class="fafx-update-status">Update successful!</span></h2>
<br/>
<h4>Custom Keywords to blacklist in submissions inbox</h4>
<div class="control-panel-option">
<div class="control-panel-item-1">
<p>
<ul id="speciallisting">
<li>Keywords must be comma seperated.</li>
<li>Case insensitive</li>
<li>Singular terms will match plurals.</li>
</ul>
</p>
</div>
<div class="control-panel-item-2">
<input type="text" name="fafsm_setting" id="fafsm_settings" class="textbox" placeholder="Example: free,fender,commission" style="height:36px;padding:5px; width:300px" />
</div>
</div>
<div class="button-nav">
<div class="button-nav-item">
<input class="button mobile-button" id="fafsm_saveit" type="button" value="Save SubFilter Settings*">
</div>
</div>
<br/><b>*Updates take effect from the next page load.</b><br/><span style="font-size:10px;position:relative;bottom:0;right:0;">SubFilter (A user controlled FA Blacklisting tool) by <a href="https://www.furaffinity.net/user/feralfrenzy" style="border-bottom:1px dotted white;">JaysonHusky</a></span>
</div><br/><br/>`);
}
else {
$('.footer').before(`<table cellpadding="0" cellspacing="1" border="0" class="section maintable" style="width: 60%; margin: 0 auto;">
<tbody>
<tr>
<td height="22" class="cat links">
<strong>SubFilter - Control Panel</strong>
<span class="fafx-update-status">Update successful!</span>
</td>
</tr>
<tr>
<td class="alt1 addpad ucp-site-settings" align="center">
<table cellpadding="0" cellspacing="1" border="0">
<tbody>
<tr>
<th><strong>Custom Keywords to bblock in submissions inbox</strong></th>
<td>
<input type="text" name="fafsm_setting" id="fafsm_settings" class="textbox" placeholder="Example: free,fender,commission" style="padding:5px; width:250px" />
</td>
<td class="option-description">
<p>Enter keywords here for the addon to identify in journal titles. <br/>Keywords must be comma seperated.<br/>Case insensitive<br/>Singular terms will match plurals.</p>
</td>
</tr>
<th class="noborder"> </th>
<td class="noborder"> </td>
<td class="option-description noborder">
<br><input class="button mobile-button" id="fafsm_saveit" type="button" value="Save Settings*"><br/>
<span style="font-size:10px;">FA Journal Breakdown by <a href="https://www.furaffinity.net/user/feralfrenzy" style="border-bottom:1px dotted white;">JaysonHusky</a></span><br/><br/>
<b>*Updates take effect from the next page load</b>
</td>
</tr>
</tbody>
</table>`);
}
}
FASFM_Load();
// Setup the hook
// Adapt JQuery :contains to function without case restriction
jQuery.expr[':'].icontains=function(a,i,m){return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;};
// JS equiv of PHPs ucwords() for better presentation (Credit: rickycheers @ Github)
String.prototype.ucwords=function(){
st2uc=this.toLowerCase();
return st2uc.replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g,function(s){
return s.toUpperCase();
});
};
function subcount(inp){if(isNaN(inp)===true){return "0";}else{return inp;}}
// Search for custom keywords
if(SubFilter_Keywords===undefined){}
else{
SubFilter_Keywords.forEach(function(keyword){
if(target_mode=="on"){
// Message Center ( Submissions Only )
$("#messagecenter-submissions section figure figcaption").find("label a:icontains('"+keyword+"')").parent().parent().parent().parent().css('display','none');
// User Profile Gallery
$("#gallery-gallery figure figcaption").find("a:icontains('"+keyword+"')").parent().parent().parent().css('display','none');
// User Profile Favourites
$("#gallery-favorites figure figcaption").find("a:icontains('"+keyword+"')").parent().parent().parent().css('display','none');
// Browse Page
$("#gallery-browse figure figcaption").find("a:icontains('"+keyword+"')").parent().parent().parent().css('display','none');
// Deactivate on Search page as the user can filter by themselves there.
}
else {
// Message Center ( Submissions Only )
$("#messagecenter-submissions section figure figcaption").find("label p:first a:icontains('"+keyword+"')").parent().parent().parent().parent().css('display','none');
// User Profile Gallery
$("#gallery-gallery figure figcaption").find("p:first a:icontains('"+keyword+"')").parent().parent().parent().css('display','none');
// User Profile Favourites
$("#gallery-favorites figure figcaption").find("p:first a:icontains('"+keyword+"')").parent().parent().parent().css('display','none');
// Browse Page
$("#gallery-browse figure figcaption").find("p:first a:icontains('"+keyword+"')").parent().parent().parent().css('display','none');
// Deactivate on Search page as the user can filter by themselves there.
}
});
}
})();