From c92421c5ee314887cc5773824ff7907f224facf9 Mon Sep 17 00:00:00 2001 From: zero Date: Mon, 4 May 2009 04:50:37 +0000 Subject: [PATCH] =?UTF-8?q?1.=20IE=EC=97=90=EC=84=9C=20=EC=9E=98=EB=AA=BB?= =?UTF-8?q?=EB=90=9C=20"=20(=EB=94=B0=EC=98=B4=ED=91=9C=20=EA=B0=90?= =?UTF-8?q?=EC=8C=88)=EC=9D=B4=20=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=202.=20=EC=97=90=EB=94=94=ED=84=B0?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EB=8D=94=EB=B8=94?= =?UTF-8?q?=ED=81=B4=EB=A6=AD=EC=8B=9C=20=EC=88=98=EC=A0=95=20=EB=AA=A8?= =?UTF-8?q?=EB=93=9C=20=EB=8F=99=EC=9E=91=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=203.=20=EC=9D=B4=EB=AF=B8=EC=A7=80=EB=93=B1?= =?UTF-8?q?=EC=9D=98=20=EA=B2=BD=EB=A1=9C=EA=B0=80=20=EC=9E=98=EB=AA=BB=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= 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@6257 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- .../skins/xpresseditor/js/Xpress_Editor.js | 87 ++++++++++--------- .../skins/xpresseditor/js/xe_interface.js | 62 +++++++++---- 2 files changed, 87 insertions(+), 62 deletions(-) diff --git a/modules/editor/skins/xpresseditor/js/Xpress_Editor.js b/modules/editor/skins/xpresseditor/js/Xpress_Editor.js index 7a7a83e25..3955c63a2 100644 --- a/modules/editor/skins/xpresseditor/js/Xpress_Editor.js +++ b/modules/editor/skins/xpresseditor/js/Xpress_Editor.js @@ -5031,43 +5031,43 @@ xe.XE_Hyperlink = jQuery.Class({ this.oApp.exec("FOCUS", []); this.oSelection = this.oApp.getSelection(); - if(this._validateURL(sURL)){ - var sTarget = ""; - if(this.oCbNewWin.checked) - sTarget = "_blank"; - else - sTarget = "_self"; + //if(this._validateURL(sURL)){ + var sTarget = ""; + if(this.oCbNewWin.checked) + sTarget = "_blank"; + else + sTarget = "_self"; - if(this.oSelection.collapsed){ - var str = "" + sURL + ""; - this.oSelection.pasteHTML(str); - }else{ - var nSession = Math.ceil(Math.random()*10000); - var arg = ( sURL == "" ? ["unlink"] : ["createLink", false, this.sATagMarker+nSession+sURL] ); - this.oApp.exec("EXECCOMMAND", arg); + if(this.oSelection.collapsed){ + var str = "" + sURL + ""; + this.oSelection.pasteHTML(str); + }else{ + var nSession = Math.ceil(Math.random()*10000); + var arg = ( sURL == "" ? ["unlink"] : ["createLink", false, this.sATagMarker+nSession+sURL] ); + this.oApp.exec("EXECCOMMAND", arg); - this.oSelection.setFromSelection(); + this.oSelection.setFromSelection(); - var oDoc = this.oApp.getWYSIWYGDocument(); - var aATags = oDoc.body.getElementsByTagName("A"); - var nLen = aATags.length; - var rxMarker = new RegExp(this.sRXATagMarker+nSession, "i"); - var elATag; - for(var i=0; i'; }); @@ -5656,8 +5657,6 @@ xe.XE_Extension = jQuery.Class({ }, _removeAttrs : function(sContent) { - sContent = sContent.replace(/]*?) xe_handled\s*=\s*".+?"([^>]*?)>/i, ''); - return sContent; }, @@ -5666,28 +5665,30 @@ xe.XE_Extension = jQuery.Class({ var doc = this.oApp.getWYSIWYGDocument(); var seq = this.seq; + var prevComponent = null; var fn = function(){ var obj = jQuery(this); var comp = obj.attr('editor_component'); + if(prevComponent == comp) return false; + prevComponent = comp; if (comp && jQuery.isFunction(openComponent)) { editorPrevNode = obj.get(0); openComponent(comp, seq); } + + setTimeout(500, function() { prevComponent = null; }); }; - jQuery('img[editor_component],div[editor_component]', doc).each(function(){ + jQuery('img,div[editor_component]', doc).each(function(){ var obj = jQuery(this); - if (!obj.attr('xe_handled')) { - obj.attr('xe_handled', 'yes').dblclick(fn); - } + if(this.nodeName == 'IMG' && !obj.attr('editor_component')) obj.attr('editor_component','image_link') + obj.dblclick(fn); }); }, $ON_MSG_APP_READY : function() { this.oApp.exec('REGISTER_UI_EVENT', ['extension', 'click', 'TOGGLE_EXTENSION_LAYER']); - - this.oApp.addConverter("WYSIWYG_TO_IR", this._removeAttrs); }, $ON_TOGGLE_EXTENSION_LAYER : function() { diff --git a/modules/editor/skins/xpresseditor/js/xe_interface.js b/modules/editor/skins/xpresseditor/js/xe_interface.js index f14cd1ec9..bcbc1266b 100644 --- a/modules/editor/skins/xpresseditor/js/xe_interface.js +++ b/modules/editor/skins/xpresseditor/js/xe_interface.js @@ -54,10 +54,15 @@ function editorStart_xe(editor_sequence, primary_key, content_key, editor_height oEditor.getFrame = function(){ return oWYSIWYGIFrame;} var content = form[content_key].value; - var srcPathRegx = /src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/g; //' - var hrefPathRegx = /href=("|\'){1}(\.\/)?\?([^"\']+)("|\'){1}/g; //' - content = content.replace(srcPathRegx, 'src="'+request_uri+'$3/$4.$5"'); - content = content.replace(hrefPathRegx, 'href="'+request_uri+'?$3"'); + + // src, href, url의 XE 상대경로를 http로 시작하는 full path로 변경 + content = content.replace(/(src=|href=|url\()("|\')*([^"\'\)]+)("|\'|\))*(\s|>)*/ig, function(m0,m1,m2,m3,m4,m5) { + if(m1=="url(") { m2=''; m4=')'; } else { if(typeof(m2)=='undefined') m2 = '"'; if(typeof(m4)=='undefined') m4 = '"'; if(typeof(m5)=='undefined') m5 = ''; } + var val = jQuery.trim(m3).replace(/^\.\//,''); + if(/^(http|https|ftp|telnet|\/|\.\.)/i.test(val)) return m0; + return m1+m2+request_uri+val+m4+m5; + }); + form[content_key].value = content; jQuery("#xpress-editor-"+editor_sequence).val(content); @@ -124,11 +129,11 @@ function editorStart_xe(editor_sequence, primary_key, content_key, editor_height oEditor.registerPlugin(new xe.XE_WYSIWYGEnterKey(oWYSIWYGIFrame)); } - // 자동 저장 사용? + // 자동 저장 사용 if (s=form._saved_doc_title) { oEditor.registerPlugin(new xe.XE_AutoSave(oIRTextarea, elAppContainer)); } - + function load_proc() { try { var doc = oWYSIWYGIFrame.contentWindow.document, str; @@ -170,17 +175,17 @@ function editorGetIframe(srl) { return jQuery('iframe#editor_iframe_'+srl).get(0); } -function editorReplaceHTML(iframe_obj, text) { - // 이미지 경로 재지정 (rewrite mod) - var srcPathRegx = /src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/g;//' - text = text.replace(srcPathRegx, 'src="'+request_uri+'$3/$4.$5"'); - - // href 경로 재지정 (rewrite mod) - var hrefPathRegx = /href=("|\'){1}(\.\/)?\?([^"\']+)("|\'){1}/g;//' - text = text.replace(hrefPathRegx, 'href="'+request_uri+'?$3"'); +function editorReplaceHTML(iframe_obj, content) { + // src, href, url의 XE 상대경로를 http로 시작하는 full path로 변경 + content = content.replace(/(src=|href=|url\()("|\')*([^"\'\)]+)("|\'|\))*(\s|>)*/ig, function(m0,m1,m2,m3,m4,m5) { + if(m1=="url(") { m2=''; m4=')'; } else { if(typeof(m2)=='undefined') m2 = '"'; if(typeof(m4)=='undefined') m4 = '"'; if(typeof(m5)=='undefined') m5 = ''; } + var val = jQuery.trim(m3).replace(/^\.\//,''); + if(/^(http|https|ftp|telnet|\/|\.\.)/i.test(val)) return m0; + return m1+m2+request_uri+val+m4+m5; + }); var srl = parseInt(iframe_obj.id.replace(/^.*_/,''),10); - editorRelKeys[srl]["pasteHTML"](text); + editorRelKeys[srl]["pasteHTML"](content); } // WYSIWYG 모드를 저장하는 확장기능 @@ -202,14 +207,33 @@ xe.XE_GET_WYSYWYG_CONTENT = jQuery.Class({ $ON_MSG_APP_READY : function() { this.oApp.addConverter("IR_TO_WYSIWYG", this.TO_WYSIWYG_SET); + this.oApp.addConverter("IR_TO_HTMLSrc", this.IR_TO_HTMLSrc); }, TO_WYSIWYG_SET : function(content) { - var srcPathRegx = /src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/g;//' - var hrefPathRegx = /href=("|\'){1}(\.\/)?\?([^"\']+)("|\'){1}/g;//' - content = content.replace(srcPathRegx, 'src="'+request_uri+'$3/$4.$5"'); - content = content.replace(hrefPathRegx, 'href="'+request_uri+'?$3"'); + // src, href, url의 XE 상대경로를 http로 시작하는 full path로 변경 + content = content.replace(/(src=|href=|url\()("|\')*([^"\'\)]+)("|\'|\))*(\s|>)*/ig, function(m0,m1,m2,m3,m4,m5) { + if(m1=="url(") { m2=''; m4=')'; } else { if(typeof(m2)=='undefined') m2 = '"'; if(typeof(m4)=='undefined') m4 = '"'; if(typeof(m5)=='undefined') m5 = ''; } + var val = jQuery.trim(m3).replace(/^\.\//,''); + if(/^(http|https|ftp|telnet|\/|\.\.)/i.test(val)) return m0; + return m1+m2+request_uri+val+m4+m5; + }); + return content; + }, + + IR_TO_HTMLSrc : function(content) { + // src, href, url의 XE 상대경로를 http로 시작하는 full path로 변경 + content = content.replace(/(src=|href=|url\()("|\')*([^"\'\)]+)("|\'|\))*(\s|>|\))*/ig, function(m0,m1,m2,m3,m4,m5) { + var uriReg = new RegExp('^'+request_uri.replace('\/','\\/'),'ig'); + if(m1=="url(") { m2=''; m4=')'; } else { if(typeof(m2)=='undefined') m2 = '"'; if(typeof(m4)=='undefined') m4 = '"'; if(typeof(m5)=='undefined') m5 = ''; } + var val = jQuery.trim(m3); + if(uriReg.test(val)) val = val.replace(uriReg,''); + else val = m3; + return m1+m2+val+m4+m5; + }); + return content; + } });