wdgtH&’’’’’’’’’’’’’’’’[ K+“’’’’’’’’1.1Nakatani ShuyoCybozu Labs, Inc.“ s&H off mainWindow 200 100 true ごょっぱや 恒恍恊恝 みえねー でか! include("main.js"); init(); if (preferences.closeWidget.value==1) { alert("LingrTickr を終了します。"); closeWidget(); } init(); åÅ’’’’’’’’“// Lingr Tickr - ticker tool of chat logs // (c)Nakatani Shuyo, CybozuLabs inc. // Common //////////////////////////////////////////////////////////// var LINGR_APIKEY = "7d78a14c4b8b4950b99aa8caaf94d45a"; var URL_SESSION_CREATE = "http://www.lingr.com/api/session/create"; var URL_ROOM_ENTER = "http://www.lingr.com/api/room/enter"; var URL_ROOM_EXIT = "http://www.lingr.com/api/room/exit/"; var URL_ROOM_OBSERVE = "http://www.lingr.com/api/room/observe"; var session, ticket=null, counter; var pre_hOffset=0; var count=0; var first_access = true; var colorcode = { 'black':'#000000', 'green':'#009900', 'red':'#990000', 'blue':'#0000aa', 'yellow':'#777700', } var speedratio = { 'black':1, 'green':0.9, 'red':1.1, 'blue':1.2, 'yellow':1.5, } function init() { preferences.closeWidget.value = 0; var posi = preferences.position.value; if (posi=='下の方') { mainWindow.height = 200; mainWindow.vOffset = screen.availHeight - mainWindow.height; } else if (posi=='äøŠć®ę–¹') { mainWindow.height = 200; mainWindow.vOffset = 0; } else if (posi=='å…Øē”»é¢') { mainWindow.height = screen.availHeight; mainWindow.vOffset = 0; } ticker_area.width = mainWindow.width = screen.availWidth; ticker_area.height = mainWindow.height; mainWindow.hOffset = 0; post(URL_SESSION_CREATE, "api_key=" + LINGR_APIKEY, handlerCreate); } // Connect //////////////////////////////////////////////////////////// function post(url, data, handler) { print("post: " + url + " data: " + data); var req = new XMLHttpRequest(); if (handler) req.onreadystatechange = handler; req.open( "POST", url, true ); req.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" ); req.send(data); } // Lingr //////////////////////////////////////////////////////////// function handlerCreate() { if (this.readyState != 4 || this.status != 200) return; var dom = this.responseXML; if (dom.evaluate('string(response/status)') != 'ok') return; session = dom.evaluate('string(response/session)'); enterRoom(); } function enterRoom() { var lingrID = preferences.lingrID.value; if (!lingrID || lingrID=="") return; if (ticket) { post(URL_ROOM_EXIT, "session=" + session + "&ticket=" + ticket, null); ticket = null; } post(URL_ROOM_ENTER, "session=" + session + "&id=" + lingrID, handlerEnter); } function handlerEnter() { print("handlerEnter status: " + this.status); if (this.readyState != 4 || this.status != 200) return; var dom = this.responseXML; //print(dom.toXML()); if (dom.evaluate('string(response/status)') != 'ok') return; counter = dom.evaluate('string(response/room/counter)'); ticket = dom.evaluate('string(response/ticket)'); observeRoom(); } function observeRoom() { var data ="?session=" + session + "&ticket=" + ticket + "&counter=" + counter; var req = new XMLHttpRequest(); var _session = session; req.onreadystatechange = function(){handlerObserve(this, _session)}; req.open( "GET", URL_ROOM_OBSERVE + data, true ); req.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" ); req.send(); } function handlerObserve(req, _session) { if (req.readyState != 4) return; count++; print("handlerObserve #="+count+" status: " + req.status); if (req.status == 200) { var dom = req.responseXML; //print(dom.toXML()); if (dom.evaluate('string(response/status)') == 'ok') { counter = dom.evaluate('string(response/counter)'); var mess_list = dom.evaluate('response/messages/message'); for(var i=0;i