xml.js 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188
  1. var nWord=0;
  2. var suttaWordList=new Array();
  3. var tranParagraph=new Array();
  4. var g_useMode;
  5. var g_countWordList=0;
  6. var g_wordListOrderby="count";
  7. var g_wordListOrder=false;
  8. var g_isDictFavo=false;
  9. var g_autoUpdataDB=true;
  10. var gTextEditMediaType="";
  11. var gSutta=0;
  12. var gPar=0;
  13. var gTran=0;
  14. var g_bookMark_array=['a','x','1','2','3','4','5'];
  15. var wordList = new Array();
  16. function getNodeText(inNode,subTagName){
  17. try{
  18. if(inNode && inNode.getElementsByTagName(subTagName).length>0){
  19. if(inNode.getElementsByTagName(subTagName)[0].childNodes.length>0){
  20. var mValue = inNode.getElementsByTagName(subTagName)[0].childNodes[0].nodeValue;
  21. mValue = mValue.replace('&lt;','<');
  22. mValue = mValue.replace('&gt;','>');
  23. return(mValue);
  24. }
  25. else{
  26. return("");
  27. }
  28. }
  29. else{
  30. return("");
  31. }
  32. }
  33. catch(error){
  34. console.warn(error);
  35. return("");
  36. }
  37. return("");
  38. }
  39. function setNodeText(inNode,subTagName,strValue){
  40. if(strValue==null){
  41. return;
  42. }
  43. var mValue = strValue.toString();
  44. mValue = mValue.replace('<','&lt;');
  45. mValue = mValue.replace('>','&gt;');
  46. try{
  47. if(inNode && inNode.getElementsByTagName(subTagName).length==0){
  48. var newNode=gXmlBookData.createElement(subTagName);
  49. var textnode=gXmlBookData.createTextNode(" ");
  50. newNode.appendChild(textnode);
  51. inNode.appendChild(newNode);
  52. }
  53. if(inNode.getElementsByTagName(subTagName).length>0){
  54. if(inNode.getElementsByTagName(subTagName)[0].childNodes.length==0){
  55. var textnode=gXmlBookData.createTextNode(" ");
  56. inNode.getElementsByTagName(subTagName)[0].appendChild(textnode);
  57. }
  58. if(inNode.getElementsByTagName(subTagName)[0].childNodes.length>0){
  59. inNode.getElementsByTagName(subTagName)[0].childNodes[0].nodeValue=strValue;
  60. }
  61. else{
  62. throw "can't accese text node";
  63. }
  64. }
  65. else{
  66. throw subTagName+ ":not a sub Taget";
  67. }
  68. }
  69. catch(error){
  70. var_dump(error);
  71. return(false);
  72. }
  73. return(true);
  74. }
  75. function getNodeAttr(inNode,subTagName,attr){
  76. try{
  77. return(inNode.getElementsByTagName(subTagName)[0].getAttribute(attr));
  78. }
  79. catch(error){
  80. console.warn(error);
  81. return("");
  82. }
  83. }
  84. function setNodeAttr(inNode,subTagName,attr,strValue){
  85. if(!inNode || !strValue || !attr || attr==""){
  86. return;
  87. }
  88. let mValue = strValue.toString();
  89. try{
  90. if(inNode.getElementsByTagName(subTagName).length==0){
  91. var newNode=gXmlBookData.createElement(subTagName);
  92. var textnode=gXmlBookData.createTextNode(" ");
  93. newNode.appendChild(textnode);
  94. inNode.appendChild(newNode);
  95. }
  96. try{
  97. inNode.getElementsByTagName(subTagName)[0].setAttribute(attr,mValue);
  98. }
  99. catch(e){
  100. newatt=gXmlBookData.createAttribute(attr);
  101. newatt.nodeValue=mValue;
  102. inNode.getElementsByTagName(subTagName)[0].setAttributeNode(newatt);
  103. return(mValue);
  104. }
  105. }
  106. catch(error){
  107. console.error(error);
  108. return(false);
  109. }
  110. return(true);
  111. }
  112. //根据xmlDocument 对象中的单词序号和单词节点创建单词块
  113. //返回 字符串
  114. function createWordBlockByNode(id,wordNode){
  115. }
  116. function pushNewToList(inArray,strNew){
  117. //var isExist=false;
  118. for(x in inArray){
  119. if(inArray[x]==strNew){
  120. return;
  121. }
  122. }
  123. inArray.push(strNew);
  124. }
  125. function findFirstCaseInDict(inWord){
  126. var output="?";
  127. var pali=com_getPaliReal(inWord);
  128. if(mDict[pali]){
  129. for(var iWord in mDict[pali]){
  130. {
  131. if(mDict[pali][iWord].parts){
  132. if(mDict[pali][iWord].parts.length>0){
  133. return(mDict[pali][iWord].type+"#"+mDict[pali][iWord].gramma);
  134. }
  135. }
  136. }
  137. }
  138. }
  139. return(output);
  140. }
  141. function findFirstPartInDict(inWord){
  142. var output="?";
  143. var pali=com_getPaliReal(inWord);
  144. if(mDict[pali]){
  145. for(var iWord in mDict[pali]){
  146. {
  147. if(mDict[pali][iWord].parts){
  148. if(mDict[pali][iWord].parts.length>0){
  149. return(mDict[pali][iWord].parts);
  150. }
  151. }
  152. }
  153. }
  154. }
  155. return(output);
  156. }
  157. function findFirstPartMeanInDict(inWord){
  158. var output="?";
  159. var pali=com_getPaliReal(inWord);
  160. if(mDict[pali]){
  161. for(var iWord in mDict[pali]){
  162. if(dict_language_enable.indexOf(mDict[pali][iWord].language)>=0){
  163. if(mDict[pali][iWord].partmean){
  164. if(mDict[pali][iWord].partmean.length>0){
  165. return(mDict[pali][iWord].partmean);
  166. }
  167. }
  168. }
  169. }
  170. }
  171. return(output);
  172. }
  173. function findFirstMeanInDict(inWord){
  174. var output="?";
  175. var pali=com_getPaliReal(inWord);
  176. if(mDict[pali]){
  177. for(var iWord in mDict[pali]){
  178. //if(dict_language_enable.indexOf(mDict[pali][iWord].language)>=0)
  179. {
  180. if(mDict[pali][iWord].mean){
  181. if(mDict[pali][iWord].mean.length>0){
  182. return(mDict[pali][iWord].mean.split("$")[0]);
  183. }
  184. }
  185. }
  186. }
  187. }
  188. return(output);
  189. }
  190. function findAllMeanInDict(inWord,limit){
  191. output=new Array();
  192. for(var iCurrWord=0;iCurrWord<g_DictWordList.length;iCurrWord++){
  193. if(g_DictWordList[iCurrWord].Pali==inWord){
  194. meanList=g_DictWordList[iCurrWord].Mean.split("$");
  195. for(iMean in meanList){
  196. if(meanList[iMean].length>0){
  197. output.push(meanList[iMean]);
  198. if(output.length>limit){
  199. return(output);
  200. }
  201. }
  202. }
  203. }
  204. }
  205. return(output);
  206. }
  207. //确认对单个词的修改
  208. function modifyApply(sWordId,update_user_dict){
  209. let wordIndex=getWordIndex(sWordId);
  210. let arr_id_word = sWordId.split("-");
  211. let book=arr_id_word[0].slice(1);
  212. let paragraph = arr_id_word[1];
  213. let wId = arr_id_word[2];
  214. let strApplyTo;
  215. if(document.getElementById("checkbox_apply_same").checked){
  216. strApplyTo = "all";
  217. }
  218. else{
  219. strApplyTo = "current";
  220. }
  221. let wordCurrStatus=9;//草稿
  222. if(update_user_dict){
  223. wordCurrStatus=7;//保存为正式
  224. }
  225. //关闭单词修改窗口
  226. closeModifyWindow();
  227. let x = gXmlBookDataBody.getElementsByTagName("word");
  228. let msg_data = new Object();
  229. msg_data.id=sWordId;
  230. //原来的值
  231. let sPaliReal = getNodeText(x[wordIndex],"real");
  232. let sPaliParent = getNodeText(x[wordIndex],"parent");
  233. //new value
  234. let sPali = document.getElementById("id_text_pali").value;
  235. let oldPali = getNodeText(x[wordIndex],"pali");
  236. if(sPali!=oldPali){
  237. setNodeText(x[wordIndex],"pali",sPali);
  238. msg_data.pali = sPali;
  239. }
  240. setNodeAttr(x[wordIndex],"pali","status",wordCurrStatus);
  241. let sReal = document.getElementById("id_text_real").value;
  242. let oldReal = getNodeText(x[wordIndex],"real");
  243. if(sReal != oldReal){
  244. setNodeText(x[wordIndex],"real",sReal);
  245. msg_data.real=Real;
  246. }
  247. setNodeAttr(x[wordIndex],"real","status",wordCurrStatus);
  248. let sMeaning = document.getElementById("input_meaning").value;
  249. let oldMean = getNodeText(x[wordIndex],"mean");
  250. if(sMeaning != oldMean){
  251. setNodeText(x[wordIndex],"mean",sMeaning);
  252. msg_data.mean=sMeaning;
  253. }
  254. setNodeAttr(x[wordIndex],"mean","status",wordCurrStatus);
  255. let sParent = document.getElementById("id_text_parent").value;
  256. let oldParent = getNodeText(x[wordIndex],"parent");
  257. if(sParent != oldParent){
  258. setNodeText(x[wordIndex],"parent",sParent);
  259. msg_data.parent=sParent;
  260. }
  261. setNodeAttr(x[wordIndex],"parent","status",wordCurrStatus);
  262. let sParentGrammar = document.getElementById("parent_grammar").innerHTML;
  263. let oldParentGrammar = getNodeText(x[wordIndex],"pg");
  264. if(sParentGrammar != oldParentGrammar){
  265. setNodeText(x[wordIndex],"pg",sParentGrammar);
  266. msg_data.pg=sParentGrammar;
  267. }
  268. setNodeAttr(x[wordIndex],"pg","status",wordCurrStatus);
  269. let sParentParent = document.getElementById("id_text_prt_prt").value;
  270. let oldParentParent = getNodeText(x[wordIndex],"parent2");
  271. if(sParentParent != oldParentParent){
  272. setNodeText(x[wordIndex],"parent2",sParentParent);
  273. msg_data.parent2=sParentParent;
  274. }
  275. setNodeAttr(x[wordIndex],"parent2","status",wordCurrStatus);
  276. let sOrg = document.getElementById("input_org").value;
  277. let oldOrg = getNodeText(x[wordIndex],"org");
  278. if(sOrg != oldOrg){
  279. setNodeText(x[wordIndex],"org",sOrg);
  280. msg_data.org=sOrg;
  281. }
  282. setNodeAttr(x[wordIndex],"org","status",wordCurrStatus);
  283. let sOm = document.getElementById("input_om").value;
  284. let oldOm = getNodeText(x[wordIndex],"om");
  285. if(oldOm != sOm){
  286. setNodeText(x[wordIndex],"om",sOm);
  287. msg_data.om=sOm;
  288. }
  289. setNodeAttr(x[wordIndex],"om","status",wordCurrStatus);
  290. let sCase = document.getElementById("input_case").value;
  291. let oldCase = getNodeText(x[wordIndex],"case");
  292. if(oldCase != sCase){
  293. setNodeText(x[wordIndex],"case",sCase);
  294. msg_data.case=sCase;
  295. }
  296. setNodeAttr(x[wordIndex],"case","status",wordCurrStatus);
  297. let bLocked = document.getElementById("input_lock").checked;
  298. let oldLock = getNodeText(x[wordIndex],"lock");
  299. if(bLocked != oldLock){
  300. setNodeText(x[wordIndex],"lock",bLocked);
  301. msg_data.lock=bLocked;
  302. }
  303. setNodeAttr(x[wordIndex],"lock","status",wordCurrStatus);
  304. let txtBookMark=document.getElementById("id_text_bookmark").value;
  305. let oldBookMarkText = getNodeText(x[wordIndex],"bmt");
  306. if(oldBookMarkText != txtBookMark){
  307. setNodeText(x[wordIndex],"bmt",txtBookMark);
  308. msg_data.bmt=txtBookMark;
  309. }
  310. setNodeAttr(x[wordIndex],"bmt","status",wordCurrStatus);
  311. let oldBookMarkColor = getNodeText(x[wordIndex],"bmc");
  312. if(oldBookMarkColor==""){
  313. oldBookMarkColor="bmc0";
  314. }
  315. if(oldBookMarkColor!=g_currBookMarkColor){
  316. setNodeText(x[wordIndex],"bmc",g_currBookMarkColor);
  317. msg_data.bmc=g_currBookMarkColor;
  318. g_currBookMarkColor="";
  319. }
  320. setNodeAttr(x[wordIndex],"bmc","status",wordCurrStatus);
  321. let updateNoteNum=false;
  322. let txtNote=document.getElementById("id_text_note").value;
  323. let prevNote=getNodeText(x[wordIndex],"note");
  324. if(prevNote!=txtNote){
  325. setNodeText(x[wordIndex],"note",txtNote);
  326. //refreshWordNote(x[wordIndex].parentNode.parentNode);
  327. msg_data.note=txtNote;
  328. //updateWordNote(x[wordIndex]);
  329. updateNoteNum=true;
  330. }
  331. let sRalation=$("#id_relation_text").val();
  332. let oldRalation=getNodeText(x[wordIndex],"rala");
  333. if(oldRalation!=sRalation){
  334. setNodeText(x[wordIndex],"rela",sRalation);
  335. msg_data.rela=sRalation;
  336. //updateWordRelation(x[wordIndex]);
  337. updateNoteNum=true;
  338. }
  339. {
  340. setNodeText(x[wordIndex],"status",wordCurrStatus);//自己手动 或 草稿
  341. msg_data.status=wordCurrStatus;
  342. }
  343. user_wbw_push_word(sWordId);
  344. modifyWordDetailByWordIndex(wordIndex);
  345. updataWordHeadByIndex(wordIndex);
  346. if(updateNoteNum){
  347. refreshWordNoteDiv(x[wordIndex].parentNode.parentNode);
  348. refreshNoteNumber();
  349. }
  350. //send message
  351. let d=new Date();
  352. let msg_doc_id;
  353. if(doc_info.sendmsg){
  354. if(doc_info.parent_id!=""){
  355. msg_doc_id=doc_info.parent_id;
  356. }
  357. else{
  358. msg_doc_id=doc_info.doc_id;
  359. }
  360. msg_push(1,JSON.stringify(msg_data),msg_doc_id,d.getTime(),book,paragraph);
  361. }
  362. //The end of send message
  363. let objWord = new Object();
  364. objWord.Pali=getNodeText(x[wordIndex],"real");
  365. sCase= getNodeText(x[wordIndex],"case");
  366. let mGramma=sCase.split("#");
  367. if(mGramma.length>=2){
  368. mType=sCase.split("#")[0];
  369. mGramma=sCase.split("#")[1];
  370. }
  371. else{
  372. mType="";
  373. mGramma=sCase.split("#")[0];
  374. }
  375. //将单词加入内存字典
  376. var objDictItem=new Object();/*一个字典元素*/
  377. objDictItem.id=0;
  378. objDictItem.guid="";
  379. objDictItem.pali=getNodeText(x[wordIndex],"pali");
  380. objDictItem.type=mType;
  381. objDictItem.gramma=mGramma;
  382. objDictItem.parent=getNodeText(x[wordIndex],"parent");
  383. objDictItem.mean=getNodeText(x[wordIndex],"mean");
  384. objDictItem.note=getNodeText(x[wordIndex],"note");
  385. objDictItem.parts=getNodeText(x[wordIndex],"org");
  386. objDictItem.partmean=getNodeText(x[wordIndex],"om");
  387. objDictItem.status=0
  388. objDictItem.dict_name="Memo";
  389. objDictItem.language="zh";
  390. objDictItem.confidence=100;
  391. if(objDictItem.type=="" || objDictItem.type.indexOf("?")!=-1){
  392. objDictItem.confidence=objDictItem.confidence*0.9;
  393. }
  394. if(objDictItem.type!=".un." && objDictItem.type!=".comp."){
  395. if(objDictItem.gramma=="" || objDictItem.gramma.indexOf("?")!=-1 || objDictItem.gramma.indexOf("$")!=0){
  396. objDictItem.confidence=objDictItem.confidence*0.9;
  397. }
  398. if(objDictItem.mean=="" || objDictItem.mean.indexOf("?")!=-1){
  399. objDictItem.confidence=objDictItem.confidence*0.9;
  400. }
  401. if(objDictItem.partmean=="" || objDictItem.partmean.indexOf("?")!=-1){
  402. objDictItem.confidence=objDictItem.confidence*0.9;
  403. }
  404. }
  405. if(objDictItem.parts=="" || objDictItem.parts.indexOf("?")!=-1){
  406. objDictItem.confidence=objDictItem.confidence*0.9;
  407. }
  408. if(!mDict[objDictItem.pali]){
  409. mDict[objDictItem.pali]=new Array();
  410. }
  411. //insert to top of memory dict
  412. mDict[objDictItem.pali].unshift(objDictItem);
  413. let parts=getNodeText(x[wordIndex],"org");
  414. let partmean=getNodeText(x[wordIndex],"om");
  415. //add parent infomation
  416. switch(mType){
  417. case ".n.":
  418. mType=".n:base.";
  419. mGramma=mGramma.split("$")[0];
  420. if(mGramma==".m." || mGramma==".f." || mGramma==".nt."){
  421. }
  422. else{
  423. mGramma="";
  424. }
  425. break;
  426. case ".adj.":
  427. mType=".adj:base.";
  428. mGramma="";
  429. break;
  430. case ".ti.":
  431. mType=".ti:base.";
  432. mGramma="";
  433. break;
  434. case ".pron.":
  435. d_parentType=".pron:base.";
  436. d_parentGramma="";
  437. break;
  438. case ".num.":
  439. d_parentType=".num:base.";
  440. d_parentGramma="";
  441. break;
  442. case ".v.":
  443. mType=".v:base.";
  444. mGramma="";
  445. break;
  446. }
  447. //将单词base加入内存字典
  448. if(getNodeText(x[wordIndex],"parent")!=""){
  449. var objDictItem=new Object();/*一个字典元素*/
  450. objDictItem.id=0;
  451. objDictItem.guid="";
  452. objDictItem.pali=getNodeText(x[wordIndex],"parent");
  453. objDictItem.type=mType;
  454. objDictItem.gramma=mGramma;
  455. objDictItem.parent="";
  456. objDictItem.mean = removeFormulaB(getNodeText(x[wordIndex],"mean"),'[',']');
  457. objDictItem.mean = removeFormulaB(objDictItem.mean,'{','}');
  458. objDictItem.note=getNodeText(x[wordIndex],"note");
  459. //remove the "[***]" in the end
  460. let d_factors = getNodeText(x[wordIndex],"org");
  461. let fc=d_factors.split("+");
  462. if(fc.length>0 && (fc[fc.length-1].slice(0,1)=="[" && fc[fc.length-1].slice(-1)=="]")){
  463. fc.pop();
  464. }
  465. objDictItem.parts=fc.join("+")
  466. let fm=getNodeText(x[wordIndex],"om").split("+");
  467. fm.length=fc.length;
  468. objDictItem.partmean=fm.join("+");
  469. objDictItem.status=0;
  470. objDictItem.confidence=100;
  471. if(objDictItem.type=="" || objDictItem.gramma.indexOf("?")!=-1){
  472. objDictItem.confidence=objDictItem.confidence*0.9;
  473. }
  474. if(objDictItem.gramma=="" || objDictItem.gramma.indexOf("?")!=-1 || objDictItem.gramma.indexOf("$")!=0){
  475. objDictItem.confidence=objDictItem.confidence*0.9;
  476. }
  477. if(objDictItem.mean=="" || objDictItem.gramma.indexOf("?")!=-1){
  478. objDictItem.confidence=objDictItem.confidence*0.9;
  479. }
  480. if(objDictItem.parts=="" || objDictItem.gramma.indexOf("?")!=-1){
  481. objDictItem.confidence=objDictItem.confidence*0.9;
  482. }
  483. if(objDictItem.partmean=="" || objDictItem.gramma.indexOf("?")!=-1){
  484. objDictItem.confidence=objDictItem.confidence*0.9;
  485. }
  486. if(!mDict[objDictItem.pali]){
  487. mDict[objDictItem.pali]=new Array();
  488. }
  489. objDictItem.dict_name="Memo";
  490. objDictItem.language="zh";
  491. if(!mDict[objDictItem.pali]){
  492. mDict[objDictItem.pali]=new Array();
  493. }
  494. mDict[objDictItem.pali].unshift(objDictItem);
  495. }
  496. // The end of memory dictionary
  497. //apply all
  498. let searchBegin=0;
  499. let searchEnd=0;
  500. switch(strApplyTo){
  501. case "all":
  502. searchBegin=0;
  503. searchEnd=x.length;
  504. break;
  505. case "up":
  506. searchBegin=0;
  507. searchEnd=wordIndex;
  508. break;
  509. case "down":
  510. searchBegin=wordIndex;
  511. searchEnd=x.length;
  512. break;
  513. }
  514. if(strApplyTo!="current"){
  515. //sPaliWord = x[sWordId].getElementsByTagName("pali")[0].childNodes[0].nodeValue;
  516. let iSameWordCount = 0;
  517. setNodeText(x[wordIndex],"pali",sPali);//拼寫顯示修改僅僅應用當前詞——Kosalla
  518. for (iSearch=searchBegin;iSearch<searchEnd;iSearch++){
  519. if(sWordId!=iSearch){
  520. //xmlNotePali = x[i].getElementsByTagName("pali")[0].childNodes[0].nodeValue;
  521. xmlNotePali = getNodeText(x[iSearch],"real");
  522. if(xmlNotePali==sPaliReal ){
  523. if(getNodeText(x[iSearch],"lock")!="true"){
  524. setNodeText(x[iSearch],"real",sReal);
  525. setNodeText(x[iSearch],"parent",sParent);
  526. setNodeText(x[iSearch],"mean",sMeaning);
  527. setNodeText(x[iSearch],"org",sOrg);
  528. setNodeText(x[iSearch],"om",sOm);
  529. setNodeText(x[iSearch],"case",sCase);
  530. setNodeText(x[iSearch],"bmc",g_currBookMarkColor);
  531. setNodeText(x[iSearch], "note", txtNote);
  532. switch(editor_word_status(x[iSearch])){
  533. case 0:
  534. case 1:
  535. case 2:
  536. case 3:
  537. case 4:
  538. case 6:
  539. editor_word_status(x[iSearch],5);
  540. break;
  541. }
  542. user_wbw_push_word(getNodeText(x[iSearch], "id"));
  543. modifyWordDetailByWordIndex(iSearch);
  544. updataWordHeadByIndex(iSearch);
  545. console.log("updata:"+iSearch+"<br />",0);
  546. iSameWordCount = iSameWordCount+1;
  547. }
  548. }
  549. xmlNoteParent = getNodeText(x[iSearch],"parent");
  550. if(xmlNotePali!=sPaliReal && xmlNoteParent==sPaliParent && xmlNoteParent!="" && xmlNoteParent!=" " ){
  551. if(getNodeText(x[iSearch],"lock")!="true"){
  552. setNodeText(x[iSearch],"mean",sMeaning);
  553. user_wbw_push_word(getNodeText(x[iSearch], "id"));
  554. modifyWordDetailByWordIndex(iSearch);
  555. updataWordHeadByIndex(iSearch);
  556. iSameWordCount = iSameWordCount+1;
  557. }
  558. }
  559. }
  560. }
  561. var_dump("same word:"+(iSameWordCount-1));
  562. }
  563. refreshBookMark();
  564. user_wbw_commit();
  565. //上传到用户字典
  566. if(update_user_dict){
  567. upload_to_my_dict();
  568. }
  569. }
  570. function getWordIndex(GUID){
  571. var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
  572. for(var iWord=0; iWord<xAllWord.length; iWord++){
  573. if(getNodeText(xAllWord[iWord],"id")==GUID){
  574. return(iWord);
  575. }
  576. }
  577. return(-1);
  578. }
  579. function addFavorite(){
  580. g_isDictFavo = !g_isDictFavo;
  581. if(g_isDictFavo){
  582. document.getElementById("temp").innerHTML = "★";
  583. }
  584. else{
  585. document.getElementById("temp").innerHTML = "☆";
  586. }
  587. }
  588. //用单词表中的一个记录更改经文中的单词
  589. function updataWord(id){
  590. var debugstr;
  591. try{
  592. sPali = document.getElementById("wlpali"+id).value;
  593. sReal = document.getElementById("wlreal"+id).value;
  594. sOrg = document.getElementById("wlorg"+id).value;
  595. sMean = document.getElementById("wlmean"+id).value;
  596. sCase = document.getElementById("wlcase"+id).value;
  597. var m_WordIdList=new Array();
  598. m_WordIdList = wordList[id].wordid.toString().split("$");
  599. var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
  600. for(indexWordList=0;indexWordList<m_WordIdList.length;indexWordList++){
  601. //将修改结果保存到xml DOM中
  602. if(m_WordIdList[indexWordList]>=0){
  603. setNodeText(xAllWord[m_WordIdList[indexWordList]],"pali",sPali);
  604. setNodeText(xAllWord[m_WordIdList[indexWordList]],"real",sReal);
  605. setNodeText(xAllWord[m_WordIdList[indexWordList]],"org",sOrg);
  606. setNodeText(xAllWord[m_WordIdList[indexWordList]],"mean",sMean);
  607. setNodeText(xAllWord[m_WordIdList[indexWordList]],"case",sCase);
  608. var sId = getNodeText(xAllWord[m_WordIdList[indexWordList]],"id");
  609. var wordDetail = renderWordDetailById(sId);
  610. var strDetailName="detail" + sId;
  611. document.getElementById(strDetailName).innerHTML = wordDetail;
  612. updataWordHeadById(sId);
  613. }
  614. }
  615. var_dump(""+m_WordIdList.length+"");
  616. document.getElementById("wlApply"+id).disabled=true;
  617. }
  618. catch(e){
  619. var_dump(e);
  620. }
  621. }
  622. //比较两个词是否一样
  623. function compareWordInList(word1,word2){
  624. var sItems1=new Array();
  625. sItem1 = word1.split(";");
  626. var sItems2=new Array();
  627. sItem2 = word2.split(";");
  628. var sConcat1=sItem1[0]+sItem1[1]+sItem1[2]+sItem1[3];
  629. var sConcat2=sItem2[0]+sItem1[1]+sItem1[2]+sItem1[3];
  630. if(sConcat1==sConcat2){
  631. return(true);
  632. }
  633. else{
  634. return(false);
  635. }
  636. }
  637. function sortWordList(strOrderby){
  638. g_wordListOrderby = strOrderby;
  639. g_wordListOrder = !g_wordListOrder;
  640. refreshWordList();
  641. }
  642. function CountVocabulary(){
  643. var sPali = "";
  644. var sOrg = "";
  645. var sMean = "";
  646. var sCase ="";
  647. var wordList1=new Array();
  648. var arrCombinWord=new Array();
  649. var arrCombinWordOrder=new Array();
  650. var arrCount=new Array();
  651. var iCount = 0;
  652. var sTableWordList="";
  653. var arrowCount="";
  654. var arrowPali="";
  655. var arrowReal="";
  656. //提取所有词
  657. var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
  658. if(xAllWord.length==0){
  659. return("no word data.");
  660. }
  661. var outWordList="";
  662. for(iword=0;iword<xAllWord.length;iword++)
  663. {
  664. var objWord = new Object;
  665. objWord.id = getNodeText(xAllWord[iword],"id");
  666. objWord.pali = getNodeText(xAllWord[iword],"pali");
  667. objWord.real = getNodeText(xAllWord[iword],"real");
  668. objWord.mean = getNodeText(xAllWord[iword],"mean");
  669. objWord.org = getNodeText(xAllWord[iword],"org");
  670. objWord.om = getNodeText(xAllWord[iword],"om");
  671. objWord.case = getNodeText(xAllWord[iword],"case");
  672. objWord.index=iword;
  673. objWord.count=1;
  674. objWord.wordid=iword;
  675. if(objWord.real!=""){
  676. addWordToWordList(wordList1,objWord);
  677. }
  678. }
  679. return(wordList1.length);
  680. }
  681. //生成单词列表
  682. function makeWordList(){
  683. var sPali = "";
  684. var sOrg = "";
  685. var sMean = "";
  686. var sCase ="";
  687. var arrCombinWord=new Array();
  688. var arrCombinWordOrder=new Array();
  689. var arrCount=new Array();
  690. var iCount = 0;
  691. var sTableWordList="";
  692. var arrowCount="";
  693. var arrowPali="";
  694. var arrowReal="";
  695. //提取所有词
  696. var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
  697. if(xAllWord.length==0){
  698. return("no word data.");
  699. }
  700. var outWordList="";
  701. for(iword=0;iword<xAllWord.length;iword++)
  702. {
  703. var objWord = new Object;
  704. objWord.id = getNodeText(xAllWord[iword],"id");
  705. objWord.pali = getNodeText(xAllWord[iword],"pali");
  706. objWord.real = getNodeText(xAllWord[iword],"real");
  707. objWord.mean = getNodeText(xAllWord[iword],"mean");
  708. objWord.org = getNodeText(xAllWord[iword],"org");
  709. objWord.om = getNodeText(xAllWord[iword],"om");
  710. objWord.case = getNodeText(xAllWord[iword],"case");
  711. objWord.index=iword;
  712. objWord.count=1;
  713. objWord.wordid=iword;
  714. if(objWord.real!=""){
  715. addWordToWordList(wordList,objWord)
  716. }
  717. }
  718. switch(g_wordListOrderby){
  719. case "count":
  720. if(g_wordListOrder){
  721. wordList.sort(sortCountDesc)
  722. arrowCount="↓";
  723. }
  724. else{
  725. wordList.sort(sortCountAsc)
  726. arrowCount="↑";
  727. }
  728. break;
  729. case "pali":
  730. if(g_wordListOrder){
  731. wordList.sort(sortPaliDesc)
  732. arrowPali="↓";
  733. }else{
  734. wordList.sort(sortPaliAsc)
  735. arrowPali="↑";
  736. }
  737. break;
  738. case "real":
  739. if(g_wordListOrder){
  740. wordList.sort(sortRealDesc)
  741. arrowReal="↓";
  742. }else{
  743. wordList.sort(sortRealAsc)
  744. arrowReal="↑";
  745. }
  746. break;
  747. }
  748. sTableWordList = sTableWordList + "<table border='0' cellpadding='3' ><tr class='h'>";
  749. sTableWordList = sTableWordList + "<th>序号</th>";
  750. sTableWordList = sTableWordList + "<th><a herf=\"\" onclick=\"sortWordList('count')\">计数"+arrowCount+"</a></th>";
  751. sTableWordList = sTableWordList + "<th><a herf=\"\" onclick=\"sortWordList('pali')\">Pali"+arrowPali+"</a></th>";
  752. sTableWordList = sTableWordList + "<th><a herf=\"\" onclick=\"sortWordList('real')\">Real"+arrowReal+"</a></th>";
  753. sTableWordList = sTableWordList + "<th>原型</th>";
  754. sTableWordList = sTableWordList + "<th>译文</th>";
  755. sTableWordList = sTableWordList + "<th>语法</th>";
  756. sTableWordList = sTableWordList + "<th><button type='button' id='btnApplyAll' onclick=\"applyAllWordInList(this)\" disabled>Apply All</button></th></tr>";
  757. for(var i=0; i<wordList.length;i++){
  758. objWord=wordList[i];
  759. sTableWordList += "<tr><td>"+i+"</td>"
  760. sTableWordList += "<td id='tablepali"+i+"'>"+objWord.count+"</td>"
  761. //sTableWordList += "<td>" +objWord.pali + "</td>";
  762. //sTableWordList += "<td>" +objWord.real + "</td>";
  763. sTableWordList += "<td><input id=\"wlpali"+i+"\" onkeyup=\"wordListItemChanged('wlApply"+i+"')\" value = '" + objWord.pali + "' />";
  764. sTableWordList += "<td><input id=\"wlreal"+i+"\" onkeyup=\"wordListItemChanged('wlApply"+i+"')\" value = '" + objWord.real + "' /></td>";
  765. sTableWordList += "<td><input id=\"wlorg"+i+"\" onkeyup=\"wordListItemChanged('wlApply"+i+"')\" value = '" + objWord.org + "' />";
  766. sTableWordList += "<td><input id=\"wlmean"+i+"\" onkeyup=\"wordListItemChanged('wlApply"+i+"')\" value = '" + objWord.mean + "' /></td>";
  767. sTableWordList += "<td><input id=\"wlcase"+i+"\" onkeyup=\"wordListItemChanged('wlApply"+i+"')\" value = '" + objWord.case + "' /></td>";
  768. sTableWordList += "<td><button id=\"wlApply"+i+"\" onclick=\"updataWord('"+i+"')\" type='button' disabled >Apply</button></td></tr>";
  769. }
  770. sTableWordList = sTableWordList + "</table>";
  771. g_countWordList=wordList.length;
  772. return(sTableWordList);
  773. }
  774. function sortCountDesc(a,b)
  775. {
  776. return a.count - b.count
  777. }
  778. function sortCountAsc(a,b)
  779. {
  780. return b.count - a.count
  781. }
  782. function sortPaliDesc(a,b)
  783. {
  784. return a.pali.localeCompare(b.pali)
  785. }
  786. function sortPaliAsc(a,b)
  787. {
  788. return b.pali.localeCompare(a.pali)
  789. }
  790. function sortRealDesc(a,b)
  791. {
  792. return a.real.localeCompare(b.real)
  793. }
  794. function sortRealAsc(a,b)
  795. {
  796. return b.real.localeCompare(a.real)
  797. }
  798. function addWordToWordList(wordArray,newWord){
  799. var index=-1;
  800. for(var i=0;i<wordArray.length;i++){
  801. if(wordArray[i].pali==newWord.pali){
  802. if(wordArray[i].real==newWord.real){
  803. if(wordArray[i].mean==newWord.mean){
  804. if(wordArray[i].org==newWord.org){
  805. if(wordArray[i].om==newWord.om){
  806. if(wordArray[i].case==newWord.case){
  807. index=i;
  808. break;
  809. }
  810. }
  811. }
  812. }
  813. }
  814. }
  815. }
  816. if(index>=0){
  817. wordArray[index].count++;
  818. wordArray[index].wordid+="$"+newWord.index
  819. }
  820. else{
  821. wordArray.push(newWord)
  822. }
  823. }
  824. function refreshWordList(){
  825. document.getElementById("word_table_inner").innerHTML = makeWordList();
  826. }
  827. function wordListItemChanged(btnApplyId){
  828. try{
  829. document.getElementById(btnApplyId).disabled=false;
  830. document.getElementById("btnApplyAll").disabled=false;
  831. }
  832. catch(e){
  833. alert(e);
  834. }
  835. }
  836. function applyAllWordInList(){
  837. for(var i=0;i<g_countWordList;i++){
  838. if(document.getElementById("wlApply"+i).disabled==false){
  839. updataWord(i);
  840. }
  841. }
  842. document.getElementById("btnApplyAll").disabled=true;
  843. }
  844. function tran_edit(iSutta,iPar,iTran){
  845. gTextEditMediaType="translate";
  846. gSutta=iSutta;
  847. gPar=iPar;
  848. gTran=iTran;
  849. var tranText = getTranText(iSutta,iPar,iTran);
  850. document.getElementById("id_text_edit_area").value=tranText;
  851. document.getElementById("id_text_edit_form").style.display="block";
  852. }
  853. /*make book mark*/
  854. function bookMark(){
  855. var colorStyle="";
  856. var strBookMark="";
  857. var iWordCount=0;
  858. xWord = gXmlBookDataBody.getElementsByTagName("word");
  859. /*遍历所有单词*/
  860. var xBlock = gXmlBookDataBody.getElementsByTagName("block");
  861. var iWordCount=0;
  862. for(iBlock=0;iBlock<xBlock.length;iBlock++){
  863. var xData=xBlock[iBlock].getElementsByTagName("data")[0]
  864. parInfo = xBlock[iBlock].getElementsByTagName("info")[0];
  865. book=getNodeText(parInfo,"book");
  866. parNo=getNodeText(parInfo,"paragraph");
  867. xWord = xData.getElementsByTagName("word");
  868. for(k=0;k<xWord.length;k++)
  869. {
  870. strWordPali = getNodeText(xWord[k],"pali");
  871. strWordMean = getNodeText(xWord[k],"mean");
  872. strWordId = getNodeText(xWord[k],"id");
  873. strWordBookMarkColor = getNodeText(xWord[k],"bmc");
  874. if(strWordBookMarkColor.length>0){
  875. if(strWordBookMarkColor.substr(3,1)!=0){/*屏蔽显示注释的Bug*/
  876. var markString = strWordBookMarkColor.substr(3,1);
  877. colorStyle = "bookmarkcolor"+markString;
  878. var bookMarkId = "w"+strWordId;
  879. strBookMark += "<p class=\"bm"+markString+"\"><span class='bookmarkcolorblock , "+colorStyle+"'>"+markString+"</span>";
  880. //strBookMark += "<a href=\"#"+bookMarkId+"\">"+strWordPali+":"+strWordMean.substr(3,10)+"</a></p>";
  881. strBookMark += "<a onclick=\"editor_goto_link('"+book+"',"+parNo+",'"+bookMarkId+"')\">"+strWordPali+":"+strWordMean.substr(3,10)+"</a></p>";
  882. }
  883. }
  884. iWordCount++;
  885. }
  886. }
  887. return(strBookMark);
  888. }
  889. function setBookmarkVisibility_all(){
  890. var book_MarkId_array=new Array();
  891. var book_MarkClass_array=new Array();
  892. for(bookMark_i in g_bookMark_array){
  893. book_MarkId_array.push("B_Bookmark_"+g_bookMark_array[bookMark_i]);
  894. book_MarkClass_array.push("bm"+g_bookMark_array[bookMark_i]);
  895. }
  896. var isVisible = document.getElementById('B_Bookmark_All').checked;
  897. for(bookMark_j in book_MarkId_array){
  898. eval("document.getElementById('"+book_MarkId_array[bookMark_j]+"').checked=isVisible");
  899. getStyleClass(book_MarkClass_array[bookMark_j]).style.display = (isVisible ? 'block' : 'none');
  900. var book_mark_spanId="";
  901. book_mark_spanId=book_MarkId_array[bookMark_j]+"_span"
  902. if(isVisible==true){
  903. eval("lock_key("+book_mark_spanId+".id,'on','"+book_MarkId_array[bookMark_j]+"','bookmark')");
  904. }
  905. else{
  906. eval("lock_key("+book_mark_spanId+".id,'off','"+book_MarkId_array[bookMark_j]+"','bookmark')");
  907. }
  908. }
  909. }
  910. function setBookmarkVisibility(className,controlID){
  911. var isVisible = document.getElementById(controlID).checked;
  912. getStyleClass(className).style.display = (isVisible ? 'flex' : 'none');
  913. }
  914. /*刷新书签*/
  915. function refreshBookMark(){
  916. document.getElementById("navi_bookmark_inner").innerHTML = bookMark();
  917. }
  918. /*Apply all system match words*/
  919. function applyAllSysMatch(){
  920. var iWordCount=0;
  921. var iModified=0;
  922. xWord = gXmlBookDataBody.getElementsByTagName("word");
  923. /*遍历此经中所有单词*/
  924. for(k=0;k<xWord.length;k++)
  925. {
  926. {
  927. if(getNodeText(xWord[k],"bmc")=="bmca"){
  928. setNodeText(xWord[k],"bmc","bmc0")
  929. updataWordBodyByElement(xWord[k]);
  930. iModified++;
  931. }
  932. }
  933. iWordCount++;
  934. }
  935. if(iWordCount>0){
  936. document.getElementById("navi_bookmark_inner").innerHTML = bookMark();
  937. }
  938. var_dump(iModified+"个单词被确认。")
  939. }
  940. function setUseMode(strUseMode){
  941. var multi_trans_strUseMode=gLocal.gui.edit
  942. if(strUseMode=="Read"){
  943. multi_trans_strUseMode="<svg class=\"icon\"><use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"svg/icon.svg#ic_reader_mode\"></use></svg>"
  944. }
  945. else{
  946. multi_trans_strUseMode="<svg class=\"icon\"><use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"svg/icon.svg#ic_mode_edit\"></use></svg>"
  947. }
  948. document.getElementById("use_mode").innerHTML = multi_trans_strUseMode+"<svg class=\"small_icon\"><use xlink:href=\"svg/icon.svg#ic_down\"></use></svg>";
  949. switch(strUseMode){
  950. case "Read":
  951. g_useMode="read";
  952. getStyleClass('edit_tran_button').style.display = "none";
  953. getStyleClass('edit_tool').style.display = "none";
  954. getStyleClass('tran_input').style.display = "none";
  955. break;
  956. case "Edit":
  957. g_useMode="edit";
  958. getStyleClass('edit_tran_button').style.display = "inline";
  959. getStyleClass('edit_tool').style.display = "inline";
  960. getStyleClass('tran_input').style.display = "none";
  961. break;
  962. case "Translate":
  963. g_useMode="translate";
  964. getStyleClass('edit_tran_button').style.display = "inline";
  965. getStyleClass('tran_input').style.display = "block";
  966. break;
  967. }
  968. if(gXmlBookDataBody!=null){
  969. var mWordNode = gXmlBookDataBody.getElementsByTagName("word");
  970. /*遍历所有单词*/
  971. for(k=0;k<mWordNode.length;k++)
  972. {
  973. modifyWordDetailByWordIndex(k);
  974. }
  975. }
  976. document.getElementById('menuUseMode').style.display = "none";
  977. }
  978. function setUseMode_Static(strUseMode){
  979. if(strUseMode=="chanting"){
  980. document.getElementById("use_mode").innerHTML = "Chanting";
  981. g_useMode="chanting";
  982. getStyleClass('chanting_enter').style.display = "block";
  983. }
  984. else{
  985. document.getElementById("use_mode").innerHTML = "Read";
  986. g_useMode="read";
  987. getStyleClass('chanting_enter').style.display = "none";
  988. }
  989. dropbtnClick("menu01");
  990. }
  991. function hiddenMenu(){
  992. getStyleClass('dropdown-content').style.display = 'none';
  993. }
  994. function splitAll(){
  995. var un_Dict = gXmlBookDataBody.getElementsByTagName("word");//拿到數組
  996. var un_count=0
  997. for(i_un=0;i_un<un_Dict.length;i_un++)
  998. {
  999. un_case=getNodeText(un_Dict[i_un],"case");
  1000. un_id=getNodeText(un_Dict[i_un],"id");
  1001. if(un_case.lastIndexOf(".un.")!=-1)
  1002. {//un_case.indexOf("#")>=0;
  1003. //nextElement=com_get_nextsibling(xmlElement);
  1004. //if(getNodeText(un_Dict[i_un+1],"case")!=null){//若不為空
  1005. /*if(getNodeText(nextElement,"un")==getNodeText(wordNode,"id")){//若孩子則——
  1006. //}
  1007. //else{//無kid展開按鈕*/
  1008. edit_un_split(un_id);
  1009. un_count=un_count+1
  1010. }
  1011. /*}
  1012. else{//無標點,拆
  1013. edit_un_split(un_id);
  1014. un_count=un_count+1
  1015. }*/
  1016. }
  1017. var_dump(un_count+" "+gLocal.gui.allsplit);
  1018. }
  1019. //getNodeText(xDict[iword],"case");返回case信息,.indexOf("#")>=0檢查#,用split拆,取[0]==.un.,
  1020. function sortMeanByDictOrder(wa, wb)
  1021. {
  1022. var w1=wa.split('$')[0];
  1023. var w2=wb.split('$')[0];
  1024. var index1=wa.split('$')[1];
  1025. var index2=wb.split('$')[1];
  1026. //order by dictionary index
  1027. order=w1-w2;
  1028. if(order==0){
  1029. //if dictionay is same order by index of meaning array
  1030. order=index1-index2;
  1031. }
  1032. return order
  1033. }
  1034. function sortMeanByLanguageOrder(wa, wb)
  1035. {
  1036. var w1=wa.split('$')[4];
  1037. var w2=wb.split('$')[4];
  1038. //order by dictionary index
  1039. order=w1-w2;
  1040. return order
  1041. }
  1042. function removeSameWordInArray(wordList){
  1043. var output = new Array();
  1044. for(indexWord in wordList){
  1045. oneWord=wordList[indexWord].split("$");
  1046. var isExist=false;
  1047. for(x in output){
  1048. if(output[x].word==oneWord[3]){
  1049. isExist=true;
  1050. }
  1051. }
  1052. if(!isExist){
  1053. var objWord = new Object();
  1054. objWord.word=oneWord[3];
  1055. objWord.parent=oneWord[2];
  1056. output.push(objWord);
  1057. }
  1058. }
  1059. return(output);
  1060. }