/**
* @author zero (zero@nzeo.com)
* @version 0.1
* @brief 에디터 관련 스크립트
*/
/**
* 에디터 사용시 사용되는 이벤트 연결 함수 호출
**/
/**
* 에디터의 상태나 객체를 구하기 위한 함수
**/
// editor_sequence값에 해당하는 textarea object를 return
function editorGetTextArea(editor_sequence) {
return xGetElementById( 'editor_textarea_' + editor_sequence );
}
// editor_sequence에 해당하는 form문 구함
function editorGetForm(editor_sequence) {
var iframe_obj = editorGetIFrame(editor_sequence);
if(!iframe_obj) return;
var fo_obj = iframe_obj.parentNode;
while(fo_obj.nodeName != 'FORM') { fo_obj = fo_obj.parentNode; }
if(fo_obj.nodeName == 'FORM') return fo_obj;
return;
}
// 에디터의 전체 내용 return
function editorGetContent_xe(editor_sequence) {
var html = "";
if(editorMode[editor_sequence]=='html') {
var textarea_obj = editorGetTextArea(editor_sequence);
if(!textarea_obj) return "";
html = textarea_obj.value;
} else {
var iframe_obj = editorGetIFrame(editor_sequence);
if(!iframe_obj) return "";
html = xInnerHtml(iframe_obj.contentWindow.document.body).replace(/^
]*)>$/i,'');
}
return html;
}
// 에디터 내의 선택된 부분의 NODE를 return
function editorGetSelectedNode(editor_sequence) {
var iframe_obj = editorGetIFrame(editor_sequence);
if(xIE4Up) {
var range = iframe_obj.contentWindow.document.selection.createRange();
var div = xCreateElement('div');
xInnerHtml(div, range.htmlText);
var node = div.firstChild;
return node;
} else {
var range = iframe_obj.contentWindow.getSelection().getRangeAt(0);
var node = xCreateElement('div');
node.appendChild(range.cloneContents());
return node.firstChild;
}
}
/**
* editor 시작 (editor_sequence로 iframe객체를 얻어서 쓰기 모드로 전환)
**/
function editorStart(editor_sequence, primary_key, content_key, editor_height) {
// iframe obj를 찾음
var iframe_obj = editorGetIFrame(editor_sequence);
if(!iframe_obj) return;
xWidth(iframe_obj.parentNode, '100%');
xWidth(iframe_obj, xWidth(iframe_obj.parentNode)-2);
// 현 에디터를 감싸고 있는 form문을 찾음
var fo_obj = editorGetForm(editor_sequence);
if(!fo_obj) return;
// fo_obj에 editor_sequence 값 지정
fo_obj.setAttribute('editor_sequence', editor_sequence);
// 모듈 연관 키 값을 세팅
editorRelKeys[editor_sequence] = new Array();
editorRelKeys[editor_sequence]["primary"] = fo_obj[primary_key];
editorRelKeys[editor_sequence]["content"] = fo_obj[content_key];
editorRelKeys[editor_sequence]["func"] = editorGetContent_xe;
// saved document(자동저장 문서)에 대한 확인
if(typeof(fo_obj._saved_doc_title)!="undefined" ) { ///<< _saved_doc_title field가 없으면 자동저장 하지 않음
var saved_title = fo_obj._saved_doc_title.value;
var saved_content = fo_obj._saved_doc_content.value;
if(saved_title || saved_content) {
// 자동저장된 문서 활용여부를 물은 후 사용하지 않는다면 자동저장된 문서 삭제
if(confirm(fo_obj._saved_doc_message.value)) {
if(typeof(fo_obj.title)!='undefined') fo_obj.title.value = saved_title;
editorRelKeys[editor_sequence]['content'].value = saved_content;
} else {
editorRemoveSavedDoc();
}
}
}
// 대상 form의 content element에서 데이터를 구함
var content = editorRelKeys[editor_sequence]['content'].value;
// IE가 아니고 내용이 없으면
추가 (FF등에서 iframe 선택시 focus를 주기 위한 꽁수)
if(!content && !xIE4Up) content = "
";
// IE일 경우 ctrl-Enter 안내 문구를 노출
var ieHelpObj = xGetElementById("for_ie_help_"+editor_sequence);
if(xIE4Up && ieHelpObj) {
ieHelpObj.style.display = "block";
}
// content 생성
editor_path = editor_path.replace(/^\.\//ig, '');
var contentHtml = ''+
''+
'