Source for "betterLink"

By nttkyk
Has 7 other scripts.


// ==UserScript==
// @name          betterLink
// @namespace     http://www.petitnoir.net/
// @description   
// @include       *
// ==/UserScript==

///////////////////////////////////////////////////////
//無視するclass
//リンク自身のclass
var ignore_target_class = ["keyword"];
//そのリンクを持つdiv要素のclass
var ignore_parentdiv_class = [];
//リンクアイコンはCool Web Windowさんの「外部リンク用アイコンを作ってみました」からいただきました。
//http://www.coolwebwindow.com/weblife_column/coolweb/000157.php
//リンクアイコンの色 link_color_randomがtrueの場合は無視されます
var link_color = 'pink'; //黒 -> black 青 ->blue オレンジ->orange 緑->green ピンク->pink
//リンクアイコンの色をランダムにする
var link_color_random = true; //ランダムにするならtrue ランダムにしないならfalseを入力します
///////////////////////////////////////////////////////

(function (){

	var ignore = new Array();
	var icon =["black","blue","orange","green","pink"];
	
	var links = document.evaluate('//a[@href]',document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
	for (i=0; i < links.snapshotLength; i++) {
			links.snapshotItem(i).title += ' ' +links.snapshotItem(i).href;
			if (links.snapshotItem(i).firstChild.nodeName == 'IMG'){
				links.snapshotItem(i).firstChild.title +=' ' +links.snapshotItem(i).href;
			}
			if (links.snapshotItem(i).textContent != ''){
				var parent = links.snapshotItem(i).parentNode;
				if (ignore_parentdiv_class.length > 0){ //class名表示機能を使うときはこの行をコメントアウトしてください
					for (;;){
						if ( parent.nodeName == "DIV"){break;}
						if (parent.parentNode == null){break;}
						parent = parent.parentNode;
					}
					for (m=0; m < ignore_parentdiv_class.length ; m++){
						if (parent.className == ignore_parentdiv_class[m]){
							ignore[i] = true;
							break;
						}
					}
				} //class名表示機能を使うときはこの行をコメントアウトしてください
				if (ignore_target_class.length > 0){
					for (t=0; t < ignore_target_class.length ; t++){
						if (links.snapshotItem(i).className == ignore_target_class[t]){
						ignore[i] = true;
						break;
						}
					}
				}
				if(links.snapshotItem(i).href.substr(0,10) == 'javascript' || ignore[i] == true){
					continue;
				}

				if ( links.snapshotItem(i).target == "_blank"){
					links.snapshotItem(i).target = "_self";
				}
				var external_link =document.createElement('a');
				external_link.href = links.snapshotItem(i).href;
				external_link.title = links.snapshotItem(i).title;
				external_link.target = "_blank";
				external_link.textContent= '';
				external_link.style.display = 'inline';
				//links.snapshotItem(i).style.display = 'inline' ;
				if ( links.snapshotItem(i) == links.snapshotItem(i).parentNode.lastChild){
					links.snapshotItem(i).parentNode.appendChild(external_link);
					} else{
				links.snapshotItem(i).parentNode.insertBefore(external_link, links.snapshotItem(i).nextSibling);
				}
				var external_link_image = document.createElement('img');
				if (link_color_random){
					var ransu = Math.floor(Math.random() * 5);
					link_color = icon[ransu];
				}
				external_link_image.src = 'http://www.petitnoir.net/external_link_' + link_color + '.gif';
				external_link_image.style.border = 'none';
				external_link_image.style.height = '12px';
				external_link_image.style.width = '12px';
				external_link_image.style.paddingLeft = '3px';
				external_link_image.style.cssFloat = 'none';
				external_link.appendChild(external_link_image);
				
			//各リンクの後ろにリンク自身のclassをTclass,そのリンクを持つdiv要素のclassをPclassとして表示させます。
			//下の行をコメントアウトを外せば各classがすぐにわかるようになるので無視設定を利用したいときに参考にしてください。
			//なお下の行のコメントアウトを外すときは35行目と47行目をコメントアウトしてください。
			//でないとそのリンクを持つdiv要素ではなくただのparentNodeのclassが表示されます。
			//links.snapshotItem(i).textContent += "Tclass:" +links.snapshotItem(i).className + "; " + "Pclass:" + parent.className+ "; ";
			}
	}
})();