Echo Bazaar - Display Storylet Prerequisites

For Fallen London (previously Echo Bazaar) - Displays storylet prerequisites in plain text so that you can see the information at a glance without having to mouse over multiple icons to uncover it bit by bit.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Echo Bazaar - Display Storylet Prerequisites
// @namespace    http://arundor/echo.bazaar.disply.storylet.prerequisites
// @description  For Fallen London (previously Echo Bazaar) - Displays storylet prerequisites in plain text so that you can see the information at a glance without having to mouse over multiple icons to uncover it bit by bit.
// @version      1.8
// @include      http://echobazaar.failbettergames.com/Gap/Load*
// @include      http://*fallenlondon.com/Gap/Load*
// @include      http://*fallenlondon.storynexus.com/Gap/Load*
// ==/UserScript==

/*
I am an amateur script writer.  What you see here is not necessarily the best way to achieve what has been done.

Changelog:

v1.8
 December 1, 2016
  - updated to work without www subdomain.

v.1.7
 July 29, 2015
  - updated to work after layout changes in the game

v1.6
 January 6, 2014
  - updated to work after layout changes in the game

v1.5
 August 24, 2012
  - updated for the new fallenlondon.storynexus.com domain.

v1.4:
 May 27, 2012
  - requirements you have not met are now displayed in grey
  - updated script @description to reflect the game's new name (@name cannot be updated in the same way, as doing so would break the update process for users of the old version)
  - the @version meta data tag is now used

v1.3:
 March 26, 2012
 - now works on the new fallenlondon.com domain

v1.2:
 Jan 26, 2012
 - support for Google Chrome
 - removes item acquisition tips from the list of prerequisites
 - better method of preventing the script from running before Ajax has fully loaded the main content
 - better method of constructing the the new div that holds the plain text prereqs, this method prevents unnecessary nested divs.
 - prereq text now prints inside the storylet_rhs block to prevent clipping issues with the prereq icons

v1.1:
 Jan 24, 2012
 -initial release
*/


//The main content of the page is loaded by Ajax so an action listener is used to detect it when it is inserted.
document.addEventListener('DOMNodeInserted', showPrereqs, false);

//Due to the way the action listener is set up, this function may fire multiple times per storylet.
//I know of no better way to handle this, but since it fires multiple times each iteration will need to check if a previous iteration has already done of the work of adding the plain text requirements list.
function showPrereqs() {
	var qreqs = document.getElementsByClassName('qreqs');
	if (qreqs) {
		for (var a=0; a<qreqs.length; a++) {
			var parent = qreqs[a].parentNode.parentNode.getElementsByClassName('storylet_rhs')[0];
			if (parent) {
				//Each iteration of the script checks for the 'plain_text_reqs' class to determine if a previous iteration of the function has already done the work.
				if (parent.getElementsByClassName('plain_text_reqs').length == 0) {
					var tooltips = qreqs[a].getElementsByTagName('a');

					//Constructing a new div element to hold the list of plain text requirements.
					//The class is set to 'plain_text_reqs' as a marker that future iterations of the function can look for to determine if the work is already done.
					var div = document.createElement('div');
					div.setAttribute('class', 'plain_text_reqs');
					div.style.fontSize = '65%';
					div.style.width = '100%';
					div.style.clear = 'both';
					div.style.paddingBottom = '10px';
					
					if (tooltips) {
						for (var b=0; b<tooltips.length; b++) {
							var text;
							if (tooltips[b].getElementsByClassName('tt')[0].getElementsByTagName('p')[0]) {
								text = tooltips[b].getElementsByClassName('tt')[0].getElementsByTagName('p')[0].innerHTML;
							}
							
							var wordy_list;
							var addon_text = '';
							if (tooltips[b].getElementsByClassName('wordy-list')[0]) {
								wordy_list = tooltips[b].getElementsByClassName('wordy-list')[0].getElementsByTagName('li');
								for (var c=0; c<wordy_list.length; c++) {
									if (wordy_list[c].innerHTML.substring(0,2) == '- ') {
										addon_text += '<br> &nbsp; &nbsp; &nbsp; &nbsp; -' + wordy_list[c].innerHTML.substring(2, wordy_list[c].innerHTML.length);
									}
									else {
										addon_text += '<br> &nbsp; &nbsp; &nbsp; &nbsp; -' + wordy_list[c].innerHTML;
									}
									
									if (wordy_list[c].getAttribute('class') != 'current') {
										addon_text = '<span style="color: grey">' + addon_text + '</span>';
									}
								}
							}
							
							if (addon_text.length > 0) {
								text += addon_text;
							}
							
							//If the requirement has not yet been met, display the text in grey.
							if (tooltips[b].getAttribute('class') == 'tooltip qreq unlock') {
								text = '<span style="color: grey">' + text + '</span>';
							}
							
							div.innerHTML += '<br>- ' + text;
						}
					}
					
					//Even if the new div is empty it is added to the page anyway.
					//This is done so that future iterations of the function can find it and know that the work is already done.
					parent.appendChild(div);
				}
			}
		}
	}
}