AO3: [Wrangling] Wrangling Page Info Box

Adds a customisable info box to the wrangling edit page

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         AO3: [Wrangling] Wrangling Page Info Box
// @description  Adds a customisable info box to the wrangling edit page
// @author       Ebonwing
// @namespace    http://tampermonkey.net/
// @license      GPL-3.0 <https://www.gnu.org/licenses/gpl.html>
     
// @match        *://*.archiveofourown.org/tags/*/edit
// @grant        none
// @version 0.0.1.20211105173749
// ==/UserScript==


var settings = {};

/*********************
*
*
* Customise the tags you want infoboxes on and the infobox text here.
*
*
**********************/

//Replace the settings with tags and infotexts of your choosing. Copy and paste each new setting on a new line if you want more. 
//Inserting <br> makes a line break.
//The tags in the brackets are not case sensitive.

//If you want an infobox on all tags containing a specific keyword, do this.
settings["example"] = "This setting inserts this text into all urls that include the word example.";

//If you want to use a key term that has a space in it, replace the space(s) with %20
settings["Dean%20Winchester"] = "This appears on any tag that contains 'Dean Winchester'.";

//For key terms with slashes, use *s*
settings["Dean*s*Sam"] = "This appears on any tag that contains 'Dean/Sam'.";

//If you want a box only on specific tags, paste the entire link into the brackets. 
settings["https://archiveofourown.org/tags/ExampleTag/edit"] = "This tag appears only on the tag with that specific link.";


//Example use cases:
settings["edging"] = "Edging does not syn to edgeplay but to orgasm delay/denial.<br>";
settings["aro"] = "Aroace tags aren't synned to ace tags.<br>";



var default_text = "This is a default text that appears on all noncanonical tags.";
//If you don't want this to be shown on tags that have specific infoboxes, change the true value underneath this line to false.
var always_show_default_text = true;


/*********************
*
*
* Customise the style of your infobox here.
*
*
**********************/

//default style: cyan background, black border. Change the hex code after background: to customise it.
var style = "background:#d1fcf6; border:1px solid black; padding:10px;";

//style that mimics AO3's default design, so it will appear as a plain sentence.
//var style = "background:#dddddd;";

//Reversi compatible style:
//var style = "background:#000;";


/*********************
*
*
* End of the customisation section
*
*
**********************/


var text = "";
for (const [key, value] of Object.entries(settings)) {
  var url = window.location.href.toLowerCase();
  var tag = url.split("tags/")[1].split("/")[0];
  if(url == key){
   text = text + value; 
  } else if(tag.includes(key)){
    text = text + value; 
  }
}


if(!document.getElementById("tag_canonical").checked && always_show_default_text){
  text = text + default_text;
}

if(text != ""){
  	const div = document.createElement('div');
		div.id = "cheat_sheet";
  	if (typeof style === 'undefined') {
      var style = "background:#d1fcf6; border:1px solid black; padding:10px;";
    }
		div.style = style;
	
		div.innerHTML = text;

		var main = document.getElementById("main");
		var content = main.getElementsByTagName('dl');
  	//content[0].parentNode.insertBefore(div, content[0]);

  	//checks if tag is in a fandom, since that changes the node placement
 	  if(content[0].childNodes.length == 21){
 	   content[0].childNodes[15].childNodes[3].parentNode.replaceChild(div, content[0].childNodes[15].childNodes[3]);
  	} else if(content[0].childNodes.length == 25){
   	 content[0].childNodes[19].childNodes[3].parentNode.replaceChild(div, content[0].childNodes[19].childNodes[3]);
  	}

}