message.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923
  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 = 0, book = 0, paragraph = 0) {
  24. /*
  25. data.type
  26. data.data
  27. data.doc
  28. */
  29. let send_time = time;
  30. if (time == 0) {
  31. let d = new Date();
  32. send_time = d.getTime();
  33. }
  34. var newMessage = {
  35. type: type,
  36. data: data,
  37. docid: docid,
  38. time: send_time,
  39. book: book,
  40. para: paragraph,
  41. };
  42. arrMsgBuffer.push(newMessage);
  43. var obj = new Object();
  44. obj.id = 0;
  45. obj.sender = getCookie("username");
  46. obj.type = newMessage.type;
  47. obj.docid = newMessage.docid;
  48. obj.time = newMessage.time / 5000;
  49. obj.read = 1;
  50. obj.data = JSON.parse(newMessage.data);
  51. //doc_msg_push(obj);
  52. msg_show_content(msg_curr_show_content_type, msg_curr_show_content_id);
  53. }
  54. function msg_reload() {
  55. iMsgLastUpdateId = 1;
  56. }
  57. function msg_send() {
  58. $("#net_up").html("▲");
  59. if (arrMsgBuffer.length > 0) {
  60. var operation = "send";
  61. } else {
  62. var operation = "get";
  63. }
  64. $.post(
  65. "message.php",
  66. {
  67. op: operation,
  68. lastid: iMsgLastUpdateId,
  69. doclist: strMsgDocList,
  70. data: JSON.stringify(arrMsgBuffer),
  71. },
  72. function (data, status) {
  73. let xmlText = data;
  74. console.log("receive mseeage:" + data);
  75. let msgXml;
  76. if (window.DOMParser) {
  77. parser = new DOMParser();
  78. msgXml = parser.parseFromString(xmlText, "text/xml");
  79. } else {
  80. // Internet Explorer
  81. msgXml = new ActiveXObject("Microsoft.XMLDOM");
  82. msgXml.async = "false";
  83. msgXml.loadXML(xmlText);
  84. }
  85. if (msgXml == null) {
  86. console.error("error:can not load Project. xml obj is null.");
  87. return;
  88. }
  89. let arrMsg = msgXml.getElementsByTagName("msg");
  90. var arrWordNewMsg = new Array();
  91. //开始一个事务,关闭自动提交
  92. doc_beginTransaction();
  93. for (var x = 0; x < arrMsg.length; x++) {
  94. switch (getNodeText(arrMsg[x], "type")) {
  95. case "maxid":
  96. iMsgLastUpdateId = getNodeText(arrMsg[x], "data");
  97. doc_head("msg_db_max_id", iMsgLastUpdateId);
  98. console.log("iMsgLastUpdateId:" + iMsgLastUpdateId);
  99. break;
  100. default:
  101. //if (gXmlBookDataMsg)
  102. {
  103. var obj = new Object();
  104. obj.id = getNodeText(arrMsg[x], "id");
  105. obj.sender = getNodeText(arrMsg[x], "sender");
  106. obj.type = getNodeText(arrMsg[x], "type");
  107. obj.docid = getNodeText(arrMsg[x], "docid");
  108. obj.time = getNodeText(arrMsg[x], "time");
  109. obj.read = getNodeText(arrMsg[x], "read");
  110. let objData = getNodeText(arrMsg[x], "data");
  111. try {
  112. obj.data = JSON.parse(objData);
  113. } catch (e) {
  114. obj.data = null;
  115. console.error(
  116. "err:message.js-msg_send" + e + "data:" + objData
  117. );
  118. break;
  119. }
  120. //尝试用此消息更新文档数据
  121. if (msg_apply_data(obj)) {
  122. //如果已经使用此消息,xml标记为已读
  123. //setNodeText(arrMsg[x], "read", "2");
  124. }
  125. doc_msg_push(obj);
  126. msg_show_content(
  127. msg_curr_show_content_type,
  128. msg_curr_show_content_id
  129. );
  130. switch (obj.type) {
  131. case "1": //wbw
  132. var iFind = false;
  133. for (
  134. var iWordId = 0;
  135. iWordId < arrWordNewMsg.length;
  136. iWordId++
  137. ) {
  138. if (arrWordNewMsg[iWordId] == obj.data.id) {
  139. iFind = true;
  140. break;
  141. }
  142. }
  143. if (!iFind) {
  144. arrWordNewMsg.push(obj.data.id);
  145. }
  146. break;
  147. case "2":
  148. break;
  149. }
  150. //gXmlBookDataMsg.appendChild(arrMsg[x].cloneNode(true));
  151. }
  152. break;
  153. }
  154. }
  155. //提交一个事务
  156. doc_commit();
  157. user_wbw_commit();
  158. for (let i = 0; i < arrWordNewMsg.length; i++) {
  159. updataWordHeadById(arrWordNewMsg[i]);
  160. }
  161. refreshNoteNumber();
  162. msg_set_tool_bar_msg_counter();
  163. msg_update_msg_list();
  164. $("#net_down").html(" ");
  165. }
  166. );
  167. $("#net_up").html(" ");
  168. $("#net_down").html("▼");
  169. arrMsgBuffer = new Array();
  170. msg_timer = setTimeout("msg_send()", msgTime);
  171. }
  172. function msg_new_msg_id_push() {}
  173. function msg_stop() {}
  174. function msg_read(msg_obj, status = null) {
  175. if (msg_obj) {
  176. if (status) {
  177. let oldStatus = msg_obj.read;
  178. msg_obj.read = status;
  179. for (let i = 0; i < gDocMsgList.length; i++) {
  180. if (gDocMsgList[i].data.id == msg_obj.id) {
  181. gDocMsgList[i].read = status;
  182. break;
  183. }
  184. }
  185. return oldStatus;
  186. } else {
  187. return msg_obj.read;
  188. }
  189. }
  190. }
  191. //将消息数据应用(apply)到文档
  192. function msg_apply_data(obj) {
  193. if (obj.sender == getCookie("username")) {
  194. //忽略自己的消息
  195. msg_read(obj, 1); //设置为已读
  196. return true;
  197. }
  198. doc_info.sendmsg = false; //不发送消息
  199. try {
  200. switch (obj.type) {
  201. case "1": //逐词译
  202. let wIndex = getWordIndex(obj.data.id);
  203. if (wIndex >= 0) {
  204. let xAllWord = gXmlBookDataBody.getElementsByTagName("word");
  205. let xWord = xAllWord[wIndex];
  206. let sReal = getNodeText(xWord, "real");
  207. let wordStatus = parseInt(getNodeText(xWord, "status"));
  208. let wordBodyChange = false;
  209. let wordHeadChange = false;
  210. let wordNoteChange = false;
  211. let wordRelationChange = false;
  212. let newWord = new Object();
  213. newWord.real = sReal;
  214. newWord.vaild = false;
  215. let wordChanged = false;
  216. if (
  217. wordStatus != 7 &&
  218. wordStatus != 5 &&
  219. obj.sender != getCookie("username")
  220. ) {
  221. msg_read(obj, 2);
  222. if (obj.data.real != null && obj.data.real != "") {
  223. //setNodeText(xWord,"real",obj.data.real);
  224. //newWord.real = obj.data.real;
  225. //wordHeadChange=true;
  226. }
  227. if (obj.data.pali != null) {
  228. //setNodeText(xWord,"pali",obj.data.pali);
  229. //wordHeadChange=true;
  230. }
  231. if (obj.data.mean != null) {
  232. setNodeText(xWord, "mean", obj.data.mean);
  233. newWord.mean = obj.data.mean;
  234. newWord.vaild = true;
  235. wordBodyChange = true;
  236. wordChanged = true;
  237. }
  238. if (obj.data.org != null) {
  239. setNodeText(xWord, "org", obj.data.org);
  240. newWord.parts = obj.data.org;
  241. newWord.vaild = true;
  242. wordBodyChange = true;
  243. wordChanged = true;
  244. }
  245. if (obj.data.om != null) {
  246. setNodeText(xWord, "om", obj.data.om);
  247. newWord.partmean = obj.data.om;
  248. newWord.vaild = true;
  249. wordBodyChange = true;
  250. wordChanged = true;
  251. }
  252. if (obj.data.case != null) {
  253. setNodeText(xWord, "case", obj.data.case);
  254. newWord.case = obj.data.case;
  255. newWord.vaild = true;
  256. wordBodyChange = true;
  257. wordChanged = true;
  258. }
  259. if (obj.data.parent != null) {
  260. setNodeText(xWord, "parent", obj.data.parent);
  261. wordChanged = true;
  262. }
  263. if (obj.data.note != null) {
  264. setNodeText(xWord, "note", obj.data.note);
  265. wordNoteChange = true;
  266. wordChanged = true;
  267. }
  268. if (obj.data.rela != null) {
  269. //setNodeText(xWord,"rela",decodeURI(obj.data.rela));
  270. setNodeText(xWord, "rela", obj.data.rela);
  271. wordRelationChange = true;
  272. wordChanged = true;
  273. }
  274. if (obj.data.bmc != null) {
  275. setNodeText(xWord, "bmc", obj.data.bmc);
  276. wordBodyChange = true;
  277. wordChanged = true;
  278. }
  279. if (obj.data.bmt != null) {
  280. setNodeText(xWord, "bmt", obj.data.bmt);
  281. wordChanged = true;
  282. }
  283. if (obj.data.lock != null) {
  284. setNodeText(xWord, "lock", obj.data.lock);
  285. wordBodyChange = true;
  286. wordChanged = true;
  287. }
  288. if (wordChanged) {
  289. setNodeText(xWord, "status", 6);
  290. //提交用户逐词解析数据库
  291. user_wbw_push_word(obj.data.id);
  292. }
  293. }
  294. if (wordHeadChange) {
  295. updataWordHeadByIndex(wIndex);
  296. }
  297. if (wordBodyChange) {
  298. modifyWordDetailByWordIndex(wIndex);
  299. }
  300. if (wordNoteChange || wordRelationChange) {
  301. //updateWordNote(xWord);
  302. refreshWordNoteDiv(xWord.parentNode.parentNode);
  303. }
  304. if (newWord.vaild) {
  305. if (!mDict[sReal]) {
  306. mDict[sReal] = new Array();
  307. }
  308. let isExsit = false;
  309. for (let x in mDict[sReal]) {
  310. if (
  311. mDict[sReal].mean &&
  312. mDict[sReal].mean == newWord.mean &&
  313. mDict[sReal].parts &&
  314. mDict[sReal].parts == newWord.parts &&
  315. mDict[sReal].partmean &&
  316. mDict[sReal].mean == newWord.partmean &&
  317. mDict[sReal].case &&
  318. mDict[sReal].case == newWord.case
  319. ) {
  320. isExsit = true;
  321. }
  322. }
  323. if (!isExsit) {
  324. mDict[sReal].push(newWord);
  325. }
  326. }
  327. }
  328. break;
  329. case "2": //译文
  330. let book = obj.data.book;
  331. let para = obj.data.para;
  332. let begin = obj.data.begin;
  333. let end = obj.data.end;
  334. $(
  335. "[pcds='sent-net-all'][book='" +
  336. book +
  337. "'][para='" +
  338. para +
  339. "'][begin='" +
  340. begin +
  341. "']"
  342. ).html(obj.data.text);
  343. $(
  344. "[pcds='sent-net-div'][book='" +
  345. book +
  346. "'][para='" +
  347. para +
  348. "'][begin='" +
  349. begin +
  350. "']"
  351. )
  352. .find(".author")
  353. .html(obj.sender);
  354. let tranBlock = doc_tran("#" + obj.data.id);
  355. if (tranBlock == null) {
  356. tranBlock = doc_tran("#" + obj.data.id, true);
  357. }
  358. if (tranBlock) {
  359. /*
  360. if (tranBlock.text(obj.data.begin, obj.data.end, "status") != 7) {
  361. msg_read(obj, 2);//设置为自动采纳
  362. console.log("句子 自动采纳");
  363. tranBlock.text(obj.data.begin, obj.data.end, "text", obj.data.text);
  364. tranBlock.text(obj.data.begin, obj.data.end, "status", 5);
  365. sen_save(tranBlock.info("id"), obj.data.begin, obj.data.end, obj.data.text);
  366. }
  367. */
  368. }
  369. break;
  370. }
  371. } catch (e) {
  372. console.error(e.message);
  373. console.error(e.stack);
  374. }
  375. doc_info.sendmsg = true; //发送消息
  376. if (obj.read > 0) {
  377. return true;
  378. } else {
  379. return false;
  380. }
  381. }
  382. function msg_word_msg_num(wid) {
  383. if (gDocMsgList == null) {
  384. return;
  385. }
  386. var iMsg = 0;
  387. for (var i = 0; i < gDocMsgList.length; i++) {
  388. if (gDocMsgList[i].type == 1) {
  389. if (gDocMsgList[i].data.id == wid && gDocMsgList[i].read == 0) {
  390. iMsg++;
  391. }
  392. }
  393. }
  394. return iMsg;
  395. }
  396. function msg_set_tool_bar_msg_counter() {
  397. if (gDocMsgList == null) {
  398. return;
  399. }
  400. var iMsg = 0;
  401. for (var i = 0; i < gDocMsgList.length; i++) {
  402. if (gDocMsgList[i].read == 0) {
  403. iMsg++;
  404. }
  405. }
  406. if (iMsg == 0) {
  407. $("#icon_notify_" + msg_my_id).html("");
  408. $("#icon_notify_" + msg_my_id).hide();
  409. } else {
  410. if (iMsg > 100) {
  411. iMsg = "+99";
  412. }
  413. $("#icon_notify_" + msg_my_id).html(iMsg.toString());
  414. $("#icon_notify_" + msg_my_id).show();
  415. }
  416. }
  417. function time_standardize(date) {
  418. var today_date = new Date();
  419. var Local_time = date.toLocaleTimeString();
  420. //將時間去掉秒的信息
  421. if (Local_time && Local_time.split(":").length == 3) {
  422. var Local_time_string =
  423. Local_time.split(":")[0] + ":" + Local_time.split(":")[1];
  424. Local_time_string += Local_time.split(":")[2].slice(2);
  425. } else {
  426. var Local_time_string = d.toLocaleTimeString();
  427. }
  428. if (date.toLocaleDateString() == today_date.toLocaleDateString()) {
  429. //如果是今天的消息,只显示时间
  430. return Local_time_string;
  431. } else if (
  432. date.toLocaleDateString().slice(0, 5) ==
  433. today_date.toLocaleDateString().slice(0, 5)
  434. ) {
  435. //如果是今年但非今天的消息,只显示月日
  436. var date_length = date.toLocaleDateString().length;
  437. return date.toLocaleDateString().slice(5, date_length);
  438. } else {
  439. //如果不是今年的消息,显示年月日
  440. return date.toLocaleDateString();
  441. }
  442. }
  443. //显示消息内容
  444. function msg_show_content(type, id) {
  445. if (gDocMsgList == null) {
  446. return;
  447. }
  448. if (type == "" || id == "") {
  449. return;
  450. }
  451. let arrid;
  452. let sen_begin, sen_end;
  453. type = parseInt(type);
  454. if (type == 2) {
  455. arrid = id.split("#");
  456. id = arrid[0];
  457. sen_begin = arrid[1];
  458. sen_end = arrid[2];
  459. }
  460. msg_curr_show_content_id = id;
  461. msg_curr_show_content_type = type;
  462. var iMsg = 0;
  463. var outHtml = "";
  464. var iLastTime = 0;
  465. for (var i = 0; i < gDocMsgList.length; i++) {
  466. let isFound = false;
  467. switch (type) {
  468. case 1:
  469. if (gDocMsgList[i].type == type && gDocMsgList[i].data.id == id) {
  470. isFound = true;
  471. }
  472. break;
  473. case 2:
  474. if (
  475. gDocMsgList[i].type == type &&
  476. gDocMsgList[i].data.id == id &&
  477. gDocMsgList[i].data.begin == sen_begin &&
  478. gDocMsgList[i].data.end == sen_end
  479. ) {
  480. isFound = true;
  481. }
  482. break;
  483. }
  484. if (isFound) {
  485. iMsg++;
  486. if (gDocMsgList[i].read == 0) {
  487. //如果未读,设置为已读
  488. msg_read(gDocMsgList[i], 1);
  489. }
  490. //三分钟之内的消息只显示一个时间标记
  491. if (gDocMsgList[i].time - iLastTime > 60 * 3) {
  492. var d = new Date();
  493. d.setTime(gDocMsgList[i].time * 1000);
  494. //var Local_date=d.toLocaleDateString().split("/");
  495. var time_standardize_string = time_standardize(d);
  496. outHtml +=
  497. "<div class='msgbox_time'><span>" +
  498. time_standardize_string +
  499. "</span></div>"; //d.toLocaleeString()
  500. }
  501. iLastTime = gDocMsgList[i].time;
  502. var myName = getCookie("username");
  503. if (gDocMsgList[i].sender == myName) {
  504. outHtml += "<div class='msgbox_div'>";
  505. outHtml += "<div class='msgbox_s'>";
  506. outHtml +=
  507. "<div class='head'><span>" + gDocMsgList[i].sender + "</span></div>";
  508. } else {
  509. outHtml += "<div class='msgbox_r'>";
  510. outHtml +=
  511. "<div class='head'><span>" +
  512. gDocMsgList[i].sender +
  513. "</span><span>Apply</span></div>";
  514. }
  515. switch (parseInt(type)) {
  516. case 1:
  517. if (gDocMsgList[i].data.pali != null) {
  518. outHtml +=
  519. "<div>spell:<a onclick=\"fieldListChanged('" +
  520. id +
  521. "','pali','" +
  522. gDocMsgList[i].data.pali +
  523. "')\">" +
  524. gDocMsgList[i].data.pali +
  525. "</a></div>";
  526. }
  527. if (gDocMsgList[i].data.real != null) {
  528. outHtml +=
  529. "<div>real:<a onclick=\"fieldListChanged('" +
  530. id +
  531. "','real','" +
  532. gDocMsgList[i].data.real +
  533. "')\">" +
  534. gDocMsgList[i].data.real +
  535. "</a></div>";
  536. }
  537. if (gDocMsgList[i].data.mean != null) {
  538. outHtml +=
  539. "<div>mean:<a onclick=\"fieldListChanged('" +
  540. id +
  541. "','mean','" +
  542. gDocMsgList[i].data.mean +
  543. "')\">" +
  544. gDocMsgList[i].data.mean +
  545. "</a></div>";
  546. }
  547. if (gDocMsgList[i].data.org != null) {
  548. outHtml +=
  549. "<div>part:<a onclick=\"fieldListChanged('" +
  550. id +
  551. "','org','" +
  552. gDocMsgList[i].data.org +
  553. "')\">" +
  554. gDocMsgList[i].data.org +
  555. "</a></div>";
  556. }
  557. if (gDocMsgList[i].data.om != null) {
  558. outHtml +=
  559. "<div>part mean:<a onclick=\"fieldListChanged('" +
  560. id +
  561. "','om','" +
  562. gDocMsgList[i].data.om +
  563. "')\">" +
  564. gDocMsgList[i].data.om +
  565. "</a></div>";
  566. }
  567. if (gDocMsgList[i].data.case != null) {
  568. outHtml +=
  569. "<div>case:<a onclick=\"fieldListChanged('" +
  570. id +
  571. "','case','" +
  572. gDocMsgList[i].data.case +
  573. "')\">" +
  574. gDocMsgList[i].data.case +
  575. "</a></div>";
  576. }
  577. if (gDocMsgList[i].data.parent != null) {
  578. outHtml +=
  579. "<div>base:<a onclick=\"fieldListChanged('" +
  580. id +
  581. "','parent','" +
  582. gDocMsgList[i].data.parent +
  583. "')\">" +
  584. gDocMsgList[i].data.parent +
  585. "</a></div>";
  586. }
  587. if (gDocMsgList[i].data.note != null) {
  588. outHtml +=
  589. "<div>note:<a onclick=\"fieldListChanged('" +
  590. id +
  591. "','note','" +
  592. gDocMsgList[i].data.note +
  593. "')\">" +
  594. gDocMsgList[i].data.note +
  595. "</a></div>";
  596. }
  597. if (gDocMsgList[i].data.rela != null) {
  598. let strRelation = decodeURI(gDocMsgList[i].data.rela);
  599. outHtml +=
  600. "<div>Relation:<a onclick=\"fieldListChanged('" +
  601. id +
  602. "','rela','" +
  603. strRelation +
  604. "')\">";
  605. outHtml += renderWordRelationByString("", strRelation, id);
  606. outHtml += "</a></div>";
  607. }
  608. if (gDocMsgList[i].data.lock != null) {
  609. outHtml +=
  610. "<div>lock:<a onclick=\"fieldListChanged('" +
  611. id +
  612. "','lock','" +
  613. gDocMsgList[i].data.lock +
  614. "')\">" +
  615. gDocMsgList[i].data.lock +
  616. "</a></div>";
  617. }
  618. if (gDocMsgList[i].data.bmc != null) {
  619. outHtml +=
  620. "<div>Bookmark:<a onclick=\"fieldListChanged('" +
  621. id +
  622. "','bmc','" +
  623. gDocMsgList[i].data.bmc +
  624. "')\">" +
  625. gDocMsgList[i].data.bmc +
  626. "</a></div>";
  627. }
  628. if (gDocMsgList[i].data.bmt != null) {
  629. outHtml +=
  630. "<div>Bookmark:<a onclick=\"fieldListChanged('" +
  631. id +
  632. "','bmt','" +
  633. gDocMsgList[i].data.bmt +
  634. "')\">" +
  635. gDocMsgList[i].data.bmt +
  636. "</a></div>";
  637. }
  638. break;
  639. case 2:
  640. outHtml +=
  641. "<div>sentence:<a onclick=\"setTranText('" +
  642. gDocMsgList[i].data.id +
  643. "','" +
  644. gDocMsgList[i].data.end +
  645. "','" +
  646. gDocMsgList[i].data.text +
  647. "')\">" +
  648. gDocMsgList[i].data.text +
  649. "</a></div>";
  650. break;
  651. }
  652. switch (gDocMsgList[i].read) {
  653. case 1:
  654. break;
  655. case 2:
  656. outHtml += "<div>已经自动采纳</div>";
  657. break;
  658. case 3:
  659. outHtml += "<div>已被采纳</div>";
  660. break;
  661. }
  662. outHtml += "</div></div>";
  663. }
  664. }
  665. $("#msg_panal_content").html(outHtml);
  666. switch (type) {
  667. case 1:
  668. updataWordHeadById(id);
  669. var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
  670. var wordSpell = getNodeText(xAllWord[getWordIndex(id)], "real");
  671. var wordId = getNodeText(xAllWord[getWordIndex(id)], "id");
  672. wordSpell = "<a href='#w" + wordId + "'>" + wordSpell + "</a>";
  673. $("#msg_content_title").html(wordSpell);
  674. break;
  675. case 2:
  676. break;
  677. }
  678. msg_set_tool_bar_msg_counter();
  679. }
  680. //刷新消息列表
  681. function msg_update_msg_list() {
  682. if (gDocMsgList == null) {
  683. return;
  684. }
  685. let strHtml = "";
  686. let msgList = new Array();
  687. for (var i = 0; i < gDocMsgList.length; i++) {
  688. switch (gDocMsgList[i].type) {
  689. case "2":
  690. case "1":
  691. var iFind = _msg_find_id_in_list(msgList, gDocMsgList[i].data.id);
  692. if (iFind >= 0) {
  693. if (gDocMsgList[i].read == 0) {
  694. msgList[iFind].unread++;
  695. }
  696. msgList[iFind].counter++;
  697. msgList[iFind].newTime = gDocMsgList[i].time;
  698. msgList[iFind].sender = gDocMsgList[i].sender;
  699. }
  700. //没找到
  701. else {
  702. objMsg = new Object();
  703. objMsg.id = gDocMsgList[i].data.id;
  704. objMsg.data = gDocMsgList[i].data;
  705. objMsg.type = gDocMsgList[i].type;
  706. if (gDocMsgList[i].read == 0) {
  707. objMsg.unread = 1;
  708. } else {
  709. objMsg.unread = 0;
  710. }
  711. objMsg.counter = 1;
  712. objMsg.newTime = gDocMsgList[i].time;
  713. objMsg.sender = gDocMsgList[i].sender;
  714. msgList.push(objMsg);
  715. }
  716. break;
  717. }
  718. }
  719. strHtml += "<ul class='msg_list'>";
  720. msgList.sort(sortNumber);
  721. for (var j = 0; j < 2; j++) {
  722. for (var i = 0; i < msgList.length; i++) {
  723. //先显示未读的 再显示已经读的
  724. var times;
  725. if (msgList[i].unread > 0) {
  726. times = 0;
  727. } else {
  728. times = 1;
  729. }
  730. if (times == j) {
  731. strHtml += "<li>";
  732. var d = new Date();
  733. d.setTime(msgList[i].newTime * 1000);
  734. switch (msgList[i].type) {
  735. case "1":
  736. var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
  737. var wIndex = getWordIndex(msgList[i].id);
  738. if (wIndex >= 0) {
  739. var wordSpell = getNodeText(
  740. xAllWord[getWordIndex(msgList[i].id)],
  741. "real"
  742. );
  743. } else {
  744. var wordSpell = "unkow";
  745. }
  746. strHtml += "<span>";
  747. if (msgList[i].unread > 0) {
  748. strHtml +=
  749. "<span class='word_msg' onclick=\"msg_show_msg_content('1','" +
  750. msgList[i].id +
  751. "')\">" +
  752. msgList[i].unread +
  753. "</span>";
  754. }
  755. strHtml += "<a href='#w" + msgList[i].id + "'>[«]</a>";
  756. strHtml +=
  757. "<a onclick=\"msg_show_msg_content('1','" +
  758. msgList[i].id +
  759. "')\">" +
  760. wordSpell +
  761. "</a></span>";
  762. strHtml += "<span>" + time_standardize(d) + "</span>";
  763. break;
  764. case "2":
  765. let sent_id =
  766. msgList[i].id +
  767. "#" +
  768. msgList[i].data.begin +
  769. "#" +
  770. msgList[i].data.end;
  771. let sent_msg_title =
  772. msgList[i].data.begin +
  773. "-" +
  774. msgList[i].data.end +
  775. "-" +
  776. msgList[i].data.text.slice(0, 5);
  777. strHtml +=
  778. "<a onclick=\"msg_show_msg_content('2','" +
  779. sent_id +
  780. "')\">" +
  781. sent_msg_title +
  782. "</a></span>";
  783. strHtml += "<span>" + time_standardize(d) + "</span>";
  784. break;
  785. }
  786. strHtml += "</li>";
  787. }
  788. }
  789. }
  790. strHtml += "</ul>";
  791. $("#msg_panal_list").html(strHtml);
  792. }
  793. function _msg_find_id_in_list(arrList, id) {
  794. for (var i = 0; i < arrList.length; i++) {
  795. if (arrList[i].id == id) {
  796. return i;
  797. }
  798. }
  799. return -1;
  800. }
  801. function sortNumber(a, b) {
  802. return b.newTime - a.newTime;
  803. }
  804. function show_tran_msg(bid, begin, end) {
  805. msg_show_msg_content(2, bid + "-" + begin + "-" + end);
  806. }
  807. function word_msg_counter_click(wordId) {
  808. msg_show_content(1, wordId);
  809. msg_show_content_panal();
  810. //tab_click('msg_panal_right', 'rb_msg');
  811. tab_click_b(
  812. "sys_message",
  813. "tab_rb_sys_message",
  814. editor_show_right_tool_bar,
  815. true
  816. );
  817. editor_show_right_tool_bar(true);
  818. }
  819. function msg_show_msg_content(type, id) {
  820. msg_show_content(type, id);
  821. msg_show_content_panal();
  822. tab_click_b(
  823. "sys_message",
  824. "tab_rb_sys_message",
  825. editor_show_right_tool_bar,
  826. true
  827. );
  828. }
  829. function show_tran_net(book, para, begin, end) {
  830. tab_click_b(
  831. "sys_message",
  832. "tab_rb_sys_message",
  833. editor_show_right_tool_bar,
  834. true
  835. );
  836. $.get(
  837. "../usent/get.php",
  838. {
  839. book: book,
  840. para: para,
  841. begin: begin,
  842. end: end,
  843. },
  844. function (data, status) {
  845. let arrSent = JSON.parse(data);
  846. let strHtml = "";
  847. for (const iterator of arrSent) {
  848. strHtml += "<div class='trans_text_block'>";
  849. strHtml += "<div class='trans_text_content' >";
  850. strHtml += iterator.text;
  851. strHtml += "</div>";
  852. strHtml +=
  853. "<div class='trans_text_info'>" +
  854. "<span><span class='author'>" +
  855. iterator.author +
  856. "</span><span class='tag'>tag</span></span>" +
  857. "<span class='tools'>" +
  858. "<button>采纳</button>" +
  859. "</span>" +
  860. "</div>";
  861. strHtml += "</div>";
  862. }
  863. $("#msg_panal_content").html(strHtml);
  864. $("#msg_panal_content").show();
  865. $("#msg_panal_list").hide();
  866. }
  867. );
  868. }
  869. function msg_show_list_panal() {
  870. $("#msg_panal_content_toolbar").hide();
  871. $("#msg_panal_content").hide();
  872. $("#msg_panal_list_toolbar").show();
  873. $("#msg_panal_list").show();
  874. }
  875. function msg_show_content_panal() {
  876. $("#msg_panal_content_toolbar").show();
  877. $("#msg_panal_content").show();
  878. $("#msg_panal_list_toolbar").hide();
  879. $("#msg_panal_list").hide();
  880. }