xml.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784
  1. 
  2. var nWord=0;
  3. var xmlDoc = null;
  4. var suttaWordList=new Array();
  5. var g_filename="";
  6. var g_useMode;
  7. function getNodeText(inNode,subTagName){
  8. try{
  9. if(inNode.getElementsByTagName(subTagName).length>0)
  10. {
  11. if(inNode.getElementsByTagName(subTagName)[0].childNodes.length>0){
  12. return(inNode.getElementsByTagName(subTagName)[0].childNodes[0].nodeValue);
  13. }
  14. }
  15. }
  16. catch(error){
  17. var_dump(error);
  18. return("");
  19. }
  20. return("");
  21. }
  22. function setNodeText(inNode,subTagName,strValue){
  23. try{
  24. if(inNode.getElementsByTagName(subTagName).length>0)
  25. {
  26. if(inNode.getElementsByTagName(subTagName)[0].childNodes.length>0){
  27. inNode.getElementsByTagName(subTagName)[0].childNodes[0].nodeValue=strValue;
  28. }
  29. else{
  30. throw "can't accese text node";
  31. }
  32. }
  33. else{
  34. throw subTagName+ ":not a sub Taget";
  35. }
  36. }
  37. catch(error){
  38. var_dump(error);
  39. return(false);
  40. }
  41. return(true);
  42. }
  43. //根据xmlDocument 对象中的单词序号和单词节点创建单词块
  44. //返回 字符串
  45. function createWordBlockByNode(id,wordNode){
  46. }
  47. //根据xmlDocument 对象中的单词序号修改单词块(不含Pali)
  48. //返回 无
  49. function modifyWordDetailByWordId(wordId){
  50. try{
  51. var sDetail="detail"+wordId;
  52. var cDetail = document.getElementById(sDetail);
  53. if(cDetail!=null){
  54. var x = xmlDoc.getElementsByTagName("word");
  55. cDetail.innerHTML = makeWordDetailFromNode(x[wordId]);
  56. }
  57. }
  58. catch(error){
  59. var_dump(error);
  60. }
  61. }
  62. //根据xmlDocument 对象中的单词序号返回单词块字符串(不含Pali)
  63. //返回 字符串
  64. function makeWordDetailFromNode(wordNode){
  65. sId = getNodeText(wordNode,"id");
  66. sOrg = getNodeText(wordNode,"org");
  67. sMean = getNodeText(wordNode,"mean");
  68. sCase = getNodeText(wordNode,"case");
  69. return(makeWordDetailByValue(sId,sOrg,sMean,sCase));
  70. }
  71. //根据xmlDocument 对象中的单词序号返回单词块字符串(不含Pali)
  72. //返回 字符串
  73. function makeWordDetailByValue(inId,inOrg,inMean,inCase){
  74. var _txtOutDetail="";
  75. var _bgColor="";
  76. var _caseColor="";
  77. if(inMean=='?'){
  78. _bgColor=" style='background-color:#EEE' "
  79. }
  80. if(inMean.length>2 && inMean.substr(0,1)=='?'){
  81. _bgColor=" class='bookmarkcolor"+inMean.substr(1,1)+"' ";
  82. inMean = inMean.substring(3);
  83. }
  84. if(inCase=='?' && _bgColor==""){
  85. _caseColor=" style='background-color:#EEE' "
  86. }
  87. if(g_useMode=="read" || g_useMode=="chanting"){
  88. _bgColor="";
  89. _caseColor="";
  90. if(inOrg=="?"){inOrg=" ";}
  91. if(inMean=="?"){inMean=" ";}
  92. if(inCase=="?"){inCase="";}
  93. }
  94. _txtOutDetail = _txtOutDetail + "<div "+_bgColor+">";
  95. _txtOutDetail = _txtOutDetail + "<p class='ID'>";
  96. _txtOutDetail = _txtOutDetail + inId;
  97. _txtOutDetail = _txtOutDetail + "</p>";
  98. _txtOutDetail = _txtOutDetail + "<p class='org' name='w_org'>";
  99. _txtOutDetail = _txtOutDetail + inOrg;
  100. _txtOutDetail = _txtOutDetail + "</p> ";
  101. _txtOutDetail = _txtOutDetail + "<p class='mean'>";
  102. _txtOutDetail = _txtOutDetail + inMean;
  103. _txtOutDetail = _txtOutDetail + "</p> ";
  104. _txtOutDetail = _txtOutDetail + "<p class='case' "+_caseColor+">";
  105. //_txtOutDetail = _txtOutDetail + inCase;
  106. _sItem = new Array();
  107. _sItem = inCase.split("%");
  108. for(iItem=0;iItem<_sItem.length;iItem++){
  109. _sItem2 = new Array();
  110. _sItem2 = _sItem[iItem].split(",");
  111. if(_sItem2.length>1){
  112. _txtOutDetail = _txtOutDetail + "<span class='cell2'><a href='#'>"+_sItem2[0]+"<a></span>";
  113. _txtOutDetail = _txtOutDetail + "<span id=\"casew"+i+"\" class='hidden'>"+_sItem2[0]+"</span>";
  114. }
  115. else //单个值背景绿色
  116. {
  117. if(inCase==''){
  118. _txtOutDetail = _txtOutDetail + "&nbsp;";
  119. }
  120. else if(inCase=='?'){
  121. _txtOutDetail = _txtOutDetail + _sItem[iItem];
  122. }
  123. else{
  124. _txtOutDetail = _txtOutDetail + "<span class='cell'>"+_sItem[iItem]+"</span>";
  125. }
  126. }
  127. }
  128. _txtOutDetail = _txtOutDetail + "</p>";
  129. _txtOutDetail = _txtOutDetail + "</div>";
  130. return(_txtOutDetail);
  131. }
  132. //确认对单个词的修改
  133. function modifyApply(sWordId){
  134. var bApplyAll = document.getElementById("B_Apply_All").checked;
  135. var eWin = document.getElementById("modifywin");
  136. eWin.style.display="none";
  137. var sDetail="detail"+sWordId;
  138. var cDetail = document.getElementById(sDetail);
  139. cDetail.style.display="block";
  140. sOrg = document.getElementById("input_org").value;
  141. sMeaning = document.getElementById("input_meaning").value;
  142. sCase = document.getElementById("input_case").value;
  143. var x = xmlDoc.getElementsByTagName("word");
  144. x[sWordId].getElementsByTagName("org")[0].childNodes[0].nodeValue = sOrg;
  145. x[sWordId].getElementsByTagName("mean")[0].childNodes[0].nodeValue = sMeaning;
  146. x[sWordId].getElementsByTagName("case")[0].childNodes[0].nodeValue = sCase;
  147. modifyWordDetailByWordId(sWordId);
  148. //apply all
  149. if(bApplyAll){
  150. sPaliWord = x[sWordId].getElementsByTagName("pali")[0].childNodes[0].nodeValue;
  151. var iSameWordCount = 0;
  152. for (i=0;i<x.length;i++){
  153. xmlNotePali = x[i].getElementsByTagName("pali")[0].childNodes[0].nodeValue;
  154. if(xmlNotePali.toLowerCase()==sPaliWord.toLowerCase()){
  155. x[i].getElementsByTagName("org")[0].childNodes[0].nodeValue = sOrg;
  156. x[i].getElementsByTagName("mean")[0].childNodes[0].nodeValue = sMeaning;
  157. x[i].getElementsByTagName("case")[0].childNodes[0].nodeValue = sCase;
  158. modifyWordDetailByWordId(i);
  159. iSameWordCount = iSameWordCount+1;
  160. }
  161. }
  162. var_dump("same word:"+(iSameWordCount-1));
  163. }
  164. refreshBookMark();
  165. }
  166. //取消对单个词的修改
  167. function modifyCancel(sWordId){
  168. var eWin = document.getElementById("modifywin");
  169. eWin.style.display="none";
  170. var sDetail="detail"+sWordId;
  171. document.getElementById(sDetail).style.display="block";
  172. }
  173. //显示修改单个词的窗口
  174. function showModifyWin(sWordId){
  175. var xAllWord = xmlDoc.getElementsByTagName("word");
  176. var wid=sWordId;
  177. var tWin="";
  178. var eWord=document.getElementById("wb"+sWordId);
  179. var eWin = document.getElementById("modifywin");
  180. var sOrg = xAllWord[wid].getElementsByTagName("org")[0].childNodes[0].nodeValue;
  181. var sMeaning = xAllWord[wid].getElementsByTagName("mean")[0].childNodes[0].nodeValue;
  182. var cCase = eWord.getElementsByTagName("p")[4].getElementsByTagName("span");
  183. var sCase = xAllWord[wid].getElementsByTagName("case")[0].childNodes[0].nodeValue;
  184. if(g_useMode=="edit"){
  185. tWin=tWin+"<p><input type=\"text\" id=\"input_org\" value=\""+sOrg+"\" name=\"in_org\"/></p>";
  186. tWin=tWin+"<p><input type=\"text\" id=\"input_meaning\" value=\""+sMeaning+"\" name=\"in_meaning\" /></p>";
  187. tWin=tWin+"<p><input type=\"text\" id=\"input_case\" value=\""+sCase+"\" name=\"in_case\" /></p>";
  188. tWin=tWin+"<input id=\"B_Apply_All\" type=\"checkbox\" />Apply to same words";
  189. tWin=tWin+"<div class=\"modifybutton\">";
  190. tWin=tWin+"<p class=\"modify_left\" align=\"center\"><a id=\"modify_ok\" onclick=\"modifyApply('"+sWordId+"')\">Apply</a></p>";
  191. tWin=tWin+"<p class=\"modify_right\" align=\"center\"><a id=\"modify_cancel\" onclick=\"modifyCancel('"+sWordId+"')\">cancel</a></p>";
  192. tWin=tWin+"</div>";
  193. eWin.innerHTML=tWin;
  194. eWin.style.display="block";
  195. eWord.appendChild(eWin);
  196. var sDetail="detail"+sWordId;
  197. document.getElementById(sDetail).style.display="none";
  198. }
  199. }
  200. //用单词表中的一个记录更改经文中的单词
  201. function updataWord(id)
  202. {
  203. var debugstr;
  204. try{
  205. var_dump(suttaWordList[id].insuttaid);
  206. sOrg = document.getElementById("wlorg"+id).value;
  207. sMean = document.getElementById("wlmean"+id).value;
  208. sCase = document.getElementById("wlcase"+id).value;
  209. var m_WordIdList=new Array();
  210. m_WordIdList = suttaWordList[id].insuttaid.split(",");
  211. var xAllWord = xmlDoc.getElementsByTagName("word");
  212. //alert(xAllWord.length);
  213. for(i=0;i<m_WordIdList.length;i++){
  214. //将修改结果保存到xml DOM中
  215. xAllWord[m_WordIdList[i]].getElementsByTagName("org")[0].childNodes[0].nodeValue=sOrg;
  216. xAllWord[m_WordIdList[i]].getElementsByTagName("mean")[0].childNodes[0].nodeValue=sMean;
  217. xAllWord[m_WordIdList[i]].getElementsByTagName("case")[0].childNodes[0].nodeValue=sCase;
  218. var sId = xAllWord[m_WordIdList[i]].getElementsByTagName("id")[0].childNodes[0].nodeValue;
  219. var wordDetail = makeWordDetailByValue(sId,sOrg,sMean,sCase);
  220. //modifyWordDetailByWordId(m_WordIdList[i]);
  221. var strDetailName="detail" + m_WordIdList[i];
  222. document.getElementById(strDetailName).innerHTML = wordDetail;
  223. }
  224. var_dump("成功修改"+m_WordIdList.length+"词");
  225. }
  226. catch(e){
  227. var_dump(e);
  228. }
  229. }
  230. //比较两个词是否一样
  231. function compareWordInList(word1,word2)
  232. {
  233. var sItems1=new Array();
  234. sItem1 = word1.split(";");
  235. var sItems2=new Array();
  236. sItem2 = word2.split(";");
  237. var sConcat1=sItem1[0]+sItem1[1]+sItem1[2]+sItem1[3];
  238. var sConcat2=sItem2[0]+sItem1[1]+sItem1[2]+sItem1[3];
  239. if(sConcat1==sConcat2){
  240. return(true);
  241. }
  242. else{
  243. return(false);
  244. }
  245. }
  246. //生成单词列表
  247. function makeWordList()
  248. {
  249. var sPali = "";
  250. var sOrg = "";
  251. var sMean = "";
  252. var sCase ="";
  253. var arrCombinWord=new Array();
  254. var arrCount=new Array();
  255. var iCount = 0;
  256. var sTableWordList = "<table border='0' cellpadding='3' ><tr class='h'><th>序号</th><th>计数</th><th>原文</th><th>原型</th><th>译文</th><th>语法</th><th><input type='button' value='A'/></th><th><input type='button' value='Apply All'/></th></tr>";
  257. //提取所有词
  258. var xAllWord = xmlDoc.getElementsByTagName("word");
  259. if(xAllWord.length==0){
  260. return("no word data.");
  261. }
  262. var outWordList="";
  263. for(iword=0;iword<xAllWord.length;iword++)
  264. {
  265. sPali = "";
  266. sOrg = "";
  267. sMean = "";
  268. sCase ="";
  269. sPali = getNodeText(xAllWord[iword],"pali");
  270. sOrg = getNodeText(xAllWord[iword],"org");
  271. sMean = getNodeText(xAllWord[iword],"mean");
  272. sCase = getNodeText(xAllWord[iword],"case");
  273. sConcat = sPali.toLowerCase() +";"+ sOrg +";"+ sMean +";"+ sCase + ";" + iword;
  274. arrCombinWord[iword] = sConcat;
  275. }
  276. arrCombinWord.sort();
  277. arrCombinWord.reverse();
  278. var sLastWord = arrCombinWord[0];
  279. var iLastWord = 0;
  280. var iCountSameWord=1;
  281. var iCount=0;
  282. var sWordId=arrCombinWord[0].split(";")[4];
  283. for(iword=1;iword<xAllWord.length;iword++)
  284. {
  285. if(compareWordInList(arrCombinWord[iword],sLastWord)){
  286. iCountSameWord++;
  287. sWordId = sWordId + "," + arrCombinWord[iword].split(";")[4];
  288. }
  289. else{
  290. var sItems=new Array();
  291. sItem = arrCombinWord[iLastWord].split(";");
  292. objWord=new Object();
  293. objWord.pali=sItem[0];
  294. objWord.org = sItem[1];
  295. objWord.mean = sItem[2];
  296. objWord.gramma = sItem[3];
  297. objWord.insuttaid = sWordId;
  298. objWord.newid = iCount;
  299. suttaWordList[iCount]=objWord;
  300. sTableWordList = sTableWordList + "<tr><td>"+iCount+"</td><td id='tablepali"+iCount+"'>"+iCountSameWord+"</td><td>" +sItem[0] + "</td>";
  301. sTableWordList = sTableWordList + "<td><input id=\"wlorg"+iCount+"\" value = '" + sItem[1] + "' /></td>";
  302. sTableWordList = sTableWordList + "<td><input id=\"wlmean"+iCount+"\"value = '" + sItem[2] + "' /></td>";
  303. sTableWordList = sTableWordList + "<td><input id=\"wlcase"+iCount+"\"value = '" + sItem[3] + "' /></td><td><input type='button' value='Fill'/></td><td><input onclick=\"updataWord('"+iCount+"')\" type='button' value='Apply'/></td></tr>";
  304. sLastWord=arrCombinWord[iword];
  305. iLastWord = iword;
  306. sWordId = arrCombinWord[iword].split(";")[4];
  307. iCountSameWord=1;
  308. iCount++;
  309. }
  310. }
  311. sTableWordList = sTableWordList + "</table>";
  312. return(sTableWordList);
  313. }
  314. function refreshWordList(){
  315. document.getElementById("word_table_inner").innerHTML = makeWordList();
  316. }
  317. //load xml
  318. function loadxml(strFileName) {
  319. var txtOut="";
  320. var tContent="";
  321. var strNote="<ul>";
  322. var iWordCount=0;/*整个网页所有单词计数器*/
  323. var aNote=new Array();
  324. var arrDictWordList= new Array();
  325. var aDict=new Array();
  326. var iDictCount=0;
  327. var iInDict=0;
  328. /*
  329. 此代码不支持ie9 及以上版本 所以放弃
  330. // in ie7 ie8 firefox no server can be use!!
  331. if (window.ActiveXObject) {// code for IE
  332. xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  333. }
  334. else if (document.implementation.createDocument) {// code for Mozilla, Firefox, Opera, etc.
  335. xmlDoc = document.implementation.createDocument("", "", null);
  336. }
  337. else {
  338. alert('Your browser cannot handle this script');
  339. }
  340. if (xmlDoc != null) {
  341. xmlDoc.async = false;
  342. try {
  343. xmlDoc.load("books/sutta.xml");
  344. }
  345. }
  346. */
  347. /*
  348. if (window.DOMParser) {
  349. // code for modern browsers
  350. parser = new DOMParser();
  351. xmlDoc = parser.parseFromString(text,"text/xml");
  352. } else {
  353. // code for old IE browsers
  354. xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  355. }
  356. */
  357. xmlHttp=null;
  358. if (window.XMLHttpRequest)
  359. {// code for IE7, Firefox, Opera, etc.
  360. xmlHttp=new XMLHttpRequest();
  361. }
  362. else if (window.ActiveXObject)
  363. {// code for IE6, IE5
  364. xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  365. }
  366. if (xmlHttp!=null)
  367. {
  368. var d=new Date();
  369. xmlHttp.open("GET", strFileName+"?t="+d.getTime(), false);
  370. xmlHttp.send(null);
  371. xmlDoc=xmlHttp.responseXML;
  372. }
  373. else
  374. {
  375. alert("Your browser does not support XMLHTTP.");
  376. }
  377. if (xmlDoc == null){
  378. alert("error:can not open xml file.");
  379. return;
  380. }
  381. try {
  382. var x = xmlDoc.getElementsByTagName("sutta");
  383. if(x.length==0){
  384. alert('error: xml file data error, can not found out sutta data-block.');
  385. return;
  386. }
  387. //提取已经填好的词作为字典
  388. var xDict = xmlDoc.getElementsByTagName("word");
  389. var tOut="";
  390. var sDictPali="";
  391. var sDictId="";
  392. var sDictOrg="";
  393. var sDictMean="";
  394. var sDictCase="";
  395. for(iword=0;iword<xDict.length;iword++)
  396. {
  397. var objDictItem=new Object();/*一个字典元素*/
  398. objDictItem.Pali = getNodeText(xDict[iword],"pali");
  399. objDictItem.Org = getNodeText(xDict[iword],"org");
  400. objDictItem.Mean = getNodeText(xDict[iword],"mean");
  401. objDictItem.Case = getNodeText(xDict[iword],"case");
  402. if(objDictItem.Mean!="?" && objDictItem.Mean!="??"){
  403. arrDictWordList[iDictCount]=objDictItem;
  404. iDictCount++;
  405. tOut += (sDictPali+":"+sDictMean+"$");
  406. }
  407. }
  408. //dict end
  409. /*遍历所有经*/
  410. for (i=0;i<x.length;i++)
  411. {
  412. //load noet
  413. //var xNote = x[i].getElementsByTagName("note");
  414. //for (iNote=0;i<xNote.length;iNote++){
  415. //aNote[iNote]=xNote[iNote].getAttribute("anchor_id");
  416. //}
  417. tSuttaTitle=x[i].getAttribute("id");
  418. txtOut = txtOut + "<div class='sutta' id='"+tSuttaTitle+"'>\n";
  419. xTitle = x[i].getElementsByTagName("title");
  420. txtOut = txtOut + "<div class='sutta_title'>\n";
  421. var cPaliTitle = getNodeText(xTitle[0],"pali"); /*xTitle[0].getElementsByTagName("pali")[0].childNodes[0].nodeValue;*/
  422. var cTranEn = getNodeText(xTitle[0],"en");/*xTitle[0].getElementsByTagName("en")[0].childNodes[0].nodeValue ;*/
  423. var cTranCn = getNodeText(xTitle[0],"cn");/*xTitle[0].getElementsByTagName("cn")[0].childNodes[0].nodeValue;*/
  424. txtOut = txtOut + "<a name='"+tSuttaTitle+"' href='#_Content' >返回目录</a>";
  425. txtOut = txtOut + "<h1>" + cPaliTitle + "</h1>\n";
  426. txtOut = txtOut + "<p class='tran_h1_en' >" + cTranEn + "</p>\n";
  427. txtOut = txtOut + "<p class='tran_h1_cn' >" + cTranCn + "</p>\n";
  428. txtOut = txtOut + "</div>\n";
  429. tContent = tContent + "<p><a href='#"+ tSuttaTitle + "' >"+cPaliTitle + cTranCn + " </a></p> ";
  430. var sPaliWord="";
  431. var sWordId="";
  432. var sOrgWord="";
  433. var sMeanWord="";
  434. var sCaseWord="";
  435. xParagraph = x[i].getElementsByTagName("paragraph");
  436. for (j=0;j<xParagraph.length;j++)
  437. {
  438. txtOut = txtOut + "<div class='sutta_paragraph' >\n";
  439. if(g_is_mobile){
  440. txtOut = txtOut + "<div class='pali_par_mobile'>\n";
  441. }
  442. else{
  443. txtOut = txtOut + "<div class='pali_par'>\n";
  444. }
  445. xPali = xParagraph[j].getElementsByTagName("palipar");
  446. if(xPali.length>0)
  447. {
  448. xWord = xPali[0].getElementsByTagName("word");//如果只有一个palipar
  449. /*遍历此段落中所有单词*/
  450. for(k=0;k<xWord.length;k++)
  451. {
  452. sPaliWord = getNodeText(xWord[k],"pali");
  453. sOrgWord = getNodeText(xWord[k],"org");
  454. sMeanWord = getNodeText(xWord[k],"mean");
  455. sCaseWord = getNodeText(xWord[k],"case");
  456. sIdWord = getNodeText(xWord[k],"id");
  457. sWordId = iWordCount;/*自动的单词计数器*/
  458. if(sPaliWord=="###"){
  459. txtOut = txtOut + "<div class=\"enter\"></div>\n";
  460. }
  461. else{
  462. var txtStyleColor="";
  463. /*将这个词与字典匹配,*/
  464. var iDict=0;
  465. for(iDict=0;iDict<arrDictWordList.length;iDict++)
  466. {
  467. if(sMeanWord=="?")
  468. {
  469. if(sPaliWord==arrDictWordList[iDict].Pali)
  470. {
  471. sOrgWord = arrDictWordList[iDict].Org;
  472. sMeanWord = "?a?"+arrDictWordList[iDict].Mean;
  473. sCaseWord = arrDictWordList[iDict].Case;
  474. setNodeText(xWord[k],"org",sOrgWord);
  475. setNodeText(xWord[k],"mean",sMeanWord);
  476. setNodeText(xWord[k],"case",sCaseWord);
  477. }
  478. }
  479. }
  480. /*输出Pali单词部分*/
  481. /*长度为1的为标点符号*/
  482. if(sPaliWord.length<=1){
  483. txtOut = txtOut + "<div id=\"wb"+sWordId+"\" class='word_punc'> ";
  484. txtOut = txtOut + "<p class='pali' name='wPali'> <span name=\"spali\">";
  485. txtOut = txtOut + sPaliWord;
  486. txtOut = txtOut + "</span></p>\n";
  487. }
  488. else{
  489. txtOut = txtOut + "<div id=\"wb"+sWordId+"\" class='word'> ";
  490. txtOut = txtOut + "<p class='pali' name='wPali'>";
  491. txtOut = txtOut +"<a name='w"+sWordId+"' title=\""+sMeanWord+"\" onclick='showModifyWin(\""+sWordId+"\")'>";
  492. txtOut = txtOut + "<span name=\"spali\">"+sPaliWord+"</span>";
  493. txtOut = txtOut + "</a></p>\n";
  494. }
  495. /*输出Detail块部分*/
  496. /*设置detail 块可见性。非巴利词不可见*/
  497. /*如果不是Pali词隐藏detail*/
  498. if(sPaliWord.match(/[a-z,A-Z]/)==null || sPaliWord.length<=1){
  499. txtStyleColor = " class='hidden' ";
  500. }
  501. if(sPaliWord.match(/[qxw]/)!=null){
  502. txtStyleColor = " class='hidden' ";
  503. }
  504. txtOut = txtOut + "<div "+txtStyleColor+" id='detail"+sWordId+"'>";
  505. txtOut = txtOut + makeWordDetailByValue(sIdWord,sOrgWord,sMeanWord,sCaseWord);
  506. txtOut = txtOut + "</div>";/*detail块结束*/
  507. txtOut = txtOut + "</div>\n";/*单词块结束*/
  508. if( sPaliWord=="." || sPaliWord=="," || sPaliWord=="?"){
  509. txtOut = txtOut + "<div class=\"chanting_enter\"></div>\n";
  510. }
  511. }
  512. iWordCount = iWordCount + 1;
  513. }
  514. txtOut = txtOut + "<div class='clr'></div> ";
  515. txtOut = txtOut + "</div>\n"; /*Pali段落块结束*/
  516. }
  517. /*翻译块开始*/
  518. xTran = xParagraph[j].getElementsByTagName("tran");
  519. if(xTran.length>0)
  520. {
  521. if(g_is_mobile){
  522. txtOut = txtOut + "<div class='tran_par_mobile'>";
  523. }
  524. else{
  525. txtOut = txtOut + "<div class='tran_par'>";
  526. }
  527. var strTranEn = getNodeText(xTran[0],"en");
  528. var strTranCn = getNodeText(xTran[0],"cn");
  529. txtOut = txtOut + "<p class=tran_par_en>" + strTranEn + "</p>";
  530. txtOut = txtOut + "<p class='tran_par_cn'>" + strTranCn + "</p>";
  531. txtOut = txtOut + "</div>\n";
  532. }
  533. txtOut = txtOut + "<div class='clr'></div>";
  534. txtOut = txtOut + "</div>\n";
  535. }
  536. txtOut = txtOut + "</div>\n";
  537. }
  538. document.getElementById("sutta_text").innerHTML = txtOut;
  539. document.getElementById("htmlstring").value = txtOut;
  540. /*document.getElementById("htmlwholestring").value = document.documentElement.innerHTML;*/
  541. document.getElementById("xmlout").value = xmlToString(xmlDoc);
  542. document.getElementById("content").innerHTML = tContent;
  543. document.getElementById("navi_bookmark_inner").innerHTML = bookMark();
  544. nWord=iWordCount;
  545. return;
  546. }
  547. catch (e) {
  548. var_dump("<p>error:"+e+"</p>");
  549. }
  550. }
  551. function save()
  552. {
  553. xmlHttp=null;
  554. var_dump("loading");
  555. if (window.XMLHttpRequest)
  556. {// code for IE7, Firefox, Opera, etc.
  557. xmlHttp=new XMLHttpRequest();
  558. var_dump("test XMLHttpRequest<br/>");
  559. }
  560. else if (window.ActiveXObject)
  561. {// code for IE6, IE5
  562. xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  563. var_dump("testing Microsoft.XMLHTTP<br/>");
  564. }
  565. if (xmlHttp!=null)
  566. {
  567. var_dump("ok");
  568. xmlHttp.open("POST", "dom_http.php", false);
  569. var sendHead="filename="+g_filename+"#";
  570. xmlHttp.send(sendHead+xmlToString(xmlDoc));
  571. var_dump(xmlHttp.responseText);
  572. }
  573. else
  574. {
  575. alert("Your browser does not support XMLHTTP.");
  576. }
  577. }
  578. /*make book mark*/
  579. function bookMark(){
  580. var colorStyle="";
  581. var strBookMark="";
  582. var xSutta = xmlDoc.getElementsByTagName("sutta");
  583. var iWordCount=0;
  584. /*遍历所有经*/
  585. for (i=0;i<xSutta.length;i++)
  586. {
  587. xTitle = xSutta[i].getElementsByTagName("title");
  588. strPaliTitle = xTitle[0].getElementsByTagName("pali")[0].childNodes[0].nodeValue;
  589. strBookMark = strBookMark + "<h3>"+strPaliTitle+"</h3>";
  590. xWord = xSutta[i].getElementsByTagName("word");
  591. /*遍历此经中所有单词*/
  592. for(k=0;k<xWord.length;k++)
  593. {
  594. strWordPali = getNodeText(xWord[k],"pali");
  595. strWordMean = getNodeText(xWord[k],"mean");
  596. if(strWordMean.length>2 && strWordMean.substr(0,1)=="?"){
  597. var markString = strWordMean.substr(1,1);
  598. colorStyle = "bookmarkcolor"+markString;
  599. var bookMarkId = "w"+iWordCount;
  600. strBookMark = strBookMark + "<p class=\"bm"+markString+"\"><span class='bookmarkcolorblock , "+colorStyle+"'>"+markString+"</span><a href=\"#"+bookMarkId+"\">"+strWordPali+":"+strWordMean.substr(3,10)+"</a></p>";
  601. }
  602. iWordCount++;
  603. }
  604. }
  605. return(strBookMark);
  606. }
  607. function setBookmarkVisibility(className,controlID){
  608. var isVisible = document.getElementById(controlID).checked;
  609. getStyleClass(className).style.display = (isVisible ? 'block' : 'none');
  610. }
  611. /*刷新书签*/
  612. function refreshBookMark(){
  613. document.getElementById("navi_bookmark_inner").innerHTML = bookMark();
  614. }
  615. /*Apply all system match words*/
  616. function applyAllSysMatch(){
  617. var xSutta = xmlDoc.getElementsByTagName("sutta");
  618. var iWordCount=0;
  619. var iModified=0;
  620. /*遍历所有经*/
  621. for (i=0;i<xSutta.length;i++)
  622. {
  623. xWord = xSutta[i].getElementsByTagName("word");
  624. /*遍历此经中所有单词*/
  625. for(k=0;k<xWord.length;k++)
  626. {
  627. strWordMean = getNodeText(xWord[k],"mean");
  628. if(strWordMean.length>2){
  629. if(strWordMean.substr(0,3)=="?a?"){
  630. setNodeText(xWord[k],"mean",strWordMean.substr(3));
  631. modifyWordDetailByWordId(iWordCount);
  632. iModified++;
  633. }
  634. }
  635. iWordCount++;
  636. }
  637. }
  638. if(iWordCount>0){
  639. document.getElementById("navi_bookmark_inner").innerHTML = bookMark();
  640. }
  641. var_dump(iModified+"个单词被确认。")
  642. }
  643. function setUseMode(strUseMode){
  644. if(strUseMode=="edit"){
  645. document.getElementById("use_mode").innerHTML = "Edit";
  646. g_useMode="edit";
  647. document.getElementById("xmldata").style.display="block";
  648. getStyleClass('chanting_enter').style.display = "none";
  649. }
  650. else if(strUseMode=="chanting"){
  651. document.getElementById("use_mode").innerHTML = "Chanting";
  652. g_useMode="chanting";
  653. document.getElementById("xmldata").style.display="none";
  654. getStyleClass('chanting_enter').style.display = "block";
  655. }
  656. else{
  657. document.getElementById("use_mode").innerHTML = "Read";
  658. g_useMode="read";
  659. document.getElementById("xmldata").style.display="none";
  660. getStyleClass('chanting_enter').style.display = "none";
  661. }
  662. if(xmlDoc!=null){
  663. var mWordNode = xmlDoc.getElementsByTagName("word");
  664. /*遍历所有单词*/
  665. for(k=0;k<mWordNode.length;k++)
  666. {
  667. modifyWordDetailByWordId(k);
  668. }
  669. }
  670. getStyleClass('dropdown-content').style.display = "none";
  671. }
  672. function dropbtnClick(menuId){
  673. if(document.getElementById(menuId).style.display=="block"){
  674. document.getElementById(menuId).style.display="none";
  675. }
  676. else{
  677. document.getElementById(menuId).style.display="block";
  678. }
  679. }
  680. function setUseMode_Static(strUseMode){
  681. if(strUseMode=="chanting"){
  682. document.getElementById("use_mode").innerHTML = "Chanting";
  683. g_useMode="chanting";
  684. getStyleClass('chanting_enter').style.display = "block";
  685. }
  686. else{
  687. document.getElementById("use_mode").innerHTML = "Read";
  688. g_useMode="read";
  689. getStyleClass('chanting_enter').style.display = "none";
  690. }
  691. dropbtnClick("menu01");
  692. }
  693. function hiddenMenu(){
  694. getStyleClass('dropdown-content').style.display = 'none';
  695. }
  696. function xmlToString(elem){
  697. var serialized;
  698. try{
  699. serializer = new XMLSerializer();
  700. serialized = serializer.serializeToString(elem);
  701. }
  702. catch(e){
  703. serialized = elem.xml;
  704. }
  705. return(serialized);
  706. }