Browse Source

Merge pull request #47 from visuddhinanda/master

:bug: 别人的消息apply到自己的手工修改
visuddhinanda 5 years ago
parent
commit
d710519463
8 changed files with 903 additions and 813 deletions
  1. 0 1
      app/studio/dl.json
  2. 1 1
      app/studio/index.php
  3. 392 388
      app/studio/js/data.js
  4. 415 413
      app/studio/js/message.js
  5. 3 3
      app/studio/setting.php
  6. 3 3
      app/term/note.php
  7. 30 4
      app/ucenter/index.php
  8. 59 0
      app/ucenter/pwd_set.php

+ 0 - 1
app/studio/dl.json

@@ -1 +0,0 @@
-{"loadlist": [{"resIndex":"564" ,"res":"wbw" ,"book":"p122" ,"parNum":"3984" ,"parEnd":"3995" ,"author":"templet" ,"editor":"templet" ,"revision":"" ,"language":"com" ,"edition":"1" ,"subver":"0" ,"parlist":"3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995" ,"title":"1. Sundarīparibbājikāvatthu"},{"resIndex":"1333" ,"res":"heading" ,"book":"p122" ,"parNum":"3984" ,"parEnd":"3995" ,"author":"templet" ,"editor":"templet" ,"revision":"" ,"language":"pali" ,"edition":"1" ,"subver":"0" ,"parlist":"3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995" ,"title":"1. Sundarīparibbājikāvatthu"}]}

+ 1 - 1
app/studio/index.php

@@ -464,7 +464,7 @@ else{
                             strFilelist += "<li>"+$link+file_list[x].title+"</a></li>";
                         }
                         if(file_list.length>count){
-                            strFilelist += "<li><a href='studio/' targe='_blank'>更多</a></li>";
+                            strFilelist += "<li><a href='../studio/index_recent.php' targe='_blank'>更多</a></li>";
                         }
                         $("#file_list").html(strFilelist);
                     }

+ 392 - 388
app/studio/js/data.js

@@ -3,8 +3,8 @@ var xmlDoc = null;
 var xmlDict = null;
 var gXmlOldVerData;//old ver xml file xml doc
 
-var g_filename="";//工程文件名
-var arrDocFileInfo=null;
+var g_filename = "";//工程文件名
+var arrDocFileInfo = null;
 
 //全部的逐词译单词xml 节点数组
 var gXmlAllWordInWBW = new Array();
@@ -12,14 +12,14 @@ var gXmlAllWordInWBW = new Array();
 var gXmlBookData;
 var gXmlBookDataHead;
 var gXmlBookDataHeadToc;
-var gXmlBookDataBody=null;
+var gXmlBookDataBody = null;
 var gXmlBookDataInlineDict;  //内联字典数据
 var gXmlBookDataMsg;  //消息数据
-var gDocMsgList=new Array();//消息数组
+var gDocMsgList = new Array();//消息数组
 
 var gXmlParIndex;//段落列表
 
-var gArrayDocParagraph=new Array();//文档中的段落列表
+var gArrayDocParagraph = new Array();//文档中的段落列表
 
 //资源列表
 var lstResTranslate = new Array();
@@ -29,232 +29,232 @@ var lstResHeading = new Array();
 
 var doc_info = new Object();
 
-doc_info.msg_run = function(value){
-	if(value){
+doc_info.msg_run = function (value) {
+	if (value) {
 		this.sendmsg = value;
 	}
-	else{
-		return(this.sendmsg);
+	else {
+		return (this.sendmsg);
 	}
 }
-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");
+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 = new ActiveXObject("Microsoft.XMLDOM");
+		gXmlBookData.async = "false";
 		gXmlBookData.loadXML(strXml);
 	}
-			  
-	if (gXmlBookData == null){
+
+	if (gXmlBookData == null) {
 		alert("error:can not load book index.");
-			return;
+		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];
+	gXmlBookDataHead = gXmlBookData.getElementsByTagName("head")[0];
+	gXmlBookDataInlineDict = gXmlBookData.getElementsByTagName("dict")[0];
+	gXmlBookDataMsg = gXmlBookData.getElementsByTagName("message")[0];
+	gXmlBookDataHeadToc = gXmlBookDataHead.getElementsByTagName("toc")[0];
 
 }
 
-function com_XmlAllWordRefresh(){
+function com_XmlAllWordRefresh() {
 	gXmlAllWordInWBW = gXmlBookDataBody.getElementsByTagName("word");
 }
 
-function insertBlockToXmlBookData(element){
+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){
+	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];
+			xWords = element.getElementsByTagName("word");
+			for (iWord = 0; iWord < xWords.length; iWord++) {
+				len = gXmlAllWordInWBW.length;
+				gXmlAllWordInWBW[len] = xWords[iWord];
 			}
-		break;
+			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
+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);
+		if (currBookId == bookId && currParNo == parNo) {
+			return (iPar);
 		}
 	}
-	return(-1);
+	return (-1);
 
 }
 //扫描文档 更新段落列表
-function updataDocParagraphList(){
-	gArrayDocParagraph=new Array();
-	var temp=new Array();
-	allBlock=gXmlBookDataBody.getElementsByTagName("block")
-	for(var iBlock=0;iBlock<allBlock.length;iBlock++){
+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 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;
+		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].level = newPar.level;
 				}
 			}
 		}
-		else{
-			temp[bookpara]=newPar;
+		else {
+			temp[bookpara] = newPar;
 		}
 
 	}
-	for(var iTemp in temp){
+	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)
+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)
+	return (-1)
 }
-function doc_setWordDataById(wordId,key,value){
-	var xAllWord = gXmlBookDataBody.getElementsByTagName("word");	
-	var wordIndex=getWordIndex(wordId);
-	setNodeText(xAllWord[wordIndex],key,value);
+function doc_setWordDataById(wordId, 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){
-	  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;//无需发送消息
-		  }
-	  }
-  });
+function doc_file_info_get() {
+	$.post("file_index.php",
+		{
+			op: "getall",
+			doc_id: g_docid
+		},
+		function (data, status) {
+			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;//无需发送消息
+				}
+			}
+		});
 }
 
-function doc_info_change(field,value){
+function doc_info_change(field, value) {
 	$.post("file_index.php",
-	{
-	op:"set",
-	doc_id:g_docid,
-	field:"accese_time",
-	value:value
-	},
-	function(data,status){
-		console.log("doc_info_change",data);
-	});
+		{
+			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){
-	setNodeText(gXmlBookDataHead,"doc_title",obj.value);
-	document.getElementById("editor_doc_title").innerHTML=obj.value;
-	document.getElementById("file_title").innerHTML=obj.value;
+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){
-	alert("Data: " + data + "\nStatus: " + status);
-	});
-	
+		{
+			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);
+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);
+	}
+	return (null);
 }
 
 /*
@@ -268,51 +268,51 @@ strValue:句子文本数据
 
 */
-function setTranText(id,senA,strValue){
-	xBlock=gXmlBookDataBody.getElementsByTagName("block");
-	for(var iBlock=0;iBlock<xBlock.length;iBlock++){
+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){
+		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);
+					setNodeText(xSen[iSen], "text", strValue);
+					ntf_show("修改:" + strValue);
 					//准备消息数据 並發送
-					if(doc_info.sendmsg == true){
-						let d=new Date();
+					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;
+						if (doc_info.parent_id != "") {
+							msg_doc_id = doc_info.parent_id;
 						}
-						else{
-							msg_doc_id=doc_info.doc_id;
+						else {
+							msg_doc_id = doc_info.doc_id;
 						}
-						let blockId ;
-						if(parent_id.length>0){
+						let blockId;
+						if (parent_id.length > 0) {
 							blockId = parent_id;
 						}
-						else{
+						else {
 							blockId = id;
 						}
 						let objMsg = new Object();
-						objMsg.id=blockId;
-						objMsg.begin=aBegin;
+						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);
+
+						let strMsg = JSON.stringify(objMsg);
+						msg_push(2, strMsg, msg_doc_id, d.getTime(), book, para);
+						console.log("send mseeage:" + strMsg);
 					}
 				}
 			}
@@ -320,73 +320,77 @@ function setTranText(id,senA,strValue){
 	}
 }
 
-function setNoteText(id,strValue){
-	xBlock=gXmlBookDataBody.getElementsByTagName("block");
-	for(let iBlock=0;iBlock<xBlock.length;iBlock++){
+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);
+		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);
+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));
+	else {//get
+		return (getNodeText(gXmlBookDataHead, key));
 	}
-	
+
 }
 
-function doc_msg_push(msgobj){
+
+
+function doc_msg_push(msgobj) {
+
 	gDocMsgList.push(msgobj);
-	if(gXmlBookDataMsg){
-		var newNode=gXmlBookData.createElement("msg");
-		setNodeText(newNode,"id",msgobj.id);
-		setNodeText(newNode,"sender",msgobj.sender);
-		setNodeText(newNode,"type",msgobj.type);
-		setNodeText(newNode,"docid",msgobj.docid);
-		setNodeText(newNode,"time",msgobj.time);
-		setNodeText(newNode,"read",msgobj.read);
-		setNodeText(newNode,"data",msgobj.data);
+	if (gXmlBookDataMsg) {
+		var newNode = gXmlBookData.createElement("msg");
+		setNodeText(newNode, "id", msgobj.id);
+		setNodeText(newNode, "sender", msgobj.sender);
+		setNodeText(newNode, "type", msgobj.type);
+		setNodeText(newNode, "docid", msgobj.docid);
+		setNodeText(newNode, "time", msgobj.time);
+		setNodeText(newNode, "read", msgobj.read);
+		setNodeText(newNode, "data", msgobj.data);
 		gXmlBookDataMsg.appendChild(newNode);
 	}
 }
 
-function doc_block(strSelector=""){
-	if(strSelector==""){
-		var xBlock = gXmlBookDataBody.getElementsByTagName("block");	
-		return(xBlock);
+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){
+	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);				
+			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);
+		return (null);
 	}
-	else{
-		return(null);
+	else {
+		return (null);
 	}
 }
 
@@ -397,70 +401,70 @@ remove
 .draw
 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);
+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 {
+			var wordobj = new Object();
+			wordobj.wordid = strSelector;
+			wordobj.element = null;
+			wordobj.val = _doc_word_value;
+			return (wordobj);
 		}
 	}
-	else{
+	else {
 	}
 }
-function _doc_word_value(key,value=null){
-	if(this.element){
-		if(value){
-			setNodeText(this.element,key,value);
+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 {
+			var output = getNodeText(this.element, key);
+			return (output);
 		}
 	}
-	else{
-		if(!value){
-			return("");
+	else {
+		if (!value) {
+			return ("");
 		}
 	}
 }
 
-function _block_info(key,value=null){
-	if(this.element){
+function _block_info(key, value = null) {
+	if (this.element) {
 		let xmlParInfo = this.element.getElementsByTagName("info")[0];
-		if(value){
-			setNodeText(xmlParInfo,key,value);
+		if (value) {
+			setNodeText(xmlParInfo, key, value);
 		}
-		else{
-			var output = getNodeText(xmlParInfo,key);
-			return(output);
+		else {
+			var output = getNodeText(xmlParInfo, key);
+			return (output);
 		}
 	}
-	else{
-		if(!value){
-			return("");
+	else {
+		if (!value) {
+			return ("");
 		}
-	}	
+	}
 }
 
 /*
@@ -472,127 +476,127 @@ doc_tran("guid").sen(1).begin()  .end() .text()
 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++){
+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");
+			if (search_parent) {
+				blockId = getNodeText(xmlParInfo, "parent");
 			}
-			else{
-				blockId = getNodeText(xmlParInfo,"id");
+			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;
+
+			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 (blockObj);
 			}
 		}
 	}
-	return(null);
-	
+	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.info("parent").length>0){
+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.info("parent").length > 0) {
 							blockId = this.info("parent");
 						}
-						else{
+						else {
 							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();
+						if (doc_info.sendmsg) {
+							let d = new Date();
 							let msg_doc_id;
-							if(doc_info.parent_id!=""){
-								msg_doc_id=doc_info.parent_id;
+							if (doc_info.parent_id != "") {
+								msg_doc_id = doc_info.parent_id;
 							}
-							else{
-								msg_doc_id=doc_info.doc_id;
+							else {
+								msg_doc_id = doc_info.doc_id;
 							}
 							let objMsg = new Object();
-							objMsg.id=blockId;
-							objMsg.begin=aBegin;
+							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);
+
+							msg_push(2, JSON.stringify(objMsg), msg_doc_id, d.getTime(), book, para);
 						}
 					}
 				}
-				else{
-					var output = getNodeText(xSen[iSen],key);
-					return(output);
+				else {
+					var output = getNodeText(xSen[iSen], key);
+					return (output);
 				}
 			}
-		}		
+		}
 	}
-	else{
-		if(!value){
-			return("");
+	else {
+		if (!value) {
+			return ("");
 		}
 	}
 }
 
-function _doc_tran_sent_list(){
-	if(this._data){
-		xSen=this._data.getElementsByTagName("sen");
+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++){
+		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");
+			objSent.begin = getNodeText(xSen[iSen], "begin");
+			objSent.end = getNodeText(xSen[iSen], "end");
+			objSent.text = getNodeText(xSen[iSen], "text");
 			output.push(objSent);
 		}
-		return(output);
+		return (output);
 	}
-	else{
-		return(null);
+	else {
+		return (null);
 	}
 }
 
-function _doc_tran_info(key,value=null){
-	if(this._info){
-		if(value){
-			setNodeText(this._info,key,value);
+function _doc_tran_info(key, value = null) {
+	if (this._info) {
+		if (value) {
+			setNodeText(this._info, key, value);
 		}
-		else{
-			var output = getNodeText(this._info,key);
-			return(output);
+		else {
+			var output = getNodeText(this._info, key);
+			return (output);
 		}
 	}
-	else{
-		if(!value){
-			return("");
+	else {
+		if (!value) {
+			return ("");
 		}
 	}
 }
@@ -600,39 +604,39 @@ function _doc_tran_info(key,value=null){
 
 
 //工程文件数据解析
-function projectDataParse(xmlBookData){
+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];
+	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;
+	else {
+		gXmlBookDataMsg = null;
 	}
 	//解析消息队列
-	if(gXmlBookDataMsg){
-		var msgElements=gXmlBookDataMsg.getElementsByTagName("msg");
-		for(var iMsg=0;iMsg<msgElements.length;iMsg++){
+	if (gXmlBookDataMsg) {
+		var msgElements = gXmlBookDataMsg.getElementsByTagName("msg");
+		for (var iMsg = 0; iMsg < msgElements.length; iMsg++) {
 			var objMsg = new Object();
-				objMsg.id=getNodeText(msgElements[iMsg],"id");
-				objMsg.sender=getNodeText(msgElements[iMsg],"sender");
-				objMsg.type=getNodeText(msgElements[iMsg],"type");
-				objMsg.docid=getNodeText(msgElements[iMsg],"docid");
-				objMsg.time=getNodeText(msgElements[iMsg],"time");
-				objMsg.read=getNodeText(msgElements[iMsg],"read");
-				strData=getNodeText(msgElements[iMsg],"data");
-			try{
-				objMsg.data=JSON.parse(strData);
+			objMsg.id = getNodeText(msgElements[iMsg], "id");
+			objMsg.sender = getNodeText(msgElements[iMsg], "sender");
+			objMsg.type = getNodeText(msgElements[iMsg], "type");
+			objMsg.docid = getNodeText(msgElements[iMsg], "docid");
+			objMsg.time = getNodeText(msgElements[iMsg], "time");
+			objMsg.read = getNodeText(msgElements[iMsg], "read");
+			strData = getNodeText(msgElements[iMsg], "data");
+			try {
+				objMsg.data = JSON.parse(strData);
 				gDocMsgList.push(objMsg);//添加到消息列表数组
 			}
-			catch(e){
+			catch (e) {
 			}
 		}
 	}
-	
-	
+
+
 	com_XmlAllWordRefresh();
 	//更新工程资源列表
 	editor_project_updataProjectInfo();

+ 415 - 413
app/studio/js/message.js

@@ -1,193 +1,193 @@
 var arrMsgBuffer = new Array();
-var msgTime=1000;
+var msgTime = 1000;
 var msg_timer;
-var iMsgLastUpdateId=0;
-var strMsgDocList="";
+var iMsgLastUpdateId = 0;
+var strMsgDocList = "";
 var msg_curr_show_content_id = "";
 var msg_curr_show_content_type = "";
-var msg_my_id="sys_message";
+var msg_my_id = "sys_message";
 /*
 初始化消息模块
 msgInitId:上次消息的最大id
 */
-function msg_init(msgInitId,time=3){
-	iMsgLastUpdateId=msgInitId;
-	msgTime=time*1000;
+function msg_init(msgInitId, time = 3) {
+	iMsgLastUpdateId = msgInitId;
+	msgTime = time * 1000;
 }
 
-function msg_start(){
+function msg_start() {
 	msg_send();
 }
-function msg_stop(){
+function msg_stop() {
 	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
+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);
+	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);
+	msg_show_content(msg_curr_show_content_type, msg_curr_show_content_id);
 }
-function msg_reload(){
-iMsgLastUpdateId=1;
+function msg_reload() {
+	iMsgLastUpdateId = 1;
 }
-function msg_send(){
+function msg_send() {
 	$("#net_up").html("▲");
-	if(arrMsgBuffer.length>0){
-		var operation="send";
+	if (arrMsgBuffer.length > 0) {
+		var operation = "send";
 	}
-	else{
-		var operation="get";
+	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){
+		{
+			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) {
 				alert("error:can not load Project. xml obj is null.");
 				return;
-		}
-		let arrMsg = msgXml.getElementsByTagName("msg");
-		var arrWordNewMsg=new Array();
-		
-		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);
-								}
+			}
+			let arrMsg = msgXml.getElementsByTagName("msg");
+			var arrWordNewMsg = new Array();
+
+			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;
-							case 2:
-							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));
 						}
-						gXmlBookDataMsg.appendChild(arrMsg[x].cloneNode(true));
-					}
-				break;
+						break;
+				}
 			}
-		}
 
-		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(" ");
+			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)
+	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){
+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);
+	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);
+			return (oldStatus);
 		}
-		else{
-			return(msg_obj.read);
+		else {
+			return (msg_obj.read);
 
 		}
 	}
@@ -195,424 +195,426 @@ function msg_read(msg_obj,status=null){
 }
 
 //将消息数据应用(apply)到文档
-function msg_apply_data(obj){
+function msg_apply_data(obj) {
+	if (obj.sender == getCookie("username")) {
+		//忽略自己的消息
+		return;
+	}
 	doc_info.sendmsg = false;//不发送消息
-	try{
-		switch(obj.type){
+	try {
+		switch (obj.type) {
 			case "1"://逐词译
-				let wIndex=getWordIndex(obj.data.id)
-				if(wIndex>=0){
+				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=editor_word_status(xWord);
-					let wordBodyChange=false;
-					let wordHeadChange=false;
-					let wordNoteChange=false;
-					let wordRelationChange=false;
+					let xWord = xAllWord[wIndex];
+					let sReal = getNodeText(xWord, "real");
+					let wordStatus = getNodeText(xWord, "status");
+					wordStatus++;
+					wordStatus--;
+					let wordBodyChange = false;
+					let wordHeadChange = false;
+					let wordNoteChange = false;
+					let wordRelationChange = false;
 					let newWord = new Object();
 					newWord.real = sReal;
-					newWord.vaild=false;
-					if((wordStatus!=7 && wordStatus!=5) || obj.sender==getCookie("username"))
-					{
-						msg_read(obj,2);
-						if(obj.data.real!=null && obj.data.real!=""){
+					newWord.vaild = 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){
+						}
+						if (obj.data.pali != null) {
 							//setNodeText(xWord,"pali",obj.data.pali);
 							//wordHeadChange=true;
 						}
-						if(obj.data.mean!=null){
-							setNodeText(xWord,"mean",obj.data.mean);
+						if (obj.data.mean != null) {
+							setNodeText(xWord, "mean", obj.data.mean);
 							newWord.mean = obj.data.mean;
-							newWord.vaild=true;
-							wordBodyChange=true;
+							newWord.vaild = true;
+							wordBodyChange = true;
 						}
-						if(obj.data.org!=null){
-							setNodeText(xWord,"org",obj.data.org);
+						if (obj.data.org != null) {
+							setNodeText(xWord, "org", obj.data.org);
 							newWord.parts = obj.data.org;
-							newWord.vaild=true;
-							wordBodyChange=true;
+							newWord.vaild = true;
+							wordBodyChange = true;
 						}
-						if(obj.data.om!=null){
-							setNodeText(xWord,"om",obj.data.om);
+						if (obj.data.om != null) {
+							setNodeText(xWord, "om", obj.data.om);
 							newWord.partmean = obj.data.om;
-							newWord.vaild=true;
-							wordBodyChange=true;
+							newWord.vaild = true;
+							wordBodyChange = true;
 						}
-						if(obj.data.case!=null){
-							setNodeText(xWord,"case",obj.data.case);
+						if (obj.data.case != null) {
+							setNodeText(xWord, "case", obj.data.case);
 							newWord.case = obj.data.case;
-							newWord.vaild=true;
-							wordBodyChange=true;
+							newWord.vaild = true;
+							wordBodyChange = true;
 						}
-						if(obj.data.parent!=null){
-							setNodeText(xWord,"parent",obj.data.parent);
+						if (obj.data.parent != null) {
+							setNodeText(xWord, "parent", obj.data.parent);
 						}
-						if(obj.data.note!=null){
-							setNodeText(xWord,"note",obj.data.note);
-							wordNoteChange=true;
+						if (obj.data.note != null) {
+							setNodeText(xWord, "note", obj.data.note);
+							wordNoteChange = true;
 						}
-						if(obj.data.rela!=null){
+						if (obj.data.rela != null) {
 							//setNodeText(xWord,"rela",decodeURI(obj.data.rela));
-							setNodeText(xWord,"rela",obj.data.rela);
-							wordRelationChange=true;
+							setNodeText(xWord, "rela", obj.data.rela);
+							wordRelationChange = true;
 						}
-						if(obj.data.bmc!=null){
-							setNodeText(xWord,"bmc",obj.data.bmc);
-							wordBodyChange=true;
+						if (obj.data.bmc != null) {
+							setNodeText(xWord, "bmc", obj.data.bmc);
+							wordBodyChange = true;
 						}
-						if(obj.data.bmt!=null){
-							setNodeText(xWord,"bmt",obj.data.bmt);
+						if (obj.data.bmt != null) {
+							setNodeText(xWord, "bmt", obj.data.bmt);
 						}
-						if(obj.data.lock!=null){
-							setNodeText(xWord,"lock",obj.data.lock);
-							wordBodyChange=true;
+						if (obj.data.lock != null) {
+							setNodeText(xWord, "lock", obj.data.lock);
+							wordBodyChange = true;
 						}
-						editor_word_status(xAllWord[wIndex],6);
+						setNodeText(xWord, "status", 6);
 					}
-					if(wordHeadChange){
+					if (wordHeadChange) {
 						updataWordHeadByIndex(wIndex);
 					}
-					if(wordBodyChange){
+					if (wordBodyChange) {
 						modifyWordDetailByWordIndex(wIndex);
 					}
-					if(wordNoteChange ||wordRelationChange){
+					if (wordNoteChange || wordRelationChange) {
 						//updateWordNote(xWord);
 						refreshWordNoteDiv(xWord.parentNode.parentNode);
 					}
 
-					
-					if(newWord.vaild){
-						if(!mDict[sReal]){
+					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 ){
+						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){
+						if (!isExsit) {
 							mDict[sReal].push(newWord);
 						}
 					}
 				}
-			break;
+				break;
 			case "2"://译文
-				let tranBlock = doc_tran("#"+obj.data.id);
-				if(tranBlock==null){
-					tranBlock = doc_tran("#"+obj.data.id,true);
+				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);//设置为自动采纳
+				if (tranBlock) {
+					if (tranBlock.text(obj.data.begin, obj.data.end, "status") != 7) {
+						msg_read(obj, 2);//设置为自动采纳
 						console.log("句子 自动采纳");
-						tranBlock.text(obj.data.begin,obj.data.end,"text",obj.data.text);
-						tranBlock.text(obj.data.begin,obj.data.end,"status",5);
-						sen_save(obj.data.id,obj.data.begin,obj.data.end,obj.data.text);
-					}					
+						tranBlock.text(obj.data.begin, obj.data.end, "text", obj.data.text);
+						tranBlock.text(obj.data.begin, obj.data.end, "status", 5);
+						sen_save(obj.data.id, obj.data.begin, obj.data.end, obj.data.text);
+					}
 				}
 
-			break;
+				break;
 		}
 	}
-	catch(e){
+	catch (e) {
 		console.error(e.message);
 		console.error(e.stack);
 	}
-	doc_info.sendmsg=true;//发送消息
-	
-	if(obj.read>0){
-		return(true);
+	doc_info.sendmsg = true;//发送消息
+
+	if (obj.read > 0) {
+		return (true);
 	}
-	else{
-		return(false);
+	else {
+		return (false);
 	}
-	
+
 
 }
 
-function msg_word_msg_num(wid){
-	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){
+function msg_word_msg_num(wid) {
+	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);
+	return (iMsg);
 }
 
-function msg_set_tool_bar_msg_counter(){
-	var iMsg=0;
-	for(var i=0;i<gDocMsgList.length;i++){
-		if(gDocMsgList[i].read==0){
+function msg_set_tool_bar_msg_counter() {
+	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();
+	if (iMsg == 0) {
+		$("#icon_notify_" + msg_my_id).html("");
+		$("#icon_notify_" + msg_my_id).hide();
 	}
-	else{
-		if(iMsg>100){
+	else {
+		if (iMsg > 100) {
 			iMsg = "+99";
 		}
-		$("#icon_notify_"+msg_my_id).html(iMsg.toString());
-		$("#icon_notify_"+msg_my_id).show();		
+		$("#icon_notify_" + msg_my_id).html(iMsg.toString());
+		$("#icon_notify_" + msg_my_id).show();
 	}
 }
 
 //显示消息内容
-function msg_show_content(type,id){
-	if(type=="" || id==""){
+function msg_show_content(type, id) {
+	if (type == "" || id == "") {
 		return;
 	}
 	let arrid;
-	let sen_begin,sen_end;
-	if(type==2){
-		arrid = id.split("-"); 
-		id=arrid[0];
-		sen_begin=arrid[1];
-		sen_end=arrid[2];
+	let sen_begin, sen_end;
+	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){
+	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;
+				if (gDocMsgList[i].type == type && gDocMsgList[i].data.id == id) {
+					isFound = true;
 				}
-			break;
+				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;
+				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;
+				break;
 		}
-		if(isFound){
+		if (isFound) {
 			iMsg++;
-			if(gDocMsgList[i].read==0){
+			if (gDocMsgList[i].read == 0) {
 				//如果未读,设置为已读
-				msg_read(gDocMsgList[i],1);
+				msg_read(gDocMsgList[i], 1);
 			}
-			
+
 			//三分钟之内的消息只显示一个时间标记
-			if(gDocMsgList[i].time-iLastTime>60*3){
+			if (gDocMsgList[i].time - iLastTime > 60 * 3) {
 				var d = new Date()
-				d.setTime(gDocMsgList[i].time*1000);
+				d.setTime(gDocMsgList[i].time * 1000);
 				//var Local_date=d.toLocaleDateString().split("/");
-				var Local_time=d.toLocaleTimeString();
+				var Local_time = d.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);
+				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()
+				else {
+					var Local_time_string = d.toLocaleTimeString()
 				}
-				outHtml+= "<div class='msgbox_time'><span>"+d.toLocaleDateString()+" "+Local_time_string+"</span></div>";//d.toLocaleeString()
+				outHtml += "<div class='msgbox_time'><span>" + d.toLocaleDateString() + " " + Local_time_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>";
+			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>";				
+			else {
+				outHtml += "<div class='msgbox_r'>";
+				outHtml += "<div class='head'><span>" + gDocMsgList[i].sender + "</span><span>Apply</span></div>";
 			}
-			
-			switch(parseInt(type) ){
+
+			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.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.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.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.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.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.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.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.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>";
 					}
-					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;
+					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){
+			switch (gDocMsgList[i].read) {
 				case 1:
-				break;
+					break;
 				case 2:
-					outHtml+= "<div>已经自动采纳</div>";
-				break;
+					outHtml += "<div>已经自动采纳</div>";
+					break;
 				case 3:
-					outHtml+= "<div>已被采纳</div>";
-				break;
-			}			
-			outHtml+= "</div></div>";
+					outHtml += "<div>已被采纳</div>";
+					break;
+			}
+			outHtml += "</div></div>";
 		}
 	}
-	
+
 	$("#msg_panal_content").html(outHtml);
 
-	switch(type){
+	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>";
+			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;
+			break;
 		case 2:
-		break;
+			break;
 	}
-	
+
 	msg_set_tool_bar_msg_counter();
 }
 
 //刷新消息列表
-function msg_update_msg_list(){
-	let strHtml="";
-	let msgList= new Array();
-	
-	for(var i=0;i<gDocMsgList.length;i++){
-		switch(gDocMsgList[i].type){
+function msg_update_msg_list() {
+	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){
+				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].newTime = gDocMsgList[i].time;
 					msgList[iFind].sender = gDocMsgList[i].sender;
 				}
 				//没找到
-				else{
-					objMsg=new Object();
-					objMsg.id=gDocMsgList[i].data.id;
-					objMsg.type=gDocMsgList[i].type;
-					if(gDocMsgList[i].read==0){
-						objMsg.unread=1;
+				else {
+					objMsg = new Object();
+					objMsg.id = gDocMsgList[i].data.id;
+					objMsg.type = gDocMsgList[i].type;
+					if (gDocMsgList[i].read == 0) {
+						objMsg.unread = 1;
 					}
-					else{
-						objMsg.unread=0;
+					else {
+						objMsg.unread = 0;
 					}
-					objMsg.counter=1;
-					objMsg.newTime=gDocMsgList[i].time;
+					objMsg.counter = 1;
+					objMsg.newTime = gDocMsgList[i].time;
 					objMsg.sender = gDocMsgList[i].sender;
 					msgList.push(objMsg);
 				}
-			break;
+				break;
 		}
-	}	
-	strHtml+="<ul class='msg_list'>";
-	
+	}
+	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'>"+msgList[i].unread+"</span>";
+	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'>" + 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>" + d.toLocaleString() + "</span>";
+						break;
+					case 2:
+						strHtml += "<a onclick=\"msg_show_msg_content('2','" + msgList[i].id + "')\">" + msgList[i].id + "</a></span>";
+						strHtml += "<span>" + d.toLocaleString() + "</span>";
+						break;
 				}
-				strHtml+="<a href='#w"+msgList[i].id+"'>[«]</a>";
-				strHtml+="<a onclick=\"msg_show_msg_content('1','"+msgList[i].id+"')\">"+wordSpell+"</a></span>";
-				strHtml+="<span>"+d.toLocaleString()+"</span>";
-				break;
-				case 2:
-				strHtml+="<a onclick=\"msg_show_msg_content('2','"+msgList[i].id+"')\">"+msgList[i].id+"</a></span>";
-				strHtml+="<span>"+d.toLocaleString()+"</span>";
-				break;
+				strHtml += "</li>";
 			}
-			strHtml+="</li>";
 		}
 	}
-	}
-	strHtml+="</ul>";
-	
+	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);
+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);
+	return (-1);
 }
 
-function sortNumber(a, b)
-{
-return b.newTime-a.newTime;
+function sortNumber(a, b) {
+	return b.newTime - a.newTime;
 }

+ 3 - 3
app/studio/setting.php

@@ -360,10 +360,10 @@ $album_power["2"]="编辑";
 		case "account":
 			echo "<h2>Accont</h2>";
 			echo "User Name:$username<br />";
-			echo "Nick Name:$nickname<br />";
-			echo "User ID:$userid<br />";
+			echo "Nick Name:<>$nickname<br />";
 			echo "Email:$email<br />";
-			echo "<a href='login.php?op=logout'>Logout</a>";
+			echo "<a href='login.php?op=logout'>Logout</a><br>";
+			echo "<a href='../ucenter/pwd_set.php'>修改密码</a>";
 			break;
 		case "album":
 			$db_file = _FILE_DB_RESRES_INDEX_;

+ 3 - 3
app/term/note.php

@@ -24,8 +24,8 @@ $bookId=$arrSent[0];
 $para=$arrSent[1];
 $begin=$arrSent[2];
 $end=$arrSent[3];
-$db_file = _DIR_PALICANON_TEMPLET_."/p".$bookId."_tpl.db3";		
-			
+$db_file = _DIR_PALICANON_TEMPLET_."/p".$bookId."_tpl.db3";	
+
 PDO_Connect("sqlite:$db_file");
 $query="SELECT * FROM 'main' WHERE (\"paragraph\" = ".$PDO->quote($para)." ) ";
 $sth = $PDO->prepare($query);
@@ -56,7 +56,7 @@ $tran="";
 $db_file=_FILE_DB_SENTENCE_;
 try{
 	PDO_Connect("sqlite:$db_file");
-	$query="select * from sentence where book='{$bookId}' and paragraph='{$para}' and begin='{$begin}' and end='{$end}' order by modify_time DESC ";
+	$query="SELECT * FROM sentence WHERE book='{$bookId}' AND paragraph='{$para}' AND begin='{$begin}' AND end='{$end}'  AND text <> '' order by modify_time DESC limit 0 ,1 ";
 	$Fetch = PDO_FetchAll($query);
 	$iFetch=count($Fetch);
 	if($iFetch>0){

+ 30 - 4
app/ucenter/index.php

@@ -16,6 +16,9 @@ require_once "../public/function.php";
 	switch($op){
 		case "login":
 		{
+			if(isset($_GET["url"])){
+				$goto_url = $_GET["url"];
+			}
 			break;
 		}
 		case "logout":
@@ -109,7 +112,7 @@ require_once "../public/function.php";
 			else if(isset($_POST["password"])){
 				$md5_password=md5($_POST["password"]);
 				PDO_Connect("sqlite:"._FILE_DB_USERINFO_);
-				$query = "select * from user where \"username\"=".$PDO->quote($_POST["username"])." and \"password\"=".$PDO->quote($md5_password);
+				$query = "select * from user where (\"username\"=".$PDO->quote($_POST["username"])." or \"email\"=".$PDO->quote($_POST["username"])." ) and \"password\"=".$PDO->quote($md5_password);
 				$Fetch = PDO_FetchAll($query);
 				$iFetch=count($Fetch);
 				if($iFetch>0){//username is exite
@@ -123,19 +126,36 @@ require_once "../public/function.php";
 					setcookie("userid", $userid, time()+60*60*24*365,"/");
 					setcookie("nickname", $nickname, time()+60*60*24*365,"/");
 					setcookie("email", $email, time()+60*60*24*365,"/");
-	
+					if(isset($_POST["url"])){
+						$goto_url = $_POST["url"];
+					}
+					if(isset($_COOKIE["url"])){
+						setcookie("pwd_set", "on", time()+60,"/");
+					}
 					$newUserPath=_DIR_USER_BASE_.'/'.$userid.'/';
 					if(!file_exists($newUserPath)){
 						echo "error:cannot find user dir:$newUserPath<br/>";
 					}
-?><!DOCTYPE html>
+?>
+
+<!DOCTYPE html>
 <html>
 	<head>
+
 		<title>wikipali starting</title>
-		<meta http-equiv="refresh" content="0,../studio/index.php"/>
+		<?php
+		if(isset($goto_url)){
+			$goto = $goto_url;
+		}
+		else{
+			$goto = "../studio/index.php";
+		}
+		?>
+		<meta http-equiv="refresh" content="0,<?php echo $goto;?>"/>
 	</head>
 	
 	<body>
+	
 		<br>
 		<br>
 		<p align="center"><a href="../studio/index.php">Auto Redirecting to Homepage! IF NOT WORKING, CLICK HERE</a></p>
@@ -428,6 +448,12 @@ require_once "../public/function.php";
 			<form action="index.php" method="post">
 				<div>
 				<?php
+				if(isset($goto_url)){
+					echo "<input type=\"hidden\" name=\"url\" value=\"{$goto_url}\"  />";
+				}
+				else if(isset($_POST["url"])){
+					echo "<input type=\"hidden\" name=\"url\" value=\"{$_POST["url"]}\"  />";
+				}
 				if(isset($_POST["username"]) && $_username_ok==true){
 					echo "<span id='tip_password' class='form_field_name'>".$_local->gui->password."</span>";
 					echo '<input type="password" name="password" />';

+ 59 - 0
app/ucenter/pwd_set.php

@@ -0,0 +1,59 @@
+<?php 
+require_once '../path.php';
+require_once "../public/load_lang.php";
+
+if(!isset($_COOKIE["userid"])){
+    echo "尚未登陆<a href='index.php'>登陆</a>";
+}
+else{
+    if(isset($_POST["pwd_set"]) ){
+        if($_POST["password"]==$_POST["repassword"]){
+            $md5_password=md5($_POST["password"]);
+            $PDO = new PDO("sqlite:"._FILE_DB_USERINFO_, "", "");
+            $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
+            $query = "UPDATE user SET password = ? WHERE userid = ? ";
+            $stmt = $PDO->prepare($query);
+            $stmt->execute(array($md5_password,$_COOKIE["userid"]));
+            if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
+                $error = $PDO->errorInfo();;
+                echo "修改密码失败。错误信息:$error";
+            }
+            else{
+                echo "修改密码成功";
+            }	            
+        }
+        else{
+            echo "两次输入的密码不同。";
+        }
+
+    }
+    else{
+     if(isset($_COOKIE["pwd_set"])){
+        if($_COOKIE["pwd_set"]="on"){
+            echo "<h2>wikipali.org</h2>";
+            echo "<h2>重新设置密码</h2>";
+            ?>
+			<form action="pwd_set.php" method="post">
+                <div>
+                    <span id='tip_password' class='form_field_name'><?php echo $_local->gui->password;?></span>
+                    <input type="password" name="password"  value="" /><br>
+                    <input type="password" name="repassword"  value="" />
+                    <input type="hidden" name="pwd_set"  value="on" />
+				</div>
+                <div id="button_area">
+                    <input type="submit" value="<?php echo $_local->gui->continue;?>" style="background-color: var(--link-hover-color);border-color: var(--link-hover-color);" />
+                </div>
+			</form>
+            <?php
+        }
+    }
+    else{
+        setcookie("url", "pwd_set.php", time()+120,"/");
+        echo "为了验证是您本人的操作,请先登陆。<a href='index.php?op=login&url=pwd_set.php'>登陆</a>";
+    }       
+    }
+
+}
+
+
+?>