message.js 26 KB

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