wdgt H & ’’’’’’’’’’’’’’’’[ K + ’’’’’’’’ 1.1 Nakatani Shuyo Cybozu 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