reader.php 36 KB

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