mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-02-01 01:29:58 +09:00
#18800257 링크 사용시 HUSKY_TMP.MARKER 와 같은 문자가 링크에 포함되던 버그 수정(for IE)
git-svn-id: http://xe-core.googlecode.com/svn/sandbox@8125 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
3894734590
commit
ca8306b18a
1 changed files with 41 additions and 44 deletions
|
|
@ -822,6 +822,7 @@ xe.W3CDOMRange = $.Class({
|
||||||
// for <div id="a"><div id="b"></div></div><div id="c"></div>, _getNodesBetween(b, c) will yield to b, "a" and c
|
// for <div id="a"><div id="b"></div></div><div id="c"></div>, _getNodesBetween(b, c) will yield to b, "a" and c
|
||||||
_getNodesBetween : function(oStartNode, oEndNode){
|
_getNodesBetween : function(oStartNode, oEndNode){
|
||||||
var aNodesBetween = [];
|
var aNodesBetween = [];
|
||||||
|
this._nNodesBetweenLen = 0;
|
||||||
|
|
||||||
if(!oStartNode || !oEndNode) return aNodesBetween;
|
if(!oStartNode || !oEndNode) return aNodesBetween;
|
||||||
|
|
||||||
|
|
@ -837,10 +838,9 @@ xe.W3CDOMRange = $.Class({
|
||||||
var oNextToChk = oNode.nextSibling;
|
var oNextToChk = oNode.nextSibling;
|
||||||
|
|
||||||
while(!oNextToChk){
|
while(!oNextToChk){
|
||||||
if(!xe.DOMFix.parentNode(oNode)) return false;
|
if(!(oNode = xe.DOMFix.parentNode(oNode))) return false;
|
||||||
oNode = xe.DOMFix.parentNode(oNode);
|
|
||||||
|
|
||||||
aNodesBetween[aNodesBetween.length] = oNode;
|
aNodesBetween[this._nNodesBetweenLen++] = oNode;
|
||||||
|
|
||||||
if(oNode == oEndNode) return false;
|
if(oNode == oEndNode) return false;
|
||||||
|
|
||||||
|
|
@ -866,7 +866,7 @@ xe.W3CDOMRange = $.Class({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
aNodesBetween[aNodesBetween.length] = oNode;
|
aNodesBetween[this._nNodesBetweenLen++] = oNode;
|
||||||
|
|
||||||
if(bEndFound) return false;
|
if(bEndFound) return false;
|
||||||
if(oNode == oEndNode) return false;
|
if(oNode == oEndNode) return false;
|
||||||
|
|
@ -1356,32 +1356,42 @@ xe.XpressRange = $.Class({
|
||||||
|
|
||||||
var aAllNodes = this._getNodesInRange();
|
var aAllNodes = this._getNodesInRange();
|
||||||
var aResult = [];
|
var aResult = [];
|
||||||
|
var nResult = 0;
|
||||||
|
|
||||||
|
var oNode, oTmpNode, iStartRelPos, iEndRelPos, oSpan, iSIdx, iEIdx, oParentNode;
|
||||||
|
var nInitialLength = aAllNodes.length;
|
||||||
|
var arAllBottmNodes = $(aAllNodes).filter(function(){ return !!this.childNodes.length });
|
||||||
|
|
||||||
var oNode, iStartRelPos, iEndRelPos, oSpan, iSIdx, iEIdx;
|
|
||||||
var nInitialLength = aAllNodes.length;
|
|
||||||
for(var i=0; i<nInitialLength; i++){
|
for(var i=0; i<nInitialLength; i++){
|
||||||
oNode = aAllNodes[i];
|
oNode = aAllNodes[i];
|
||||||
|
|
||||||
if(!oNode) continue;
|
if(!oNode || oNode.nodeType != 3 || oNode.nodeValue == '') continue;
|
||||||
if(oNode.nodeType != 3) continue;
|
|
||||||
if(oNode.nodeValue == "") continue;
|
oParentNode = xe.DOMFix.parentNode(oNode);
|
||||||
|
|
||||||
if(xe.DOMFix.parentNode(oNode).tagName == "SPAN"){
|
if(oParentNode.tagName == "SPAN"){
|
||||||
// check if the SPAN element is fully contained
|
// check if the SPAN element is fully contained
|
||||||
iSIdx = $.inArray(this._getVeryFirstRealChild(xe.DOMFix.parentNode(oNode.parentNode)), aAllNodes);
|
// do quick checks before trying indexOf() because indexOf() function is very slow
|
||||||
iEIdx = $.inArray(this._getVeryLastRealChild(xe.DOMFix.parentNode(oNode)), aAllNodes);
|
oTmpNode = this._getVeryFirstRealChild(oParentNode);
|
||||||
|
if(oTmpNode == oNode) iSIdx = 1;
|
||||||
|
else iSIdx = arAllBottmNodes.indexOf(oTmpNode);
|
||||||
|
|
||||||
|
if(iSIdx != -1){
|
||||||
|
oTmpNode = this._getVeryLastRealChild(oParentNode);
|
||||||
|
if(oTmpNode == oNode) iEIdx = 1;
|
||||||
|
else iEIdx = arAllBottmNodes.indexOf(oTmpNode);
|
||||||
|
}
|
||||||
|
|
||||||
if(iSIdx != -1 && iEIdx != -1){
|
if(iSIdx != -1 && iEIdx != -1){
|
||||||
aResult[aResult.length] = xe.DOMFix.parentNode(oNode);
|
aResult[nResult++] = oParentNode;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
oSpan = this._document.createElement("SPAN");
|
oSpan = this._document.createElement("SPAN");
|
||||||
xe.DOMFix.parentNode(oNode).insertBefore(oSpan, oNode);
|
oParentNode.insertBefore(oSpan, oNode);
|
||||||
oSpan.appendChild(oNode);
|
oSpan.appendChild(oNode);
|
||||||
aResult[aResult.length] = oSpan;
|
aResult[nResult++] = oSpan;
|
||||||
aAllNodes[aAllNodes.length] = oSpan;
|
|
||||||
|
|
||||||
if(sNewSpanMarker) oSpan.setAttribute(sNewSpanMarker, "true");
|
if(sNewSpanMarker) oSpan.setAttribute(sNewSpanMarker, "true");
|
||||||
}
|
}
|
||||||
|
|
@ -5004,7 +5014,6 @@ xe.XE_Hyperlink = $.Class({
|
||||||
this.oApp.registerBrowserEvent(this.oBtnConfirm, "mousedown", "XE_APPLY_HYPERLINK");
|
this.oApp.registerBrowserEvent(this.oBtnConfirm, "mousedown", "XE_APPLY_HYPERLINK");
|
||||||
this.oApp.registerBrowserEvent(this.oBtnCancel, "mousedown", "HIDE_ACTIVE_LAYER");
|
this.oApp.registerBrowserEvent(this.oBtnCancel, "mousedown", "HIDE_ACTIVE_LAYER");
|
||||||
this.oApp.registerBrowserEvent(this.oLinkInput, "keydown", "EVENT_XE_HYPERLINK_KEYDOWN");
|
this.oApp.registerBrowserEvent(this.oLinkInput, "keydown", "EVENT_XE_HYPERLINK_KEYDOWN");
|
||||||
//this.oApp.registerBrowserEvent(this.oLinkInput
|
|
||||||
|
|
||||||
this.oApp.exec("REGISTER_UI_EVENT", ["hyperlink", "click", "XE_TOGGLE_HYPERLINK_LAYER"]);
|
this.oApp.exec("REGISTER_UI_EVENT", ["hyperlink", "click", "XE_TOGGLE_HYPERLINK_LAYER"]);
|
||||||
},
|
},
|
||||||
|
|
@ -5036,48 +5045,36 @@ xe.XE_Hyperlink = $.Class({
|
||||||
},
|
},
|
||||||
|
|
||||||
$ON_XE_APPLY_HYPERLINK : function(){
|
$ON_XE_APPLY_HYPERLINK : function(){
|
||||||
var sURL = this.oLinkInput.value;
|
var sURL = this.oLinkInput.value, newWin = this.oCbNewWin.checked, sTarget = newWin?'_blank':'';
|
||||||
|
|
||||||
this.oApp.exec("FOCUS", []);
|
this.oApp.exec("FOCUS", []);
|
||||||
this.oSelection = this.oApp.getSelection();
|
this.oSelection = this.oApp.getSelection();
|
||||||
|
|
||||||
//if(this._validateURL(sURL)){
|
|
||||||
var sTarget = "";
|
|
||||||
if(this.oCbNewWin.checked)
|
|
||||||
sTarget = "_blank";
|
|
||||||
else
|
|
||||||
sTarget = "_self";
|
|
||||||
|
|
||||||
if(this.oSelection.collapsed){
|
if(this.oSelection.collapsed){
|
||||||
var str = "<a href='" + sURL + "' target="+sTarget+">" + sURL + "</a>";
|
var str = "<a href='" + sURL + "' target="+sTarget+">" + sURL + "</a>";
|
||||||
this.oSelection.pasteHTML(str);
|
this.oSelection.pasteHTML(str);
|
||||||
}else{
|
}else{
|
||||||
var nSession = Math.ceil(Math.random()*10000);
|
var nSession = Math.ceil(Math.random()*10000);
|
||||||
var arg = ( sURL == "" ? ["unlink"] : ["createLink", false, this.sATagMarker+nSession+sURL] );
|
var sMarker = this.sATagMarker+nSession;
|
||||||
|
var arg = ( sURL == "" ? ["unlink"] : ["createLink", false, sMarker+sURL] );
|
||||||
this.oApp.exec("EXECCOMMAND", arg);
|
this.oApp.exec("EXECCOMMAND", arg);
|
||||||
|
|
||||||
this.oSelection.setFromSelection();
|
try { this.oSelection.setFromSelection() }catch(e){};
|
||||||
|
|
||||||
var oDoc = this.oApp.getWYSIWYGDocument();
|
var oDoc = this.oApp.getWYSIWYGDocument();
|
||||||
var aATags = oDoc.body.getElementsByTagName("A");
|
$(oDoc.body.getElementsByTagName("A"))
|
||||||
var nLen = aATags.length;
|
.filter('[href^="'+sMarker+'"]')
|
||||||
var rxMarker = new RegExp(this.sRXATagMarker+nSession, "i");
|
.attr('href', function(){
|
||||||
var elATag;
|
var rx = new RegExp('^'+sMarker.replace(/([\.\\])/g, '\\$1'), 'i');
|
||||||
for(var i=0; i<nLen; i++){
|
|
||||||
elATag = aATags[i];
|
if (sTarget) $(this).attr('target', sTarget);
|
||||||
if(elATag.href && elATag.href.match(rxMarker)){
|
else $(this).removeAttr('target');
|
||||||
elATag.href = elATag.href.replace(rxMarker, "");
|
|
||||||
elATag.target = sTarget;
|
return this.href.replace(rx, '');
|
||||||
}
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
this.oApp.exec("HIDE_ACTIVE_LAYER");
|
this.oApp.exec("HIDE_ACTIVE_LAYER");
|
||||||
|
|
||||||
setTimeout($.fnBind(function(){this.oSelection.select()}, this), 0);
|
setTimeout($.fnBind(function(){try{this.oSelection.select()}catch(e){}}, this), 0);
|
||||||
//}else{
|
|
||||||
//alert(this.oApp.$MSG("XE_Hyperlink.invalidURL"));
|
|
||||||
//this.oLinkInput.focus();
|
|
||||||
//}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_validateURL : function(sURL){
|
_validateURL : function(sURL){
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue