reader.js 7.4 KB

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