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 };