bbs_w_post.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. "use strict";
  2. function opennamu_change_comment(get_id) {
  3. const input = document.querySelector('#opennamu_comment_select');
  4. if(input !== null) {
  5. input.value = get_id;
  6. document.getElementById('opennamu_comment_select')?.focus();
  7. }
  8. }
  9. function opennamu_return_comment() {
  10. const input = document.querySelector('#opennamu_comment_select');
  11. if(input !== null) {
  12. document.getElementById(input.value)?.focus();
  13. }
  14. }
  15. function opennamu_post_tabom(bbs_id, bbs_code) {
  16. fetch('/api/v2/bbs/w/tabom/' + bbs_id + '-' + bbs_code, {
  17. method : 'POST'
  18. }).then(function(res) {
  19. return res.json();
  20. }).then(function(data) {
  21. opennamu_load_tabom_count(bbs_id, bbs_code);
  22. });
  23. }
  24. function opennamu_load_tabom_count(bbs_id, bbs_code) {
  25. fetch('/api/v2/bbs/w/tabom/' + bbs_id + '-' + bbs_code).then(function(res) {
  26. return res.json();
  27. }).then(function(data) {
  28. if(data) {
  29. for(let for_a = 0; for_a < document.getElementsByClassName('opennamu_tabom_count').length; for_a++) {
  30. document.getElementsByClassName('opennamu_tabom_count')[for_a].innerHTML = data["data"];
  31. }
  32. }
  33. });
  34. }
  35. function opennamu_load_comment() {
  36. const url = window.location.pathname;
  37. const url_split = url.split('/');
  38. let bbs_id = url_split[3];
  39. let bbs_code = url_split[4];
  40. fetch('/api/v2/bbs/w/comment/' + bbs_id + '-' + bbs_code + '/normal').then(function(res) {
  41. return res.json();
  42. }).then(function(data) {
  43. let data_html = '';
  44. if(data) {
  45. let lang = data["language"];
  46. data = data["data"];
  47. let end_render = [];
  48. let select = '<select id="opennamu_comment_select" name="comment_select">';
  49. select += '<option value="0">' + lang["normal"] + '</option>';
  50. for(let for_a in data) {
  51. let data_in = data[for_a];
  52. let code_id = data_in["id"] + '-' + data_in["code"];
  53. code_id = code_id.replace(/^[0-9]+-[0-9]+-/, '');
  54. let count = 0;
  55. for(let for_a = 0; for_a < code_id.length; for_a++) {
  56. if(code_id[for_a] === '-') {
  57. count += 1;
  58. }
  59. }
  60. select += '<option value="' + code_id + '">' + code_id + '</option>';
  61. let color = 'default';
  62. let date = '';
  63. date += '<a href="javascript:opennamu_change_comment(\'' + code_id + '\');">(' + lang["comment"] + ')</a> ';
  64. date += '<a href="/bbs/tool/' + bbs_id + '/' + bbs_code + '/' + code_id + '">(' + lang["tool"] + ')</a> ';
  65. date += data_in["comment_date"];
  66. data_html += '<span style="padding-left: ' + String(20 * count) + 'px;"></span>';
  67. data_html += opennamu_get_thread_ui(
  68. data_in["comment_user_id_render"],
  69. date,
  70. '<div class="opennamu_comment_scroll" id="opennamu_thread_render_' + code_id + '">' + opennamu_xss_filter(data_in["comment"]) + '</div>',
  71. code_id,
  72. color,
  73. '',
  74. 'width: calc(100% - ' + String(20 * count) + 'px);',
  75. ''
  76. );
  77. end_render.push([
  78. data_in["comment"],
  79. code_id
  80. ]);
  81. }
  82. select += '</select> <a href="javascript:opennamu_return_comment();">(' + lang["return"] + ')</a>';
  83. select += '<hr class="main_hr">';
  84. if(document.getElementById('opennamu_bbs_w_post_select')) {
  85. document.getElementById('opennamu_bbs_w_post_select').innerHTML = select;
  86. }
  87. if(document.getElementById('opennamu_bbs_w_post_tabom')) {
  88. document.getElementById('opennamu_bbs_w_post_tabom').innerHTML = '' +
  89. '<a href="javascript:void(0);" id="opennamu_tabom_button">' +
  90. '<span class="opennamu_bbs_w_post_tabom opennamu_svg opennamu_svg_tabom">&nbsp;</span>' +
  91. '</a>' +
  92. '<hr class="main_hr">' +
  93. '<span>' + lang["upvote"] + '</span> <span class="opennamu_tabom_count"></span>' +
  94. '';
  95. }
  96. document.getElementById('opennamu_bbs_w_post').innerHTML = data_html;
  97. opennamu_load_tabom_count(bbs_id, bbs_code);
  98. document.getElementById('opennamu_tabom_button').addEventListener("click", function() {
  99. opennamu_post_tabom(bbs_id, bbs_code);
  100. });
  101. for(let for_a = 0; for_a < end_render.length; for_a++) {
  102. let observer = new IntersectionObserver(entries => {
  103. entries.forEach(entry => {
  104. if(entry.isIntersecting) {
  105. opennamu_do_render(
  106. 'opennamu_thread_render_' + end_render[for_a][1],
  107. end_render[for_a][0],
  108. '',
  109. 'thread'
  110. );
  111. observer.unobserve(entry.target);
  112. }
  113. });
  114. });
  115. observer.observe(document.getElementById('opennamu_thread_render_' + end_render[for_a][1]));
  116. }
  117. }
  118. });
  119. }