message.js 26 KB

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