):Void {
clients.resize(0);
for (client in newClients) {
clients.push(Client.fromData(client));
}
updateUserList();
}
public function send(data:WsEvent):Void {
if (!isConnected) return;
ws.send(Json.stringify(data));
}
function serverMessage(type:Int, ?text:String):Void {
final msgBuf = ge("#messagebuffer");
final div = document.createDivElement();
final time = "[" + new Date().toTimeString().split(" ")[0] + "] ";
switch (type) {
case 1:
div.className = "server-msg-reconnect";
div.innerHTML = Lang.get("msgConnected");
case 2:
div.className = "server-msg-disconnect";
div.innerHTML = Lang.get("msgDisconnected");
case 3:
div.className = "server-whisper";
div.innerHTML = time + text + " " + Lang.get("entered");
case 4:
div.className = "server-whisper";
div.innerHTML = time + text;
default:
}
msgBuf.appendChild(div);
msgBuf.scrollTop = msgBuf.scrollHeight;
}
function updateUserList():Void {
final userCount = ge("#usercount");
userCount.innerHTML = clients.length + " " + Lang.get("online");
document.title = getPageTitle();
final list = new StringBuf();
for (client in clients) {
list.add('');
if (client.isLeader) list.add('');
final klass = client.isAdmin ? "userlist_owner" : "";
list.add('${client.name}
');
}
final userlist = ge("#userlist");
userlist.innerHTML = list.toString();
}
function getPageTitle():String {
return '$pageTitle (${clients.length})';
}
function addMessage(name:String, text:String, ?time:String):Void {
final msgBuf = ge("#messagebuffer");
final userDiv = document.createDivElement();
userDiv.className = 'chat-msg-$name';
final tstamp = document.createSpanElement();
tstamp.className = "timestamp";
if (time == null) time = "[" + new Date().toTimeString().split(" ")[0] + "] ";
tstamp.innerHTML = time;
final nameDiv = document.createElement("strong");
nameDiv.className = "username";
nameDiv.innerHTML = name + ": ";
final textDiv = document.createSpanElement();
for (filter in filters) {
text = filter.regex.replace(text, filter.replace);
}
textDiv.innerHTML = text;
final isInChatEnd = msgBuf.scrollHeight - msgBuf.scrollTop == msgBuf.clientHeight;
userDiv.appendChild(tstamp);
userDiv.appendChild(nameDiv);
userDiv.appendChild(textDiv);
msgBuf.appendChild(userDiv);
if (isInChatEnd) {
while (msgBuf.children.length > 200) msgBuf.removeChild(msgBuf.firstChild);
msgBuf.scrollTop = msgBuf.scrollHeight;
}
if (personal.name == name) {
msgBuf.scrollTop = msgBuf.scrollHeight;
}
if (document.hidden && onBlinkTab == null) {
onBlinkTab = new Timer(1000);
onBlinkTab.run = () -> {
if (document.title.startsWith(pageTitle))
document.title = "*Chat*";
else document.title = getPageTitle();
}
onBlinkTab.run();
}
}
function setLeaderButton(flag:Bool):Void {
final leaderBtn = ge("#leader_btn");
if (isLeader()) {
leaderBtn.classList.add("label-success");
} else leaderBtn.classList.remove("label-success");
}
function escapeRegExp(regex:String):String {
return ~/([.*+?^${}()|[\]\\])/g.replace(regex, "\\$1");
}
public static inline function ge(id:String):Element {
return document.querySelector(id);
}
}