message.js 23 KB

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