1 $expires = 30; //クッキーの保持日数
\r
2 $afk_time = 1000 * 60 * 60; //AFKと判定する時間(ミリ秒で指定すること)
\r
3 $log_file_name = "logfile%d.txt"; //ログファイル名(%dはそのままにしておくこと)
\r
4 $pastlogfile_pattern = "logfile%d(_+.*)?\.txt"; //過去ログと判定する正規表現
\r
5 $system_name = "system"; //システム発言を表す名前(chat.phpと同じにすること)
\r
6 $entered_message = "%sが入室しました";
\r
7 $quited_message = "%sが退室しました";
\r
8 $system_msg_color ="#000000";
\r
9 $profile_link = "/profile/detail?name=%n" //プロフィールシステムへのリンク先(%nで名前を表す)
\r
10 $fanble_message = "[color=blue]%s ファンブル![/color]";
\r
11 $critical_message = "[color=red]%s クリティカル![/color]";
\r
12 $send_message = "%sからの送信 %s";
\r
13 $failed_connect_message = "接続に失敗しました";
\r
14 $invaild_name_message = "名前を空欄にすることはできません";
\r
15 $free_password1 = "最初に入室する人が自由にパスワードを設定できます"; //自由パスワードメッセージ1
\r
16 $free_password2 = "この部屋は使用されています。パスワードを入力してください"; //自由パスワードメッセージ2
\r
17 $fixed_password = "この部屋にはパスワードが設定されています"; //固定パスワードルーム
\r
18 $hidden_log_to_rom = "この部屋ではROMできないようになっています"; //ROM禁止ルーム
\r
19 $romcount_msg = "ROM(%d人)" //ROMカウント
\r
22 $prefix_filelist = "!";
\r
23 $socket = new Object();
\r
29 $(document).ready(function(){
\r
33 var temp = $.cookie("name");
\r
34 if(temp) document.enter_form.name.value = temp;
\r
35 temp = $.cookie("color_index");
\r
36 if(temp) document.enter_form.color.selectedIndex = temp;
\r
38 $("input[name=sid]").click(sidEventListener);
\r
39 $("input[name=enter]").click(enterEventListener);
\r
40 $("input[name=quit]").click(quitEventListener);
\r
41 $("input[name=help]").click(function(e){
\r
42 $("#help_frame").css("display","block");
\r
44 $("input[name=close]").click(function(e){
\r
45 $("#help_frame").css("display","none");
\r
47 $("#whisper_list_view").click(function(e){
\r
48 $("#whisper_list").toggle();
\r
50 $("#decoration_list_view").click(function(e){
\r
51 $("#decoration_list").toggle();
\r
53 document.chat_form.onsubmit = function(){return false;};
\r
54 document.enter_form.onsubmit = function(){return false;};
\r
56 $socket = io.connect(location.hostname + "/" + document.chat_form.rno.value + "?token="+ encodeURIComponent(document.chat_form._csrf.value));
\r
57 $socket.on("error",getErrorMessage);
\r
58 $socket.on("send roominfo",sendRoomInfoListerner);
\r
59 $socket.on("send romcount",sendRomCountListerner);
\r
60 $socket.on("connect",function(){
\r
61 $socket.on("req pastlog",pastLogEventListerner);
\r
62 $socket.on("req msg",getMessageEventListerner);
\r
66 function sendRomCountListerner(count)
\r
72 function sendRoomInfoListerner(info)
\r
79 msg = $free_password2;
\r
81 msg = $free_password1;
\r
83 }else if(info.type == 2){
\r
84 msg = $fixed_password;
\r
86 }else if(info.type == 3){
\r
87 msg = $hidden_log_to_rom;
\r
91 $("#enter_message").append(msg);
\r
98 function CreateColorList()
\r
100 var c = new Array("00","33","66","99","CC","FF");
\r
101 for(var r = 0; r < c.length; r++){
\r
102 for(var g = 0; g < c.length; g++){
\r
103 for(var b = 0; b < c.length; b++){
\r
104 var t = document.createElement("option");
\r
105 t.value = "#"+c[r]+c[g]+c[b];
\r
106 t.style.backgroundColor = "#"+c[r]+c[g]+c[b];
\r
107 t.appendChild(document.createTextNode("#"+c[r]+c[g]+c[b]));
\r
108 $("#enter_frame form select[name=color]").append(t);
\r
114 function getCurretLog()
\r
116 var rno = document.chat_form.rno.value;
\r
117 var url = sprintf($log_file_name,rno);
\r
118 $socket.emit("get pastLog",url);
\r
121 function pastLogEventListerner(msg)
\r
123 if(IsRomMode() && $roominfo.type != 0 && $roominfo.admin == false)
\r
125 for(var i = 0; i < msg.length; i++)
\r
126 ParseMessage(msg[i]);
\r
130 function getMessageEventListerner(msg)
\r
132 if(IsRomMode() && $roominfo.type != 0)
\r
136 if( document.getElementById("bell").checked == true && msg.name != document.enter_form.name.value)
\r
137 document.getElementById("NoticeSound").play();
\r
140 var $messageTag = null;
\r
141 function ParseMessage(msg)
\r
143 var util = new Util();
\r
144 msg.message = util.htmlspecialchars(msg.message);
\r
145 var childtag = $GetCommandParser.parse(msg);
\r
147 if(childtag == null)
\r
149 if(typeof(childtag) == "string")
\r
150 childtag = $("<span/>").append(childtag);
\r
152 var trtag = $("<tr/>");
\r
153 var namepart,msgpart;
\r
155 var color = $system_msg_color;
\r
158 var date = new Date(Date.parse(msg.date));
\r
159 if(msg.name != $system_name)
\r
161 color = $names[msg.name].color;
\r
162 $names[msg.name].time = date.getTime();
\r
163 namepart = $("<a/>")
\r
164 .attr("href",GetNameLink(msg.name))
\r
165 .attr("target","_blank")
\r
166 .css("color",color)
\r
167 .text(util.htmlspecialchars(msg.name));
\r
169 namepart = $("<span/>").append(msg.name);
\r
172 namepart.append("@" + msg.ip);
\r
173 trtag.append($("<td/>").append(namepart));
\r
176 .append("(" + date.toFormat("YYYY/MM/DD HH:MI:SS") +")")
\r
177 .css("color",color);
\r
178 trtag.append($("<td/>").append(msgpart));
\r
180 if($messageTag == null)
\r
181 $messageTag = $("#message");
\r
183 $messageTag.prepend(trtag);
\r
186 function GetNameLink(name)
\r
188 var util = new Util();
\r
189 if($names[name].mailto == "")
\r
190 return $profile_link.replace("%n",encodeURIComponent(name));
\r
191 return "mailto:" + util.htmlspecialchars($names[name].mailto);
\r
194 function createNameList()
\r
196 var date = new Date();
\r
197 $("#whisper_list").empty();
\r
198 $("#whisper_list").append("<ul></ul>");
\r
200 $("#namelist").empty();
\r
201 $("#namelist").append("<ul></ul>");
\r
202 $("#namelist > ul").append($("<li/>").append(sprintf($romcount_msg,$romcount)));
\r
204 for(var name in $names)
\r
206 var diff = date.getTime() - $names[name].time;
\r
207 if(diff >= $afk_time)
\r
209 if(name != $system_name)
\r
211 var atag = $("<a/>")
\r
212 .attr("href",GetNameLink(name))
\r
213 .attr("target","_blank")
\r
214 .css("color",$names[name].color)
\r
216 var spantag = $("<span/>")
\r
217 .click(clickNameEventListener)
\r
219 $("#whisper_list > ul").append($("<li/>").append(spantag));
\r
220 $("#namelist > ul").append($("<li/>").append(atag));
\r
225 function clickNameEventListener(e)
\r
227 document.chat_form.message.value = "/tell " + $(this).text();
\r
228 document.chat_form.message.focus();
\r
233 var text = GetSelection(document.chat_form.message);
\r
234 ReplaceSelection(document.chat_form.message,sprintf("[b]%s[/b]",text));
\r
237 function AddItalic()
\r
239 var text = GetSelection(document.chat_form.message);
\r
240 ReplaceSelection(document.chat_form.message,sprintf("[i]%s[/i]",text));
\r
243 function AddStrike()
\r
245 var text = GetSelection(document.chat_form.message);
\r
246 ReplaceSelection(document.chat_form.message,sprintf("[s]%s[/s]",text));
\r
249 function AddFontSize(size)
\r
251 var text = GetSelection(document.chat_form.message);
\r
252 ReplaceSelection(document.chat_form.message,sprintf("[size=%f]%s[/size]",size,text));
\r
255 function GetSelection(element)
\r
257 if (document.selection) {
\r
259 var sel = document.selection.createRange();
\r
261 } else if (element.selectionStart || element.selectionStart === 0) {
\r
262 var startPos = element.selectionStart;
\r
263 var endPos = element.selectionEnd;
\r
264 var scrollTop = element.scrollTop;
\r
265 return element.value.substring(startPos,endPos);
\r
271 function ReplaceSelection(element,text)
\r
273 if (document.selection) {
\r
275 var sel = document.selection.createRange();
\r
277 } else if (element.selectionStart || element.selectionStart === 0) {
\r
278 var startPos = element.selectionStart;
\r
279 var endPos = element.selectionEnd;
\r
280 element.value = element.value.substring(0, startPos) + text + element.value.substring(endPos, element.value.length);
\r
282 element.value = text;
\r
286 function enterEventListener()
\r
288 if(document.enter_form.name.value == "")
\r
290 alert($invaild_name_message);
\r
294 $("#enter_frame").css("display","none");
\r
295 $("#chat_frame").css("display","block");
\r
297 var color = document.enter_form.color.options[document.enter_form.color.selectedIndex].value;
\r
299 $.cookie("name",document.enter_form.name.value,{ expires: $expires });
\r
300 $.cookie("color_index",document.enter_form.color.selectedIndex,{ expires: $expires });
\r
302 $socket.json.emit("join",{name:document.enter_form.name.value,color:color,mailto:document.enter_form.mailto.value,password:document.enter_form.password.value});
\r
305 function quitEventListener(){
\r
306 $socket.json.emit("quit",{name:document.enter_form.name.value});
\r
308 $("#enter_frame").css("display","block");
\r
309 $("#chat_frame").css("display","none");
\r
311 if($roominfo.type != 0 && $roominfo.admin == false)
\r
313 $("#message").empty();
\r
314 $("#namelist").empty();
\r
319 $socket.json.emit("get pastLogList",{rno:document.chat_form.rno.value});
\r
322 function sidEventListener(){
\r
324 name:document.enter_form.name.value,
\r
325 message:document.chat_form.message.value
\r
327 msg.message = $PostCommandParser.parse(msg);
\r
329 if(msg.message != null && msg.message != "")
\r
330 $socket.json.emit("send msg",msg);
\r
332 document.chat_form.message.value ="";
\r
335 function ReflushChatMessage(flag)
\r
337 if(flag) $("#message").empty();
\r
340 function getErrorMessage(text)
\r
343 alert($failed_connect_message);
\r
348 function IsRomMode()
\r
350 return $("#chat_frame").css("display") == "none";
\r
353 //NameCollectionクラス
\r
354 function GetNameCollection(text)
\r
356 var output = new Array();
\r
357 var list = text.split("\n");
\r
358 for(var i = 0; i < list.length; i++)
\r
362 output.push(new NameElement(list[i]));
\r
368 // NamesElementsクラス
\r
370 function NameElement(s)
\r
372 this.data = s.split("<>");
\r
373 this.getName = function()
\r
375 return this.data[0];
\r
380 function CreateNameInfo(time,color,mailto)
\r
382 var result = { time:time,color:color,mailto:""};
\r
383 if(typeof(mailto) != "undifined")
\r
384 result.mailto = mailto;
\r
393 this.get_random_number = function (a,b)
\r
395 return Math.floor(a + Math.random() * b);
\r
398 this.htmlspecialchars = function (ch) {
\r
399 ch = ch.replace(/&/g,"&") ;
\r
400 ch = ch.replace(/"/g,""") ;
\r
401 ch = ch.replace(/'/g,"'") ;
\r
402 ch = ch.replace(/</g,"<") ;
\r
403 ch = ch.replace(/>/g,">") ;
\r