Fanfiction.net - Customize Default Result Filter

Override Fanfiction.net's default choices for result filters

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name        Fanfiction.net - Customize Default Result Filter
// @namespace   ssokolow.com
// @description Override Fanfiction.net's default choices for result filters
// @version     5
// @license     MIT
//
// @require      https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js
//
// @grant       GM_getValue
// @grant       GM.getValue
// @grant       GM_setValue
// @grant       GM.setValue
// @grant       GM_registerMenuCommand
// @grant       GM.registerMenuCommand
//
// @noframes
// @match       *://www.fanfiction.net/*
// ==/UserScript==

(async function() {
	// Skip everything if this isn't a relevant page since we can't URL-match them.
	if (document.getElementById('filters')) {
  	// Let short-circuit eval only call GM_getValue once on empty query string
  	let preferred_filter;

  	if (window.location.search === "" &&
      	(preferred_filter = await GM.getValue('preferred_filter'))) {
    	// Make it more clear when the page hasn't yet reloaded
    	document.querySelector('body').style.opacity = 0.2;

    	history.replaceState({}, '', preferred_filter);
    	location.reload();
  	} else {
	    // Work around bad interaction between Firefox and replaceState+reload
	    let filter_form = document.querySelector('#filters #myform')
	    if (filter_form) { filter_form.reset(); }

	    GM.registerMenuCommand("Save Current Filters as Default", function() {
      	GM.setValue('preferred_filter', window.location.search);
    	}, 'S');
  	}
	}
})();