1 /*
  2   bbs2chreader であぼーん登録を行うと document オブジェクトで b2raboneadd イベントが発生する
  3   イベントハンドラの aEvent 引数から、あぼーんされた文字列とそのタイプが取得できる
  4     aEvent.detail : あぼーんタイプ( b2rIAboneManager.ABONE_TYPE_XXX )
  5     aEvent.sourceEvent.type : あぼーんされた文字列
  6 */
  7 
  8 /**
  9  * @fileOverview 即時あぼーんを扱います。
 10  */
 11 /**
 12  * bbs2chreader が発生させる b2raboneadd イベントを捕捉して、あぼーんの即時適用に対応します。
 13  * @static
 14  */
 15 var b2rAboneHandler = {
 16 	/** イベントリスナを登録します。*/
 17 	startup: function(){
 18 		document.addEventListener("b2raboneadd", b2rAboneHandler, false);
 19 	},
 20 	/** レスの内容をすべてあぼーんに設定します。
 21 	 * @param {element} node あぼーんするレスの親要素
 22 	 */
 23 	markAsAbone: function(node) {
 24 		var names = ["resName", "resMail", "resDate", "resBody"];
 25 		for (var i = 0; i < names.length; i++) {
 26 			var child = this.getNode(node, names[i]);
 27 			child.textContent = "ABONE";
 28 		}
 29 	},
 30 	/** 親要素から指定されたクラス名を持つ要素を取得します。
 31 	 * @param  {element} parentNode 親要素
 32 	 * @param  {element} className クラス名
 33 	 * @return {element} マッチした要素
 34 	 */
 35 	getNode: function(parentNode, className){
 36 		var xpathResult = document.evaluate("descendant::*[starts-with(@class,'" + className + "')]", parentNode, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
 37 		return xpathResult.singleNodeValue;
 38 	},
 39 	/** b2raboneadd イベントを処理します。
 40 	 * @param {event} aEvent イベント
 41 	 */
 42 	handleEvent: function(aEvent){
 43 		var word = aEvent.sourceEvent.type;
 44 		var type = aEvent.detail;
 45 		var className = ["resName", "resMail", "resID", "resBody"][type];
 46 		var resItems = ResNodes.getContainers();
 47 		for (var i = 0; i < resItems.length; i++){
 48 			var node = resItems.items(i);
 49 			var childNode = this.getNode(node, className);
 50 			if (childNode.textContent.indexOf(word) != -1)
 51 				this.markAsAbone(node);
 52 		}
 53 	}
 54 };