func.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. "use strict";
  2. function opennamu_xss_filter(str) {
  3. return str.replace(/[&<>"']/g, function(match) {
  4. switch(match) {
  5. case '&':
  6. return '&amp;';
  7. case '<':
  8. return '&lt;';
  9. case '>':
  10. return '&gt;';
  11. case "'":
  12. return '&#x27;';
  13. case '"':
  14. return '&quot;';
  15. }
  16. });
  17. }
  18. function opennamu_xss_filter_decode(str) {
  19. return str.replace(/&amp;|&lt;|&gt;|&#x27;|&quot;/g, function(match) {
  20. switch(match) {
  21. case '&amp;':
  22. return '&';
  23. case '&lt;':
  24. return '<';
  25. case '&gt;':
  26. return '>';
  27. case '&#x27;':
  28. return "'";
  29. case '&quot;':
  30. return '"';
  31. }
  32. });
  33. }
  34. function opennamu_do_id_check(data) {
  35. if(data.match(/\.|\:/)) {
  36. return 0;
  37. } else {
  38. return 1;
  39. }
  40. }
  41. function opennamu_do_ip_render() {
  42. for(let for_a = 0; for_a < document.getElementsByClassName('opennamu_render_ip').length; for_a++) {
  43. let ip = document.getElementsByClassName('opennamu_render_ip')[for_a].innerHTML.replace(/&amp;/g, '&');
  44. fetch('/api/ip/' + opennamu_do_url_encode(ip)).then(function(res) {
  45. return res.json();
  46. }).then(function(data) {
  47. if(document.getElementsByClassName('opennamu_render_ip')[for_a].id !== "opennamu_render_end") {
  48. document.getElementsByClassName('opennamu_render_ip')[for_a].innerHTML = data["data"];
  49. document.getElementsByClassName('opennamu_render_ip')[for_a].id = "opennamu_render_end";
  50. }
  51. });
  52. }
  53. }
  54. function opennamu_do_url_encode(data) {
  55. return encodeURIComponent(data);
  56. }
  57. function opennamu_cookie_split_regex(data) {
  58. return new RegExp('(?:^|; )' + data + '=([^;]*)');
  59. }
  60. function opennamu_get_main_skin_set(set_name) {
  61. return fetch("/api/setting/" + opennamu_do_url_encode(set_name)).then(function(res) {
  62. return res.json();
  63. }).then(function(text) {
  64. if(
  65. document.cookie.match(opennamu_cookie_split_regex(set_name)) &&
  66. document.cookie.match(opennamu_cookie_split_regex(set_name))[1] !== '' &&
  67. document.cookie.match(opennamu_cookie_split_regex(set_name))[1] !== 'default'
  68. ) {
  69. return document.cookie.match(opennamu_cookie_split_regex(set_name))[1];
  70. } else {
  71. if(text[set_name]) {
  72. return text[set_name][0][0];
  73. } else {
  74. return '';
  75. }
  76. }
  77. });
  78. }
  79. function opennamu_send_render(data) {
  80. if(data == '&lt;br&gt;' || data == '' || data.match(/^ +$/)) {
  81. data = '<br>';
  82. } else {
  83. data = data.replace(/( |^)(https?:\/\/(?:[^ ]+))/g, function(m0, m1, m2) {
  84. let link_main = m2;
  85. link_main = link_main.replace('"', '&quot;');
  86. return m1 + '<a href="' + link_main + '">' + link_main + '</a>';
  87. });
  88. data = data.replace(/&lt;a(?:(?:(?!&gt;).)*)&gt;((?:(?!&lt;\/a&gt;).)+)&lt;\/a&gt;/g, function(m0, m1) {
  89. let data_unescape = opennamu_xss_filter_decode(m1)
  90. return '<a href="/w/' + opennamu_do_url_encode(data_unescape) + '">' + m1 + '</a>'
  91. })
  92. }
  93. return data;
  94. }
  95. function opennamu_insert_v(name, data) {
  96. document.getElementById(name).value = data;
  97. }
  98. function opennamu_do_trace_spread() {
  99. if(document.getElementsByClassName('opennamu_trace')) {
  100. document.getElementsByClassName('opennamu_trace')[0].innerHTML = '' +
  101. '<style>.opennamu_trace_button { display: none; } .opennamu_trace { white-space: pre-wrap; overflow-x: unset; text-overflow: unset; }</style>' +
  102. '' + document.getElementsByClassName('opennamu_trace')[0].innerHTML
  103. }
  104. }
  105. function opennamu_do_render(to_obj, data, name = '', do_type = '', option = '') {
  106. let url;
  107. if(do_type === '') {
  108. url = "/api/render";
  109. } else {
  110. url = "/api/render/" + do_type;
  111. }
  112. fetch(url, {
  113. method : 'POST',
  114. headers : { 'Content-Type': 'application/x-www-form-urlencoded' },
  115. body : new URLSearchParams({
  116. 'name' : name,
  117. 'data': data,
  118. 'option' : option
  119. })
  120. }).then(function(res) {
  121. return res.json();
  122. }).then(function(text) {
  123. if(document.getElementById(to_obj)) {
  124. if(text["data"]) {
  125. document.getElementById(to_obj).innerHTML = text["data"];
  126. eval(text["js_data"]);
  127. } else {
  128. document.getElementById(to_obj).innerHTML = '';
  129. }
  130. }
  131. });
  132. }
  133. function opennamu_page_control(url, page, data_length, data_length_max = 50) {
  134. let next = function() {
  135. if(data_length_max === data_length) {
  136. return '<a href="' + url.replace('{}', String(page + 1)) + '">(+)</a>';
  137. } else {
  138. return '';
  139. }
  140. };
  141. let back = function() {
  142. if(page !== 1) {
  143. return '<a href="' + url.replace('{}', String(page - 1)) + '">(-)</a>';
  144. } else {
  145. return '';
  146. }
  147. };
  148. return (back() + ' ' + next()).replace(/^ /, '');
  149. }
  150. function openamu_make_list(left = '', right = '', bottom = '') {
  151. let data_html = '<div class="opennamu_recent_change">';
  152. data_html += left;
  153. data_html += '<div style="float: right;">';
  154. data_html += right;
  155. data_html += '</div>'
  156. data_html += '<div style="clear: both;"></div>';
  157. if(bottom !== "") {
  158. data_html += '<hr>'
  159. data_html += bottom;
  160. }
  161. data_html += '</div>';
  162. data_html += '<hr class="main_hr">';
  163. return data_html;
  164. }