瀏覽代碼

:bug: 搜索update失败

visuddhinanda 5 年之前
父節點
當前提交
e552ac77d0

+ 2 - 1
app/pcdl/css/style.css

@@ -1043,12 +1043,13 @@ input[type="submit"]:disabled {
 
 /* 下拉菜单的链接 */
 .case_dropdown-content a {
-    /*padding: 0.3em 0.4em;*/
+    padding: 0.3em 0.4em;
 	line-height: 160%;
     text-decoration: none;
     display: block;
     cursor: pointer;
     text-align: left;
+    color: var(--main-color);
 }
 
 /* 鼠标移上去后修改下拉菜单链接颜色 */

+ 1 - 1
app/pcdl/html_head.php

@@ -48,7 +48,7 @@ else{
 		font-size: 1em;
 		line-height: 1.3;
 	}
-	.card .title a , a:link{
+	.card>.title>a , .card>.title>a:link{
 		color: var(--tool-link-hover-color);
 	}
 	.card a:hover{

+ 271 - 263
app/search/paliword.js

@@ -1,294 +1,302 @@
-var dict_pre_searching=false;
-var dict_pre_search_curr_word="";
-var dict_search_xml_http=null;
+var dict_pre_searching = false;
+var dict_pre_search_curr_word = "";
+var dict_search_xml_http = null;
 
-function search_book_filter(objid,type){
-	if(document.getElementById(objid).checked==true){
-		$("."+type).show();
-	}
-	else{
-		$("."+type).hide();
-	}
+function search_book_filter(objid, type) {
+  if (document.getElementById(objid).checked == true) {
+    $("." + type).show();
+  } else {
+    $("." + type).hide();
+  }
 }
-function dict_bold_word_all_select(){
-	var wordcount=$("#bold_word_count").val();	
-	for(var i=0;i<wordcount;i++){
-		document.getElementById("bold_word_"+i).checked=document.getElementById("bold_all_word").checked;
-	}
+function dict_bold_word_all_select() {
+  var wordcount = $("#bold_word_count").val();
+  for (var i = 0; i < wordcount; i++) {
+    document.getElementById("bold_word_" + i).checked = document.getElementById(
+      "bold_all_word"
+    ).checked;
+  }
 
-	dict_update_bold(0);
-	
+  dict_update_bold(0);
 }
 
-function dict_bold_word_select(id){
-	var wordcount=$("#bold_word_count").val();	
-	for(var i=0;i<wordcount;i++){
-			document.getElementById("bold_word_"+i).checked=false;
-	}
-	document.getElementById("bold_word_"+id).checked=true;
+function dict_bold_word_select(id) {
+  var wordcount = $("#bold_word_count").val();
+  for (var i = 0; i < wordcount; i++) {
+    document.getElementById("bold_word_" + i).checked = false;
+  }
+  document.getElementById("bold_word_" + id).checked = true;
 
-	dict_update_bold(0);
-	
+  dict_update_bold(0);
 }
-function dict_bold_book_select(id){
-	var bookcount=$("#bold_book_count").val();	
-	for(var i=0;i<bookcount;i++){
-		document.getElementById("bold_book_"+i).checked=false;
-	}
-	document.getElementById("bold_book_"+id).checked=true;
+function dict_bold_book_select(id) {
+  var bookcount = $("#bold_book_count").val();
+  for (var i = 0; i < bookcount; i++) {
+    document.getElementById("bold_book_" + i).checked = false;
+  }
+  document.getElementById("bold_book_" + id).checked = true;
 
-	dict_update_bold(0);
-	
+  dict_update_bold(0);
 }
-function dict_update_bold(currpage){
-	var wordlist="(";
-	var wordcount=$("#bold_word_count").val();	
-	for(var i=0;i<wordcount;i++){
-		if(document.getElementById("bold_word_"+i).checked){
-			wordlist+="'"+$("#bold_word_"+i).val()+"',";
-		}
-	}
-	wordlist=wordlist.slice(0,-1);
-	wordlist+=")";
+function dict_update_bold(currpage) {
+  var wordlist = "(";
+  var wordcount = $("#bold_word_count").val();
+  for (var i = 0; i < wordcount; i++) {
+    if (document.getElementById("bold_word_" + i).checked) {
+      wordlist += "'" + $("#bold_word_" + i).val() + "',";
+    }
+  }
+  wordlist = wordlist.slice(0, -1);
+  wordlist += ")";
 
-	var booklist="(";
-	var bookcount=$("#bold_book_count").val();
-	for(var i=0;i<bookcount;i++){
-		if(document.getElementById("bold_book_"+i).checked){
-			booklist+="'"+$("#bold_book_"+i).val()+"',";
-		}	
-	}	
-	booklist=booklist.slice(0,-1);
-	booklist+=")";
-	
-	$.get("paliword_search.php",
-	  {
-		op:"update",
-		target:"bold",
-		word:"",
-		wordlist:wordlist,
-		booklist:booklist,
-		currpage:currpage
-	  },
-	  function(data,status){
-		//alert("Data: " + data + "\nStatus: " + status);
-		$("#dict_bold_right").html(data);
-		$("#bold_book_list").html($("#bold_book_list_new").html());
-		$("#bold_book_list_new").html("");
-	  });
-		
-}
-function search_search(word){
-	$("#pre_search_result").hide();
-	if(!localStorage.searchword){
-		localStorage.searchword="";
-	}
-	let oldHistory=localStorage.searchword;
-	let arrOldHistory=oldHistory.split(",");
-	let isExist=false;
-	for(let i=0;i<arrOldHistory.length;i++){
-		if(arrOldHistory[i]==word){
-			isExist=true;
-		}
-	}
-	if(!isExist){
-		localStorage.searchword=word+","+oldHistory;
-	}
-	
-	if(window.XMLHttpRequest)
-	{// code for IE7, Firefox, Opera, etc.
-		dict_search_xml_http=new XMLHttpRequest();
-	}
-	else if(window.ActiveXObject)
-	{// code for IE6, IE5
-		dict_search_xml_http=new ActiveXObject("Microsoft.XMLHTTP");
-	}
-	  
-	if (dict_search_xml_http!=null)
-	{
-		dict_search_xml_http.onreadystatechange=dict_search_serverResponse;
-		word=word.replace(/\+/g,"%2b");
-		dict_search_xml_http.open("GET", "paliword_search.php?op=search&word="+word, true);
-		dict_search_xml_http.send();
-	}
-	else
-	{
-		alert("Your browser does not support XMLHTTP.");
-	}
-}
-function dict_search_serverResponse(){
-	if (dict_search_xml_http.readyState==4)// 4 = "loaded"
-	{
-		if (dict_search_xml_http.status==200)
-		{// 200 = "OK"
-			var serverText = dict_search_xml_http.responseText;
-			dict_result=document.getElementById("dict_ref_search_result");
-			if(dict_result){
-				dict_result.innerHTML=serverText;
-				$("#dict_ref_dict_link").html($("#dictlist").html());
-				$("#dictlist").html("");
-			}
-			//$("#dict_type").html($("#real_dict_tab").html());
-		}
-		else
-		{
-			alert(dict_pre_search_xml_http.statusText,0);
-		}
-	}
-}
+  var booklist = "(";
+  var bookcount = $("#bold_book_count").val();
+  for (var i = 0; i < bookcount; i++) {
+    if (document.getElementById("bold_book_" + i).checked) {
+      booklist += "'" + $("#bold_book_" + i).val() + "',";
+    }
+  }
+  if (booklist.slice(-1) == ",") {
+    booklist = booklist.slice(0, -1);
+  }
 
+  booklist += ")";
 
-var dict_pre_search_xml_http=null;
-function search_pre_search(word){
-	if(dict_pre_searching==true){return;}
-	dict_pre_searching=true;
-	dict_pre_search_curr_word=word;
-	if(window.XMLHttpRequest)
-	{// code for IE7, Firefox, Opera, etc.
-		dict_pre_search_xml_http=new XMLHttpRequest();
-	}
-	else if(window.ActiveXObject)
-	{// code for IE6, IE5
-		dict_pre_search_xml_http=new ActiveXObject("Microsoft.XMLHTTP");
-	}
-	  
-	if (dict_pre_search_xml_http!=null)
-	{
-		dict_pre_search_xml_http.onreadystatechange=dict_pre_search_serverResponse;
-		dict_pre_search_xml_http.open("GET", "paliword_search.php?op=pre&word="+word, true);
-		dict_pre_search_xml_http.send();
-	}
-	else
-	{
-		alert("Your browser does not support XMLHTTP.");
-	}
-	
+  $.get(
+    "paliword_search.php",
+    {
+      op: "update",
+      target: "bold",
+      word: "",
+      wordlist: wordlist,
+      booklist: booklist,
+      currpage: currpage,
+    },
+    function (data, status) {
+      //alert("Data: " + data + "\nStatus: " + status);
+      $("#dict_bold_right").html(data);
+      $("#bold_book_list").html($("#bold_book_list_new").html());
+      $("#bold_book_list_new").html("");
+    }
+  );
 }
+function search_search(word) {
+  $("#pre_search_result").hide();
+  $("#pre_search_result_1").hide();
+  if (!localStorage.searchword) {
+    localStorage.searchword = "";
+  }
+  let oldHistory = localStorage.searchword;
+  let arrOldHistory = oldHistory.split(",");
+  let isExist = false;
+  for (let i = 0; i < arrOldHistory.length; i++) {
+    if (arrOldHistory[i] == word) {
+      isExist = true;
+    }
+  }
+  if (!isExist) {
+    localStorage.searchword = word + "," + oldHistory;
+  }
 
-function dict_pre_search_serverResponse(){
-	if (dict_pre_search_xml_http.readyState==4)// 4 = "loaded"
-	{
-		if (dict_pre_search_xml_http.status==200)
-		{// 200 = "OK"
-			var serverText = dict_pre_search_xml_http.responseText;
-			$("#pre_search_word_content").html(serverText);
-
-		}
-		else
-		{
-			alert(dict_pre_search_xml_http.statusText,0);
-		}
-		dict_pre_searching=false;
-		var newword = document.getElementById("dict_ref_search_input").value;
-		if(newword!=dict_pre_search_curr_word){
-			search_pre_search(newword);
-		}
-	}
+  if (window.XMLHttpRequest) {
+    // code for IE7, Firefox, Opera, etc.
+    dict_search_xml_http = new XMLHttpRequest();
+  } else if (window.ActiveXObject) {
+    // code for IE6, IE5
+    dict_search_xml_http = new ActiveXObject("Microsoft.XMLHTTP");
+  }
 
+  if (dict_search_xml_http != null) {
+    dict_search_xml_http.onreadystatechange = dict_search_serverResponse;
+    word = word.replace(/\+/g, "%2b");
+    dict_search_xml_http.open(
+      "GET",
+      "paliword_search.php?op=search&word=" + word,
+      true
+    );
+    dict_search_xml_http.send();
+  } else {
+    alert("Your browser does not support XMLHTTP.");
+  }
 }
-function dict_pre_word_click(word){
-	$("#pre_search_result").hide();
-	let inputSearch = $("#dict_ref_search_input").val();
-	let arrSearch = inputSearch.split(" ");
-	arrSearch[arrSearch.length-1]=word;
-	let strSearchWord = arrSearch.join(" ");
-	$("#dict_ref_search_input").val(strSearchWord);
-	search_search(word);
+function dict_search_serverResponse() {
+  if (dict_search_xml_http.readyState == 4) {
+    // 4 = "loaded"
+    if (dict_search_xml_http.status == 200) {
+      // 200 = "OK"
+      var serverText = dict_search_xml_http.responseText;
+      dict_result = document.getElementById("dict_ref_search_result");
+      if (dict_result) {
+        dict_result.innerHTML = serverText;
+        $("#dict_ref_dict_link").html($("#dictlist").html());
+        $("#dictlist").html("");
+      }
+      //$("#dict_type").html($("#real_dict_tab").html());
+    } else {
+      alert(dict_pre_search_xml_http.statusText, 0);
+    }
+  }
 }
 
-function dict_input_change(obj){
-	search_pre_search(obj.value);
-}
+var dict_pre_search_xml_http = null;
+function search_pre_search(word) {
+  if (dict_pre_searching == true) {
+    return;
+  }
+  dict_pre_searching = true;
+  dict_pre_search_curr_word = word;
+  if (window.XMLHttpRequest) {
+    // code for IE7, Firefox, Opera, etc.
+    dict_pre_search_xml_http = new XMLHttpRequest();
+  } else if (window.ActiveXObject) {
+    // code for IE6, IE5
+    dict_pre_search_xml_http = new ActiveXObject("Microsoft.XMLHTTP");
+  }
 
-function search_show_history(){
-	if(!localStorage.searchword){
-		localStorage.searchword="";
-	}
-	var arrHistory=localStorage.searchword.split(",");
-	var strHistory="";
-	if(arrHistory.length>0){
-		strHistory+="<a onclick=\"cls_word_search_history()\">清空历史记录</a>";
-	}
-	for(var i=0;i<arrHistory.length;i++){
-		var word=arrHistory[i];
-		strHistory+="<div class='dict_word_list'>";
-		strHistory+="<a onclick='dict_pre_word_click(\""+word+"\")'>"+word+"</a>";
-		strHistory+="</div>";
-	}
-	$("#dict_ref_search_result").html(strHistory);	
+  if (dict_pre_search_xml_http != null) {
+    dict_pre_search_xml_http.onreadystatechange = dict_pre_search_serverResponse;
+    dict_pre_search_xml_http.open(
+      "GET",
+      "paliword_search.php?op=pre&word=" + word,
+      true
+    );
+    dict_pre_search_xml_http.send();
+  } else {
+    alert("Your browser does not support XMLHTTP.");
+  }
 }
 
-function search_input_onfocus(){
-	if($("#dict_ref_search_input").val()==""){
-		search_show_history();
-	}
+function dict_pre_search_serverResponse() {
+  if (dict_pre_search_xml_http.readyState == 4) {
+    // 4 = "loaded"
+    if (dict_pre_search_xml_http.status == 200) {
+      // 200 = "OK"
+      var serverText = dict_pre_search_xml_http.responseText;
+      $("#pre_search_word_content").html(serverText);
+    } else {
+      alert(dict_pre_search_xml_http.statusText, 0);
+    }
+    dict_pre_searching = false;
+    var newword = document.getElementById("dict_ref_search_input").value;
+    if (newword != dict_pre_search_curr_word) {
+      search_pre_search(newword);
+    }
+  }
+}
+function dict_pre_word_click(word) {
+  $("#pre_search_result").hide();
+  $("#pre_search_result_1").hide();
+  let inputSearch = $("#dict_ref_search_input").val();
+  let arrSearch = inputSearch.split(" ");
+  arrSearch[arrSearch.length - 1] = word;
+  let strSearchWord = arrSearch.join(" ");
+  $("#dict_ref_search_input").val(strSearchWord);
+  $("#dict_ref_search_input_1").val(strSearchWord);
+  search_search(word);
 }
-function search_input_keyup(e,obj){
-	var keynum
-	var keychar
-	var numcheck
 
-	if($("#dict_ref_search_input").val()==""){
-		search_show_history();
-		$("#pre_search_result").hide();
-		return;
-	}
-	
-	if(window.event) // IE
-	{
-	keynum = e.keyCode
-	}
-	else if(e.which) // Netscape/Firefox/Opera
-	{
-	keynum = e.which
-	}
-	var keychar = String.fromCharCode(keynum)
-	if(keynum==13){
-		//search_search(obj.value);
-		window.location.assign("../search/paliword.php?key="+obj.value);
-	}
-	else{
-		if(obj.value.indexOf(" ")>=0){
-			//search_pre_sent(obj.value);
-		}
-		else{
-			$("#pre_search_sent").hide();
-		}
-		$("#pre_search_result").show();
-		search_pre_search(obj.value);
-		
-	}
+function dict_input_change(obj) {
+  search_pre_search(obj.value);
 }
 
-function search_pre_sent(word){
-	pali_sent_get_word(word,function(result){
-		let html="";
-		try{
-			let arrResult= JSON.parse(result);
-			for(x in arrResult){
-				html+=arrResult[x].text+"<br>";
-			}
-			$("#pre_search_sent_title_right").html("总共"+arrResult.lenght);
-			$("#pre_search_sent_content").html(html);
-			$("#pre_search_sent").show();
-		}
-		catch(e){
-			console.error(e.message);
-		}
-	});
+function search_show_history() {
+  if (!localStorage.searchword) {
+    localStorage.searchword = "";
+  }
+  var arrHistory = localStorage.searchword.split(",");
+  var strHistory = "";
+  if (arrHistory.length > 0) {
+    strHistory += '<a onclick="cls_word_search_history()">清空历史记录</a>';
+  }
+  for (var i = 0; i < arrHistory.length; i++) {
+    var word = arrHistory[i];
+    strHistory += "<div class='dict_word_list'>";
+    strHistory +=
+      "<a onclick='dict_pre_word_click(\"" + word + "\")'>" + word + "</a>";
+    strHistory += "</div>";
+  }
+  $("#dict_ref_search_result").html(strHistory);
 }
-function cls_word_search_history(){
-	localStorage.searchword="";
-	$("#dict_ref_search_result").html("");
 
+function search_input_onfocus() {
+  if ($("#dict_ref_search_input").val() == "") {
+    search_show_history();
+  }
 }
+function search_input_keyup(e, obj) {
+  var keynum;
+  var keychar;
+  var numcheck;
 
-function search_edit_now(book,para,title){
-	var res_list = new Array();
-	res_list.push({"type":"1","album_id":"-1","book":book,"parNum":para,"parlist":para,"title":title+"-"+para});
-	res_list.push({"type":"6","album_id":"-1","book":book,"parNum":para,"parlist":para,"title":title+"-"+para});
-	var res_data = JSON.stringify(res_list);
-	window.open("../studio/project.php?op=create&data="+res_data,"_blank");
+  if ($("#dict_ref_search_input").val() == "") {
+    search_show_history();
+    $("#pre_search_result").hide();
+    $("#pre_search_result_1").hide();
+    return;
+  }
 
+  if (window.event) {
+    // IE
+    keynum = e.keyCode;
+  } else if (e.which) {
+    // Netscape/Firefox/Opera
+    keynum = e.which;
+  }
+  var keychar = String.fromCharCode(keynum);
+  if (keynum == 13) {
+    //search_search(obj.value);
+    window.location.assign("../search/paliword.php?key=" + obj.value);
+  } else {
+    if (obj.value.indexOf(" ") >= 0) {
+      //search_pre_sent(obj.value);
+    } else {
+      $("#pre_search_sent").hide();
+    }
+    $("#pre_search_result").show();
+    $("#pre_search_result_1").show();
+    search_pre_search(obj.value);
+  }
+}
 
-}
+function search_pre_sent(word) {
+  pali_sent_get_word(word, function (result) {
+    let html = "";
+    try {
+      let arrResult = JSON.parse(result);
+      for (x in arrResult) {
+        html += arrResult[x].text + "<br>";
+      }
+      $("#pre_search_sent_title_right").html("总共" + arrResult.lenght);
+      $("#pre_search_sent_content").html(html);
+      $("#pre_search_sent").show();
+    } catch (e) {
+      console.error(e.message);
+    }
+  });
+}
+function cls_word_search_history() {
+  localStorage.searchword = "";
+  $("#dict_ref_search_result").html("");
+}
+
+function search_edit_now(book, para, title) {
+  var res_list = new Array();
+  res_list.push({
+    type: "1",
+    album_id: "-1",
+    book: book,
+    parNum: para,
+    parlist: para,
+    title: title + "-" + para,
+  });
+  res_list.push({
+    type: "6",
+    album_id: "-1",
+    book: book,
+    parNum: para,
+    parlist: para,
+    title: title + "-" + para,
+  });
+  var res_data = JSON.stringify(res_list);
+  window.open("../studio/project.php?op=create&data=" + res_data, "_blank");
+}

+ 1 - 1
app/search/paliword.php

@@ -8,7 +8,7 @@ include "../pcdl/html_head.php";
 	require_once("../search/toobar.php");
 ?>
     <style>
-        #dt_pali{
+        #dt_pali , #dt_pali_1{
             border-bottom: 2px solid var(--link-hover-color);
         }
     </style>

+ 22 - 22
app/search/paliword_search.php

@@ -33,7 +33,6 @@ switch($op){
 		
 		$searching=$arrWordList[count($arrWordList)-1];
 		$dbfile = _FILE_DB_WORD_INDEX_;
-		echo $dbfile;
 		PDO_Connect("sqlite:".$dbfile);
 		
 		if(count($arrWordList)>1){
@@ -43,23 +42,22 @@ switch($op){
 			}
 			echo "</div>";
 		}
-		echo "<div>";
-		$query = "select word,count from wordindex where \"word_en\" like ".$PDO->quote($searching.'%')." OR \"word\" like ".$PDO->quote($searching.'%')." limit 0,50";
-		echo $query;
+
+		$query = "select word,count from wordindex where \"word_en\" like ".$PDO->quote($searching.'%')." OR \"word\" like ".$PDO->quote($searching.'%')." limit 0,20";
 		$Fetch = PDO_FetchAll($query);
 		$queryTime=(microtime_float()-$time_start)*1000;
-		echo "<div >搜索时间:$queryTime </div>";
+
 		$iFetch=count($Fetch);
 		if($iFetch>0){
 			for($i=0;$i<$iFetch;$i++){
 				$word=$Fetch[$i]["word"];
 				$count=$Fetch[$i]["count"];
-				echo  "<div class='dict_word_list'>";
+
 				echo  "<a href='paliword.php?key={$word}'>$word-$count</a>";
-				echo  "</div>";
+
 			}
 		}
-		echo "</div>";
+
 		break;
 	}
 	case "search":
@@ -115,7 +113,7 @@ switch($op){
 		echo "<div style='display:flex;'>";
 		
 		//主显示区左侧开始
-		echo "<div style='flex:3;max-width: 17em;min-width: 10em;'>";
+		echo "<div style='flex:3;max-width: 17em;min-width: 10em;border-right: 1px solid var(--border-line-color);text-align: right;padding-right: 1em;'>";
 
 
 		echo "<button onclick=\"dict_update_bold(0)\">筛选</button>";
@@ -129,10 +127,11 @@ switch($op){
 		$i=0;
 		foreach($aShowWordList as $x=>$x_value) {
 			$wordid=$aShowWordIdList[$x];
-			echo "<input id='bold_word_{$i}' type='checkbox' checked value='{$wordid}' />";
 			echo "<a onclick=\"dict_bold_word_select({$i})\">";
-			echo $x.":".$x_value."<br />";
-			echo "</a>";				
+			echo $x.":".$x_value;
+			echo "</a>";
+			echo "<input id='bold_word_{$i}' type='checkbox' checked value='{$wordid}' />";			
+			echo "<br />";
 			$i++;
 		}
 
@@ -160,7 +159,7 @@ switch($op){
 		//黑体字主显示区左侧结束
 		
 		//黑体字主显示区右侧开始
-		echo "<div id=\"dict_bold_right\" style='flex:7;'>";
+		echo "<div id=\"dict_bold_right\" style='flex:7;padding-left:1em;'>";
 		//前20条记录
 		$time_start=microtime_float();
 		$dictFileName=_FILE_DB_PALI_INDEX_;
@@ -241,8 +240,7 @@ switch($op){
 		echo "<div >搜索时间:$queryTime </div>";
 		echo "</div>";
 		//黑体字主显示区右侧结束
-		echo "<div id=\"dict_bold_review\" style='flex:2;'>";
-		echo "haha";		
+		echo "<div id=\"dict_bold_review\" style='flex:2;'>";	
 		
 		echo "</div>";
 
@@ -270,14 +268,16 @@ switch($op){
 				
 				//前20条记录
 				$time_start=microtime_float();
-				$dictFileName=_FILE_DB_WORD_INDEX_;
+				$dictFileName=_FILE_DB_PALI_INDEX_;
 				PDO_Connect("sqlite:$dictFileName");
 
 				$query = "select * from word where \"wordindex\" in $wordlist and \"book\" in $booklist group by book,paragraph  limit 0,20";
 				$Fetch = PDO_FetchAll($query);
-				//echo "<div>$query</div>";
 				$queryTime=(microtime_float()-$time_start)*1000;
-				echo "<div >搜索时间:$queryTime </div>";
+				//echo "<div >搜索时间:$queryTime </div>";
+				if($booklist=="()"){
+					echo "<div >请选择书名</div>";
+				}
 				$iFetch=count($Fetch);
 				if($iFetch>0){
 					$dictFileName=_FILE_DB_PALITEXT_;
@@ -304,7 +304,7 @@ switch($op){
 						$path_1=$path_1."《{$bookname}》>";
 
 						echo "<div class='dict_word'>";
-						echo  "<div class='dict'>《{$bookname}》 $c1 $c2 </div>";
+						echo  "<div class='book' ><span style='font-size:110%;font-weight:700;'>《{$bookname}》</span> <tag>$c1</tag> <tag>$c2</tag> </div>";
 						echo  "<div class='mean'>$paliword</div>";
 
 						$query = "select * from pali_text where \"book\" = '{$book}' and \"paragraph\" = '{$paragraph}' limit 0,20";
@@ -329,9 +329,9 @@ switch($op){
 										break;
 									}
 								}
-								$path=$path_1.$path."No. ".$paragraph;
-
-								echo  "<div class='mean'>$path</div>";
+								$path=$path."No. ".$paragraph;
+								echo  "<div class='mean' style='font-size:130%;'><a href='../pcdl/reader.php?view=para&book={$book}&paragraph={$paragraph}' target='_blank' >$path</a></div>";
+					
 								//echo  "<div class='mean'>$paliword</div>";
 																
 								if(substr($paliword,-1)=="n"){

+ 1 - 1
app/search/title.php

@@ -8,7 +8,7 @@ include "../pcdl/html_head.php";
 	require_once("../search/toobar.php");
 ?>
     <style>
-        #dt_title{
+        #dt_title , #dt_title_1{
             border-bottom: 2px solid var(--link-hover-color);
         }
     </style>

+ 4 - 11
app/search/title_search.php

@@ -25,6 +25,7 @@ function microtime_float()
     return ((float)$usec + (float)$sec);
 }
 
+
 function render_book_list($strWord,$booklist=null){
 	//查找这些词出现在哪些书中
 	$arrBookType=json_decode(file_get_contents("../public/book_name/booktype.json"));
@@ -81,7 +82,7 @@ function render_book_list($strWord,$booklist=null){
 		echo "<input id='id_book_filter_atthakattha'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_atthakattha','atthakattha')\" />义注-{$booktypesum["atthakattha"][0]}-{$booktypesum["atthakattha"][1]}<br />";
 		echo "<input id='id_book_filter_tika'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_tika','tika')\" />复注-{$booktypesum["tika"][0]}-{$booktypesum["tika"][1]}<br />";
 		echo "<input id='id_book_filter_anna2'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_anna2','anna2')\" />其他-{$booktypesum["anna2"][0]}-{$booktypesum["anna2"][1]}<br /><br />";
-		echo "<hr>";
+		echo "<div style='margin:1em 0 ;'></div>";
 		for($i=0;$i<$iFetch;$i++){
 
 			$book=$Fetch[$i]["book"];
@@ -132,22 +133,16 @@ switch($op){
 			}
 			echo "</div>";
 		}
-		echo "<div>";
-		$query = "select title from 'index' where \"title_en\" like ".$PDO->quote("%".$searching.'%')." OR \"title\" like ".$PDO->quote("%".$searching.'%')." group by title limit 0,50";
-		echo $query;
+		$query = "select title from 'index' where \"title_en\" like ".$PDO->quote("%".$searching.'%')." OR \"title\" like ".$PDO->quote("%".$searching.'%')." group by title limit 0,20";
 		$Fetch = PDO_FetchAll($query);
 		$queryTime=(microtime_float()-$time_start)*1000;
-		echo "<div >搜索时间:$queryTime </div>";
 		$iFetch=count($Fetch);
 		if($iFetch>0){
 			for($i=0;$i<$iFetch;$i++){
 				$word=$Fetch[$i]["title"];
-				echo  "<div class='dict_word_list' style='color:black;'>";
 				echo  "<a href='title.php?key={$word}'>$word</a>";
-				echo  "</div>";
 			}
 		}
-		echo "</div>";
 		break;
 	}
 	case "search":
@@ -163,7 +158,7 @@ switch($op){
 		echo "<button onclick=\"dict_update_bold(0)\">筛选</button>";
 		$queryTime=(microtime_float()-$time_start)*1000;
 		
-		echo "<hr>";
+		echo "<div ></div>";
  		//查找这些词出现在哪些书中
 		echo "<div id='bold_book_list'>";
 		$booklist=render_book_list($_GET["word"]);
@@ -197,7 +192,6 @@ switch($op){
 			$query = "select * from 'index' where \"title_en\" like ".$PDO->quote("%".$_GET["word"].'%')." OR \"title\" like ".$PDO->quote("%".$_GET["word"].'%')." limit 0,50";
 		}
 		$Fetch = PDO_FetchAll($query);
-		echo "<div>$query</div>";
 		$queryTime=(microtime_float()-$time_start)*1000;
 		$iFetch=count($Fetch);
 		if($iFetch>0){
@@ -250,7 +244,6 @@ switch($op){
 		echo "</div>";
 		//黑体字主显示区右侧结束
 		echo "<div id=\"dict_bold_review\" style='flex:2;'>";
-		echo "haha";		
 		
 		echo "</div>";
 

+ 30 - 24
app/search/toobar.php

@@ -21,6 +21,30 @@
 			display:flex;
 			padding: 0.5em 1em;
 		}
+		ul#dict_type li {
+			margin-right: 1em;
+		}
+		ul#dict_type a {
+			color: var(--main-color);
+		}
+
+		ul#dict_type li:hover {
+			background-color: var(--link-color);
+			color: var(--btn-hover-color);
+		}
+		ul#dict_type li:hover a {
+			color: var(--btn-hover-color);
+		}
+
+		.dict_word {
+			display: block;
+			border:none;
+			border-bottom: 1px solid var(--tool-line-color);
+			border-radius: 0;
+			margin: 6px 0;
+			padding: 5px;
+		}
+		
 	</style>
 	<!-- tool bar begin-->
 	<div id='search_toolbar' class="search_toolbar">
@@ -28,20 +52,11 @@
 				<span >
 					<?php echo $_local->gui->search;?>
 				</span>
-				<div>
+				<div class="case_dropdown">
 					<div>
-						<input id="dict_ref_search_input" type="input" placeholder="<?php echo $_local->gui->search;?>" onkeyup="search_input_keyup(event,this)" style="    margin-left: 0.5em;width: 40em;max-width: 80%;font-size:140%;padding: 0.6em;color: var(--btn-hover-bg-color);background-color: var(--btn-color);" onfocus="search_input_onfocus()">
-					</div>
-					<div id="pre_search_result" style="background-color: var(--btn-color);z-index: 50;">
-						<div id="pre_search_word"  class="pre_serach_block">
-							<div id="pre_search_word_title"   class="pre_serach_block_title">
-								<div id="pre_search_word_title_left">单词</div>
-								<div id="pre_search_word_title_right"></div>						
-							</div>
-							<div id="pre_search_word_content"   class="pre_serach_content">
-							</div>
-						</div>
+						<input id="dict_ref_search_input" type="input" placeholder="<?php echo $_local->gui->search;?>" onkeyup="search_input_keyup(event,this)" style="width: 40em;max-width: 80%;font-size:140%;padding: 0.6em;color: var(--btn-hover-bg-color);background-color: var(--btn-color);" onfocus="search_input_onfocus()">
 					</div>
+					<div id="pre_search_word_content" class="case_dropdown-content"></div>
 				</div>
 			</div>
 			<div style="display:block;z-index: 5;">
@@ -70,20 +85,11 @@
 				<span >
 					搜索
 				</span>
-				<div>
+				<div class="case_dropdown">
 					<div>
-						<input id="dict_ref_search_input_1" type="input" placeholder="<?php echo $_local->gui->search;?>" onkeyup="search_input_keyup(event,this)" style="margin-left: 0.5em;width: 40em;max-width: 80%;font-size:140%;padding: 0.3em;color: var(--btn-hover-bg-color);background-color: var(--btn-color);" onfocus="search_input_onfocus()">
-					</div>
-					<div id="pre_search_result_1" style="position: absolute;max-width: 100%; width: 50em;background-color: var(--btn-color);z-index: 51;display: none;">
-						<div  class="pre_serach_block">
-							<div class="pre_serach_block_title">
-								<div id="pre_search_word_title_left_1">单词</div>
-								<div id="pre_search_word_title_right_1"></div>						
-							</div>
-							<div id="pre_search_word_content_1"   class="pre_serach_content">
-							</div>
-						</div>
+						<input id="dict_ref_search_input_1" type="input" placeholder="<?php echo $_local->gui->search;?>" onkeyup="search_input_keyup(event,this)" style="margin-left: 0.5em;width: 40em;max-width: 80%;font-size:120%;padding: 0.2em;color: var(--btn-hover-bg-color);background-color: var(--btn-color);" onfocus="search_input_onfocus()">
 					</div>
+					<div id="pre_search_word_content_1" class="case_dropdown-content"></div>
 				</div>
 			</div>
 			<div style="display:block;z-index: 5;">

+ 13 - 11
app/search/word_function.php

@@ -52,17 +52,19 @@ function render_book_list($strWordlist,$booklist=null){
 				$booktypesum[$t2][1]=$sum;
 			}
 		}
-		echo "<div id='bold_book_list_new'>";
-		echo "出现在{$iFetch}本书中:<br />";
-		echo "<input id='bold_all_book' type='checkbox' checked onclick=\"dict_bold_book_all_select()\" />全选<br />";
-		echo "<input id='id_book_filter_vinaya' type='checkbox' checked onclick=\"search_book_filter('id_book_filter_vinaya','vinaya')\" />律藏-{$booktypesum["vinaya"][0]}-{$booktypesum["vinaya"][1]}<br />";
-		echo "<input id='id_book_filter_sutta'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_sutta','sutta')\" />经藏-{$booktypesum["sutta"][0]}-{$booktypesum["sutta"][1]}<br />";
-		echo "<input id='id_book_filter_abhidhamma'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_abhidhamma','abhidhamma')\" />阿毗达摩藏-{$booktypesum["abhidhamma"][0]}-{$booktypesum["abhidhamma"][1]}<br />";
-		echo "<input id='id_book_filter_anna'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_anna','anna')\" />其他-{$booktypesum["anna"][0]}-{$booktypesum["anna"][1]}<br /><br />";	
-		echo "<input id='id_book_filter_mula' type='checkbox' checked onclick=\"search_book_filter('id_book_filter_mula','mula')\" />根本-{$booktypesum["mula"][0]}-{$booktypesum["mula"][1]}<br />";
-		echo "<input id='id_book_filter_atthakattha'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_atthakattha','atthakattha')\" />义注-{$booktypesum["atthakattha"][0]}-{$booktypesum["atthakattha"][1]}<br />";
-		echo "<input id='id_book_filter_tika'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_tika','tika')\" />复注-{$booktypesum["tika"][0]}-{$booktypesum["tika"][1]}<br />";
-		echo "<input id='id_book_filter_anna2'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_anna2','anna2')\" />其他-{$booktypesum["anna2"][0]}-{$booktypesum["anna2"][1]}<br /><br />";
+		echo "<div id='bold_book_list_new' style='margin:1em;0'>";
+
+		echo "<div>出现在{$iFetch}本书中:</div>";
+		echo "<div>全选<input id='bold_all_book' type='checkbox' checked onclick=\"dict_bold_book_all_select()\" /></div>";
+		echo "<div>律藏-{$booktypesum["vinaya"][0]}-{$booktypesum["vinaya"][1]}<input id='id_book_filter_vinaya' type='checkbox' checked onclick=\"search_book_filter('id_book_filter_vinaya','vinaya')\" /></div>";
+		echo "<div>经藏-{$booktypesum["sutta"][0]}-{$booktypesum["sutta"][1]}<input id='id_book_filter_sutta'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_sutta','sutta')\" /></div>";
+		echo "<div>阿毗达摩藏-{$booktypesum["abhidhamma"][0]}-{$booktypesum["abhidhamma"][1]}<input id='id_book_filter_abhidhamma'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_abhidhamma','abhidhamma')\" /></div>";
+		echo "<div >其他-{$booktypesum["anna"][0]}-{$booktypesum["anna"][1]}<input id='id_book_filter_anna'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_anna','anna')\" /></div>";	
+		echo "<div style='margin-bottom:1em';></div>";
+		echo "<div>根本-{$booktypesum["mula"][0]}-{$booktypesum["mula"][1]}<input id='id_book_filter_mula' type='checkbox' checked onclick=\"search_book_filter('id_book_filter_mula','mula')\" /></div>";
+		echo "<div>义注-{$booktypesum["atthakattha"][0]}-{$booktypesum["atthakattha"][1]}<input id='id_book_filter_atthakattha'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_atthakattha','atthakattha')\" /></div>";
+		echo "<div>复注-{$booktypesum["tika"][0]}-{$booktypesum["tika"][1]}<input id='id_book_filter_tika'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_tika','tika')\" /></div>";
+		echo "<div>其他-{$booktypesum["anna2"][0]}-{$booktypesum["anna2"][1]}<input id='id_book_filter_anna2'  type='checkbox' checked onclick=\"search_book_filter('id_book_filter_anna2','anna2')\" /></div>";
 		for($i=0;$i<$iFetch;$i++){
 
 			$book=$Fetch[$i]["book"];

+ 27 - 2
app/studio/editor.php

@@ -112,9 +112,34 @@ else{$currDevice="computer";}
 <body class="mainbody" id="mbody" onLoad="editor_windowsInit()">
 	<style id="display_set">
 	</style>
-	
+
 	<style>
-	
+	.trans_text_block{
+		border-left: 5px solid #d1d1d1;
+		background-color: #f1f1f1;
+		margin-bottom: 0.5em;
+		padding: 0.5em 0.5em 0.1em 0.5em;
+	}
+	.trans_text_content{
+		color: var(--main-color);
+	}
+	.trans_text_info{
+		font-size: 80%;
+		border-top: 1px solid gray;
+		padding-top: 5px;
+		color: gray;
+		display:flex;
+		justify-content: space-between;
+	}
+	.trans_text_info .tag{
+		font-size: 75%;
+	}
+	.trans_text_info .tools{
+		visibility: hidden;
+	}
+	.trans_text_block:hover .trans_text_info .tools{
+		visibility: visible;
+	}
 	wnh{
 	background-color: var(--link-hover-color);
     color: var(--btn-color);

+ 528 - 538
app/studio/js/data.js

@@ -1,9 +1,9 @@
 //旧版 xml的根节点
 var xmlDoc = null;
 var xmlDict = null;
-var gXmlOldVerData;//old ver xml file xml doc
+var gXmlOldVerData; //old ver xml file xml doc
 
-var g_filename = "";//工程文件名
+var g_filename = ""; //工程文件名
 var arrDocFileInfo = null;
 
 //全部的逐词译单词xml 节点数组
@@ -13,13 +13,13 @@ var gXmlBookData;
 var gXmlBookDataHead;
 var gXmlBookDataHeadToc;
 var gXmlBookDataBody = null;
-var gXmlBookDataInlineDict;  //内联字典数据
-var gXmlBookDataMsg;  //消息数据
-var gDocMsgList = new Array();//消息数组
+var gXmlBookDataInlineDict; //内联字典数据
+var gXmlBookDataMsg; //消息数据
+var gDocMsgList = new Array(); //消息数组
 
-var gXmlParIndex;//段落列表
+var gXmlParIndex; //段落列表
 
-var gArrayDocParagraph = new Array();//文档中的段落列表
+var gArrayDocParagraph = new Array(); //文档中的段落列表
 
 //资源列表
 var lstResTranslate = new Array();
@@ -29,249 +29,246 @@ var lstResHeading = new Array();
 
 var doc_info = new Object();
 
-
 doc_info.msg_run = function (value) {
-	if (value) {
-		this.sendmsg = value;
-	}
-	else {
-		return (this.sendmsg);
-	}
-}
+  if (value) {
+    this.sendmsg = value;
+  } else {
+    return this.sendmsg;
+  }
+};
 
 var isTransaction = false;
 function doc_beginTransaction() {
-	isTransaction = true;
+  isTransaction = true;
 }
 function doc_commit() {
-
-	isTransaction = false;
+  isTransaction = false;
 }
 
 function createXmlDoc() {
-	var strXml = "";
-	strXml += "<set>\n"
-	strXml += "    <head>\n"
-	strXml += "        <type>pcdsset</type>\n"
-	strXml += "        <mode>package</mode>\n"
-	strXml += "        <ver>1</ver>\n"
-	strXml += "        <toc></toc>\n"
-	strXml += "        <style></style>\n"
-	strXml += "    </head>\n"
-	strXml += "    <dict></dict>\n"
-	strXml += "    <message></message>\n"
-	strXml += "    <body>\n"
-	strXml += "    </body>\n"
-	strXml += "</set>\n"
-
-	if (window.DOMParser) {
-		parser = new DOMParser();
-		gXmlBookData = parser.parseFromString(strXml, "text/xml");
-	}
-	else // Internet Explorer
-	{
-		gXmlBookData = new ActiveXObject("Microsoft.XMLDOM");
-		gXmlBookData.async = "false";
-		gXmlBookData.loadXML(strXml);
-	}
-
-	if (gXmlBookData == null) {
-		alert("error:can not load book index.");
-		return;
-	}
-	gXmlBookDataBody = gXmlBookData.getElementsByTagName("body")[0];
-	gXmlBookDataHead = gXmlBookData.getElementsByTagName("head")[0];
-	gXmlBookDataInlineDict = gXmlBookData.getElementsByTagName("dict")[0];
-	gXmlBookDataMsg = gXmlBookData.getElementsByTagName("message")[0];
-	gXmlBookDataHeadToc = gXmlBookDataHead.getElementsByTagName("toc")[0];
-
+  var strXml = "";
+  strXml += "<set>\n";
+  strXml += "    <head>\n";
+  strXml += "        <type>pcdsset</type>\n";
+  strXml += "        <mode>package</mode>\n";
+  strXml += "        <ver>1</ver>\n";
+  strXml += "        <toc></toc>\n";
+  strXml += "        <style></style>\n";
+  strXml += "    </head>\n";
+  strXml += "    <dict></dict>\n";
+  strXml += "    <message></message>\n";
+  strXml += "    <body>\n";
+  strXml += "    </body>\n";
+  strXml += "</set>\n";
+
+  if (window.DOMParser) {
+    parser = new DOMParser();
+    gXmlBookData = parser.parseFromString(strXml, "text/xml");
+  } // Internet Explorer
+  else {
+    gXmlBookData = new ActiveXObject("Microsoft.XMLDOM");
+    gXmlBookData.async = "false";
+    gXmlBookData.loadXML(strXml);
+  }
+
+  if (gXmlBookData == null) {
+    alert("error:can not load book index.");
+    return;
+  }
+  gXmlBookDataBody = gXmlBookData.getElementsByTagName("body")[0];
+  gXmlBookDataHead = gXmlBookData.getElementsByTagName("head")[0];
+  gXmlBookDataInlineDict = gXmlBookData.getElementsByTagName("dict")[0];
+  gXmlBookDataMsg = gXmlBookData.getElementsByTagName("message")[0];
+  gXmlBookDataHeadToc = gXmlBookDataHead.getElementsByTagName("toc")[0];
 }
 
 function com_XmlAllWordRefresh() {
-	gXmlAllWordInWBW = gXmlBookDataBody.getElementsByTagName("word");
+  gXmlAllWordInWBW = gXmlBookDataBody.getElementsByTagName("word");
 }
 
 function insertBlockToXmlBookData(element) {
-	xmlParInfo = element.getElementsByTagName("info")[0];
-	xmlParData = element.getElementsByTagName("data")[0];
-	bookId = getNodeText(xmlParInfo, "book")
-	paragraph = getNodeText(xmlParInfo, "paragraph")
-	type = getNodeText(xmlParInfo, "type")
-	switch (type) {
-		case "wbw":
-			xWords = element.getElementsByTagName("word");
-			for (iWord = 0; iWord < xWords.length; iWord++) {
-				len = gXmlAllWordInWBW.length;
-				gXmlAllWordInWBW[len] = xWords[iWord];
-			}
-			break;
-	}
-
-	gXmlBookDataBody.appendChild(element.cloneNode(true));
-	updataDocParagraphList();
+  xmlParInfo = element.getElementsByTagName("info")[0];
+  xmlParData = element.getElementsByTagName("data")[0];
+  bookId = getNodeText(xmlParInfo, "book");
+  paragraph = getNodeText(xmlParInfo, "paragraph");
+  type = getNodeText(xmlParInfo, "type");
+  switch (type) {
+    case "wbw":
+      xWords = element.getElementsByTagName("word");
+      for (iWord = 0; iWord < xWords.length; iWord++) {
+        len = gXmlAllWordInWBW.length;
+        gXmlAllWordInWBW[len] = xWords[iWord];
+      }
+      break;
+  }
+
+  gXmlBookDataBody.appendChild(element.cloneNode(true));
+  updataDocParagraphList();
 }
 
 function getParIndex(bookId, parNo) {
-	for (var iPar = 0; iPar < gArrayDocParagraph.length; iPar++) {
-		currBookId = gArrayDocParagraph[iPar].book
-		currParNo = gArrayDocParagraph[iPar].paragraph
-
-		if (currBookId == bookId && currParNo == parNo) {
-			return (iPar);
-		}
-	}
-	return (-1);
-
+  for (var iPar = 0; iPar < gArrayDocParagraph.length; iPar++) {
+    currBookId = gArrayDocParagraph[iPar].book;
+    currParNo = gArrayDocParagraph[iPar].paragraph;
+
+    if (currBookId == bookId && currParNo == parNo) {
+      return iPar;
+    }
+  }
+  return -1;
 }
 //扫描文档 更新段落列表
 function updataDocParagraphList() {
-	gArrayDocParagraph = new Array();
-	var temp = new Array();
-	allBlock = gXmlBookDataBody.getElementsByTagName("block")
-	for (var iBlock = 0; iBlock < allBlock.length; iBlock++) {
-		xmlParInfo = allBlock[iBlock].getElementsByTagName("info")[0];
-		xmlParData = allBlock[iBlock].getElementsByTagName("data")[0];
-
-		var type = getNodeText(xmlParInfo, "type")
-		var newPar = new Object();
-		newPar.book = getNodeText(xmlParInfo, "book")
-		newPar.paragraph = getNodeText(xmlParInfo, "paragraph")
-		newPar.level = getNodeText(xmlParInfo, "level");
-		newPar.style = getNodeText(xmlParInfo, "style");
-		if (newPar.level == "") {
-			newPar.level = 100;
-		}
-
-		//如果有相同段落层级更高的记录,替换。
-		var bookpara = newPar.book.toString() + "-" + newPar.paragraph.toString();
-		if (temp[bookpara]) {
-			if (newPar.level > 0 && newPar.level < 9) {
-				if (temp[bookpara].level > 0 && temp[bookpara].level < 9) {
-					if (temp[bookpara].level > newPar.level) {
-						temp[bookpara].level = newPar.level;
-					}
-				}
-				else {
-					temp[bookpara].level = newPar.level;
-				}
-			}
-		}
-		else {
-			temp[bookpara] = newPar;
-		}
-
-	}
-	for (var iTemp in temp) {
-		gArrayDocParagraph.push(temp[iTemp]);
-	}
+  gArrayDocParagraph = new Array();
+  var temp = new Array();
+  allBlock = gXmlBookDataBody.getElementsByTagName("block");
+  for (var iBlock = 0; iBlock < allBlock.length; iBlock++) {
+    xmlParInfo = allBlock[iBlock].getElementsByTagName("info")[0];
+    xmlParData = allBlock[iBlock].getElementsByTagName("data")[0];
+
+    var type = getNodeText(xmlParInfo, "type");
+    var newPar = new Object();
+    newPar.book = getNodeText(xmlParInfo, "book");
+    newPar.paragraph = getNodeText(xmlParInfo, "paragraph");
+    newPar.level = getNodeText(xmlParInfo, "level");
+    newPar.style = getNodeText(xmlParInfo, "style");
+    if (newPar.level == "") {
+      newPar.level = 100;
+    }
+
+    //如果有相同段落层级更高的记录,替换。
+    var bookpara = newPar.book.toString() + "-" + newPar.paragraph.toString();
+    if (temp[bookpara]) {
+      if (newPar.level > 0 && newPar.level < 9) {
+        if (temp[bookpara].level > 0 && temp[bookpara].level < 9) {
+          if (temp[bookpara].level > newPar.level) {
+            temp[bookpara].level = newPar.level;
+          }
+        } else {
+          temp[bookpara].level = newPar.level;
+        }
+      }
+    } else {
+      temp[bookpara] = newPar;
+    }
+  }
+  for (var iTemp in temp) {
+    gArrayDocParagraph.push(temp[iTemp]);
+  }
 }
 
 function parIsSet(inBook, inPar) {
-	for (var iPar = 0; iPar < gArrayDocParagraph.length; iPar++) {
-		if (gArrayDocParagraph[iPar].book == inBook && gArrayDocParagraph[iPar].paragraph == inPar) {
-			return (iPar)
-		}
-	}
-	return (-1)
+  for (var iPar = 0; iPar < gArrayDocParagraph.length; iPar++) {
+    if (
+      gArrayDocParagraph[iPar].book == inBook &&
+      gArrayDocParagraph[iPar].paragraph == inPar
+    ) {
+      return iPar;
+    }
+  }
+  return -1;
 }
 function doc_setWordDataById(wordId, key, value) {
-	var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
-	var wordIndex = getWordIndex(wordId);
-	setNodeText(xAllWord[wordIndex], key, value);
+  var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
+  var wordIndex = getWordIndex(wordId);
+  setNodeText(xAllWord[wordIndex], key, value);
 }
 function doc_file_info_get() {
-	$.post("file_index.php",
-		{
-			op: "getall",
-			doc_id: g_docid
-		},
-		function (data, status) {
-			try {
-				let arrDocFileInfo = JSON.parse(data);
-				if (arrDocFileInfo.parent_id == null) {
-					doc_info.parent_id = "";
-				}
-				else {
-					doc_info.parent_id = arrDocFileInfo.parent_id;
-				}
-				doc_info.doc_id = arrDocFileInfo.id;
-				doc_info.share = arrDocFileInfo.share;
-				if (arrDocFileInfo.parent_id && arrDocFileInfo.parent_id != null && arrDocFileInfo.parent_id.length > 0) {
-					strMsgDocList = arrDocFileInfo.parent_id;
-					msg_start();//该文档是他人分享的文档,需要发送消息
-					doc_info.sendmsg = true;
-				}
-				else {
-					if (parseInt(arrDocFileInfo.share) == 1) {
-						strMsgDocList = arrDocFileInfo.id;
-						msg_start();
-						doc_info.sendmsg = true;//共享给其他人,需要发送消息
-					}
-					else {
-						doc_info.sendmsg = false;//无需发送消息
-					}
-				}
-			}
-			catch (e) {
-				console(e);
-			}
-
-		});
+  $.post(
+    "file_index.php",
+    {
+      op: "getall",
+      doc_id: g_docid,
+    },
+    function (data, status) {
+      try {
+        let arrDocFileInfo = JSON.parse(data);
+        if (arrDocFileInfo.parent_id == null) {
+          doc_info.parent_id = "";
+        } else {
+          doc_info.parent_id = arrDocFileInfo.parent_id;
+        }
+        doc_info.doc_id = arrDocFileInfo.id;
+        doc_info.share = arrDocFileInfo.share;
+        if (
+          arrDocFileInfo.parent_id &&
+          arrDocFileInfo.parent_id != null &&
+          arrDocFileInfo.parent_id.length > 0
+        ) {
+          strMsgDocList = arrDocFileInfo.parent_id;
+          msg_start(); //该文档是他人分享的文档,需要发送消息
+          doc_info.sendmsg = true;
+        } else {
+          if (parseInt(arrDocFileInfo.share) == 1) {
+            strMsgDocList = arrDocFileInfo.id;
+            msg_start();
+            doc_info.sendmsg = true; //共享给其他人,需要发送消息
+          } else {
+            doc_info.sendmsg = false; //无需发送消息
+          }
+        }
+      } catch (e) {
+        console(e);
+      }
+    }
+  );
 }
 
 function doc_info_change(field, value) {
-	$.post("file_index.php",
-		{
-			op: "set",
-			doc_id: g_docid,
-			field: field,
-			value: value
-		},
-		function (data, status) {
-			console.log("doc_info_change", data);
-		});
-
+  $.post(
+    "file_index.php",
+    {
+      op: "set",
+      doc_id: g_docid,
+      field: field,
+      value: value,
+    },
+    function (data, status) {
+      console.log("doc_info_change", data);
+    }
+  );
 }
 
 function doc_info_title_change(obj) {
-	doc_head("doc_title", obj.value);
-	document.getElementById("editor_doc_title").innerHTML = obj.value;
-	document.getElementById("file_title").innerHTML = obj.value;
-	$.post("file_index.php",
-		{
-			op: "set",
-			doc_id: g_docid,
-			field: "title",
-			value: obj.value
-		},
-		function (data, status) {
-			console.error("Data: " + data + "\nStatus: " + status);
-		});
-
+  doc_head("doc_title", obj.value);
+  document.getElementById("editor_doc_title").innerHTML = obj.value;
+  document.getElementById("file_title").innerHTML = obj.value;
+  $.post(
+    "file_index.php",
+    {
+      op: "set",
+      doc_id: g_docid,
+      field: "title",
+      value: obj.value,
+    },
+    function (data, status) {
+      console.error("Data: " + data + "\nStatus: " + status);
+    }
+  );
 }
 function getTranslateText(id) {
-	var xBlock = gXmlBookDataBody.getElementsByTagName("block");
-	for (var iBlock = 0; iBlock < xBlock.length; iBlock++) {
-		xmlParInfo = xBlock[iBlock].getElementsByTagName("info")[0];
-		xmlParData = xBlock[iBlock].getElementsByTagName("data")[0];
-		mId = getNodeText(xmlParInfo, "id")
-		type = getNodeText(xmlParInfo, "type")
-		if (type == "translate") {
-			if (mId == id) {
-				xmlParDataSen = xmlParData.getElementsByTagName("sen");
-				var currText = "";
-				for (iSen = 0; iSen < xmlParDataSen.length; iSen++) {
-					currText += getNodeText(xmlParDataSen[iSen], "text");
-				}
-				var obj = new Object();
-				obj.text = currText;
-				obj.language = getNodeText(xmlParInfo, "language");
-				obj.author = getNodeText(xmlParInfo, "author");
-				return (obj);
-			}
-		}
-	}
-	return (null);
+  var xBlock = gXmlBookDataBody.getElementsByTagName("block");
+  for (var iBlock = 0; iBlock < xBlock.length; iBlock++) {
+    xmlParInfo = xBlock[iBlock].getElementsByTagName("info")[0];
+    xmlParData = xBlock[iBlock].getElementsByTagName("data")[0];
+    mId = getNodeText(xmlParInfo, "id");
+    type = getNodeText(xmlParInfo, "type");
+    if (type == "translate") {
+      if (mId == id) {
+        xmlParDataSen = xmlParData.getElementsByTagName("sen");
+        var currText = "";
+        for (iSen = 0; iSen < xmlParDataSen.length; iSen++) {
+          currText += getNodeText(xmlParDataSen[iSen], "text");
+        }
+        var obj = new Object();
+        obj.text = currText;
+        obj.language = getNodeText(xmlParInfo, "language");
+        obj.author = getNodeText(xmlParInfo, "author");
+        return obj;
+      }
+    }
+  }
+  return null;
 }
 
 /*
@@ -286,125 +283,122 @@ strValue:句子文本数据
 
 */
 function setTranText(id, senA, strValue) {
-	xBlock = gXmlBookDataBody.getElementsByTagName("block");
-	for (var iBlock = 0; iBlock < xBlock.length; iBlock++) {
-		xmlParInfo = xBlock[iBlock].getElementsByTagName("info")[0];
-		xmlParData = xBlock[iBlock].getElementsByTagName("data")[0];
-		let blockId = getNodeText(xmlParInfo, "id");
-		let book = getNodeText(xmlParInfo, "book");
-		let para = getNodeText(xmlParInfo, "paragraph");
-		let parent_id = getNodeText(xmlParInfo, "parent");
-		if (blockId == id) {
-			xSen = xmlParData.getElementsByTagName("sen");
-
-			for (var iSen = 0; iSen < xSen.length; iSen++) {
-				var aBegin = getNodeText(xSen[iSen], "begin");
-				var aEnd = getNodeText(xSen[iSen], "end");
-				if (aEnd == senA) {
-					//var newText=strValue.replace(/\n/g,"<br />");
-					setNodeText(xSen[iSen], "text", strValue);
-					ntf_show("修改:" + strValue);
-					//准备消息数据 並發送
-					if (doc_info.sendmsg == true) {
-						let d = new Date();
-						let msg_doc_id;
-						if (doc_info.parent_id != "") {
-							msg_doc_id = doc_info.parent_id;
-						}
-						else {
-							msg_doc_id = doc_info.doc_id;
-						}
-						let blockId;
-						if (parent_id.length > 0) {
-							blockId = parent_id;
-						}
-						else {
-							blockId = id;
-						}
-						let objMsg = new Object();
-						objMsg.id = blockId;
-						objMsg.begin = aBegin;
-						objMsg.end = aEnd;
-						objMsg.text = strValue;
-
-						let strMsg = JSON.stringify(objMsg);
-						msg_push(2, strMsg, msg_doc_id, d.getTime(), book, para);
-						console.log("send mseeage:" + strMsg);
-					}
-				}
-			}
-		}
-	}
+  xBlock = gXmlBookDataBody.getElementsByTagName("block");
+  for (var iBlock = 0; iBlock < xBlock.length; iBlock++) {
+    xmlParInfo = xBlock[iBlock].getElementsByTagName("info")[0];
+    xmlParData = xBlock[iBlock].getElementsByTagName("data")[0];
+    let blockId = getNodeText(xmlParInfo, "id");
+    let book = getNodeText(xmlParInfo, "book");
+    let para = getNodeText(xmlParInfo, "paragraph");
+    let parent_id = getNodeText(xmlParInfo, "parent");
+    if (blockId == id) {
+      xSen = xmlParData.getElementsByTagName("sen");
+
+      for (var iSen = 0; iSen < xSen.length; iSen++) {
+        var aBegin = getNodeText(xSen[iSen], "begin");
+        var aEnd = getNodeText(xSen[iSen], "end");
+        if (aEnd == senA) {
+          //var newText=strValue.replace(/\n/g,"<br />");
+          setNodeText(xSen[iSen], "text", strValue);
+          ntf_show("修改:" + strValue);
+          //准备消息数据 並發送
+          if (doc_info.sendmsg == true) {
+            let d = new Date();
+            let msg_doc_id;
+            if (doc_info.parent_id != "") {
+              msg_doc_id = doc_info.parent_id;
+            } else {
+              msg_doc_id = doc_info.doc_id;
+            }
+            let blockId;
+            if (parent_id.length > 0) {
+              blockId = parent_id;
+            } else {
+              blockId = id;
+            }
+            let objMsg = new Object();
+            objMsg.id = blockId;
+            objMsg.book = book;
+            objMsg.para = para;
+            objMsg.begin = aBegin;
+            objMsg.end = aEnd;
+            objMsg.text = strValue;
+
+            let strMsg = JSON.stringify(objMsg);
+            msg_push(2, strMsg, msg_doc_id, d.getTime(), book, para);
+            console.log("send mseeage:" + strMsg);
+          }
+        }
+      }
+    }
+  }
 }
 
 function setNoteText(id, strValue) {
-	xBlock = gXmlBookDataBody.getElementsByTagName("block");
-	for (let iBlock = 0; iBlock < xBlock.length; iBlock++) {
-		xmlParInfo = xBlock[iBlock].getElementsByTagName("info")[0];
-		xmlParData = xBlock[iBlock].getElementsByTagName("data")[0];
-		blockId = getNodeText(xmlParInfo, "id");
-		if (blockId == id) {
-			xSen = xmlParData.getElementsByTagName("sen");
-			if (xSen.length > 0) {
-				newText = strValue.replace(/\n/g, "<br />");
-				setNodeText(xSen[0], "text", strValue);
-				//var_dump(strValue);
-			}
-		}
-	}
+  xBlock = gXmlBookDataBody.getElementsByTagName("block");
+  for (let iBlock = 0; iBlock < xBlock.length; iBlock++) {
+    xmlParInfo = xBlock[iBlock].getElementsByTagName("info")[0];
+    xmlParData = xBlock[iBlock].getElementsByTagName("data")[0];
+    blockId = getNodeText(xmlParInfo, "id");
+    if (blockId == id) {
+      xSen = xmlParData.getElementsByTagName("sen");
+      if (xSen.length > 0) {
+        newText = strValue.replace(/\n/g, "<br />");
+        setNodeText(xSen[0], "text", strValue);
+        //var_dump(strValue);
+      }
+    }
+  }
 }
 
 function doc_head(key, value = null) {
-
-	if (value) {//set
-		setNodeText(gXmlBookDataHead, key, value);
-		doc_info_change("doc_info", com_xmlToString(gXmlBookDataHead));
-	}
-	else {//get
-		return (getNodeText(gXmlBookDataHead, key));
-	}
-
+  if (value) {
+    //set
+    setNodeText(gXmlBookDataHead, key, value);
+    doc_info_change("doc_info", com_xmlToString(gXmlBookDataHead));
+  } else {
+    //get
+    return getNodeText(gXmlBookDataHead, key);
+  }
 }
 
-
-
 function doc_msg_push(msgobj) {
-
-	gDocMsgList.push(msgobj);
-	localforage.setItem("msg_" + g_docid, gDocMsgList).then(function (value) {
-		// This will output `1`.
-		console.log(value.length);
-	}).catch(function (err) {
-		// This code runs if there were any errors
-		console.log(err);
-	});
+  gDocMsgList.push(msgobj);
+  localforage
+    .setItem("msg_" + g_docid, gDocMsgList)
+    .then(function (value) {
+      // This will output `1`.
+      console.log(value.length);
+    })
+    .catch(function (err) {
+      // This code runs if there were any errors
+      console.log(err);
+    });
 }
 
 function doc_block(strSelector = "") {
-	if (strSelector == "") {
-		var xBlock = gXmlBookDataBody.getElementsByTagName("block");
-		return (xBlock);
-	}
-	else if (strSelector.substr(0, 1) == "#") {
-		var sBlockId = strSelector.substr(1);
-		var xBlock = gXmlBookDataBody.getElementsByTagName("block");
-		for (let i in xBlock) {
-			let xmlParInfo = xBlock[i].getElementsByTagName("info")[0];
-			let xmlParData = xBlock[iBlock].getElementsByTagName("data")[0];
-			let blockId = getNodeText(xmlParInfo, "id");
-			if (blockId == sBlockId) {
-				var blockObj = new Object();
-				blockObj.info = xmlParInfo;
-				blockObj.data = xmlParData;
-				blockObj.element = xAllWord[wid];
-				return (blockObj);
-			}
-		}
-		return (null);
-	}
-	else {
-		return (null);
-	}
+  if (strSelector == "") {
+    var xBlock = gXmlBookDataBody.getElementsByTagName("block");
+    return xBlock;
+  } else if (strSelector.substr(0, 1) == "#") {
+    var sBlockId = strSelector.substr(1);
+    var xBlock = gXmlBookDataBody.getElementsByTagName("block");
+    for (let i in xBlock) {
+      let xmlParInfo = xBlock[i].getElementsByTagName("info")[0];
+      let xmlParData = xBlock[iBlock].getElementsByTagName("data")[0];
+      let blockId = getNodeText(xmlParInfo, "id");
+      if (blockId == sBlockId) {
+        var blockObj = new Object();
+        blockObj.info = xmlParInfo;
+        blockObj.data = xmlParData;
+        blockObj.element = xAllWord[wid];
+        return blockObj;
+      }
+    }
+    return null;
+  } else {
+    return null;
+  }
 }
 
 /*
@@ -415,69 +409,62 @@ remove
 doc_word("#p34-3-3").block.info("id")
 */
 function doc_word(strSelector = "") {
-	if (strSelector == "") {
-		var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
-		return (xAllWord);
-	}
-	else if (strSelector.substr(0, 1) == "#") {
-		var sWordId = strSelector.substr(1);
-		var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
-		var wid = getWordIndex(sWordId);
-		if (xAllWord[wid]) {
-			var wordobj = new Object();
-			wordobj.wordid = strSelector;
-			wordobj.element = xAllWord[wid];
-			wordobj.val = _doc_word_value;
-			var objBlock = new Object();
-			objBlock.element = wordobj.element.parentNode.parentNode;
-			objBlock.info = _block_info;
-			wordobj.block = objBlock;
-			return (wordobj);
-		}
-		else {
-			var wordobj = new Object();
-			wordobj.wordid = strSelector;
-			wordobj.element = null;
-			wordobj.val = _doc_word_value;
-			return (wordobj);
-		}
-	}
-	else {
-	}
+  if (strSelector == "") {
+    var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
+    return xAllWord;
+  } else if (strSelector.substr(0, 1) == "#") {
+    var sWordId = strSelector.substr(1);
+    var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
+    var wid = getWordIndex(sWordId);
+    if (xAllWord[wid]) {
+      var wordobj = new Object();
+      wordobj.wordid = strSelector;
+      wordobj.element = xAllWord[wid];
+      wordobj.val = _doc_word_value;
+      var objBlock = new Object();
+      objBlock.element = wordobj.element.parentNode.parentNode;
+      objBlock.info = _block_info;
+      wordobj.block = objBlock;
+      return wordobj;
+    } else {
+      var wordobj = new Object();
+      wordobj.wordid = strSelector;
+      wordobj.element = null;
+      wordobj.val = _doc_word_value;
+      return wordobj;
+    }
+  } else {
+  }
 }
 function _doc_word_value(key, value = null) {
-	if (this.element) {
-		if (value) {
-			setNodeText(this.element, key, value);
-		}
-		else {
-			var output = getNodeText(this.element, key);
-			return (output);
-		}
-	}
-	else {
-		if (!value) {
-			return ("");
-		}
-	}
+  if (this.element) {
+    if (value) {
+      setNodeText(this.element, key, value);
+    } else {
+      var output = getNodeText(this.element, key);
+      return output;
+    }
+  } else {
+    if (!value) {
+      return "";
+    }
+  }
 }
 
 function _block_info(key, value = null) {
-	if (this.element) {
-		let xmlParInfo = this.element.getElementsByTagName("info")[0];
-		if (value) {
-			setNodeText(xmlParInfo, key, value);
-		}
-		else {
-			var output = getNodeText(xmlParInfo, key);
-			return (output);
-		}
-	}
-	else {
-		if (!value) {
-			return ("");
-		}
-	}
+  if (this.element) {
+    let xmlParInfo = this.element.getElementsByTagName("info")[0];
+    if (value) {
+      setNodeText(xmlParInfo, key, value);
+    } else {
+      var output = getNodeText(xmlParInfo, key);
+      return output;
+    }
+  } else {
+    if (!value) {
+      return "";
+    }
+  }
 }
 
 /*
@@ -490,53 +477,50 @@ doc_tran("guid").split(array);
 
 */
 function doc_tran(strSelector = "", search_parent = false) {
-	if (strSelector == "") {
-		let xBlock = gXmlBookDataBody.getElementsByTagName("block");
-		return (xBlock);
-	}
-	else if (strSelector.substr(0, 1) == "#") {
-		var sBlockId = strSelector.substr(1);
-		var xBlock = gXmlBookDataBody.getElementsByTagName("block");
-		let i = 0;
-		for (i = 0; i < xBlock.length; i++) {
-			let xmlParInfo = xBlock[i].getElementsByTagName("info")[0];
-			let xmlParData = xBlock[i].getElementsByTagName("data")[0];
-			let blockId;
-			if (search_parent) {
-				blockId = getNodeText(xmlParInfo, "parent");
-			}
-			else {
-				blockId = getNodeText(xmlParInfo, "id");
-			}
-
-			if (blockId == sBlockId) {
-				var blockObj = new Object();
-				blockObj._info = xmlParInfo;
-				blockObj._data = xmlParData;
-				blockObj.text = _doc_tran_sent;
-				blockObj.info = _doc_tran_info;
-				blockObj.list = _doc_tran_sent_list;
-				return (blockObj);
-			}
-		}
-	}
-	return (null);
-
+  if (strSelector == "") {
+    let xBlock = gXmlBookDataBody.getElementsByTagName("block");
+    return xBlock;
+  } else if (strSelector.substr(0, 1) == "#") {
+    var sBlockId = strSelector.substr(1);
+    var xBlock = gXmlBookDataBody.getElementsByTagName("block");
+    let i = 0;
+    for (i = 0; i < xBlock.length; i++) {
+      let xmlParInfo = xBlock[i].getElementsByTagName("info")[0];
+      let xmlParData = xBlock[i].getElementsByTagName("data")[0];
+      let blockId;
+      if (search_parent) {
+        blockId = getNodeText(xmlParInfo, "parent");
+      } else {
+        blockId = getNodeText(xmlParInfo, "id");
+      }
+
+      if (blockId == sBlockId) {
+        var blockObj = new Object();
+        blockObj._info = xmlParInfo;
+        blockObj._data = xmlParData;
+        blockObj.text = _doc_tran_sent;
+        blockObj.info = _doc_tran_info;
+        blockObj.list = _doc_tran_sent_list;
+        return blockObj;
+      }
+    }
+  }
+  return null;
 }
 function _doc_tran_sent(begin, end, key, value = null) {
-	if (this._data) {
-		xSen = this._data.getElementsByTagName("sen");
-		for (let iSen = 0; iSen < xSen.length; iSen++) {
-			let aBegin = getNodeText(xSen[iSen], "begin");
-			let aEnd = getNodeText(xSen[iSen], "end");
-			if (aBegin == begin && aEnd == end) {
-				if (value) {
-					setNodeText(xSen[iSen], key, value);
-					console.log("translation changed. key=" + key + " value=" + value);
-					if (key == "text") {
-						ntf_show("修改:" + key + "=" + value);
-						let blockId;
-						/*
+  if (this._data) {
+    xSen = this._data.getElementsByTagName("sen");
+    for (let iSen = 0; iSen < xSen.length; iSen++) {
+      let aBegin = getNodeText(xSen[iSen], "begin");
+      let aEnd = getNodeText(xSen[iSen], "end");
+      if (aBegin == begin && aEnd == end) {
+        if (value) {
+          setNodeText(xSen[iSen], key, value);
+          console.log("translation changed. key=" + key + " value=" + value);
+          if (key == "text") {
+            ntf_show("修改:" + key + "=" + value);
+            let blockId;
+            /*
 						if (this.info("parent").length > 0) {
 							blockId = this.info("parent");
 						}
@@ -544,130 +528,136 @@ function _doc_tran_sent(begin, end, key, value = null) {
 							blockId = this.info("id");
 						}
 						*/
-						blockId = this.info("id");
-						let book = this.info("book");
-						let para = this.info("paragraph");
-						update_tran_block_text(blockId);
-						//准备消息数据 並發送
-						if (doc_info.sendmsg) {
-							let d = new Date();
-							let msg_doc_id;
-							if (doc_info.parent_id != "") {
-								msg_doc_id = doc_info.parent_id;
-							}
-							else {
-								msg_doc_id = doc_info.doc_id;
-							}
-							let objMsg = new Object();
-							objMsg.id = blockId;
-							objMsg.begin = aBegin;
-							objMsg.end = aEnd;
-							objMsg.text = value;
-
-							msg_push(2, JSON.stringify(objMsg), msg_doc_id, d.getTime(), book, para);
-						}
-					}
-				}
-				else {
-					var output = getNodeText(xSen[iSen], key);
-					return (output);
-				}
-			}
-		}
-	}
-	else {
-		if (!value) {
-			return ("");
-		}
-	}
+            blockId = this.info("id");
+            let book = this.info("book");
+            let para = this.info("paragraph");
+            update_tran_block_text(blockId);
+            //准备消息数据 並發送
+            if (doc_info.sendmsg) {
+              let d = new Date();
+              let msg_doc_id;
+              if (doc_info.parent_id != "") {
+                msg_doc_id = doc_info.parent_id;
+              } else {
+                msg_doc_id = doc_info.doc_id;
+              }
+              let objMsg = new Object();
+              objMsg.id = blockId;
+              objMsg.book = book;
+              objMsg.para = para;
+              objMsg.begin = aBegin;
+              objMsg.end = aEnd;
+              objMsg.text = value;
+
+              msg_push(
+                2,
+                JSON.stringify(objMsg),
+                msg_doc_id,
+                d.getTime(),
+                book,
+                para
+              );
+            }
+          }
+        } else {
+          var output = getNodeText(xSen[iSen], key);
+          return output;
+        }
+      }
+    }
+  } else {
+    if (!value) {
+      return "";
+    }
+  }
 }
 
 function _doc_tran_sent_list() {
-	if (this._data) {
-		xSen = this._data.getElementsByTagName("sen");
-		let output = new Array();
-		for (let iSen = 0; iSen < xSen.length; iSen++) {
-			let objSent = new Object();
-			objSent.begin = getNodeText(xSen[iSen], "begin");
-			objSent.end = getNodeText(xSen[iSen], "end");
-			objSent.text = getNodeText(xSen[iSen], "text");
-			output.push(objSent);
-		}
-		return (output);
-	}
-	else {
-		return (null);
-	}
+  if (this._data) {
+    xSen = this._data.getElementsByTagName("sen");
+    let output = new Array();
+    for (let iSen = 0; iSen < xSen.length; iSen++) {
+      let objSent = new Object();
+      objSent.begin = getNodeText(xSen[iSen], "begin");
+      objSent.end = getNodeText(xSen[iSen], "end");
+      objSent.text = getNodeText(xSen[iSen], "text");
+      output.push(objSent);
+    }
+    return output;
+  } else {
+    return null;
+  }
 }
 
 function _doc_tran_info(key, value = null) {
-	if (this._info) {
-		if (value) {
-			setNodeText(this._info, key, value);
-		}
-		else {
-			let output = getNodeText(this._info, key);
-			return (output);
-		}
-	}
-	else {
-		if (!value) {
-			return ("");
-		}
-	}
+  if (this._info) {
+    if (value) {
+      setNodeText(this._info, key, value);
+    } else {
+      let output = getNodeText(this._info, key);
+      return output;
+    }
+  } else {
+    if (!value) {
+      return "";
+    }
+  }
 }
 
-
-
 //工程文件数据解析
 function projectDataParse(xmlBookData) {
-	gXmlBookDataBody = xmlBookData.getElementsByTagName("body")[0];
-	gXmlBookDataHead = xmlBookData.getElementsByTagName("head")[0];
-	gXmlBookDataInlineDict = xmlBookData.getElementsByTagName("dict")[0];
-	gXmlBookDataHeadToc = xmlBookData.getElementsByTagName("toc")[0];
-	if (xmlBookData.getElementsByTagName("message")) {
-		gXmlBookDataMsg = gXmlBookData.getElementsByTagName("message")[0];
-	}
-	else {
-		gXmlBookDataMsg = null;
-	}
-	//解析消息队列
-	localforage.getItem("msg_" + g_docid).then(function (value) {
-		if (value == null) {
-			console.log("离线消息数据不存在");
-			localforage.setItem("msg_" + g_docid, gDocMsgList).then(function (value) {
-				doc_head("msg_db_max_id", "1");
-				msg_init(1);
-				console.log("离线消息创建成功" + value.length);
-			}).catch(function (err) {
-				// This code runs if there were any errors
-				console.log(err);
-			});
-		}
-		else {
-			localforage.getItem("msg_" + g_docid).then(function (value) {
-				gDocMsgList = value;
-				console.log(value.length);
-			}).catch(function (err) {
-				// This code runs if there were any errors
-				console.log(err);
-			});
-		}
-	}).catch(function (err) {
-		// This code runs if there were any errors
-		console.log(err);
-	});
-	//
-
-
-
-	com_XmlAllWordRefresh();
-	//更新工程资源列表
-	editor_project_updataProjectInfo();
-	//解析内联字典数据
-	ildDataParse(gXmlBookDataInlineDict);
-	//将内联字典数据导入已经下载的词的列表
-	dict_inid_ild_word_list();
+  gXmlBookDataBody = xmlBookData.getElementsByTagName("body")[0];
+  gXmlBookDataHead = xmlBookData.getElementsByTagName("head")[0];
+  gXmlBookDataInlineDict = xmlBookData.getElementsByTagName("dict")[0];
+  gXmlBookDataHeadToc = xmlBookData.getElementsByTagName("toc")[0];
+  if (xmlBookData.getElementsByTagName("message")) {
+    gXmlBookDataMsg = gXmlBookData.getElementsByTagName("message")[0];
+  } else {
+    gXmlBookDataMsg = null;
+  }
+  //解析消息队列
+  localforage
+    .getItem("msg_" + g_docid)
+    .then(function (value) {
+      if (value == null) {
+        console.log("离线消息数据不存在");
+        localforage
+          .setItem("msg_" + g_docid, gDocMsgList)
+          .then(function (value) {
+            doc_head("msg_db_max_id", "1");
+            msg_init(1);
+            console.log("离线消息创建成功" + value.length);
+          })
+          .catch(function (err) {
+            // This code runs if there were any errors
+            console.log(err);
+          });
+      } else {
+        localforage
+          .getItem("msg_" + g_docid)
+          .then(function (value) {
+            gDocMsgList = value;
+            console.log(value.length);
+          })
+          .catch(function (err) {
+            // This code runs if there were any errors
+            console.log(err);
+          });
+      }
+    })
+    .catch(function (err) {
+      // This code runs if there were any errors
+      console.log(err);
+    });
+  //
+
+  com_XmlAllWordRefresh();
+  //更新工程资源列表
+  editor_project_updataProjectInfo();
+  //解析内联字典数据
+  ildDataParse(gXmlBookDataInlineDict);
+  //将内联字典数据导入已经下载的词的列表
+  dict_inid_ild_word_list();
 }
 
 /*

+ 825 - 639
app/studio/js/message.js

@@ -11,331 +11,355 @@ var msg_my_id = "sys_message";
 msgInitId:上次消息的最大id
 */
 function msg_init(msgInitId, time = 3) {
-	iMsgLastUpdateId = msgInitId;
-	msgTime = time * 1000;
+  iMsgLastUpdateId = msgInitId;
+  msgTime = time * 1000;
 }
 
 function msg_start() {
-	msg_send();
+  msg_send();
 }
 function msg_stop() {
-	clearTimeout(msg_timer)
+  clearTimeout(msg_timer);
 }
 
 function msg_push(type, data, docid, time, book = 0, paragraph = 0) {
-	/*
+  /*
 	data.type
 	data.data
 	data.doc
 	*/
-	var newMessage = {
-		type: type,
-		data: data,
-		docid: docid,
-		time: time,
-		book: book,
-		para: paragraph
-	};
-	arrMsgBuffer.push(newMessage);
-
-	var obj = new Object();
-	obj.id = 0;
-	obj.sender = getCookie("username");
-	obj.type = newMessage.type;
-	obj.docid = newMessage.docid;
-	obj.time = newMessage.time / 5000;
-	obj.read = 1;
-	obj.data = JSON.parse(newMessage.data);
-	//doc_msg_push(obj);
-	msg_show_content(msg_curr_show_content_type, msg_curr_show_content_id);
+  var newMessage = {
+    type: type,
+    data: data,
+    docid: docid,
+    time: time,
+    book: book,
+    para: paragraph,
+  };
+  arrMsgBuffer.push(newMessage);
+
+  var obj = new Object();
+  obj.id = 0;
+  obj.sender = getCookie("username");
+  obj.type = newMessage.type;
+  obj.docid = newMessage.docid;
+  obj.time = newMessage.time / 5000;
+  obj.read = 1;
+  obj.data = JSON.parse(newMessage.data);
+  //doc_msg_push(obj);
+  msg_show_content(msg_curr_show_content_type, msg_curr_show_content_id);
 }
 function msg_reload() {
-	iMsgLastUpdateId = 1;
+  iMsgLastUpdateId = 1;
 }
 function msg_send() {
-	$("#net_up").html("▲");
-	if (arrMsgBuffer.length > 0) {
-		var operation = "send";
-	}
-	else {
-		var operation = "get";
-	}
-
-	$.post("message.php",
-		{
-			op: operation,
-			lastid: iMsgLastUpdateId,
-			doclist: strMsgDocList,
-			data: JSON.stringify(arrMsgBuffer)
-		},
-		function (data, status) {
-			let xmlText = data;
-			console.log("receive mseeage:" + data);
-			let msgXml;
-			if (window.DOMParser) {
-				parser = new DOMParser();
-				msgXml = parser.parseFromString(xmlText, "text/xml");
-			}
-			else { // Internet Explorer
-
-				msgXml = new ActiveXObject("Microsoft.XMLDOM");
-				msgXml.async = "false";
-				msgXml.loadXML(xmlText);
-			}
-
-			if (msgXml == null) {
-				console.error("error:can not load Project. xml obj is null.");
-				return;
-			}
-			let arrMsg = msgXml.getElementsByTagName("msg");
-			var arrWordNewMsg = new Array();
-
-			//开始一个事务,关闭自动提交
-			doc_beginTransaction();
-			for (var x = 0; x < arrMsg.length; x++) {
-				switch (getNodeText(arrMsg[x], "type")) {
-					case "maxid":
-						iMsgLastUpdateId = getNodeText(arrMsg[x], "data");
-						doc_head("msg_db_max_id", iMsgLastUpdateId);
-						console.log("iMsgLastUpdateId:" + iMsgLastUpdateId);
-						break;
-					default:
-						//if (gXmlBookDataMsg) 
-						{
-							var obj = new Object();
-							obj.id = getNodeText(arrMsg[x], "id");
-							obj.sender = getNodeText(arrMsg[x], "sender");
-							obj.type = getNodeText(arrMsg[x], "type");
-							obj.docid = getNodeText(arrMsg[x], "docid");
-							obj.time = getNodeText(arrMsg[x], "time");
-							obj.read = getNodeText(arrMsg[x], "read");
-							let objData = getNodeText(arrMsg[x], "data");
-							try {
-								obj.data = JSON.parse(objData);
-							}
-							catch (e) {
-								obj.data = null;
-								console.error("err:message.js-msg_send" + e + "data:" + objData);
-								break;
-							}
-							//尝试用此消息更新文档数据
-							if (msg_apply_data(obj)) {
-								//如果已经使用此消息,xml标记为已读
-								//setNodeText(arrMsg[x], "read", "2");
-							}
-							doc_msg_push(obj);
-							msg_show_content(msg_curr_show_content_type, msg_curr_show_content_id);
-
-							switch (obj.type) {
-								case "1": //wbw
-									var iFind = false;
-									for (var iWordId = 0; iWordId < arrWordNewMsg.length; iWordId++) {
-										if (arrWordNewMsg[iWordId] == obj.data.id) {
-											iFind = true;
-											break;
-										}
-									}
-									if (!iFind) {
-										arrWordNewMsg.push(obj.data.id);
-									}
-									break;
-								case "2":
-									break;
-							}
-							//gXmlBookDataMsg.appendChild(arrMsg[x].cloneNode(true));
-						}
-						break;
-				}
-			}
-			//提交一个事务
-			doc_commit();
-			user_wbw_commit();
-
-			for (let i = 0; i < arrWordNewMsg.length; i++) {
-				updataWordHeadById(arrWordNewMsg[i]);
-			}
-			refreshNoteNumber();
-			msg_set_tool_bar_msg_counter();
-			msg_update_msg_list();
-			$("#net_down").html(" ");
-
-		});
-
-	$("#net_up").html(" ");
-	$("#net_down").html("▼");
-
-	arrMsgBuffer = new Array();
-
-	msg_timer = setTimeout("msg_send()", msgTime)
+  $("#net_up").html("▲");
+  if (arrMsgBuffer.length > 0) {
+    var operation = "send";
+  } else {
+    var operation = "get";
+  }
+
+  $.post(
+    "message.php",
+    {
+      op: operation,
+      lastid: iMsgLastUpdateId,
+      doclist: strMsgDocList,
+      data: JSON.stringify(arrMsgBuffer),
+    },
+    function (data, status) {
+      let xmlText = data;
+      console.log("receive mseeage:" + data);
+      let msgXml;
+      if (window.DOMParser) {
+        parser = new DOMParser();
+        msgXml = parser.parseFromString(xmlText, "text/xml");
+      } else {
+        // Internet Explorer
+
+        msgXml = new ActiveXObject("Microsoft.XMLDOM");
+        msgXml.async = "false";
+        msgXml.loadXML(xmlText);
+      }
+
+      if (msgXml == null) {
+        console.error("error:can not load Project. xml obj is null.");
+        return;
+      }
+      let arrMsg = msgXml.getElementsByTagName("msg");
+      var arrWordNewMsg = new Array();
+
+      //开始一个事务,关闭自动提交
+      doc_beginTransaction();
+      for (var x = 0; x < arrMsg.length; x++) {
+        switch (getNodeText(arrMsg[x], "type")) {
+          case "maxid":
+            iMsgLastUpdateId = getNodeText(arrMsg[x], "data");
+            doc_head("msg_db_max_id", iMsgLastUpdateId);
+            console.log("iMsgLastUpdateId:" + iMsgLastUpdateId);
+            break;
+          default:
+            //if (gXmlBookDataMsg)
+            {
+              var obj = new Object();
+              obj.id = getNodeText(arrMsg[x], "id");
+              obj.sender = getNodeText(arrMsg[x], "sender");
+              obj.type = getNodeText(arrMsg[x], "type");
+              obj.docid = getNodeText(arrMsg[x], "docid");
+              obj.time = getNodeText(arrMsg[x], "time");
+              obj.read = getNodeText(arrMsg[x], "read");
+              let objData = getNodeText(arrMsg[x], "data");
+              try {
+                obj.data = JSON.parse(objData);
+              } catch (e) {
+                obj.data = null;
+                console.error(
+                  "err:message.js-msg_send" + e + "data:" + objData
+                );
+                break;
+              }
+              //尝试用此消息更新文档数据
+              if (msg_apply_data(obj)) {
+                //如果已经使用此消息,xml标记为已读
+                //setNodeText(arrMsg[x], "read", "2");
+              }
+              doc_msg_push(obj);
+              msg_show_content(
+                msg_curr_show_content_type,
+                msg_curr_show_content_id
+              );
+
+              switch (obj.type) {
+                case "1": //wbw
+                  var iFind = false;
+                  for (
+                    var iWordId = 0;
+                    iWordId < arrWordNewMsg.length;
+                    iWordId++
+                  ) {
+                    if (arrWordNewMsg[iWordId] == obj.data.id) {
+                      iFind = true;
+                      break;
+                    }
+                  }
+                  if (!iFind) {
+                    arrWordNewMsg.push(obj.data.id);
+                  }
+                  break;
+                case "2":
+                  break;
+              }
+              //gXmlBookDataMsg.appendChild(arrMsg[x].cloneNode(true));
+            }
+            break;
+        }
+      }
+      //提交一个事务
+      doc_commit();
+      user_wbw_commit();
+
+      for (let i = 0; i < arrWordNewMsg.length; i++) {
+        updataWordHeadById(arrWordNewMsg[i]);
+      }
+      refreshNoteNumber();
+      msg_set_tool_bar_msg_counter();
+      msg_update_msg_list();
+      $("#net_down").html(" ");
+    }
+  );
+
+  $("#net_up").html(" ");
+  $("#net_down").html("▼");
+
+  arrMsgBuffer = new Array();
+
+  msg_timer = setTimeout("msg_send()", msgTime);
 }
-function msg_new_msg_id_push() {
+function msg_new_msg_id_push() {}
 
-}
-
-function msg_stop() {
-
-}
+function msg_stop() {}
 
 function msg_read(msg_obj, status = null) {
-
-	if (msg_obj) {
-		if (status) {
-			var oldStatus = msg_obj.read;
-			msg_obj.read = status;
-			var xMsg = gXmlBookDataMsg.getElementsByTagName("msg");
-			for (var i = 0; i < xMsg.length; i++) {
-				if (getNodeText(xMsg[i], "id") == msg_obj.id) {
-					setNodeText(xMsg[i], "read", status);
-					break;
-				}
-			}
-			return (oldStatus);
-		}
-		else {
-			return (msg_obj.read);
-
-		}
-	}
-
+  if (msg_obj) {
+    if (status) {
+      var oldStatus = msg_obj.read;
+      msg_obj.read = status;
+      var xMsg = gXmlBookDataMsg.getElementsByTagName("msg");
+      for (var i = 0; i < xMsg.length; i++) {
+        if (getNodeText(xMsg[i], "id") == msg_obj.id) {
+          setNodeText(xMsg[i], "read", status);
+          break;
+        }
+      }
+      return oldStatus;
+    } else {
+      return msg_obj.read;
+    }
+  }
 }
 
 //将消息数据应用(apply)到文档
 function msg_apply_data(obj) {
-	if (obj.sender == getCookie("username")) {
-		//忽略自己的消息
-		msg_read(obj, 1);//设置为已读
-		return (true);
-	}
-	doc_info.sendmsg = false;//不发送消息
-	try {
-		switch (obj.type) {
-			case "1"://逐词译
-				let wIndex = getWordIndex(obj.data.id)
-				if (wIndex >= 0) {
-					let xAllWord = gXmlBookDataBody.getElementsByTagName("word");
-					let xWord = xAllWord[wIndex];
-					let sReal = getNodeText(xWord, "real");
-					let wordStatus = parseInt(getNodeText(xWord, "status"));
-					let wordBodyChange = false;
-					let wordHeadChange = false;
-					let wordNoteChange = false;
-					let wordRelationChange = false;
-					let newWord = new Object();
-					newWord.real = sReal;
-					newWord.vaild = false;
-					let wordChanged = false;
-					if ((wordStatus != 7 && wordStatus != 5) && obj.sender != getCookie("username")) {
-						msg_read(obj, 2);
-						if (obj.data.real != null && obj.data.real != "") {
-							//setNodeText(xWord,"real",obj.data.real);
-							//newWord.real = obj.data.real;
-							//wordHeadChange=true;
-						}
-						if (obj.data.pali != null) {
-							//setNodeText(xWord,"pali",obj.data.pali);
-							//wordHeadChange=true;
-						}
-						if (obj.data.mean != null) {
-							setNodeText(xWord, "mean", obj.data.mean);
-							newWord.mean = obj.data.mean;
-							newWord.vaild = true;
-							wordBodyChange = true;
-							wordChanged = true;
-						}
-						if (obj.data.org != null) {
-							setNodeText(xWord, "org", obj.data.org);
-							newWord.parts = obj.data.org;
-							newWord.vaild = true;
-							wordBodyChange = true;
-							wordChanged = true;
-						}
-						if (obj.data.om != null) {
-							setNodeText(xWord, "om", obj.data.om);
-							newWord.partmean = obj.data.om;
-							newWord.vaild = true;
-							wordBodyChange = true;
-							wordChanged = true;
-						}
-						if (obj.data.case != null) {
-							setNodeText(xWord, "case", obj.data.case);
-							newWord.case = obj.data.case;
-							newWord.vaild = true;
-							wordBodyChange = true;
-							wordChanged = true;
-						}
-						if (obj.data.parent != null) {
-							setNodeText(xWord, "parent", obj.data.parent);
-							wordChanged = true;
-						}
-						if (obj.data.note != null) {
-							setNodeText(xWord, "note", obj.data.note);
-							wordNoteChange = true;
-							wordChanged = true;
-						}
-						if (obj.data.rela != null) {
-							//setNodeText(xWord,"rela",decodeURI(obj.data.rela));
-							setNodeText(xWord, "rela", obj.data.rela);
-							wordRelationChange = true;
-							wordChanged = true;
-						}
-						if (obj.data.bmc != null) {
-							setNodeText(xWord, "bmc", obj.data.bmc);
-							wordBodyChange = true;
-							wordChanged = true;
-						}
-						if (obj.data.bmt != null) {
-							setNodeText(xWord, "bmt", obj.data.bmt);
-							wordChanged = true;
-						}
-						if (obj.data.lock != null) {
-							setNodeText(xWord, "lock", obj.data.lock);
-							wordBodyChange = true;
-							wordChanged = true;
-						}
-						if (wordChanged) {
-							setNodeText(xWord, "status", 6);
-							//提交用户逐词解析数据库
-							user_wbw_push_word(obj.data.id);
-						}
-
-					}
-
-					if (wordHeadChange) {
-						updataWordHeadByIndex(wIndex);
-					}
-					if (wordBodyChange) {
-						modifyWordDetailByWordIndex(wIndex);
-					}
-					if (wordNoteChange || wordRelationChange) {
-						//updateWordNote(xWord);
-						refreshWordNoteDiv(xWord.parentNode.parentNode);
-					}
-
-					if (newWord.vaild) {
-						if (!mDict[sReal]) {
-							mDict[sReal] = new Array();
-						}
-						let isExsit = false;
-						for (let x in mDict[sReal]) {
-							if (mDict[sReal].mean && mDict[sReal].mean == newWord.mean &&
-								mDict[sReal].parts && mDict[sReal].parts == newWord.parts &&
-								mDict[sReal].partmean && mDict[sReal].mean == newWord.partmean &&
-								mDict[sReal].case && mDict[sReal].case == newWord.case) {
-								isExsit = true;
-							}
-						}
-						if (!isExsit) {
-							mDict[sReal].push(newWord);
-						}
-					}
-				}
-				break;
-			case "2"://译文
-				let tranBlock = doc_tran("#" + obj.data.id);
-				if (tranBlock == null) {
-					tranBlock = doc_tran("#" + obj.data.id, true);
-				}
-				if (tranBlock) {
+  if (obj.sender == getCookie("username")) {
+    //忽略自己的消息
+    msg_read(obj, 1); //设置为已读
+    return true;
+  }
+  doc_info.sendmsg = false; //不发送消息
+  try {
+    switch (obj.type) {
+      case "1": //逐词译
+        let wIndex = getWordIndex(obj.data.id);
+        if (wIndex >= 0) {
+          let xAllWord = gXmlBookDataBody.getElementsByTagName("word");
+          let xWord = xAllWord[wIndex];
+          let sReal = getNodeText(xWord, "real");
+          let wordStatus = parseInt(getNodeText(xWord, "status"));
+          let wordBodyChange = false;
+          let wordHeadChange = false;
+          let wordNoteChange = false;
+          let wordRelationChange = false;
+          let newWord = new Object();
+          newWord.real = sReal;
+          newWord.vaild = false;
+          let wordChanged = false;
+          if (
+            wordStatus != 7 &&
+            wordStatus != 5 &&
+            obj.sender != getCookie("username")
+          ) {
+            msg_read(obj, 2);
+            if (obj.data.real != null && obj.data.real != "") {
+              //setNodeText(xWord,"real",obj.data.real);
+              //newWord.real = obj.data.real;
+              //wordHeadChange=true;
+            }
+            if (obj.data.pali != null) {
+              //setNodeText(xWord,"pali",obj.data.pali);
+              //wordHeadChange=true;
+            }
+            if (obj.data.mean != null) {
+              setNodeText(xWord, "mean", obj.data.mean);
+              newWord.mean = obj.data.mean;
+              newWord.vaild = true;
+              wordBodyChange = true;
+              wordChanged = true;
+            }
+            if (obj.data.org != null) {
+              setNodeText(xWord, "org", obj.data.org);
+              newWord.parts = obj.data.org;
+              newWord.vaild = true;
+              wordBodyChange = true;
+              wordChanged = true;
+            }
+            if (obj.data.om != null) {
+              setNodeText(xWord, "om", obj.data.om);
+              newWord.partmean = obj.data.om;
+              newWord.vaild = true;
+              wordBodyChange = true;
+              wordChanged = true;
+            }
+            if (obj.data.case != null) {
+              setNodeText(xWord, "case", obj.data.case);
+              newWord.case = obj.data.case;
+              newWord.vaild = true;
+              wordBodyChange = true;
+              wordChanged = true;
+            }
+            if (obj.data.parent != null) {
+              setNodeText(xWord, "parent", obj.data.parent);
+              wordChanged = true;
+            }
+            if (obj.data.note != null) {
+              setNodeText(xWord, "note", obj.data.note);
+              wordNoteChange = true;
+              wordChanged = true;
+            }
+            if (obj.data.rela != null) {
+              //setNodeText(xWord,"rela",decodeURI(obj.data.rela));
+              setNodeText(xWord, "rela", obj.data.rela);
+              wordRelationChange = true;
+              wordChanged = true;
+            }
+            if (obj.data.bmc != null) {
+              setNodeText(xWord, "bmc", obj.data.bmc);
+              wordBodyChange = true;
+              wordChanged = true;
+            }
+            if (obj.data.bmt != null) {
+              setNodeText(xWord, "bmt", obj.data.bmt);
+              wordChanged = true;
+            }
+            if (obj.data.lock != null) {
+              setNodeText(xWord, "lock", obj.data.lock);
+              wordBodyChange = true;
+              wordChanged = true;
+            }
+            if (wordChanged) {
+              setNodeText(xWord, "status", 6);
+              //提交用户逐词解析数据库
+              user_wbw_push_word(obj.data.id);
+            }
+          }
+
+          if (wordHeadChange) {
+            updataWordHeadByIndex(wIndex);
+          }
+          if (wordBodyChange) {
+            modifyWordDetailByWordIndex(wIndex);
+          }
+          if (wordNoteChange || wordRelationChange) {
+            //updateWordNote(xWord);
+            refreshWordNoteDiv(xWord.parentNode.parentNode);
+          }
+
+          if (newWord.vaild) {
+            if (!mDict[sReal]) {
+              mDict[sReal] = new Array();
+            }
+            let isExsit = false;
+            for (let x in mDict[sReal]) {
+              if (
+                mDict[sReal].mean &&
+                mDict[sReal].mean == newWord.mean &&
+                mDict[sReal].parts &&
+                mDict[sReal].parts == newWord.parts &&
+                mDict[sReal].partmean &&
+                mDict[sReal].mean == newWord.partmean &&
+                mDict[sReal].case &&
+                mDict[sReal].case == newWord.case
+              ) {
+                isExsit = true;
+              }
+            }
+            if (!isExsit) {
+              mDict[sReal].push(newWord);
+            }
+          }
+        }
+        break;
+      case "2": //译文
+        let book = obj.data.book;
+        let para = obj.data.para;
+        let begin = obj.data.begin;
+        let end = obj.data.end;
+        $(
+          "[pcds='sent-net'][book='" +
+            book +
+            "'][para='" +
+            para +
+            "'][begin='" +
+            begin +
+            "']"
+        ).html(obj.data.text);
+
+        let tranBlock = doc_tran("#" + obj.data.id);
+        if (tranBlock == null) {
+          tranBlock = doc_tran("#" + obj.data.id, true);
+        }
+        if (tranBlock) {
+          /*
 					if (tranBlock.text(obj.data.begin, obj.data.end, "status") != 7) {
 						msg_read(obj, 2);//设置为自动采纳
 						console.log("句子 自动采纳");
@@ -343,380 +367,542 @@ function msg_apply_data(obj) {
 						tranBlock.text(obj.data.begin, obj.data.end, "status", 5);
 						sen_save(tranBlock.info("id"), obj.data.begin, obj.data.end, obj.data.text);
 					}
-				}
-
-				break;
-		}
-	}
-	catch (e) {
-		console.error(e.message);
-		console.error(e.stack);
-	}
-	doc_info.sendmsg = true;//发送消息
-
-	if (obj.read > 0) {
-		return (true);
-	}
-	else {
-		return (false);
-	}
-
-
+					*/
+        }
+
+        break;
+    }
+  } catch (e) {
+    console.error(e.message);
+    console.error(e.stack);
+  }
+  doc_info.sendmsg = true; //发送消息
+
+  if (obj.read > 0) {
+    return true;
+  } else {
+    return false;
+  }
 }
 
 function msg_word_msg_num(wid) {
-	if (gDocMsgList == null) {
-		return;
-	}
-	var iMsg = 0;
-	for (var i = 0; i < gDocMsgList.length; i++) {
-		if (gDocMsgList[i].type == 1) {
-			if (gDocMsgList[i].data.id == wid && gDocMsgList[i].read == 0) {
-				iMsg++;
-			}
-		}
-	}
-	return (iMsg);
+  if (gDocMsgList == null) {
+    return;
+  }
+  var iMsg = 0;
+  for (var i = 0; i < gDocMsgList.length; i++) {
+    if (gDocMsgList[i].type == 1) {
+      if (gDocMsgList[i].data.id == wid && gDocMsgList[i].read == 0) {
+        iMsg++;
+      }
+    }
+  }
+  return iMsg;
 }
 
 function msg_set_tool_bar_msg_counter() {
-	if (gDocMsgList == null) {
-		return;
-	}
-	var iMsg = 0;
-	for (var i = 0; i < gDocMsgList.length; i++) {
-		if (gDocMsgList[i].read == 0) {
-			iMsg++;
-		}
-	}
-	if (iMsg == 0) {
-		$("#icon_notify_" + msg_my_id).html("");
-		$("#icon_notify_" + msg_my_id).hide();
-	}
-	else {
-		if (iMsg > 100) {
-			iMsg = "+99";
-		}
-		$("#icon_notify_" + msg_my_id).html(iMsg.toString());
-		$("#icon_notify_" + msg_my_id).show();
-	}
+  if (gDocMsgList == null) {
+    return;
+  }
+  var iMsg = 0;
+  for (var i = 0; i < gDocMsgList.length; i++) {
+    if (gDocMsgList[i].read == 0) {
+      iMsg++;
+    }
+  }
+  if (iMsg == 0) {
+    $("#icon_notify_" + msg_my_id).html("");
+    $("#icon_notify_" + msg_my_id).hide();
+  } else {
+    if (iMsg > 100) {
+      iMsg = "+99";
+    }
+    $("#icon_notify_" + msg_my_id).html(iMsg.toString());
+    $("#icon_notify_" + msg_my_id).show();
+  }
 }
 function time_standardize(date) {
-	var today_date = new Date();
-	var Local_time = date.toLocaleTimeString();
-	//將時間去掉秒的信息
-	if (Local_time && Local_time.split(":").length == 3) {
-		var Local_time_string = Local_time.split(":")[0] + ":" + Local_time.split(":")[1];
-		Local_time_string += Local_time.split(":")[2].slice(2);
-	}
-	else {
-		var Local_time_string = d.toLocaleTimeString()
-	}
-	if (date.toLocaleDateString() == today_date.toLocaleDateString()) {//如果是今天的消息,只显示时间
-		return (Local_time_string);
-	}
-	else if (date.toLocaleDateString().slice(0, 5) == today_date.toLocaleDateString().slice(0, 5)) {//如果是今年但非今天的消息,只显示月日
-		var date_length = date.toLocaleDateString().length;
-		return (date.toLocaleDateString().slice(5, date_length - 1));
-	}
-	else {//如果不是今年的消息,显示年月日
-		return (date.toLocaleDateString());
-	}
-
+  var today_date = new Date();
+  var Local_time = date.toLocaleTimeString();
+  //將時間去掉秒的信息
+  if (Local_time && Local_time.split(":").length == 3) {
+    var Local_time_string =
+      Local_time.split(":")[0] + ":" + Local_time.split(":")[1];
+    Local_time_string += Local_time.split(":")[2].slice(2);
+  } else {
+    var Local_time_string = d.toLocaleTimeString();
+  }
+  if (date.toLocaleDateString() == today_date.toLocaleDateString()) {
+    //如果是今天的消息,只显示时间
+    return Local_time_string;
+  } else if (
+    date.toLocaleDateString().slice(0, 5) ==
+    today_date.toLocaleDateString().slice(0, 5)
+  ) {
+    //如果是今年但非今天的消息,只显示月日
+    var date_length = date.toLocaleDateString().length;
+    return date.toLocaleDateString().slice(5, date_length - 1);
+  } else {
+    //如果不是今年的消息,显示年月日
+    return date.toLocaleDateString();
+  }
 }
 
 //显示消息内容
 function msg_show_content(type, id) {
-	if (gDocMsgList == null) {
-		return;
-	}
-	if (type == "" || id == "") {
-		return;
-	}
-	let arrid;
-	let sen_begin, sen_end;
-	type = parseInt(type);
-
-	if (type == 2) {
-		arrid = id.split("#");
-		id = arrid[0];
-		sen_begin = arrid[1];
-		sen_end = arrid[2];
-	}
-
-	msg_curr_show_content_id = id;
-	msg_curr_show_content_type = type;
-	var iMsg = 0;
-	var outHtml = "";
-	var iLastTime = 0;
-	for (var i = 0; i < gDocMsgList.length; i++) {
-		let isFound = false;
-		switch (type) {
-			case 1:
-				if (gDocMsgList[i].type == type && gDocMsgList[i].data.id == id) {
-					isFound = true;
-				}
-				break;
-			case 2:
-				if (gDocMsgList[i].type == type && gDocMsgList[i].data.id == id && gDocMsgList[i].data.begin == sen_begin && gDocMsgList[i].data.end == sen_end) {
-					isFound = true;
-				}
-				break;
-		}
-		if (isFound) {
-			iMsg++;
-			if (gDocMsgList[i].read == 0) {
-				//如果未读,设置为已读
-				msg_read(gDocMsgList[i], 1);
-			}
-
-			//三分钟之内的消息只显示一个时间标记
-			if (gDocMsgList[i].time - iLastTime > 60 * 3) {
-				var d = new Date()
-				d.setTime(gDocMsgList[i].time * 1000);
-				//var Local_date=d.toLocaleDateString().split("/");
-				var time_standardize_string = time_standardize(d);
-				outHtml += "<div class='msgbox_time'><span>" + time_standardize_string + "</span></div>";//d.toLocaleeString()
-
-			}
-			iLastTime = gDocMsgList[i].time;
-
-			var myName = getCookie("username");
-			if (gDocMsgList[i].sender == myName) {
-				outHtml += "<div class='msgbox_div'>";
-				outHtml += "<div class='msgbox_s'>";
-				outHtml += "<div class='head'><span>" + gDocMsgList[i].sender + "</span></div>";
-			}
-			else {
-				outHtml += "<div class='msgbox_r'>";
-				outHtml += "<div class='head'><span>" + gDocMsgList[i].sender + "</span><span>Apply</span></div>";
-			}
-
-			switch (parseInt(type)) {
-				case 1:
-					if (gDocMsgList[i].data.pali != null) {
-						outHtml += "<div>spell:<a onclick=\"fieldListChanged('" + id + "','pali','" + gDocMsgList[i].data.pali + "')\">" + gDocMsgList[i].data.pali + "</a></div>";
-					}
-					if (gDocMsgList[i].data.real != null) {
-						outHtml += "<div>real:<a onclick=\"fieldListChanged('" + id + "','real','" + gDocMsgList[i].data.real + "')\">" + gDocMsgList[i].data.real + "</a></div>";
-					} if (gDocMsgList[i].data.mean != null) {
-						outHtml += "<div>mean:<a onclick=\"fieldListChanged('" + id + "','mean','" + gDocMsgList[i].data.mean + "')\">" + gDocMsgList[i].data.mean + "</a></div>";
-					}
-					if (gDocMsgList[i].data.org != null) {
-						outHtml += "<div>part:<a onclick=\"fieldListChanged('" + id + "','org','" + gDocMsgList[i].data.org + "')\">" + gDocMsgList[i].data.org + "</a></div>";
-					}
-					if (gDocMsgList[i].data.om != null) {
-						outHtml += "<div>part mean:<a onclick=\"fieldListChanged('" + id + "','om','" + gDocMsgList[i].data.om + "')\">" + gDocMsgList[i].data.om + "</a></div>";
-					}
-					if (gDocMsgList[i].data.case != null) {
-						outHtml += "<div>case:<a onclick=\"fieldListChanged('" + id + "','case','" + gDocMsgList[i].data.case + "')\">" + gDocMsgList[i].data.case + "</a></div>";
-					}
-					if (gDocMsgList[i].data.parent != null) {
-						outHtml += "<div>base:<a onclick=\"fieldListChanged('" + id + "','parent','" + gDocMsgList[i].data.parent + "')\">" + gDocMsgList[i].data.parent + "</a></div>";
-					}
-					if (gDocMsgList[i].data.note != null) {
-						outHtml += "<div>note:<a onclick=\"fieldListChanged('" + id + "','note','" + gDocMsgList[i].data.note + "')\">" + gDocMsgList[i].data.note + "</a></div>";
-					}
-					if (gDocMsgList[i].data.rela != null) {
-						let strRelation = decodeURI(gDocMsgList[i].data.rela);
-						outHtml += "<div>Relation:<a onclick=\"fieldListChanged('" + id + "','rela','" + strRelation + "')\">";
-						outHtml += renderWordRelationByString("", strRelation, id);
-						outHtml += "</a></div>";
-					}
-					if (gDocMsgList[i].data.lock != null) {
-						outHtml += "<div>lock:<a onclick=\"fieldListChanged('" + id + "','lock','" + gDocMsgList[i].data.lock + "')\">" + gDocMsgList[i].data.lock + "</a></div>";
-					}
-					if (gDocMsgList[i].data.bmc != null) {
-						outHtml += "<div>Bookmark:<a onclick=\"fieldListChanged('" + id + "','bmc','" + gDocMsgList[i].data.bmc + "')\">" + gDocMsgList[i].data.bmc + "</a></div>";
-					}
-					if (gDocMsgList[i].data.bmt != null) {
-						outHtml += "<div>Bookmark:<a onclick=\"fieldListChanged('" + id + "','bmt','" + gDocMsgList[i].data.bmt + "')\">" + gDocMsgList[i].data.bmt + "</a></div>";
-					}
-					break;
-				case 2:
-					outHtml += "<div>sentence:<a onclick=\"setTranText('" + gDocMsgList[i].data.id + "','" + gDocMsgList[i].data.end + "','" + gDocMsgList[i].data.text + "')\">" + gDocMsgList[i].data.text + "</a></div>";
-
-					break;
-			}
-			switch (gDocMsgList[i].read) {
-				case 1:
-					break;
-				case 2:
-					outHtml += "<div>已经自动采纳</div>";
-					break;
-				case 3:
-					outHtml += "<div>已被采纳</div>";
-					break;
-			}
-			outHtml += "</div></div>";
-		}
-	}
-
-	$("#msg_panal_content").html(outHtml);
-
-	switch (type) {
-		case 1:
-			updataWordHeadById(id);
-			var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
-			var wordSpell = getNodeText(xAllWord[getWordIndex(id)], "real");
-			var wordId = getNodeText(xAllWord[getWordIndex(id)], "id");
-			wordSpell = "<a href='#w" + wordId + "'>" + wordSpell + "</a>";
-			$("#msg_content_title").html(wordSpell);
-			break;
-		case 2:
-			break;
-	}
-
-	msg_set_tool_bar_msg_counter();
+  if (gDocMsgList == null) {
+    return;
+  }
+  if (type == "" || id == "") {
+    return;
+  }
+  let arrid;
+  let sen_begin, sen_end;
+  type = parseInt(type);
+
+  if (type == 2) {
+    arrid = id.split("#");
+    id = arrid[0];
+    sen_begin = arrid[1];
+    sen_end = arrid[2];
+  }
+
+  msg_curr_show_content_id = id;
+  msg_curr_show_content_type = type;
+  var iMsg = 0;
+  var outHtml = "";
+  var iLastTime = 0;
+  for (var i = 0; i < gDocMsgList.length; i++) {
+    let isFound = false;
+    switch (type) {
+      case 1:
+        if (gDocMsgList[i].type == type && gDocMsgList[i].data.id == id) {
+          isFound = true;
+        }
+        break;
+      case 2:
+        if (
+          gDocMsgList[i].type == type &&
+          gDocMsgList[i].data.id == id &&
+          gDocMsgList[i].data.begin == sen_begin &&
+          gDocMsgList[i].data.end == sen_end
+        ) {
+          isFound = true;
+        }
+        break;
+    }
+    if (isFound) {
+      iMsg++;
+      if (gDocMsgList[i].read == 0) {
+        //如果未读,设置为已读
+        msg_read(gDocMsgList[i], 1);
+      }
+
+      //三分钟之内的消息只显示一个时间标记
+      if (gDocMsgList[i].time - iLastTime > 60 * 3) {
+        var d = new Date();
+        d.setTime(gDocMsgList[i].time * 1000);
+        //var Local_date=d.toLocaleDateString().split("/");
+        var time_standardize_string = time_standardize(d);
+        outHtml +=
+          "<div class='msgbox_time'><span>" +
+          time_standardize_string +
+          "</span></div>"; //d.toLocaleeString()
+      }
+      iLastTime = gDocMsgList[i].time;
+
+      var myName = getCookie("username");
+      if (gDocMsgList[i].sender == myName) {
+        outHtml += "<div class='msgbox_div'>";
+        outHtml += "<div class='msgbox_s'>";
+        outHtml +=
+          "<div class='head'><span>" + gDocMsgList[i].sender + "</span></div>";
+      } else {
+        outHtml += "<div class='msgbox_r'>";
+        outHtml +=
+          "<div class='head'><span>" +
+          gDocMsgList[i].sender +
+          "</span><span>Apply</span></div>";
+      }
+
+      switch (parseInt(type)) {
+        case 1:
+          if (gDocMsgList[i].data.pali != null) {
+            outHtml +=
+              "<div>spell:<a onclick=\"fieldListChanged('" +
+              id +
+              "','pali','" +
+              gDocMsgList[i].data.pali +
+              "')\">" +
+              gDocMsgList[i].data.pali +
+              "</a></div>";
+          }
+          if (gDocMsgList[i].data.real != null) {
+            outHtml +=
+              "<div>real:<a onclick=\"fieldListChanged('" +
+              id +
+              "','real','" +
+              gDocMsgList[i].data.real +
+              "')\">" +
+              gDocMsgList[i].data.real +
+              "</a></div>";
+          }
+          if (gDocMsgList[i].data.mean != null) {
+            outHtml +=
+              "<div>mean:<a onclick=\"fieldListChanged('" +
+              id +
+              "','mean','" +
+              gDocMsgList[i].data.mean +
+              "')\">" +
+              gDocMsgList[i].data.mean +
+              "</a></div>";
+          }
+          if (gDocMsgList[i].data.org != null) {
+            outHtml +=
+              "<div>part:<a onclick=\"fieldListChanged('" +
+              id +
+              "','org','" +
+              gDocMsgList[i].data.org +
+              "')\">" +
+              gDocMsgList[i].data.org +
+              "</a></div>";
+          }
+          if (gDocMsgList[i].data.om != null) {
+            outHtml +=
+              "<div>part mean:<a onclick=\"fieldListChanged('" +
+              id +
+              "','om','" +
+              gDocMsgList[i].data.om +
+              "')\">" +
+              gDocMsgList[i].data.om +
+              "</a></div>";
+          }
+          if (gDocMsgList[i].data.case != null) {
+            outHtml +=
+              "<div>case:<a onclick=\"fieldListChanged('" +
+              id +
+              "','case','" +
+              gDocMsgList[i].data.case +
+              "')\">" +
+              gDocMsgList[i].data.case +
+              "</a></div>";
+          }
+          if (gDocMsgList[i].data.parent != null) {
+            outHtml +=
+              "<div>base:<a onclick=\"fieldListChanged('" +
+              id +
+              "','parent','" +
+              gDocMsgList[i].data.parent +
+              "')\">" +
+              gDocMsgList[i].data.parent +
+              "</a></div>";
+          }
+          if (gDocMsgList[i].data.note != null) {
+            outHtml +=
+              "<div>note:<a onclick=\"fieldListChanged('" +
+              id +
+              "','note','" +
+              gDocMsgList[i].data.note +
+              "')\">" +
+              gDocMsgList[i].data.note +
+              "</a></div>";
+          }
+          if (gDocMsgList[i].data.rela != null) {
+            let strRelation = decodeURI(gDocMsgList[i].data.rela);
+            outHtml +=
+              "<div>Relation:<a onclick=\"fieldListChanged('" +
+              id +
+              "','rela','" +
+              strRelation +
+              "')\">";
+            outHtml += renderWordRelationByString("", strRelation, id);
+            outHtml += "</a></div>";
+          }
+          if (gDocMsgList[i].data.lock != null) {
+            outHtml +=
+              "<div>lock:<a onclick=\"fieldListChanged('" +
+              id +
+              "','lock','" +
+              gDocMsgList[i].data.lock +
+              "')\">" +
+              gDocMsgList[i].data.lock +
+              "</a></div>";
+          }
+          if (gDocMsgList[i].data.bmc != null) {
+            outHtml +=
+              "<div>Bookmark:<a onclick=\"fieldListChanged('" +
+              id +
+              "','bmc','" +
+              gDocMsgList[i].data.bmc +
+              "')\">" +
+              gDocMsgList[i].data.bmc +
+              "</a></div>";
+          }
+          if (gDocMsgList[i].data.bmt != null) {
+            outHtml +=
+              "<div>Bookmark:<a onclick=\"fieldListChanged('" +
+              id +
+              "','bmt','" +
+              gDocMsgList[i].data.bmt +
+              "')\">" +
+              gDocMsgList[i].data.bmt +
+              "</a></div>";
+          }
+          break;
+        case 2:
+          outHtml +=
+            "<div>sentence:<a onclick=\"setTranText('" +
+            gDocMsgList[i].data.id +
+            "','" +
+            gDocMsgList[i].data.end +
+            "','" +
+            gDocMsgList[i].data.text +
+            "')\">" +
+            gDocMsgList[i].data.text +
+            "</a></div>";
+
+          break;
+      }
+      switch (gDocMsgList[i].read) {
+        case 1:
+          break;
+        case 2:
+          outHtml += "<div>已经自动采纳</div>";
+          break;
+        case 3:
+          outHtml += "<div>已被采纳</div>";
+          break;
+      }
+      outHtml += "</div></div>";
+    }
+  }
+
+  $("#msg_panal_content").html(outHtml);
+
+  switch (type) {
+    case 1:
+      updataWordHeadById(id);
+      var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
+      var wordSpell = getNodeText(xAllWord[getWordIndex(id)], "real");
+      var wordId = getNodeText(xAllWord[getWordIndex(id)], "id");
+      wordSpell = "<a href='#w" + wordId + "'>" + wordSpell + "</a>";
+      $("#msg_content_title").html(wordSpell);
+      break;
+    case 2:
+      break;
+  }
+
+  msg_set_tool_bar_msg_counter();
 }
 
 //刷新消息列表
 function msg_update_msg_list() {
-	if (gDocMsgList == null) {
-		return;
-	}
-	let strHtml = "";
-	let msgList = new Array();
-
-	for (var i = 0; i < gDocMsgList.length; i++) {
-		switch (gDocMsgList[i].type) {
-			case "2":
-			case "1":
-				var iFind = _msg_find_id_in_list(msgList, gDocMsgList[i].data.id);
-				if (iFind >= 0) {
-					if (gDocMsgList[i].read == 0) {
-						msgList[iFind].unread++;
-					}
-					msgList[iFind].counter++;
-					msgList[iFind].newTime = gDocMsgList[i].time;
-					msgList[iFind].sender = gDocMsgList[i].sender;
-				}
-				//没找到
-				else {
-					objMsg = new Object();
-					objMsg.id = gDocMsgList[i].data.id;
-					objMsg.data = gDocMsgList[i].data;
-					objMsg.type = gDocMsgList[i].type;
-					if (gDocMsgList[i].read == 0) {
-						objMsg.unread = 1;
-					}
-					else {
-						objMsg.unread = 0;
-					}
-					objMsg.counter = 1;
-					objMsg.newTime = gDocMsgList[i].time;
-					objMsg.sender = gDocMsgList[i].sender;
-					msgList.push(objMsg);
-				}
-				break;
-		}
-	}
-	strHtml += "<ul class='msg_list'>";
-
-	msgList.sort(sortNumber);
-	for (var j = 0; j < 2; j++) {
-		for (var i = 0; i < msgList.length; i++) {
-			//先显示未读的 再显示已经读的
-			var times;
-			if (msgList[i].unread > 0) {
-				times = 0;
-			}
-			else {
-				times = 1;
-			}
-			if (times == j) {
-				strHtml += "<li>";
-				var d = new Date();
-				d.setTime(msgList[i].newTime * 1000);
-				switch (msgList[i].type) {
-					case "1":
-						var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
-						var wIndex = getWordIndex(msgList[i].id);
-						if (wIndex >= 0) {
-							var wordSpell = getNodeText(xAllWord[getWordIndex(msgList[i].id)], "real");
-						}
-						else {
-							var wordSpell = "unkow";
-						}
-						strHtml += "<span>";
-						if (msgList[i].unread > 0) {
-							strHtml += "<span class='word_msg'  onclick=\"msg_show_msg_content('1','" + msgList[i].id + "')\">" + msgList[i].unread + "</span>";
-						}
-						strHtml += "<a href='#w" + msgList[i].id + "'>[«]</a>";
-						strHtml += "<a onclick=\"msg_show_msg_content('1','" + msgList[i].id + "')\">" + wordSpell + "</a></span>";
-						strHtml += "<span>" + time_standardize(d) + "</span>";
-						break;
-					case "2":
-						let sent_id = msgList[i].id + "#" + msgList[i].data.begin + "#" + msgList[i].data.end;
-						let sent_msg_title = msgList[i].data.begin + "-" + msgList[i].data.end + "-" + msgList[i].data.text.slice(0, 5);
-						strHtml += "<a onclick=\"msg_show_msg_content('2','" + sent_id + "')\">" + sent_msg_title + "</a></span>";
-						strHtml += "<span>" + time_standardize(d) + "</span>";
-						break;
-				}
-				strHtml += "</li>";
-			}
-		}
-	}
-	strHtml += "</ul>";
-
-	$("#msg_panal_list").html(strHtml);
+  if (gDocMsgList == null) {
+    return;
+  }
+  let strHtml = "";
+  let msgList = new Array();
+
+  for (var i = 0; i < gDocMsgList.length; i++) {
+    switch (gDocMsgList[i].type) {
+      case "2":
+      case "1":
+        var iFind = _msg_find_id_in_list(msgList, gDocMsgList[i].data.id);
+        if (iFind >= 0) {
+          if (gDocMsgList[i].read == 0) {
+            msgList[iFind].unread++;
+          }
+          msgList[iFind].counter++;
+          msgList[iFind].newTime = gDocMsgList[i].time;
+          msgList[iFind].sender = gDocMsgList[i].sender;
+        }
+        //没找到
+        else {
+          objMsg = new Object();
+          objMsg.id = gDocMsgList[i].data.id;
+          objMsg.data = gDocMsgList[i].data;
+          objMsg.type = gDocMsgList[i].type;
+          if (gDocMsgList[i].read == 0) {
+            objMsg.unread = 1;
+          } else {
+            objMsg.unread = 0;
+          }
+          objMsg.counter = 1;
+          objMsg.newTime = gDocMsgList[i].time;
+          objMsg.sender = gDocMsgList[i].sender;
+          msgList.push(objMsg);
+        }
+        break;
+    }
+  }
+  strHtml += "<ul class='msg_list'>";
+
+  msgList.sort(sortNumber);
+  for (var j = 0; j < 2; j++) {
+    for (var i = 0; i < msgList.length; i++) {
+      //先显示未读的 再显示已经读的
+      var times;
+      if (msgList[i].unread > 0) {
+        times = 0;
+      } else {
+        times = 1;
+      }
+      if (times == j) {
+        strHtml += "<li>";
+        var d = new Date();
+        d.setTime(msgList[i].newTime * 1000);
+        switch (msgList[i].type) {
+          case "1":
+            var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
+            var wIndex = getWordIndex(msgList[i].id);
+            if (wIndex >= 0) {
+              var wordSpell = getNodeText(
+                xAllWord[getWordIndex(msgList[i].id)],
+                "real"
+              );
+            } else {
+              var wordSpell = "unkow";
+            }
+            strHtml += "<span>";
+            if (msgList[i].unread > 0) {
+              strHtml +=
+                "<span class='word_msg'  onclick=\"msg_show_msg_content('1','" +
+                msgList[i].id +
+                "')\">" +
+                msgList[i].unread +
+                "</span>";
+            }
+            strHtml += "<a href='#w" + msgList[i].id + "'>[«]</a>";
+            strHtml +=
+              "<a onclick=\"msg_show_msg_content('1','" +
+              msgList[i].id +
+              "')\">" +
+              wordSpell +
+              "</a></span>";
+            strHtml += "<span>" + time_standardize(d) + "</span>";
+            break;
+          case "2":
+            let sent_id =
+              msgList[i].id +
+              "#" +
+              msgList[i].data.begin +
+              "#" +
+              msgList[i].data.end;
+            let sent_msg_title =
+              msgList[i].data.begin +
+              "-" +
+              msgList[i].data.end +
+              "-" +
+              msgList[i].data.text.slice(0, 5);
+            strHtml +=
+              "<a onclick=\"msg_show_msg_content('2','" +
+              sent_id +
+              "')\">" +
+              sent_msg_title +
+              "</a></span>";
+            strHtml += "<span>" + time_standardize(d) + "</span>";
+            break;
+        }
+        strHtml += "</li>";
+      }
+    }
+  }
+  strHtml += "</ul>";
+
+  $("#msg_panal_list").html(strHtml);
 }
 function _msg_find_id_in_list(arrList, id) {
-	for (var i = 0; i < arrList.length; i++) {
-		if (arrList[i].id == id) {
-			return (i);
-		}
-	}
-	return (-1);
+  for (var i = 0; i < arrList.length; i++) {
+    if (arrList[i].id == id) {
+      return i;
+    }
+  }
+  return -1;
 }
 
 function sortNumber(a, b) {
-	return b.newTime - a.newTime;
+  return b.newTime - a.newTime;
 }
 
-
 function show_tran_msg(bid, begin, end) {
-	msg_show_msg_content(2, bid + "-" + begin + "-" + end);
+  msg_show_msg_content(2, bid + "-" + begin + "-" + end);
 }
 
 function word_msg_counter_click(wordId) {
-	msg_show_content(1, wordId);
-	msg_show_content_panal();
-	//tab_click('msg_panal_right', 'rb_msg');
-	tab_click_b('sys_message', 'tab_rb_sys_message', editor_show_right_tool_bar, true);
-	editor_show_right_tool_bar(true);
+  msg_show_content(1, wordId);
+  msg_show_content_panal();
+  //tab_click('msg_panal_right', 'rb_msg');
+  tab_click_b(
+    "sys_message",
+    "tab_rb_sys_message",
+    editor_show_right_tool_bar,
+    true
+  );
+  editor_show_right_tool_bar(true);
 }
 function msg_show_msg_content(type, id) {
-	msg_show_content(type, id);
-	msg_show_content_panal();
-	tab_click_b('sys_message', 'tab_rb_sys_message', editor_show_right_tool_bar, true);
+  msg_show_content(type, id);
+  msg_show_content_panal();
+  tab_click_b(
+    "sys_message",
+    "tab_rb_sys_message",
+    editor_show_right_tool_bar,
+    true
+  );
 }
 
 function show_tran_net(book, para, begin, end) {
-	tab_click_b('sys_message', 'tab_rb_sys_message', editor_show_right_tool_bar, true);
-	$.get("../usent/get.php",
-		{
-			book: book,
-			para: para,
-			begin: begin,
-			end: end
-		},
-		function (data, status) {
-			$("#msg_panal_content").html(data);
-		});
+  tab_click_b(
+    "sys_message",
+    "tab_rb_sys_message",
+    editor_show_right_tool_bar,
+    true
+  );
+  $.get(
+    "../usent/get.php",
+    {
+      book: book,
+      para: para,
+      begin: begin,
+      end: end,
+    },
+    function (data, status) {
+      let arrSent = JSON.parse(data);
+      let strHtml = "";
+      for (const iterator of arrSent) {
+        strHtml += "<div class='trans_text_block'>";
+        strHtml += "<div class='trans_text_content' >";
+        strHtml += iterator.text;
+        strHtml += "</div>";
+        strHtml +=
+          "<div class='trans_text_info'>" +
+          "<span><span class='author'>" +
+          iterator.author +
+          "</span><span class='tag'>笔记</span></span>" +
+          "<span class='tools'>" +
+          "<button>采纳</button>" +
+          "</span>" +
+          "</div>";
+        strHtml += "</div>";
+      }
+      $("#msg_panal_content").html(strHtml);
+      $("#msg_panal_content").show();
+      $("#msg_panal_list").hide();
+    }
+  );
 }
 
 function msg_show_list_panal() {
-	$("#msg_panal_content_toolbar").hide();
-	$("#msg_panal_content").hide();
+  $("#msg_panal_content_toolbar").hide();
+  $("#msg_panal_content").hide();
 
-	$("#msg_panal_list_toolbar").show();
-	$("#msg_panal_list").show();
+  $("#msg_panal_list_toolbar").show();
+  $("#msg_panal_list").show();
 }
 function msg_show_content_panal() {
-	$("#msg_panal_content_toolbar").show();
-	$("#msg_panal_content").show();
+  $("#msg_panal_content_toolbar").show();
+  $("#msg_panal_content").show();
 
-	$("#msg_panal_list_toolbar").hide();
-	$("#msg_panal_list").hide();
-}
+  $("#msg_panal_list_toolbar").hide();
+  $("#msg_panal_list").hide();
+}

文件差異過大導致無法顯示
+ 989 - 728
app/studio/js/render.js


+ 1 - 15
app/usent/get.php

@@ -21,20 +21,6 @@ $stmt = $dbh->prepare($query);
 $stmt->execute(array($book,$para,$begin,$end));
 $Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
 
-    $iFetch=count($Fetch);
-    if($iFetch>0){
-        foreach ($Fetch as $key => $value) {
-            echo "<div>";
-            echo "<div>".$value["author"]."</div>";
-            echo "<div>".$value["text"]."</div>";
-            echo "</div>";
-        }
-    }
-    else{
-        echo "沙发等你来坐。";
-    }
-
-
-//echo json_encode($respond, JSON_UNESCAPED_UNICODE);
+    echo json_encode($Fetch, JSON_UNESCAPED_UNICODE);
 
 ?>

部分文件因文件數量過多而無法顯示