module_function.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. /*
  2. * Modle Init.
  3. * public
  4. * @param param1 (type)
  5. *
  6. * Example usage:
  7. * @code
  8. * @endcode
  9. */
  10. function editor_layout_init() {}
  11. function layoutWordHeadCode(showTo, obj) {
  12. menu_view_script(showTo, obj.value);
  13. }
  14. function menu_view_script(showto, code) {
  15. var xAllWord = gXmlBookDataBody.getElementsByTagName("word");
  16. if (showto == 0 && code == "org") {
  17. for (iWord = 0; iWord < xAllWord.length; iWord++) {
  18. wordId = getNodeText(xAllWord[iWord], "id");
  19. xDiv = document.getElementById("wb" + wordId);
  20. xPali1 = xDiv.getElementsByClassName("paliword1")[0];
  21. xPali1.innerHTML = getNodeText(xAllWord[iWord], "pali");
  22. }
  23. return;
  24. }
  25. if (showto == 1) {
  26. if (code == "none") {
  27. $(".paliword2").css("display", "none");
  28. return;
  29. } else {
  30. $(".paliword2").css("display", "block");
  31. }
  32. }
  33. var xmlHttp = null;
  34. var xmlText = "";
  35. var xmlScript = null;
  36. if (window.XMLHttpRequest) {
  37. // code for IE7, Firefox, Opera, etc.
  38. xmlHttp = new XMLHttpRequest();
  39. } else if (window.ActiveXObject) {
  40. // code for IE6, IE5
  41. xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  42. }
  43. if (xmlHttp != null) {
  44. var d = new Date();
  45. var strLink = "./spt_get.php?code=" + code;
  46. xmlHttp.open("GET", strLink, false);
  47. xmlHttp.send(null);
  48. xmlText = xmlHttp.responseText;
  49. //xmlDict=xmlHttp.responseXML;
  50. } else {
  51. alert("Your browser does not support XMLHTTP.");
  52. }
  53. if (window.DOMParser) {
  54. parser = new DOMParser();
  55. xmlScript = parser.parseFromString(xmlText, "text/xml");
  56. } // Internet Explorer
  57. else {
  58. xmlScript = new ActiveXObject("Microsoft.XMLDOM");
  59. xmlScript.async = "false";
  60. xmlScript.loadXML(xmlText);
  61. }
  62. var arrPaliWords = "";
  63. var xScriptWord = xmlScript.getElementsByTagName("word");
  64. var xPaliWords = document.getElementsByClassName("paliword");
  65. for (iWord = 0; iWord < xAllWord.length; iWord++) {
  66. arrPaliWords = arrPaliWords + "$" + getNodeText(xAllWord[iWord], "real");
  67. }
  68. for (i = 0; i < xScriptWord.length; i++) {
  69. var src = getNodeText(xScriptWord[i], "src");
  70. var dest = getNodeText(xScriptWord[i], "dest");
  71. eval("arrPaliWords = arrPaliWords.replace(/" + src + "/g, dest);");
  72. }
  73. // document.getElementById("scriptinner").innerHTML=arrPaliWords;
  74. var arrDestWords = arrPaliWords.split("$");
  75. for (iWord = 0; iWord < xAllWord.length; iWord++) {
  76. wordId = getNodeText(xAllWord[iWord], "id");
  77. xDiv = document.getElementById("wb" + wordId);
  78. if (xDiv) {
  79. if (showto == 0) {
  80. xPali = xDiv.getElementsByClassName("paliword1")[0];
  81. } else {
  82. xPali = xDiv.getElementsByClassName("paliword2")[0];
  83. }
  84. if (arrDestWords[iWord + 1].length > 0) {
  85. xPali.innerHTML = arrDestWords[iWord + 1];
  86. } else {
  87. xPali.innerHTML = getNodeText(xAllWord[iWord], "pali");
  88. }
  89. }
  90. }
  91. if (xmlScript == null) {
  92. alert("error:can not load dict.");
  93. return;
  94. }
  95. }
  96. function editro_layout_loadStyle() {
  97. var strStyle = getNodeText(gXmlBookDataHead, "style");
  98. document.getElementById("id_layout_style").value = strStyle;
  99. document.getElementById("mycss").innerHTML = strStyle;
  100. }
  101. function editor_layout_applyNewStyle() {
  102. var strStyle = document.getElementById("id_layout_style").value;
  103. document.getElementById("mycss").innerHTML = strStyle;
  104. setNodeText(gXmlBookDataHead, "style", strStyle);
  105. }
  106. //自动将逐词译段落切分为句子
  107. function layout_wbw_auto_cut() {
  108. var xBlock = gXmlBookDataBody.getElementsByTagName("block");
  109. for (var iBlock = 0; iBlock < xBlock.length; iBlock++) {
  110. xmlParInfo = xBlock[iBlock].getElementsByTagName("info")[0];
  111. xmlParData = xBlock[iBlock].getElementsByTagName("data")[0];
  112. var mId = getNodeText(xmlParInfo, "id");
  113. var par_num = getNodeText(xmlParInfo, "paragraph");
  114. var type = getNodeText(xmlParInfo, "type");
  115. if (type == "wbw") {
  116. var splited = getNodeText(xmlParInfo, "splited");
  117. if (splited != 1) {
  118. var Note_Mark = 0;
  119. var Note_Mark1 = 0;
  120. var Note_Mark2 = 0;
  121. var sent_gramma_i = 0;
  122. var word_length_count = 0;
  123. var sent_num = 0;
  124. var arr_Para_ID = new Array();
  125. var allWord = xmlParData.getElementsByTagName("word");
  126. for (var iWord = 0; iWord < allWord.length; iWord++) {
  127. var wID = getNodeText(allWord[iWord], "id");
  128. var wPali = getNodeText(allWord[iWord], "pali");
  129. var wReal = getNodeText(allWord[iWord], "real");
  130. var wType = getNodeText(allWord[iWord], "type");
  131. var wGramma = getNodeText(allWord[iWord], "gramma");
  132. var wCase = getNodeText(allWord[iWord], "case");
  133. var wUn = getNodeText(allWord[iWord], "un");
  134. var wStyle = getNodeText(allWord[iWord], "style");
  135. if ((wType == "" || wType == "?") && wCase != "") {
  136. wType = wCase.split("#")[0];
  137. }
  138. word_length_count += wPali.length;
  139. if (iWord >= 1) {
  140. var pre_pali_spell = getNodeText(allWord[iWord - 1], "pali");
  141. var pre_pali_type = getNodeText(allWord[iWord - 1], "type");
  142. var pre_pali_Gramma = getNodeText(allWord[iWord - 1], "gramma");
  143. var pre_pali_Case = getNodeText(allWord[iWord - 1], "case");
  144. if (pre_pali_type == "" && pre_pali_Case != "") {
  145. pre_pali_type = pre_pali_Case.split("#")[0];
  146. }
  147. if (pre_pali_Case != "" && pre_pali_Case.lastIndexOf("$") != -1) {
  148. var pre_case_array = pre_pali_Case.split("$");
  149. pre_pali_Case = pre_case_array[pre_case_array.length - 1];
  150. }
  151. }
  152. if (iWord + 2 <= allWord.length) {
  153. var next_pali_spell = getNodeText(allWord[iWord + 1], "pali");
  154. var next_pali_type = getNodeText(allWord[iWord + 1], "type");
  155. var next_pali_Gramma = getNodeText(allWord[iWord + 1], "gramma");
  156. var next_pali_Case = getNodeText(allWord[iWord + 1], "case");
  157. if (next_pali_type == "" && next_pali_Case != "") {
  158. next_pali_type = next_pali_Case.split("#")[0];
  159. }
  160. if (next_pali_Case != "" && next_pali_Case.lastIndexOf("$") != -1) {
  161. var next_case_array = next_pali_Case.split("$");
  162. next_pali_Case = next_case_array[next_case_array.length - 1];
  163. }
  164. }
  165. if (next_pali_spell == "(" || wPali == "(") {
  166. Note_Mark1 = 1;
  167. } else if ((pre_pali_spell == ")" || wPali == ")") && Note_Mark1 == 1) {
  168. Note_Mark1 = 0;
  169. } else {
  170. }
  171. if (next_pali_spell == "[" || wPali == "[") {
  172. Note_Mark2 = 1;
  173. } else if ((pre_pali_spell == "]" || wPali == "]") && Note_Mark2 == 1) {
  174. Note_Mark2 = 0;
  175. } else {
  176. }
  177. Note_Mark = Note_Mark1 + Note_Mark2
  178. var isEndOfSen = false;
  179. if (
  180. wPali == "." &&
  181. iWord >= 1 &&
  182. isNaN(pre_pali_spell) &&
  183. iWord != allWord.length - 1 &&
  184. Note_Mark == 0
  185. ) {
  186. //以.結尾且非註釋
  187. if (next_pali_spell != "(" && next_pali_spell != "[") {
  188. isEndOfSen = true;
  189. }
  190. } else if (
  191. /*else if(wPali=="," && iWord>=1 && isNaN(pre_pali_spell) && iWord!=allWord.length-1 && pre_pali_type==".v." && Note_Mark==0){
  192. isEndOfSen=true;
  193. }导致自动匹配前后,句子切分不一致,注释*/
  194. wPali == "–" &&
  195. allWord.length >= iWord + 2 &&
  196. next_pali_spell == "‘" &&
  197. iWord != allWord.length - 1 &&
  198. Note_Mark == 0
  199. ) {
  200. isEndOfSen = true;
  201. } else if (allWord.length >= iWord + 2 && iWord != allWord.length - 1 && Note_Mark == 0) {
  202. //以!或?或;結尾
  203. if (/*wPali=="!" || */ wPali == ";" || wPali == "?") {
  204. if (next_pali_spell != "(" && next_pali_spell != "[") {
  205. isEndOfSen = true;
  206. }
  207. }
  208. }
  209. if (isEndOfSen == true) {
  210. var wEnter = getNodeText(allWord[iWord], "enter");
  211. if (wEnter == "" || wEnter == 0) {
  212. setNodeText(allWord[iWord], "enter", "1");
  213. }
  214. var sent_ID = "sent_" + par_num + "_" + sent_num;
  215. sent_num += 1;
  216. word_length_count = 0;
  217. sent_gramma_i = 0;
  218. arr_Para_ID.push(wID);
  219. }
  220. if (wPali == ",") {
  221. if (next_pali_Case.lastIndexOf(".voc.") != -1 || pre_pali_Case.lastIndexOf(".voc.") != -1) {
  222. sent_gramma_i += 0;
  223. } else {
  224. sent_gramma_i += 1;
  225. }
  226. }
  227. if (wType == ".v:ind." && allWord.length >= iWord + 2 && next_pali_spell != ",") {
  228. sent_gramma_i += 1;
  229. } else if (
  230. wType == ".v." &&
  231. allWord.length >= iWord + 2 &&
  232. next_pali_spell != "." &&
  233. next_pali_spell != ","
  234. ) {
  235. sent_gramma_i += 1;
  236. }
  237. } //段落结束
  238. //重绘
  239. //_display_sbs=1;
  240. //updateWordParBlockInner(xBlock[iBlock]);
  241. var sent_ID = "sent_" + par_num + "_" + sent_num;
  242. arr_Para_ID.push(wID);
  243. arr_par_sent_num.push(sent_ID);
  244. g_arr_Para_ID[par_num] = arr_Para_ID;
  245. //设置已经切分标志
  246. setNodeText(xmlParInfo, "splited", "1");
  247. }
  248. }
  249. }
  250. }
  251. //channel显示隐藏
  252. function channelDisplay(obj) {
  253. let id = $(obj).attr("channel_id");
  254. $(".trans_text_block[channel_id='" + id + "']").toggle();
  255. let allLen = $(obj).parent().parent().children("li").length;
  256. let checkLen = $(obj).parent().parent().children("li").children("input:checked").length;
  257. if(checkLen==0){
  258. $("#layout_channel_display_all").prop("checked",false);
  259. }else if(allLen===checkLen){
  260. $("#layout_channel_display_all").prop("checked",true);
  261. }else{
  262. $("#layout_channel_display_all").prop({checked:false,indeterminate:true});
  263. }
  264. }
  265. //全选或全不选
  266. function channelDisplayAll(obj) {
  267. let all = $(obj).prop("checked");
  268. if(all){
  269. $("#layout_channel_display").children("li").children("input").prop("checked",true);
  270. $(".trans_text_block").show();
  271. }else{
  272. $("#layout_channel_display").children("li").children("input").prop("checked",false);
  273. $(".trans_text_block").hide();
  274. }
  275. }
  276. function renderChannelList(){
  277. let html ="";
  278. html += "<input type='checkbox' id='layout_channel_display_all' checked channel_id='-1' onclick=\"channelDisplayAll(this)\" />全选</li>"
  279. html +="<ul id='layout_channel_display'>";
  280. html += "<li><input type='checkbox' checked channel_id='0' onclick=\"channelDisplay(this)\" />其他</li>"
  281. if (_my_channal != null) {
  282. for (const iterator of _my_channal) {
  283. html += "<li><input type='checkbox' checked channel_id='"+iterator.id+"' onclick=\"channelDisplay(this)\" />"+iterator.name+"</li>"
  284. }
  285. html +="</ul>";
  286. $("#layout_channel_innter").html(html);
  287. }
  288. }