chat.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. // Online User Chat and In-Game Chat
  2. var scrollSensitivity = 0.2;
  3. var scroll_left = 5;
  4. var scroll_left_chat = 5;
  5. var scroll_right = -10000;
  6. var currentChat = null;
  7. function barHover(evt) { document.getElementById("Right-Bar").setAttribute("fill","skyblue"); }
  8. function barHoverOut(evt) { document.getElementById("Right-Bar").setAttribute("fill","lightblue"); }
  9. function onlineHover(evt) { document.getElementById("Left-Bar").setAttribute("fill","skyblue"); }
  10. function onlineHoverOut(evt) { document.getElementById("Left-Bar").setAttribute("fill","lightblue"); }
  11. function onlineHoverColor(evt) {
  12. onlineHover(evt);
  13. var name = evt.target.getAttribute("xmlns:data");
  14. if (null != name) document.getElementById(name).setAttribute("fill","#FFF687");
  15. }
  16. function onlineHoverOutColor(evt) {
  17. onlineHoverOut(evt);
  18. var name = evt.target.getAttribute("xmlns:data");
  19. if (null != name) document.getElementById(name).setAttribute("fill","#DBEBED");
  20. }
  21. function chatEditor(evt) {
  22. var chatContainer = evt.target.getAttribute("xmlns:data");
  23. if (evt.keyCode == 13 && evt.metaKey == false) {
  24. var e = evt.target; //document.getElementById('edit');
  25. console.log(e);
  26. if (e.innerText.trim() != ""){
  27. var text = e.innerText.trim().encodeHTML();
  28. chatMessage(chatContainer,"100","Maxim",text);
  29. // if (null != currentChat)
  30. ws.send(enc(tuple(atom('client'),
  31. tuple(atom('message'),bin(document.user),bin(chatContainer.substr(5)),bin(text)))));
  32. e.innerHTML = '';
  33. }
  34. } else if (evt.keyCode == 13 && evt.metaKey == true) {
  35. document.execCommand('insertText',false, '\n');
  36. }
  37. var scroll = -1000000;
  38. if (null != currentChat) left_scroll = scroll;
  39. mouseWheelHandler({'detail':scroll,'wheelDelta':scroll});
  40. }
  41. function mouseWheelHandler(e) {
  42. var leftBar = document.getElementById("Left-Bar");
  43. var rightBar = document.getElementById("Right-Bar");
  44. var leftFill = leftBar.getAttribute("fill");
  45. var rightFill = rightBar.getAttribute("fill");
  46. var leftActive = leftFill == "skyblue";
  47. var rightActive = rightFill == "skyblue";
  48. if (!leftActive && !rightActive) return;
  49. // console.log(leftActive);
  50. var evt = e;
  51. var scroll_dy = evt.detail ? evt.detail * scrollSensitivity : evt.wheelDelta * scrollSensitivity;
  52. var ori = leftActive ? (currentChat == null ? scroll_left : scroll_left ) : scroll_right;
  53. var scroll = parseFloat(scroll_dy) + parseFloat(ori);
  54. var selectedBar = leftActive ? (currentChat == null ? "Online-List" : currentChat) : "Chat";
  55. var selectedClip = leftActive ? (currentChat == null ? "Clip-Path-Left" : "Clip-Path-Left-Chat") : "Clip-Path-Right";
  56. var selectedBarShift = leftActive ? 2 : 857;
  57. var limit = parseFloat(document.getElementById(selectedBar).getBBox().height) - 400;
  58. if (scroll > 5) scroll = 5;
  59. if (scroll < -limit) scroll = -limit;
  60. document.getElementById(selectedClip).setAttribute("transform", "translate(0,"+parseFloat(-scroll)+")");
  61. document.getElementById(selectedBar).setAttribute("transform", "translate("+selectedBarShift+","+(parseFloat(95+scroll))+")");
  62. if (leftActive) scroll_left = scroll; else scroll_right = scroll;
  63. return true;
  64. }
  65. function chatMessage(chatName, id, me, string) {
  66. var i=0;
  67. var colors=['#FDFDFD','#DFF1F4'];
  68. var x1 = 7;
  69. var y1 = 0;
  70. var container = chatName == "Chat" ? "Right-Bar" : "Left-Bar";
  71. var hover = chatName == "Chat" ? "barHover" : "onlineHover";
  72. var translate_y = parseFloat(document.getElementById(chatName).getBBox().height);
  73. var x2 = 205;
  74. var textElement = chatText(container,id,me,string);
  75. var dy = translate_y == 0 ? 0 : translate_y + 10;
  76. var html = "<g xmlns='http://www.w3.org/2000/svg' " +
  77. "id='Message-"+id+"' transform='translate(0,"+dy+")'></g>";
  78. var messageElement = svg(html);
  79. messageElement.appendChild(textElement);
  80. document.getElementById(chatName).appendChild(messageElement);
  81. create_multiline(textElement);
  82. var y2 = textElement.getBBox().height + 5;
  83. var box = "<path xmlns:data='"+container+"' xmlns='http://www.w3.org/2000/svg' d='M"+x1+","+y1+
  84. " L"+x2+","+y1+
  85. ((me == "Maxim") ?
  86. (" L"+x2+","+parseFloat(y2-7)+
  87. " L"+parseFloat(x2+7)+","+y2+
  88. " L"+x1+","+y2)
  89. :
  90. (" L"+x2+","+y2+
  91. " L"+0+","+y2+
  92. " L"+x1+","+parseFloat(y2-7)))
  93. + " L"+x1+","+y1+"' fill='"+colors[me=="Maxim"?1:0]+"'></path>";
  94. var boxElement = svg(box);
  95. textElement.setAttribute("xmlns:data",container)
  96. messageElement.insertBefore(boxElement,textElement);
  97. boxElement.setAttribute("mouseover",hover+"(evt);");
  98. boxElement.setAttribute("mouseout",hover+"Out(evt);");
  99. textElement.setAttribute("mouseover",hover+"(evt);");
  100. textElement.setAttribute("mouseout",hover+"Out(evt);");
  101. messageElement.setAttribute("onmouseover",hover+"(evt);");
  102. messageElement.setAttribute("onmouseout",hover+"Out(evt);");
  103. // console.log(messageElement);
  104. }
  105. function chatText(container, id, me, string) {
  106. var i = 0;
  107. var colors=['#3B5998'];
  108. var html = "<text xmlns:data='"+container+"' id='ChatText-"+id+"' width='180' " +
  109. " xmlns='http://www.w3.org/2000/svg' "+
  110. " font-family='Exo 2' font-size='16' font-weight='normal' fill='"+colors[i]+"'>" +
  111. string + "</text>";
  112. // console.log(html);
  113. return svg(html);
  114. }
  115. function showOnlineList(evt)
  116. {
  117. document.getElementById("onlineChatEdit").style.display = 'none';
  118. if (null != currentChat) { document.getElementById(currentChat).style.display = 'none'; }
  119. document.getElementById("Online-List").style.display = '';
  120. currentChat = null;
  121. scroll_left = 0;
  122. onlineHover();
  123. mouseWheelHandler({'detail':scroll_left,'wheelDelta':scroll_left});
  124. onlineHoverOut();
  125. }