event.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. /**
  2. * @fileoverview
  3. * 사용자 정의 이벤트를 미리 정의
  4. */
  5. (function(Trex) {
  6. /**
  7. * @namespace
  8. * @name Trex.Ev
  9. */
  10. Trex.Ev = /** @lends Trex.Ev */ {
  11. /** wysiwyg mode */
  12. __EDITOR_PANEL_MOUSEDOWN: 'editor.panel.mousedown',
  13. /**
  14. * Editor에 데이터의 셋팅이 시작되면 발생하는 이벤트
  15. * @example
  16. * editor.observeJob(Trex.Ev.__EDITOR_LOAD_DATA_BEGIN, function(ev) {
  17. * });
  18. */
  19. __EDITOR_LOAD_DATA_BEGIN: 'editor.load.data.begin',
  20. /**
  21. * Editor에 데이터의 셋팅이 완료되면 발생하는 이벤트
  22. * @example
  23. * editor.observeJob(Trex.Ev.__EDITOR_LOAD_DATA_END, function(ev) {
  24. * });
  25. */
  26. __EDITOR_LOAD_DATA_END: 'editor.load.data.end',
  27. /**
  28. * wysiwyg 영역에 발생하는 keydown 이벤트
  29. * @example
  30. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_KEYDOWN, function(ev) {
  31. * });
  32. */
  33. __CANVAS_PANEL_KEYDOWN: 'canvas.panel.keydown',
  34. /**
  35. * wysiwyg 영역에 발생하는 keyup 이벤트
  36. * @example
  37. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_KEYUP, function(ev) {
  38. * });
  39. */
  40. __CANVAS_PANEL_KEYUP: 'canvas.panel.keyup',
  41. /**
  42. * wysiwyg 영역에 발생하는 mousedown 이벤트<br/>
  43. * Element Observer 보다 늦게 실행되며, mouseclick 보다 앞서 실행된다.
  44. * 경우에 따라 상위 엘리먼트까지 탐색하여 실행하는 Element Observer를 사용한다.
  45. * @example
  46. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_MOUSEDOWN, function(ev) {
  47. * //execute function
  48. * });
  49. * canvas.observeElement({ tag: "img", klass: "txc-image" }, function(element) {
  50. * //execute function with element
  51. * });
  52. */
  53. __CANVAS_PANEL_MOUSEDOWN: 'canvas.panel.mousedown',
  54. /**
  55. * wysiwyg 영역에 발생하는 mouseup 이벤트
  56. * @example
  57. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_MOUSEUP, function(ev) {
  58. * });
  59. */
  60. __CANVAS_PANEL_MOUSEUP: 'canvas.panel.mouseup',
  61. /**
  62. * wysiwyg 영역에 발생하는 mouseover 이벤트<br/>
  63. * wysiwyg 영역에서 마우스를 움직일 때마다 발생하므로 과하게 사용하지 않도록 한다.
  64. * @example
  65. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_MOUSEOVER, function(ev) {
  66. * });
  67. */
  68. __CANVAS_PANEL_MOUSEOVER: 'canvas.panel.mouseover',
  69. /**
  70. * wysiwyg 영역에 발생하는 mouseout 이벤트<br/>
  71. * wysiwyg 영역에서 마우스를 움직일 때마다 발생하므로 과하게 사용하지 않도록 한다.
  72. * @example
  73. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_MOUSEOUT, function(ev) {
  74. * });
  75. */
  76. __CANVAS_PANEL_MOUSEOUT: 'canvas.panel.mouseout',
  77. /**
  78. * wysiwyg 영역에 발생하는 movemove 이벤트<br/>
  79. * wysiwyg 영역에서 마우스를 움직일 때마다 발생하므로 과하게 사용하지 않도록 한다.
  80. * @example
  81. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_MOUSEMOVE, function(ev) {
  82. * });
  83. */
  84. __CANVAS_PANEL_MOUSEMOVE: 'canvas.panel.mousemove',
  85. /**
  86. * wysiwyg 영역에 발생하는 click 이벤트
  87. * @example
  88. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_CLICK, function(ev) {
  89. * });
  90. */
  91. __CANVAS_PANEL_CLICK: 'canvas.panel.click',
  92. /**
  93. * wysiwyg 영역에서 발생하는 더블클릭 이벤트<br/>
  94. * @example
  95. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_DBLCLICK, function(ev) {
  96. * });
  97. */
  98. __CANVAS_PANEL_DBLCLICK: 'canvas.panel.dbclick',
  99. /**
  100. * wysiwyg 영역에서 발생하는 붙여넣기 이벤트<br/>
  101. * @example
  102. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_PASTE, function() {
  103. * });
  104. */
  105. __CANVAS_PANEL_PASTE: 'canvas.panel.paste',
  106. /**
  107. * wysiwyg 영역에서 발생하는 스크롤 변경 이벤트<br/>
  108. * 이 이벤트는 wysiwyg 영역의 스크롤 높이가 변경되거나 위치가 변경될 경우 발생한다.
  109. * @example
  110. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_SCROLLING, function(ev) {
  111. * });
  112. */
  113. __CANVAS_PANEL_SCROLLING: 'canvas.panel.scrolling',
  114. /**
  115. * wysiwyg 영역이 로드되었을 경우 발생하는 사용자 정의 이벤트
  116. * @example
  117. * canvas.observeJob(Trex.Ev.__IFRAME_LOAD_COMPLETE, function(ev) {
  118. * });
  119. */
  120. __IFRAME_LOAD_COMPLETE: 'iframe.load.complete',
  121. /**
  122. * wysiwyg 영역이 loading 되기까지 걸린시간을 알리는 이벤트
  123. */
  124. __IFRAME_LOADING_TIME: 'iframe.loading.time',
  125. /**
  126. * HTML모드(소스모드) 영역에서 발생하는 click 이벤트
  127. * @example
  128. * canvas.observeJob(Trex.Ev.__CANVAS_SOURCE_PANEL_CLICK, function(ev) {
  129. * });
  130. */
  131. __CANVAS_SOURCE_PANEL_CLICK: 'canvas.source.panel.click',
  132. /**
  133. * HTML모드(소스모드) 영역에서 발생하는 keydown 이벤트
  134. * @example
  135. * canvas.observeJob(Trex.Ev.__CANVAS_SOURCE_PANEL_KEYDOWN, function(ev) {
  136. * });
  137. */
  138. __CANVAS_SOURCE_PANEL_KEYDOWN: 'canvas.source.panel.mousedown',
  139. /**
  140. * HTML모드(소스모드) 영역에서 발생하는 mousedown 이벤트
  141. * @example
  142. * canvas.observeJob(Trex.Ev.__CANVAS_SOURCE_PANEL_MOUSEDOWN, function(ev) {
  143. * });
  144. */
  145. __CANVAS_SOURCE_PANEL_MOUSEDOWN: 'canvas.source.panel.mousedown',
  146. /**
  147. * 텍스트모드 영역에서 발생하는 click 이벤트
  148. * @example
  149. * canvas.observeJob(Trex.Ev.__CANVAS_TEXT_PANEL_CLICK, function(ev) {
  150. * });
  151. */
  152. __CANVAS_TEXT_PANEL_CLICK: 'canvas.text.panel.click',
  153. /**
  154. * 모드가 변경될 때 발생하는 사용자 정의 이벤트
  155. * @example
  156. * canvas.observeJob(Trex.Ev.__CANVAS_MODE_CHANGE, function(from, to) {
  157. * //from - 변경되기 전 모드
  158. * //to - 변경되고난 후 모드
  159. * });
  160. */
  161. __CANVAS_MODE_CHANGE: 'canvas.mode.change',
  162. /**
  163. * 전체화면용 canvas로 변경 시 발생
  164. */
  165. __CANVAS_FULL_SCREEN_CHANGE: 'canvas.fullscreen.change',
  166. /**
  167. * 일반화면용 canvas로 변경 시 발생
  168. */
  169. __CANVAS_NORMAL_SCREEN_CHANGE: 'canvas.normalscreen.change',
  170. /**
  171. * 툴바의 버튼이 눌렸을 경우 발생하는 사용자 정의 이벤트
  172. * @example
  173. * canvas.observeJob(Trex.Ev.__TOOL_CLICK, function(identity) {
  174. * //identity - tool의 Identity(bold, aligncenter...)
  175. * });
  176. */
  177. __TOOL_CLICK: 'toolbar.button.click',
  178. /**
  179. * 툴이 단축키에 의해 실행 되었을 경우 발생
  180. */
  181. __TOOL_SHORTCUT_KEY: 'toolbar.shortcut',
  182. /**
  183. * Editor.save()가 호출되었을 경우 발생하는 사용자 정의 이벤트<br/>
  184. * 실제 form이 submit이 되기 전에 발생한다.
  185. * @example
  186. * canvas.observeJob(Trex.Ev.__ON_SUBMIT, function(editor) {
  187. * //editor - editor 객체
  188. * });
  189. */
  190. __ON_SUBMIT: "editor.submit",
  191. /**
  192. * 에디터 래퍼의 너비가 변경된 후 발생하는 사용자 정의 이벤트
  193. * @example
  194. * canvas.observeJob(Trex.Ev.__CANVAS_WRAP_WIDTH_CHANGE, function() {
  195. * });
  196. */
  197. __CANVAS_WRAP_WIDTH_CHANGE: 'canvas.wrap.width.change',
  198. /**
  199. * 에디터의 높이가 변경된 후 발생하는 사용자 정의 이벤트
  200. * @example
  201. * canvas.observeJob(Trex.Ev.__CANVAS_HEIGHT_CHANGE, function(height) {
  202. * //height - 변경된 높이
  203. * });
  204. */
  205. __CANVAS_HEIGHT_CHANGE: 'canvas.height.change',
  206. /**
  207. * wysiwyg 영역에서 키이벤트나 마우스이벤트가 발생할 경우 발생하는 사용자 정의 이벤트<br/>
  208. * 주로 툴바 버튼의 상태를 표시할 때에 사용한다.
  209. * @example
  210. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_QUERY_STATUS, function() {
  211. * });
  212. */
  213. __CANVAS_PANEL_QUERY_STATUS: 'canvas.panel.style.change',
  214. /**
  215. * wysiwyg 영역에서 delete 키가 눌렸을 경우 발생하는 사용자 정의 이벤트<br/>
  216. * 주로 컨텐츠와 동기화를 맞추기 위해 사용한다.
  217. * @example
  218. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_DELETE_SOMETHING, function() {
  219. * });
  220. */
  221. __CANVAS_PANEL_DELETE_SOMETHING: 'canvas.panel.delkey.press',
  222. /**
  223. * Entry Box에 Entry가 추가되었을 때 발생하는 사용자 정의 이벤트
  224. * @example
  225. * attachbox.observeJob(Trex.Ev.__ENTRYBOX_ENTRY_ADDED, function(entry) {
  226. * //생성된 entry 객체를 인자로 받는다.
  227. * });
  228. */
  229. __ENTRYBOX_ENTRY_ADDED: 'entrybox.entryadded',
  230. /**
  231. * wysiwyg 영역에서 backspace 키가 눌렸을 경우 발생하는 사용자 정의 이벤트<br/>
  232. * 테이블 삭제를 위해 사용한다.
  233. * @example
  234. * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_BACKSPACE_TABLE, function() {
  235. * });
  236. */
  237. __CANVAS_PANEL_BACKSPACE_TABLE: 'canvas.panel.backspace.table',
  238. /**
  239. * Entry Box의 Entry가 수정되었을 때 발생하는 사용자 정의 이벤트
  240. * @example
  241. * attachbox.observeJob(Trex.Ev.__ENTRYBOX_ENTRY_MODIFIED, function(entry) {
  242. * //수정된 entry 객체를 인자로 받는다.
  243. * });
  244. */
  245. __ENTRYBOX_ENTRY_MODIFIED: 'entrybox.entrymodified',
  246. /**
  247. * Entry Box에서 Entry가 제거되었을 때 발생하는 사용자 정의 이벤트
  248. * @example
  249. * attachbox.observeJob(Trex.Ev.__ENTRYBOX_ENTRY_REMOVED, function(entry) {
  250. * //삭제될 entry 객체를 인자로 받는다.
  251. * });
  252. */
  253. __ENTRYBOX_ENTRY_REMOVED: 'entrybox.entryremoved',
  254. /**
  255. * Entry Box에서 모든 Entry가 제거되었을 때 발생하는 사용자 정의 이벤트
  256. * @example
  257. * attachbox.observeJob(Trex.Ev.__ENTRYBOX_ALL_ENTRY_REMOVED, function() {
  258. * });
  259. */
  260. __ENTRYBOX_ALL_ENTRY_REMOVED: 'entrybox.removed.all.perfectly',
  261. /**
  262. * Entry Box에서 Entry의 추가/수정/삭제로 capacity가 변경 될 때 발생하는 사용자 정의 이벤트
  263. * @example
  264. * attachbox.observeJob(Trex.Ev.__ENTRYBOX_CAPACITY_UPDATE, function(capacity) {
  265. * });
  266. */
  267. __ENTRYBOX_CAPACITY_UPDATE: 'entrybox.capacity.update',
  268. /**
  269. * Attach Box가 보여질 때 발생하는 사용자 정의 이벤트
  270. * @example
  271. * attachbox.observeJob(Trex.Ev.__ATTACHBOX_SHOW, function() {
  272. * });
  273. */
  274. __ATTACHBOX_SHOW: 'attachbox.show',
  275. /**
  276. * Attach Box가 감춰질 때 발생하는 사용자 정의 이벤트
  277. * @example
  278. * attachbox.observeJob(Trex.Ev.__ATTACHBOX_HIDE, function() {
  279. * });
  280. */
  281. __ATTACHBOX_HIDE: 'attachbox.hide',
  282. /**
  283. * fullscreen 상태에서 Attach Box가 보여질 때 발생하는 사용자 정의 이벤트
  284. * @example
  285. * attachbox.observeJob(Trex.Ev.__ATTACHBOX_FULLSCREEN_SHOW, function() {
  286. * });
  287. */
  288. __ATTACHBOX_FULLSCREEN_SHOW: 'attachbox.fullscreen.show',
  289. /**
  290. * fullscreen 상태에서 Attach Box가 감춰질 때 발생하는 사용자 정의 이벤트
  291. * @example
  292. * attachbox.observeJob(Trex.Ev.__ATTACHBOX_FULLSCREEN_HIDE, function() {
  293. * });
  294. */
  295. __ATTACHBOX_FULLSCREEN_HIDE: 'attachbox.fullscreen.hide',
  296. /**
  297. * 에디터 페이지를 벗어나기 전에 발생하는 사용자 정의 이벤트
  298. * @example
  299. * canvas.observeJob(Trex.Ev.__CANVAS_BEFORE_UNLOAD, function() {
  300. * });
  301. */
  302. __CANVAS_BEFORE_UNLOAD: 'canvas.unload',
  303. /**
  304. * 각 첨부가 추가될 때 발생하는 사용자 정의 이벤트<br/>
  305. * entry가 생성되고 본문에 삽입이 완료되고 호출된다.
  306. * 실제로는 entry 부분이 첨부의 Identity(image, movie, media...)로 대체된다.
  307. * @abstract
  308. * @example
  309. * canvas.observeJob('canvas.movie.added', function(entry) {
  310. * //생성된 entry 객체를 인자로 받는다.
  311. * });
  312. */
  313. __CANVAS_ENTRY_ADDED: 'canvas.entry.added',
  314. /**
  315. * 툴을 이용해 wysiwyg에 요소가 삽입이 될 때 발생하는 사용자 정의 이벤트
  316. * @abstract
  317. * @example
  318. * toolbar.observeJob('cmd.textbox.added', function(node) {
  319. * //필요에 따라 만들어진 요소 엘리먼트
  320. * });
  321. */
  322. __COMMAND_NODE_ADDED: 'cmd.entry.added',
  323. /**
  324. * 왼쪽 정렬을 실행하고서 발생하는 사용자 정의 이벤트
  325. * @private
  326. */
  327. __CMD_ALIGN_LEFT: 'align.left',
  328. /**
  329. * 가운데 정렬을 실행하고서 발생하는 사용자 정의 이벤트
  330. * @private
  331. */
  332. __CMD_ALIGN_CENTER: 'align.center',
  333. /**
  334. * 오른쪽 정렬을 실행하고서 발생하는 사용자 정의 이벤트
  335. * @private
  336. */
  337. __CMD_ALIGN_RIGHT: 'align.right',
  338. /**
  339. * 양쪽 정렬을 실행하고서 발생하는 사용자 정의 이벤트
  340. * @private
  341. */
  342. __CMD_ALIGN_FULL: 'align.full',
  343. /**
  344. * 이미지 왼쪽 정렬을 실행하고서 발생하는 사용자 정의 이벤트
  345. * @private
  346. */
  347. __CMD_ALIGN_IMG_LEFT: 'align.img.left',
  348. /**
  349. * 이미지 가운데 정렬을 실행하고서 발생하는 사용자 정의 이벤트
  350. * @private
  351. */
  352. __CMD_ALIGN_IMG_CENTER: 'align.img.center',
  353. /**
  354. * 이미지 왼쪽흐름 정렬을 실행하고서 발생하는 사용자 정의 이벤트
  355. * @private
  356. */
  357. __CMD_ALIGN_IMG_FLOAT_LEFT: 'align.img.floatleft',
  358. /**
  359. * 이미지 오른쪽흐름 정렬을 실행하고서 발생하는 사용자 정의 이벤트
  360. * @private
  361. */
  362. __CMD_ALIGN_IMG_FLOAT_RIGHT: 'align.img.floatright',
  363. /**
  364. * 툴바의 축소를을 실행하고 발생하는 사용자 정의 이벤트
  365. */
  366. __CMD_ADVANCED_FOLD: 'toolbar.advanced.fold',
  367. /**
  368. * 툴바의 확장을 실행하고 발생하는 사용자 정의 이벤트
  369. */
  370. __CMD_ADVANCED_SPREAD: 'toolbar.advanced.spread',
  371. /**
  372. * table 의 border 를 조정하는 세가지 속성중에 한가지가 변경될 때 발생함.
  373. * border 의 세가지 속성: cellslinecolor, cellslineheight, cellslinestyle.
  374. * @private
  375. */
  376. __TOOL_CELL_LINE_CHANGE: 'tool.cell.line.change',
  377. /**
  378. * 에디터 로딩할 때 현재 모드와 config의 모드가 다를 때 발생하는 사용자 정의 이벤트
  379. * @private
  380. */
  381. __CANVAS_MODE_INITIALIZE: 'canvas.mode.initialize',
  382. /**
  383. * 에디터 로딩할 때 컨텐츠를 초기화한 후 발생하는 사용자 정의 이벤트
  384. * @private
  385. */
  386. __CANVAS_DATA_INITIALIZE: 'canvas.load.data',
  387. /**
  388. * Attach Box의 ENTRY의 상태가 변경될 때 발생하는 사용자 정의 이벤트
  389. * @private
  390. */
  391. __ENTRYBOX_ENTRY_REFRESH: 'entrybox.entryrefresh',
  392. /**
  393. * 정보첨부가 삽입될 때 발생하는 사용자 정의 이벤트
  394. * @private
  395. */
  396. __PASTE_SEARCHRESULT: 'trex.paste.info',
  397. /**
  398. * 에디터에서 런타임에러가 났을 때 발생하는 사용자 정의 이벤트
  399. * @private
  400. */
  401. __RUNTIME_EXCEPTION: "editor.runtime.exception",
  402. /**
  403. * 에디터 장애 로그를 남길 때 발생하는 사용자 정의 이벤트<br/>
  404. * 로그를 전송한 후 실행 된다.
  405. * @private
  406. */
  407. __REPORT_TO_MAGPIE: "editor.report.magpie",
  408. /**
  409. * 자동저장 리스트를 열 때 발생하는 사용자 정의 이벤트
  410. * @private
  411. */
  412. __SHOULD_CLOSE_MENUS: "editor.shouldclosemenus",
  413. /**
  414. * wysiwyg 영역에서 발생하는 이미지의 더블클릭 이벤트<br/>
  415. * @example
  416. * canvas.observeJob(Trex.Ev.__CANVAS_IMAGE_PLACEHOLDER_DBLCLICK, function(ev) {
  417. * });
  418. */
  419. __CANVAS_IMAGE_PLACEHOLDER_DBLCLICK: 'canvas.image.placeholder.dbclick',
  420. /**
  421. * 툴바의 레이어형 메뉴가 화면에 표시되면 호출.
  422. */
  423. __MENU_LAYER_SHOW: 'menu.layer.show',
  424. /**
  425. * 툴바의 레이어형 메뉴가 화면에 사라지면 호출.
  426. */
  427. __MENU_LAYER_HIDE: 'menu.layer.hide',
  428. /**
  429. * 툴바의 레이어형 메뉴의 크기가 변경되면 호출.
  430. */
  431. __MENU_LAYER_CHANGE_SIZE: 'menu.layer.change.size'
  432. };
  433. })(Trex);
  434. /** @namespace */
  435. var TrexEvent = {
  436. /**
  437. * fires observer for target element
  438. * @param {Object} el
  439. * @param {Object} handles
  440. */
  441. fire: function(el, handles){
  442. if (el && el.tagName) {
  443. var fn = handles[el.tagName.toLowerCase()];
  444. if (fn) {
  445. fn(el, handles);
  446. }else {
  447. TrexEvent.propagateToParent(el, handles);
  448. }
  449. }else {
  450. console.log("Not Supported Type : " + el);
  451. }
  452. },
  453. propagateToParent : function(element, handles){
  454. var _el = element.parentNode;
  455. if(_el && _el.tagName && _el.tagName.toLowerCase ){
  456. var fn = handles[_el.tagName.toLowerCase()];
  457. if(fn){
  458. fn(_el, handles);
  459. }else{
  460. TrexEvent.propagateToParent(_el, handles);
  461. }
  462. }
  463. },
  464. stopPropagation : function(){ }
  465. };