ハテナでAmazonのテキストリンクを貼り付ける(その2くらい)

 適当に日本語をエンコードするかも知れない感じに前のグリモンを変更。エンコード方法はJavascriptで出来るのかもしれないけど関数とかが良く分からなかったので適当。なんか変かもしれないけど、まあいいことに。

// ==UserScript==
// @name           Amazon tag
// @namespace      http://d.hatena.ne.jp/himadatanode/
// @description    Amazon Tag maker
// @include        http://d.hatena.ne.jp/*
// ==/UserScript==

//textareaの位置を取得
var inputArea = document.evaluate(
	'//textarea',
	document.body,
	null,
	7,
	null
	);

//inputボタン
var amazonButton = document.createElement('input');
amazonButton.type  = "button";
amazonButton.value = 'Amazon変換';

//EventListener
amazonButton.addEventListener("click", function (){
	var str = inputArea.snapshotItem(0).value;
	str = str.replace(/\$([^$\n]*)\$/g , function($0,$1){
		//この辺でエンコード
		var encode = "";
		for (var i =0; i < $1.length; i++){
			var c=$1.charCodeAt(i);
			encode = encode + (c<16?"%0"+c.toString(16):c<128?"%"+c.toString(16):c<2048?"%"+(c>>6|192).toString(16)+"%"+(c&63|128).toString(16):"%"+(c>>12|224).toString(16)+"%"+(c>>6&63|128).toString(16)+"%"+(c&63|128).toString(16)).toUpperCase();
		}
		return "<a href='http://www.amazon.co.jp/gp/search?ie=UTF8&keywords=" + encode + "&tag=hdn-22&index=blended&linkCode=ur2&camp=247&creative=1211'>" + $1 + "</a><img src='http://www.assoc-amazon.jp/e/ir?t=hdn-22&amp;l=ur2&amp;o=9' width='1' height='1' border='0' alt='$1' style='border:none !important; margin:0px !important;' />";
	  });
	inputArea.snapshotItem(0).value = str;
} , false);

//ボタンの設置
inputArea.snapshotItem(0).parentNode.insertBefore(amazonButton, this.lastChild);

テスト$1
一応上手くいくけど、$で挟むと結構$をコードとかに出てきてしまうとその部分がエンコードされてしまうという悲劇が起きるのが今分かったので、ちょっと変換する記号を変えたほうがいいのかもしれない。
今回はこの辺を参考にした
JavaScript講座 4章 JavaScript演算子
http://www.site-cooler.com/kwl/javascript/4.htm
文字列の結合とか条件が分からなかったので、ってそんな初歩っぽい所なのは秘密。Xpath使ってるのは普通のGet〜byIdとかだとなぜか失敗してイライラしてやった。まだ後悔はしてない。なんかどこかで見たのだとXpathのが早いらしいので別にいいかなぁとか

■追記
しかし、このグリモン使うと、Hatenaの入力元(テキストエリアの中み)がタグだらけで汚なくなって仕方がない。はてなのバックアップを上手く使ってその辺何とかならないかなぁとか思ったりした。