message.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722
  1. var arrMsgBuffer = new Array();
  2. var msgTime = 1000;
  3. var msg_timer;
  4. var iMsgLastUpdateId = 0;
  5. var strMsgDocList = "";
  6. var msg_curr_show_content_id = "";
  7. var msg_curr_show_content_type = "";
  8. var msg_my_id = "sys_message";
  9. /*
  10. 初始化消息模块
  11. msgInitId:上次消息的最大id
  12. */
  13. function msg_init(msgInitId, time = 3) {
  14. iMsgLastUpdateId = msgInitId;
  15. msgTime = time * 1000;
  16. }
  17. function msg_start() {
  18. msg_send();
  19. }
  20. function msg_stop() {
  21. clearTimeout(msg_timer)
  22. }
  23. function msg_push(type, data, docid, time, book = 0, paragraph = 0) {
  24. /*
  25. data.type
  26. data.data
  27. data.doc
  28. */
  29. var newMessage = {
  30. type: type,
  31. data: data,
  32. docid: docid,
  33. time: time,
  34. book: book,
  35. para: paragraph
  36. };
  37. arrMsgBuffer.push(newMessage);
  38. var obj = new Object();
  39. obj.id = 0;
  40. obj.sender = getCookie("username");
  41. obj.type = newMessage.type;
  42. obj.docid = newMessage.docid;
  43. obj.time = newMessage.time / 5000;
  44. obj.read = 1;
  45. obj.data = JSON.parse(newMessage.data);
  46. //doc_msg_push(obj);
  47. msg_show_content(msg_curr_show_content_type, msg_curr_show_content_id);
  48. }
  49. function msg_reload() {
  50. iMsgLastUpdateId = 1;
  51. }
  52. function msg_send() {
  53. $("#net_up").html("▲");
  54. if (arrMsgBuffer.length > 0) {
  55. var operation = "send";
  56. }
  57. else {
  58. var operation = "get";
  59. }
  60. $.post("message.php",
  61. {
  62. op: operation,
  63. lastid: iMsgLastUpdateId,
  64. doclist: strMsgDocList,
  65. data: JSON.stringify(arrMsgBuffer)
  66. },
  67. function (data, status) {
  68. let xmlText = data;
  69. console.log("receive mseeage:" + data);
  70. let msgXml;
  71. if (window.DOMParser) {
  72. parser = new DOMParser();
  73. msgXml = parser.parseFromString(xmlText, "text/xml");
  74. }
  75. else { // Internet Explorer
  76. msgXml = new ActiveXObject("Microsoft.XMLDOM");
  77. msgXml.async = "false";
  78. msgXml.loadXML(xmlText);
  79. }
  80. if (msgXml == null) {
  81. console.error("error:can not load Project. xml obj is null.");
  82. return;
  83. }
  84. let arrMsg = msgXml.getElementsByTagName("msg");
  85. var arrWordNewMsg = new Array();
  86. //开始一个事务,关闭自动提交
  87. doc_beginTransaction();
  88. for (var x = 0; x < arrMsg.length; x++) {
  89. switch (getNodeText(arrMsg[x], "type")) {
  90. case "maxid":
  91. iMsgLastUpdateId = getNodeText(arrMsg[x], "data");
  92. doc_head("msg_db_max_id", iMsgLastUpdateId);
  93. console.log("iMsgLastUpdateId:" + iMsgLastUpdateId);
  94. break;
  95. default:
  96. //if (gXmlBookDataMsg)
  97. {
  98. var obj = new Object();
  99. obj.id = getNodeText(arrMsg[x], "id");
  100. obj.sender = getNodeText(arrMsg[x], "sender");
  101. obj.type = getNodeText(arrMsg[x], "type");
  102. obj.docid = getNodeText(arrMsg[x], "docid");
  103. obj.time = getNodeText(arrMsg[x], "time");
  104. obj.read = getNodeText(arrMsg[x], "read");
  105. let objData = getNodeText(arrMsg[x], "data");
  106. try {
  107. obj.data = JSON.parse(objData);
  108. }
  109. catch (e) {
  110. obj.data = null;
  111. console.error("err:message.js-msg_send" + e + "data:" + objData);
  112. break;
  113. }
  114. //尝试用此消息更新文档数据
  115. if (msg_apply_data(obj)) {
  116. //如果已经使用此消息,xml标记为已读
  117. //setNodeText(arrMsg[x], "read", "2");
  118. }
  119. doc_msg_push(obj);
  120. msg_show_content(msg_curr_show_content_type, msg_curr_show_content_id);
  121. switch (obj.type) {
  122. case "1": //wbw
  123. var iFind = false;
  124. for (var iWordId = 0; iWordId < arrWordNewMsg.length; iWordId++) {
  125. if (arrWordNewMsg[iWordId] == obj.data.id) {
  126. iFind = true;
  127. break;
  128. }
  129. }
  130. if (!iFind) {
  131. arrWordNewMsg.push(obj.data.id);
  132. }
  133. break;
  134. case "2":
  135. break;
  136. }
  137. //gXmlBookDataMsg.appendChild(arrMsg[x].cloneNode(true));
  138. }
  139. break;
  140. }
  141. }
  142. //提交一个事务
  143. doc_commit();
  144. user_wbw_commit();
  145. for (let i = 0; i < arrWordNewMsg.length; i++) {
  146. updataWordHeadById(arrWordNewMsg[i]);
  147. }
  148. refreshNoteNumber();
  149. msg_set_tool_bar_msg_counter();
  150. msg_update_msg_list();
  151. $("#net_down").html(" ");
  152. });
  153. $("#net_up").html(" ");
  154. $("#net_down").html("▼");
  155. arrMsgBuffer = new Array();
  156. msg_timer = setTimeout("msg_send()", msgTime)
  157. }
  158. function msg_new_msg_id_push() {
  159. }
  160. function msg_stop() {
  161. }
  162. function msg_read(msg_obj, status = null) {
  163. if (msg_obj) {
  164. if (status) {
  165. var oldStatus = msg_obj.read;
  166. msg_obj.read = status;
  167. var xMsg = gXmlBookDataMsg.getElementsByTagName("msg");
  168. for (var i = 0; i < xMsg.length; i++) {
  169. if (getNodeText(xMsg[i], "id") == msg_obj.id) {
  170. setNodeText(xMsg[i], "read", status);
  171. break;
  172. }
  173. }
  174. return (oldStatus);
  175. }
  176. else {
  177. return (msg_obj.read);
  178. }
  179. }
  180. }
  181. //将消息数据应用(apply)到文档
  182. function msg_apply_data(obj) {
  183. if (obj.sender == getCookie("username")) {
  184. //忽略自己的消息
  185. msg_read(obj, 1);//设置为已读
  186. return (true);
  187. }
  188. doc_info.sendmsg = false;//不发送消息
  189. try {
  190. switch (obj.type) {
  191. case "1"://逐词译
  192. let wIndex = getWordIndex(obj.data.id)
  193. if (wIndex >= 0) {
  194. let xAllWord = gXmlBookDataBody.getElementsByTagName("word");
  195. let xWord = xAllWord[wIndex];
  196. let sReal = getNodeText(xWord, "real");
  197. let wordStatus = parseInt(getNodeText(xWord, "status"));
  198. let wordBodyChange = false;
  199. let wordHeadChange = false;
  200. let wordNoteChange = false;
  201. let wordRelationChange = false;
  202. let newWord = new Object();
  203. newWord.real = sReal;
  204. newWord.vaild = false;
  205. let wordChanged = false;
  206. if ((wordStatus != 7 && wordStatus != 5) && obj.sender != getCookie("username")) {
  207. msg_read(obj, 2);
  208. if (obj.data.real != null && obj.data.real != "") {
  209. //setNodeText(xWord,"real",obj.data.real);
  210. //newWord.real = obj.data.real;
  211. //wordHeadChange=true;
  212. }
  213. if (obj.data.pali != null) {
  214. //setNodeText(xWord,"pali",obj.data.pali);
  215. //wordHeadChange=true;
  216. }
  217. if (obj.data.mean != null) {
  218. setNodeText(xWord, "mean", obj.data.mean);
  219. newWord.mean = obj.data.mean;
  220. newWord.vaild = true;
  221. wordBodyChange = true;
  222. wordChanged = true;
  223. }
  224. if (obj.data.org != null) {
  225. setNodeText(xWord, "org", obj.data.org);
  226. newWord.parts = obj.data.org;
  227. newWord.vaild = true;
  228. wordBodyChange = true;
  229. wordChanged = true;
  230. }
  231. if (obj.data.om != null) {
  232. setNodeText(xWord, "om", obj.data.om);
  233. newWord.partmean = obj.data.om;
  234. newWord.vaild = true;
  235. wordBodyChange = true;
  236. wordChanged = true;
  237. }
  238. if (obj.data.case != null) {
  239. setNodeText(xWord, "case", obj.data.case);
  240. newWord.case = obj.data.case;
  241. newWord.vaild = true;
  242. wordBodyChange = true;
  243. wordChanged = true;
  244. }
  245. if (obj.data.parent != null) {
  246. setNodeText(xWord, "parent", obj.data.parent);
  247. wordChanged = true;
  248. }
  249. if (obj.data.note != null) {
  250. setNodeText(xWord, "note", obj.data.note);
  251. wordNoteChange = true;
  252. wordChanged = true;
  253. }
  254. if (obj.data.rela != null) {
  255. //setNodeText(xWord,"rela",decodeURI(obj.data.rela));
  256. setNodeText(xWord, "rela", obj.data.rela);
  257. wordRelationChange = true;
  258. wordChanged = true;
  259. }
  260. if (obj.data.bmc != null) {
  261. setNodeText(xWord, "bmc", obj.data.bmc);
  262. wordBodyChange = true;
  263. wordChanged = true;
  264. }
  265. if (obj.data.bmt != null) {
  266. setNodeText(xWord, "bmt", obj.data.bmt);
  267. wordChanged = true;
  268. }
  269. if (obj.data.lock != null) {
  270. setNodeText(xWord, "lock", obj.data.lock);
  271. wordBodyChange = true;
  272. wordChanged = true;
  273. }
  274. if (wordChanged) {
  275. setNodeText(xWord, "status", 6);
  276. //提交用户逐词解析数据库
  277. user_wbw_push_word(obj.data.id);
  278. }
  279. }
  280. if (wordHeadChange) {
  281. updataWordHeadByIndex(wIndex);
  282. }
  283. if (wordBodyChange) {
  284. modifyWordDetailByWordIndex(wIndex);
  285. }
  286. if (wordNoteChange || wordRelationChange) {
  287. //updateWordNote(xWord);
  288. refreshWordNoteDiv(xWord.parentNode.parentNode);
  289. }
  290. if (newWord.vaild) {
  291. if (!mDict[sReal]) {
  292. mDict[sReal] = new Array();
  293. }
  294. let isExsit = false;
  295. for (let x in mDict[sReal]) {
  296. if (mDict[sReal].mean && mDict[sReal].mean == newWord.mean &&
  297. mDict[sReal].parts && mDict[sReal].parts == newWord.parts &&
  298. mDict[sReal].partmean && mDict[sReal].mean == newWord.partmean &&
  299. mDict[sReal].case && mDict[sReal].case == newWord.case) {
  300. isExsit = true;
  301. }
  302. }
  303. if (!isExsit) {
  304. mDict[sReal].push(newWord);
  305. }
  306. }
  307. }
  308. break;
  309. case "2"://译文
  310. let tranBlock = doc_tran("#" + obj.data.id);
  311. if (tranBlock == null) {
  312. tranBlock = doc_tran("#" + obj.data.id, true);
  313. }
  314. if (tranBlock) {
  315. if (tranBlock.text(obj.data.begin, obj.data.end, "status") != 7) {
  316. msg_read(obj, 2);//设置为自动采纳
  317. console.log("句子 自动采纳");
  318. tranBlock.text(obj.data.begin, obj.data.end, "text", obj.data.text);
  319. tranBlock.text(obj.data.begin, obj.data.end, "status", 5);
  320. sen_save(tranBlock.info("id"), obj.data.begin, obj.data.end, obj.data.text);
  321. }
  322. }
  323. break;
  324. }
  325. }
  326. catch (e) {
  327. console.error(e.message);
  328. console.error(e.stack);
  329. }
  330. doc_info.sendmsg = true;//发送消息
  331. if (obj.read > 0) {
  332. return (true);
  333. }
  334. else {
  335. return (false);
  336. }
  337. }
  338. function msg_word_msg_num(wid) {
  339. if (gDocMsgList == null) {
  340. return;
  341. }
  342. var iMsg = 0;
  343. for (var i = 0; i < gDocMsgList.length; i++) {
  344. if (gDocMsgList[i].type == 1) {
  345. if (gDocMsgList[i].data.id == wid && gDocMsgList[i].read == 0) {
  346. iMsg++;
  347. }
  348. }
  349. }
  350. return (iMsg);
  351. }
  352. function msg_set_tool_bar_msg_counter() {
  353. if (gDocMsgList == null) {
  354. return;
  355. }
  356. var iMsg = 0;
  357. for (var i = 0; i < gDocMsgList.length; i++) {
  358. if (gDocMsgList[i].read == 0) {
  359. iMsg++;
  360. }
  361. }
  362. if (iMsg == 0) {
  363. $("#icon_notify_" + msg_my_id).html("");
  364. $("#icon_notify_" + msg_my_id).hide();
  365. }
  366. else {
  367. if (iMsg > 100) {
  368. iMsg = "+99";
  369. }
  370. $("#icon_notify_" + msg_my_id).html(iMsg.toString());
  371. $("#icon_notify_" + msg_my_id).show();
  372. }
  373. }
  374. function time_standardize(date) {
  375. var today_date = new Date();
  376. var Local_time = date.toLocaleTimeString();
  377. //將時間去掉秒的信息
  378. if (Local_time && Local_time.split(":").length == 3) {
  379. var Local_time_string = Local_time.split(":")[0] + ":" + Local_time.split(":")[1];
  380. Local_time_string += Local_time.split(":")[2].slice(2);
  381. }
  382. else {
  383. var Local_time_string = d.toLocaleTimeString()
  384. }
  385. if (date.toLocaleDateString() == today_date.toLocaleDateString()) {//如果是今天的消息,只显示时间
  386. return (Local_time_string);
  387. }
  388. else if (date.toLocaleDateString().slice(0, 5) == today_date.toLocaleDateString().slice(0, 5)) {//如果是今年但非今天的消息,只显示月日
  389. var date_length = date.toLocaleDateString().length;
  390. return (date.toLocaleDateString().slice(5, date_length));
  391. }
  392. else {//如果不是今年的消息,显示年月日
  393. return (date.toLocaleDateString());
  394. }
  395. }
  396. //显示消息内容
  397. function msg_show_content(type, id) {
  398. if (gDocMsgList == null) {
  399. return;
  400. }
  401. if (type == "" || id == "") {
  402. return;
  403. }
  404. let arrid;
  405. let sen_begin, sen_end;
  406. type = parseInt(type);
  407. if (type == 2) {
  408. arrid = id.split("#");
  409. id = arrid[0];
  410. sen_begin = arrid[1];
  411. sen_end = arrid[2];
  412. }
  413. msg_curr_show_content_id = id;
  414. msg_curr_show_content_type = type;
  415. var iMsg = 0;
  416. var outHtml = "";
  417. var iLastTime = 0;
  418. for (var i = 0; i < gDocMsgList.length; i++) {
  419. let isFound = false;
  420. switch (type) {
  421. case 1:
  422. if (gDocMsgList[i].type == type && gDocMsgList[i].data.id == id) {
  423. isFound = true;
  424. }
  425. break;
  426. case 2:
  427. if (gDocMsgList[i].type == type && gDocMsgList[i].data.id == id && gDocMsgList[i].data.begin == sen_begin && gDocMsgList[i].data.end == sen_end) {
  428. isFound = true;
  429. }
  430. break;
  431. }
  432. if (isFound) {
  433. iMsg++;
  434. if (gDocMsgList[i].read == 0) {
  435. //如果未读,设置为已读
  436. msg_read(gDocMsgList[i], 1);
  437. }
  438. //三分钟之内的消息只显示一个时间标记
  439. if (gDocMsgList[i].time - iLastTime > 60 * 3) {
  440. var d = new Date()
  441. d.setTime(gDocMsgList[i].time * 1000);
  442. //var Local_date=d.toLocaleDateString().split("/");
  443. var time_standardize_string = time_standardize(d);
  444. outHtml += "<div class='msgbox_time'><span>" + time_standardize_string + "</span></div>";//d.toLocaleeString()
  445. }
  446. iLastTime = gDocMsgList[i].time;
  447. var myName = getCookie("username");
  448. if (gDocMsgList[i].sender == myName) {
  449. outHtml += "<div class='msgbox_div'>";
  450. outHtml += "<div class='msgbox_s'>";
  451. outHtml += "<div class='head'><span>" + gDocMsgList[i].sender + "</span></div>";
  452. }
  453. else {
  454. outHtml += "<div class='msgbox_r'>";
  455. outHtml += "<div class='head'><span>" + gDocMsgList[i].sender + "</span><span>Apply</span></div>";
  456. }
  457. switch (parseInt(type)) {
  458. case 1:
  459. if (gDocMsgList[i].data.pali != null) {
  460. outHtml += "<div>spell:<a onclick=\"fieldListChanged('" + id + "','pali','" + gDocMsgList[i].data.pali + "')\">" + gDocMsgList[i].data.pali + "</a></div>";
  461. }
  462. if (gDocMsgList[i].data.real != null) {
  463. outHtml += "<div>real:<a onclick=\"fieldListChanged('" + id + "','real','" + gDocMsgList[i].data.real + "')\">" + gDocMsgList[i].data.real + "</a></div>";
  464. } if (gDocMsgList[i].data.mean != null) {
  465. outHtml += "<div>mean:<a onclick=\"fieldListChanged('" + id + "','mean','" + gDocMsgList[i].data.mean + "')\">" + gDocMsgList[i].data.mean + "</a></div>";
  466. }
  467. if (gDocMsgList[i].data.org != null) {
  468. outHtml += "<div>part:<a onclick=\"fieldListChanged('" + id + "','org','" + gDocMsgList[i].data.org + "')\">" + gDocMsgList[i].data.org + "</a></div>";
  469. }
  470. if (gDocMsgList[i].data.om != null) {
  471. outHtml += "<div>part mean:<a onclick=\"fieldListChanged('" + id + "','om','" + gDocMsgList[i].data.om + "')\">" + gDocMsgList[i].data.om + "</a></div>";
  472. }
  473. if (gDocMsgList[i].data.case != null) {
  474. outHtml += "<div>case:<a onclick=\"fieldListChanged('" + id + "','case','" + gDocMsgList[i].data.case + "')\">" + gDocMsgList[i].data.case + "</a></div>";
  475. }
  476. if (gDocMsgList[i].data.parent != null) {
  477. outHtml += "<div>base:<a onclick=\"fieldListChanged('" + id + "','parent','" + gDocMsgList[i].data.parent + "')\">" + gDocMsgList[i].data.parent + "</a></div>";
  478. }
  479. if (gDocMsgList[i].data.note != null) {
  480. outHtml += "<div>note:<a onclick=\"fieldListChanged('" + id + "','note','" + gDocMsgList[i].data.note + "')\">" + gDocMsgList[i].data.note + "</a></div>";
  481. }
  482. if (gDocMsgList[i].data.rela != null) {
  483. let strRelation = decodeURI(gDocMsgList[i].data.rela);
  484. outHtml += "<div>Relation:<a onclick=\"fieldListChanged('" + id + "','rela','" + strRelation + "')\">";
  485. outHtml += renderWordRelationByString("", strRelation, id);
  486. outHtml += "</a></div>";
  487. }
  488. if (gDocMsgList[i].data.lock != null) {
  489. outHtml += "<div>lock:<a onclick=\"fieldListChanged('" + id + "','lock','" + gDocMsgList[i].data.lock + "')\">" + gDocMsgList[i].data.lock + "</a></div>";
  490. }
  491. if (gDocMsgList[i].data.bmc != null) {
  492. outHtml += "<div>Bookmark:<a onclick=\"fieldListChanged('" + id + "','bmc','" + gDocMsgList[i].data.bmc + "')\">" + gDocMsgList[i].data.bmc + "</a></div>";
  493. }
  494. if (gDocMsgList[i].data.bmt != null) {
  495. outHtml += "<div>Bookmark:<a onclick=\"fieldListChanged('" + id + "','bmt','" + gDocMsgList[i].data.bmt + "')\">" + gDocMsgList[i].data.bmt + "</a></div>";
  496. }
  497. break;
  498. case 2:
  499. outHtml += "<div>sentence:<a onclick=\"setTranText('" + gDocMsgList[i].data.id + "','" + gDocMsgList[i].data.end + "','" + gDocMsgList[i].data.text + "')\">" + gDocMsgList[i].data.text + "</a></div>";
  500. break;
  501. }
  502. switch (gDocMsgList[i].read) {
  503. case 1:
  504. break;
  505. case 2:
  506. outHtml += "<div>已经自动采纳</div>";
  507. break;
  508. case 3:
  509. outHtml += "<div>已被采纳</div>";
  510. break;
  511. }
  512. outHtml += "</div></div>";
  513. }
  514. }
  515. $("#msg_panal_content").html(outHtml);
  516. switch (type) {
  517. case 1:
  518. updataWordHeadById(id);
  519. var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
  520. var wordSpell = getNodeText(xAllWord[getWordIndex(id)], "real");
  521. var wordId = getNodeText(xAllWord[getWordIndex(id)], "id");
  522. wordSpell = "<a href='#w" + wordId + "'>" + wordSpell + "</a>";
  523. $("#msg_content_title").html(wordSpell);
  524. break;
  525. case 2:
  526. break;
  527. }
  528. msg_set_tool_bar_msg_counter();
  529. }
  530. //刷新消息列表
  531. function msg_update_msg_list() {
  532. if (gDocMsgList == null) {
  533. return;
  534. }
  535. let strHtml = "";
  536. let msgList = new Array();
  537. for (var i = 0; i < gDocMsgList.length; i++) {
  538. switch (gDocMsgList[i].type) {
  539. case "2":
  540. case "1":
  541. var iFind = _msg_find_id_in_list(msgList, gDocMsgList[i].data.id);
  542. if (iFind >= 0) {
  543. if (gDocMsgList[i].read == 0) {
  544. msgList[iFind].unread++;
  545. }
  546. msgList[iFind].counter++;
  547. msgList[iFind].newTime = gDocMsgList[i].time;
  548. msgList[iFind].sender = gDocMsgList[i].sender;
  549. }
  550. //没找到
  551. else {
  552. objMsg = new Object();
  553. objMsg.id = gDocMsgList[i].data.id;
  554. objMsg.data = gDocMsgList[i].data;
  555. objMsg.type = gDocMsgList[i].type;
  556. if (gDocMsgList[i].read == 0) {
  557. objMsg.unread = 1;
  558. }
  559. else {
  560. objMsg.unread = 0;
  561. }
  562. objMsg.counter = 1;
  563. objMsg.newTime = gDocMsgList[i].time;
  564. objMsg.sender = gDocMsgList[i].sender;
  565. msgList.push(objMsg);
  566. }
  567. break;
  568. }
  569. }
  570. strHtml += "<ul class='msg_list'>";
  571. msgList.sort(sortNumber);
  572. for (var j = 0; j < 2; j++) {
  573. for (var i = 0; i < msgList.length; i++) {
  574. //先显示未读的 再显示已经读的
  575. var times;
  576. if (msgList[i].unread > 0) {
  577. times = 0;
  578. }
  579. else {
  580. times = 1;
  581. }
  582. if (times == j) {
  583. strHtml += "<li>";
  584. var d = new Date();
  585. d.setTime(msgList[i].newTime * 1000);
  586. switch (msgList[i].type) {
  587. case "1":
  588. var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
  589. var wIndex = getWordIndex(msgList[i].id);
  590. if (wIndex >= 0) {
  591. var wordSpell = getNodeText(xAllWord[getWordIndex(msgList[i].id)], "real");
  592. }
  593. else {
  594. var wordSpell = "unkow";
  595. }
  596. strHtml += "<span>";
  597. if (msgList[i].unread > 0) {
  598. strHtml += "<span class='word_msg' onclick=\"msg_show_msg_content('1','" + msgList[i].id + "')\">" + msgList[i].unread + "</span>";
  599. }
  600. strHtml += "<a href='#w" + msgList[i].id + "'>[«]</a>";
  601. strHtml += "<a onclick=\"msg_show_msg_content('1','" + msgList[i].id + "')\">" + wordSpell + "</a></span>";
  602. strHtml += "<span>" + time_standardize(d) + "</span>";
  603. break;
  604. case "2":
  605. let sent_id = msgList[i].id + "#" + msgList[i].data.begin + "#" + msgList[i].data.end;
  606. let sent_msg_title = msgList[i].data.begin + "-" + msgList[i].data.end + "-" + msgList[i].data.text.slice(0, 5);
  607. strHtml += "<a onclick=\"msg_show_msg_content('2','" + sent_id + "')\">" + sent_msg_title + "</a></span>";
  608. strHtml += "<span>" + time_standardize(d) + "</span>";
  609. break;
  610. }
  611. strHtml += "</li>";
  612. }
  613. }
  614. }
  615. strHtml += "</ul>";
  616. $("#msg_panal_list").html(strHtml);
  617. }
  618. function _msg_find_id_in_list(arrList, id) {
  619. for (var i = 0; i < arrList.length; i++) {
  620. if (arrList[i].id == id) {
  621. return (i);
  622. }
  623. }
  624. return (-1);
  625. }
  626. function sortNumber(a, b) {
  627. return b.newTime - a.newTime;
  628. }
  629. function show_tran_msg(bid, begin, end) {
  630. msg_show_msg_content(2, bid + "-" + begin + "-" + end);
  631. }
  632. function word_msg_counter_click(wordId) {
  633. msg_show_content(1, wordId);
  634. msg_show_content_panal();
  635. //tab_click('msg_panal_right', 'rb_msg');
  636. tab_click_b('sys_message', 'tab_rb_sys_message', editor_show_right_tool_bar, true);
  637. editor_show_right_tool_bar(true);
  638. }
  639. function msg_show_msg_content(type, id) {
  640. msg_show_content(type, id);
  641. msg_show_content_panal();
  642. tab_click_b('sys_message', 'tab_rb_sys_message', editor_show_right_tool_bar, true);
  643. }
  644. function show_tran_net(book, para, begin, end) {
  645. tab_click_b('sys_message', 'tab_rb_sys_message', editor_show_right_tool_bar, true);
  646. $.get("../usent/get.php",
  647. {
  648. book: book,
  649. para: para,
  650. begin: begin,
  651. end: end
  652. },
  653. function (data, status) {
  654. $("#msg_panal_content").html(data);
  655. });
  656. }
  657. function msg_show_list_panal() {
  658. $("#msg_panal_content_toolbar").hide();
  659. $("#msg_panal_content").hide();
  660. $("#msg_panal_list_toolbar").show();
  661. $("#msg_panal_list").show();
  662. }
  663. function msg_show_content_panal() {
  664. $("#msg_panal_content_toolbar").show();
  665. $("#msg_panal_content").show();
  666. $("#msg_panal_list_toolbar").hide();
  667. $("#msg_panal_list").hide();
  668. }