awtTF.js 12 KB

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