AO3: [Wrangling] VBRPF Fandom Assignment Shortcuts

Adds some shortcuts to assign tags to VBRPF fandoms more quickly.

当前为 2022-06-02 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name AO3: [Wrangling] VBRPF Fandom Assignment Shortcuts
  3. // @description Adds some shortcuts to assign tags to VBRPF fandoms more quickly.
  4. // @version 1.1.1
  5.  
  6. // @author kaerstyne (edits owlwinter)
  7. // @namespace https://github.com/kaerstyne/ao3-wrangling-scripts
  8. // @license GPL-3.0 <https://www.gnu.org/licenses/gpl.html>
  9.  
  10. // @match *://*.archiveofourown.org/tags/*/edit
  11. // @match *://*.archiveofourown.org/tags/*/wrangle*
  12. // @require https://code.jquery.com/jquery-3.6.0.min.js
  13. // @grant none
  14. // ==/UserScript==
  15.  
  16. (function($) {
  17.  
  18. // which page is this?
  19. var page_url = window.location.pathname;
  20.  
  21. // unwrangled bin
  22. if (page_url.includes("/wrangle")) {
  23.  
  24. // add shortcut checkboxes
  25. var current_fandom = $("h2.heading a").text();
  26. var fandoms_to_add = ["Video Blogging RPF", "Dream SMP", "Origins SMP", "30 Day SMP | Free Trial SMP", "Minecraft (Video Game)", "No Fandom"];
  27. if (!fandoms_to_add.includes(current_fandom)) {
  28. fandoms_to_add.unshift(current_fandom);
  29. }
  30. var fandom_shortcuts = $('<ul class="filters" style="padding-bottom: .643em;"></ul>');
  31. for (let fandom of fandoms_to_add) {
  32. var escaped_fandom = fandom.replace(/"/g, "&quot;");
  33. fandom_shortcuts.append('<li style="display: inline"><label>' +
  34. '<input type="checkbox" name="fandom_shortcut" value="' + escaped_fandom + '">' +
  35. '<span class="indicator" aria-hidden="true"></span>' +
  36. '<span>' + fandom + '</span>' +
  37. '</label></li>');
  38. }
  39. $("dd[title='wrangle to fandom(s)'").prepend(fandom_shortcuts);
  40.  
  41. // you should only have one fandom checked at once
  42. $("input[name='fandom_shortcut']").change(function() {
  43. $("input[name='fandom_shortcut']").not(this).prop("checked", false);
  44. });
  45.  
  46. // add fandom on form submit
  47. $("form#wrangulator").submit(function() {
  48. var selected_fandom = $("input[name='fandom_shortcut']:checked").val();
  49. if (selected_fandom) {
  50. var fandom_input = $("input#fandom_string");
  51. var existing_fandoms = fandom_input.val();
  52. var separator = existing_fandoms == "" ? "" : ",";
  53. fandom_input.val(existing_fandoms + separator + selected_fandom);
  54. }
  55. });
  56.  
  57. // tag edit page
  58. } else if (page_url.includes("/edit")) {
  59.  
  60. function create_fandom_checkbox(name, url) {
  61. const escaped_name = name.replace(/"/g, "&quot;");
  62. return $("<li></li>").html(`<label>
  63. <input type="checkbox" name="fandom_shortcuts" value="${escaped_name}">
  64. <span class="indicator" aria-hidden="true"></span>
  65. <span><a class="tag" href="${url}">${name}</a></span>
  66. </label>`);
  67. }
  68.  
  69. // add shortcut checkboxes
  70. const fandom_list = $("dt:contains('Suggested Fandoms')").next().find("ul");
  71. fandom_list.addClass("filters");
  72. var suggested_fandoms = $("dt:contains('Suggested Fandoms')").next().find("li").map(function() {
  73. return [{name: $(this).text(), url: $(this).find("a")[0].href }];
  74. }).get();
  75.  
  76. suggested_fandoms.push({name: "No Fandom", url: "/tags/No%20Fandom/edit"});
  77. suggested_fandoms.push({name: "Video Blogging RPF", url: "/tags/Video%20Blogging%20RPF/edit"});
  78. suggested_fandoms.push({name: "Dream SMP", url: "/tags/Dream%20SMP/edit"});
  79. suggested_fandoms.push({name: "Minecraft (Video Game)", url: "/tags/Minecraft%20(Video%20Game)/edit"});
  80. suggested_fandoms.push({name: "Origins SMP", url: "/tags/Origins%20SMP/edit"});
  81. suggested_fandoms.push({name: "30 Day SMP | Free Trial SMP", url: "/tags/30%20Day%20SMP%20%7C%20Free%20Trial%20SMP/edit"});
  82.  
  83. var deduplicated_fandoms = [];
  84. suggested_fandoms.forEach(oi => {
  85. if (deduplicated_fandoms.filter(item => item.name == oi.name).length == 0) {
  86. deduplicated_fandoms.push(oi);
  87. }
  88. })
  89. fandom_list.html(deduplicated_fandoms.map(({name, url}) => create_fandom_checkbox(name, url)));
  90.  
  91. // add fandoms on form submit
  92. $("form#edit_tag").submit(function() {
  93. var selected_fandoms = $("input[name='fandom_shortcuts']:checked").map(function() {
  94. return $(this).val();
  95. }).toArray().join();
  96. var fandom_input = $("input#tag_fandom_string");
  97. var existing_fandoms = fandom_input.val();
  98. var separator = existing_fandoms == "" ? "" : ","
  99. fandom_input.val(existing_fandoms + separator + selected_fandoms);
  100. });
  101.  
  102. }
  103.  
  104. })(jQuery);