awtKnuh.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  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 AwtCtrlDatagrid = null;
  9. var AwtCtrlType = null;
  10. var AwtWordBegin = -1;
  11. var AwtWordEnd = -1;
  12. var AwtSendWord = null;
  13. var AwtCarrotPos = 0;
  14. function AwtSearchKnuh() {
  15. if (event.keyCode == 113) {
  16. if (AwtGetSearchWordPopup()) {
  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. attachAwtByObject();
  23. AwtShow();
  24. }
  25. }
  26. } else if (event.keyCode == 32 || event.keyCode == 13 || event.keyCode == 188 || event.keyCode == 190 || event.keyCode == 222) { //,188 .190 '222
  27. if (AwtOn != '1')
  28. return;
  29. if (AwtGetSearchWord()) {
  30. //alert("f '" + AwtWordBegin);
  31. //alert("f '" + AwtWordEnd);
  32. //alert("f '" + AwtSendWord + "'");
  33. AwtBrowser.document.parentWindow.execScript("AwtSearchOne('" + AwtAjaxUrl + "', '" + AwtSendWord + "')", "javascript");
  34. }
  35. }
  36. }
  37. function attachAwtByObject() {
  38. if (document.controls(event.currentTarget).elementName.replace("xforms:", "") == "datagrid") {
  39. AwtCtrl = document.controls(event.currentTarget).input;
  40. AwtCtrlType = "datagrid";
  41. } else {
  42. AwtCtrl = document.controls(event.currentTarget);
  43. AwtCtrlType = document.controls(event.currentTarget).elementName;
  44. }
  45. var top = 0;
  46. var left = 0;
  47. var width = 0;
  48. var height = 0;
  49. /*
  50. if (document.controls(objId).elementName == "xforms:datagrid")
  51. objId = objId + ".input";
  52. var obj = document.controls(objId);
  53. */
  54. var obj = AwtCtrl;
  55. var pObj = obj.parent;
  56. while (pObj != null && pObj.attribute("id") != "body") {
  57. top = top + parseInt(pObj.attribute("top").replace("px", ""));
  58. left = left + parseInt(pObj.attribute("left").replace("px", ""));
  59. //alert(pObj.attribute("id") + "-" + top);
  60. pObj = pObj.parent;
  61. }
  62. width = parseInt(obj.attribute("width").replace("px", ""));
  63. height = parseInt(obj.attribute("height").replace("px", ""));
  64. top = top + parseInt(obj.attribute("top").replace("px", ""));
  65. left = left + parseInt(obj.attribute("left").replace("px", ""));
  66. //alert(window.height + "-" + top + "-" + height + "-" + 311);
  67. if (window.height < top + height + 190) {
  68. top = top - 190 - height;
  69. //alert("A" + top);
  70. } else {
  71. //alert("B" + top);
  72. }
  73. //alert(window.width + "-" + left + "-" + 209);
  74. if (window.width < left + 209) {
  75. //left = left - 209;
  76. //alert("C" + left);
  77. } else {
  78. //alert("D" + left);
  79. }
  80. //alert(window.height + "-" + top);
  81. //alert(window.height + "-" + left);
  82. AwtGroup.attribute("top") = top + height;
  83. AwtGroup.attribute("left") = left;
  84. //alert(AwtGroup.attribute("top"));
  85. //alert(AwtGroup.attribute("left"));
  86. //alert('attachAwtByObject-' + AwtShowSearch);
  87. }
  88. function AwtGetSearchWordPopup() {
  89. if (document.controls(event.currentTarget).elementName.replace("xforms:", "") == "datagrid") {
  90. //alert('데이터그리드에서는 F2(단어조회창) 기능을 사용할 수 없습니다\r(실제 운영에서는 알림 메세지 없음)');
  91. //return false;
  92. AwtCtrlDatagrid = document.controls(event.currentTarget);
  93. AwtCtrl = document.controls(event.currentTarget).input;
  94. AwtCtrlType = "datagrid";
  95. if (AwtCtrl.attribute("visible") == "hidden")
  96. return;
  97. } else {
  98. AwtCtrlDatagrid = null;
  99. AwtCtrl = document.controls(event.currentTarget);
  100. AwtCtrlType = document.controls(event.currentTarget).elementName;
  101. }
  102. if (AwtCtrl.selBegin != AwtCtrl.selEnd)
  103. return false;
  104. AwtCarrotPos = AwtCtrl.selEnd;
  105. var text = AwtCtrl.currentText;
  106. //캐럿의 위치를 기준으로 앞으로 구분자를 찾음
  107. //구분자을 만나면 캐럿위치의 단어의 시작, 끝 부분임(단, 단어가 시작하기 전에 구분자를 만나면 무시)
  108. var foundC = false;
  109. var nowWordStartPos = AwtCtrl.selBegin - 1; //space를 못찾으면 그냥 첫 위치(0)가 들어감
  110. for (j = nowWordStartPos; j >= 0; j--) {
  111. //alert(j + " " + text.charAt(j) + " " + foundC);
  112. if (text.charAt(j) == ' ' //space
  113. || text.charAt(j) == ' ' //tab
  114. || text.charAt(j) == '\n' //enter
  115. || text.charAt(j) == '.' //.
  116. || text.charAt(j) == ',' //,
  117. || text.charAt(j) == '\'' //'
  118. || text.charAt(j) == '"' //"
  119. ) {
  120. nowWordStartPos = j + 1;
  121. foundC = true;
  122. break;
  123. }
  124. }
  125. if (!foundC)
  126. nowWordStartPos = 0; //구문의 첫 글자부터 찾을 단어의 시작임
  127. //alert(nowWordStartPos);
  128. foundC = false;
  129. for (k = nowWordStartPos; k < text.length; k++) {
  130. if (text.charAt(k) == ' ' //space
  131. || text.charAt(k) == ' ' //tab
  132. || text.charAt(k) == '\n' //enter
  133. || text.charAt(k) == '.' //.
  134. || text.charAt(k) == ',' //,
  135. || text.charAt(k) == '\'' //'
  136. || text.charAt(k) == '"' //"
  137. ) {
  138. nowWordEndPos = k;
  139. foundC = true;
  140. break;
  141. }
  142. }
  143. if (!foundC)
  144. nowWordEndPos = text.length; //구문의 끝 글자까지 찾을 단어임
  145. if (nowWordStartPos == nowWordEndPos)
  146. return false;
  147. AwtSendWord = text.substring(nowWordStartPos, nowWordEndPos);
  148. AwtWordBegin = nowWordStartPos;
  149. AwtWordEnd = nowWordEndPos;
  150. return true;
  151. }
  152. function AwtGetSearchWord() {
  153. if (document.controls(event.currentTarget).elementName.replace("xforms:", "") == "datagrid") {
  154. AwtCtrlDatagrid = document.controls(event.currentTarget);
  155. AwtCtrl = document.controls(event.currentTarget).input;
  156. AwtCtrlType = "datagrid";
  157. } else {
  158. AwtCtrlDatagrid = null;
  159. AwtCtrl = document.controls(event.currentTarget);
  160. AwtCtrlType = document.controls(event.currentTarget).elementName;
  161. }
  162. if (AwtCtrl.selBegin != AwtCtrl.selEnd)
  163. return false;
  164. AwtCarrotPos = AwtCtrl.selEnd;
  165. var text = AwtCtrl.currentText;
  166. //캐럿의 위치를 기준으로 앞으로 구분자를 찾음
  167. //구분자을 만나면 캐럿위치의 단어의 시작, 끝 부분임(단, 단어가 시작하기 전에 구분자를 만나면 무시)
  168. var beforeIsGubun = false;
  169. var found1 = false;
  170. var foundC = false;
  171. var nowWordStartPos = AwtCtrl.selBegin - 1; //space를 못찾으면 그냥 첫 위치(0)가 들어감
  172. for (j = nowWordStartPos; j >= 0; j--) {
  173. //alert(j + " " + text.charAt(j) + " " + foundC);
  174. if (text.charAt(j) == ' ' //space
  175. || text.charAt(j) == ' ' //tab
  176. || text.charAt(j) == '\n' //enter
  177. || text.charAt(j) == '.' //.
  178. || text.charAt(j) == ',' //,
  179. || text.charAt(j) == '\'' //'
  180. || text.charAt(j) == '"' //"
  181. ) {
  182. if (j == nowWordStartPos) { //처음부터 구분자가 나오면
  183. if (beforeIsGubun == true) //좀전에 찾앗던 단어가 구분자이면...
  184. return false; //구분자가 두번연속으로 나온 경우리므로 return
  185. nowWordStartPos = j - 1; //구분자가 두번 반복될때를 대비해서 처음시작을 하나 이동시킴
  186. //alert("yyy" + nowWordStartPos);
  187. beforeIsGubun = true; //지금 찾은 단어가 구분자였음을 기록하고
  188. } else {
  189. if (foundC) {
  190. found1 = true;
  191. nowWordStartPos = j + 1;
  192. //alert("xxx" + nowWordStartPos);
  193. break;
  194. }
  195. }
  196. } else
  197. foundC = true;
  198. }
  199. if (!found1)
  200. if (nowWordStartPos == -1)
  201. return false; //내용이 모두 구분자임, 찾을 단어가 없음
  202. else
  203. nowWordStartPos = 0; //구문의 첫 글자부터 찾을 단어의 시작임
  204. //alert(nowWordStartPos);
  205. var found2 = false;
  206. var nowWordEndPos = 0;
  207. for (k = nowWordStartPos; k < text.length; k++) {
  208. if (text.charAt(k) == ' ' //space
  209. || text.charAt(k) == ' ' //tab
  210. || text.charAt(k) == '\n' //enter
  211. || text.charAt(k) == '.' //.
  212. || text.charAt(k) == ',' //,
  213. || text.charAt(k) == '\'' //'
  214. || text.charAt(k) == '"' //"
  215. ) {
  216. found2 = true;
  217. nowWordEndPos = k;
  218. // alert("A" + nowWordEndPos);
  219. break;
  220. }
  221. }
  222. if (found2)
  223. nowWordEndPos; //찾아진 구분자까지
  224. else {
  225. if (text.charAt(text.length - 1) == ' ' //space
  226. || text.charAt(text.length - 1) == ' ' //tab
  227. || text.charAt(text.length - 1) == '\n' //enter
  228. || text.charAt(text.length - 1) == '.' //.
  229. || text.charAt(text.length - 1) == ',' //,
  230. || text.charAt(text.length - 1) == '\'' //'
  231. || text.charAt(text.length - 1) == '"' //"
  232. )
  233. nowWordEndPos = text.length - 1; //마지막 글자까지
  234. else
  235. nowWordEndPos = text.length; //마지막 글자까지
  236. //alert("B" + nowWordEndPos);
  237. }
  238. //alert(nowWordEndPos);
  239. AwtSendWord = text.substring(nowWordStartPos, nowWordEndPos);
  240. AwtWordBegin = nowWordStartPos;
  241. AwtWordEnd = nowWordEndPos;
  242. return true;
  243. }
  244. function AwtHide() {
  245. AwtGroup.visible = false;
  246. if (AwtCtrlType != "datagrid" && AwtCtrl != null) {
  247. model.setFocus("AwtGroup");
  248. model.setFocus(AwtCtrl.attribute("id"));
  249. }
  250. if (AwtCtrl != null) {
  251. AwtCtrl.selEnd = AwtCarrotPos;
  252. AwtCtrl.selBegin = AwtCarrotPos;
  253. }
  254. }
  255. function AwtShow() {
  256. AwtGroup.visible = true;
  257. model.setFocus("AwtBrowser");
  258. AwtBrowser.document.parentWindow.execScript("focus()", "javascript");
  259. }
  260. function AwtSetResult(awtResult, awtMode) {
  261. var result = null;
  262. var hanengmode = null;
  263. if (awtMode == "matchone") {
  264. var tokens = awtResult.split("||");
  265. hanengmode = tokens[0];
  266. result = tokens[1];
  267. } else {
  268. result = awtResult;
  269. }
  270. if (AwtCtrlType != "datagrid" && AwtCtrl != null) {
  271. } else {
  272. if (AwtCtrlDatagrid != null) {
  273. AwtCtrlDatagrid.editCell();
  274. }
  275. }
  276. if (result == AwtSendWord)
  277. return;
  278. var first = AwtCtrl.currentText.substr(0, AwtWordBegin);
  279. var last = AwtCtrl.currentText.substr(AwtWordEnd, AwtCtrl.currentText.length);
  280. var cnt = 1;
  281. if (awtMode == "autocomplete")
  282. cnt = 0;
  283. AwtCarrotPos = (first + result).length + cnt;
  284. if (AwtCtrlType != "datagrid" && AwtCtrl != null) {
  285. model.setFocus("AwtGroup");
  286. model.setFocus(AwtCtrl.attribute("id"));
  287. } else {
  288. if (AwtCtrlDatagrid != null) {
  289. model.setFocus("AwtGroup");
  290. model.setFocus(AwtCtrl.attribute("id"));
  291. AwtCtrlDatagrid.editCell();
  292. }
  293. }
  294. AwtCtrl.currentText = first + result + last;
  295. if (AwtCtrl != null) {
  296. if (awtMode == "matchone") {
  297. if (hanengmode == "1") {
  298. AwtCtrl.attribute("imemode") = "alpha";
  299. model.setFocus("AwtGroup");
  300. model.setFocus(AwtCtrl.attribute("id"));
  301. } else if (hanengmode == "2") {
  302. AwtCtrl.attribute("imemode") = "hangul";
  303. model.setFocus("AwtGroup");
  304. model.setFocus(AwtCtrl.attribute("id"));
  305. }
  306. }
  307. if (AwtCtrlType != "datagrid" && AwtCtrl != null) {
  308. } else {
  309. if (AwtCtrlDatagrid != null) {
  310. AwtCtrlDatagrid.editCell();
  311. }
  312. }
  313. AwtCtrl.selEnd = AwtCarrotPos;
  314. AwtCtrl.selBegin = AwtCarrotPos;
  315. }
  316. AwtCtrl = null;
  317. AwtCtrlType = null;
  318. }