Parcourir la source

圣典栏目改为列表目录方式

visuddhinanda il y a 5 ans
Parent
commit
88912c8826

+ 15 - 6
app/install/db_update_toc.php

@@ -29,10 +29,10 @@ File: <input type="text" name="file" value="title"><br>
 Author: <input type="text" name="author" value=""><br>
 Language:
 <select name="lang">
-<option value="1">pali</option>
-<option value="2">English</option>
-<option value="3">简体中文</option>
-<option value="4">繁体中文</option>
+<option value="pali">pali</option>
+<option value="en">English</option>
+<option value="zh-hans">简体中文</option>
+<option value="zh-hant">繁体中文</option>
 </select>
 <br>
 <input type="submit">
@@ -125,13 +125,22 @@ $PDO->query($query);
 $PDO->beginTransaction();
 $query="INSERT INTO 'index' ('id','book','paragraph','title','title_en' ,'level','type','language','author','share','create_time','update_time' ) VALUES ( NULL , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? )";
 $stmt = $PDO->prepare($query);
-if($_lang=="1"){
+if($_lang=="pali"){
     $type=1;
 }
 else{
     $type=2;
 }
 foreach($arrInserString as $title){
+	if(isset($title[7])){
+		$author = $title[7];
+	}
+	else if(isset($_author)){
+		$author = $_author;
+	}
+	else{
+		$author = "";
+	}
 	$newData=array(
         $book,
         $title[2],
@@ -140,7 +149,7 @@ foreach($arrInserString as $title){
         $title[3],
 		$type,
 	    $_lang,
-        $_author,
+        $author,
 	   1,
 	   mTime(),
        mTime()

+ 4 - 4
app/pali_sent/pali_sent_list.php

@@ -21,11 +21,11 @@ foreach ($paraList as $key => $value) {
     # code...
     $stmt->execute(array($value->book,$value->para));
     $Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
-         $sent["info"]=array("book"=>$value->book,"para"=>$value->para);
-        $sent["data"]=$Fetch;
-        $output[] = $sent;  
+    $sent["info"]=array("book"=>$value->book,"para"=>$value->para);
+    $sent["data"]=$Fetch;
+    $output[] = $sent;  
 }
 
-    echo json_encode($output, JSON_UNESCAPED_UNICODE);
+echo json_encode($output, JSON_UNESCAPED_UNICODE);
 
 ?>

+ 53 - 0
app/palicanon/book_tag.php

@@ -16,5 +16,58 @@ foreach ($arrBookTag as $bookkey => $bookvalue) {
         $output[] = array($bookvalue);
     }
 }
+
+
+$dns = "sqlite:"._FILE_DB_PALI_TOC_;
+$dbh_toc = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
+$dbh_toc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);  
+
+$dns = "sqlite:"._FILE_DB_PALITEXT_;
+$dbh_pali_text = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
+$dbh_pali_text->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
+
+$dns = "sqlite:"._FILE_DB_RESRES_INDEX_;
+$dbh_res = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
+$dbh_res->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
+
+
+
+
+foreach ($output as $key => $value) {
+	# code...
+		$book = (int)$value[0]->book;
+		$para = (int)$value[0]->para;
+		$level = (int)$value[0]->level;
+	if(count($output)<100 || (count($output)>100 && $level==1)){
+		$query = "SELECT * FROM pali_text WHERE book = ? and paragraph = ?";
+		$stmt = $dbh_pali_text->prepare($query);
+		$stmt->execute(array($book,$para));
+		$paraInfo = $stmt->fetch(PDO::FETCH_ASSOC);
+		if($paraInfo){	
+			# 查进度
+			$query = "SELECT lang, all_trans from progress_chapter where book=? and para=?";
+			$stmt = $dbh_toc->prepare($query);
+			$sth_toc = $dbh_toc->prepare($query);
+			$sth_toc->execute(array($book,$para));
+			$paraProgress = $sth_toc->fetchAll(PDO::FETCH_ASSOC);
+			$output[$key][0]->progress=$paraProgress;
+		
+			#查标题
+			if(isset($_GET["lang"])){
+				$query = "SELECT title from 'index' where book=? and paragraph=? and language=?";
+				$stmt = $dbh_res->prepare($query);
+				$sth_title = $dbh_res->prepare($query);
+				$sth_title->execute(array($book,$para,$_GET["lang"]));
+				$trans_title = $sth_title->fetch(PDO::FETCH_ASSOC);
+				if($trans_title){
+					$output[$key][0]->trans_title=$trans_title['title'];
+				}
+			}
+		}
+
+	}
+	
+}
+
 echo json_encode($output, JSON_UNESCAPED_UNICODE);
 ?>

+ 21 - 5
app/palicanon/get_chapter_children.php

@@ -9,11 +9,15 @@ $dns = "sqlite:"._FILE_DB_PALITEXT_;
 $dbh_pali_text = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
 $dbh_pali_text->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
 
+$dns = "sqlite:"._FILE_DB_RESRES_INDEX_;
+$dbh_res = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
+$dbh_res->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
+
 if(isset($_GET["book"])){
-	$book = $_GET["book"];
+	$book = (int)$_GET["book"];
 }
 if(isset($_GET["para"])){
-	$para = $_GET["para"];
+	$para = (int)$_GET["para"];
 }
 
 $query = "SELECT chapter_len FROM pali_text WHERE book = ? and paragraph = ?";
@@ -23,10 +27,10 @@ $paraInfo = $stmt->fetch(PDO::FETCH_ASSOC);
 if($paraInfo){
 	$query = "SELECT level FROM pali_text WHERE book = ? and (paragraph between ? and ?) and level<8 order by level ASC limit 0,1";
 	$stmt = $dbh_pali_text->prepare($query);
-	$stmt->execute(array($book,$para+1,$para+$paraInfo["chapter_len"]));
+	$stmt->execute(array($book,$para+1,$para+(int)$paraInfo["chapter_len"]-1));
 	$paraMax = $stmt->fetch(PDO::FETCH_ASSOC);
 	if($paraMax){
-		$query = "SELECT book, paragraph, level , toc as title FROM pali_text WHERE book = ? and (paragraph between ? and ?) and level = ?  limit 0,1000";
+		$query = "SELECT book, paragraph as para, level , toc as title FROM pali_text WHERE book = ? and (paragraph between ? and ?) and level = ?  limit 0,1000";
 		$stmt = $dbh_pali_text->prepare($query);
 		$stmt->execute(array($book,$para,$para+$paraInfo["chapter_len"],$paraMax["level"]));
 		$paraList = $stmt->fetchAll(PDO::FETCH_ASSOC);	
@@ -35,9 +39,21 @@ if($paraInfo){
 			$query = "SELECT lang, all_trans from progress_chapter where book=? and para=?";
 			$stmt = $dbh_toc->prepare($query);
 			$sth_toc = $dbh_toc->prepare($query);
-			$sth_toc->execute(array($book,$para));
+			$sth_toc->execute(array($value["book"],$value["para"]));
 			$paraProgress = $sth_toc->fetchAll(PDO::FETCH_ASSOC);
 			$paraList[$key]["progress"]=$paraProgress;
+
+			#查标题
+			if(isset($_GET["lang"])){
+				$query = "SELECT title from 'index' where book=? and paragraph=? and language=?";
+				$stmt = $dbh_res->prepare($query);
+				$sth_title = $dbh_res->prepare($query);
+				$sth_title->execute(array($value["book"],$value["para"],$_GET["lang"]));
+				$trans_title = $sth_title->fetch(PDO::FETCH_ASSOC);
+				if($trans_title){
+					$paraList[$key]["trans_title"]=$trans_title['title'];
+				}
+			}
 		}
 		echo json_encode($paraList, JSON_UNESCAPED_UNICODE);
 	}

+ 54 - 0
app/palicanon/get_chapter_info.php

@@ -0,0 +1,54 @@
+<?php
+require_once '../path.php';
+
+$dns = "sqlite:"._FILE_DB_PALI_TOC_;
+$dbh_toc = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
+$dbh_toc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);  
+
+$dns = "sqlite:"._FILE_DB_PALITEXT_;
+$dbh_pali_text = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
+$dbh_pali_text->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
+
+$dns = "sqlite:"._FILE_DB_RESRES_INDEX_;
+$dbh_res = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
+$dbh_res->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
+
+if(isset($_GET["book"])){
+	$book = (int)$_GET["book"];
+}
+if(isset($_GET["para"])){
+	$para = (int)$_GET["para"];
+}
+
+$query = "SELECT * FROM pali_text WHERE book = ? and paragraph = ?";
+$stmt = $dbh_pali_text->prepare($query);
+$stmt->execute(array($book,$para));
+$paraInfo = $stmt->fetch(PDO::FETCH_ASSOC);
+if($paraInfo){	
+	# 查进度
+	$query = "SELECT lang, all_trans from progress_chapter where book=? and para=?";
+	$stmt = $dbh_toc->prepare($query);
+	$sth_toc = $dbh_toc->prepare($query);
+	$sth_toc->execute(array($book,$para));
+	$paraProgress = $sth_toc->fetchAll(PDO::FETCH_ASSOC);
+	$paraInfo["progress"]=$paraProgress;
+
+	#查标题
+	if(isset($_GET["lang"])){
+		$query = "SELECT title from 'index' where book=? and paragraph=? and language=?";
+		$stmt = $dbh_res->prepare($query);
+		$sth_title = $dbh_res->prepare($query);
+		$sth_title->execute(array($book,$para,$_GET["lang"]));
+		$trans_title = $sth_title->fetch(PDO::FETCH_ASSOC);
+		if($trans_title){
+			$paraInfo["trans_title"]=$trans_title['title'];
+		}
+	}
+	echo json_encode($paraInfo, JSON_UNESCAPED_UNICODE);
+}
+else{
+	echo json_encode(array(), JSON_UNESCAPED_UNICODE);
+}
+
+
+?>

+ 84 - 40
app/palicanon/index.php

@@ -11,10 +11,7 @@ require_once "../pcdl/html_head.php";
     ?>
 
     <style>
-        #main_video_win iframe {
-            width: 100%;
-            height: 100%;
-        }
+
 
         #main_tag {
             font-size: 150%;
@@ -132,6 +129,12 @@ require_once "../pcdl/html_head.php";
 		.parent_chapter .chapter_book,.parent_chapter .chapter_progress{
 			display:none;
 		}
+
+		#select_bar {
+			display: flex;
+			justify-content: space-between;
+		}
+
         @media screen and (max-width:800px) {
             .sutta_row {
                 grid-template-columns: 100px 1fr 1fr;
@@ -141,7 +144,9 @@ require_once "../pcdl/html_head.php";
                 grid-column: 1 / 4;
             }
         }
-    </style>
+	</style>
+	<link type="text/css" rel="stylesheet" href="../palicanon/style.css" />
+	
     <script>
         var tag_level = <?php echo file_get_contents("../public/book_tag/tag_list.json"); ?>;
     </script>
@@ -152,45 +157,84 @@ require_once "../pcdl/html_head.php";
     require_once "../public/_pdo.php";
     require_once '../media/function.php';
     require_once '../public/function.php';
-
-    echo "<div id='course_head_bar' style='background-color:var(--tool-bg-color1);padding:1em 10px 10px 10px;'>";
-    echo "<div class='index_inner '>";
-    echo "<div style='font-size:140%'>";
-    echo "</div>";
-    echo '<div id="main_tag"  style="">';
-    echo '<span tag="sutta" title="sutta"></span>';
-    echo '<span tag="vinaya"  title="vinaya"></span>';
-    echo '<span tag="abhidhamma" title="abhidhamma"></span>';
-    echo '<span tag="mūla" title="mūla"></span>';
-    echo '<span tag="aṭṭhakathā" title="aṭṭhakathā"></span>';
-    echo '<span tag="ṭīkā" title="ṭīkā"></span>';
-    echo '<span tag="añña" title="añña"></span>';
-    echo '</div>';
-    echo '<div id="tag_selected"></div>';
-    echo '<div level="0" class="tag_others"></div>';
-    echo '<div level="1" class="tag_others"></div>';
-    echo '<div level="2" class="tag_others"></div>';
-    echo '<div level="3" class="tag_others"></div>';
-    echo '<div level="4" class="tag_others"></div>';
-    echo '<div level="5" class="tag_others"></div>';
-    echo '<div level="100" class="tag_others"></div>';
-    echo '<div level="8" class="tag_others"></div>';
-    echo "</div>";
-    echo '</div>';
-    ?>
-	<div class='index_inner'>
-	<div id="chapter_shell" style="display:flex;" >
-
-    <div id="book_list" class="chapter_list" list="1" >
+   ?>
+    <div id='course_head_bar' style='background-color:var(--tool-bg-color1);padding:1em 10px 10px 10px;'>
+    <div class='index_inner '>
+    <div style='font-size:140%'>
     </div>
-
-    <div id="chapter_list_1" class="chapter_list"  >
-    </div>
-    <div id="chapter_list_2" class="chapter_list" >
+    <div id="main_tag"  style="">
+    <span tag="sutta" title="sutta"></span>
+    <span tag="vinaya"  title="vinaya"></span>
+    <span tag="abhidhamma" title="abhidhamma"></span>
+    <span tag="mūla" title="mūla"></span>
+    <span tag="aṭṭhakathā" title="aṭṭhakathā"></span>
+    <span tag="ṭīkā" title="ṭīkā"></span>
+    <span tag="añña" title="añña"></span>
+	</div>
+	
+	<div id="select_bar" >
+		<div id="tag_selected"></div>
+		<div><button onclick="tag_list_slide_toggle()">展开</button></div>
+	</div>
+	<div>
+		
+		<div id="tag_list">
+			<div level="0" class="tag_others"></div>
+			<div level="1" class="tag_others"></div>
+			<div level="2" class="tag_others"></div>
+			<div level="3" class="tag_others"></div>
+			<div level="4" class="tag_others"></div>
+			<div level="5" class="tag_others"></div>
+			<div level="100" class="tag_others"></div>
+			<div level="8" class="tag_others"></div>
+		</div>
+	</div>
     </div>
-    <div id="chapter_list_3" class="chapter_list" >
     </div>
+ 
+	<div class='index_inner'>
 
+	<div id="chapter_shell" class="chapter_list" >
+	<div id="list_shell_1" class="show" level="1">
+		<ul id="list-1" class="grid" level="1" >
+		</ul>
+	</div>
+
+	<div id="list_shell_2" level="2">
+		<ul id="list-2" class="hidden" level="2"  >
+		</ul>
+	</div>
+
+	<div id="list_shell_3" level="3">
+		<ul id="list-3" class="hidden" level="3" >
+		</ul>
+	</div>
+
+	<div id="list_shell_4" level="4">
+		<ul id="list-4" class="hidden" level="4" >
+		</ul>
+	</div>
+
+	<div id="list_shell_5" level="5">
+		<ul id="list-5" class="hidden" level="5" >
+		</ul>
+	</div>
+
+	<div id="list_shell_6" level="6">
+		<ul id="list-6" class="hidden" level="6" >
+		</ul>
+	</div>
+
+	<div id="list_shell_7" level="7">
+		<ul id="list-7" class="hidden" level="7" >
+		</ul>
+	</div>
+
+	<div id="list_shell_8" level="8">
+		<ul id="list-8" class="hidden" level="8" >
+		</ul>
+	</div>
+	
     </div>
     </div>
 

+ 162 - 33
app/palicanon/palicanon.js

@@ -58,11 +58,14 @@ function tag_changed() {
 		"book_tag.php",
 		{
 			tag: strTags,
+			lang: "zh-hant",
 		},
 		function (data, status) {
 			let arrBookList = JSON.parse(data);
 			let html = "";
 			allTags = new Array();
+			let arrChapter = new Array();
+
 			for (const iterator of arrBookList) {
 				let tag0 = "";
 				let tags = iterator[0].tag.split("::");
@@ -90,23 +93,15 @@ function tag_changed() {
 					}
 				}
 
-				let level_class = "c_level_" + iterator[0].level;
-				//html += "<div style='width:100%;'>";
-				html += "<div class='sutta_row  " + level_class + "' >";
-				html += "<div class='sutta_box'>" + tag0 + "</div>";
-
-				html +=
-					"<div class='chapter_title'><a href='../reader/?view=chapter&book=" +
-					iterator[0].book +
-					"&para=" +
-					iterator[0].para +
-					"' target = '_blank'>" +
-					iterator[0].title +
-					"</a></div>";
-				html += "<div class='chapter_book'>book:" + iterator[0].book + " para:" + iterator[0].para + "</div>";
-				html += "<div class='chapter_progress'>tag=" + iterator[0].tag + "</div>";
-				html += "</div>";
-				//html += "</div>";
+				if (arrBookList.length < 100 || (arrBookList.length > 100 && iterator[0].level == 1)) {
+					arrChapter.push({
+						book: iterator[0].book,
+						para: iterator[0].para,
+						level: iterator[0].level,
+						title: iterator[0].title,
+						progress: [],
+					});
+				}
 			}
 
 			let newTags = new Array();
@@ -118,43 +113,171 @@ function tag_changed() {
 			allTags = newTags;
 			allTags.sort(sortNumber);
 			tag_render_others();
-			$("#book_list").html(html);
+			palicanon_chapter_list_apply(arrChapter, 0);
 		}
 	);
 }
 
-function palicanon_load_chapter(book, para) {
+function palicanon_load_chapter(book, para, div_index = 1) {
 	$.get(
 		"get_chapter_children.php",
 		{
 			book: book,
 			para: para,
+			lang: "zh-hant",
 		},
 		function (data, status) {
 			let arrChapterList = JSON.parse(data);
-			let html = "";
-			for (const iterator of arrChapterList) {
-				html += palicanon_render_chapter_row(iterator);
-			}
-			$("#chapter_list_1").html(html);
-			$("#chapter_list_1").show();
-			$("#book_list").addClass("parent_chapter");
+			palicanon_chapter_list_apply(arrChapterList, div_index);
+			$.get(
+				"get_chapter_info.php",
+				{
+					book: book,
+					para: para,
+					lang: "zh-hant",
+				},
+				function (data, status) {
+					let arrChapterInfo = JSON.parse(data);
+					let html = render_chapter_head(arrChapterInfo, div_index + 1);
+					$("#chapter_head_" + (parseInt(div_index) + 1)).html(html);
+				}
+			);
 		}
 	);
 }
+
+function render_chapter_head(chapter_info, level) {
+	let html = "";
+	let link = "../reader/?view=chapter&book=" + chapter_info.book + "&para=" + chapter_info.paragraph;
+	html += "<div class='title'>";
+	if (typeof chapter_info.trans_title == "undefined") {
+		html += "	<div class='title_1'><a href='" + link + "' target='_blank'>" + chapter_info.text + "</a></div>";
+	} else {
+		html +=
+			"	<div class='title_1'><a href='" + link + "' target='_blank'>" + chapter_info.trans_title + "</a></div>";
+	}
+	html += "<div class='title_2'>" + chapter_info.text + "</div>";
+	html += "</div>";
+	html += "<div class='info res_more'>";
+	html += "<div class='progress'>";
+	if (chapter_info.progress && chapter_info.progress.length > 0) {
+		let r = 12;
+		let perimeter = 2 * Math.PI * r;
+		for (const iterator of chapter_info.progress) {
+			let stroke1 = parseInt(perimeter * iterator.all_trans);
+			let stroke2 = perimeter - stroke1;
+			html += '	<div class="item">';
+			html += '<svg class="progress_circle" width="30" height="30" viewbox="0,0,30,30">';
+			html += '<circle class="progress_bg" cx="15" cy="15" r="12" stroke-width="5"  fill="none"></circle>';
+			html +=
+				'<circle class="progress_color" cx="15" cy="15" r="12" stroke-width="5" fill="none"  stroke-dasharray="' +
+				stroke1 +
+				" " +
+				stroke2 +
+				'"></circle>';
+			html += "</svg>";
+
+			html += "<div>" + iterator.lang + "-" + parseInt(iterator.all_trans * 100) + "%</div>";
+			html += "	</div>";
+		}
+	} else {
+		html += "无译文";
+	}
+	html += "</div>";
+
+	html += "</div>";
+
+	return html;
+}
+
+function palicanon_chapter_list_apply(chapterList, div_index) {
+	let iDiv = parseInt(div_index);
+	let html = "";
+	html += "<div id='chapter_head_" + (iDiv + 1) + "' class='chapter_head'></div>";
+	html += "<ul id='list-" + (iDiv + 1) + "' class='grid' level='" + (iDiv + 1) + "'>";
+	for (const iterator of chapterList) {
+		html += palicanon_render_chapter_row(iterator);
+	}
+	html += "</ul>";
+
+	$("#list_shell_" + (iDiv + 1)).html(html);
+	$("#list_shell_" + (iDiv + 1)).removeClass();
+	$("#list_shell_" + (iDiv + 1)).addClass("show");
+	//隐藏之后的列表
+	for (let index = iDiv + 2; index <= 8; index++) {
+		$("#list_shell_" + index).removeClass();
+		$("#list_shell_" + index).addClass("hidden");
+	}
+	//收缩当前的
+	$("#list-" + iDiv).removeClass();
+	$("#list-" + iDiv).addClass("list");
+
+	$("#list_shell_" + iDiv).removeClass();
+	$("#list_shell_" + iDiv).addClass("list");
+}
+
+function chapter_onclick(obj) {
+	let book = $(obj).attr("book");
+	let para = $(obj).attr("para");
+	let level = $(obj).parent().attr("level");
+	$(obj).siblings().removeClass("selected");
+	$(obj).addClass("selected");
+	$("#tag_list").slideUp();
+	palicanon_load_chapter(book, para, level);
+}
+
 function palicanon_render_chapter_row(chapter) {
 	let html = "";
-	html += "<div class='sutta_row' >";
-	html += "<div class='chapter_title'><a>" + chapter.title + "</a></div>";
-	html += "<div class='chapter_book'>book:" + chapter.book + " para:" + chapter.para + "</div>";
-	html += "<div class='chapter_progress'>";
-	if (chapter.progress) {
+	let levelClass = "";
+	if (chapter.level == 1) {
+		levelClass = " level_1";
+	}
+	html +=
+		'<li class="' +
+		levelClass +
+		'" book="' +
+		chapter.book +
+		'" para="' +
+		chapter.para +
+		'" onclick="chapter_onclick(this)">';
+	html += '<div class="title">';
+
+	if (typeof chapter.trans_title == "undefined") {
+		html += "	<div class='title_1'>" + chapter.title + "</div>";
+	} else {
+		html += "	<div class='title_1'>" + chapter.trans_title + "</div>";
+	}
+
+	html += '	<div class="title_2" lang="pali">' + chapter.title + "</div>";
+	html += "</div>";
+	html += '<div class="resource">';
+	if (chapter.progress && chapter.progress.length > 0) {
+		let r = 12;
+		let perimeter = 2 * Math.PI * r;
+		let stroke1 = parseInt(perimeter * chapter.progress[0].all_trans);
+		let stroke2 = perimeter - stroke1;
+		html += '<svg class="progress_circle" width="30" height="30" viewbox="0,0,30,30">';
+		html += '<circle class="progress_bg" cx="15" cy="15" r="12" stroke-width="5"  fill="none"></circle>';
+		html +=
+			'<circle class="progress_color" cx="15" cy="15" r="12" stroke-width="5" fill="none"  stroke-dasharray="' +
+			stroke1 +
+			" " +
+			stroke2 +
+			'"></circle>';
+		html += "</svg>";
+		/*
 		for (const iterator of chapter.progress) {
-			html += "<div>" + iterator.lang + "-" + iterator.all_trans + "</div>";
+			html += '	<div class="item">';
+			html += "<div>" + iterator.lang + "-" + parseInt(iterator.all_trans * 100) + "%</div>";
+			html += "	</div>";
 		}
+		*/
 	}
+	html += '	<div class="res_more">';
+	html += "		更多";
+	html += "	</div>";
 	html += "</div>";
-	html += "</div>";
+	html += "</li>";
 	return html;
 }
 function tag_get_local_word(word) {
@@ -212,6 +335,8 @@ function tag_click(tag) {
 }
 
 function render_tag_list() {
+	$("#tag_list").slideDown();
+
 	let strListTag = gLocal.gui.selected + ":";
 	for (const iterator of list_tag) {
 		strListTag += '<tag><span class="textt" title="' + iterator + '">' + tag_get_local_word(iterator) + "</span>";
@@ -237,3 +362,7 @@ function tag_remove(tag) {
 function sortNumber(a, b) {
 	return b - a;
 }
+
+function tag_list_slide_toggle() {
+	$("#tag_list").slideToggle();
+}

+ 103 - 0
app/palicanon/style.css

@@ -0,0 +1,103 @@
+.chapter_list {
+	display: flex;
+}
+.chapter_list .grid {
+	width: 400px;
+	max-width: 100%;
+}
+.chapter_list .list {
+	width: 200px;
+}
+.chapter_list .list .res_more {
+	display: none;
+}
+
+.chapter_list .show {
+	display: block;
+}
+
+.chapter_list .hidden {
+	display: none;
+}
+.chapter_list .list .resource .item {
+	display: none;
+}
+.chapter_list ul {
+	background-color: antiquewhite;
+	border-left: 1px solid brown;
+	border-right: 1px solid brown;
+	padding: 0;
+}
+.chapter_list ul li {
+	display: flex;
+	justify-content: space-between;
+	padding: 8px;
+	white-space: nowrap;
+	overflow-x: hidden;
+}
+.chapter_list ul li:hover {
+	background-color: darkorange;
+}
+.chapter_list .resource {
+	display: flex;
+	margin-top: auto;
+	margin-bottom: auto;
+}
+.chapter_list .title .title_1 {
+	font-weight: 700;
+	font-size: 110%;
+}
+.chapter_list .title .title_2 {
+	font-size: 80%;
+	color: var(--main-color1);
+}
+.selected .title_2 {
+	font-size: 80%;
+	color: unset;
+}
+.chapter_list .title div:lang(pali) {
+	font-size: 80%;
+}
+
+.chapter_list .selected {
+	background-color: chocolate;
+	color: whitesmoke;
+}
+
+.chapter_list .level_1 {
+	background: linear-gradient(45deg, brown 10%, transparent);
+	color: whitesmoke;
+}
+.progress_circle {
+	transform-origin: center;
+	transform: rotateZ(-90deg);
+}
+.progress_color {
+	stroke: mediumseagreen;
+}
+.progress_bg {
+	stroke: lightgrey;
+}
+
+.chapter_head {
+	border-bottom: 1px solid var(--border-line-color);
+}
+.chapter_head .title {
+	text-align: center;
+}
+.chapter_head .title .title_1 {
+	font-size: 120%;
+	padding: 1em 0 0.5em 0;
+	font-weight: 700;
+}
+.chapter_head .title .title_1 {
+	font-size: 120%;
+	padding: 1em 0 0.5em 0;
+	font-weight: 700;
+}
+.chapter_head .title .title_2 {
+	padding: 0 0 0.5em 0;
+}
+.progress .item {
+	display: flex;
+}

+ 3 - 3
app/studio/js/render.js

@@ -1,4 +1,4 @@
-var gRenderPageLimit = 1000; //不限制 设为1000
+var gRenderPageLimit = 1; //限制 1 不限制 设为1000
 
 var gDisplayCapacity = 20 * gRenderPageLimit;
 var gCurrTopParagraph = 0;
@@ -1622,7 +1622,7 @@ function sent_show_rel_map(book, para, begin, end) {
 				} else {
 					dest = iterator.dest_id + "[" + dest + "]";
 				}
-/*
+				/*
 				if (strRel.indexOf("SV") >= 0 || strRel.indexOf("-P") >= 0) {
 					memind += wid + "(" + pali + ")" + " ==> |" + strRel + "|" + dest + "\n";
 				} else if (strRel.indexOf("OV") >= 0 || strRel.indexOf("-S") >= 0) {
@@ -1630,7 +1630,7 @@ function sent_show_rel_map(book, para, begin, end) {
 				} else {
 				}
 */
-					memind += wid + "(" + pali + ")" + " -- " + strRel + " --> " + dest + "\n";
+				memind += wid + "(" + pali + ")" + " -- " + strRel + " --> " + dest + "\n";
 			}
 		}
 	}

+ 789 - 823
app/studio/js/xml.js

@@ -1,1188 +1,1154 @@
-var nWord=0;
+var nWord = 0;
 
-var suttaWordList=new Array();
-var tranParagraph=new Array();
+var suttaWordList = new Array();
+var tranParagraph = new Array();
 var g_useMode;
-var g_countWordList=0;
-var g_wordListOrderby="count";
-var g_wordListOrder=false;
-var g_isDictFavo=false;
-var g_autoUpdataDB=true;
-
-var gTextEditMediaType="";
-var gSutta=0;
-var gPar=0;
-var gTran=0;
-var g_bookMark_array=['a','x','1','2','3','4','5'];
+var g_countWordList = 0;
+var g_wordListOrderby = "count";
+var g_wordListOrder = false;
+var g_isDictFavo = false;
+var g_autoUpdataDB = true;
+
+var gTextEditMediaType = "";
+var gSutta = 0;
+var gPar = 0;
+var gTran = 0;
+var g_bookMark_array = ["a", "x", "1", "2", "3", "4", "5"];
 
 var wordList = new Array();
 
-function getNodeText(inNode,subTagName){
-	try{
-		if(inNode && inNode.getElementsByTagName(subTagName).length>0){
-			if(inNode.getElementsByTagName(subTagName)[0].childNodes.length>0){
+function getNodeText(inNode, subTagName) {
+	try {
+		if (inNode && inNode.getElementsByTagName(subTagName).length > 0) {
+			if (inNode.getElementsByTagName(subTagName)[0].childNodes.length > 0) {
 				var mValue = inNode.getElementsByTagName(subTagName)[0].childNodes[0].nodeValue;
-				mValue = mValue.replace('&lt;','<');
-				mValue = mValue.replace('&gt;','>');
-				return(mValue); 
+				mValue = mValue.replace("&lt;", "<");
+				mValue = mValue.replace("&gt;", ">");
+				return mValue;
+			} else {
+				return "";
 			}
-			else{
-				return("");
-			}
-		}
-		else{
-			return("");
+		} else {
+			return "";
 		}
-	}
-	catch(error){
+	} catch (error) {
 		console.warn(error);
-		return("");
+		return "";
 	}
-	return("");
+	return "";
 }
 
-function setNodeText(inNode,subTagName,strValue){
-	if(strValue==null){
+function setNodeText(inNode, subTagName, strValue) {
+	if (strValue == null) {
 		return;
 	}
 	var mValue = strValue.toString();
-	mValue = mValue.replace('<','&lt;');
-	mValue = mValue.replace('>','&gt;');
-	try{
-		if(inNode && inNode.getElementsByTagName(subTagName).length==0){
-			var newNode=gXmlBookData.createElement(subTagName);
-			var textnode=gXmlBookData.createTextNode(" ");
+	mValue = mValue.replace("<", "&lt;");
+	mValue = mValue.replace(">", "&gt;");
+	try {
+		if (inNode && inNode.getElementsByTagName(subTagName).length == 0) {
+			var newNode = gXmlBookData.createElement(subTagName);
+			var textnode = gXmlBookData.createTextNode(" ");
 			newNode.appendChild(textnode);
 			inNode.appendChild(newNode);
 		}
-		if(inNode.getElementsByTagName(subTagName).length>0){
-			if(inNode.getElementsByTagName(subTagName)[0].childNodes.length==0){
-				var textnode=gXmlBookData.createTextNode(" ");
+		if (inNode.getElementsByTagName(subTagName).length > 0) {
+			if (inNode.getElementsByTagName(subTagName)[0].childNodes.length == 0) {
+				var textnode = gXmlBookData.createTextNode(" ");
 				inNode.getElementsByTagName(subTagName)[0].appendChild(textnode);
 			}
-			if(inNode.getElementsByTagName(subTagName)[0].childNodes.length>0){
-				inNode.getElementsByTagName(subTagName)[0].childNodes[0].nodeValue=strValue;
-			}
-			else{
+			if (inNode.getElementsByTagName(subTagName)[0].childNodes.length > 0) {
+				inNode.getElementsByTagName(subTagName)[0].childNodes[0].nodeValue = strValue;
+			} else {
 				throw "can't accese text node";
 			}
+		} else {
+			throw subTagName + ":not a sub Taget";
 		}
-		else{
-			throw subTagName+ ":not a sub Taget";
-		}
-	}
-	catch(error){
+	} catch (error) {
 		var_dump(error);
-		return(false);
+		return false;
 	}
-	return(true);
-
-
+	return true;
 }
 
-function getNodeAttr(inNode,subTagName,attr){
-	try{
-		return(inNode.getElementsByTagName(subTagName)[0].getAttribute(attr));
-	}
-	catch(error){
+function getNodeAttr(inNode, subTagName, attr) {
+	try {
+		return inNode.getElementsByTagName(subTagName)[0].getAttribute(attr);
+	} catch (error) {
 		console.warn(error);
-		return("");
+		return "";
 	}
 }
 
-function setNodeAttr(inNode,subTagName,attr,strValue){
-	if(!inNode || !strValue || !attr || attr==""){
+function setNodeAttr(inNode, subTagName, attr, strValue) {
+	if (!inNode || !strValue || !attr || attr == "") {
 		return;
 	}
 	let mValue = strValue.toString();
-	try{
-		if(inNode.getElementsByTagName(subTagName).length==0){
-			var newNode=gXmlBookData.createElement(subTagName);
-			var textnode=gXmlBookData.createTextNode(" ");
+	try {
+		if (inNode.getElementsByTagName(subTagName).length == 0) {
+			var newNode = gXmlBookData.createElement(subTagName);
+			var textnode = gXmlBookData.createTextNode(" ");
 			newNode.appendChild(textnode);
 			inNode.appendChild(newNode);
-		}		
-		try{
-			inNode.getElementsByTagName(subTagName)[0].setAttribute(attr,mValue);
 		}
-		catch(e){
-			newatt=gXmlBookData.createAttribute(attr);
-			newatt.nodeValue=mValue;
+		try {
+			inNode.getElementsByTagName(subTagName)[0].setAttribute(attr, mValue);
+		} catch (e) {
+			newatt = gXmlBookData.createAttribute(attr);
+			newatt.nodeValue = mValue;
 			inNode.getElementsByTagName(subTagName)[0].setAttributeNode(newatt);
-			return(mValue);			
+			return mValue;
 		}
-
-	}
-	catch(error){
+	} catch (error) {
 		console.error(error);
-		return(false);
+		return false;
 	}
-	return(true);
-
-
+	return true;
 }
 //根据xmlDocument 对象中的单词序号和单词节点创建单词块
 //返回 字符串
-function createWordBlockByNode(id,wordNode){
-}
-
+function createWordBlockByNode(id, wordNode) {}
 
-function pushNewToList(inArray,strNew){
+function pushNewToList(inArray, strNew) {
 	//var isExist=false;
-	for(x in inArray){
-		if(inArray[x]==strNew){
+	for (x in inArray) {
+		if (inArray[x] == strNew) {
 			return;
 		}
 	}
 	inArray.push(strNew);
 }
-function findFirstCaseInDict(inWord){
-	var output="?";
-	var pali=com_getPaliReal(inWord);
-	if(mDict[pali]){
-		for(var iWord in mDict[pali]){
+function findFirstCaseInDict(inWord) {
+	var output = "?";
+	var pali = com_getPaliReal(inWord);
+	if (mDict[pali]) {
+		for (var iWord in mDict[pali]) {
 			{
-				if(mDict[pali][iWord].parts){
-					if(mDict[pali][iWord].parts.length>0){
-						return(mDict[pali][iWord].type+"#"+mDict[pali][iWord].gramma);
+				if (mDict[pali][iWord].parts) {
+					if (mDict[pali][iWord].parts.length > 0) {
+						return mDict[pali][iWord].type + "#" + mDict[pali][iWord].gramma;
 					}
 				}
 			}
 		}
 	}
-	return(output);
+	return output;
 }
 
-function findFirstPartInDict(inWord){
-	var output="?";
-	var pali=com_getPaliReal(inWord);
-	if(mDict[pali]){
-		for(var iWord in mDict[pali]){
+function findFirstPartInDict(inWord) {
+	var output = "?";
+	var pali = com_getPaliReal(inWord);
+	if (mDict[pali]) {
+		for (var iWord in mDict[pali]) {
 			{
-				if(mDict[pali][iWord].parts){
-					if(mDict[pali][iWord].parts.length>0){
-						return(mDict[pali][iWord].parts);
+				if (mDict[pali][iWord].parts) {
+					if (mDict[pali][iWord].parts.length > 0) {
+						return mDict[pali][iWord].parts;
 					}
 				}
 			}
 		}
 	}
-	return(output);
+	return output;
 }
-function findFirstPartMeanInDict(inWord){
-	var output="?";
-	var pali=com_getPaliReal(inWord);
-	if(mDict[pali]){
-		for(var iWord in mDict[pali]){
-			if(dict_language_enable.indexOf(mDict[pali][iWord].language)>=0){
-				if(mDict[pali][iWord].partmean){
-					if(mDict[pali][iWord].partmean.length>0){
-						return(mDict[pali][iWord].partmean);
+function findFirstPartMeanInDict(inWord) {
+	var output = "?";
+	var pali = com_getPaliReal(inWord);
+	if (mDict[pali]) {
+		for (var iWord in mDict[pali]) {
+			if (dict_language_enable.indexOf(mDict[pali][iWord].language) >= 0) {
+				if (mDict[pali][iWord].partmean) {
+					if (mDict[pali][iWord].partmean.length > 0) {
+						return mDict[pali][iWord].partmean;
 					}
 				}
 			}
 		}
 	}
-	return(output);
+	return output;
 }
-function findFirstMeanInDict(inWord){
-	var output="?";
-	var pali=com_getPaliReal(inWord);
-	if(mDict[pali]){
-		for(var iWord in mDict[pali]){
+function findFirstMeanInDict(inWord) {
+	var output = "?";
+	var pali = com_getPaliReal(inWord);
+	if (mDict[pali]) {
+		for (var iWord in mDict[pali]) {
 			//if(dict_language_enable.indexOf(mDict[pali][iWord].language)>=0)
 			{
-				if(mDict[pali][iWord].mean){
-					if(mDict[pali][iWord].mean.length>0){
-						return(mDict[pali][iWord].mean.split("$")[0]);
+				if (mDict[pali][iWord].mean) {
+					if (mDict[pali][iWord].mean.length > 0) {
+						return mDict[pali][iWord].mean.split("$")[0];
 					}
 				}
 			}
 		}
 	}
-	return(output);
+	return output;
 }
 
-function findAllMeanInDict(inWord,limit){
-	output=new Array();
-	for(var iCurrWord=0;iCurrWord<g_DictWordList.length;iCurrWord++){
-		if(g_DictWordList[iCurrWord].Pali==inWord){
-			meanList=g_DictWordList[iCurrWord].Mean.split("$");
-			for(iMean in meanList){
-				if(meanList[iMean].length>0){
+function findAllMeanInDict(inWord, limit) {
+	output = new Array();
+	for (var iCurrWord = 0; iCurrWord < g_DictWordList.length; iCurrWord++) {
+		if (g_DictWordList[iCurrWord].Pali == inWord) {
+			meanList = g_DictWordList[iCurrWord].Mean.split("$");
+			for (iMean in meanList) {
+				if (meanList[iMean].length > 0) {
 					output.push(meanList[iMean]);
-					if(output.length>limit){
-						return(output);
+					if (output.length > limit) {
+						return output;
 					}
 				}
 			}
 		}
 	}
-	return(output);
+	return output;
 }
 
-
 //确认对单个词的修改
-function modifyApply(sWordId,update_user_dict){
-	let wordIndex=getWordIndex(sWordId);
-	
+function modifyApply(sWordId, update_user_dict) {
+	let wordIndex = getWordIndex(sWordId);
+
 	let arr_id_word = sWordId.split("-");
-	let book=arr_id_word[0].slice(1);
+	let book = arr_id_word[0].slice(1);
 	let paragraph = arr_id_word[1];
 	let wId = arr_id_word[2];
-	
+
 	let strApplyTo;
-	if(document.getElementById("checkbox_apply_same").checked){
+	if (document.getElementById("checkbox_apply_same").checked) {
 		strApplyTo = "all";
-	}
-	else{
+	} else {
 		strApplyTo = "current";
 	}
-	
-	let wordCurrStatus=9;//草稿
-	if(update_user_dict){
-		wordCurrStatus=7;//保存为正式
+
+	let wordCurrStatus = 9; //草稿
+	if (update_user_dict) {
+		wordCurrStatus = 7; //保存为正式
 	}
-	
+
 	//关闭单词修改窗口
 	closeModifyWindow();
 	let x = gXmlBookDataBody.getElementsByTagName("word");
-	
-	
+
 	let msg_data = new Object();
-	msg_data.id=sWordId;
-	
+	msg_data.id = sWordId;
+
 	//原来的值
-	let sPaliReal = getNodeText(x[wordIndex],"real");
-	let sPaliParent = getNodeText(x[wordIndex],"parent");	
-	
+	let sPaliReal = getNodeText(x[wordIndex], "real");
+	let sPaliParent = getNodeText(x[wordIndex], "parent");
+
 	//new value
 	let sPali = document.getElementById("id_text_pali").value;
-	let oldPali = getNodeText(x[wordIndex],"pali");
-	if(sPali!=oldPali){
-		setNodeText(x[wordIndex],"pali",sPali);
+	let oldPali = getNodeText(x[wordIndex], "pali");
+	if (sPali != oldPali) {
+		setNodeText(x[wordIndex], "pali", sPali);
 		msg_data.pali = sPali;
 	}
-	setNodeAttr(x[wordIndex],"pali","status",wordCurrStatus);
-	
+	setNodeAttr(x[wordIndex], "pali", "status", wordCurrStatus);
+
 	let sReal = document.getElementById("id_text_real").value;
-	let oldReal = getNodeText(x[wordIndex],"real");
-	if(sReal != oldReal){
-		setNodeText(x[wordIndex],"real",sReal);
-		msg_data.real=sReal;
+	let oldReal = getNodeText(x[wordIndex], "real");
+	if (sReal != oldReal) {
+		setNodeText(x[wordIndex], "real", sReal);
+		msg_data.real = sReal;
 	}
-	setNodeAttr(x[wordIndex],"real","status",wordCurrStatus);
-	
+	setNodeAttr(x[wordIndex], "real", "status", wordCurrStatus);
+
 	let sMeaning = document.getElementById("input_meaning").value;
-	let oldMean = getNodeText(x[wordIndex],"mean");
-	if(sMeaning != oldMean){
-		setNodeText(x[wordIndex],"mean",sMeaning);
-		msg_data.mean=sMeaning;
-	}	
-	setNodeAttr(x[wordIndex],"mean","status",wordCurrStatus);
-	
+	let oldMean = getNodeText(x[wordIndex], "mean");
+	if (sMeaning != oldMean) {
+		setNodeText(x[wordIndex], "mean", sMeaning);
+		msg_data.mean = sMeaning;
+	}
+	setNodeAttr(x[wordIndex], "mean", "status", wordCurrStatus);
+
 	let sParent = document.getElementById("id_text_parent").value;
-	let oldParent = getNodeText(x[wordIndex],"parent");
-	if(sParent != oldParent){
-		setNodeText(x[wordIndex],"parent",sParent);	
-		msg_data.parent=sParent;
+	let oldParent = getNodeText(x[wordIndex], "parent");
+	if (sParent != oldParent) {
+		setNodeText(x[wordIndex], "parent", sParent);
+		msg_data.parent = sParent;
 	}
-	setNodeAttr(x[wordIndex],"parent","status",wordCurrStatus);
+	setNodeAttr(x[wordIndex], "parent", "status", wordCurrStatus);
 
 	let sParentGrammar = document.getElementById("parent_grammar").innerHTML;
-	let oldParentGrammar = getNodeText(x[wordIndex],"pg");
-	if(sParentGrammar != oldParentGrammar){
-		setNodeText(x[wordIndex],"pg",sParentGrammar);	
-		msg_data.pg=sParentGrammar;
+	let oldParentGrammar = getNodeText(x[wordIndex], "pg");
+	if (sParentGrammar != oldParentGrammar) {
+		setNodeText(x[wordIndex], "pg", sParentGrammar);
+		msg_data.pg = sParentGrammar;
 	}
-	setNodeAttr(x[wordIndex],"pg","status",wordCurrStatus);
-	
+	setNodeAttr(x[wordIndex], "pg", "status", wordCurrStatus);
+
 	let sParentParent = document.getElementById("id_text_prt_prt").value;
-	let oldParentParent = getNodeText(x[wordIndex],"parent2");
-	if(sParentParent != oldParentParent){
-		setNodeText(x[wordIndex],"parent2",sParentParent);	
-		msg_data.parent2=sParentParent;
+	let oldParentParent = getNodeText(x[wordIndex], "parent2");
+	if (sParentParent != oldParentParent) {
+		setNodeText(x[wordIndex], "parent2", sParentParent);
+		msg_data.parent2 = sParentParent;
 	}
-	setNodeAttr(x[wordIndex],"parent2","status",wordCurrStatus);
-	
+	setNodeAttr(x[wordIndex], "parent2", "status", wordCurrStatus);
+
 	let sOrg = document.getElementById("input_org").value;
-	let oldOrg = getNodeText(x[wordIndex],"org");
-	if(sOrg != oldOrg){
-		setNodeText(x[wordIndex],"org",sOrg);	
-		msg_data.org=sOrg;
+	let oldOrg = getNodeText(x[wordIndex], "org");
+	if (sOrg != oldOrg) {
+		setNodeText(x[wordIndex], "org", sOrg);
+		msg_data.org = sOrg;
 	}
-	setNodeAttr(x[wordIndex],"org","status",wordCurrStatus);
-	
+	setNodeAttr(x[wordIndex], "org", "status", wordCurrStatus);
+
 	let sOm = document.getElementById("input_om").value;
-	let oldOm = getNodeText(x[wordIndex],"om");
-	if(oldOm != sOm){
-		setNodeText(x[wordIndex],"om",sOm);	
-		msg_data.om=sOm;
+	let oldOm = getNodeText(x[wordIndex], "om");
+	if (oldOm != sOm) {
+		setNodeText(x[wordIndex], "om", sOm);
+		msg_data.om = sOm;
 	}
-	setNodeAttr(x[wordIndex],"om","status",wordCurrStatus);
-	
+	setNodeAttr(x[wordIndex], "om", "status", wordCurrStatus);
+
 	let sCase = document.getElementById("input_case").value;
-	let oldCase = getNodeText(x[wordIndex],"case");
-	if(oldCase != sCase){
-		setNodeText(x[wordIndex],"case",sCase);	
-		msg_data.case=sCase;
+	let oldCase = getNodeText(x[wordIndex], "case");
+	if (oldCase != sCase) {
+		setNodeText(x[wordIndex], "case", sCase);
+		msg_data.case = sCase;
 	}
-	setNodeAttr(x[wordIndex],"case","status",wordCurrStatus);
-	
+	setNodeAttr(x[wordIndex], "case", "status", wordCurrStatus);
+
 	let bLocked = document.getElementById("input_lock").checked;
-	let oldLock = getNodeText(x[wordIndex],"lock");
-	if(bLocked != oldLock){
-		setNodeText(x[wordIndex],"lock",bLocked);	
-		msg_data.lock=bLocked;
-	}	
-	setNodeAttr(x[wordIndex],"lock","status",wordCurrStatus);
-	
-	let txtBookMark=document.getElementById("id_text_bookmark").value;
-	let oldBookMarkText = getNodeText(x[wordIndex],"bmt");
-	if(oldBookMarkText != txtBookMark){
-		setNodeText(x[wordIndex],"bmt",txtBookMark);
-		msg_data.bmt=txtBookMark;
-	}
-	setNodeAttr(x[wordIndex],"bmt","status",wordCurrStatus);
-	
-	let oldBookMarkColor = getNodeText(x[wordIndex],"bmc");
-	if(oldBookMarkColor==""){
-		oldBookMarkColor="bmc0";
-	}
-	if(oldBookMarkColor!=g_currBookMarkColor){
-		setNodeText(x[wordIndex],"bmc",g_currBookMarkColor);
-		msg_data.bmc=g_currBookMarkColor;
-		g_currBookMarkColor="";
-	}
-	setNodeAttr(x[wordIndex],"bmc","status",wordCurrStatus);
-	
-	let updateNoteNum=false;
-	let txtNote=document.getElementById("id_text_note").value;
-	let prevNote=getNodeText(x[wordIndex],"note");
-	if(prevNote!=txtNote){
-		setNodeText(x[wordIndex],"note",txtNote);
+	let oldLock = getNodeText(x[wordIndex], "lock");
+	if (bLocked != oldLock) {
+		setNodeText(x[wordIndex], "lock", bLocked);
+		msg_data.lock = bLocked;
+	}
+	setNodeAttr(x[wordIndex], "lock", "status", wordCurrStatus);
+
+	let txtBookMark = document.getElementById("id_text_bookmark").value;
+	let oldBookMarkText = getNodeText(x[wordIndex], "bmt");
+	if (oldBookMarkText != txtBookMark) {
+		setNodeText(x[wordIndex], "bmt", txtBookMark);
+		msg_data.bmt = txtBookMark;
+	}
+	setNodeAttr(x[wordIndex], "bmt", "status", wordCurrStatus);
+
+	let oldBookMarkColor = getNodeText(x[wordIndex], "bmc");
+	if (oldBookMarkColor == "") {
+		oldBookMarkColor = "bmc0";
+	}
+	if (oldBookMarkColor != g_currBookMarkColor) {
+		setNodeText(x[wordIndex], "bmc", g_currBookMarkColor);
+		msg_data.bmc = g_currBookMarkColor;
+		g_currBookMarkColor = "";
+	}
+	setNodeAttr(x[wordIndex], "bmc", "status", wordCurrStatus);
+
+	let updateNoteNum = false;
+	let txtNote = document.getElementById("id_text_note").value;
+	let prevNote = getNodeText(x[wordIndex], "note");
+	if (prevNote != txtNote) {
+		setNodeText(x[wordIndex], "note", txtNote);
 		//refreshWordNote(x[wordIndex].parentNode.parentNode);
-		msg_data.note=txtNote;
+		msg_data.note = txtNote;
 		//updateWordNote(x[wordIndex]);
-		updateNoteNum=true;
-	}
-	
-	let sRalation=$("#id_relation_text").val();
-	let oldRalation=getNodeText(x[wordIndex],"rala");
-	if(oldRalation!=sRalation){
-		setNodeText(x[wordIndex],"rela",sRalation);
-		msg_data.rela=sRalation;
+		updateNoteNum = true;
+	}
+
+	let sRalation = $("#id_relation_text").val();
+	let oldRalation = getNodeText(x[wordIndex], "rala");
+	if (oldRalation != sRalation) {
+		setNodeText(x[wordIndex], "rela", sRalation);
+		msg_data.rela = sRalation;
 		//updateWordRelation(x[wordIndex]);
-		updateNoteNum=true;
+		updateNoteNum = true;
 	}
-	
+
 	{
-		setNodeText(x[wordIndex],"status",wordCurrStatus);//自己手动 或 草稿
-		msg_data.status=wordCurrStatus;
+		setNodeText(x[wordIndex], "status", wordCurrStatus); //自己手动 或 草稿
+		msg_data.status = wordCurrStatus;
 	}
 
 	user_wbw_push_word(sWordId);
-	
+
 	modifyWordDetailByWordIndex(wordIndex);
 	updataWordHeadByIndex(wordIndex);
-	if(updateNoteNum){
+	if (updateNoteNum) {
 		refreshWordNoteDiv(x[wordIndex].parentNode.parentNode);
 		refreshNoteNumber();
 	}
 
 	//send message
-	let d=new Date();
+	let d = new Date();
 	let msg_doc_id;
-	if(doc_info.sendmsg){
-		if(doc_info.parent_id!=""){
-			msg_doc_id=doc_info.parent_id;
-		}
-		else{
-			msg_doc_id=doc_info.doc_id;
+	if (doc_info.sendmsg) {
+		if (doc_info.parent_id != "") {
+			msg_doc_id = doc_info.parent_id;
+		} else {
+			msg_doc_id = doc_info.doc_id;
 		}
 
-		msg_push(1,JSON.stringify(msg_data),msg_doc_id,d.getTime(),book,paragraph);	
+		msg_push(1, JSON.stringify(msg_data), msg_doc_id, d.getTime(), book, paragraph);
 	}
 	//The end of send message
-	
-	
-	
+
 	let objWord = new Object();
-	objWord.Pali=getNodeText(x[wordIndex],"real");
-	sCase= getNodeText(x[wordIndex],"case");
-	let mGramma=sCase.split("#");
-	if(mGramma.length>=2){
-		mType=sCase.split("#")[0];
-		mGramma=sCase.split("#")[1];
-	}
-	else{
-		mType="";
-		mGramma=sCase.split("#")[0];
-	}
-	
+	objWord.Pali = getNodeText(x[wordIndex], "real");
+	sCase = getNodeText(x[wordIndex], "case");
+	let mGramma = sCase.split("#");
+	if (mGramma.length >= 2) {
+		mType = sCase.split("#")[0];
+		mGramma = sCase.split("#")[1];
+	} else {
+		mType = "";
+		mGramma = sCase.split("#")[0];
+	}
+
 	//将单词加入内存字典
-	var objDictItem=new Object();/*一个字典元素*/
-	objDictItem.id=0;
-	objDictItem.guid="";
-	objDictItem.pali=getNodeText(x[wordIndex],"pali");
-	objDictItem.type=mType;
-	objDictItem.gramma=mGramma;
-	objDictItem.parent=getNodeText(x[wordIndex],"parent");
-	objDictItem.mean=getNodeText(x[wordIndex],"mean");
-	objDictItem.note=getNodeText(x[wordIndex],"note");
-	objDictItem.parts=getNodeText(x[wordIndex],"org");
-	objDictItem.partmean=getNodeText(x[wordIndex],"om");
-	objDictItem.status=0
-	objDictItem.dict_name="Memo";
-	objDictItem.language="zh";
-	objDictItem.confidence=100;
-	if(objDictItem.type=="" || objDictItem.type.indexOf("?")!=-1){
-		objDictItem.confidence=objDictItem.confidence*0.9;
-	}
-	if(objDictItem.type!=".un." && objDictItem.type!=".comp."){
-		if(objDictItem.gramma=="" || objDictItem.gramma.indexOf("?")!=-1 || objDictItem.gramma.indexOf("$")!=0){
-			objDictItem.confidence=objDictItem.confidence*0.9;
+	var objDictItem = new Object(); /*一个字典元素*/
+	objDictItem.id = 0;
+	objDictItem.guid = "";
+	objDictItem.pali = getNodeText(x[wordIndex], "pali");
+	objDictItem.type = mType;
+	objDictItem.gramma = mGramma;
+	objDictItem.parent = getNodeText(x[wordIndex], "parent");
+	objDictItem.mean = getNodeText(x[wordIndex], "mean");
+	objDictItem.note = getNodeText(x[wordIndex], "note");
+	objDictItem.parts = getNodeText(x[wordIndex], "org");
+	objDictItem.partmean = getNodeText(x[wordIndex], "om");
+	objDictItem.status = 0;
+	objDictItem.dict_name = "Memo";
+	objDictItem.language = "zh";
+	objDictItem.confidence = 100;
+	if (objDictItem.type == "" || objDictItem.type.indexOf("?") != -1) {
+		objDictItem.confidence = objDictItem.confidence * 0.9;
+	}
+	if (objDictItem.type != ".un." && objDictItem.type != ".comp.") {
+		if (objDictItem.gramma == "" || objDictItem.gramma.indexOf("?") != -1 || objDictItem.gramma.indexOf("$") != 0) {
+			objDictItem.confidence = objDictItem.confidence * 0.9;
 		}
-		if(objDictItem.mean=="" || objDictItem.mean.indexOf("?")!=-1){
-			objDictItem.confidence=objDictItem.confidence*0.9;
+		if (objDictItem.mean == "" || objDictItem.mean.indexOf("?") != -1) {
+			objDictItem.confidence = objDictItem.confidence * 0.9;
 		}
-		if(objDictItem.partmean=="" || objDictItem.partmean.indexOf("?")!=-1){
-			objDictItem.confidence=objDictItem.confidence*0.9;
+		if (objDictItem.partmean == "" || objDictItem.partmean.indexOf("?") != -1) {
+			objDictItem.confidence = objDictItem.confidence * 0.9;
 		}
 	}
-	if(objDictItem.parts=="" || objDictItem.parts.indexOf("?")!=-1){
-		objDictItem.confidence=objDictItem.confidence*0.9;
+	if (objDictItem.parts == "" || objDictItem.parts.indexOf("?") != -1) {
+		objDictItem.confidence = objDictItem.confidence * 0.9;
 	}
-	if(!mDict[objDictItem.pali]){
-		mDict[objDictItem.pali]=new Array();
+	if (!mDict[objDictItem.pali]) {
+		mDict[objDictItem.pali] = new Array();
 	}
 	//insert to top of memory dict
 	mDict[objDictItem.pali].unshift(objDictItem);
 
-	let parts=getNodeText(x[wordIndex],"org");
-	let partmean=getNodeText(x[wordIndex],"om");
-	
+	let parts = getNodeText(x[wordIndex], "org");
+	let partmean = getNodeText(x[wordIndex], "om");
+
 	//add parent infomation
 
-	switch(mType){
+	switch (mType) {
 		case ".n.":
-			mType=".n:base.";
-			mGramma=mGramma.split("$")[0];
-			if(mGramma==".m." || mGramma==".f." || mGramma==".nt."){
+			mType = ".n:base.";
+			mGramma = mGramma.split("$")[0];
+			if (mGramma == ".m." || mGramma == ".f." || mGramma == ".nt.") {
+			} else {
+				mGramma = "";
 			}
-			else{
-				mGramma="";
-			}				
 			break;
 		case ".adj.":
-			mType=".adj:base.";
-			mGramma="";
+			mType = ".adj:base.";
+			mGramma = "";
 			break;
 		case ".ti.":
-			mType=".ti:base.";
-			mGramma="";
+			mType = ".ti:base.";
+			mGramma = "";
 			break;
 		case ".pron.":
-			d_parentType=".pron:base.";
-			d_parentGramma="";
+			d_parentType = ".pron:base.";
+			d_parentGramma = "";
 			break;
 		case ".num.":
-			d_parentType=".num:base.";
-			d_parentGramma="";
+			d_parentType = ".num:base.";
+			d_parentGramma = "";
 			break;
 		case ".v.":
-			mType=".v:base.";
-			mGramma="";
+			mType = ".v:base.";
+			mGramma = "";
 			break;
 	}
 
 	//将单词base加入内存字典
-if(getNodeText(x[wordIndex],"parent")!=""){
-	var objDictItem=new Object();/*一个字典元素*/
-	objDictItem.id=0;
-	objDictItem.guid="";
-	objDictItem.pali=getNodeText(x[wordIndex],"parent");
-	objDictItem.type=mType;
-	objDictItem.gramma=mGramma;
-	objDictItem.parent="";
-	objDictItem.mean = removeFormulaB(getNodeText(x[wordIndex],"mean"),'[',']');
-	objDictItem.mean = removeFormulaB(objDictItem.mean,'{','}');
-	objDictItem.note=getNodeText(x[wordIndex],"note");
-	
-	//remove the "[***]" in the end
-	let d_factors = getNodeText(x[wordIndex],"org");
-	let fc=d_factors.split("+");
-	if(fc.length>0 && (fc[fc.length-1].slice(0,1)=="[" && fc[fc.length-1].slice(-1)=="]")){
-		fc.pop();
-	}
-	objDictItem.parts=fc.join("+")
-	let fm=getNodeText(x[wordIndex],"om").split("+");
-	fm.length=fc.length;
-	objDictItem.partmean=fm.join("+");
-	
-	objDictItem.status=0;
-	objDictItem.confidence=100;
-	if(objDictItem.type=="" || objDictItem.gramma.indexOf("?")!=-1){
-		objDictItem.confidence=objDictItem.confidence*0.9;
-	}
-	if(objDictItem.gramma=="" || objDictItem.gramma.indexOf("?")!=-1 || objDictItem.gramma.indexOf("$")!=0){
-		objDictItem.confidence=objDictItem.confidence*0.9;
-	}
-	if(objDictItem.mean=="" || objDictItem.gramma.indexOf("?")!=-1){
-		objDictItem.confidence=objDictItem.confidence*0.9;
-	}
-	if(objDictItem.parts=="" || objDictItem.gramma.indexOf("?")!=-1){
-		objDictItem.confidence=objDictItem.confidence*0.9;
-	}
-	if(objDictItem.partmean=="" || objDictItem.gramma.indexOf("?")!=-1){
-		objDictItem.confidence=objDictItem.confidence*0.9;
-	}
-	if(!mDict[objDictItem.pali]){
-		mDict[objDictItem.pali]=new Array();
-	}
-	objDictItem.dict_name="Memo";
-	objDictItem.language="zh";
-	if(!mDict[objDictItem.pali]){
-		mDict[objDictItem.pali]=new Array();
+	if (getNodeText(x[wordIndex], "parent") != "") {
+		var objDictItem = new Object(); /*一个字典元素*/
+		objDictItem.id = 0;
+		objDictItem.guid = "";
+		objDictItem.pali = getNodeText(x[wordIndex], "parent");
+		objDictItem.type = mType;
+		objDictItem.gramma = mGramma;
+		objDictItem.parent = "";
+		objDictItem.mean = removeFormulaB(getNodeText(x[wordIndex], "mean"), "[", "]");
+		objDictItem.mean = removeFormulaB(objDictItem.mean, "{", "}");
+		objDictItem.note = getNodeText(x[wordIndex], "note");
+
+		//remove the "[***]" in the end
+		let d_factors = getNodeText(x[wordIndex], "org");
+		let fc = d_factors.split("+");
+		if (fc.length > 0 && fc[fc.length - 1].slice(0, 1) == "[" && fc[fc.length - 1].slice(-1) == "]") {
+			fc.pop();
+		}
+		objDictItem.parts = fc.join("+");
+		let fm = getNodeText(x[wordIndex], "om").split("+");
+		fm.length = fc.length;
+		objDictItem.partmean = fm.join("+");
+
+		objDictItem.status = 0;
+		objDictItem.confidence = 100;
+		if (objDictItem.type == "" || objDictItem.gramma.indexOf("?") != -1) {
+			objDictItem.confidence = objDictItem.confidence * 0.9;
+		}
+		if (objDictItem.gramma == "" || objDictItem.gramma.indexOf("?") != -1 || objDictItem.gramma.indexOf("$") != 0) {
+			objDictItem.confidence = objDictItem.confidence * 0.9;
+		}
+		if (objDictItem.mean == "" || objDictItem.gramma.indexOf("?") != -1) {
+			objDictItem.confidence = objDictItem.confidence * 0.9;
+		}
+		if (objDictItem.parts == "" || objDictItem.gramma.indexOf("?") != -1) {
+			objDictItem.confidence = objDictItem.confidence * 0.9;
+		}
+		if (objDictItem.partmean == "" || objDictItem.gramma.indexOf("?") != -1) {
+			objDictItem.confidence = objDictItem.confidence * 0.9;
+		}
+		if (!mDict[objDictItem.pali]) {
+			mDict[objDictItem.pali] = new Array();
+		}
+		objDictItem.dict_name = "Memo";
+		objDictItem.language = "zh";
+		if (!mDict[objDictItem.pali]) {
+			mDict[objDictItem.pali] = new Array();
+		}
+		mDict[objDictItem.pali].unshift(objDictItem);
 	}
-	mDict[objDictItem.pali].unshift(objDictItem);
+	// The end of memory dictionary
 
-}
-// The end of memory dictionary 
-	
 	//apply all
-	let searchBegin=0;
-	let searchEnd=0;
-	switch(strApplyTo){
+	let searchBegin = 0;
+	let searchEnd = 0;
+	switch (strApplyTo) {
 		case "all":
-			searchBegin=0;
-			searchEnd=x.length;
+			searchBegin = 0;
+			searchEnd = x.length;
 			break;
 		case "up":
-			searchBegin=0;
-			searchEnd=wordIndex;
+			searchBegin = 0;
+			searchEnd = wordIndex;
 			break;
 		case "down":
-			searchBegin=wordIndex;
-			searchEnd=x.length;
+			searchBegin = wordIndex;
+			searchEnd = x.length;
 			break;
 	}
-	if(strApplyTo!="current"){
-		
+	if (strApplyTo != "current") {
 		//sPaliWord = x[sWordId].getElementsByTagName("pali")[0].childNodes[0].nodeValue;
 		let iSameWordCount = 0;
-		setNodeText(x[wordIndex],"pali",sPali);//拼寫顯示修改僅僅應用當前詞——Kosalla
-						
-		for (iSearch=searchBegin;iSearch<searchEnd;iSearch++){
-			if(sWordId!=iSearch){
+		setNodeText(x[wordIndex], "pali", sPali); //拼寫顯示修改僅僅應用當前詞——Kosalla
+
+		for (iSearch = searchBegin; iSearch < searchEnd; iSearch++) {
+			if (sWordId != iSearch) {
 				//xmlNotePali = x[i].getElementsByTagName("pali")[0].childNodes[0].nodeValue;
-				xmlNotePali = getNodeText(x[iSearch],"real");
-				if(xmlNotePali==sPaliReal ){
-					if(getNodeText(x[iSearch],"lock")!="true"){
-						setNodeText(x[iSearch],"real",sReal);
-						setNodeText(x[iSearch],"parent",sParent);	
-						setNodeText(x[iSearch],"mean",sMeaning);
-						setNodeText(x[iSearch],"org",sOrg);
-						setNodeText(x[iSearch],"om",sOm);
-						setNodeText(x[iSearch],"case",sCase);
-						setNodeText(x[iSearch],"bmc",g_currBookMarkColor);
+				xmlNotePali = getNodeText(x[iSearch], "real");
+				if (xmlNotePali == sPaliReal) {
+					if (getNodeText(x[iSearch], "lock") != "true") {
+						setNodeText(x[iSearch], "real", sReal);
+						setNodeText(x[iSearch], "parent", sParent);
+						setNodeText(x[iSearch], "mean", sMeaning);
+						setNodeText(x[iSearch], "org", sOrg);
+						setNodeText(x[iSearch], "om", sOm);
+						setNodeText(x[iSearch], "case", sCase);
+						setNodeText(x[iSearch], "bmc", g_currBookMarkColor);
 						setNodeText(x[iSearch], "note", txtNote);
-						switch(editor_word_status(x[iSearch])){
+						switch (editor_word_status(x[iSearch])) {
 							case 0:
 							case 1:
 							case 2:
 							case 3:
 							case 4:
 							case 6:
-							editor_word_status(x[iSearch],5);
-							break;
+								editor_word_status(x[iSearch], 5);
+								break;
 						}
 						user_wbw_push_word(getNodeText(x[iSearch], "id"));
 						modifyWordDetailByWordIndex(iSearch);
 						updataWordHeadByIndex(iSearch);
-						console.log("updata:"+iSearch+"<br />",0);
-						iSameWordCount = iSameWordCount+1;
+						console.log("updata:" + iSearch + "<br />", 0);
+						iSameWordCount = iSameWordCount + 1;
 					}
 				}
-				xmlNoteParent = getNodeText(x[iSearch],"parent");
-				if(xmlNotePali!=sPaliReal && xmlNoteParent==sPaliParent && xmlNoteParent!="" && xmlNoteParent!=" " ){
-					if(getNodeText(x[iSearch],"lock")!="true"){
-						setNodeText(x[iSearch],"mean",sMeaning);
+				xmlNoteParent = getNodeText(x[iSearch], "parent");
+				if (
+					xmlNotePali != sPaliReal &&
+					xmlNoteParent == sPaliParent &&
+					xmlNoteParent != "" &&
+					xmlNoteParent != " "
+				) {
+					if (getNodeText(x[iSearch], "lock") != "true") {
+						setNodeText(x[iSearch], "mean", sMeaning);
 						user_wbw_push_word(getNodeText(x[iSearch], "id"));
 						modifyWordDetailByWordIndex(iSearch);
 						updataWordHeadByIndex(iSearch);
-						iSameWordCount = iSameWordCount+1;
+						iSameWordCount = iSameWordCount + 1;
 					}
 				}
 			}
 		}
-		var_dump("same word:"+(iSameWordCount-1));
+		var_dump("same word:" + (iSameWordCount - 1));
 	}
 	refreshBookMark();
 	user_wbw_commit();
-	
+
 	//上传到用户字典
-	if(update_user_dict){
+	if (update_user_dict) {
 		upload_to_my_dict();
 	}
 }
 
-
-function getWordIndex(GUID){
-	var xAllWord = gXmlBookDataBody.getElementsByTagName("word");	
-	for(var iWord=0; iWord<xAllWord.length; iWord++){
-		if(getNodeText(xAllWord[iWord],"id")==GUID){
-			return(iWord);
+function getWordIndex(GUID) {
+	var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
+	for (var iWord = 0; iWord < xAllWord.length; iWord++) {
+		if (getNodeText(xAllWord[iWord], "id") == GUID) {
+			return iWord;
 		}
 	}
-	return(-1);
+	return -1;
 }
 
-
-
-function addFavorite(){
+function addFavorite() {
 	g_isDictFavo = !g_isDictFavo;
-	if(g_isDictFavo){
+	if (g_isDictFavo) {
 		document.getElementById("temp").innerHTML = "★";
-	}
-	else{
+	} else {
 		document.getElementById("temp").innerHTML = "☆";
 	}
 }
 //用单词表中的一个记录更改经文中的单词
-function updataWord(id){
-	var debugstr;		
-	try{
-	sPali = document.getElementById("wlpali"+id).value;
-	sReal = document.getElementById("wlreal"+id).value;
-	sOrg = document.getElementById("wlorg"+id).value;
-	sMean = document.getElementById("wlmean"+id).value;
-	sCase = document.getElementById("wlcase"+id).value;
-	
-	var m_WordIdList=new Array();
-	m_WordIdList = wordList[id].wordid.toString().split("$");
-	var xAllWord = gXmlBookDataBody.getElementsByTagName("word");	
-
-	for(indexWordList=0;indexWordList<m_WordIdList.length;indexWordList++){
-		//将修改结果保存到xml DOM中
-		if(m_WordIdList[indexWordList]>=0){
-			setNodeText(xAllWord[m_WordIdList[indexWordList]],"pali",sPali);
-			setNodeText(xAllWord[m_WordIdList[indexWordList]],"real",sReal);
-			setNodeText(xAllWord[m_WordIdList[indexWordList]],"org",sOrg);
-			setNodeText(xAllWord[m_WordIdList[indexWordList]],"mean",sMean);
-			setNodeText(xAllWord[m_WordIdList[indexWordList]],"case",sCase);
-			var sId = getNodeText(xAllWord[m_WordIdList[indexWordList]],"id");
-			var wordDetail = renderWordDetailById(sId);
-			var strDetailName="detail" + sId;
-			document.getElementById(strDetailName).innerHTML = wordDetail;
-			updataWordHeadById(sId);
+function updataWord(id) {
+	var debugstr;
+	try {
+		sPali = document.getElementById("wlpali" + id).value;
+		sReal = document.getElementById("wlreal" + id).value;
+		sOrg = document.getElementById("wlorg" + id).value;
+		sMean = document.getElementById("wlmean" + id).value;
+		sCase = document.getElementById("wlcase" + id).value;
+
+		var m_WordIdList = new Array();
+		m_WordIdList = wordList[id].wordid.toString().split("$");
+		var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
+
+		for (indexWordList = 0; indexWordList < m_WordIdList.length; indexWordList++) {
+			//将修改结果保存到xml DOM中
+			if (m_WordIdList[indexWordList] >= 0) {
+				setNodeText(xAllWord[m_WordIdList[indexWordList]], "pali", sPali);
+				setNodeText(xAllWord[m_WordIdList[indexWordList]], "real", sReal);
+				setNodeText(xAllWord[m_WordIdList[indexWordList]], "org", sOrg);
+				setNodeText(xAllWord[m_WordIdList[indexWordList]], "mean", sMean);
+				setNodeText(xAllWord[m_WordIdList[indexWordList]], "case", sCase);
+				var sId = getNodeText(xAllWord[m_WordIdList[indexWordList]], "id");
+				var wordDetail = renderWordDetailById(sId);
+				var strDetailName = "detail" + sId;
+				document.getElementById(strDetailName).innerHTML = wordDetail;
+				updataWordHeadById(sId);
+			}
 		}
+		var_dump("" + m_WordIdList.length + "");
+		document.getElementById("wlApply" + id).disabled = true;
+	} catch (e) {
+		var_dump(e);
 	}
-		var_dump(""+m_WordIdList.length+"");
-		document.getElementById("wlApply"+id).disabled=true;
-	}
-	catch(e){
-	var_dump(e);
-	}
-
 }
 
 //比较两个词是否一样
-function compareWordInList(word1,word2){
-	var sItems1=new Array();
+function compareWordInList(word1, word2) {
+	var sItems1 = new Array();
 	sItem1 = word1.split(";");
-	var sItems2=new Array();
+	var sItems2 = new Array();
 	sItem2 = word2.split(";");
-	var sConcat1=sItem1[0]+sItem1[1]+sItem1[2]+sItem1[3];
-	var sConcat2=sItem2[0]+sItem1[1]+sItem1[2]+sItem1[3];
-	if(sConcat1==sConcat2){
-		return(true);
-	}
-	else{
-		return(false);
+	var sConcat1 = sItem1[0] + sItem1[1] + sItem1[2] + sItem1[3];
+	var sConcat2 = sItem2[0] + sItem1[1] + sItem1[2] + sItem1[3];
+	if (sConcat1 == sConcat2) {
+		return true;
+	} else {
+		return false;
 	}
 }
 
-function sortWordList(strOrderby){
+function sortWordList(strOrderby) {
 	g_wordListOrderby = strOrderby;
 	g_wordListOrder = !g_wordListOrder;
 	refreshWordList();
 }
-function CountVocabulary(){
-	var sPali = "";	
+function CountVocabulary() {
+	var sPali = "";
 	var sOrg = "";
 	var sMean = "";
-	var sCase ="";
-	var wordList1=new Array();
-	var arrCombinWord=new Array();
-	var arrCombinWordOrder=new Array();
-	
-	var arrCount=new Array();
+	var sCase = "";
+	var wordList1 = new Array();
+	var arrCombinWord = new Array();
+	var arrCombinWordOrder = new Array();
+
+	var arrCount = new Array();
 	var iCount = 0;
-    var sTableWordList="";
-	var arrowCount="";
-	var arrowPali="";
-	var arrowReal="";	
+	var sTableWordList = "";
+	var arrowCount = "";
+	var arrowPali = "";
+	var arrowReal = "";
 
-	
 	//提取所有词
-	var xAllWord = gXmlBookDataBody.getElementsByTagName("word");	
-	if(xAllWord.length==0){
-		return("no word data.");
-	}
-	var outWordList="";
-	for(iword=0;iword<xAllWord.length;iword++)
-	{
-		var objWord = new Object;
-		objWord.id = getNodeText(xAllWord[iword],"id");
-		objWord.pali = getNodeText(xAllWord[iword],"pali");
-		objWord.real = getNodeText(xAllWord[iword],"real");
-		objWord.mean = getNodeText(xAllWord[iword],"mean");		
-		objWord.org = getNodeText(xAllWord[iword],"org");
-		objWord.om = getNodeText(xAllWord[iword],"om");
-		objWord.case = getNodeText(xAllWord[iword],"case");
-		objWord.index=iword;
-		objWord.count=1;
-		objWord.wordid=iword;
-		if(objWord.real!=""){
-			addWordToWordList(wordList1,objWord);
+	var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
+	if (xAllWord.length == 0) {
+		return "no word data.";
+	}
+	var outWordList = "";
+	for (iword = 0; iword < xAllWord.length; iword++) {
+		var objWord = new Object();
+		objWord.id = getNodeText(xAllWord[iword], "id");
+		objWord.pali = getNodeText(xAllWord[iword], "pali");
+		objWord.real = getNodeText(xAllWord[iword], "real");
+		objWord.mean = getNodeText(xAllWord[iword], "mean");
+		objWord.org = getNodeText(xAllWord[iword], "org");
+		objWord.om = getNodeText(xAllWord[iword], "om");
+		objWord.case = getNodeText(xAllWord[iword], "case");
+		objWord.index = iword;
+		objWord.count = 1;
+		objWord.wordid = iword;
+		if (objWord.real != "") {
+			addWordToWordList(wordList1, objWord);
 		}
-
 	}
-	return(wordList1.length);
+	return wordList1.length;
 }
 //生成单词列表
-function makeWordList(){
-	var sPali = "";	
+function makeWordList() {
+	var sPali = "";
 	var sOrg = "";
 	var sMean = "";
-	var sCase ="";
+	var sCase = "";
+
+	var arrCombinWord = new Array();
+	var arrCombinWordOrder = new Array();
 
-	var arrCombinWord=new Array();
-	var arrCombinWordOrder=new Array();
-	
-	var arrCount=new Array();
+	var arrCount = new Array();
 	var iCount = 0;
-    var sTableWordList="";
-	var arrowCount="";
-	var arrowPali="";
-	var arrowReal="";	
+	var sTableWordList = "";
+	var arrowCount = "";
+	var arrowPali = "";
+	var arrowReal = "";
 
-	
 	//提取所有词
-	var xAllWord = gXmlBookDataBody.getElementsByTagName("word");	
-	if(xAllWord.length==0){
-		return("no word data.");
-	}
-	var outWordList="";
-	for(iword=0;iword<xAllWord.length;iword++)
-	{
-		var objWord = new Object;
-		objWord.id = getNodeText(xAllWord[iword],"id");
-		objWord.pali = getNodeText(xAllWord[iword],"pali");
-		objWord.real = getNodeText(xAllWord[iword],"real");
-		objWord.mean = getNodeText(xAllWord[iword],"mean");		
-		objWord.org = getNodeText(xAllWord[iword],"org");
-		objWord.om = getNodeText(xAllWord[iword],"om");
-		objWord.case = getNodeText(xAllWord[iword],"case");
-		objWord.index=iword;
-		objWord.count=1;
-		objWord.wordid=iword;
-		if(objWord.real!=""){
-			addWordToWordList(wordList,objWord)
+	var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
+	if (xAllWord.length == 0) {
+		return "no word data.";
+	}
+	var outWordList = "";
+	for (iword = 0; iword < xAllWord.length; iword++) {
+		var objWord = new Object();
+		objWord.id = getNodeText(xAllWord[iword], "id");
+		objWord.pali = getNodeText(xAllWord[iword], "pali");
+		objWord.real = getNodeText(xAllWord[iword], "real");
+		objWord.mean = getNodeText(xAllWord[iword], "mean");
+		objWord.org = getNodeText(xAllWord[iword], "org");
+		objWord.om = getNodeText(xAllWord[iword], "om");
+		objWord.case = getNodeText(xAllWord[iword], "case");
+		objWord.index = iword;
+		objWord.count = 1;
+		objWord.wordid = iword;
+		if (objWord.real != "") {
+			addWordToWordList(wordList, objWord);
 		}
-
 	}
-	switch(g_wordListOrderby){
+	switch (g_wordListOrderby) {
 		case "count":
-			if(g_wordListOrder){
-				wordList.sort(sortCountDesc)
-				arrowCount="↓";
-			}
-			else{
-				wordList.sort(sortCountAsc)
-				arrowCount="↑";
+			if (g_wordListOrder) {
+				wordList.sort(sortCountDesc);
+				arrowCount = "↓";
+			} else {
+				wordList.sort(sortCountAsc);
+				arrowCount = "↑";
 			}
 			break;
 		case "pali":
-			if(g_wordListOrder){
-				wordList.sort(sortPaliDesc)
-				arrowPali="↓";
-			}else{
-				wordList.sort(sortPaliAsc)
-				arrowPali="↑";
+			if (g_wordListOrder) {
+				wordList.sort(sortPaliDesc);
+				arrowPali = "↓";
+			} else {
+				wordList.sort(sortPaliAsc);
+				arrowPali = "↑";
 			}
 			break;
 		case "real":
-			if(g_wordListOrder){
-				wordList.sort(sortRealDesc)
-				arrowReal="↓";
-			}else{
-				wordList.sort(sortRealAsc)
-				arrowReal="↑";
+			if (g_wordListOrder) {
+				wordList.sort(sortRealDesc);
+				arrowReal = "↓";
+			} else {
+				wordList.sort(sortRealAsc);
+				arrowReal = "↑";
 			}
-		break;
-	}
-	
-	sTableWordList =  sTableWordList + "<table border='0' cellpadding='3' ><tr  class='h'>";
-	sTableWordList =  sTableWordList + "<th>序号</th>";
-	sTableWordList =  sTableWordList + "<th><a herf=\"\" onclick=\"sortWordList('count')\">计数"+arrowCount+"</a></th>";
-	sTableWordList =  sTableWordList + "<th><a herf=\"\" onclick=\"sortWordList('pali')\">Pali"+arrowPali+"</a></th>";
-		sTableWordList =  sTableWordList + "<th><a herf=\"\" onclick=\"sortWordList('real')\">Real"+arrowReal+"</a></th>";
-	sTableWordList =  sTableWordList + "<th>原型</th>";
-	sTableWordList =  sTableWordList + "<th>译文</th>";
-	sTableWordList =  sTableWordList + "<th>语法</th>";
-	sTableWordList =  sTableWordList + "<th><button type='button' id='btnApplyAll' onclick=\"applyAllWordInList(this)\" disabled>Apply All</button></th></tr>";
-
-	
-	for(var i=0; i<wordList.length;i++){
-			objWord=wordList[i];
-			sTableWordList +=  "<tr><td>"+i+"</td>"
-			sTableWordList += "<td id='tablepali"+i+"'>"+objWord.count+"</td>"
-			//sTableWordList += "<td>" +objWord.pali + "</td>";
-			//sTableWordList += "<td>" +objWord.real + "</td>";
-			sTableWordList +=  "<td><input id=\"wlpali"+i+"\" onkeyup=\"wordListItemChanged('wlApply"+i+"')\" value = '" + objWord.pali + "' />";
-			sTableWordList +=  "<td><input id=\"wlreal"+i+"\" onkeyup=\"wordListItemChanged('wlApply"+i+"')\" value = '" + objWord.real + "' /></td>";
-			sTableWordList +=  "<td><input id=\"wlorg"+i+"\" onkeyup=\"wordListItemChanged('wlApply"+i+"')\" value = '" + objWord.org + "' />";
-			sTableWordList +=  "<td><input id=\"wlmean"+i+"\" onkeyup=\"wordListItemChanged('wlApply"+i+"')\" value = '" + objWord.mean + "' /></td>";
-			sTableWordList +=  "<td><input id=\"wlcase"+i+"\" onkeyup=\"wordListItemChanged('wlApply"+i+"')\" value = '" + objWord.case + "' /></td>";
-			sTableWordList +=  "<td><button id=\"wlApply"+i+"\" onclick=\"updataWord('"+i+"')\" type='button' disabled >Apply</button></td></tr>";
-	}
-	
+			break;
+	}
+
+	sTableWordList = sTableWordList + "<table border='0' cellpadding='3' ><tr  class='h'>";
+	sTableWordList = sTableWordList + "<th>序号</th>";
+	sTableWordList =
+		sTableWordList + '<th><a herf="" onclick="sortWordList(\'count\')">计数' + arrowCount + "</a></th>";
+	sTableWordList = sTableWordList + '<th><a herf="" onclick="sortWordList(\'pali\')">Pali' + arrowPali + "</a></th>";
+	sTableWordList = sTableWordList + '<th><a herf="" onclick="sortWordList(\'real\')">Real' + arrowReal + "</a></th>";
+	sTableWordList = sTableWordList + "<th>原型</th>";
+	sTableWordList = sTableWordList + "<th>译文</th>";
+	sTableWordList = sTableWordList + "<th>语法</th>";
+	sTableWordList =
+		sTableWordList +
+		"<th><button type='button' id='btnApplyAll' onclick=\"applyAllWordInList(this)\" disabled>Apply All</button></th></tr>";
+
+	for (var i = 0; i < wordList.length; i++) {
+		objWord = wordList[i];
+		sTableWordList += "<tr><td>" + i + "</td>";
+		sTableWordList += "<td id='tablepali" + i + "'>" + objWord.count + "</td>";
+		//sTableWordList += "<td>" +objWord.pali + "</td>";
+		//sTableWordList += "<td>" +objWord.real + "</td>";
+		sTableWordList +=
+			'<td><input id="wlpali' +
+			i +
+			'" onkeyup="wordListItemChanged(\'wlApply' +
+			i +
+			"')\" value = '" +
+			objWord.pali +
+			"' />";
+		sTableWordList +=
+			'<td><input id="wlreal' +
+			i +
+			'" onkeyup="wordListItemChanged(\'wlApply' +
+			i +
+			"')\" value = '" +
+			objWord.real +
+			"' /></td>";
+		sTableWordList +=
+			'<td><input id="wlorg' +
+			i +
+			'" onkeyup="wordListItemChanged(\'wlApply' +
+			i +
+			"')\" value = '" +
+			objWord.org +
+			"' />";
+		sTableWordList +=
+			'<td><input id="wlmean' +
+			i +
+			'" onkeyup="wordListItemChanged(\'wlApply' +
+			i +
+			"')\" value = '" +
+			objWord.mean +
+			"' /></td>";
+		sTableWordList +=
+			'<td><input id="wlcase' +
+			i +
+			'" onkeyup="wordListItemChanged(\'wlApply' +
+			i +
+			"')\" value = '" +
+			objWord.case +
+			"' /></td>";
+		sTableWordList +=
+			'<td><button id="wlApply' +
+			i +
+			'" onclick="updataWord(\'' +
+			i +
+			"')\" type='button' disabled >Apply</button></td></tr>";
+	}
+
 	sTableWordList = sTableWordList + "</table>";
-	g_countWordList=wordList.length;
-	return(sTableWordList);
+	g_countWordList = wordList.length;
+	return sTableWordList;
 }
-function sortCountDesc(a,b)
-{
-	return a.count - b.count
+function sortCountDesc(a, b) {
+	return a.count - b.count;
 }
-function sortCountAsc(a,b)
-{
-	return b.count - a.count
+function sortCountAsc(a, b) {
+	return b.count - a.count;
 }
 
-function sortPaliDesc(a,b)
-{
-	return a.pali.localeCompare(b.pali)
+function sortPaliDesc(a, b) {
+	return a.pali.localeCompare(b.pali);
 }
-function sortPaliAsc(a,b)
-{
-	return b.pali.localeCompare(a.pali)
+function sortPaliAsc(a, b) {
+	return b.pali.localeCompare(a.pali);
 }
 
-function sortRealDesc(a,b)
-{
-	return a.real.localeCompare(b.real)
+function sortRealDesc(a, b) {
+	return a.real.localeCompare(b.real);
 }
-function sortRealAsc(a,b)
-{
-	return b.real.localeCompare(a.real)
+function sortRealAsc(a, b) {
+	return b.real.localeCompare(a.real);
 }
 
-function addWordToWordList(wordArray,newWord){
-	var index=-1;
-	
-	for(var i=0;i<wordArray.length;i++){
-		if(wordArray[i].pali==newWord.pali){
-			if(wordArray[i].real==newWord.real){
-				if(wordArray[i].mean==newWord.mean){
-					if(wordArray[i].org==newWord.org){
-						if(wordArray[i].om==newWord.om){
-							if(wordArray[i].case==newWord.case){
-			index=i;
-			break;
-			}
-			}
-			}
-			}
+function addWordToWordList(wordArray, newWord) {
+	var index = -1;
+
+	for (var i = 0; i < wordArray.length; i++) {
+		if (wordArray[i].pali == newWord.pali) {
+			if (wordArray[i].real == newWord.real) {
+				if (wordArray[i].mean == newWord.mean) {
+					if (wordArray[i].org == newWord.org) {
+						if (wordArray[i].om == newWord.om) {
+							if (wordArray[i].case == newWord.case) {
+								index = i;
+								break;
+							}
+						}
+					}
+				}
 			}
-			
-			
 		}
 	}
-	if(index>=0){
+	if (index >= 0) {
 		wordArray[index].count++;
-		wordArray[index].wordid+="$"+newWord.index
-	}
-	else{
-		wordArray.push(newWord)
+		wordArray[index].wordid += "$" + newWord.index;
+	} else {
+		wordArray.push(newWord);
 	}
 }
 
-function refreshWordList(){
+function refreshWordList() {
 	document.getElementById("word_table_inner").innerHTML = makeWordList();
 }
 
-function wordListItemChanged(btnApplyId){
-	try{
-	document.getElementById(btnApplyId).disabled=false;
-	document.getElementById("btnApplyAll").disabled=false;
-	}
-	catch(e){
+function wordListItemChanged(btnApplyId) {
+	try {
+		document.getElementById(btnApplyId).disabled = false;
+		document.getElementById("btnApplyAll").disabled = false;
+	} catch (e) {
 		alert(e);
 	}
 }
 
-function applyAllWordInList(){
-	for(var i=0;i<g_countWordList;i++){
-		if(document.getElementById("wlApply"+i).disabled==false){
+function applyAllWordInList() {
+	for (var i = 0; i < g_countWordList; i++) {
+		if (document.getElementById("wlApply" + i).disabled == false) {
 			updataWord(i);
 		}
 	}
-	document.getElementById("btnApplyAll").disabled=true;
+	document.getElementById("btnApplyAll").disabled = true;
 }
 
-
-function tran_edit(iSutta,iPar,iTran){
-	gTextEditMediaType="translate";
-	gSutta=iSutta;
-	gPar=iPar;
-	gTran=iTran;
-	var tranText = getTranText(iSutta,iPar,iTran);
-	document.getElementById("id_text_edit_area").value=tranText;
-	document.getElementById("id_text_edit_form").style.display="block";
+function tran_edit(iSutta, iPar, iTran) {
+	gTextEditMediaType = "translate";
+	gSutta = iSutta;
+	gPar = iPar;
+	gTran = iTran;
+	var tranText = getTranText(iSutta, iPar, iTran);
+	document.getElementById("id_text_edit_area").value = tranText;
+	document.getElementById("id_text_edit_form").style.display = "block";
 }
 
-
-
 /*make book mark*/
-function bookMark(){
-	var colorStyle="";
-	var strBookMark="";
-	var iWordCount=0;
+function bookMark() {
+	var colorStyle = "";
+	var strBookMark = "";
+	var iWordCount = 0;
 
-
-		xWord = gXmlBookDataBody.getElementsByTagName("word");
-		/*遍历所有单词*/
+	xWord = gXmlBookDataBody.getElementsByTagName("word");
+	/*遍历所有单词*/
 	var xBlock = gXmlBookDataBody.getElementsByTagName("block");
-	var iWordCount=0;
-	for(iBlock=0;iBlock<xBlock.length;iBlock++){
-		var xData=xBlock[iBlock].getElementsByTagName("data")[0]
+	var iWordCount = 0;
+	for (iBlock = 0; iBlock < xBlock.length; iBlock++) {
+		var xData = xBlock[iBlock].getElementsByTagName("data")[0];
 		parInfo = xBlock[iBlock].getElementsByTagName("info")[0];
-		book=getNodeText(parInfo,"book");
-		parNo=getNodeText(parInfo,"paragraph");
-		
+		book = getNodeText(parInfo, "book");
+		parNo = getNodeText(parInfo, "paragraph");
+
 		xWord = xData.getElementsByTagName("word");
-		for(k=0;k<xWord.length;k++)
-		{
-			strWordPali = getNodeText(xWord[k],"pali");
-			strWordMean = getNodeText(xWord[k],"mean");
-			strWordId  = getNodeText(xWord[k],"id");
-			strWordBookMarkColor = getNodeText(xWord[k],"bmc");
-			if(strWordBookMarkColor.length>0){
-				if(strWordBookMarkColor.substr(3,1)!=0){/*屏蔽显示注释的Bug*/
-				var markString = strWordBookMarkColor.substr(3,1);
-					colorStyle = "bookmarkcolor"+markString;
-				var bookMarkId = "w"+strWordId;
-					strBookMark +=  "<p class=\"bm"+markString+"\"><span class='bookmarkcolorblock , "+colorStyle+"'>"+markString+"</span>";
+		for (k = 0; k < xWord.length; k++) {
+			strWordPali = getNodeText(xWord[k], "pali");
+			strWordMean = getNodeText(xWord[k], "mean");
+			strWordId = getNodeText(xWord[k], "id");
+			strWordBookMarkColor = getNodeText(xWord[k], "bmc");
+			if (strWordBookMarkColor.length > 0) {
+				if (strWordBookMarkColor.substr(3, 1) != 0) {
+					/*屏蔽显示注释的Bug*/
+					var markString = strWordBookMarkColor.substr(3, 1);
+					colorStyle = "bookmarkcolor" + markString;
+					var bookMarkId = "w" + strWordId;
+					strBookMark +=
+						'<p class="bm' +
+						markString +
+						"\"><span class='bookmarkcolorblock , " +
+						colorStyle +
+						"'>" +
+						markString +
+						"</span>";
 					//strBookMark += "<a href=\"#"+bookMarkId+"\">"+strWordPali+":"+strWordMean.substr(3,10)+"</a></p>";
-					strBookMark += "<a onclick=\"editor_goto_link('"+book+"',"+parNo+",'"+bookMarkId+"')\">"+strWordPali+":"+strWordMean.substr(3,10)+"</a></p>";
+					strBookMark +=
+						"<a onclick=\"editor_goto_link('" +
+						book +
+						"'," +
+						parNo +
+						",'" +
+						bookMarkId +
+						"')\">" +
+						strWordPali +
+						":" +
+						strWordMean.substr(3, 10) +
+						"</a></p>";
 				}
 			}
 			iWordCount++;
 		}
 	}
 
-	return(strBookMark);
+	return strBookMark;
 }
-function setBookmarkVisibility_all(){
-	var book_MarkId_array=new Array();
-	var book_MarkClass_array=new Array();
-	for(bookMark_i in g_bookMark_array){
-		book_MarkId_array.push("B_Bookmark_"+g_bookMark_array[bookMark_i]);
-		book_MarkClass_array.push("bm"+g_bookMark_array[bookMark_i]);
-	}
-	var isVisible = document.getElementById('B_Bookmark_All').checked;
-	for(bookMark_j in book_MarkId_array){
-		eval("document.getElementById('"+book_MarkId_array[bookMark_j]+"').checked=isVisible");
-		getStyleClass(book_MarkClass_array[bookMark_j]).style.display = (isVisible ? 'block' : 'none');
-		var book_mark_spanId="";
-		book_mark_spanId=book_MarkId_array[bookMark_j]+"_span"
-		if(isVisible==true){
-			eval("lock_key("+book_mark_spanId+".id,'on','"+book_MarkId_array[bookMark_j]+"','bookmark')");
-		}
-		else{
-			eval("lock_key("+book_mark_spanId+".id,'off','"+book_MarkId_array[bookMark_j]+"','bookmark')");
+function setBookmarkVisibility_all() {
+	var book_MarkId_array = new Array();
+	var book_MarkClass_array = new Array();
+	for (bookMark_i in g_bookMark_array) {
+		book_MarkId_array.push("B_Bookmark_" + g_bookMark_array[bookMark_i]);
+		book_MarkClass_array.push("bm" + g_bookMark_array[bookMark_i]);
+	}
+	var isVisible = document.getElementById("B_Bookmark_All").checked;
+	for (bookMark_j in book_MarkId_array) {
+		eval("document.getElementById('" + book_MarkId_array[bookMark_j] + "').checked=isVisible");
+		getStyleClass(book_MarkClass_array[bookMark_j]).style.display = isVisible ? "block" : "none";
+		var book_mark_spanId = "";
+		book_mark_spanId = book_MarkId_array[bookMark_j] + "_span";
+		if (isVisible == true) {
+			eval("lock_key(" + book_mark_spanId + ".id,'on','" + book_MarkId_array[bookMark_j] + "','bookmark')");
+		} else {
+			eval("lock_key(" + book_mark_spanId + ".id,'off','" + book_MarkId_array[bookMark_j] + "','bookmark')");
 		}
 	}
 }
-function setBookmarkVisibility(className,controlID){
+function setBookmarkVisibility(className, controlID) {
 	var isVisible = document.getElementById(controlID).checked;
-	getStyleClass(className).style.display = (isVisible ? 'flex' : 'none');
+	getStyleClass(className).style.display = isVisible ? "flex" : "none";
 }
 /*刷新书签*/
-function refreshBookMark(){
+function refreshBookMark() {
 	document.getElementById("navi_bookmark_inner").innerHTML = bookMark();
 }
 /*Apply all system match words*/
-function applyAllSysMatch(){
-
-	var iWordCount=0;
-	var iModified=0;
+function applyAllSysMatch() {
+	var iWordCount = 0;
+	var iModified = 0;
 
-		xWord = gXmlBookDataBody.getElementsByTagName("word");
-		/*遍历此经中所有单词*/
-		for(k=0;k<xWord.length;k++)
+	xWord = gXmlBookDataBody.getElementsByTagName("word");
+	/*遍历此经中所有单词*/
+	for (k = 0; k < xWord.length; k++) {
 		{
-			{
-				if(getNodeText(xWord[k],"bmc")=="bmca"){
-					setNodeText(xWord[k],"bmc","bmc0")
-					updataWordBodyByElement(xWord[k]);
-					iModified++;					
-				}
+			if (getNodeText(xWord[k], "bmc") == "bmca") {
+				setNodeText(xWord[k], "bmc", "bmc0");
+				updataWordBodyByElement(xWord[k]);
+				iModified++;
 			}
-			iWordCount++;
 		}
-	
-	if(iWordCount>0){
-		document.getElementById("navi_bookmark_inner").innerHTML = bookMark();
+		iWordCount++;
 	}
-	var_dump(iModified+"个单词被确认。")
-}
-
-function setUseMode(strUseMode){
-	var multi_trans_strUseMode=gLocal.gui.edit
-	if(strUseMode=="Read"){
-			multi_trans_strUseMode="<svg class=\"icon\"><use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"svg/icon.svg#ic_reader_mode\"></use></svg>"
 
+	if (iWordCount > 0) {
+		document.getElementById("navi_bookmark_inner").innerHTML = bookMark();
 	}
-	else{
-			multi_trans_strUseMode="<svg class=\"icon\"><use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"svg/icon.svg#ic_mode_edit\"></use></svg>"
+	var_dump(iModified + "个单词被确认。");
+}
 
-	}
-	document.getElementById("use_mode").innerHTML = multi_trans_strUseMode+"<svg class=\"small_icon\"><use xlink:href=\"svg/icon.svg#ic_down\"></use></svg>";
-	switch(strUseMode){
+function setUseMode(strUseMode) {
+	var multi_trans_strUseMode = gLocal.gui.edit;
+	if (strUseMode == "Read") {
+		multi_trans_strUseMode =
+			'<svg class="icon"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="svg/icon.svg#ic_reader_mode"></use></svg>';
+	} else {
+		multi_trans_strUseMode =
+			'<svg class="icon"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="svg/icon.svg#ic_mode_edit"></use></svg>';
+	}
+	document.getElementById("use_mode").innerHTML =
+		multi_trans_strUseMode + '<svg class="small_icon"><use xlink:href="svg/icon.svg#ic_down"></use></svg>';
+	switch (strUseMode) {
 		case "Read":
-			g_useMode="read";
-			getStyleClass('edit_tran_button').style.display = "none";
-			getStyleClass('edit_tool').style.display = "none";
-			getStyleClass('tran_input').style.display = "none";
+			g_useMode = "read";
+			getStyleClass("edit_tran_button").style.display = "none";
+			getStyleClass("edit_tool").style.display = "none";
+			getStyleClass("tran_input").style.display = "none";
 			break;
 		case "Edit":
-			g_useMode="edit";
-			getStyleClass('edit_tran_button').style.display = "inline";
-			getStyleClass('edit_tool').style.display = "inline";
-			getStyleClass('tran_input').style.display = "none";
+			g_useMode = "edit";
+			getStyleClass("edit_tran_button").style.display = "inline";
+			getStyleClass("edit_tool").style.display = "inline";
+			getStyleClass("tran_input").style.display = "none";
 			break;
 		case "Translate":
-			g_useMode="translate";
-			getStyleClass('edit_tran_button').style.display = "inline";
-			getStyleClass('tran_input').style.display = "block";
+			g_useMode = "translate";
+			getStyleClass("edit_tran_button").style.display = "inline";
+			getStyleClass("tran_input").style.display = "block";
 			break;
-
 	}
 
-
-	if(gXmlBookDataBody!=null){
+	if (gXmlBookDataBody != null) {
 		var mWordNode = gXmlBookDataBody.getElementsByTagName("word");
 		/*遍历所有单词*/
-		for(k=0;k<mWordNode.length;k++)
-		{
+		for (k = 0; k < mWordNode.length; k++) {
 			modifyWordDetailByWordIndex(k);
 		}
 	}
 
-	document.getElementById('menuUseMode').style.display = "none";
+	document.getElementById("menuUseMode").style.display = "none";
 }
 
-
-function setUseMode_Static(strUseMode){
-	if(strUseMode=="chanting"){
+function setUseMode_Static(strUseMode) {
+	if (strUseMode == "chanting") {
 		document.getElementById("use_mode").innerHTML = "Chanting";
-		g_useMode="chanting";
-		getStyleClass('chanting_enter').style.display = "block";
-	}	
-	else{
+		g_useMode = "chanting";
+		getStyleClass("chanting_enter").style.display = "block";
+	} else {
 		document.getElementById("use_mode").innerHTML = "Read";
-		g_useMode="read";
-		getStyleClass('chanting_enter').style.display = "none";
+		g_useMode = "read";
+		getStyleClass("chanting_enter").style.display = "none";
 	}
-	
+
 	dropbtnClick("menu01");
-			
 }
 
-function hiddenMenu(){
-	getStyleClass('dropdown-content').style.display = 'none';
+function hiddenMenu() {
+	getStyleClass("dropdown-content").style.display = "none";
 }
 
-
-function splitAll(){
-var un_Dict = gXmlBookDataBody.getElementsByTagName("word");//拿到數組
-		var un_count=0
-		for(i_un=0;i_un<un_Dict.length;i_un++)
-		{
-			un_case=getNodeText(un_Dict[i_un],"case");
-			un_id=getNodeText(un_Dict[i_un],"id");
-			if(un_case.lastIndexOf(".un.")!=-1)
-				{//un_case.indexOf("#")>=0;
-				//nextElement=com_get_nextsibling(xmlElement);
-				//if(getNodeText(un_Dict[i_un+1],"case")!=null){//若不為空
-					/*if(getNodeText(nextElement,"un")==getNodeText(wordNode,"id")){//若孩子則——
-					//}
-					//else{//無kid展開按鈕*/
-						edit_un_split(un_id);
-						un_count=un_count+1
-					}
-				/*}
-				else{//無標點,拆
-					edit_un_split(un_id);
-					un_count=un_count+1
-				}*/
-			}	
-		var_dump(un_count+" "+gLocal.gui.allsplit);
-		
-		}
-
-
-//getNodeText(xDict[iword],"case");返回case信息,.indexOf("#")>=0檢查#,用split拆,取[0]==.un.,
-
-
-
-
-function sortMeanByDictOrder(wa, wb)
-{
-	var w1=wa.split('$')[0];
-	var w2=wb.split('$')[0];
-	var index1=wa.split('$')[1];
-	var index2=wb.split('$')[1];
+function sortMeanByDictOrder(wa, wb) {
+	var w1 = wa.split("$")[0];
+	var w2 = wb.split("$")[0];
+	var index1 = wa.split("$")[1];
+	var index2 = wb.split("$")[1];
 	//order by dictionary index
-	order=w1-w2;
-	if(order==0){
+	order = w1 - w2;
+	if (order == 0) {
 		//if dictionay is same order by index of meaning array
-		order=index1-index2;
+		order = index1 - index2;
 	}
 
-	return order
+	return order;
 }
 
-function sortMeanByLanguageOrder(wa, wb)
-{
-	var w1=wa.split('$')[4];
-	var w2=wb.split('$')[4];
+function sortMeanByLanguageOrder(wa, wb) {
+	var w1 = wa.split("$")[4];
+	var w2 = wb.split("$")[4];
 	//order by dictionary index
-	order=w1-w2;
-	return order
+	order = w1 - w2;
+	return order;
 }
 
-function removeSameWordInArray(wordList){
+function removeSameWordInArray(wordList) {
 	var output = new Array();
-	
-	for(indexWord in wordList){
-		oneWord=wordList[indexWord].split("$");
-		var isExist=false;
-		for(x in output){
-			if(output[x].word==oneWord[3]){
-				isExist=true;
+
+	for (indexWord in wordList) {
+		oneWord = wordList[indexWord].split("$");
+		var isExist = false;
+		for (x in output) {
+			if (output[x].word == oneWord[3]) {
+				isExist = true;
 			}
 		}
-		if(!isExist){
+		if (!isExist) {
 			var objWord = new Object();
-			objWord.word=oneWord[3];
-			objWord.parent=oneWord[2];
+			objWord.word = oneWord[3];
+			objWord.parent = oneWord[2];
 			output.push(objWord);
 		}
 	}
-	return(output);
-}
+	return output;
+}

+ 0 - 17
app/studio/plugin/system_tools/gui.html

@@ -6,20 +6,3 @@
 	</svg>
 	</button>
 </div>
-
-<div>
-	<button type="button" style="color: var(--btn-color);" onclick="splitAll()">
-		<?php echo $module_gui_str['editor']['1106']; //拆詞神器?>
-		<svg class="icon">
-			<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="svg/icon.svg#ic_content_cut"></use>
-		</svg>
-	</button>
-</div>
-<div>
-	<button type="button" style="color: var(--btn-color);" onclick="magic_sentence_cut()">
-		<?php echo $module_gui_str['editor']['1105']; //切句神器?>
-		<svg class="icon">
-			<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="svg/icon.svg#ic_content_cut"></use>
-		</svg>
-	</button>
-</div>

+ 3 - 3
app/ucenter/active_get.php

@@ -23,11 +23,11 @@ if(isset($userid)){
 	$last = 0;
 	while($row = $sth->fetch(PDO::FETCH_ASSOC)){
 		$curr = $last+$row["duration"]/3600000;
-		$output[]=array($row["date"],number_format($last,3,".",""),number_format($curr,3,".",""),number_format($last,3,".",""),number_format($curr,3,".",""),$row["hit"]);
+		$output[]=array($row["date"],round($last,3),round($curr,3),round($last,3),round($curr,3),$row["hit"]);
 		$last = $curr;
 	}
 
-	$json =  json_encode($output);
-	echo str_replace('"','',$json);
+	echo  json_encode($output);
+	//echo str_replace('"','',$json);
 }
 ?>

+ 2 - 2
app/upgrade/upgrade_pali_toc.php

@@ -113,7 +113,7 @@ foreach ($valid_book as $key => $book) {
 		# 查询巴利字符数
 		$query = "SELECT sum(strlen) as pali_strlen from pali_sent_index where book = ? and para between ? and ? ";
 		$stmt = $dbh_pali_sent->prepare($query);
-		$stmt->execute(array($book["book"],$chapter["paragraph"],$chapter["paragraph"]+$chapter["chapter_len"]));
+		$stmt->execute(array($book["book"],$chapter["paragraph"],(int)$chapter["paragraph"]+(int)$chapter["chapter_len"]-1));
 		$result_chapter_strlen = $stmt->fetch(PDO::FETCH_ASSOC);
 		if($result_chapter_strlen){
 			$pali_strlen = (int)$result_chapter_strlen["pali_strlen"];
@@ -121,7 +121,7 @@ foreach ($valid_book as $key => $book) {
 			foreach ($result_lang as $lang) {
 				$query = "SELECT sum(all_strlen) as all_strlen from progress where book = ? and (para between ? and ? )and lang = ?";
 				$stmt = $dbh_toc->prepare($query);
-				$stmt->execute(array($book["book"],$chapter["paragraph"],$chapter["paragraph"]+$chapter["chapter_len"],$lang["language"]));
+				$stmt->execute(array($book["book"],$chapter["paragraph"],(int)$chapter["paragraph"]+(int)$chapter["chapter_len"]-1,$lang["language"]));
 				$result_chapter_trans_strlen = $stmt->fetch(PDO::FETCH_ASSOC);
 				if($result_chapter_trans_strlen){
 					$tran_strlen = (int)$result_chapter_trans_strlen["all_strlen"];