FFN Filters Auto-Select

Auto-selects fanfiction.net filters.

  1. // ==UserScript==
  2. // @name FFN Filters Auto-Select
  3. // @description Auto-selects fanfiction.net filters.
  4. // @include *://*.fanfiction.net/*
  5. // @include *://*.fictionpress.com/*
  6. // @version 1.4
  7. // @copyright 2014+, Azurewren
  8. // @history 1.4 14th Aug 2015 - Tweaks. Fixed unsafeWindows error.
  9. // @history 1.3 Added comments/documentation.
  10. // @history 1.2 Bug fixing.
  11. // @history 1.1 Bug fixing.
  12. // @history 1.0 First Version.
  13. // @namespace https://greasyfork.org/users/3972
  14. // ==/UserScript==
  15.  
  16. // HOW TO (Until I can figure out how to create a options menu)
  17. // For each filter option on ffn create a 'setting preference' entry.
  18. // All values should be exact.
  19. // Setting Preference name should not be the same name as on ffn.
  20. // To remove a filter preference, simply remove its USER SETTING PREFERENCE.
  21.  
  22. // USER SETTING PREFERENCES
  23. // Format: 'setting filtername: "exact text as ffn filtername option",'
  24. settings = {
  25. language: 'English',
  26. rating: 'Rating: All',
  27. wordlength: '> 20K words'
  28. };
  29.  
  30. var $ = unsafeWindow.$;
  31. var filter = $('form[name="myform"]');
  32.  
  33. // FFN SETTINGS
  34. // Format: 'exact ffn filtername: {prefer: settings.usersettingname, default: '0'},'
  35. var filteroptions = {
  36. languageid: {prefer: settings.language, default: '0'},
  37. censorid: {prefer: settings.rating, default: document.URL.search('fanfiction.net/community/') === - 1 ? '103' : '3'},
  38. length: {prefer: settings.wordlength, default: '0'}
  39. };
  40.  
  41. function select(values, name) {
  42. var filteroption = filter.find('select[name="' + name + '"]');
  43. if (filteroption.val() === values.default) {
  44. var option = filteroption.find('option:contains("' + values.prefer + '")');
  45. return option.length && filteroption.val(option.val());
  46. }
  47. };
  48.  
  49. if ($.map(filteroptions, select).some(function (a) {
  50. return a;
  51. })) {
  52. filter.find('span.btn-primary, input[type="Submit"]').click();
  53. }