2
0

thread.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. // 폐지하고 다시 SSR 방식으로 전환 예정
  2. function opennamu_do_thread_make(topic_num, type_do = 'top', some = '', where = 'top_topic') {
  3. let url = '';
  4. if(type_do === 'top') {
  5. url = "/api/thread/" + topic_num + "/top";
  6. } else if(type_do === 'main') {
  7. url = "/api/thread/" + topic_num;
  8. } else {
  9. url = "/api/thread/" + topic_num + some;
  10. }
  11. let xhr = new XMLHttpRequest();
  12. xhr.open("GET", url);
  13. xhr.send();
  14. xhr.onreadystatechange = function() {
  15. if(this.readyState === 4 && this.status === 200) {
  16. let data_t = JSON.parse(this.responseText);
  17. let start = 0;
  18. let key_v = '/normal/1';
  19. let admin = '';
  20. let ip_first = '';
  21. let data_all = '';
  22. let data_all_js = '';
  23. let count = 0;
  24. for(let key in data_t) {
  25. let data_a = '';
  26. if(start === 0) {
  27. admin = data_t['data_main']['admin'];
  28. ip_first = data_t['data_main']['ip_first'];
  29. start = 1;
  30. }
  31. if(key === 'data_main') {
  32. continue;
  33. }
  34. key_v = '/normal/' + String(Number(key) + 1);
  35. let color_b = '';
  36. let color_t = '';
  37. let ip = data_t[key]['ip_pas'];
  38. let ip_o = data_t[key]['ip'];
  39. let blind = data_t[key]['blind'];
  40. let data_i_pas = data_t[key]['data_pas'][0];
  41. let data_get_list = [];
  42. if(data_i_pas === '') {
  43. data_i_pas = '<br>';
  44. } else {
  45. let load_thread_regex = /&lt;topic_a&gt;((?:(?!&lt;\/topic_a&gt;).)+)&lt;\/topic_a&gt;/g;
  46. data_get_list = data_i_pas.match(load_thread_regex);
  47. data_i_pas = data_i_pas.replace(load_thread_regex, '<a href="$1">$1</a>');
  48. data_i_pas = data_i_pas.replace(/&lt;topic_call&gt;@((?:(?!&lt;\/topic_call&gt;).)+)&lt;\/topic_call&gt;/g, '<a href="/w/user:$1">@$1</a>');
  49. }
  50. if(blind === 'O') {
  51. color_b = 'opennamu_comment_blind';
  52. } else {
  53. color_b = 'opennamu_comment_blind_not';
  54. }
  55. if(blind === 'O') {
  56. ip += ' <a href="/list/admin/auth_use/' + opennamu_do_url_encode('blind (code ' + topic_num + '#' + key) + '/1">(B)</a>';
  57. if(admin === '1') {
  58. ip += ' <a href="javascript:opennamu_do_open_comment(\'' + key + '\');">(O)</a>';
  59. }
  60. }
  61. if(admin === '1' || blind !== 'O') {
  62. ip += ' <a href="/thread/' + topic_num + '/comment/' + key + '/tool">(T)</a>';
  63. }
  64. if(type_do === 'top') {
  65. color_t = 'opennamu_comment_color_red';
  66. } else if(blind === '1') {
  67. color_t = 'opennamu_comment_color_blue';
  68. } else if(blind === 'O') {
  69. color_t = 'opennamu_comment_color_gray';
  70. } else if(ip_o === ip_first) {
  71. color_t = 'opennamu_comment_color_green';
  72. } else {
  73. color_t = 'opennamu_comment_color_default';
  74. }
  75. data_a += '' +
  76. '<table class="opennamu_comment">' +
  77. '<tr>' +
  78. '<td class="' + color_t + '">' +
  79. '<a href="#thread_shortcut" id="' + key + '">#' + key + '</a> ' +
  80. ip +
  81. '<span style="float: right;">' + data_t[key]['date'] + '</span>' +
  82. '</td>' +
  83. '</tr>' +
  84. '<tr>' +
  85. '<td class="' + color_b + '" id="opennamu_comment_data_' + key + '">' +
  86. '<div class="opennamu_comment_scroll">' + data_i_pas + '</div>' +
  87. '</td>' +
  88. '</tr>' +
  89. '</table>' +
  90. '<hr class="main_hr">' +
  91. ''
  92. document.getElementById(where).innerHTML += data_a;
  93. count += 1;
  94. data_all_js += data_t[key]['data_pas'][1] + '\n';
  95. if(count > 100) {
  96. eval(data_all_js);
  97. count = 0;
  98. data_all_js = '';
  99. }
  100. }
  101. eval(data_all_js);
  102. if(type_do === 'top') {
  103. opennamu_do_thread_make(topic_num, 'main', '', 'main_topic');
  104. } else if(type_do === 'main') {
  105. let data_url_v = window.location.hash.replace(/^#/, '');
  106. if(data_url_v !== '') {
  107. if(document.getElementById(data_url_v)) {
  108. document.getElementById(data_url_v).focus();
  109. }
  110. }
  111. opennamu_do_thread_make(topic_num, 're', key_v, where);
  112. } else if(type_do === 're') {
  113. setTimeout(function() {
  114. if(start === 0) {
  115. opennamu_do_thread_make(topic_num, 're', some, where);
  116. } else {
  117. opennamu_do_thread_make(topic_num, 're', key_v, where);
  118. }
  119. }, 2000);
  120. }
  121. }
  122. }
  123. }
  124. function opennamu_do_open_comment(key) {
  125. let element_state = document.getElementById('opennamu_comment_data_' + key).style.display;
  126. if(!element_state || element_state === 'none') {
  127. document.getElementById('opennamu_comment_data_' + key).style.display = 'block';
  128. } else {
  129. document.getElementById('opennamu_comment_data_' + key).style.display = 'none';
  130. }
  131. }
  132. if(window.location.pathname.match(/^\/(thread|thread_preview)\//)) {
  133. let thread_num = window.location.pathname.match(/^\/(?:thread|thread_preview)\/([0-9]+)/)[1];
  134. opennamu_do_thread_make(thread_num);
  135. } else if(window.location.pathname.match(/^\/topic\//)) {
  136. for(let for_a = 0; document.getElementsByClassName('topic_pre')[for_a]; for_a++) {
  137. let thread_num = document.getElementsByClassName('topic_pre')[for_a].id;
  138. thread_num = thread_num.match(/^opennamu_thread_([0-9]+)/)[1];
  139. opennamu_do_thread_make(thread_num, "list", "/normal/1", "opennamu_thread_" + thread_num);
  140. let xhr = new XMLHttpRequest();
  141. xhr.open("GET", "/api/thread/" + thread_num + "/length");
  142. xhr.send();
  143. xhr.onreadystatechange = function() {
  144. if(this.readyState === 4 && this.status === 200) {
  145. let thread_length = JSON.parse(this.responseText)['length'];
  146. if(thread_length !== '1') {
  147. opennamu_do_thread_make(thread_num, "list", "/normal/" + thread_length, "opennamu_thread_back_" + thread_num);
  148. }
  149. }
  150. }
  151. }
  152. }