reader.php 29 KB

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