render.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. "use strict";
  2. function opennamu_heading_folding(data, element = '') {
  3. let fol = document.getElementById(data);
  4. if(fol.style.display === '' || fol.style.display === 'inline-block' || fol.style.display === 'block') {
  5. document.getElementById(data).style.display = 'none';
  6. document.getElementById(data + '_sub').style.opacity = '0.5';
  7. } else {
  8. document.getElementById(data).style.display = 'block';
  9. document.getElementById(data + '_sub').style.opacity = '1';
  10. }
  11. if(element !== '') {
  12. console.log(element.innerHTML);
  13. if(element.innerHTML !== '⊖') {
  14. element.innerHTML = '⊖';
  15. } else {
  16. element.innerHTML = '⊕';
  17. }
  18. }
  19. }
  20. function opennamu_do_render_html(name = '') {
  21. if(document.getElementById(name)) {
  22. let data = document.getElementById(name).innerHTML;
  23. let src_list = ['www.youtube.com', 'www.google.com', 'play-tv.kakao.com'];
  24. let t_data = [
  25. 'b', 'i', 's', 'del', 'strong', 'bold', 'em', 'sub', 'sup',
  26. 'div', 'span',
  27. 'a',
  28. 'iframe'
  29. ];
  30. for(let key in t_data) {
  31. let patt = new RegExp(
  32. '<' + t_data[key] + '( (?:(?:(?!>).)+))?>((?:(?!<\/' + t_data[key] + '>).)*)<\/' + t_data[key] + '>',
  33. 'ig'
  34. );
  35. data = data.replace(patt, function(full, in_data, in_data_2) {
  36. if(['b', 'i', 's', 'del', 'strong', 'bold', 'em', 'sub', 'sup'].includes(t_data[key])) {
  37. return '<' + t_data[key] + '>' + in_data_2 + '</' + t_data[key] + '>'
  38. } else if(t_data[key] === 'div' || t_data[key] === 'span') {
  39. let style_data = in_data.match(/ style=['"]([^'"]*)['"]/);
  40. if(style_data) {
  41. style_data = style_data[1].replace(/position/ig, '');
  42. } else {
  43. style_data = '';
  44. }
  45. return '<' + t_data[key] + ' style="' + style_data + '">' + in_data_2 + '</' + t_data[key] + '>';
  46. } else if(t_data[key] === 'a') {
  47. let link_data = in_data.match(/ href=['"]([^'"]*)['"]/);
  48. if(link_data) {
  49. link_data = link_data[1].replace(/^javascript:/ig, '');
  50. } else {
  51. link_data = '';
  52. }
  53. return '<' + t_data[key] + ' class="opennamu_link_out" href="' + link_data + '">' + in_data_2 + '</' + t_data[key] + '>';
  54. } else if(t_data[key] === 'iframe') {
  55. let src_data = in_data.match(/ src=['"]([^'"]*)['"]/);
  56. if(src_data) {
  57. src_data = src_data[1];
  58. let src_check = src_data.match(/^http(?:s)?:\/\/([^/]+)/);
  59. if(src_check) {
  60. if(!src_list.includes(src_check[1])) {
  61. src_data = '';
  62. }
  63. } else {
  64. src_data = '';
  65. }
  66. } else {
  67. src_data = '';
  68. }
  69. let width_data = in_data.match(/ width=['"]([^'"]*)['"]/);
  70. if(width_data) {
  71. width_data = width_data[1];
  72. } else {
  73. width_data = '';
  74. }
  75. let height_data = in_data.match(/ height=['"]([^'"]*)['"]/);
  76. if(height_data) {
  77. height_data = height_data[1];
  78. } else {
  79. height_data = '';
  80. }
  81. return '<' + t_data[key] + ' src="' + src_data + '" width="' + width_data + '" height="' + height_data + '" allowfullscreen frameborder="0">' + in_data_2 + '</' + t_data[key] + '>';
  82. } else {
  83. let src_data = in_data.match(/ src=['"]([^'"]*)['"]/);
  84. if(src_data) {
  85. src_data = src_data[1];
  86. } else {
  87. src_data = '';
  88. }
  89. let width_data = in_data.match(/ width=['"]([^'"]*)['"]/);
  90. if(width_data) {
  91. width_data = width_data[1];
  92. } else {
  93. width_data = '';
  94. }
  95. let height_data = in_data.match(/ height=['"]([^'"]*)['"]/);
  96. if(height_data) {
  97. height_data = height_data[1];
  98. } else {
  99. height_data = '';
  100. }
  101. return '<' + t_data[key] + ' controls src="' + src_data + '" width="' + width_data + '" height="' + height_data + '">' + in_data_2 + '</' + t_data[key] + '>';
  102. }
  103. });
  104. }
  105. document.getElementById(name).innerHTML = data;
  106. }
  107. }
  108. function opennamu_do_footnote_spread(set_name, load_name) {
  109. if(document.getElementById(set_name + '_load').style.display === 'none') {
  110. document.getElementById(set_name).title = '';
  111. document.getElementById(set_name + '_load').innerHTML = '<a href="#' + load_name + '">(Go)</a> ' + document.getElementById(load_name + '_title').innerHTML;
  112. document.getElementById(set_name + '_load').style.display = "inline-block";
  113. } else {
  114. document.getElementById(set_name + '_load').style.display = "none";
  115. }
  116. }
  117. function opennamu_do_footnote_popover(set_name, load_name) {
  118. if(document.getElementById(set_name + '_load').style.display === 'none') {
  119. document.getElementById(set_name).title = '';
  120. document.getElementById(set_name + '_load').innerHTML = '<a href="#' + load_name + '">(Go)</a> ' + document.getElementById(load_name + '_title').innerHTML;
  121. document.getElementById(set_name + '_load').style.display = "inline-block";
  122. let width = document.getElementById(set_name + '_load').clientWidth;
  123. let screen_width = window.innerWidth;
  124. let left = document.getElementById(set_name).getBoundingClientRect().left;
  125. let left_org = document.getElementById(set_name + '_load').getBoundingClientRect().left;
  126. let top = window.pageYOffset + document.getElementById(set_name).getBoundingClientRect().top;
  127. document.getElementById(set_name + '_load').style.top = String(top) + "px";
  128. if(screen_width - (left + width) < 50) {
  129. if(left > 350) {
  130. document.getElementById(set_name + '_load').style.left = String(left - 300) + "px";
  131. } else {
  132. document.getElementById(set_name + '_load').style.left = "0px";
  133. }
  134. left = document.getElementById(set_name + '_load').getBoundingClientRect().left;
  135. width = document.getElementById(set_name + '_load').clientWidth;
  136. if(300 > width) {
  137. document.getElementById(set_name + '_load').style.left = String(left + (300 - width)) + "px";
  138. } else {
  139. document.getElementById(set_name + '_load').style.marginTop = "20px";
  140. }
  141. }
  142. } else {
  143. document.getElementById(set_name + '_load').style.display = "none";
  144. }
  145. }