Greasy Fork

Shined up real nice.

Fanfiction.net - Customize Default Result Filter

Override Fanfiction.net's default choices for result filters

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// ==UserScript==
// @name        Fanfiction.net - Customize Default Result Filter
// @namespace   ssokolow.com
// @description Override Fanfiction.net's default choices for result filters
// @version     4
// @license     MIT
//
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_registerMenuCommand
//
// @noframes
// @match       *://www.fanfiction.net/*
// ==/UserScript==

// TODO: Try to find a way to safely URL-match so I can minimize the number
//       of cases where I need to redirect and use @run-at document-start
//       for the rest.
var has_filters = (document.getElementById('filters') !== null);

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

  if (window.location.search === "" &&
      (preferred_filter = 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
    var 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');
  }
}