message.js 22 KB

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