gdidc/webedit/js/service/hp_SE_OuterIFrameControl.js
2021-10-26 18:19:06 +09:00

128 lines
4.2 KiB
JavaScript

/*
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]);
}
});