From 87a8bc09caa75653d251809a5f9c479b086d3859 Mon Sep 17 00:00:00 2001 From: zero Date: Mon, 19 Mar 2007 09:39:11 +0000 Subject: [PATCH] git-svn-id: http://xe-core.googlecode.com/svn/trunk@541 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- .../editor/components/image_link/tpl/popup.js | 36 +++++++++++++++++ .../editor/components/url_link/tpl/popup.js | 22 ++++------ modules/editor/tpl/js/editor.js | 40 +++++++++++++++---- 3 files changed, 76 insertions(+), 22 deletions(-) diff --git a/modules/editor/components/image_link/tpl/popup.js b/modules/editor/components/image_link/tpl/popup.js index 49161aeb0..a5ee6b33a 100644 --- a/modules/editor/components/image_link/tpl/popup.js +++ b/modules/editor/components/image_link/tpl/popup.js @@ -1,3 +1,37 @@ +/** + * popup으로 열렸을 경우 부모창의 위지윅에디터에 select된 이미지가 있는지 체크하여 + * 있으면 가져와서 원하는 곳에 삽입 + **/ +function getImage() { + // 부모 위지윅 에디터에서 선택된 영역이 있는지 확인 + if(typeof(opener)=="undefined") return; + + var node = opener.editorPrevNode; + if(!node || node.nodeName != "IMG") return; + var src = node.getAttribute("src"); + var border = node.getAttribute("border"); + var align = node.getAttribute("align"); + var alt = node.getAttribute("alt"); + var width = node.getAttribute("width"); + var height = node.getAttribute("height"); + + xGetElementById("image_url").value = src; + xGetElementById("image_alt").value = alt; + + switch(align) { + case 'left' : xGetElementById("align_left").checked = true; break; + case 'middle' : xGetElementById("align_middle").checked = true; break; + case 'right' : xGetElementById("align_right").checked = true; break; + default : xGetElementById("align_normal").checked = true; break; + } + + xGetElementById("image_border").value = border; + + xGetElementById("width").value = width; + xGetElementById("height").value = height; + +} + function getImageScale() { var url = xGetElementById("image_url").value; if(!url) return; @@ -45,3 +79,5 @@ function insertImage(obj) { window.close(); } + +xAddEventListener(window, "load", getImage); diff --git a/modules/editor/components/url_link/tpl/popup.js b/modules/editor/components/url_link/tpl/popup.js index a8bde3ce1..40745f0e5 100644 --- a/modules/editor/components/url_link/tpl/popup.js +++ b/modules/editor/components/url_link/tpl/popup.js @@ -3,14 +3,10 @@ * 있으면 가져와서 원하는 곳에 삽입 **/ function getText() { - // 부모 위지윅 에디터에서 선택된 영역이 있는지 확인 - if(typeof(opener)=="undefined") return; - var text = opener.editorGetSelectedHtml(opener.editorPrevSrl); + var node = opener.editorPrevNode; + if(!node) return; - // 선택된 영역이 A태그인지 확인 - if(text) { - var node = opener.editorGetSelectedNode(opener.editorPrevSrl); - if(node.nodeName == "A") { + if(node.nodeName == "A") { var url = node.getAttribute("HREF"); var onclick_str = ""; @@ -25,7 +21,7 @@ function getText() { else className = node.getAttribute("class"); var open_window = false; - if(onclick_str) { + if(url.indexOf("#")>-1 && onclick_str.indexOf("window.open")>-1) { open_window = true; var s_s = "window.open('"; @@ -59,14 +55,10 @@ function getText() { if(color) xGetElementById(color).checked = true; return; - } + } else { + var fo_obj = xGetElementById("fo_component"); + fo_obj.text.value = opener.editorGetSelectedHtml(opener.editorPrevSrl); } - - // 기본 설정 - var fo_obj = xGetElementById("fo_component"); - if(fo_obj.text.value) return; - fo_obj.text.value = text; - self.focus(); } /** diff --git a/modules/editor/tpl/js/editor.js b/modules/editor/tpl/js/editor.js index 3675e043c..368011d02 100755 --- a/modules/editor/tpl/js/editor.js +++ b/modules/editor/tpl/js/editor.js @@ -68,8 +68,10 @@ function editorStart(upload_target_srl) { xAddEventListener(contentDocument,'mousedown',editorHideObject); // 플러그인 감시를 위한 더블클릭 이벤트 걸기 - xAddEventListener(contentDocument,'dblclick',editorSearchComponent); - xAddEventListener(document,'dblclick',editorSearchComponent); + if(xUA.indexOf('opera')==-1) { + xAddEventListener(contentDocument,'dblclick',editorSearchComponent); + xAddEventListener(document,'dblclick',editorSearchComponent); + } //xAddEventListener(document,'keypress',editorKeyPress); xAddEventListener(document,'mouseup',editorEventCheck); @@ -159,7 +161,12 @@ function editorGetSelectedNode(upload_target_srl) { function editorReplaceHTML(iframe_obj, html) { if(xIE4Up) { - iframe_obj.contentWindow.document.selection.createRange().pasteHTML(html); + var range = iframe_obj.contentWindow.document.selection.createRange(); + if(range.pasteHTML) { + range.pasteHTML(html); + } else if(editorPrevNode) { + editorPrevNode.outerHTML = html; + } } else { if(iframe_obj.contentWindow.getSelection().focusNode.tagName == "HTML") { var range = iframe_obj.contentDocument.createRange(); @@ -220,6 +227,8 @@ function editorKeyPress(evt) { var editorPrevObj = null; var editorPrevSrl = null; function editorEventCheck(evt) { + editorPrevNode = null; + // 이벤트가 발생한 object의 ID를 구함 var e = new xEvent(evt); var target_id = e.target.id; @@ -286,9 +295,12 @@ function editorProcComponent(ret_obj, response_tags) { } // 본문내에 포함된 컴포넌트를 찾는 함수 (더블클릭시) +var editorPrevNode = null; function editorSearchComponent(evt) { var e = new xEvent(evt); + editorPrevNode = null; + // 선택되어진 object부터 상단으로 이동하면서 editor_component attribute가 있는지 검사 var obj = e.target; while(obj && !obj.getAttribute("editor_component")) { @@ -302,21 +314,35 @@ function editorSearchComponent(evt) { // editor_component를 찾지 못했을 경우에 이미지/텍스트/링크의 경우 기본 컴포넌트와 연결 if(!editor_component) { // 이미지일 경우 - if(obj.nodeName == "IMG") editor_component = "image_link"; + if(obj.nodeName == "IMG") { + editor_component = "image_link"; + editorPrevNode = obj; + } // 링크거나 텍스트인 경우 - else if(obj.nodeName == "A" || obj.nodeName == "BODY") editor_component = "url_link"; + else if(obj.nodeName == "A" || obj.nodeName == "BODY") { + editor_component = "url_link"; + editorPrevNode = obj; + } + } else { + editorPrevNode = obj; } // 아무런 editor_component가 없다면 return - if(!editor_component) return; + if(!editor_component) { + editorPrevNode = null; + return; + } // upload_target_srl을 찾음 var tobj = obj; while(tobj && tobj.nodeName != "BODY") { tobj = xParent(tobj); } - if(!tobj || tobj.nodeName != "BODY" || !tobj.getAttribute("upload_target_srl")) return; + if(!tobj || tobj.nodeName != "BODY" || !tobj.getAttribute("upload_target_srl")) { + editorPrevNode = null; + return; + } var upload_target_srl = tobj.getAttribute("upload_target_srl"); // 해당 컴포넌트를 찾아서 실행