| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 | 
							- /* 处理特殊键的兼容性问题 */
 
- UE.plugins['keystrokes'] = function() {
 
-     var me = this;
 
-     var collapsed = true;
 
-     me.addListener('keydown', function(type, evt) {
 
-         var keyCode = evt.keyCode || evt.which,
 
-             rng = me.selection.getRange();
 
-         //处理全选的情况
 
-         if(!rng.collapsed && !(evt.ctrlKey || evt.shiftKey || evt.altKey || evt.metaKey) && (keyCode >= 65 && keyCode <=90
 
-             || keyCode >= 48 && keyCode <= 57 ||
 
-             keyCode >= 96 && keyCode <= 111 || {
 
-                     13:1,
 
-                     8:1,
 
-                     46:1
 
-                 }[keyCode])
 
-             ){
 
-             var tmpNode = rng.startContainer;
 
-             if(domUtils.isFillChar(tmpNode)){
 
-                 rng.setStartBefore(tmpNode)
 
-             }
 
-             tmpNode = rng.endContainer;
 
-             if(domUtils.isFillChar(tmpNode)){
 
-                 rng.setEndAfter(tmpNode)
 
-             }
 
-             rng.txtToElmBoundary();
 
-             //结束边界可能放到了br的前边,要把br包含进来
 
-             // x[xxx]<br/>
 
-             if(rng.endContainer && rng.endContainer.nodeType == 1){
 
-                 tmpNode = rng.endContainer.childNodes[rng.endOffset];
 
-                 if(tmpNode && domUtils.isBr(tmpNode)){
 
-                     rng.setEndAfter(tmpNode);
 
-                 }
 
-             }
 
-             if(rng.startOffset == 0){
 
-                 tmpNode = rng.startContainer;
 
-                 if(domUtils.isBoundaryNode(tmpNode,'firstChild') ){
 
-                     tmpNode = rng.endContainer;
 
-                     if(rng.endOffset == (tmpNode.nodeType == 3 ? tmpNode.nodeValue.length : tmpNode.childNodes.length) && domUtils.isBoundaryNode(tmpNode,'lastChild')){
 
-                         me.fireEvent('saveScene');
 
-                         me.body.innerHTML = '<p>'+(browser.ie ? '' : '<br/>')+'</p>';
 
-                         rng.setStart(me.body.firstChild,0).setCursor(false,true);
 
-                         me._selectionChange();
 
-                         return;
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         //处理backspace
 
-         if (keyCode == keymap.Backspace) {
 
-             rng = me.selection.getRange();
 
-             collapsed = rng.collapsed;
 
-             if(me.fireEvent('delkeydown',evt)){
 
-                 return;
 
-             }
 
-             var start,end;
 
-             //避免按两次删除才能生效的问题
 
-             if(rng.collapsed && rng.inFillChar()){
 
-                 start = rng.startContainer;
 
-                 if(domUtils.isFillChar(start)){
 
-                     rng.setStartBefore(start).shrinkBoundary(true).collapse(true);
 
-                     domUtils.remove(start)
 
-                 }else{
 
-                     start.nodeValue = start.nodeValue.replace(new RegExp('^' + domUtils.fillChar ),'');
 
-                     rng.startOffset--;
 
-                     rng.collapse(true).select(true)
 
-                 }
 
-             }
 
-             //解决选中control元素不能删除的问题
 
-             if (start = rng.getClosedNode()) {
 
-                 me.fireEvent('saveScene');
 
-                 rng.setStartBefore(start);
 
-                 domUtils.remove(start);
 
-                 rng.setCursor();
 
-                 me.fireEvent('saveScene');
 
-                 domUtils.preventDefault(evt);
 
-                 return;
 
-             }
 
-             //阻止在table上的删除
 
-             if (!browser.ie) {
 
-                 start = domUtils.findParentByTagName(rng.startContainer, 'table', true);
 
-                 end = domUtils.findParentByTagName(rng.endContainer, 'table', true);
 
-                 if (start && !end || !start && end || start !== end) {
 
-                     evt.preventDefault();
 
-                     return;
 
-                 }
 
-             }
 
-         }
 
-         //处理tab键的逻辑
 
-         if (keyCode == keymap.Tab) {
 
-             //不处理以下标签
 
-             var excludeTagNameForTabKey = {
 
-                 'ol' : 1,
 
-                 'ul' : 1,
 
-                 'table':1
 
-             };
 
-             //处理组件里的tab按下事件
 
-             if(me.fireEvent('tabkeydown',evt)){
 
-                 domUtils.preventDefault(evt);
 
-                 return;
 
-             }
 
-             var range = me.selection.getRange();
 
-             me.fireEvent('saveScene');
 
-             for (var i = 0,txt = '',tabSize = me.options.tabSize|| 4,tabNode =  me.options.tabNode || ' '; i < tabSize; i++) {
 
-                 txt += tabNode;
 
-             }
 
-             var span = me.document.createElement('span');
 
-             span.innerHTML = txt + domUtils.fillChar;
 
-             if (range.collapsed) {
 
-                 range.insertNode(span.cloneNode(true).firstChild).setCursor(true);
 
-             } else {
 
-                 var filterFn = function(node) {
 
-                     return domUtils.isBlockElm(node) && !excludeTagNameForTabKey[node.tagName.toLowerCase()]
 
-                 };
 
-                 //普通的情况
 
-                 start = domUtils.findParent(range.startContainer, filterFn,true);
 
-                 end = domUtils.findParent(range.endContainer, filterFn,true);
 
-                 if (start && end && start === end) {
 
-                     range.deleteContents();
 
-                     range.insertNode(span.cloneNode(true).firstChild).setCursor(true);
 
-                 } else {
 
-                     var bookmark = range.createBookmark();
 
-                     range.enlarge(true);
 
-                     var bookmark2 = range.createBookmark(),
 
-                         current = domUtils.getNextDomNode(bookmark2.start, false, filterFn);
 
-                     while (current && !(domUtils.getPosition(current, bookmark2.end) & domUtils.POSITION_FOLLOWING)) {
 
-                         current.insertBefore(span.cloneNode(true).firstChild, current.firstChild);
 
-                         current = domUtils.getNextDomNode(current, false, filterFn);
 
-                     }
 
-                     range.moveToBookmark(bookmark2).moveToBookmark(bookmark).select();
 
-                 }
 
-             }
 
-             domUtils.preventDefault(evt)
 
-         }
 
-         //trace:1634
 
-         //ff的del键在容器空的时候,也会删除
 
-         if(browser.gecko && keyCode == 46){
 
-             range = me.selection.getRange();
 
-             if(range.collapsed){
 
-                 start = range.startContainer;
 
-                 if(domUtils.isEmptyBlock(start)){
 
-                     var parent = start.parentNode;
 
-                     while(domUtils.getChildCount(parent) == 1 && !domUtils.isBody(parent)){
 
-                         start = parent;
 
-                         parent = parent.parentNode;
 
-                     }
 
-                     if(start === parent.lastChild)
 
-                         evt.preventDefault();
 
-                     return;
 
-                 }
 
-             }
 
-         }
 
-         /* 修复在编辑区域快捷键 (Mac:meta+alt+I; Win:ctrl+shift+I) 打不开 chrome 控制台的问题 */
 
-         browser.chrome && me.on('keydown', function(type, e){
 
-             var keyCode = e.keyCode || e.which;
 
-             if (((e.metaKey && e.altKey) || (e.ctrlKey && e.shiftKey)) && keyCode == 73) {
 
-                 return true;
 
-             }
 
-         });
 
-     });
 
-     me.addListener('keyup', function(type, evt) {
 
-         var keyCode = evt.keyCode || evt.which,
 
-             rng,me = this;
 
-         if(keyCode == keymap.Backspace){
 
-             if(me.fireEvent('delkeyup')){
 
-                 return;
 
-             }
 
-             rng = me.selection.getRange();
 
-             if(rng.collapsed){
 
-                 var tmpNode,
 
-                     autoClearTagName = ['h1','h2','h3','h4','h5','h6'];
 
-                 if(tmpNode = domUtils.findParentByTagName(rng.startContainer,autoClearTagName,true)){
 
-                     if(domUtils.isEmptyBlock(tmpNode)){
 
-                         var pre = tmpNode.previousSibling;
 
-                         if(pre && pre.nodeName != 'TABLE'){
 
-                             domUtils.remove(tmpNode);
 
-                             rng.setStartAtLast(pre).setCursor(false,true);
 
-                             return;
 
-                         }else{
 
-                             var next = tmpNode.nextSibling;
 
-                             if(next && next.nodeName != 'TABLE'){
 
-                                 domUtils.remove(tmpNode);
 
-                                 rng.setStartAtFirst(next).setCursor(false,true);
 
-                                 return;
 
-                             }
 
-                         }
 
-                     }
 
-                 }
 
-                 //处理当删除到body时,要重新给p标签展位
 
-                 if(domUtils.isBody(rng.startContainer)){
 
-                     var tmpNode = domUtils.createElement(me.document,'p',{
 
-                         'innerHTML' : browser.ie ? domUtils.fillChar : '<br/>'
 
-                     });
 
-                     rng.insertNode(tmpNode).setStart(tmpNode,0).setCursor(false,true);
 
-                 }
 
-             }
 
-             //chrome下如果删除了inline标签,浏览器会有记忆,在输入文字还是会套上刚才删除的标签,所以这里再选一次就不会了
 
-             if( !collapsed && (rng.startContainer.nodeType == 3 || rng.startContainer.nodeType == 1 && domUtils.isEmptyBlock(rng.startContainer))){
 
-                 if(browser.ie){
 
-                     var span = rng.document.createElement('span');
 
-                     rng.insertNode(span).setStartBefore(span).collapse(true);
 
-                     rng.select();
 
-                     domUtils.remove(span)
 
-                 }else{
 
-                     rng.select()
 
-                 }
 
-             }
 
-         }
 
-     })
 
- };
 
 
  |