var pickup_regexp = readCookie('pickup_regexp') || ''; var pickup_tab_list = new Array(); // タブ一覧 // 発言(JSON)が指定条件にマッチするか判定 function execRegexp(tw, exp) { return (!exp.id || tw.user.screen_name.match(exp.id )) && (!exp.id_n ||!tw.user.screen_name.match(exp.id_n)) && (!exp.text || tw.text.match(exp.text )) && (!exp.text_n ||!tw.text.match(exp.text_n)) && (!exp.source || tw.source.match(exp.source )) && (!exp.source_n ||!tw.source.match(exp.source_n)) } // タブ切り替え処理 function switchRegexp(tab) { var pickup = new Array(); switchTo(tab.id); $('tw2h').innerHTML = '

[x] remove tab
'; // メインTLから該当する発言を抽出 var tl = $('tw').childNodes; for (var i = 0; i < tl.length; i++) { var tl2 = tl[i].childNodes; for (var j = 0; j < tl2.length; j++) { var target = tl2[j]; for (var k = 0; k < tab.pickup.length; k++) { if (target.tw && execRegexp(target.tw, tab.pickup[k])) { pickup.push(target.tw); break; } } } } twShow2(pickup); } // 抽出タブ変更 function setRegexp(str) { pickup_regexp = str; writeCookie('pickup_regexp', pickup_regexp, 3652); // 抽出タブを除去 for (var i = 0; i < pickup_tab_list.length; i++) pickup_tab_list[i].parentNode.removeChild(pickup_tab_list[i]); pickup_tab_list = new Array; // 抽出タブ再初期化 initRegexp(); } // タブを削除 function closeRegexp(tab) { if (!confirm("タブを閉じてもよろしいですか?")) return; var list = pickup_regexp.split(/[\r\n]/); var list2 = []; for (var id = 0; id < list.length; id++) if (list[id].split(':')[0] != tab) list2.push(list[id]); setRegexp(list2.join("\n")); switchTL(); } // 抽出タブ初期化 function initRegexp() { var list = pickup_regexp.split(/[\r\n]/); // 抽出タブを生成 for (var id = 0; id < list.length; id++) { var entry = list[id].split(':'); var tabname = entry[0]; var regexp = entry[1] ? entry[1].split("/") : []; var regexp2 = entry[2] ? entry[2].split("/") : []; var regexp3 = entry[3] ? entry[3].split("/") : []; var filter = entry[4]; if (!tabname) continue; var ptab = $('pickup-'+tabname); if (!ptab) { ptab = document.createElement('a'); ptab.pickup = new Array(); ptab.id = 'pickup-' + tabname; ptab.innerHTML = ptab.name = tabname; ptab.href = '#'; ptab.onclick = function() { switchRegexp(this); return false; }; $('menu2').insertBefore(ptab, $('misc')); pickup_tab_list.push(ptab); } var exps = new Object; try { if (regexp[0]) exps.id = new RegExp(regexp[0]); if (regexp[1]) exps.id_n = new RegExp(regexp[1]); if (regexp2[0]) exps.text = new RegExp(regexp2[0]); if (regexp2[1]) exps.text_n = new RegExp(regexp2[1]); if (regexp3[0]) exps.source = new RegExp(regexp3[0]); if (regexp3[1]) exps.source_n = new RegExp(regexp3[1]); } catch (e) { alert("RegExp Error in " + tabname + " tab :\nline "+(id+1)+" - " + e); } if (filter) exps.filterTL = true; ptab.pickup.push(exps); } } initRegexp(); registerPlugin({ miscTab: function(ele) { var e = document.createElement("p"); e.innerHTML = 'Pickup Pattern (TabName:ID:Status:TLFilter) :

'; ele.appendChild(e); ele.appendChild(document.createElement("hr")); }, newMessageElement: function(s, tw, twNodeId) { if (twNodeId != 'tw') return; s.tw = tw; // 抽出に利用するためDOMツリーにJSONを記録 // 発言にマッチしたら該当タブに色付け for (var i = 0; i < pickup_tab_list.length; i++) { var tab = pickup_tab_list[i]; var match = false; for (var k = 0; k < tab.pickup.length; k++) { if (execRegexp(tw, tab.pickup[k])) { match = true; s.className += " match-" + tab.name; if (tab.className.indexOf(' new') < 0) tab.className += ' new'; if (tab.pickup[k].filterTL) s.style.display = "none"; } } if (match) s.className += " match"; } }, fav: function(id, f, img, img_tl) { var s = $('tw-' + id); if (s && s.tw && f != -1) s.tw.favorited = !!f; } }); // Popup menu function addIDRegexp(user, id) { setRegexp(user + ':^' + user + '$\n' + user + '::@' + user + '\n' + pickup_regexp); switchRegexp(pickup_tab_list[0]); } var a = document.createElement("hr"); $('popup').insertBefore(a,$('popup').childNodes[0]) a = document.createElement("a"); a.target = 'twitter'; a.id = 'regexp_add_ID'; a.innerHTML = 'ID抽出タブ追加'; a.href = '#'; a.onclick = function() { addIDRegexp(popup_user, popup_id); return false; } $('popup').insertBefore(a,$('popup').childNodes[0])