reader.php 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <link type="text/css" rel="stylesheet" href="css/reader.css"/>
  7. <link type="text/css" rel="stylesheet" href="css/reader_mob.css" media="screen and (max-width:767px)">
  8. <title id="page_title">PCD Reader</title>
  9. <script src="js/jquery-3.3.1.min.js"></script>
  10. <script src="js/fixedsticky.js"></script>
  11. <script src="js/reader.js"></script>
  12. <script src="../term/term.js"></script>
  13. <script src="../term/note.js"></script>
  14. <script>
  15. var curr_tool="";
  16. var dighest_count=0;//书摘段落数量
  17. var res_list=new Array();
  18. var new_comments_album=-1;
  19. var new_comments_book=-1;
  20. var new_comments_paragraph=-1;
  21. function add_new_res(album,book,paragraph,text){
  22. var new_res=new Object();
  23. new_res.album=album;
  24. new_res.book=book;
  25. new_res.paragraph=paragraph;
  26. new_res.dighest=false;
  27. new_res.text=text;
  28. new_res.textchanged=false;
  29. res_list.push(new_res);
  30. }
  31. function tool_changed(tool_name){
  32. if(tool_name==curr_tool){
  33. return;
  34. }
  35. $("#main_tool_bar").fadeOut();
  36. curr_tool=tool_name;
  37. switch(tool_name){
  38. case "comments":
  39. $("#tool_bar_dighest").fadeOut();
  40. $("#tool_bar_comments").fadeIn();
  41. break;
  42. case "dighest":
  43. $("#tool_bar_comments").fadeOut();
  44. $("#tool_bar_dighest").fadeIn();
  45. break;
  46. case "fix":
  47. $("#tool_bar_comments").fadeOut();
  48. $("#tool_bar_fix").fadeIn();
  49. render_all_tran();
  50. break;
  51. }
  52. }
  53. function paragraph_click(album,book,paragraph){
  54. switch(curr_tool){
  55. case "comments":
  56. new_comments(album,book,paragraph);
  57. break;
  58. case "dighest":
  59. dighest_par_click(album,book,paragraph);
  60. break;
  61. }
  62. }
  63. function new_comments(album,book,paragraph){
  64. new_comments_album=album;
  65. new_comments_book=book;
  66. new_comments_paragraph=paragraph;
  67. document.getElementById("new-comm-a"+album+"-b"+book+"-"+paragraph).appendChild(document.getElementById("new_comm_div"));
  68. }
  69. function new_comm_cancel(){
  70. $("#tool_bar_comments").fadeOut();
  71. $("#main_tool_bar").fadeIn();
  72. document.getElementById("new_comm_text").value="";
  73. document.getElementById("new_comm_shell").appendChild(document.getElementById("new_comm_div"));
  74. curr_tool="";
  75. }
  76. function new_comm_submit(){
  77. $("#tool_bar_comments").fadeOut();
  78. $("#main_tool_bar").fadeIn();
  79. curr_tool="";
  80. var comm_text=document.getElementById("new_comm_text").value;
  81. $.post("comments.php",
  82. {
  83. album:new_comments_album,
  84. book:new_comments_book,
  85. paragraph:new_comments_paragraph,
  86. text:comm_text
  87. },
  88. function(data,status){
  89. alert("Data: " + data + "\nStatus: " + status);
  90. });
  91. }
  92. //书摘处理
  93. function dighest_par_click(album,book,paragraph){
  94. for (var x in res_list){
  95. if(
  96. res_list[x].album==album &&
  97. res_list[x].book==book &&
  98. res_list[x].paragraph==paragraph){
  99. if(res_list[x].dighest==false){
  100. res_list[x].dighest=true;
  101. res_list[x].text=document.getElementById("text-a"+album+"-b"+book+"-"+paragraph).innerHTML;
  102. $("#text-a"+album+"-b"+book+"-"+paragraph).css("background-color","yellow");
  103. dighest_count++;
  104. }
  105. else{
  106. res_list[x].dighest=false;
  107. $("#text-a"+album+"-b"+book+"-"+paragraph).css("background-color","white");
  108. dighest_count--;
  109. }
  110. }
  111. }
  112. $("#dighest_message").text="已经选择"+dighest_count+"段";
  113. }
  114. //将段落列表重置
  115. function dighest_reset_res_list(){
  116. for (var x in res_list){
  117. var album=res_list[x].album;
  118. var book=res_list[x].book;
  119. var paragraph=res_list[x].paragraph;
  120. if(res_list[x].dighest==false){
  121. dighest_count=0;
  122. }
  123. else{
  124. res_list[x].dighest=false;
  125. $("#text-a"+album+"-b"+book+"-"+paragraph).css("background-color","white");
  126. dighest_count=0;
  127. }
  128. }
  129. }
  130. function dighest_cancle(){
  131. $("#tool_bar_dighest").fadeOut();
  132. $("#main_tool_bar").fadeIn();
  133. curr_tool="";
  134. //将段落列表重置
  135. dighest_reset_res_list();
  136. }
  137. function dighest_ok(){
  138. var output="";
  139. for (var x in res_list){
  140. if(res_list[x].dighest==true){
  141. output+="<p>"+res_list[x].text+"</p>";
  142. }
  143. }
  144. //书摘文字预览
  145. document.getElementById("dighest_text_preview").innerHTML=output;
  146. $("#tool_bar_dighest").fadeOut();
  147. $("#dighest_edit_div").fadeIn();
  148. }
  149. function dighest_edit_cancle(){
  150. $("#dighest_edit_div").fadeOut();
  151. $("#main_tool_bar").fadeIn();
  152. curr_tool="";
  153. //将段落列表重置
  154. dighest_reset_res_list();
  155. }
  156. function dighest_edit_submit(){
  157. $("#dighest_edit_div").fadeOut();
  158. $("#main_tool_bar").fadeIn();
  159. curr_tool="";
  160. //计算书摘数量 生成书摘字符串
  161. if(res_list.length==0){
  162. return;
  163. }
  164. var output=new Array();
  165. for (var x in res_list){
  166. if(res_list[x].dighest==true){
  167. output.push(res_list[x].album+"-"+res_list[x].book+"-"+res_list[x].paragraph);
  168. }
  169. }
  170. var dighest_text=output.join();
  171. var dighest_title=document.getElementById("dighest_edit_title").value;
  172. var dighest_summary=document.getElementById("dighest_edit_summary").value;
  173. var dighest_tag=document.getElementById("dighest_edit_taget").value;
  174. if(dighest_title==""){alert("标题不能为空");return;}
  175. if(dighest_summary==""){alert("简介不能为空");return;}
  176. if(dighest_tag==""){alert("标签不能为空");return;}
  177. $.post("dighest.php",
  178. {
  179. title:dighest_title,
  180. summary:dighest_summary,
  181. tag:dighest_tag,
  182. data:dighest_text
  183. },
  184. function(data,status){
  185. alert("Data: " + data + "\nStatus: " + status);
  186. });
  187. //将段落列表重置
  188. dighest_reset_res_list();
  189. }
  190. function setNaviVisibility(){
  191. var objNave = document.getElementById('leftmenuinner');
  192. var objblack = document.getElementById('BV');
  193. if ( objNave.className=='viewswitch_off'){
  194. objblack.style.display = "block";
  195. objNave.className = "viewswitch_on";
  196. }
  197. else{
  198. objblack.style.display = "none";
  199. objNave.className = "viewswitch_off";
  200. }
  201. }
  202. function render_all_tran(mode="fix"){
  203. for (var x in res_list){
  204. var album=res_list[x].album;
  205. var book=res_list[x].book;
  206. var paragraph=res_list[x].paragraph;
  207. var text=res_list[x].text;
  208. if(mode=="fix"){
  209. var new_text=getSuperTranslateModifyString(x);
  210. }
  211. else{
  212. var new_text=text;
  213. }
  214. var obj=document.getElementById("text-a"+album+"-b"+book+"-"+paragraph);
  215. if(obj){
  216. obj.innerHTML=new_text;
  217. }
  218. }
  219. }
  220. function getSuperTranslateModifyString(index){
  221. var newString = res_list[index].text.replace(/。/g,"。#");
  222. newString = newString.replace(/,/g,",#");
  223. newString = newString.replace(/!/g,"!#");
  224. newString = newString.replace(/?/g,"?#");
  225. newString = newString.replace(/”/g,"”#");
  226. newString = newString.replace(/“/g,"“#");
  227. newString = newString.replace(/’/g,"’#");
  228. arrString = newString.split("#");
  229. var output="";
  230. var str_pos=0;
  231. for (x in arrString){
  232. var str_len=arrString[x].length;
  233. str_pos+=str_len;
  234. output +=arrString[x]+"<span class=\"tooltip\">※<span class=\"tooltiptext tooltip-bottom\"><button onclick='text_move("+index+"," + str_pos + ",0)'>▲</button> <button onclick='text_move("+index+"," + str_pos + ",1)'>▼</button> </span> </span> ";
  235. }
  236. return output;
  237. }
  238. function text_move(index,str_pos,updown){
  239. if(updown==0 && index==0){
  240. return;
  241. }
  242. if(updown==1 && index==res_list.length-1){
  243. return;
  244. }
  245. if(updown==0){
  246. res_list[index-1].text+=res_list[index].text.substring(0,str_pos);
  247. res_list[index-1].textchanged=true;
  248. res_list[index].text=res_list[index].text.substring(str_pos);
  249. res_list[index].textchanged=true;
  250. }
  251. else{
  252. res_list[index+1].text=res_list[index].text.substring(str_pos)+res_list[index+1].text;
  253. res_list[index+1].textchanged=true;
  254. res_list[index].text=res_list[index].text.substring(0,str_pos);
  255. res_list[index].textchanged=true;
  256. }
  257. render_all_tran();
  258. }
  259. function fix_cancle(){
  260. $("#tool_bar_fix").fadeOut();
  261. $("#main_tool_bar").fadeIn();
  262. curr_tool="";
  263. render_all_tran("");
  264. }
  265. function fix_ok(){
  266. $("#tool_bar_fix").fadeOut();
  267. $("#main_tool_bar").fadeIn();
  268. curr_tool="";
  269. render_all_tran("");
  270. //计算书摘数量 生成书摘字符串
  271. if(res_list.length==0){
  272. return;
  273. }
  274. var output=new Array();
  275. for (var x in res_list){
  276. if(res_list[x].textchanged==true){
  277. output.push(res_list[x].album+"@"+res_list[x].book+"@"+res_list[x].paragraph+"@"+res_list[x].text);
  278. res_list[x].textchanged=false;
  279. }
  280. }
  281. var fix_text=output.join("#");
  282. var fix_album=res_list[0].album;
  283. $.post("tran_text.php",
  284. {
  285. album:fix_album,
  286. data:fix_text
  287. },
  288. function(data,status){
  289. alert("Data: " + data + "\nStatus: " + status);
  290. });
  291. }
  292. function lookup(){
  293. var xPali=document.getElementsByClassName("pali");
  294. for (var x in xPali){
  295. var pali = xPali[x].innerHTML;
  296. var xMean=xPali[x].nextSibling;
  297. if(bh[pali]){
  298. var arrMean=bh[pali].split("$");
  299. if(arrMean.length>0){
  300. xMean.innerHTML=arrMean[0];
  301. }
  302. }
  303. else if(sys_r[pali]){
  304. var word_parent=sys_r[pali];
  305. if(bh[word_parent]){
  306. var arrMean=bh[word_parent].split("$");
  307. if(arrMean.length>0){
  308. xMean.innerHTML=arrMean[0];
  309. }
  310. }
  311. }
  312. }
  313. }
  314. </script>
  315. <body class="reader_body" >
  316. <?php
  317. require_once "../public/_pdo.php";
  318. require_once "../path.php";
  319. ?>
  320. <style>
  321. #para_nav {
  322. display: flex;
  323. justify-content: space-between;
  324. padding: 5px 1em;
  325. border-top: 1px solid gray;
  326. }
  327. .word{
  328. display:inline-block;
  329. padding: 1px 3px;
  330. }
  331. .mean{
  332. font-size: 65%;
  333. }
  334. /* 下拉内容 (默认隐藏) */
  335. #mean_menu {
  336. margin: 0.3em;
  337. position: absolute;
  338. background-color: white;
  339. min-width: 8em;
  340. max-width: 30em;
  341. margin: -1px 0px;
  342. box-shadow: 0px 3px 13px 0px black;
  343. color: var(--main-color);
  344. z-index: 200;
  345. }
  346. /* 下拉菜单的链接 */
  347. #mean_menu a {
  348. /*padding: 0.3em 0.4em;*/
  349. line-height: 160%;
  350. text-decoration: none;
  351. display: block;
  352. cursor: pointer;
  353. text-align: left;
  354. font-size:80%;
  355. }
  356. /* 鼠标移上去后修改下拉菜单链接颜色 */
  357. .mean_menu a:hover {
  358. background-color: blue;
  359. color: white;
  360. }
  361. .par_pali_div{
  362. margin-top:1em;
  363. }
  364. .par_pali_div{
  365. font-weight:700;
  366. }
  367. sent{
  368. font-weight:500;
  369. font-size:110%;
  370. line-height: 150%;
  371. }
  372. sent:hover{
  373. background-color:#fefec1;
  374. }
  375. para{
  376. color: white;
  377. background-color: #b76f03a3;
  378. min-width: 2em;
  379. display: inline-block;
  380. text-align: center;
  381. padding: 2px 10px;
  382. border-radius: 99px;
  383. margin-right: 5px;
  384. cursor:pointer;
  385. }
  386. para:hover{
  387. }
  388. .sent_count{
  389. font-size:80%;
  390. color: white;
  391. background-color: #1cb70985;
  392. min-width: 2em;
  393. display: inline-block;
  394. text-align: center;
  395. padding: 2px 0;
  396. border-radius: 99px;
  397. margin-left: 5px;
  398. cursor:pointer;
  399. }
  400. </style>
  401. <!-- tool bar begin-->
  402. <div id="main_tool_bar" class='reader_toolbar'>
  403. <div id="index_nav">
  404. <button onclick="setNaviVisibility()">M</button>
  405. </div>
  406. <div>
  407. <span id="tool_bar_title">Title</span>
  408. </div>
  409. <div>
  410. <div class="case_dropdown">
  411. <p class="case_dropbtn"><button>A</button></p>
  412. <div class="case_dropdown-content" style="right: 0;width:10em;">
  413. <div ><button>A+</button><button>A-</button></div>
  414. <div ><button>白</button><button>棕</button><button>夜s</button></div>
  415. </div>
  416. </div>
  417. <div class="case_dropdown">
  418. <p class="case_dropbtn"><button>┇</button></p>
  419. <div class="case_dropdown-content" style="right: 2em;min-width:6em;">
  420. <a onclick="tool_changed('dighest')">书摘</a>
  421. <a onclick="tool_changed('comments')">批注</a>
  422. <a onclick="tool_changed('target')">标签</a>
  423. <a onclick="tool_changed('layout')">布局</a>
  424. <a onclick="tool_changed('porpername')">术语</a>
  425. <a onclick="tool_changed('share')">分享</a>
  426. <a onclick="tool_changed('fix')">修改</a>
  427. </div>
  428. </div>
  429. </div>
  430. </div>
  431. <div id="tool_bar_comments">
  432. <div class='reader_toolbar' style="height:auto;">
  433. <div>
  434. </div>
  435. <div>
  436. <span>单击段落文字添加批注</span>
  437. </div>
  438. <div>
  439. </div>
  440. </div>
  441. </div>
  442. <div id="tool_bar_dighest">
  443. <div class='reader_toolbar' style="height:auto;">
  444. <div>
  445. <button onclick="dighest_cancle()">取消</button>
  446. </div>
  447. <div>
  448. <span id="dighest_message">单击文字选择段落</span>
  449. </div>
  450. <div>
  451. <button onclick="dighest_ok()">完成</button>
  452. </div>
  453. </div>
  454. </div>
  455. <div id="tool_bar_fix">
  456. <div class='reader_toolbar' style="height:auto;">
  457. <div>
  458. <button onclick="fix_cancle()">取消</button>
  459. </div>
  460. <div>
  461. <span id="fix_message">单击按钮调整段落</span>
  462. </div>
  463. <div>
  464. <button onclick="fix_ok()">完成</button>
  465. </div>
  466. </div>
  467. </div>
  468. <!--tool bar end -->
  469. <div id="main_text_view" style="padding-bottom: 10em;">
  470. <?php
  471. $tocHtml="";
  472. if(isset($_GET["album"])){
  473. $album=$_GET["album"];
  474. }
  475. if(isset($_GET["book"])){
  476. $book=$_GET["book"];
  477. }
  478. else{
  479. echo "no book id";
  480. }
  481. if(substr($book,0,1)=='p'){
  482. $book=substr($book,1);
  483. }
  484. if(isset($_GET["paragraph"])){
  485. $paragraph = $_GET["paragraph"];
  486. }
  487. else if(isset($_GET["para"])){
  488. $paragraph = $_GET["para"];
  489. }
  490. else{
  491. $paragraph = -1;
  492. }
  493. if(isset($_GET["view"])){
  494. $_view = $_GET["view"];
  495. }
  496. else{
  497. echo "Error : 未定义必要的参数view";
  498. exit;
  499. }
  500. if(isset($_GET["display"])){
  501. $_display = $_GET["display"];
  502. }
  503. else{
  504. if($_view=="para" || $_view=="sent"){
  505. $_display = "sent";//默认值
  506. }
  507. else{
  508. $_display = "para";
  509. }
  510. }
  511. if($_view=="chapter" || $_view=="para" || $_view=="sent" ){
  512. PDO_Connect("sqlite:"._FILE_DB_PALITEXT_);
  513. //获取段落信息 如 父段落 下一个段落等
  514. $query = "select * from 'pali_text' where book='$book' and paragraph='$paragraph'";
  515. $FetchParInfo = PDO_FetchAll($query);
  516. if(count($FetchParInfo)==0){
  517. echo "Error:no paragraph info";
  518. echo $query;
  519. }
  520. $par_begin=$paragraph+1-1;
  521. if($_view=="para"){
  522. $par_end = $par_begin;
  523. }
  524. else{
  525. $par_end=$par_begin+$FetchParInfo[0]["chapter_len"]-1;
  526. }
  527. $par_next=$FetchParInfo[0]["next_chapter"];
  528. $par_prev=$FetchParInfo[0]["prev_chapter"];
  529. $par_parent=$FetchParInfo[0]["parent"];
  530. if($par_parent >= 0){
  531. $query = "select toc from 'pali_text' where book='$book' and paragraph='$par_parent'";
  532. $FetchToc = PDO_FetchAll($query);
  533. if(count($FetchToc)>0){
  534. $_parent_title = $FetchToc[0]["toc"];
  535. }
  536. }
  537. $query = "select paragraph,toc from 'pali_text' where book='$book' and parent='$paragraph' and level < '8'";
  538. $FetchParent = PDO_FetchAll($query);
  539. foreach ($FetchParent as $key => $value) {
  540. $tocHtml .= "<div><a href='reader.php?view=chapter&book={$book}&para={$value["paragraph"]}'>{$value["toc"]}</a></div>";
  541. }
  542. //查询标题
  543. if($_view=="chapter"){
  544. $par_title = $FetchParInfo[0]["toc"];
  545. }
  546. else{
  547. $par_title = $_parent_title;
  548. }
  549. //导航按钮
  550. if($_view=="sent"){
  551. $next_para_link = "";
  552. $prev_para_link = "";
  553. }
  554. else{
  555. if($par_next != -1){
  556. $query = "select paragraph , toc from 'pali_text' where book='$book' and paragraph='$par_next' ";
  557. $FetchPara = PDO_FetchAll($query);
  558. if(count($FetchPara)>0){
  559. $next_para_link = "<a href='reader.php?view={$_view}&book={$book}&para={$par_next}'><span id='para_nav_next'>{$FetchPara[0]["toc"]}</span><span id='para_nav_next_a'>下一个</span></a>〉";
  560. }
  561. else{
  562. $next_para_link = "没有查询到标题";
  563. }
  564. }
  565. else{
  566. $next_para_link = "没了";
  567. }
  568. if($par_prev != -1){
  569. $query = "select paragraph , toc from 'pali_text' where book='$book' and paragraph='$par_prev' ";
  570. $FetchPara = PDO_FetchAll($query);
  571. if(count($FetchPara)>0){
  572. $prev_para_link = "〈<a href='reader.php?view={$_view}&book={$book}&para={$par_prev}'><span id='para_nav_prev_a'>前一个</span><span id='para_nav_prev'>{$FetchPara[0]["toc"]}</span></a>";
  573. }
  574. else{
  575. $prev_para_link = "没有查询到标题";
  576. }
  577. }
  578. else{
  579. $prev_para_link = "没了";
  580. }
  581. }
  582. }
  583. //设置标题栏的经文名称
  584. echo "<script>";
  585. echo "document.getElementById('tool_bar_title').innerHTML='".$par_title."'";
  586. echo "</script>";
  587. //上一级
  588. echo "<div>";
  589. switch($_view){
  590. case 1 :
  591. break;
  592. case 2:
  593. break;
  594. case 3:
  595. break;
  596. case 4:
  597. break;
  598. case 5:
  599. break;
  600. case 5:
  601. break;
  602. case 6:
  603. break;
  604. case "chapter":
  605. if($par_parent >= 0){
  606. echo "<a href='reader.php?view={$_view}&book={$book}&paragraph={$par_parent}'>▲{$_parent_title}</a>";
  607. }
  608. break;
  609. case "para":
  610. if($par_parent >= 0){
  611. echo "<a href='reader.php?view=chapter&book={$book}&paragraph={$par_parent}'>▲{$_parent_title}</a>";
  612. }
  613. break;
  614. case "sent":
  615. echo "<a href='reader.php?view=para&book={$book}&paragraph={$paragraph}'>▲{$paragraph}</a>";
  616. break;
  617. case 10:
  618. break;
  619. }
  620. echo "</div>";
  621. //生成一个段落空壳 等会儿查询数据,按照不同数据类型填充进去
  622. PDO_Connect("sqlite:"._FILE_DB_PALI_SENTENCE_);
  623. if($_display=="sent"){
  624. //逐句显示
  625. for($iPar=$par_begin;$iPar<=$par_end;$iPar++){
  626. if($_view=="sent"){
  627. $query = "select text, begin, end from 'pali_sent' where book='$book' and paragraph='$paragraph' and begin='{$_GET["begin"]}' and end ='{$_GET["end"]}'";
  628. }
  629. else{
  630. $query = "select text, begin, end from 'pali_sent' where book='$book' and paragraph='$iPar'";
  631. }
  632. $FetchSent = PDO_FetchAll($query);
  633. echo "<div id='par-b$book-$iPar' class='par_div'>";
  634. echo "<para book='$book' para='$iPar'>$iPar</para>";
  635. foreach ($FetchSent as $key => $value) {
  636. echo "<div id='sent-pali-b$book-$iPar-{$value["begin"]}' class='par_pali_div'>";
  637. $pali_sent = str_replace("{","<b>",$value["text"]);
  638. $pali_sent = str_replace("}","</b>",$pali_sent);
  639. echo "<sent book='{$book}' para='{$iPar}' begin='{$value["begin"]}' end='{$value["end"]}' >".$pali_sent."</sent>";
  640. echo "</div>";
  641. echo "<div id='sent-wbwdiv-b$book-$iPar-{$value["begin"]}' class='par_translate_div'>";
  642. echo "</div>";
  643. echo "<div id='sent-translate-b$book-$iPar-{$value["begin"]}' class='par_translate_div'>";
  644. echo "</div>";
  645. }
  646. echo "</div>";
  647. }
  648. }
  649. else{
  650. //段落显示
  651. for($iPar=$par_begin;$iPar<=$par_end;$iPar++){
  652. $query = "select text , begin, end from 'pali_sent' where book='$book' and paragraph='$iPar'";
  653. $FetchSent = PDO_FetchAll($query);
  654. echo "<div id='par-b$book-$iPar' class='par_div'>";
  655. echo "<div id='par-pali-b$book-$iPar' class='par_pali_div'>";
  656. echo "<para book='$book' para='$iPar'>$iPar</para>";
  657. foreach ($FetchSent as $key => $value) {
  658. $sent_text = str_replace("{","<b>",$value["text"]) ;
  659. $sent_text = str_replace("}","</b>",$sent_text) ;
  660. echo "<sent book='{$book}' para='{$iPar}' begin='{$value["begin"]}' end='{$value["end"]}' >{$sent_text}</sent>";
  661. }
  662. echo "</div>";
  663. echo "<div id='par-wbwdiv-b$book-$iPar' class='par_translate_div'>";
  664. echo "</div>";
  665. echo "<div id='par-translate-b$book-$iPar' class='par_translate_div'>";
  666. echo "</div>";
  667. echo "<div id='par-note-b$book-$iPar' class='par_translate_div'>";
  668. echo "</div>";
  669. echo "</div>";
  670. }
  671. }
  672. if(isset($_GET["sent_mode"])){
  673. }
  674. PDO_Connect("sqlite:"._FILE_DB_SENTENCE_);
  675. $dbh = new PDO("sqlite:"._FILE_DB_PALI_SENTENCE_, "", "");
  676. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  677. for($iPar=$par_begin;$iPar<=$par_end;$iPar++){
  678. if($_view=="sent"){
  679. $FetchPaliSent = array(array("begin" => $_GET["begin"] , "end" => $_GET["end"]));
  680. }
  681. else{
  682. $query = "select begin, end from 'pali_sent' where book='$book' and paragraph='$iPar'";
  683. $stmt = $dbh->query($query);
  684. $FetchPaliSent = $stmt->fetchAll(PDO::FETCH_ASSOC);
  685. }
  686. foreach ($FetchPaliSent as $key => $value) {
  687. $begin = $value["begin"];
  688. $end = $value["end"];
  689. if($_view=="sent"){
  690. $query="SELECT * FROM \"sentence\" WHERE (book = '{$book}' AND \"paragraph\" = ".$PDO->quote($iPar)." AND begin = '$begin' AND end = '$end' AND length(text)>0 ) order by modify_time DESC";
  691. }
  692. else{
  693. $query = "SELECT * FROM \"sentence\" WHERE book = '{$book}' AND \"paragraph\" = ".$PDO->quote($iPar)." AND begin = '$begin' AND end = '$end' AND length(text)>0 order by modify_time DESC limit 0, 1";
  694. }
  695. $query_count = "SELECT count(book) FROM \"sentence\" WHERE book = '{$book}' AND \"paragraph\" = ".$PDO->quote($iPar)." AND begin = '$begin' AND end = '$end' AND length(text)>0 ";
  696. $sent_count = PDO_FetchOne($query_count);
  697. if($sent_count>9){
  698. $sent_count = "9+";
  699. }
  700. $FetchText = PDO_FetchAll($query);
  701. $iFetchText=count($FetchText);
  702. if($iFetchText>0){
  703. for($i=0;$i<$iFetchText;$i++){
  704. $currParNo=$iPar;
  705. if($_display=="sent"){
  706. $sent_style = "display:block";
  707. }
  708. else{
  709. $sent_style = "";
  710. }
  711. $tran_text = str_replace("[[","<term status='0'>",$FetchText[$i]["text"]);
  712. $tran_text = str_replace("]]","</term>",$tran_text);
  713. echo "<sent_trans style='{$sent_style}' id='sent-tran-b{$book}-{$currParNo}-{$FetchText[$i]["begin"]}-{$i}' class='sent_trans ' book='$book' para='$currParNo' begin='{$FetchText[$i]["begin"]}'>".$tran_text;
  714. if($_view!="sent" && $_display=="sent"){
  715. echo "<span class='sent_count'>$sent_count</span>";
  716. }
  717. echo "</sent_trans>";
  718. echo "<script>";
  719. if($_display=="sent"){
  720. echo "document.getElementById('sent-translate-b{$book}-{$currParNo}-{$FetchText[$i]["begin"]}').appendChild(document.getElementById('sent-tran-b{$book}-{$currParNo}-{$FetchText[$i]["begin"]}-{$i}'));";
  721. }
  722. else{
  723. echo "document.getElementById('par-translate-b{$book}-{$currParNo}').appendChild(document.getElementById('sent-tran-b{$book}-{$currParNo}-{$FetchText[$i]["begin"]}-{$i}'));";
  724. }
  725. echo "</script>";
  726. }
  727. }
  728. }
  729. }
  730. //查询句子译文内容
  731. //查询句子译文内容结束
  732. echo "<div id='para_nav'><div>$prev_para_link</div><div>$next_para_link</div></div>";
  733. if(isset($album)){
  734. /*
  735. //自动逐词译
  736. $db_file = "../appdata/palicanon/templet/p".$book."_tpl.db3";
  737. PDO_Connect("sqlite:$db_file");
  738. for($iPar=$par_begin;$iPar<=$par_end;$iPar++){
  739. $query="SELECT * FROM \"main\" WHERE (\"paragraph\" = ".$PDO->quote($iPar)." ) ";
  740. $Fetch = PDO_FetchAll($query);
  741. $iFetch=count($Fetch);
  742. if($iFetch>0){
  743. echo "<div id='par-wbw-b$book-$iPar' class='wbw_par'>";
  744. for($i=0;$i<$iFetch;$i++){
  745. $type=$Fetch[$i]["type"];
  746. if($type!=".ctl."){
  747. echo "<div class='word'>";
  748. echo "<div class='pali'>".$Fetch[$i]["word"]."</div>";
  749. echo "<div class='mean'>".$Fetch[$i]["mean"]."</div>";
  750. echo "</div>";
  751. }
  752. }
  753. echo "</div>";
  754. echo "<script>";
  755. echo "document.getElementById('par-wbwdiv-b$book-$iPar').appendChild(document.getElementById('par-wbw-b$book-$iPar'));";
  756. echo "</script>";
  757. }
  758. }
  759. ////自动逐词译结束
  760. */
  761. PDO_Connect("sqlite:"._FILE_DB_RESRES_INDEX_);
  762. $query = "select * from 'album' where id='$album'";
  763. $Fetch = PDO_FetchAll($query);
  764. $iFetch=count($Fetch);
  765. if($iFetch>0){
  766. switch($Fetch[0]["type"]){
  767. case 1://巴利原文
  768. break;
  769. case 2://逐词译
  770. $db_file =_DIR_PALICANON_WBW_."/p{$book}_wbw.db3";
  771. PDO_Connect("sqlite:$db_file");
  772. for($iPar=$par_begin;$iPar<=$par_end;$iPar++){
  773. $table="p{$book}_wbw_data";
  774. $query="SELECT * FROM \"{$table}\" WHERE (\"paragraph\" = ".$PDO->quote($iPar)." ) and album_id={$album} ";
  775. $Fetch = PDO_FetchAll($query);
  776. $iFetch=count($Fetch);
  777. if($iFetch>0){
  778. echo "<div id='par-wbw-b$book-$iPar' class='wbw_par'>";
  779. for($i=0;$i<$iFetch;$i++){
  780. $wordtype=$Fetch[$i]["type"];
  781. if($wordtype!=".ctl."){
  782. echo "<div class='word'>";
  783. echo "<div class='pali'>{$Fetch[$i]["word"]}</div>";
  784. echo "<div class='mean'>{$Fetch[$i]["mean"]}</div>";
  785. echo "<div class='case'>{$wordtype}#{$Fetch[$i]["gramma"]}</div>";
  786. echo "</div>";
  787. }
  788. }
  789. echo "</div>";
  790. echo "<script>";
  791. echo "document.getElementById('par-wbwdiv-b$book-$iPar').appendChild(document.getElementById('par-wbw-b$book-$iPar'));";
  792. echo "</script>";
  793. }
  794. }
  795. break;
  796. case 3:
  797. //译文
  798. $tocHtml="";
  799. //打开翻译数据文件
  800. $db_file =_DIR_PALICANON_TRAN_."/p{$book}_translate.db3";
  801. PDO_Connect("sqlite:{$db_file}");
  802. $this_album_id=$album;
  803. $table="p{$book}_translate_info";
  804. if($par_begin==-1){
  805. //全文
  806. $query="SELECT * FROM '{$table}' WHERE album_id=$this_album_id ";
  807. }
  808. else{
  809. //部分段落
  810. $query="SELECT * FROM '{$table}' WHERE (\"paragraph\" BETWEEN ".$PDO->quote($par_begin)." AND ".$PDO->quote($par_end).") and album_id=$this_album_id ";
  811. }
  812. //查询翻译经文内容
  813. $FetchText = PDO_FetchAll($query);
  814. $iFetchText=count($FetchText);
  815. if($iFetchText>0){
  816. for($i=0;$i<$iFetchText;$i++){
  817. $currParNo=$FetchText[$i]["paragraph"];
  818. //查另一个表,获取段落文本。一句一条记录。有些是一段一条记录
  819. $table_data="p{$book}_translate_data";
  820. $query="SELECT * FROM '{$table_data}' WHERE info_id={$FetchText[$i]["id"]}";
  821. $aParaText = PDO_FetchAll($query);
  822. $par_text="";
  823. foreach($aParaText as $sent){
  824. $par_text.=$sent["text"];
  825. }
  826. //获取段落文本结束。
  827. $par_text=str_replace("<pb></pb>","<br/><pb></pb>",$par_text);
  828. echo "<div id='par-translate-a$album-b$book-$currParNo' class='translate_text'>";
  829. echo "<a name='par_$currParNo'></a>";
  830. echo "<div id='text-a$album-b$book-$currParNo' class='text_level_".$par_level["$currParNo"]."' onclick='paragraph_click($album,$book,$currParNo)'>".$par_text."</div>";
  831. echo "<div id='comm-a$album-b$book-$currParNo' class='comments'>";
  832. echo "<div id='new-comm-a$album-b$book-$currParNo' class='new_comments'></div>";
  833. echo "</div>";
  834. echo "</div>";
  835. echo "<script>";
  836. echo "add_new_res($album,$book,$currParNo,'$par_text');";
  837. echo "document.getElementById('par-translate-b$book-$currParNo').appendChild(document.getElementById('par-translate-a$album-b$book-$currParNo'));";
  838. echo "</script>";
  839. //目录字符串
  840. $tocLevel=$par_level["$currParNo"]+1-1;
  841. if($tocLevel>0 && $tocLevel<8){
  842. $tocHtml.="<div class='toc_item level_$tocLevel'><a href='#par_$currParNo'>{$par_text}</a></div>";
  843. }
  844. }
  845. //设置标题栏的经文名称
  846. echo "<script>";
  847. echo "document.getElementById('tool_bar_title').innerHTML='".$FetchText[0]["title"]."'";
  848. echo "</script>";
  849. }
  850. break;
  851. case 4:
  852. break;
  853. case 5:
  854. break;
  855. case 6:
  856. break;
  857. case 7:
  858. break;
  859. }
  860. }
  861. //添加注解
  862. PDO_Connect("sqlite:"._FILE_DB_COMMENTS_);
  863. if($par_begin==-1){
  864. $query="SELECT * FROM \"comments\" WHERE album='$album' order by id DESC";
  865. }
  866. else{
  867. $query="SELECT * FROM \"comments\" WHERE album='$album' AND (\"paragraph\" BETWEEN ".$PDO->quote($par_begin)." AND ".$PDO->quote($par_end).") order by id DESC ";
  868. }
  869. //查询注解内容
  870. $FetchText = PDO_FetchAll($query);
  871. $iFetchText=count($FetchText);
  872. if($iFetchText>0){
  873. for($i=0;$i<$iFetchText;$i++){
  874. $currParNo=$FetchText[$i]["paragraph"];
  875. $comm_id=$FetchText[$i]["id"];
  876. echo "<div id='comm-id-".$comm_id."' class='comments_text_div'><div class='comments_text'>".$FetchText[$i]["text"]."</div><div><button>赞</button>".$FetchText[$i]["reputable"]."</div></div>";
  877. echo "<script>";
  878. echo "document.getElementById('comm-a$album-b$book-$currParNo').appendChild(document.getElementById('comm-id-".$comm_id."'));";
  879. echo "</script>";
  880. }
  881. }
  882. if($par_next!=-1){
  883. echo "<a href='reader.php?book=$book&album=$album&paragraph=$par_next'>Next</a>";
  884. }
  885. }
  886. ?>
  887. </div><!--main_text_view end-->
  888. <div id="new_comm_shell" style="display:none;">
  889. <div id="new_comm_div">
  890. <textarea id="new_comm_text"></textarea>
  891. <button onclick="new_comm_submit()">提交</button><button onclick="new_comm_cancel()">取消</button>
  892. </div>
  893. </div>
  894. <div id="dighest_edit_div" class="full_screen_window">
  895. <div class="win_caption">
  896. <div><button onclick="dighest_edit_cancle()">取消</button></div>
  897. <div><button onclick="dighest_edit_submit()">提交</button></div>
  898. </div>
  899. <div id="dighest_edit_body" class="win_body">
  900. <div>
  901. 标题:<input id="dighest_edit_title" />
  902. </div>
  903. <div>
  904. 简介:<textarea id="dighest_edit_summary"></textarea>
  905. </div>
  906. <div>
  907. 标签:<input id="dighest_edit_taget" />
  908. </div>
  909. <div id="dighest_text_preview">
  910. </div>
  911. </div>
  912. </div>
  913. <!-- 全屏 黑色背景 -->
  914. <div id="BV" class="blackscreen" onclick="setNaviVisibility()"></div>
  915. <!-- nav begin-->
  916. <div id="leftmenuinner" class="viewswitch_off">
  917. <div class="win_caption">
  918. <div><button id="left_menu_hide" onclick="setNaviVisibility()">返回</button></div>
  919. <div id="menubartoolbar_New">
  920. <ul class="common-tab">
  921. <li id="content_menu_li" class="common-tab_li_act" onclick="menuSelected_2(menu_toc,'content_menu_li')">目录</li>
  922. <li id="palicanon_menu_li" class="common-tab_li" onclick="menuSelected_2(menu_pali_cannon,'palicanon_menu_li')">批注</li>
  923. <li id="bookmark_menu_li" class="common-tab_li" onclick="menuSelected_2(menu_bookmark,'bookmark_menu_li')">书签</li>
  924. </ul>
  925. </div>
  926. </div>
  927. <div class='toc' id='leftmenuinnerinner'>
  928. <!-- toc begin -->
  929. <div class="menu" id="menu_toc">
  930. <a name="_Content" ></a>
  931. <select name="menu" onchange="show_toc_level(this)" style="display:none;">
  932. <option value="1">1</option>
  933. <option value="2">2</option>
  934. <option value="3">3</option>
  935. <option value="4">4</option>
  936. <option value="5">5</option>
  937. <option value="6">6</option>
  938. <option value="7">7</option>
  939. </select>
  940. <div id="toc_content"><?php echo $tocHtml; ?></div>
  941. </div>
  942. <!-- toc end -->
  943. <!-- comments begin -->
  944. <div class="menu" id="menu_comments">
  945. <div id="navi_comments_inner"></div>
  946. </div>
  947. <!-- comments end -->
  948. <!-- book mark begin -->
  949. <div class="menu" id="menu_bookmark" style="display:none;">
  950. <div>
  951. <input id="B_Bookmark_All" onclick="setBookmarkVisibility('all')" type="checkbox" style="width: 20px; height: 20px" />
  952. <input id="B_Bookmark_A" onclick="setBookmarkVisibility('bma','B_Bookmark_A')" type="checkbox" style="width: 20px; height: 20px" /><span class="bookmarkcolora , bookmarkcolorblock" >a</span>
  953. <input id="B_Bookmark_X" onclick="setBookmarkVisibility('bmx','B_Bookmark_X')" type="checkbox" style="width: 20px; height: 20px" checked /><span class="bookmarkcolorx , bookmarkcolorblock" >?</span>
  954. <input id="B_Bookmark_1" onclick="setBookmarkVisibility('bm1','B_Bookmark_1')" type="checkbox" style="width: 20px; height: 20px" checked /><span class="bookmarkcolor1 , bookmarkcolorblock" >1</span>
  955. <input id="B_Bookmark_2" onclick="setBookmarkVisibility('bm2','B_Bookmark_2')" type="checkbox" style="width: 20px; height: 20px" checked /><span class="bookmarkcolor2 , bookmarkcolorblock" >2</span>
  956. <input id="B_Bookmark_3" onclick="setBookmarkVisibility('bm3','B_Bookmark_3')" type="checkbox" style="width: 20px; height: 20px" checked /><span class="bookmarkcolor3 , bookmarkcolorblock" >3</span>
  957. <input id="B_Bookmark_4" onclick="setBookmarkVisibility('bm4','B_Bookmark_4')" type="checkbox" style="width: 20px; height: 20px" checked /><span class="bookmarkcolor4 , bookmarkcolorblock" >4</span>
  958. <input id="B_Bookmark_5" onclick="setBookmarkVisibility('bm5','B_Bookmark_5')" type="checkbox" style="width: 20px; height: 20px" checked /><span class="bookmarkcolor5 , bookmarkcolorblock" >5</span>
  959. <input id="B_Bookmark_0" onclick="setBookmarkVisibility('bm0','B_Bookmark_0')" type="checkbox" style="width: 20px; height: 20px" checked /><span class="bookmarkcolor0 , bookmarkcolorblock" >0</span>
  960. </div>
  961. <div id="navi_bookmark_inner"></div>
  962. </div>
  963. <!-- book mark end -->
  964. </div>
  965. </div>
  966. <!-- nav end -->
  967. <div id="mean_menu" ></div>
  968. <script>
  969. //lookup();
  970. $(".pali").mouseover(function(e){
  971. var targ
  972. if (!e) var e = window.event;
  973. if (e.target) targ = e.target;
  974. else if (e.srcElement) targ = e.srcElement;
  975. if (targ.nodeType == 3) // defeat Safari bug
  976. targ = targ.parentNode;
  977. var pali_word;
  978. pali_word=targ.innerHTML;
  979. objCurrMouseOverPaliMean=targ.nextSibling;
  980. $("#tool_bar_title").html(pali_word);
  981. $("#mean_menu").html(getWordMeanMenu(pali_word));
  982. targ.parentNode.appendChild(document.getElementById("mean_menu"));
  983. });
  984. $("sent").click(function(e){
  985. let book = $(this).attr("book");
  986. let para = $(this).attr("para");
  987. let begin = $(this).attr("begin");
  988. let end = $(this).attr("end");
  989. window.location.assign("reader.php?view=sent&book="+book+"&para="+para+"&begin="+begin+"&end="+end);
  990. });
  991. $("sent").mouseenter(function(e){
  992. let book = $(this).attr("book");
  993. let para = $(this).attr("para");
  994. let begin = $(this).attr("begin");
  995. $(this).css("background-color","#fefec1");
  996. $("sent_trans[book='"+book+"'][para='"+para+"'][begin='"+begin+"']").css("background-color","#fefec1");
  997. });
  998. $("sent").mouseleave(function(e){
  999. let book = $(this).attr("book");
  1000. let para = $(this).attr("para");
  1001. let begin = $(this).attr("begin");
  1002. $(this).css("background-color","unset");
  1003. $("sent_trans[book='"+book+"'][para='"+para+"'][begin='"+begin+"']").css("background-color","unset");
  1004. });
  1005. $("para").mouseenter(function(e){
  1006. let book = $(this).attr("book");
  1007. let para = $(this).attr("para");
  1008. $("sent[book='"+book+"'][para='"+para+"']").css("background-color","#fefec1");
  1009. });
  1010. $("para").mouseleave(function(e){
  1011. let book = $(this).attr("book");
  1012. let para = $(this).attr("para");
  1013. $("sent[book='"+book+"'][para='"+para+"']").css("background-color","unset");
  1014. });
  1015. $("sent_trans").mouseenter(function(e){
  1016. let book = $(this).attr("book");
  1017. let para = $(this).attr("para");
  1018. let begin = $(this).attr("begin");
  1019. $(this).css("background-color","#fefec1");
  1020. $("sent[book='"+book+"'][para='"+para+"'][begin='"+begin+"']").css("background-color","#fefec1");
  1021. });
  1022. $("sent_trans").mouseleave(function(e){
  1023. let book = $(this).attr("book");
  1024. let para = $(this).attr("para");
  1025. let begin = $(this).attr("begin");
  1026. $(this).css("background-color","unset");
  1027. $("sent[book='"+book+"'][para='"+para+"'][begin='"+begin+"']").css("background-color","unset");
  1028. });
  1029. $("para").click(function(e){
  1030. let book = $(this).attr("book");
  1031. let para = $(this).attr("para");
  1032. window.location.assign("reader.php?view=para&book="+book+"&para="+para);
  1033. });
  1034. term_updata_translation();
  1035. var wordlist = new Array();
  1036. $("term").each(function(index,element){
  1037. wordlist.push($(this).attr("pali"));
  1038. }
  1039. );
  1040. function haha(){
  1041. var wordquery ="('" + wordlist.join("','")+"')";
  1042. $.post("../term/term.php",
  1043. {
  1044. op:"extract",
  1045. words:wordquery
  1046. },
  1047. function(data,status){
  1048. if(data.length>0){
  1049. try{
  1050. arrMyTerm = JSON.parse(data);
  1051. term_updata_translation();
  1052. }
  1053. catch(e){
  1054. console.error(e.error+" data:"+data);
  1055. }
  1056. }
  1057. });
  1058. }
  1059. </script>
  1060. </body>
  1061. </html>