reader.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. var _reader_view = "sent";
  2. var _reader_sent_id = -1;
  3. var _reader_book = -1;
  4. var _reader_para = -1;
  5. var _reader_begin = -1;
  6. var _reader_end = -1;
  7. var _channal = "";
  8. var _lang = "";
  9. var _author = "";
  10. var _display = "para";
  11. var _direction = "row";
  12. var arrMyTerm = new Array();
  13. var _sent_data = new Array();
  14. var link_str = "";
  15. palicanon_load_term();
  16. function reader_load() {
  17. let param;
  18. if (_reader_view == "sim") {
  19. param = { view: "sim", id: _reader_sent_id };
  20. } else {
  21. param = {
  22. view: _reader_view,
  23. book: _reader_book,
  24. para: _reader_para,
  25. begin: _reader_begin,
  26. end: _reader_end,
  27. };
  28. }
  29. $.get("../reader/get_para.php", param, function (data) {
  30. _sent_data = JSON.parse(data);
  31. let tpl = "";
  32. let currPara = 0;
  33. $("#contents").html("");
  34. if (_sent_data.sentences.length > 0) {
  35. let firstPara = _sent_data.sentences[0].paragraph;
  36. for (const iterator of _sent_data.sentences) {
  37. if (currPara != iterator.paragraph && _reader_view != "sim") {
  38. currPara = parseInt(iterator.paragraph);
  39. if (currPara == parseInt(_reader_para) + 1 && parseInt(_reader_para) != firstPara) {
  40. tpl += "</div>\n\n";
  41. }
  42. tpl += "\n\n";
  43. tpl += "```para\n";
  44. tpl += currPara + "\n";
  45. tpl += "```\n\n";
  46. if (currPara == _reader_para && parseInt(_reader_para) != firstPara) {
  47. tpl += "<div id='para_focus' class='focus'>\n\n";
  48. }
  49. }
  50. tpl +=
  51. "{{" +
  52. iterator.book +
  53. "-" +
  54. iterator.paragraph +
  55. "-" +
  56. iterator.begin +
  57. "-" +
  58. iterator.end +
  59. "}}\n";
  60. }
  61. link_str = tpl;
  62. $("#contents").html(note_init(tpl));
  63. note_refresh_new(function () {
  64. document.querySelector("#para_focus").scrollIntoView({
  65. block: "end",
  66. behavior: "smooth",
  67. });
  68. //document.querySelector("#para_focus").scrollTo(0, 200);
  69. });
  70. reader_draw_para_menu();
  71. //右侧目录
  72. let tocHtml = "";
  73. let tocNextMenu = "";
  74. if (_sent_data.toc.length > 0) {
  75. let firstLevel = _sent_data.toc[0].level;
  76. for (let index = 1; index < _sent_data.toc.length; index++) {
  77. const element = _sent_data.toc[index];
  78. tocHtml +=
  79. "<div class='reader_right_toc level_" +
  80. (element.level - firstLevel) +
  81. "'><a href='#para_" +
  82. element.paragraph +
  83. "'>" +
  84. element.toc +
  85. "</a></div>";
  86. tocNextMenu +=
  87. "<a href='../reader/?view=chapter&book=" +
  88. _reader_book +
  89. "&par=" +
  90. element.paragraph +
  91. "'>" +
  92. element.toc +
  93. "</a>";
  94. }
  95. $("#toc_content").html(tocHtml);
  96. if (tocNextMenu === "") {
  97. $("#para_path_next_level").hide();
  98. } else {
  99. $("#toc_next_menu").html(tocNextMenu);
  100. $("#para_path_next_level").show();
  101. }
  102. }
  103. }
  104. if (_sent_data.head == 1 || _sent_data.sentences.length == 0) {
  105. //渲染目录
  106. tpl = "<h2>Table of Content</h2>";
  107. if (_sent_data.toc.length > 0) {
  108. let firstLevel = _sent_data.toc[0].level;
  109. for (let index = 1; index < _sent_data.toc.length; index++) {
  110. const element = _sent_data.toc[index];
  111. if (element.level < 8) {
  112. tpl +=
  113. "<div class='reader_main_toc level_" +
  114. (element.level - firstLevel) +
  115. "'><a href='../reader/?view=chapter&book=" +
  116. _reader_book +
  117. "&par=" +
  118. element.paragraph +
  119. "&display=" +
  120. _display +
  121. "'>" +
  122. element.toc +
  123. "</a></div>";
  124. }
  125. }
  126. }
  127. $("#contents_toc").html(tpl);
  128. }
  129. });
  130. reader_get_path();
  131. }
  132. function reader_draw_para_menu() {
  133. $(".language-para").each(function () {
  134. let strPara = $(this).text();
  135. $(this).addClass("case_dropdown");
  136. let html = "<a name='para_" + strPara + "'></a>";
  137. html += "<div class='case_dropdown-content para_menu'>";
  138. if (typeof _reader_view != "undefined" && _reader_view != "para") {
  139. html += "<a onclick=\"junp_to_para('" + _reader_book + "','" + strPara + "')\">仅显示此段</a>";
  140. }
  141. html += "<a onclick=\"edit_wbw('" + _reader_book + "','" + strPara + "')\">" + gLocal.gui.edit_now + "</a>";
  142. html += "<a onclick='goto_nissaya(" + _reader_book + "," + strPara + ")'>" + gLocal.gui.show_nissaya + "</a>";
  143. html +=
  144. "<a onclick=\"copy_para_ref('" + _reader_book + "','" + strPara + "')\">" + gLocal.gui.copy_to_clipboard + "</a>";
  145. html +=
  146. "<a onclick=\"copy_text('" +
  147. _reader_book +
  148. "','" +
  149. strPara +
  150. "')\">" +
  151. gLocal.gui.copy +
  152. "“" +
  153. gLocal.gui.pāli +
  154. "”</a>";
  155. html +=
  156. "<a onclick=\"add_to_list('" +
  157. _reader_book +
  158. "','" +
  159. strPara +
  160. "')\">" +
  161. gLocal.gui.add_to_edit_list +
  162. "</a>";
  163. html += "</div>";
  164. $(this).append(html);
  165. });
  166. }
  167. function junp_to_para(book, para) {
  168. let url = "../reader/?view=para&book=" + book + "&par=" + para + "&display=sent";
  169. location.assign(url);
  170. }
  171. function copy_para_ref(book, para) {
  172. let output = "";
  173. let currPara = para;
  174. for (const iterator of _sent_data.sentences) {
  175. if (iterator.book == book && iterator.paragraph == para) {
  176. output += "{{" + book + "-" + para + "-" + iterator.begin + "-" + iterator.end + "}}\n";
  177. }
  178. }
  179. output += "\n";
  180. copy_to_clipboard(output);
  181. }
  182. function reader_get_path() {
  183. $.get(
  184. "../reader/get_config.php",
  185. {
  186. book: _reader_book,
  187. para: _reader_para,
  188. },
  189. function (data) {
  190. $("#para_path").html(data);
  191. $("chapter").each(function () {
  192. //替换为本地语言字符串
  193. let title = $(this).text();
  194. let strLocalTitle = "";
  195. if (
  196. (strLocalTitle = term_lookup_my(
  197. title,
  198. _channal.split()[0],
  199. getCookie("userid"),
  200. getCookie("language")
  201. ))
  202. ) {
  203. $(this).html(strLocalTitle.word);
  204. } else if (
  205. (strLocalTitle = term_lookup_my_a(
  206. title,
  207. _channal.split()[0],
  208. getCookie("userid"),
  209. getCookie("language")
  210. ))
  211. ) {
  212. let newLocal = title.replace(strLocalTitle.word, strLocalTitle.meaning);
  213. $(this).html(newLocal);
  214. }
  215. });
  216. var bookTitle = $("chapter").first().html();
  217. let suttaTitle = $("chapter").last().html();
  218. $("#pali_pedia").html(bookTitle);
  219. $("#article_title").html(suttaTitle);
  220. $("#page_title").text(suttaTitle);
  221. if (_reader_view == "chapter") {
  222. //$("chapter").last().hide();
  223. }
  224. }
  225. );
  226. }
  227. function palicanon_load_term() {
  228. $.get(
  229. "../term/term.php",
  230. {
  231. op: "my",
  232. },
  233. function (data) {
  234. arrMyTerm = JSON.parse(data);
  235. }
  236. );
  237. }
  238. function set_channal(channalid) {
  239. let url = "../reader/?view=" + _reader_view;
  240. if (_reader_book != -1) {
  241. url += "&book=" + _reader_book;
  242. }
  243. if (_reader_para != -1) {
  244. url += "&par=" + _reader_para;
  245. }
  246. if (_reader_begin != -1) {
  247. url += "&begin=" + _reader_begin;
  248. }
  249. if (_reader_end != -1) {
  250. url += "&end=" + _reader_end;
  251. }
  252. if (channalid != "") {
  253. url += "&channal=" + channalid;
  254. }
  255. if (_display != "") {
  256. url += "&display=" + _display;
  257. }
  258. if (_mode != "") {
  259. url += "&mode=" + _mode;
  260. }
  261. if (_direction != "") {
  262. url += "&direction=" + _direction;
  263. }
  264. location.assign(url);
  265. }
  266. function edit_wbw(book, para) {
  267. wbw_channal_list_open(book, [para]);
  268. }
  269. function setMode(mode = "read") {
  270. let url = "../reader/?view=" + _reader_view;
  271. if (_reader_sent_id != -1) {
  272. url += "&id=" + _reader_sent_id;
  273. }
  274. if (_reader_book != -1) {
  275. url += "&book=" + _reader_book;
  276. }
  277. if (_reader_para != -1) {
  278. url += "&par=" + _reader_para;
  279. }
  280. if (_reader_begin != -1) {
  281. url += "&begin=" + _reader_begin;
  282. }
  283. if (_reader_end != -1) {
  284. url += "&end=" + _reader_end;
  285. }
  286. if (_channal != "") {
  287. url += "&channal=" + _channal;
  288. }
  289. if (_display != "") {
  290. if (mode == "read") {
  291. url += "&display=" + _display;
  292. } else {
  293. url += "&display=sent";
  294. }
  295. }
  296. if (mode != "") {
  297. url += "&mode=" + mode;
  298. }
  299. location.assign(url);
  300. }