Greasy Fork 还支持 简体中文。

FA SubFilter

Enable/Disable custom submission types with keywords

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==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">&nbsp;
								<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">&nbsp;</th>
										<td class="noborder">&nbsp;</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.
            }
        });
    }
})();