$entered_message = "%sが入室しました";\r
$quited_message = "%sが退室しました";\r
$system_msg_color ="#000000";\r
-$profile_link = "" //プロフィールシステムへのリンク先(%nで名前を表す)\r
+$profile_link = "/profile/detail?name=%n" //プロフィールシステムへのリンク先(%nで名前を表す)\r
$fanble_message = "[color=blue]%s ファンブル![/color]";\r
$critical_message = "[color=red]%s クリティカル![/color]";\r
$send_message = "%sからの送信 %s";\r
$free_password1 = "最初に入室する人が自由にパスワードを設定できます"; //自由パスワードメッセージ1\r
$free_password2 = "この部屋は使用されています。パスワードを入力してください"; //自由パスワードメッセージ2\r
$fixed_password = "この部屋にはパスワードが設定されています"; //固定パスワードルーム\r
-$hidden_log_to_rom = "この部屋ではROMできないようになっています";\r
+$hidden_log_to_rom = "この部屋ではROMできないようになっています"; //ROM禁止ルーム\r
+$romcount_msg = "ROM(%d人)" //ROMカウント\r
\r
//ここから先は変更しないでください\r
$prefix_filelist = "!";\r
$socket = new Object();\r
$names = {};\r
$roominfo = {};\r
-$dateFormat = new DateFormat("yyyy/MM/dd HH:mm:ss");\r
$romcount = 0;\r
//ここまで\r
\r
$("#help_frame").css("display","none");\r
});\r
$("input[name=openPastlog]").click(openPastlogEventListener);\r
+ $("#whisper_list_view").click(function(e){\r
+ $("#whisper_list").toggle();\r
+ });\r
+ $("#decoration_list_view").click(function(e){\r
+ $("#decoration_list").toggle();\r
+ });\r
document.chat_form.onsubmit = function(){return false;};\r
document.enter_form.onsubmit = function(){return false;};\r
\r
- $socket = io.connect(location.hostname + "/" + document.chat_form.rno.value + "?token="+ encodeURIComponent(document.chat_form.token.value));\r
+ $socket = io.connect(location.hostname + "/" + document.chat_form.rno.value + "?token="+ encodeURIComponent(document.chat_form._csrf.value));\r
$socket.on("error",getErrorMessage);\r
$socket.on("send roominfo",sendRoomInfoListerner);\r
$socket.on("send romcount",sendRomCountListerner);\r
function sendRoomInfoListerner(info)\r
{\r
$roominfo = info;\r
- if(info.type == 0)\r
- {\r
- $socket.json.emit("get pastLogList",{rno:document.chat_form.rno.value});\r
- getCurretLog();\r
- }else if(info.type == 1){\r
+ var logflag = true;\r
+ var msg = "";\r
+ if(info.type == 1){\r
if(info.IsOwned)\r
- {\r
- $("#enter_message").append($free_password2);\r
- }else{\r
- $("#enter_message").append($free_password1);\r
- }\r
+ msg = $free_password2;\r
+ else\r
+ msg = $free_password1;\r
+ logflag = false;\r
}else if(info.type == 2){\r
- $("#enter_message").append($fixed_password);\r
+ msg = $fixed_password;\r
+ logflag = false;\r
}else if(info.type == 3){\r
- $("#enter_message").append($hidden_log_to_rom);\r
+ msg = $hidden_log_to_rom;\r
+ logflag = false;\r
+ }\r
+ if(msg != "")\r
+ $("#enter_message").append(msg);\r
+ if(logflag)\r
+ {\r
+ $socket.json.emit("get pastLogList",{rno:document.chat_form.rno.value});\r
+ getCurretLog();\r
}\r
}\r
\r
\r
function pastLogEventListerner(msg)\r
{\r
- if(IsRomMode() && $roominfo.type != 0)\r
+ if(IsRomMode() && $roominfo.type != 0 && $roominfo.admin == false)\r
return;\r
for(var i = 0; i < msg.length; i++)\r
ParseMessage(msg[i]);\r
function ParseMessage(msg)\r
{\r
var util = new Util();\r
- var cmd = new CommandParserWhenGet;\r
msg.message = util.htmlspecialchars(msg.message);\r
- var childtag = cmd.parse(msg);\r
+ var childtag = $GetCommandParser.parse(msg);\r
\r
if(childtag == null)\r
return;\r
+ if(typeof(childtag) == "string")\r
+ childtag = $("<span/>").append(childtag);\r
\r
- var ptag = $("<p/>");\r
+ var trtag = $("<tr/>");\r
+ var namepart,msgpart;\r
\r
var color = $system_msg_color;\r
+\r
var mailto = "";\r
var date = new Date(Date.parse(msg.date));\r
if(msg.name != $system_name)\r
{\r
color = $names[msg.name].color;\r
$names[msg.name].time = date.getTime();\r
- var atag = $("<a/>")\r
+ namepart = $("<a/>")\r
.attr("href",GetNameLink(msg.name))\r
+ .attr("target","_blank")\r
.css("color",color)\r
.text(util.htmlspecialchars(msg.name));\r
- ptag.append(atag);\r
}else{\r
- ptag.append(msg.name);\r
+ namepart = $("<span/>").append(msg.name);\r
}\r
- ptag.append(":");\r
- ptag.append(childtag);\r
- ptag.append("(" + $dateFormat.format(date) +")");\r
+ if(msg.ip != "")\r
+ namepart.append("@" + msg.ip);\r
+ trtag.append($("<td/>").append(namepart));\r
\r
- ptag.css("color",color);\r
+ msgpart = childtag\r
+ .append("(" + date.toFormat("YYYY/MM/DD HH:MI:SS") +")")\r
+ .css("color",color);\r
+ trtag.append($("<td/>").append(msgpart));\r
\r
if($messageTag == null)\r
$messageTag = $("#message");\r
\r
- $messageTag.prepend(ptag);\r
+ $messageTag.prepend(trtag);\r
}\r
\r
function GetNameLink(name)\r
function createNameList()\r
{\r
var date = new Date();\r
+ $("#whisper_list").empty();\r
+ $("#whisper_list").append("<ul></ul>");\r
+\r
$("#namelist").empty();\r
$("#namelist").append("<ul></ul>");\r
- $("#namelist > ul").append($("<li/>").append("ROM人数:" + $romcount));\r
+ $("#namelist > ul").append($("<li/>").append(sprintf($romcount_msg,$romcount)));\r
+\r
for(var name in $names)\r
{\r
var diff = date.getTime() - $names[name].time;\r
{\r
var atag = $("<a/>")\r
.attr("href",GetNameLink(name))\r
+ .attr("target","_blank")\r
.css("color",$names[name].color)\r
.text(name);\r
+ var spantag = $("<span/>")\r
+ .click(clickNameEventListener)\r
+ .text(name);\r
+ $("#whisper_list > ul").append($("<li/>").append(spantag));\r
$("#namelist > ul").append($("<li/>").append(atag));\r
}\r
}\r
}\r
\r
+function clickNameEventListener(e)\r
+{\r
+ document.chat_form.message.value = "/tell " + $(this).text();\r
+ document.chat_form.message.focus();\r
+}\r
+\r
+function AddBold()\r
+{\r
+ var text = GetSelection(document.chat_form.message);\r
+ ReplaceSelection(document.chat_form.message,sprintf("[b]%s[/b]",text));\r
+}\r
+\r
+function AddItalic()\r
+{\r
+ var text = GetSelection(document.chat_form.message);\r
+ ReplaceSelection(document.chat_form.message,sprintf("[i]%s[/i]",text));\r
+}\r
+\r
+function AddStrike()\r
+{\r
+ var text = GetSelection(document.chat_form.message);\r
+ ReplaceSelection(document.chat_form.message,sprintf("[s]%s[/s]",text));\r
+}\r
+\r
+function AddFontSize(size)\r
+{\r
+ var text = GetSelection(document.chat_form.message);\r
+ ReplaceSelection(document.chat_form.message,sprintf("[size=%f]%s[/size]",size,text));\r
+}\r
+\r
+function GetSelection(element)\r
+{\r
+ if (document.selection) {\r
+ element.focus();\r
+ var sel = document.selection.createRange();\r
+ return sel.text;\r
+ } else if (element.selectionStart || element.selectionStart === 0) {\r
+ var startPos = element.selectionStart;\r
+ var endPos = element.selectionEnd;\r
+ var scrollTop = element.scrollTop;\r
+ return element.value.substring(startPos,endPos);\r
+ }else{\r
+ return "";\r
+ }\r
+}\r
+\r
+function ReplaceSelection(element,text)\r
+{\r
+ if (document.selection) {\r
+ element.focus();\r
+ var sel = document.selection.createRange();\r
+ sel.text = text;\r
+ } else if (element.selectionStart || element.selectionStart === 0) {\r
+ var startPos = element.selectionStart;\r
+ var endPos = element.selectionEnd;\r
+ element.value = element.value.substring(0, startPos) + text + element.value.substring(endPos, element.value.length);\r
+ } else{\r
+ element.value = text;\r
+ }\r
+}\r
+\r
function enterEventListener()\r
{\r
if(document.enter_form.name.value == "")\r
$("#enter_frame").css("display","block");\r
$("#chat_frame").css("display","none");\r
\r
- if($roominfo.type != 0)\r
+ if($roominfo.type != 0 && $roominfo.admin == false)\r
{\r
$("#message").empty();\r
$("#namelist").empty();\r
+ $names = {};\r
+ createNameList();\r
}\r
else\r
$socket.json.emit("get pastLogList",{rno:document.chat_form.rno.value});\r
}\r
\r
function sidEventListener(){\r
- var cmd = new CommandParserWhenPost;\r
var msg = {\r
name:document.enter_form.name.value,\r
message:document.chat_form.message.value\r
}; \r
- msg.message = cmd.parse(msg);\r
+ msg.message = $PostCommandParser.parse(msg);\r
\r
- if(msg.message != null)\r
+ if(msg.message != null && msg.message != "")\r
$socket.json.emit("send msg",msg);\r
\r
document.chat_form.message.value ="";\r
}\r
\r
//\r
-// CommandParserクラス\r
-//\r
-function CommandParser()\r
-{\r
- this.word = new Array;\r
- this.CommandList;\r
- this.DefaultCommand = function(msg)\r
- {\r
- return msg.message;\r
- }\r
-\r
- this.parse = function(msg)\r
- {\r
- this.word = msg.message.split(" ");\r
- if(this.CommandList[this.word[0]])\r
- return this.CommandList[this.word[0]](msg,this.word);\r
- else\r
- return this.DefaultCommand(msg);\r
- }\r
-}\r
-\r
-//\r
-// CommandParserWhenGetクラス\r
-//\r
-// function(msg,word)\r
-// msg\r
-// msgオブジェクト\r
-// word\r
-// トークンリスト\r
-// 返り値\r
-// タグもしくは文字列を返す\r
-// nullを返した場合、メッセージリストには何も表示されなくなる\r
-function CommandParserWhenGet()\r
-{\r
- this.DefaultCommand = function(msg)\r
- {\r
- return parseBBCode(msg.message);\r
- }\r
- this.CommandList = new Array;\r
- this.CommandList["/tell"] = function(msg,word)\r
- {\r
- if((word[2] == "all")||\r
- (word[2] == document.enter_form.name.value)||\r
- (word[1] == document.enter_form.name.value)\r
- ){\r
- return $("<span/>").attr("id","whisper").append(parseBBCode(word[3]));\r
- }else{\r
- return null;\r
- }\r
- }\r
- this.CommandList["/enteredby"] = function(msg,word)\r
- {\r
- var name = word[1];\r
- var color = word[2];\r
- var mailto = word[3];\r
- var text = sprintf($entered_message,name);\r
- var date = new Date(Date.parse(msg.date));\r
- $names[name] = CreateNameInfo(date.getTime(),color,mailto);\r
- createNameList();\r
- return text;\r
- }\r
- this.CommandList["/quitedby"] = function(msg,word)\r
- {\r
- var name = word[1];\r
- var text = sprintf($quited_message,name);\r
- delete $names[name];\r
- createNameList();\r
- return text;\r
- }\r
-}\r
-CommandParserWhenGet.prototype = new CommandParser;\r
-\r
-//\r
-// CommandParserWhenPostクラス\r
-//\r
-//msg\r
-// msgオブジェクト\r
-//word\r
-// word[0] コマンド名\r
-// word[1] 単語1\r
-// :\r
-// word[n] 単語n\r
-// 返却値\r
-// 文字列を返す\r
-// nullを返した場合、送信操作が行われなくなる\r
-function CommandParserWhenPost()\r
-{\r
- this.CommandList = new Array;\r
- this.CommandList["/tell"] = function(msg,word)\r
- {\r
- word[3] = word[2];\r
- word[2] = word[1];\r
- word[1] = msg.name;\r
- return word.join(" ");\r
- }\r
- this.CommandList["/dice"] = function(msg,word)\r
- {\r
- if(word.length == 1)\r
- text = CastDice("6d1");\r
- else\r
- text = CastDice(word[1]);\r
- return text;\r
- }\r
- this.CommandList["/send"] = function(msg,word)\r
- {\r
- if(word.length != 3)\r
- return msg.message;\r
-\r
- var message = sprintf($send_message,document.enter_form.name.value,word[2]);\r
-\r
- if(word[1] == document.chat_form.rno.value)\r
- $socket.json.emit("send msg",{name:$system_name,message:message,token:document.chat_form.token.value});\r
-\r
- var socket = io.connect(location.hostname + "/" + word[1]);\r
- socket.on("error",getErrorMessage);\r
- socket.on("connect",function(){\r
- socket.json.emit("send msg",{name:$system_name,message:message,token:document.chat_form.token.value});\r
- });\r
-\r
- return null;\r
- }\r
- this.CommandList["/setpassword"] = function(msg,word)\r
- {\r
- if(word.length != 2)\r
- return msg.message;\r
-\r
- $socket.json.emit("set password",{owner:document.enter_form.name.value,password:word[1]});\r
-\r
- return null;\r
- }\r
-}\r
-CommandParserWhenPost.prototype = new CommandParser;\r
-\r
-function ParseDiceParam(number,option)\r
-{\r
- if(typeof(number) != "undefined")\r
- {\r
- var result = new Object();\r
- result.option = typeof(option) == "undefined" ? null : option;\r
- result.number = parseInt(number);\r
- return result;\r
- }\r
- return null;\r
-}\r
-\r
-function CastDice(text){\r
- var p = text.match(/(\d+)D(\d+)C*(\d+)?(\-|\+)?F*(\d+)?(\-|\+)?/i);\r
- var max = parseInt(p[1]);\r
- var dice_num = parseInt(p[2]);\r
- var critical = ParseDiceParam(p[3],p[4]);\r
- var fanble = ParseDiceParam(p[5],p[6]);\r
- var total = 0;\r
- var hasCritical = true;\r
- var hasFanble = true;\r
- var util = new Util();\r
-\r
- text = "[" + text + "] -> ";\r
- for(var i = 0; i < dice_num; i++)\r
- {\r
- var t = util.get_random_number(1,max);\r
- total += t;\r
- text += t + " + ";\r
-\r
- if(hasCritical && critical != null)\r
- {\r
- if(critical.option == "-" && t <= critical.number)\r
- hasCritical = true;\r
- else if(critical.option == "+" && t >= critical.number)\r
- hasCritical = true;\r
- else if(critical.option == null && t == critical.number)\r
- hasCritical = true;\r
- else\r
- hasCritical = false;\r
- }\r
-\r
- if(hasFanble && fanble != null)\r
- {\r
- if(fanble.option == "-" && t <= fanble.number)\r
- hasFanble = true;\r
- else if(fanble.option == "+" && t >= fanble.number)\r
- hasFanble = true;\r
- else if(fanble.option == null && t == fanble.number)\r
- hasFanble = true;\r
- else\r
- hasFanble = false;\r
- }\r
- }\r
-\r
- text = text.slice(0,text.length - 3); //最後に付く" + "を取り除く\r
- text += " = " + total;\r
-\r
- if(critical == null)\r
- hasCritical = false;\r
- if(fanble == null)\r
- hasFanble = false;\r
-\r
- if(hasCritical)\r
- text = sprintf($critical_message,text);\r
- else if(hasFanble)\r
- text = sprintf($fanble_message,text);\r
-\r
- return text;\r
-}\r
-\r
-//\r
// Utilクラス\r
//\r
function Util()\r