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.

目前為 2015-07-30 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 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.7
// @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:

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);
				}
			}
		}
	}
}