thread.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. // 좀 더 개선 필요
  2. // use strict 적용 필요 (eval 동작에 문제 있음)
  3. function opennamu_do_thread_make(topic_num, type_do = 'top', some = '', where = 'top_topic') {
  4. let url = '';
  5. if(type_do === 'top') {
  6. url = "/api/thread/" + topic_num + "/top";
  7. } else if(type_do === 'main') {
  8. url = "/api/thread/" + topic_num;
  9. } else {
  10. url = "/api/thread/" + topic_num + some;
  11. }
  12. let xhr = new XMLHttpRequest();
  13. xhr.open("GET", url, true);
  14. xhr.send(null);
  15. xhr.onreadystatechange = function() {
  16. if(this.readyState === 4 && this.status === 200) {
  17. let data_t = JSON.parse(this.responseText);
  18. let start = 0;
  19. let key_v = '/normal/1';
  20. let admin = '';
  21. let ip_first = '';
  22. let data_all = '';
  23. let data_all_js = '';
  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. if(data_i_pas === '') {
  42. data_i_pas = '<br>';
  43. } else {
  44. data_i_pas = data_i_pas.replace(
  45. /&lt;topic_a&gt;((?:(?!&lt;\/topic_a&gt;).)+)&lt;\/topic_a&gt;/g,
  46. '<a href="$1">$1</a>'
  47. );
  48. data_i_pas = data_i_pas.replace(
  49. /&lt;topic_call&gt;@((?:(?!&lt;\/topic_call&gt;).)+)&lt;\/topic_call&gt;/g,
  50. '<a href="/w/user:$1">@$1</a>',
  51. );
  52. }
  53. if(blind === 'O') {
  54. color_b = 'toron_color_not';
  55. } else {
  56. color_b = 'toron_color';
  57. }
  58. if(blind === 'O') {
  59. ip += ' <a href="/admin_log?search=blind%20(code%20' + topic_num + '#' + key + '">(B)</a>';
  60. if(admin === '1') {
  61. ip += ' <a href="/thread/' + topic_num + '/raw/' + key + '">(R)</a>';
  62. }
  63. }
  64. if(admin === '1' || blind !== 'O') {
  65. ip += ' <a href="/thread/' + topic_num + '/admin/' + key + '">(T)</a>';
  66. }
  67. if(type_do === 'top') {
  68. color_t = 'toron_color_red';
  69. } else if(blind === '1') {
  70. color_t = 'toron_color_blue';
  71. } else if(ip_o === ip_first) {
  72. color_t = 'toron_color_green';
  73. } else {
  74. color_t = 'toron_color_normal';
  75. }
  76. data_a += '' +
  77. '<table id="toron">' +
  78. '<tr>' +
  79. '<td id="' + color_t + '">' +
  80. '<a href="javascript:void(0);" id="' + key + '">#' + key + '</a> ' +
  81. ip +
  82. '<span style="float: right;">' + data_t[key]['date'] + '</span>' +
  83. '</td>' +
  84. '</tr>' +
  85. '<tr>' +
  86. '<td id="' + color_b + '">' +
  87. '<div id="topic_scroll">' + data_i_pas + '</div>' +
  88. '</td>' +
  89. '</tr>' +
  90. '</table>' +
  91. '<hr class="main_hr">' +
  92. ''
  93. data_all += data_a;
  94. data_all_js += data_t[key]['data_pas'][1] + '\n';
  95. }
  96. document.getElementById(where).innerHTML += data_all;
  97. eval(data_all_js);
  98. opennamu_do_ip_parser();
  99. if(type_do === 'top') {
  100. opennamu_do_thread_make(topic_num, 'main', '', 'main_topic');
  101. } else if(type_do === 'main') {
  102. let data_url_v = window.location.href.split('#');
  103. if(data_url_v.length !== 0) {
  104. if(document.getElementById(data_url_v[1])) {
  105. document.getElementById(data_url_v[1]).focus();
  106. }
  107. }
  108. opennamu_do_thread_make(topic_num, 're', key_v, where);
  109. } else if(type_do === 're') {
  110. setTimeout(function() {
  111. if(start === 0) {
  112. opennamu_do_thread_make(topic_num, 're', some, where);
  113. } else {
  114. opennamu_do_thread_make(topic_num, 're', key_v, where);
  115. }
  116. }, 2000);
  117. }
  118. }
  119. }
  120. }