relation.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. var gRelationSelectWordBegin=false;
  2. function rela_link_click(add=true){
  3. $("#word_tool_bar").hide(1000);
  4. $("#"+gCurrMoseEnterWordId).css("border","none");
  5. gWordHeadBarVisible = false;
  6. var eWin = document.getElementById("modifywin");
  7. if(eWin){
  8. eWin.style.display="block";
  9. gRelationSelectWordBegin=false;
  10. if(add){
  11. let linkOrg = g_currEditWord;
  12. let linkTo = _curr_mouse_enter_wordid;
  13. rela_add(linkOrg , linkTo);
  14. rela_refresh();
  15. }
  16. }
  17. }
  18. function rela_refresh(){
  19. $("#relation_div").html(rela_render_one_word());
  20. }
  21. function rela_add_word(){
  22. var eWin = document.getElementById("modifywin");
  23. if(eWin){
  24. eWin.style.display="none";
  25. gRelationSelectWordBegin=true;
  26. }
  27. }
  28. function rela_word_cancel(){
  29. }
  30. function rela_add(sour,dest){
  31. let xSour = doc_word("#"+sour);
  32. let xDest = doc_word("#"+dest);
  33. let newLink = new Object();
  34. newLink.sour_id=sour;
  35. newLink.sour_spell=xSour.val("real");
  36. newLink.dest_id = dest;
  37. newLink.dest_spell=xDest.val("real");
  38. newLink.relation="";
  39. newLink.note="";
  40. let wordRelation = $("#id_relation_text").val();
  41. let relaData;
  42. if(wordRelation==""){
  43. relaData = new Array();
  44. relaData.push(newLink);
  45. }
  46. else{
  47. try{
  48. relaData=JSON.parse(wordRelation);
  49. relaData.push(newLink);
  50. }
  51. catch(e){
  52. console.error(e+" data:"+wordRelation);
  53. return(false);
  54. }
  55. }
  56. $("#id_relation_text").val(JSON.stringify(relaData));
  57. console.log(relaData);
  58. }
  59. function rela_render_one_word(wordid){
  60. let wordRelation = $("#id_relation_text").val();
  61. let relaData;
  62. let output="";
  63. if(wordRelation==""){
  64. return("");
  65. }
  66. else{
  67. try{
  68. relaData=JSON.parse(wordRelation);
  69. for(x in relaData){
  70. output += "<div><button style='padding: 1px 6px;' onclick=\"rela_del('"+x+"')\">"
  71. output += "<svg class='icon'>";
  72. output += "<use xmlns:xlink='http://www.w3.org/1999/xlink' xlink:href='svg/icon.svg#ic_clear'></use>";
  73. output += "</svg>";
  74. output += "</button>";
  75. let grammar = "";
  76. grammar = $("#input_case").val().split("#")[1];
  77. output += relaData[x].dest_spell + ":"+rela_render_context(wordid,x,relaData[x].relation,grammar);
  78. output += "</div>";
  79. }
  80. }
  81. catch(e){
  82. console.error(e+" data:"+wordRelation);
  83. return("error");
  84. }
  85. }
  86. return(output);
  87. }
  88. function rela_del(index){
  89. let wordRelation = $("#id_relation_text").val();
  90. let relaData;
  91. if(wordRelation!=""){
  92. try{
  93. relaData=JSON.parse(wordRelation);
  94. if(index>=0 && index<relaData.length){
  95. relaData.splice(index,1);
  96. $("#id_relation_text").val(JSON.stringify(relaData));
  97. rela_refresh();
  98. }
  99. }
  100. catch(e){
  101. console.error(e+" data:"+wordRelation);
  102. return(false);
  103. }
  104. }
  105. }
  106. //
  107. function rela_render_context(wordid,index,strRela,grammar){
  108. let output = "";
  109. output += "<div class=\"case_dropdown rela_menu\" style='display: inline-block'>";
  110. output += "<p class=\"case_dropbtn\">";
  111. if(strRela==""){
  112. output += "<span class='relation_blank'>"+gLocal.gui.relation+"</span>";
  113. }
  114. else{
  115. output += "<span class='relation_text'>"+strRela+"</span>";
  116. }
  117. output += "</p>";
  118. output += "<div class=\"case_dropdown-content\">";
  119. output += "<div >";
  120. let language=getCookie("language")
  121. for(let x in list_relation){
  122. if((grammar.indexOf(list_relation[x].case)>=0 || list_relation[x].case=="") && language==list_relation[x].language){
  123. output += "<a onclick=\"rela_menu_item_click('"+wordid+"','"+index+"','"+list_relation[x].id+"')\"><span class='rela_bold'>"+list_relation[x].id+"</span>("+list_relation[x].note+")</a>";
  124. }
  125. }
  126. output += " </div>";
  127. output += "</div>";
  128. output += "</div>";
  129. return(output);
  130. }
  131. function rela_menu_item_click(wordid,index,str){
  132. let xWord = doc_word("#"+wordid);
  133. let wordRelation = $("#id_relation_text").val();
  134. let relaData;
  135. let output;
  136. if(wordRelation==""){
  137. return;
  138. }
  139. else{
  140. try{
  141. relaData=JSON.parse(wordRelation);
  142. if(index<relaData.length){
  143. relaData[index].relation=str;
  144. }
  145. else{
  146. console.error("rela_menu_item_click-out of relaData array");
  147. }
  148. }
  149. catch(e){
  150. console.error(e+" data:"+wordRelation);
  151. return;
  152. }
  153. }
  154. $("#id_relation_text").val(JSON.stringify(relaData));
  155. rela_refresh();
  156. }
  157. //set visibility of relation
  158. function rela_visibility(obj){
  159. }
  160. function relation_link_show(wordid){
  161. let strRelation = doc_word("#"+wordid).val("rela");
  162. let relaData;
  163. try{
  164. if(strRelation!=""){
  165. relaData=JSON.parse(strRelation);
  166. if(relaData.length>0){
  167. for(let x =0 ; x<relaData.length;x++){
  168. let wordid=relaData[x].dest_id;
  169. let divRelaTag=document.createElement("rela");
  170. let typ=document.createAttribute("class");
  171. typ.nodeValue="relation_tag";
  172. divRelaTag.attributes.setNamedItem(typ);
  173. let typId=document.createAttribute("id");
  174. typId.nodeValue="rt_"+x;
  175. divRelaTag.attributes.setNamedItem(typId);
  176. let eWord=document.getElementById("wb"+wordid);
  177. let eWordHead=document.getElementById("whead_"+wordid);
  178. eWord.insertBefore(divRelaTag,eWordHead);
  179. divRelaTag.innerHTML=relaData[x].relation;
  180. }
  181. }
  182. }
  183. }
  184. catch(e){
  185. console.error(e);
  186. }
  187. }
  188. function relation_link_hide(){
  189. $("rela").remove();
  190. }
  191. function updateWordRelation(element){
  192. let id=getNodeText(element,"id");
  193. $("#wnr_"+id).html(renderWordRelation(element));
  194. }
  195. function renderWordRelationByString(pali,rela,wid){
  196. let paliword=pali;
  197. let wRelation=rela;
  198. let id=wid;
  199. let output="";
  200. if(wRelation==""){
  201. return("");
  202. }
  203. else{
  204. let relaData;
  205. try{
  206. relaData=JSON.parse(wRelation);
  207. if(relaData.length>0){
  208. for(let x in relaData){
  209. output += "<strong>"+paliword +"</strong>—<span class='relation_note'>"+relaData[x].relation+"</span>→<strong>"+relaData[x].dest_spell+"</strong><br>";
  210. }
  211. }
  212. else{
  213. return("");
  214. }
  215. }
  216. catch(e){
  217. return("");
  218. console.error(e+" data:"+wRelation);
  219. return(false);
  220. }
  221. return(output);
  222. }
  223. }
  224. function renderWordRelation(element){
  225. let paliword=getNodeText(element,"real");
  226. let wRelation=getNodeText(element,"rela");
  227. let id=getNodeText(element,"id");
  228. return(renderWordRelationByString(paliword,wRelation,id));
  229. }