From 01170f020b4ab1447d91f0b7e39facf5b7571c5b Mon Sep 17 00:00:00 2001 From: zero Date: Thu, 20 Dec 2007 08:26:33 +0000 Subject: [PATCH] =?UTF-8?q?=EC=9C=84=EC=A0=AF=20=EC=A0=95=EB=A6=AC?= =?UTF-8?q?=EC=8B=9C=20document.write=EB=93=B1=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=EA=B0=80=20=EC=9D=B4=EB=8F=99=ED=95=B4=EB=B2=84?= =?UTF-8?q?=EB=A6=AC=EB=8A=94=20script=EC=97=90=20=EB=8C=80=ED=95=9C=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@3384 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/widget/tpl/js/widget.js | 56 +++++++++++++++++++++------ modules/widget/tpl/js/widget_admin.js | 9 +---- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/modules/widget/tpl/js/widget.js b/modules/widget/tpl/js/widget.js index 297ae7d64..ecec79d36 100644 --- a/modules/widget/tpl/js/widget.js +++ b/modules/widget/tpl/js/widget.js @@ -4,6 +4,24 @@ * @brief 위젯 관리용 자바스크립트 **/ +/* document.write(ln)의 경우 ajax로 처리시 가로채기 위한 함수 */ +document.write = document.writeln = function(str){ + if ( str.match(/^<\//) ) return; + if ( !window.opera ) str = str.replace(/&(?![#a-z0-9]+;)/g, "&"); + str = str.replace(/(<[a-z]+)/g, "$1 xmlns='http://www.w3.org/1999/xhtml'"); + var div = null; + if(document.createElementNS) div = document.createElementNS("http://www.w3.org/1999/xhtml","div"); + else div = xCreateElement('div'); + xInnerHtml(div, str); + var pos; + pos = document.getElementsByTagName("*"); + pos = pos[pos.length - 1]; + var nodes = div.childNodes; + while ( nodes.length ) { + pos.parentNode.appendChild( nodes[0] ); + } +}; + /* DOM 속성을 구하기 위한 몇가지 함수들.. */ // style의 값을 구하는게 IE랑 그외가 다름. function getStyle(obj) { @@ -180,19 +198,8 @@ function doSyncPageContent() { // 부모창에 위젯을 추가 function completeAddContent(ret_obj) { var tpl = ret_obj["tpl"]; - - selected_node = opener.selectedWidget; - - if(selected_node && selected_node.getAttribute("widget")) { - selected_node = replaceOuterHTML(selected_node, tpl); - } else { - var obj = opener.zonePageObj; - xInnerHtml(obj, xInnerHtml(obj)+tpl); - } - - if(opener.doFitBorderSize) opener.doFitBorderSize(); + opener.doAddWidgetCode(tpl); window.close(); - return false; } @@ -244,6 +251,31 @@ function doFitBorderSize() { var selectedWidget = null; +// 위젯 추가 +function doAddWidgetCode(widget_code) { + var dummy = xCreateElement('div'); + xInnerHtml(dummy, widget_code); + + var nodes = dummy.childNodes; + + var zoneObj = xGetElementById('zonePageContent'); + + if(selectedWidget && selectedWidget.getAttribute("widget")) { + while ( nodes.length ) { + if(nodes[0].className == 'widgetClass') zoneObj.parentNode.insertBefore(nodes[0], zoneObj); + else selectedWidget.parentNode.insertBefore(nodes[0], selectedWidget); + } + selectedWidget.parentNode.removeChild(selectedWidget); + } else { + while ( nodes.length ) { + if(nodes[0].className == 'widgetClass') zoneObj.parentNode.insertBefore(nodes[0], zoneObj); + else zoneObj.appendChild(nodes[0]); + } + } + + doFitBorderSize(); +} + // 클릭 이벤트시 위젯의 수정/제거/이벤트 무효화 처리 function doCheckWidget(e) { var evt = new xEvent(e); if(!evt.target) return; diff --git a/modules/widget/tpl/js/widget_admin.js b/modules/widget/tpl/js/widget_admin.js index aa1e36981..63cd16205 100644 --- a/modules/widget/tpl/js/widget_admin.js +++ b/modules/widget/tpl/js/widget_admin.js @@ -20,13 +20,8 @@ function completeGenerateCodeInPage(ret_obj,response_tags,params,fo_obj) { return; } - if(selected_node && selected_node.getAttribute("widget")) { - selected_node = replaceOuterHTML(selected_node, widget_code); - if(opener.doFitBorderSize) opener.doFitBorderSize(); - } else { - var obj = opener.xGetElementById('zonePageContent'); - xInnerHtml(obj, xInnerHtml(obj)+widget_code); - } + opener.doAddWidgetCode(widget_code); + window.close(); }