/* Copyright (C) NAVER corp. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /*[ * SE_FIT_IFRAME * * 스마트에디터 사이즈에 맞게 iframe사이즈를 조절한다. * * none * ---------------------------------------------------------------------------]*/ /** * @pluginDesc 에디터를 싸고 있는 iframe 사이즈 조절을 담당하는 플러그인 */ nhn.husky.SE_OuterIFrameControl = $Class({ name : "SE_OuterIFrameControl", oResizeGrip : null, $init : function(oAppContainer){ // page up, page down, home, end, left, up, right, down this.aHeightChangeKeyMap = [-100, 100, 500, -500, -1, -10, 1, 10]; this._assignHTMLObjects(oAppContainer); //키보드 이벤트 this.$FnKeyDown = $Fn(this._keydown, this); if(this.oResizeGrip){ this.$FnKeyDown.attach(this.oResizeGrip, "keydown"); } //마우스 이벤트 if(!!jindo.$Agent().navigator().ie){ this.$FnMouseDown = $Fn(this._mousedown, this); this.$FnMouseMove = $Fn(this._mousemove, this); this.$FnMouseMove_Parent = $Fn(this._mousemove_parent, this); this.$FnMouseUp = $Fn(this._mouseup, this); if(this.oResizeGrip){ this.$FnMouseDown.attach(this.oResizeGrip, "mousedown"); } } }, _assignHTMLObjects : function(oAppContainer){ oAppContainer = jindo.$(oAppContainer) || document; this.oResizeGrip = cssquery.getSingle(".husky_seditor_editingArea_verticalResizer", oAppContainer); this.elIFrame = window.frameElement; this.welIFrame = $Element(this.elIFrame); }, $ON_MSG_APP_READY : function(){ this.oApp.exec("SE_FIT_IFRAME", []); }, $ON_MSG_EDITING_AREA_SIZE_CHANGED : function(){ this.oApp.exec("SE_FIT_IFRAME", []); }, $ON_SE_FIT_IFRAME : function(){ this.elIFrame.style.height = document.body.offsetHeight+"px"; }, $AFTER_RESIZE_EDITING_AREA_BY : function(ipWidthChange, ipHeightChange){ this.oApp.exec("SE_FIT_IFRAME", []); }, _keydown : function(oEvent){ var oKeyInfo = oEvent.key(); // 33, 34: page up/down, 35,36: end/home, 37,38,39,40: left, up, right, down if(oKeyInfo.keyCode >= 33 && oKeyInfo.keyCode <= 40){ this.oApp.exec("MSG_EDITING_AREA_RESIZE_STARTED", []); this.oApp.exec("RESIZE_EDITING_AREA_BY", [0, this.aHeightChangeKeyMap[oKeyInfo.keyCode-33]]); this.oApp.exec("MSG_EDITING_AREA_RESIZE_ENDED", []); oEvent.stop(); } }, _mousedown : function(oEvent){ this.iStartHeight = oEvent.pos().clientY; this.iStartHeightOffset = oEvent.pos().layerY; this.$FnMouseMove.attach(document, "mousemove"); this.$FnMouseMove_Parent.attach(parent.document, "mousemove"); this.$FnMouseUp.attach(document, "mouseup"); this.$FnMouseUp.attach(parent.document, "mouseup"); this.iStartHeight = oEvent.pos().clientY; this.oApp.exec("MSG_EDITING_AREA_RESIZE_STARTED", [this.$FnMouseDown, this.$FnMouseMove, this.$FnMouseUp]); }, _mousemove : function(oEvent){ var iHeightChange = oEvent.pos().clientY - this.iStartHeight; this.oApp.exec("RESIZE_EDITING_AREA_BY", [0, iHeightChange]); }, _mousemove_parent : function(oEvent){ var iHeightChange = oEvent.pos().pageY - (this.welIFrame.offset().top + this.iStartHeight); this.oApp.exec("RESIZE_EDITING_AREA_BY", [0, iHeightChange]); }, _mouseup : function(oEvent){ this.$FnMouseMove.detach(document, "mousemove"); this.$FnMouseMove_Parent.detach(parent.document, "mousemove"); this.$FnMouseUp.detach(document, "mouseup"); this.$FnMouseUp.detach(parent.document, "mouseup"); this.oApp.exec("MSG_EDITING_AREA_RESIZE_ENDED", [this.$FnMouseDown, this.$FnMouseMove, this.$FnMouseUp]); } });