123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- ///import core
- ///commands 为非ie浏览器自动添加a标签
- ///commandsName AutoLink
- ///commandsTitle 自动增加链接
- /**
- * @description 为非ie浏览器自动添加a标签
- * @author zhanyi
- */
- UE.plugins['autolink'] = function() {
- var cont = 0;
- if (browser.ie) {
- return;
- }
- var me = this;
- me.addListener('reset',function(){
- cont = 0;
- });
- me.addListener('keydown', function(type, evt) {
- var keyCode = evt.keyCode || evt.which;
- if (keyCode == 32 || keyCode == 13) {
- var sel = me.selection.getNative(),
- range = sel.getRangeAt(0).cloneRange(),
- offset,
- charCode;
- var start = range.startContainer;
- while (start.nodeType == 1 && range.startOffset > 0) {
- start = range.startContainer.childNodes[range.startOffset - 1];
- if (!start){
- break;
- }
- range.setStart(start, start.nodeType == 1 ? start.childNodes.length : start.nodeValue.length);
- range.collapse(true);
- start = range.startContainer;
- }
- do{
- if (range.startOffset == 0) {
- start = range.startContainer.previousSibling;
- while (start && start.nodeType == 1) {
- start = start.lastChild;
- }
- if (!start || domUtils.isFillChar(start)){
- break;
- }
- offset = start.nodeValue.length;
- } else {
- start = range.startContainer;
- offset = range.startOffset;
- }
- range.setStart(start, offset - 1);
- charCode = range.toString().charCodeAt(0);
- } while (charCode != 160 && charCode != 32);
- if (range.toString().replace(new RegExp(domUtils.fillChar, 'g'), '').match(/(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i)) {
- while(range.toString().length){
- if(/^(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i.test(range.toString())){
- break;
- }
- try{
- range.setStart(range.startContainer,range.startOffset+1);
- }catch(e){
- //trace:2121
- var start = range.startContainer;
- while(!(next = start.nextSibling)){
- if(domUtils.isBody(start)){
- return;
- }
- start = start.parentNode;
- }
- range.setStart(next,0);
- }
- }
- //range的开始边界已经在a标签里的不再处理
- if(domUtils.findParentByTagName(range.startContainer,'a',true)){
- return;
- }
- var a = me.document.createElement('a'),text = me.document.createTextNode(' '),href;
- me.undoManger && me.undoManger.save();
- a.appendChild(range.extractContents());
- a.href = a.innerHTML = a.innerHTML.replace(/<[^>]+>/g,'');
- href = a.getAttribute("href").replace(new RegExp(domUtils.fillChar,'g'),'');
- href = /^(?:https?:\/\/)/ig.test(href) ? href : "http://"+ href;
- a.setAttribute('data_ue_src',utils.html(href));
- a.href = utils.html(href);
- range.insertNode(a);
- a.parentNode.insertBefore(text, a.nextSibling);
- range.setStart(text, 0);
- range.collapse(true);
- sel.removeAllRanges();
- sel.addRange(range);
- me.undoManger && me.undoManger.save();
- }
- }
- });
- };
|