palicannon.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. 
  2. var gCurrSelectedBook;
  3. var gCurrParBegin;
  4. var gCurrParEnd;
  5. var gCurrLoadPar;
  6. var gLoadSteamCanceled=false;
  7. var strC1;
  8. var strC2;
  9. var strC3;
  10. var strC4;
  11. var strBookTitle;
  12. var strBookFolder;
  13. var loadSteamBeginTime="";
  14. /*
  15. * Modle Init.
  16. * public
  17. * @param param1 (type)
  18. *
  19. * Example usage:
  20. * @code
  21. * @endcode
  22. *
  23. * Advanced example:
  24. * @code
  25. * @endcode
  26. */
  27. function palicannon_init(){
  28. }
  29. /*
  30. * When Select Changed , updata select object.
  31. *
  32. * @param obj (object) - changed object
  33. * @return none
  34. */
  35. function pc_pushNewToList(inArray,strNew){
  36. //var isExist=false;
  37. for(x in inArray){
  38. if(inArray[x]==strNew){
  39. return;
  40. }
  41. }
  42. inArray.push(strNew);
  43. }
  44. var palicannon_xmlhttp;
  45. function palicannon_show_filelist(strBook){
  46. if (window.XMLHttpRequest)
  47. {// code for IE7+, Firefox, Chrome, Opera, Safari
  48. palicannon_xmlhttp=new XMLHttpRequest();
  49. }
  50. else
  51. {// code for IE6, IE5
  52. palicannon_xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  53. }
  54. gCurrSelectedBook=strBook;
  55. var d=new Date();
  56. palicannon_xmlhttp.onreadystatechange=palicannon_serverResponse;
  57. palicannon_xmlhttp.open("GET","./pc_get_book_index.php?t="+d.getTime()+"&book="+strBook,true);
  58. palicannon_xmlhttp.send();
  59. }
  60. function palicannon_serverResponse(){
  61. if (palicannon_xmlhttp.readyState==4)// 4 = "loaded"
  62. {
  63. if (palicannon_xmlhttp.status==200)
  64. {// 200 = "OK"
  65. var parList="";
  66. var xmlText = palicannon_xmlhttp.responseText;
  67. if (window.DOMParser)
  68. {
  69. parser=new DOMParser();
  70. xmlBookIndex=parser.parseFromString(xmlText,"text/xml");
  71. }
  72. else // Internet Explorer
  73. {
  74. xmlBookIndex=new ActiveXObject("Microsoft.XMLDOM");
  75. xmlBookIndex.async="false";
  76. xmlBookIndex.loadXML(xmlText);
  77. }
  78. if (xmlBookIndex == null){
  79. alert("error:can not load book index.");
  80. return;
  81. }
  82. gXmlParIndex = xmlBookIndex.getElementsByTagName("paragraph");
  83. document.getElementById('id_palicannon_index_filelist').innerHTML=renderBookToc();
  84. //removeNavTreeButton();
  85. }
  86. else
  87. {
  88. document.getElementById('id_palicannon_index_filelist')="Problem retrieving data:" + xmlhttp.statusText;
  89. }
  90. }
  91. }
  92. function palicannon_showParInfo(parBeginIndex){
  93. var outPut="";
  94. var begin=parBeginIndex;
  95. var end=-1;
  96. parBeginLevel=getNodeText(gXmlParIndex[parBeginIndex],"level");
  97. for(i=begin+1;i<gXmlParIndex.length;i++){
  98. var iLevel=getNodeText(gXmlParIndex[i],"level");
  99. if(iLevel==parBeginLevel){
  100. end = i-1;
  101. break;
  102. }
  103. }
  104. if(end==-1){
  105. end=gXmlParIndex.length-1;
  106. }
  107. outPut +="begin:"+(begin+1)+" end:"+(end+1)+"<br>"
  108. outPut += "<button type=\"button\" onclick=\"palicannon_loadStream('"+gCurrSelectedBook+"',"+(begin+1)+","+(end+1)+")\">Load</button>"
  109. outPut += "<button type=\"button\" onclick=\"palicannon_loadStreamCancel()\">Cancel</button>"
  110. document.getElementById('id_palicannon_selected_par_info').innerHTML=outPut;
  111. }
  112. function palicannon_loadStreamCancel(){
  113. gLoadSteamCanceled=true;
  114. }
  115. /*
  116. * load paragraph from database
  117. * public
  118. * @param book(string) book GUID
  119. * @param parBegin(int)
  120. * @param parEnd(int)
  121. */
  122. function palicannon_loadStream(book,parBegin,parEnd){
  123. document.getElementById("wizard_div").style.display="none";
  124. gCurrParBegin=parBegin;
  125. gCurrParEnd=parEnd;
  126. gCurrLoadPar=parBegin;
  127. gLoadSteamCanceled=false;
  128. //清空单词节点数组
  129. gXmlAllWordInWBW = new Array();
  130. var d=new Date();
  131. loadSteamBeginTime=d.getTime()
  132. document.getElementById("modifyDiv").appendChild(document.getElementById("modifywin"));
  133. insertTocToXmlBookHead(parBegin,parEnd);
  134. palicannon_load_book_par(book,gCurrLoadPar,"vri");
  135. }
  136. var palicannon_xmlLoadBookhttp;
  137. function palicannon_load_book_par(strBook,parIndex,strVer){
  138. if (window.XMLHttpRequest)
  139. {// code for IE7+, Firefox, Chrome, Opera, Safari
  140. palicannon_xmlLoadBookhttp=new XMLHttpRequest();
  141. }
  142. else
  143. {// code for IE6, IE5
  144. palicannon_xmlLoadBookhttp=new ActiveXObject("Microsoft.XMLHTTP");
  145. }
  146. var d=new Date();
  147. palicannon_xmlLoadBookhttp.onreadystatechange=palicannon_load_book_serverResponse;
  148. palicannon_xmlLoadBookhttp.open("GET","./pc_get_book_xml.php?t="+d.getTime()+"&book="+strBook+"&paragraph="+parIndex+"&ver="+strVer,true);
  149. palicannon_xmlLoadBookhttp.send();
  150. }
  151. function palicannon_load_book_serverResponse(){
  152. if (palicannon_xmlLoadBookhttp.readyState==4)// 4 = "loaded"
  153. {
  154. if (palicannon_xmlLoadBookhttp.status==200)
  155. {// 200 = "OK"
  156. var xmlText = palicannon_xmlLoadBookhttp.responseText;
  157. if (window.DOMParser)
  158. {
  159. parser=new DOMParser();
  160. xmlBookPar=parser.parseFromString(xmlText,"text/xml");
  161. }
  162. else // Internet Explorer
  163. {
  164. xmlBookPar=new ActiveXObject("Microsoft.XMLDOM");
  165. xmlBookPar.async="false";
  166. xmlBookPar.loadXML(xmlText);
  167. }
  168. if (xmlBookPar == null){
  169. alert("error:can not load book index.");
  170. return;
  171. }
  172. xmlParBlocks = xmlBookPar.getElementsByTagName("block");
  173. for(iXml=0;iXml<xmlParBlocks.length;iXml++){
  174. insertBlockToHtml(xmlParBlocks[iXml])
  175. insertBlockToXmlBookData(xmlParBlocks[iXml])
  176. }
  177. if(gLoadSteamCanceled){
  178. var_dump("load cancel");
  179. refreshResource();
  180. updataToc()
  181. }
  182. else{
  183. var d=new Date();
  184. loadSteamCurrTime=d.getTime()
  185. passTime=(loadSteamCurrTime-loadSteamBeginTime)/1000;
  186. gCurrLoadPar++;
  187. if(gCurrLoadPar<gCurrParEnd){
  188. progress=(gCurrLoadPar-gCurrParBegin)/(gCurrParEnd-gCurrParBegin)
  189. remainTime=(passTime/progress)-passTime;
  190. document.getElementById('id_book_load_progress').innerHTML=(progress*100).toFixed(1)+"%<br />pass:"+passTime.toFixed(1)+"s remain: "+remainTime.toFixed(1)+"s";
  191. palicannon_load_book_par(gCurrSelectedBook,gCurrLoadPar,"vri");
  192. }
  193. else{
  194. document.getElementById('id_book_load_progress').innerHTML="Load Finished<br />耗时:"+passTime.toFixed(1)+" s";
  195. var_dump("doc load finished");
  196. refreshResource();
  197. updataToc()
  198. }
  199. }
  200. }
  201. else
  202. {
  203. document.getElementById('id_palicannon_index_filelist')="Problem retrieving data:" + xmlhttp.statusText;
  204. }
  205. }
  206. }
  207. //将目录转为目录数据包 插入文档
  208. function insertTocToXmlBookHead(from,to){
  209. count=0;
  210. var newBlockString="<root><block><info></info><data></data></block></root>"
  211. if (window.DOMParser){
  212. parser=new DOMParser();
  213. newXmlBlock=parser.parseFromString(newBlockString,"text/xml");
  214. }
  215. else{ // Internet Explorer
  216. newXmlBlock=new ActiveXObject("Microsoft.XMLDOM");
  217. newXmlBlock.async="false";
  218. newXmlBlock.loadXML(newBlockString);
  219. }
  220. if (newXmlBlock == null){
  221. alert("error:can not load book index.");
  222. return;
  223. }
  224. for(var i=from;i<=to;i++){
  225. var bookId = getNodeText(gXmlParIndex[i-1],"book");
  226. var parId = getNodeText(gXmlParIndex[i-1],"par");
  227. var level = getNodeText(gXmlParIndex[i-1],"level");
  228. var strClass = getNodeText(gXmlParIndex[i-1],"class");
  229. var titleLangauge="en";
  230. var titleAuthor="unkow";
  231. titleLanguage=getNodeText(gXmlParIndex[i-1],"language");
  232. titleAuthor=getNodeText(gXmlParIndex[i-1],"author");
  233. var strTitle = getNodeText(gXmlParIndex[i-1],"title");
  234. cloneBlock=newXmlBlock.cloneNode(true)
  235. newBlock=cloneBlock.getElementsByTagName("block")[0]
  236. xmlNewInfo = newBlock.getElementsByTagName("info")[0];
  237. xmlNewData = newBlock.getElementsByTagName("data")[0];
  238. setNodeText(xmlNewInfo,"type","heading");
  239. setNodeText(xmlNewInfo,"paragraph",parId);
  240. setNodeText(xmlNewInfo,"book",bookId);
  241. setNodeText(xmlNewInfo,"author",titleAuthor);
  242. setNodeText(xmlNewInfo,"language",titleLanguage);
  243. setNodeText(xmlNewInfo,"level",level);
  244. setNodeText(xmlNewInfo,"style",strClass);
  245. setNodeText(xmlNewInfo,"edition",'1');
  246. setNodeText(xmlNewInfo,"subver",'0');
  247. setNodeText(xmlNewInfo,"id",com_guid());
  248. setNodeText(xmlNewData,"text",strTitle);
  249. insertBlockToHtml(newBlock)
  250. gXmlBookDataBody.appendChild(newBlock);
  251. count++;
  252. }
  253. }
  254. //新建目录项目 插入文档
  255. function newHeadBlock(headingInfo){
  256. count=0;
  257. var newBlockString="<root><block><info></info><data></data></block></root>"
  258. if (window.DOMParser){
  259. parser=new DOMParser();
  260. newXmlBlock=parser.parseFromString(newBlockString,"text/xml");
  261. }
  262. else{ // Internet Explorer
  263. newXmlBlock=new ActiveXObject("Microsoft.XMLDOM");
  264. newXmlBlock.async="false";
  265. newXmlBlock.loadXML(newBlockString);
  266. }
  267. if (newXmlBlock == null){
  268. alert("error:can not load book index.");
  269. return;
  270. }
  271. cloneBlock=newXmlBlock.cloneNode(true)
  272. newBlock=cloneBlock.getElementsByTagName("block")[0]
  273. xmlNewInfo = newBlock.getElementsByTagName("info")[0];
  274. xmlNewData = newBlock.getElementsByTagName("data")[0];
  275. setNodeText(xmlNewInfo,"type","heading");
  276. setNodeText(xmlNewInfo,"paragraph",headingInfo.paragraph);
  277. setNodeText(xmlNewInfo,"book",headingInfo.book);
  278. setNodeText(xmlNewInfo,"author",headingInfo.author);
  279. setNodeText(xmlNewInfo,"language",headingInfo.language);
  280. setNodeText(xmlNewInfo,"edition",'1');
  281. setNodeText(xmlNewInfo,"subedition",'0');
  282. setNodeText(xmlNewInfo,"level",headingInfo.level);
  283. setNodeText(xmlNewInfo,"id",com_guid());
  284. setNodeText(xmlNewData,"text",headingInfo.text);
  285. insertBlockToHtml(newBlock)
  286. gXmlBookDataBody.appendChild(newBlock);
  287. }
  288. function palicannon_nav_level_show(showLevel){
  289. getStyleClass('palicannon_nav_level_1').style.display="none";
  290. getStyleClass('palicannon_nav_level_2').style.display="none";
  291. getStyleClass('palicannon_nav_level_3').style.display="none";
  292. switch(showLevel){
  293. case 3:
  294. getStyleClass('palicannon_nav_level_3').style.display="block";
  295. getStyleClass('tree_expand_3').style.display="none";
  296. getStyleClass('tree_collapse_3').style.display="inline";
  297. case 2:
  298. getStyleClass('palicannon_nav_level_2').style.display="block";
  299. getStyleClass('tree_expand_2').style.display="none";
  300. getStyleClass('tree_collapse_2').style.display="inline";
  301. case 1:
  302. getStyleClass('palicannon_nav_level_1').style.display="block";
  303. getStyleClass('tree_expand_1').style.display="inline";
  304. getStyleClass('tree_collapse_1').style.display="none";
  305. }
  306. switch(showLevel){
  307. case 1:
  308. getStyleClass('tree_expand_1').style.display="none";
  309. getStyleClass('tree_collapse_1').style.display="inline";
  310. break;
  311. case 2:
  312. getStyleClass('tree_expand_2').style.display="none";
  313. getStyleClass('tree_collapse_2').style.display="inline";
  314. break;
  315. case 3:
  316. getStyleClass('tree_expand_3').style.display="none";
  317. getStyleClass('tree_collapse_3').style.display="inline";
  318. break;
  319. }
  320. }
  321. function removeNavTreeButton(){
  322. for(i=0;i<gXmlParIndex.length;i++){
  323. obj=document.getElementById("id_pc_nav_par_"+i)
  324. if(obj){
  325. if(obj.getElementsByTagName("ul").length==0){
  326. document.getElementById('id_pc_nav_co_'+i).style.display="none";
  327. document.getElementById('id_pc_nav_ex_'+i).style.display="none";
  328. }
  329. }
  330. }
  331. }
  332. function renderBookToc(){
  333. var output="<ul>";
  334. for(var iPar=0;iPar<gXmlParIndex.length;iPar++){
  335. parTitle=getNodeText(gXmlParIndex[iPar],"title");
  336. parHeadingLevel=getNodeText(gXmlParIndex[iPar],"level");
  337. if(parHeadingLevel>0){
  338. output += "<li id=\"id_pc_nav_par_"+iPar+"\" class=\"palicannon_nav_level_" + parHeadingLevel + "\">";
  339. output += "<span id=\"id_pc_nav_ex_"+iPar+"\" class=\"tree_expand_"+parHeadingLevel+"\">▼</span><span id=\"id_pc_nav_co_"+iPar+"\" class=\"tree_collapse_"+parHeadingLevel+"\">▶</span>";
  340. output += "<a onclick=\"palicannon_showParInfo("+iPar+")\">" + parTitle +"</a>";
  341. output += "</li>"
  342. }
  343. }
  344. output+="</ul>";
  345. return output;
  346. }
  347. function editor_palicanon_bookmark_goto(){
  348. window.location.assign("#"+document.getElementById('editor_palicanon_goto').value)
  349. }
  350. function pc_show_res_selecter(visible){
  351. document.getElementById('wizard_div_palicannon').style.display = (visible ? 'block' : 'none');
  352. }