Greasy Fork

Greasy Fork is available in English.

GCHiddenText Redux

Display "hidden text" or "HTML Comments".

当前为 2014-09-30 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

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


/*----------------------History---------------------------------------------------
/*----------------------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 html = htmlshort + htmllong;

/********Find Hidden Text*********/
//Find Styles Colors
allStyles = document.evaluate('//*[@style]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for(var i=0;i<allStyles.snapshotLength; i++){
	var 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(var i=0;i<allStyles.snapshotLength; i++){
	var CS = allStyles.snapshotItem(i).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, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	var cs_length = shortdesc.snapshotLength;
}
if(htmllong){
	var longdesc = document.evaluate("//span[@id='ctl00_ContentBody_LongDescription']//comment()", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	var cl_length = longdesc.snapshotLength;
}
// 	Look for divs with style set to "visibility: hidden".
var hiddendesc = document.evaluate("//div[@style='visibility: hidden']", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var hd_length = hiddendesc.snapshotLength;

//Create Elements for Comments
if(cs_length > 0 || cl_length > 0 || hd_length > 0){
	found = true;
	for (var 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 (var 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 (var i=0; i < hd_length; i++) {
		var hcs = document.createElement('span');
		hcs.className = 'txt_hidden';
		hcs.style.color = fgcolor;
		hcs.style.backgroundColor = bgcolor;
		hcs.style.display = 'none';
		hcs.textContent = hiddendesc.snapshotItem(i).innerHTML;
		hiddendesc.snapshotItem(i).parentNode.insertBefore(hcs, hiddendesc.snapshotItem(i).nextSibling);
	}
}

//Add Found Hidden Text Button
if(found){
  var txt_count = document.getElementsByClassName('txt_hidden');
  function showtext(){
  	if(txt_count[0].style.display==''){
  		showbutton.value = "Show Hidden Text";
  		for(var i=0;i<txt_count.length;i++){
  			txt_count[i].style.display='none';
  		}
  	}else{
  		showbutton.value = "Hide Hidden Text";
  		for(var 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";
  // Bug fix: "Show" wraps to the next line.
  showbutton.style.paddingLeft = "5px";
  showbutton.style.paddingRight = "5px";
	showbutton.setAttribute('onclick', 'return false;');
	showbutton.addEventListener('click', showtext, false);
	//Insert Button
	var phonebutton = document.getElementById('ctl00_ContentBody_btnSendToPhone');
	phonebutton.parentNode.insertBefore(showbutton, phonebutton.nextSibling);
	//Insert Line inbetween buttons
	var textline = document.createElement('text');
	textline.textContent = " | ";
	phonebutton.parentNode.insertBefore(textline, phonebutton.nextSibling);
}