| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618 |
- var arrMsgBuffer = new Array();
- var msgTime=1000;
- var msg_timer;
- var iMsgLastUpdateId=0;
- var strMsgDocList="";
- var msg_curr_show_content_id = "";
- var msg_curr_show_content_type = "";
- var msg_my_id="sys_message";
- /*
- 初始化消息模块
- msgInitId:上次消息的最大id
- */
- function msg_init(msgInitId,time=3){
- iMsgLastUpdateId=msgInitId;
- msgTime=time*1000;
- }
- function msg_start(){
- msg_send();
- }
- 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
- };
- 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;
- }
- 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){
- 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);
- }
- break;
- case 2:
- break;
- }
- gXmlBookDataMsg.appendChild(arrMsg[x].cloneNode(true));
- }
- 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(" ");
- });
-
- $("#net_up").html(" ");
- $("#net_down").html("▼");
-
- arrMsgBuffer = new Array();
- msg_timer=setTimeout("msg_send()",msgTime)
- }
- function msg_new_msg_id_push(){
- }
- 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);
- }
- }
- }
- //将消息数据应用(apply)到文档
- function msg_apply_data(obj){
- 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=editor_word_status(xWord);
- 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!=""){
- //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;
- }
- if(obj.data.org!=null){
- setNodeText(xWord,"org",obj.data.org);
- newWord.parts = obj.data.org;
- newWord.vaild=true;
- wordBodyChange=true;
- }
- if(obj.data.om!=null){
- setNodeText(xWord,"om",obj.data.om);
- newWord.partmean = obj.data.om;
- newWord.vaild=true;
- wordBodyChange=true;
- }
- if(obj.data.case!=null){
- setNodeText(xWord,"case",obj.data.case);
- newWord.case = obj.data.case;
- newWord.vaild=true;
- wordBodyChange=true;
- }
- 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.rela!=null){
- //setNodeText(xWord,"rela",decodeURI(obj.data.rela));
- setNodeText(xWord,"rela",obj.data.rela);
- wordRelationChange=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.lock!=null){
- setNodeText(xWord,"lock",obj.data.lock);
- wordBodyChange=true;
- }
- editor_word_status(xAllWord[wIndex],6);
- }
- 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(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);
- }
- }
- 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){
- 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(){
- 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 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];
- }
- 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 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);
- }
- else{
- var Local_time_string=d.toLocaleTimeString()
- }
- 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>";
- }
- 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(){
- 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.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'>"+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+="</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);
- }
- function sortNumber(a, b)
- {
- return b.newTime-a.newTime;
- }
|