GCHiddenText Redux

Display "hidden text" or "HTML Comments".

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==UserScript==
// @name        	GCHiddenText Redux
// @namespace   	http://userscripts.org/users/201960
// @description 	Display "hidden text" or "HTML Comments".
// @include	    	*.geocaching.com/geocache/*
// @version     	3.2.0
// ==/UserScript==


/*----------------------History---------------------------------------------------
/*----------------------V3.2.0---------------------------------------------------
v3.2.0 22/11/20
-Added the ability to detect elements with display:none.
-Made searches more efficient.
-Made searches check all types of elements, not just divs.

/*----------------------V3.1.0---------------------------------------------------
v3.1.0 27/7/19
-Updated to work on the latest cache pages.
-Created a GitHub repo to manage updates through GreasyFork.

/*----------------------V3---------------------------------------------------
v3.0.0 30/9/14
-Started a new life at Greasyfork.
-Removed the USO updater, as it was dead.
-The GeoKrety widget header change didn't make it live in V2.

/*----------------------V2---------------------------------------------------
v2.0.2 5/10/13
-Prevented the GeoKrety widget header being detected as hidden text.
v2.0.1 8/9/13
-Added updater.
-Changed back to Chuck's namespace.
v2.0.0 8/9/13
-The GC site had been changed so the include paths no longer worked.

/*----------------------V1---------------------------------------------------
v1.3 3/1/11
# fix: Sometimes the Show Hidden Text button would show when no hidden text was present, updated method of checking
# fix: Added to recongize new GC cache page address
v1.2 11/18/10
# new: Finds words, hex and rgb values in white text
# new: Changed to only highlight words and not the whole page
# fix: Updated code to be more sufficient/effective
v1.1.0 9/13/10
# new: Updated to catch white text if use style/font formatting
# fix: Updated error if no Short/Long Description is on the page
v1.0.0 9/10/10 *If you have previous version please uninstall before loading new version
# new:Added auto updater
# new: Updated to be able to show/hide hidden text
# new: updated section of code so user can easily change text/background colors to their preference
v0.0.1 9/7/10 
# new: Initial Release (Still testing a couple of options)
*/

//----------------------SET USER VALUES-------------------------------------------
// 			Use: color words: white, yellow, etc....
//				 HEX: #FF45FF ... etc...
//				or
//				 RGB:	rgb(255, 255, 255) ... etc....
//
var fgcolor = 'white'; //Forground color for hidden text
var bgcolor = 'red'; //Background color for hidden text
var cm_fgcolor = 'white'; //Foreground color for HTML Comments
var cm_bgcolor = 'green'; //Background color for HTML Comments
//
//----------------------END USER VALUES---------------------------------------

//Initialize Constants
var found = false;
var htmlshort = 0,
	htmllong = 0;

//Check for short or long descriptions
try {
	htmlshort = document.getElementById('ctl00_ContentBody_ShortDescription').innerHTML;
} catch (err) {}
try {
	htmllong = document.getElementById('ctl00_ContentBody_LongDescription').innerHTML;
} catch (err) {}
var CS,
	i;

/********Find Hidden Text*********/
//Find Styles Colors
var allStyles = document.evaluate('//*[@style]', document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (i = 0; i < allStyles.snapshotLength; i++) {
	CS = allStyles.snapshotItem(i).style.color.toLowerCase();
	// Prevent the GeoKrety widget header being detected as hidden text.
	if ((CS == 'white' && allStyles.snapshotItem(i).innerHTML != "Krety") || CS == '#ffffff' || CS == 'rgb(255, 255, 255)') {
		found = true;
		//set style color values
		allStyles.snapshotItem(i).className = 'txt_hidden';
		allStyles.snapshotItem(i).style.color = fgcolor;
		allStyles.snapshotItem(i).style.backgroundColor = bgcolor;
		allStyles.snapshotItem(i).style.display = 'none';
	}
}
//Find Font Colors
allStyles = document.evaluate('//*[@color]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (i = 0; i < allStyles.snapshotLength; i++) {
	CS = allStyles.snapshotItem(i).getAttribute('color').toLowerCase();
	if (CS == 'white' || CS == '#ffffff') {
		found = true;
		//remove font color value, to be replaced with style color
		allStyles.snapshotItem(i).removeAttribute('color');
		//set style color values
		allStyles.snapshotItem(i).className = 'txt_hidden';
		allStyles.snapshotItem(i).style.color = fgcolor;
		allStyles.snapshotItem(i).style.backgroundColor = bgcolor;
		allStyles.snapshotItem(i).style.display = 'none';
	}
}

/*********** Find Comments on Cache Description Page **********/
if (htmlshort) {
	var shortdesc = document.evaluate("//span[@id='ctl00_ContentBody_ShortDescription']//comment()", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	var cs_length = shortdesc.snapshotLength;
	// 	Look for elements with style set to "visibility: hidden".
	var shorthiddendesc = document.evaluate("//span[@id='ctl00_ContentBody_ShortDescription']//*[@style='visibility: hidden']", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	var hs_length = shorthiddendesc.snapshotLength;
	// 	Look for elements with style set to "display: none".
	var shortnonedesc = document.evaluate(".//span[@id='ctl00_ContentBody_ShortDescription']//*[@style='display: none;']", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	var ns_length = shortnonedesc.snapshotLength;
}
if (htmllong) {
	var longdesc = document.evaluate("//span[@id='ctl00_ContentBody_LongDescription']//comment()", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	var cl_length = longdesc.snapshotLength;
	// 	Look for elements with style set to "visibility: hidden".
	var longhiddendesc = document.evaluate("//span[@id='ctl00_ContentBody_LongDescription']//*[@style='visibility: hidden']", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	var hl_length = longhiddendesc.snapshotLength;
	// 	Look for elements with style set to "display: none".
	var longnonedesc = document.evaluate(".//span[@id='ctl00_ContentBody_LongDescription']//*[@style='display: none;']", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	var nl_length = longnonedesc.snapshotLength;
}

//Create Elements for Comments
if (cs_length > 0 || cl_length > 0 || hs_length > 0 || ns_length > 0 || hl_length > 0 || nl_length > 0) {
	found = true;
	for (i = 0; i < cs_length; i++) {
		var scs = document.createElement('span');
		scs.className = 'txt_hidden';
		scs.style.color = cm_fgcolor;
		scs.style.backgroundColor = cm_bgcolor;
		scs.style.display = 'none';
		scs.textContent = shortdesc.snapshotItem(i).data;
		shortdesc.snapshotItem(i).parentNode.insertBefore(scs, shortdesc.snapshotItem(i).nextSibling);
	}
	for (i = 0; i < cl_length; i++) {
		var lcs = document.createElement('span');
		lcs.className = 'txt_hidden';
		lcs.style.color = cm_fgcolor;
		lcs.style.backgroundColor = cm_bgcolor;
		lcs.style.display = 'none';
		lcs.textContent = longdesc.snapshotItem(i).data;
		longdesc.snapshotItem(i).parentNode.insertBefore(lcs, longdesc.snapshotItem(i).nextSibling);
	}
	// Hidden divs.
	for (i = 0; i < hs_length; i++) {
		var shcs = document.createElement('span');
		shcs.className = 'txt_hidden';
		shcs.style.color = fgcolor;
		shcs.style.backgroundColor = bgcolor;
		shcs.style.display = 'none';
		shcs.textContent = shorthiddendesc.snapshotItem(i).innerHTML;
		shorthiddendesc.snapshotItem(i).parentNode.insertBefore(shcs, shorthiddendesc.snapshotItem(i).nextSibling);
	}
	for (i = 0; i < hl_length; i++) {
		var lhcs = document.createElement('span');
		lhcs.className = 'txt_hidden';
		lhcs.style.color = fgcolor;
		lhcs.style.backgroundColor = bgcolor;
		lhcs.style.display = 'none';
		lhcs.textContent = longhiddendesc.snapshotItem(i).innerHTML;
		longhiddendesc.snapshotItem(i).parentNode.insertBefore(lhcs, longhiddendesc.snapshotItem(i).nextSibling);
	}
	for (i = 0; i < ns_length; i++) {
		var sncs = document.createElement('span');
		sncs.className = 'txt_hidden';
		sncs.style.color = fgcolor;
		sncs.style.backgroundColor = bgcolor;
		sncs.style.display = 'none';
		sncs.textContent = shortnonedesc.snapshotItem(i).innerHTML;
		shortnonedesc.snapshotItem(i).parentNode.insertBefore(sncs, shortnonedesc.snapshotItem(i).nextSibling);
	}
	for (i = 0; i < nl_length; i++) {
		var lncs = document.createElement('span');
		lncs.className = 'txt_hidden';
		lncs.style.color = fgcolor;
		lncs.style.backgroundColor = bgcolor;
		lncs.style.display = 'none';
		lncs.textContent = longnonedesc.snapshotItem(i).innerHTML;
		longnonedesc.snapshotItem(i).parentNode.insertBefore(lncs, longnonedesc.snapshotItem(i).nextSibling);
	}
}

//Add Found Hidden Text Button
if (found) {
	var txt_count = document.getElementsByClassName('txt_hidden');

	function showtext() {
		var i;

		if (txt_count[0].style.display == '') {
			showbutton.value = "Show Hidden Text";
			for (i = 0; i < txt_count.length; i++) {
				txt_count[i].style.display = 'none';
			}
		} else {
			showbutton.value = "Hide Hidden Text";
			for (i = 0; i < txt_count.length; i++) {
				txt_count[i].style.display = '';
			}
		}
	}
	var showbutton = document.createElement('input');
	showbutton.id = "ctl00_ContentBody_btnShowHiddenText";
	showbutton.type = "submit";
	showbutton.value = "Show Hidden Text";
	showbutton.style.color = "red";
	showbutton.style.float = "right";
	showbutton.setAttribute('onclick', 'return false;');
	showbutton.addEventListener('click', showtext, false);
	//Insert Button
	var dd = document.getElementById('Download').getElementsByTagName('dd')[0];
	dd.insertBefore(showbutton, dd.firstChild);
}