/** * @fileoverview * 사용자 정의 이벤트를 미리 정의 */ (function(Trex) { /** * @namespace * @name Trex.Ev */ Trex.Ev = /** @lends Trex.Ev */ { /** wysiwyg mode */ __EDITOR_PANEL_MOUSEDOWN: 'editor.panel.mousedown', /** * Editor에 데이터의 셋팅이 시작되면 발생하는 이벤트 * @example * editor.observeJob(Trex.Ev.__EDITOR_LOAD_DATA_BEGIN, function(ev) { * }); */ __EDITOR_LOAD_DATA_BEGIN: 'editor.load.data.begin', /** * Editor에 데이터의 셋팅이 완료되면 발생하는 이벤트 * @example * editor.observeJob(Trex.Ev.__EDITOR_LOAD_DATA_END, function(ev) { * }); */ __EDITOR_LOAD_DATA_END: 'editor.load.data.end', /** * wysiwyg 영역에 발생하는 keydown 이벤트 * @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_KEYDOWN, function(ev) { * }); */ __CANVAS_PANEL_KEYDOWN: 'canvas.panel.keydown', /** * wysiwyg 영역에 발생하는 keyup 이벤트 * @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_KEYUP, function(ev) { * }); */ __CANVAS_PANEL_KEYUP: 'canvas.panel.keyup', /** * wysiwyg 영역에 발생하는 mousedown 이벤트
* Element Observer 보다 늦게 실행되며, mouseclick 보다 앞서 실행된다. * 경우에 따라 상위 엘리먼트까지 탐색하여 실행하는 Element Observer를 사용한다. * @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_MOUSEDOWN, function(ev) { * //execute function * }); * canvas.observeElement({ tag: "img", klass: "txc-image" }, function(element) { * //execute function with element * }); */ __CANVAS_PANEL_MOUSEDOWN: 'canvas.panel.mousedown', /** * wysiwyg 영역에 발생하는 mouseup 이벤트 * @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_MOUSEUP, function(ev) { * }); */ __CANVAS_PANEL_MOUSEUP: 'canvas.panel.mouseup', /** * wysiwyg 영역에 발생하는 mouseover 이벤트
* wysiwyg 영역에서 마우스를 움직일 때마다 발생하므로 과하게 사용하지 않도록 한다. * @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_MOUSEOVER, function(ev) { * }); */ __CANVAS_PANEL_MOUSEOVER: 'canvas.panel.mouseover', /** * wysiwyg 영역에 발생하는 mouseout 이벤트
* wysiwyg 영역에서 마우스를 움직일 때마다 발생하므로 과하게 사용하지 않도록 한다. * @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_MOUSEOUT, function(ev) { * }); */ __CANVAS_PANEL_MOUSEOUT: 'canvas.panel.mouseout', /** * wysiwyg 영역에 발생하는 movemove 이벤트
* wysiwyg 영역에서 마우스를 움직일 때마다 발생하므로 과하게 사용하지 않도록 한다. * @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_MOUSEMOVE, function(ev) { * }); */ __CANVAS_PANEL_MOUSEMOVE: 'canvas.panel.mousemove', /** * wysiwyg 영역에 발생하는 click 이벤트 * @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_CLICK, function(ev) { * }); */ __CANVAS_PANEL_CLICK: 'canvas.panel.click', /** * wysiwyg 영역에서 발생하는 더블클릭 이벤트
* @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_DBLCLICK, function(ev) { * }); */ __CANVAS_PANEL_DBLCLICK: 'canvas.panel.dbclick', /** * wysiwyg 영역에서 발생하는 붙여넣기 이벤트
* @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_PASTE, function() { * }); */ __CANVAS_PANEL_PASTE: 'canvas.panel.paste', /** * wysiwyg 영역에서 발생하는 스크롤 변경 이벤트
* 이 이벤트는 wysiwyg 영역의 스크롤 높이가 변경되거나 위치가 변경될 경우 발생한다. * @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_SCROLLING, function(ev) { * }); */ __CANVAS_PANEL_SCROLLING: 'canvas.panel.scrolling', /** * wysiwyg 영역이 로드되었을 경우 발생하는 사용자 정의 이벤트 * @example * canvas.observeJob(Trex.Ev.__IFRAME_LOAD_COMPLETE, function(ev) { * }); */ __IFRAME_LOAD_COMPLETE: 'iframe.load.complete', /** * wysiwyg 영역이 loading 되기까지 걸린시간을 알리는 이벤트 */ __IFRAME_LOADING_TIME: 'iframe.loading.time', /** * HTML모드(소스모드) 영역에서 발생하는 click 이벤트 * @example * canvas.observeJob(Trex.Ev.__CANVAS_SOURCE_PANEL_CLICK, function(ev) { * }); */ __CANVAS_SOURCE_PANEL_CLICK: 'canvas.source.panel.click', /** * HTML모드(소스모드) 영역에서 발생하는 keydown 이벤트 * @example * canvas.observeJob(Trex.Ev.__CANVAS_SOURCE_PANEL_KEYDOWN, function(ev) { * }); */ __CANVAS_SOURCE_PANEL_KEYDOWN: 'canvas.source.panel.mousedown', /** * HTML모드(소스모드) 영역에서 발생하는 mousedown 이벤트 * @example * canvas.observeJob(Trex.Ev.__CANVAS_SOURCE_PANEL_MOUSEDOWN, function(ev) { * }); */ __CANVAS_SOURCE_PANEL_MOUSEDOWN: 'canvas.source.panel.mousedown', /** * 텍스트모드 영역에서 발생하는 click 이벤트 * @example * canvas.observeJob(Trex.Ev.__CANVAS_TEXT_PANEL_CLICK, function(ev) { * }); */ __CANVAS_TEXT_PANEL_CLICK: 'canvas.text.panel.click', /** * 모드가 변경될 때 발생하는 사용자 정의 이벤트 * @example * canvas.observeJob(Trex.Ev.__CANVAS_MODE_CHANGE, function(from, to) { * //from - 변경되기 전 모드 * //to - 변경되고난 후 모드 * }); */ __CANVAS_MODE_CHANGE: 'canvas.mode.change', /** * 전체화면용 canvas로 변경 시 발생 */ __CANVAS_FULL_SCREEN_CHANGE: 'canvas.fullscreen.change', /** * 일반화면용 canvas로 변경 시 발생 */ __CANVAS_NORMAL_SCREEN_CHANGE: 'canvas.normalscreen.change', /** * 툴바의 버튼이 눌렸을 경우 발생하는 사용자 정의 이벤트 * @example * canvas.observeJob(Trex.Ev.__TOOL_CLICK, function(identity) { * //identity - tool의 Identity(bold, aligncenter...) * }); */ __TOOL_CLICK: 'toolbar.button.click', /** * 툴이 단축키에 의해 실행 되었을 경우 발생 */ __TOOL_SHORTCUT_KEY: 'toolbar.shortcut', /** * Editor.save()가 호출되었을 경우 발생하는 사용자 정의 이벤트
* 실제 form이 submit이 되기 전에 발생한다. * @example * canvas.observeJob(Trex.Ev.__ON_SUBMIT, function(editor) { * //editor - editor 객체 * }); */ __ON_SUBMIT: "editor.submit", /** * 에디터 래퍼의 너비가 변경된 후 발생하는 사용자 정의 이벤트 * @example * canvas.observeJob(Trex.Ev.__CANVAS_WRAP_WIDTH_CHANGE, function() { * }); */ __CANVAS_WRAP_WIDTH_CHANGE: 'canvas.wrap.width.change', /** * 에디터의 높이가 변경된 후 발생하는 사용자 정의 이벤트 * @example * canvas.observeJob(Trex.Ev.__CANVAS_HEIGHT_CHANGE, function(height) { * //height - 변경된 높이 * }); */ __CANVAS_HEIGHT_CHANGE: 'canvas.height.change', /** * wysiwyg 영역에서 키이벤트나 마우스이벤트가 발생할 경우 발생하는 사용자 정의 이벤트
* 주로 툴바 버튼의 상태를 표시할 때에 사용한다. * @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_QUERY_STATUS, function() { * }); */ __CANVAS_PANEL_QUERY_STATUS: 'canvas.panel.style.change', /** * wysiwyg 영역에서 delete 키가 눌렸을 경우 발생하는 사용자 정의 이벤트
* 주로 컨텐츠와 동기화를 맞추기 위해 사용한다. * @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_DELETE_SOMETHING, function() { * }); */ __CANVAS_PANEL_DELETE_SOMETHING: 'canvas.panel.delkey.press', /** * Entry Box에 Entry가 추가되었을 때 발생하는 사용자 정의 이벤트 * @example * attachbox.observeJob(Trex.Ev.__ENTRYBOX_ENTRY_ADDED, function(entry) { * //생성된 entry 객체를 인자로 받는다. * }); */ __ENTRYBOX_ENTRY_ADDED: 'entrybox.entryadded', /** * wysiwyg 영역에서 backspace 키가 눌렸을 경우 발생하는 사용자 정의 이벤트
* 테이블 삭제를 위해 사용한다. * @example * canvas.observeJob(Trex.Ev.__CANVAS_PANEL_BACKSPACE_TABLE, function() { * }); */ __CANVAS_PANEL_BACKSPACE_TABLE: 'canvas.panel.backspace.table', /** * Entry Box의 Entry가 수정되었을 때 발생하는 사용자 정의 이벤트 * @example * attachbox.observeJob(Trex.Ev.__ENTRYBOX_ENTRY_MODIFIED, function(entry) { * //수정된 entry 객체를 인자로 받는다. * }); */ __ENTRYBOX_ENTRY_MODIFIED: 'entrybox.entrymodified', /** * Entry Box에서 Entry가 제거되었을 때 발생하는 사용자 정의 이벤트 * @example * attachbox.observeJob(Trex.Ev.__ENTRYBOX_ENTRY_REMOVED, function(entry) { * //삭제될 entry 객체를 인자로 받는다. * }); */ __ENTRYBOX_ENTRY_REMOVED: 'entrybox.entryremoved', /** * Entry Box에서 모든 Entry가 제거되었을 때 발생하는 사용자 정의 이벤트 * @example * attachbox.observeJob(Trex.Ev.__ENTRYBOX_ALL_ENTRY_REMOVED, function() { * }); */ __ENTRYBOX_ALL_ENTRY_REMOVED: 'entrybox.removed.all.perfectly', /** * Entry Box에서 Entry의 추가/수정/삭제로 capacity가 변경 될 때 발생하는 사용자 정의 이벤트 * @example * attachbox.observeJob(Trex.Ev.__ENTRYBOX_CAPACITY_UPDATE, function(capacity) { * }); */ __ENTRYBOX_CAPACITY_UPDATE: 'entrybox.capacity.update', /** * Attach Box가 보여질 때 발생하는 사용자 정의 이벤트 * @example * attachbox.observeJob(Trex.Ev.__ATTACHBOX_SHOW, function() { * }); */ __ATTACHBOX_SHOW: 'attachbox.show', /** * Attach Box가 감춰질 때 발생하는 사용자 정의 이벤트 * @example * attachbox.observeJob(Trex.Ev.__ATTACHBOX_HIDE, function() { * }); */ __ATTACHBOX_HIDE: 'attachbox.hide', /** * fullscreen 상태에서 Attach Box가 보여질 때 발생하는 사용자 정의 이벤트 * @example * attachbox.observeJob(Trex.Ev.__ATTACHBOX_FULLSCREEN_SHOW, function() { * }); */ __ATTACHBOX_FULLSCREEN_SHOW: 'attachbox.fullscreen.show', /** * fullscreen 상태에서 Attach Box가 감춰질 때 발생하는 사용자 정의 이벤트 * @example * attachbox.observeJob(Trex.Ev.__ATTACHBOX_FULLSCREEN_HIDE, function() { * }); */ __ATTACHBOX_FULLSCREEN_HIDE: 'attachbox.fullscreen.hide', /** * 에디터 페이지를 벗어나기 전에 발생하는 사용자 정의 이벤트 * @example * canvas.observeJob(Trex.Ev.__CANVAS_BEFORE_UNLOAD, function() { * }); */ __CANVAS_BEFORE_UNLOAD: 'canvas.unload', /** * 각 첨부가 추가될 때 발생하는 사용자 정의 이벤트
* entry가 생성되고 본문에 삽입이 완료되고 호출된다. * 실제로는 entry 부분이 첨부의 Identity(image, movie, media...)로 대체된다. * @abstract * @example * canvas.observeJob('canvas.movie.added', function(entry) { * //생성된 entry 객체를 인자로 받는다. * }); */ __CANVAS_ENTRY_ADDED: 'canvas.entry.added', /** * 툴을 이용해 wysiwyg에 요소가 삽입이 될 때 발생하는 사용자 정의 이벤트 * @abstract * @example * toolbar.observeJob('cmd.textbox.added', function(node) { * //필요에 따라 만들어진 요소 엘리먼트 * }); */ __COMMAND_NODE_ADDED: 'cmd.entry.added', /** * 왼쪽 정렬을 실행하고서 발생하는 사용자 정의 이벤트 * @private */ __CMD_ALIGN_LEFT: 'align.left', /** * 가운데 정렬을 실행하고서 발생하는 사용자 정의 이벤트 * @private */ __CMD_ALIGN_CENTER: 'align.center', /** * 오른쪽 정렬을 실행하고서 발생하는 사용자 정의 이벤트 * @private */ __CMD_ALIGN_RIGHT: 'align.right', /** * 양쪽 정렬을 실행하고서 발생하는 사용자 정의 이벤트 * @private */ __CMD_ALIGN_FULL: 'align.full', /** * 이미지 왼쪽 정렬을 실행하고서 발생하는 사용자 정의 이벤트 * @private */ __CMD_ALIGN_IMG_LEFT: 'align.img.left', /** * 이미지 가운데 정렬을 실행하고서 발생하는 사용자 정의 이벤트 * @private */ __CMD_ALIGN_IMG_CENTER: 'align.img.center', /** * 이미지 왼쪽흐름 정렬을 실행하고서 발생하는 사용자 정의 이벤트 * @private */ __CMD_ALIGN_IMG_FLOAT_LEFT: 'align.img.floatleft', /** * 이미지 오른쪽흐름 정렬을 실행하고서 발생하는 사용자 정의 이벤트 * @private */ __CMD_ALIGN_IMG_FLOAT_RIGHT: 'align.img.floatright', /** * 툴바의 축소를을 실행하고 발생하는 사용자 정의 이벤트 */ __CMD_ADVANCED_FOLD: 'toolbar.advanced.fold', /** * 툴바의 확장을 실행하고 발생하는 사용자 정의 이벤트 */ __CMD_ADVANCED_SPREAD: 'toolbar.advanced.spread', /** * table 의 border 를 조정하는 세가지 속성중에 한가지가 변경될 때 발생함. * border 의 세가지 속성: cellslinecolor, cellslineheight, cellslinestyle. * @private */ __TOOL_CELL_LINE_CHANGE: 'tool.cell.line.change', /** * 에디터 로딩할 때 현재 모드와 config의 모드가 다를 때 발생하는 사용자 정의 이벤트 * @private */ __CANVAS_MODE_INITIALIZE: 'canvas.mode.initialize', /** * 에디터 로딩할 때 컨텐츠를 초기화한 후 발생하는 사용자 정의 이벤트 * @private */ __CANVAS_DATA_INITIALIZE: 'canvas.load.data', /** * Attach Box의 ENTRY의 상태가 변경될 때 발생하는 사용자 정의 이벤트 * @private */ __ENTRYBOX_ENTRY_REFRESH: 'entrybox.entryrefresh', /** * 정보첨부가 삽입될 때 발생하는 사용자 정의 이벤트 * @private */ __PASTE_SEARCHRESULT: 'trex.paste.info', /** * 에디터에서 런타임에러가 났을 때 발생하는 사용자 정의 이벤트 * @private */ __RUNTIME_EXCEPTION: "editor.runtime.exception", /** * 에디터 장애 로그를 남길 때 발생하는 사용자 정의 이벤트
* 로그를 전송한 후 실행 된다. * @private */ __REPORT_TO_MAGPIE: "editor.report.magpie", /** * 자동저장 리스트를 열 때 발생하는 사용자 정의 이벤트 * @private */ __SHOULD_CLOSE_MENUS: "editor.shouldclosemenus", /** * wysiwyg 영역에서 발생하는 이미지의 더블클릭 이벤트
* @example * canvas.observeJob(Trex.Ev.__CANVAS_IMAGE_PLACEHOLDER_DBLCLICK, function(ev) { * }); */ __CANVAS_IMAGE_PLACEHOLDER_DBLCLICK: 'canvas.image.placeholder.dbclick', /** * 툴바의 레이어형 메뉴가 화면에 표시되면 호출. */ __MENU_LAYER_SHOW: 'menu.layer.show', /** * 툴바의 레이어형 메뉴가 화면에 사라지면 호출. */ __MENU_LAYER_HIDE: 'menu.layer.hide', /** * 툴바의 레이어형 메뉴의 크기가 변경되면 호출. */ __MENU_LAYER_CHANGE_SIZE: 'menu.layer.change.size' }; })(Trex); /** @namespace */ var TrexEvent = { /** * fires observer for target element * @param {Object} el * @param {Object} handles */ fire: function(el, handles){ if (el && el.tagName) { var fn = handles[el.tagName.toLowerCase()]; if (fn) { fn(el, handles); }else { TrexEvent.propagateToParent(el, handles); } }else { console.log("Not Supported Type : " + el); } }, propagateToParent : function(element, handles){ var _el = element.parentNode; if(_el && _el.tagName && _el.tagName.toLowerCase ){ var fn = handles[_el.tagName.toLowerCase()]; if(fn){ fn(_el, handles); }else{ TrexEvent.propagateToParent(_el, handles); } } }, stopPropagation : function(){ } };