提交 f0cf14cf 编写于 作者: C campaign

by zhanyi

上级 1319d940
......@@ -1078,6 +1078,65 @@
return true;
}
return false;
},
createAddress : function(ingoreEnd,ingoreTxt){
var addr = {},me = this;
this.trimBoundary();
function getAddress(isStart){
var node;
if(isStart){
node = me.startContainer.childNodes[me.startOffset] || me.startContainer;
}else{
node = me.endContainer.childNodes[me.endOffset] || me.endContainer;
}
var parents = domUtils.findParents(node,false,function(node){return !domUtils.isBody(node)}),
addrs = [];
for(var i = 0,ci;ci = parents[i++];){
addrs.push(domUtils.getNodeIndex(ci,ingoreTxt));
}
addrs.push(domUtils.getNodeIndex(node,ingoreTxt));
//有可能是空的位置 <b>xxxx|</b>
if(node == (isStart ? me.startContainer : me.endContainer)){
addrs.push(isStart ? me.startOffset : me.endOffset)
}
return addrs;
}
addr.startAddress = getAddress(true);
if(!ingoreEnd){
addr.endAddress = getAddress();
}
return addr;
},
moveToAddress : function(addr){
var me = this;
function getNode(address,isStart){
var tmpNode = me.startContainer.ownerDocument.body,
parentNode,offset;
for(var i= 0,ci,l=address.length;i<l;i++){
ci = address[i];
parentNode = tmpNode;
tmpNode = tmpNode.childNodes[ci];
if(!tmpNode){
offset = ci;
}
}
if(isStart){
if(tmpNode){
me.setStartBefore(tmpNode)
}else{
me.setStart(parentNode,offset)
}
}else{
if(tmpNode){
me.setEndBefore(tmpNode)
}else{
me.setEnd(parentNode,offset)
}
}
}
getNode(addr.startAddress,true);
addr.endAddress && getNode(addr.endAddress);
return me;
}
};
})();
\ No newline at end of file
......@@ -1236,52 +1236,6 @@ var domUtils = dom.domUtils = {
start = start.parentNode;
}
return 1;
},
getAddr : function(node,ignoreTxt){
var parents = domUtils.findParents(node,false,function(node){return !domUtils.isBody(node)}),
addrs = [],firstIndex;
for(var i = 0,ci;ci = parents[i++];){
addrs.push(domUtils.getNodeIndex(ci,true));
}
firstIndex = domUtils.getNodeIndex(node,ignoreTxt);
if(node.nodeType == 3){
var tmpNode = node;
while(tmpNode = tmpNode.previousSibling){
if(tmpNode.nodeType == 3){
firstIndex += tmpNode.nodeValue.replace(fillCharReg,'').length;
}else{
break;
}
}
}
addrs.push(firstIndex);
return addrs;
},
setAddr : function(node,addr){
var tmpNode = node.ownerDocument.body,
parentNode;
for(var i= 0,ci,l=addr.length;i<l;i++){
ci = addr[i];
parentNode = tmpNode;
tmpNode = tmpNode.childNodes[ci];
if(!tmpNode)
break;
}
if(tmpNode){
parentNode.insertBefore(node,tmpNode)
}else{
if(parentNode){
if(parentNode.nodeType == 3){
parentNode.parentNode.insertBefore(node,parentNode)
}else{
parentNode.appendChild(node)
}
}
}
}
};
var fillCharReg = new RegExp(domUtils.fillChar, 'g');
\ No newline at end of file
......@@ -80,7 +80,8 @@
},
notNeedUndo : 1
};
var txtContent,bkRange,htmlContent;
var txtContent,htmlContent,address;
function filter(div){
var html;
......@@ -231,11 +232,8 @@
me.fireEvent('beforepaste',html);
//不用在走过滤了
if(html.html){
me.fireEvent('clearPasteBookmark');
txtContent = '<span style="display:none;line-height:0px;" id="_ue_paste_id_start">\ufeff</span>'
+ txtContent + '<span style="display:none;line-height:0px;" id="_ue_paste_id_end">\ufeff</span>';
htmlContent = '<span style="display:none;line-height:0px;" id="_ue_paste_id_start">\ufeff</span>'
+ html.html + '<span style="display:none;line-height:0px;" id="_ue_paste_id_end">\ufeff</span>';
htmlContent = html.html;
address = me.selection.getRange().createAddress(true);
me.execCommand( 'insertHtml',htmlContent,true);
me.fireEvent("afterpaste");
}
......@@ -243,75 +241,12 @@
}
}
me.addListener('clearPasteBookmark',function(){
function removeNode(id){
var node;
while(node = me.document.getElementById(id)){
var parentNode = node.parentNode;
domUtils.remove(node);
while(parentNode && !domUtils.isBody(parentNode)){
var currentNode = parentNode;
parentNode = currentNode.parentNode;
if(domUtils.isEmptyNode(currentNode)){
domUtils.remove(currentNode)
}
}
}
}
removeNode('_ue_paste_id_start');
removeNode('_ue_paste_id_end')
});
me.addListener('mousedown keydown',function(cmd,e){
if(cmd == 'mousedown' || !e.ctrlKey && !e.metaKey){
me.fireEvent('clearPasteBookmark')
}
});
var startAddr,endAddr;
me.addListener('beforegetscene',function(){
var start = me.document.getElementById('_ue_paste_id_start');
if(start){
startAddr = domUtils.getAddr(start);
}
var end = me.document.getElementById('_ue_paste_id_end');
if(end){
endAddr = domUtils.getAddr(end);
}
if(start && end){
domUtils.remove(start);
domUtils.remove(end)
}
});
me.addListener('aftergetscene',function(){
var span = domUtils.createElement(me.document,'span',{
'style' : "display:none;line-height:0px;",
'id' : "_ue_paste_id_start",
'innerHTML' : domUtils.fillChar
});
if(startAddr){
domUtils.setAddr(span,startAddr);
startAddr = null;
}
if(endAddr){
span = span.cloneNode(true);
span.id = '_ue_paste_id_end';
domUtils.setAddr(span,endAddr);
endAddr = null;
}
});
me.addListener('pasteTransfer',function(cmd,plainType){
var range = me.selection.getRange();
var start = me.document.getElementById('_ue_paste_id_start');
var end = me.document.getElementById('_ue_paste_id_end');
if(start && end && txtContent && htmlContent && txtContent != htmlContent){
range.setStartAfter(start).setEndAfter(end).deleteContents();
range.setStartBefore(start).collapse(true);
domUtils.remove(start);
range.select(true);
if(address && txtContent && htmlContent && txtContent != htmlContent){
var range = me.selection.getRange();
range.moveToAddress(address).deleteContents().select();
me.__hasEnterExecCommand = true;
me.execCommand('inserthtml',plainType ? txtContent : htmlContent,true);
me.__hasEnterExecCommand = false;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册