term-.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. var arrTerm = new Array();
  2. var arrTerm2 = new Array();
  3. var arrMyTerm = new Array();
  4. var arrAllMean = new Array();
  5. var arrTermAllPali = new Array();
  6. var arrWordIdTermId = new Array();
  7. var strTermTanslationTmp = "[%mean%](%pali% %mean2% %mymean%)";
  8. var strTermTanslationTmp2 = "[%mean%]";
  9. var termCounter = new Array();
  10. var noteCounter = 0; //正文内注释计数器
  11. function note(noteId, strDef = "unkow") {
  12. document.write("haha");
  13. }
  14. function note_replace(strIn) {
  15. /*
  16. */
  17. var output = strIn.replace("/*", "<script>");
  18. output = output.replace("*/", "</script>");
  19. return output;
  20. }
  21. //将存储状态的字符串转换为预显示字符串
  22. //设置状态为 0:未处理的原始状态
  23. function term_std_str_to_tran(strIn) {
  24. return strIn
  25. .replace(/\[\[/g, "<term status='0'>")
  26. .replace(/\]\]/g, "</term>");
  27. }
  28. function term_std_str_to_edit(strIn) {
  29. var arrText = strIn.split("/");
  30. for (var i in arrText) {
  31. //头尾是*
  32. if (
  33. arrText[i].substring(0, 1) == "*" &&
  34. arrText[i].substring(arrText[i].length - 1) == "*"
  35. ) {
  36. var arrOneTermWord = arrText[i].split("@");
  37. if (arrOneTermWord.length == 2) {
  38. arrText[i] = "*" + arrOneTermWord[1];
  39. }
  40. }
  41. }
  42. return arrText.join("/");
  43. }
  44. function term_tran_edit_replace(strIn) {
  45. var strEdit = strIn;
  46. for (var x = 0; x < arrTerm2.length; x++) {
  47. var strReplace =
  48. "strEdit=strEdit.replace(/" +
  49. arrTerm2[x].meaning +
  50. '/g,"/*' +
  51. arrTerm2[x].meaning +
  52. '*/")';
  53. eval(strReplace);
  54. }
  55. //strEdit=strEdit.replace(/\/*\/*/g,"\/*");
  56. //strEdit=strEdit.replace(/\*\/\*\//g,"*\/");
  57. return strEdit;
  58. }
  59. function term_edit_to_std_str(strIn) {
  60. var arrText = strIn.split("/");
  61. for (var i in arrText) {
  62. //头尾是*
  63. if (
  64. arrText[i].substring(0, 1) == "*" &&
  65. arrText[i].substring(arrText[i].length - 1) == "*"
  66. ) {
  67. var wordMeaning = arrText[i].substring(1, arrText[i].length - 1);
  68. arrText[i] = "*" + term_get_std_str(wordMeaning) + "*";
  69. }
  70. }
  71. return arrText.join("/");
  72. }
  73. function term_get_std_str(strMean) {
  74. for (var x = 0; x < arrTerm2.length; x++) {
  75. if (arrTerm2[x].meaning == strMean) {
  76. return arrTerm2[x].guid + "@" + strMean;
  77. }
  78. }
  79. return "unkow@" + strMean;
  80. }
  81. function term_get_my_std_str(strMean) {
  82. for (var x in arrMyTerm) {
  83. if (arrMyTerm[x].meaning == strMean) {
  84. return arrMyTerm[x].guid + "@" + strMean;
  85. }
  86. }
  87. return "unkow@" + strMean;
  88. }
  89. function note_lookup(word, showto) {
  90. $("#" + showto).load("term.php?op=search&word=" + word, function (
  91. responseTxt,
  92. statusTxt,
  93. xhr
  94. ) {
  95. if (statusTxt == "success") {
  96. $(".term_note").each(function (index, element) {
  97. $(this).html(note_init($(this).html()));
  98. $(this).attr("status", 1);
  99. note_refresh_new();
  100. });
  101. } else if (statusTxt == "error") {
  102. console.error("Error: " + xhr.status + ": " + xhr.statusText);
  103. }
  104. });
  105. }
  106. function term_apply(guid) {
  107. if (g_eCurrWord) {
  108. setNodeText(g_eCurrWord, "note", "=term(" + guid + ")");
  109. term_array_updata();
  110. }
  111. }
  112. function term_data_copy_to_me(guid) {
  113. $("#term_dict").load("term.php?op=copy&wordid=" + guid);
  114. }
  115. //我的术语字典进入编辑模式
  116. function term_edit(guid) {
  117. $("#term_edit_btn1_" + guid).hide();
  118. $("#term_edit_btn2_" + guid).show();
  119. document.getElementById("term_dict_my_" + guid).style.display = "none";
  120. document.getElementById("term_dict_my_edit_" + guid).style.display = "block";
  121. }
  122. //我的术语字典退出编辑模式
  123. function term_data_esc_edit(guid) {
  124. $("#term_edit_btn1_" + guid).show();
  125. $("#term_edit_btn2_" + guid).hide();
  126. document.getElementById("term_dict_my_" + guid).style.display = "block";
  127. document.getElementById("term_dict_my_edit_" + guid).style.display = "none";
  128. }
  129. //我的术语字典 编辑模式 保存
  130. function term_data_save(guid) {
  131. if (guid == "") {
  132. var strWord = $("#term_new_word").val();
  133. var strMean = $("#term_new_mean").val();
  134. var strMean2 = $("#term_new_mean2").val();
  135. var strTag = $("#term_new_tag").val();
  136. var strChannal = $("#term_new_channal").val();
  137. var strLanguage = $("#term_new_language").val();
  138. var strNote = $("#term_new_note").val();
  139. let newTerm = new Object();
  140. newTerm.guid = com_guid();
  141. newTerm.word = strWord;
  142. newTerm.meaning = strMean;
  143. newTerm.other_meaning = strMean2;
  144. newTerm.tag = strTag;
  145. newTerm.channal = strChannal;
  146. newTerm.language = strLanguage;
  147. arrMyTerm.push(newTerm);
  148. } else {
  149. var strWord = $("#term_edit_word_" + guid).val();
  150. var strMean = $("#term_edit_mean_" + guid).val();
  151. var strMean2 = $("#term_edit_mean2_" + guid).val();
  152. var strTag = $("#term_edit_tag_" + guid).val();
  153. var strChannal = $("#term_edit_channal_" + guid).val();
  154. var strLanguage = $("#term_edit_language_" + guid).val();
  155. var strNote = $("#term_edit_note_" + guid).val();
  156. }
  157. $.get(
  158. "term.php",
  159. {
  160. op: "save",
  161. guid: guid,
  162. word: strWord,
  163. mean: strMean,
  164. mean2: strMean2,
  165. tag: strTag,
  166. channal: strChannal,
  167. language: strLanguage,
  168. note: strNote,
  169. },
  170. function (data, status) {
  171. try {
  172. let result = JSON.parse(data);
  173. if (result.status == 0) {
  174. note_lookup(result.message, "term_dict");
  175. } else {
  176. ntf_show("term error" + result.message);
  177. }
  178. } catch (e) {
  179. console.error("term_get_all_pali:" + e + " data:" + data);
  180. ntf_show("term error");
  181. }
  182. }
  183. );
  184. }
  185. function term_get_all_pali() {
  186. $.get(
  187. "term.php",
  188. {
  189. op: "allpali",
  190. },
  191. function (data, status) {
  192. if (data.length > 0) {
  193. try {
  194. arrTermAllPali = JSON.parse(data);
  195. } catch (e) {
  196. console.error("term_get_all_pali:" + e + " data:" + data);
  197. }
  198. }
  199. }
  200. );
  201. }
  202. function term_lookup_all(pali) {
  203. for (var x in arrTermAllPali) {
  204. if (arrTermAllPali[x].word == pali) {
  205. return arrTermAllPali[x];
  206. }
  207. }
  208. return null;
  209. }
  210. function term_get_my() {
  211. $.get(
  212. "term.php",
  213. {
  214. op: "my",
  215. },
  216. function (data, status) {
  217. if (data.length > 0) {
  218. try {
  219. arrMyTerm = JSON.parse(data);
  220. } catch (e) {
  221. console.error(e.error + " data:" + data);
  222. }
  223. }
  224. }
  225. );
  226. }
  227. //在我的术语字典里查询
  228. function term_lookup_my(pali) {
  229. for (var x in arrMyTerm) {
  230. if (arrMyTerm[x].meaning == pali) {
  231. return arrMyTerm[x];
  232. }
  233. if (arrMyTerm[x].word == pali) {
  234. return arrMyTerm[x];
  235. }
  236. }
  237. return null;
  238. }
  239. function term_lookup_my_id(id) {
  240. for (var x in arrMyTerm) {
  241. if (arrMyTerm[x].guid == id) {
  242. return arrMyTerm[x];
  243. }
  244. }
  245. return null;
  246. }
  247. function term_get_all_meaning(word) {
  248. $.get(
  249. "term.php",
  250. {
  251. op: "allmean",
  252. word: word,
  253. },
  254. function (data, status) {
  255. $("#term_win_other_mean").html(data);
  256. }
  257. );
  258. }
  259. //刷新文档正在使用的术语数据
  260. function term_array_updata() {
  261. arrTerm2 = new Array();
  262. var arrTermDownLoadList = new Array();
  263. var arrWordIdTermId = new Array();
  264. var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
  265. for (var x = 0; x < xAllWord.length; x++) {
  266. var sNote = getNodeText(xAllWord[x], "note");
  267. var wid = getNodeText(xAllWord[x], "id");
  268. if (sNote.substring(0, 6) == "=term(") {
  269. var termId = sNote.slice(6, -1);
  270. if (!arrTerm[termId]) {
  271. arrTermDownLoadList.push(termId);
  272. }
  273. //person={wid:wid,tid:termId};
  274. arrWordIdTermId.push({ wid: wid, tid: termId });
  275. }
  276. }
  277. if (arrTermDownLoadList.length > 0) {
  278. var idlist = arrTermDownLoadList.join();
  279. idlist = idlist.replace(/,/g, "','");
  280. idlist = "'" + idlist + "'";
  281. $.get(
  282. "term.php",
  283. {
  284. op: "extract",
  285. list: idlist,
  286. },
  287. function (data, status) {
  288. var obj = JSON.parse(data);
  289. for (var x in obj) {
  290. arrTerm[obj[x].guid] = obj[x];
  291. arrTerm2.push(obj[x]);
  292. }
  293. if (g_eCurrWord) {
  294. updataWordHeadById(getNodeText(g_eCurrWord, "id"));
  295. refreshWordNote(g_eCurrWord.parentNode.parentNode);
  296. }
  297. for (var i = 0; i < arrWordIdTermId.length; i++) {
  298. var wid = arrWordIdTermId[i].wid;
  299. var sMean = arrTerm[arrWordIdTermId[i].tid].meaning;
  300. doc_setWordDataById(wid, "mean", sMean);
  301. updateWordBodyById(wid);
  302. }
  303. }
  304. );
  305. }
  306. }
  307. function term_updata_translation() {
  308. termCounter = new Array();
  309. noteCounter = 1;
  310. $("term").each(function () {
  311. let status = $(this).attr("status");
  312. let termText = $(this).text();
  313. if (termText.slice(0, 1) == "#") {
  314. if (status == 0) {
  315. $(this).attr("status", "1");
  316. $(this).attr("type", "1");
  317. $(this).attr("text", termText.slice(1));
  318. }
  319. let noteText = $(this).attr("text");
  320. $(this).html(
  321. "<a onclick=\"alert('" + noteText + "')\">[" + noteCounter + "]</a>"
  322. );
  323. noteCounter++;
  324. } else {
  325. if (status == 0) {
  326. let myterm = term_lookup_my(termText); //我的术语字典
  327. if (myterm) {
  328. $(this).attr("status", "1");
  329. $(this).attr("type", "0");
  330. $(this).attr("guid", myterm.guid);
  331. $(this).attr("pali", myterm.word);
  332. $(this).attr("mean", myterm.meaning);
  333. $(this).attr("mean2", myterm.other_meaning);
  334. $(this).attr("replace", myterm.meaning);
  335. } else {
  336. $(this).attr("status", "2");
  337. }
  338. }
  339. let guid = $(this).attr("guid");
  340. let pali = $(this).attr("pali");
  341. let mean = $(this).attr("mean");
  342. let mean2 = $(this).attr("mean2");
  343. var renderTo = $(this).attr("pos");
  344. var noteText = "";
  345. if (termCounter[guid]) {
  346. termCounter[guid] = 2;
  347. } else {
  348. termCounter[guid] = 1;
  349. }
  350. var myterm = term_lookup_my(pali); //我的术语字典
  351. let linkclass = "";
  352. if (myterm) {
  353. linkclass = "term_link";
  354. } else {
  355. linkclass = "term_link_new";
  356. }
  357. if (guid) {
  358. if (renderTo == "wbw") {
  359. noteText = "%note%";
  360. } else {
  361. if (termCounter[guid] == 1) {
  362. noteText = strTermTanslationTmp;
  363. } else {
  364. noteText = strTermTanslationTmp2;
  365. }
  366. }
  367. noteText = noteText.replace(
  368. "[",
  369. "<span class='" +
  370. linkclass +
  371. "' onclick=\"term_show_win('" +
  372. guid +
  373. "')\">"
  374. );
  375. noteText = noteText.replace("]", "</span>");
  376. noteText = noteText.replace(
  377. "%mean%",
  378. "<span class='term_mean'>" + mean + "</span>"
  379. );
  380. noteText = noteText.replace(
  381. "%pali%",
  382. "<span class='term_pali'>" + pali + "</span>"
  383. );
  384. noteText = noteText.replace(
  385. "%mean2%",
  386. "<span class='term_mean2'>" + mean2 + "</span>"
  387. );
  388. noteText = noteText.replace(
  389. "%note%",
  390. "<span class='term_note'>" + "" + "</span>"
  391. );
  392. if (myterm) {
  393. if (myterm.meaning != mean) {
  394. noteText = noteText.replace(
  395. "%mymean%",
  396. "<span class='term_mean_my'>" + myterm.meaning + "</span>"
  397. );
  398. } else {
  399. noteText = noteText.replace("%mymean%", "");
  400. }
  401. } else {
  402. noteText = noteText.replace("%mymean%", "");
  403. }
  404. } else {
  405. noteText =
  406. "<span class='" +
  407. linkclass +
  408. "' onclick=\"term_show_win('','" +
  409. termText +
  410. "')\">" +
  411. termText +
  412. "</span>";
  413. }
  414. $(this).html(noteText);
  415. }
  416. });
  417. }
  418. function term_show_win(guid, keyWord = "") {
  419. if (guid == "") {
  420. $(term_body).html(
  421. "当前词条未创建。<br /><a onclick=\"term_add_new('" +
  422. keyWord +
  423. "')\">现在创建</a>"
  424. );
  425. } else {
  426. let currWord = term_lookup_my_id(guid);
  427. if (currWord) {
  428. let termString = "";
  429. let pali = currWord.word;
  430. let pali_1 = pali.substring(0, 1).toUpperCase();
  431. pali = pali_1 + pali.substring(1);
  432. let mean = currWord.meaning;
  433. let myterm = term_lookup_my(currWord.word); //我的术语字典
  434. termString += "<div class='term_win_mean'>" + pali + "</div>";
  435. termString +=
  436. "<div class='term_win_pali'>意思:" + currWord.meaning + "</div>";
  437. termString +=
  438. "<div class='term_win_mean2'>其他意思:" +
  439. currWord.other_meaning +
  440. "</div>";
  441. termString += "<div class='term_win_mymean'>我的词库:";
  442. if (myterm) {
  443. termString += "<b>" + myterm.meaning + "</b> ";
  444. } else {
  445. termString += "<input type='input' placeholder='我的释义'>";
  446. }
  447. termString += "<span>其他:</span><span id='term_win_other_mean'></span>";
  448. termString += "</div>";
  449. if (currWord.note) {
  450. termString += "<div class='term_win_note'>" + currWord.note + "</div>";
  451. } else {
  452. termString += "<div class='term_win_note'>Loading</div>";
  453. }
  454. $(term_body).html(termString);
  455. term_get_all_meaning(currWord.word);
  456. if (!currWord.note) {
  457. $.get(
  458. "term.php",
  459. {
  460. op: "load_id",
  461. id: currWord.guid,
  462. },
  463. function (data, status, xhr) {
  464. switch (status) {
  465. case "success":
  466. try {
  467. let loadWord = JSON.parse(data);
  468. $("#term_win_note").html(loadWord[0].note);
  469. //修改内存数据
  470. for (let x in arrMyTerm) {
  471. if (arrMyTerm[x].guid == loadWord[0].guid) {
  472. arrMyTerm[x].note = loadWord[0].note;
  473. return;
  474. }
  475. }
  476. } catch (e) {
  477. console.error(e + " data:" + data);
  478. }
  479. break;
  480. case "error":
  481. console.error("Error: " + xhr.status + ": " + xhr.statusText);
  482. break;
  483. }
  484. }
  485. );
  486. }
  487. } else {
  488. $(term_body).html("undefined guid");
  489. }
  490. }
  491. document.getElementById("term_win").style.display = "flex";
  492. }
  493. function term_tmp(type, tmp) {
  494. if (tmp == "new") {
  495. switch (type) {
  496. case "a":
  497. strTermTanslationTmp = $("#term_my_tmp").val();
  498. break;
  499. case "a2":
  500. strTermTanslationTmp2 = $("#term_my_tmp").val();
  501. break;
  502. }
  503. } else {
  504. switch (type) {
  505. case "a":
  506. strTermTanslationTmp = tmp;
  507. break;
  508. case "a2":
  509. strTermTanslationTmp2 = tmp;
  510. break;
  511. }
  512. }
  513. term_updata_translation();
  514. }
  515. function term_add_new(keyword) {
  516. document.getElementById("term_win").style.display = "none";
  517. editor_show_right_tool_bar(true);
  518. tab_click_b("term_dict", "tab_rb_dict");
  519. note_lookup(keyword, "term_dict");
  520. }