awtEx.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. var AwtOn = '1';
  2. var AwtServerIp = "128.127.100.128";
  3. var AwtServerPort = "8080";
  4. var AwtSearchUrl = "http://" + AwtServerIp + ":" + AwtServerPort + "/awtSearchKnuh.jsp";
  5. var AwtAjaxUrl = "./awtAjaxKnuh.jsp";
  6. AwtBrowser.navigate(AwtSearchUrl);
  7. var AwtCtrl = null;
  8. var AwtWordBegin = -1;
  9. var AwtWordEnd = -1;
  10. var AwtSendWord = null;
  11. var AwtCarrotPos = 0;
  12. function AwtSearchKnuh() {
  13. if (event.keyCode == 113) {
  14. attachAwtByObject();
  15. AwtShow();
  16. if (AwtGetSearchWord()) {
  17. //alert("f '" + AwtWordBegin);
  18. //alert("f '" + AwtWordEnd);
  19. //alert("f '" + AwtSendWord + "'");
  20. if (AwtSendWord != "") {
  21. AwtBrowser.document.parentWindow.execScript("AwtSearchLike('" + AwtAjaxUrl + "', '" + AwtSendWord + "')", "javascript");
  22. }
  23. }
  24. } else if (event.keyCode == 32 || event.keyCode == 13 || event.keyCode == 188 || event.keyCode == 190 || event.keyCode == 222) { //,188 .190 '222
  25. if (AwtOn != '1')
  26. return;
  27. if (AwtGetSearchWord()) {
  28. //alert("f '" + AwtWordBegin);
  29. //alert("f '" + AwtWordEnd);
  30. //alert("f '" + AwtSendWord + "'");
  31. AwtBrowser.document.parentWindow.execScript("AwtSearchOne('" + AwtAjaxUrl + "', '" + AwtSendWord + "')", "javascript");
  32. }
  33. }
  34. }
  35. function attachAwtByObject() {
  36. if (document.controls(event.currentTarget).elementName.replace("xforms:", "") == "datagrid")
  37. AwtCtrl = document.controls(event.currentTarget).input;
  38. else
  39. AwtCtrl = document.controls(event.currentTarget);
  40. var top = 0;
  41. var left = 0;
  42. var width = 0;
  43. var height = 0;
  44. /*
  45. if (document.controls(objId).elementName == "xforms:datagrid")
  46. objId = objId + ".input";
  47. var obj = document.controls(objId);
  48. */
  49. var obj = AwtCtrl;
  50. var pObj = obj.parent;
  51. while (pObj != null && pObj.attribute("id") != "body") {
  52. top = top + parseInt(pObj.attribute("top").replace("px", ""));
  53. left = left + parseInt(pObj.attribute("left").replace("px", ""));
  54. //alert(pObj.attribute("id") + "-" + top);
  55. pObj = pObj.parent;
  56. }
  57. width = parseInt(obj.attribute("width").replace("px", ""));
  58. height = parseInt(obj.attribute("height").replace("px", ""));
  59. top = top + parseInt(obj.attribute("top").replace("px", ""));
  60. left = left + parseInt(obj.attribute("left").replace("px", ""));
  61. //alert(window.height + "-" + top + "-" + height + "-" + 311);
  62. if (window.height < top + height + 190) {
  63. top = top - 190 - height;
  64. //alert("A" + top);
  65. } else {
  66. //alert("B" + top);
  67. }
  68. //alert(window.width + "-" + left + "-" + 209);
  69. if (window.width < left + 209) {
  70. //left = left - 209;
  71. //alert("C" + left);
  72. } else {
  73. //alert("D" + left);
  74. }
  75. //alert(window.height + "-" + top);
  76. //alert(window.height + "-" + left);
  77. AwtGroup.attribute("top") = top + height;
  78. AwtGroup.attribute("left") = left;
  79. //alert(AwtGroup.attribute("top"));
  80. //alert(AwtGroup.attribute("left"));
  81. //alert('attachAwtByObject-' + AwtShowSearch);
  82. }
  83. function AwtGetSearchWord() {
  84. if (document.controls(event.currentTarget).elementName.replace("xforms:", "") == "datagrid")
  85. AwtCtrl = document.controls(event.currentTarget).input;
  86. else
  87. AwtCtrl = document.controls(event.currentTarget);
  88. if (AwtCtrl.selBegin != AwtCtrl.selEnd)
  89. return false;
  90. var text = AwtCtrl.currentText;
  91. //캐럿의 위치를 기준으로 앞으로 구분자를 찾음
  92. //구분자을 만나면 캐럿위치의 단어의 시작, 끝 부분임(단, 단어가 시작하기 전에 구분자를 만나면 무시)
  93. var beforeIsGubun = false;
  94. var found1 = false;
  95. var foundC = false;
  96. var nowWordStartPos = AwtCtrl.selBegin - 1; //space를 못찾으면 그냥 첫 위치(0)가 들어감
  97. for (j = nowWordStartPos; j >= 0; j--) {
  98. //alert(j + " " + text.charAt(j) + " " + foundC);
  99. if (text.charAt(j) == ' ' //space
  100. || text.charAt(j) == ' ' //tab
  101. || text.charAt(j) == '\n' //enter
  102. || text.charAt(j) == '.' //.
  103. || text.charAt(j) == ',' //,
  104. || text.charAt(j) == '\'' //'
  105. || text.charAt(j) == '"' //"
  106. ) {
  107. if (j == nowWordStartPos) { //처음부터 구분자가 나오면
  108. if (beforeIsGubun == true) //좀전에 찾앗던 단어가 구분자이면...
  109. return false; //구분자가 두번연속으로 나온 경우리므로 return
  110. nowWordStartPos = j - 1; //구분자가 두번 반복될때를 대비해서 처음시작을 하나 이동시킴
  111. //alert("yyy" + nowWordStartPos);
  112. beforeIsGubun = true; //지금 찾은 단어가 구분자였음을 기록하고
  113. } else {
  114. if (foundC) {
  115. found1 = true;
  116. nowWordStartPos = j + 1;
  117. //alert("xxx" + nowWordStartPos);
  118. break;
  119. }
  120. }
  121. } else
  122. foundC = true;
  123. }
  124. if (!found1)
  125. if (nowWordStartPos == -1)
  126. return false; //내용이 모두 구분자임, 찾을 단어가 없음
  127. else
  128. nowWordStartPos = 0; //구문의 첫 글자부터 찾을 단어의 시작임
  129. //alert(nowWordStartPos);
  130. var found2 = false;
  131. var nowWordEndPos = 0;
  132. for (k = nowWordStartPos; k < text.length; k++) {
  133. if (text.charAt(k) == ' ' //space
  134. || text.charAt(k) == ' ' //tab
  135. || text.charAt(k) == '\n' //enter
  136. || text.charAt(k) == '.' //.
  137. || text.charAt(k) == ',' //,
  138. || text.charAt(k) == '\'' //'
  139. || text.charAt(k) == '"' //"
  140. ) {
  141. found2 = true;
  142. nowWordEndPos = k;
  143. // alert("A" + nowWordEndPos);
  144. break;
  145. }
  146. }
  147. if (found2)
  148. nowWordEndPos; //찾아진 구분자까지
  149. else {
  150. if (text.charAt(text.length - 1) == ' ' //space
  151. || text.charAt(text.length - 1) == ' ' //tab
  152. || text.charAt(text.length - 1) == '\n' //enter
  153. || text.charAt(text.length - 1) == '.' //.
  154. || text.charAt(text.length - 1) == ',' //,
  155. || text.charAt(text.length - 1) == '\'' //'
  156. || text.charAt(text.length - 1) == '"' //"
  157. )
  158. nowWordEndPos = text.length - 1; //마지막 글자까지
  159. else
  160. nowWordEndPos = text.length; //마지막 글자까지
  161. //alert("B" + nowWordEndPos);
  162. }
  163. //alert(nowWordEndPos);
  164. AwtSendWord = text.substring(nowWordStartPos, nowWordEndPos);
  165. AwtWordBegin = nowWordStartPos;
  166. AwtWordEnd = nowWordEndPos;
  167. return true;
  168. }
  169. function AwtHide() {
  170. AwtGroup.visible = false;
  171. model.setFocus("AwtGroup");
  172. model.setFocus(AwtCtrl.attribute("id"));
  173. AwtCtrl.selEnd = AwtCarrotPos;
  174. AwtCtrl.selBegin = AwtCarrotPos;
  175. }
  176. function AwtShow() {
  177. AwtGroup.visible = true;
  178. model.setFocus("AwtBrowser");
  179. AwtBrowser.document.parentWindow.execScript("focus()", "javascript");
  180. }
  181. function AwtSetResult(result, AwtMode) {
  182. if (result == AwtSendWord)
  183. return;
  184. var first = AwtCtrl.currentText.substr(0, AwtWordBegin);
  185. var last = AwtCtrl.currentText.substr(AwtWordEnd, AwtCtrl.currentText.length);
  186. AwtCtrl.currentText = first + result + last;
  187. var cnt = 1;
  188. if (AwtMode == "autocomplete")
  189. cnt = 0;
  190. AwtCarrotPos = (first + result).length + cnt;
  191. model.setFocus("AwtGroup");
  192. model.setFocus(AwtCtrl.attribute("id"));
  193. AwtCtrl.selEnd = AwtCarrotPos;
  194. AwtCtrl.selBegin = AwtCarrotPos;
  195. }