reader.js 7.3 KB

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