Ticket #656: checkBackspace.patch

File checkBackspace.patch, 4.1 KB (added by mokhet, 14 years ago)
  • htmlarea.js

     
    38033803        case 8: // KEY backspace 
    38043804        case 46: // KEY delete 
    38053805      if (HTMLArea.is_gecko && !ev.shiftKey) { 
    3806         if (this.dom_checkBackspace()) 
     3806        if (this.checkBackspace()) 
    38073807          HTMLArea._stopEvent(ev); 
    38083808      } else if (HTMLArea.is_ie) { 
    3809         if (this.ie_checkBackspace()) 
     3809        if (this.checkBackspace()) 
    38103810          HTMLArea._stopEvent(ev); 
    38113811      } 
    38123812      break; 
     
    38303830  return newel; 
    38313831}; 
    38323832 
    3833 HTMLArea.prototype.ie_checkBackspace = function() { 
    3834   var sel = this._getSelection(); 
    3835   if(HTMLArea.is_ie && sel.type == 'Control') 
    3836   { 
    3837     var elm = this._activeElement(sel); 
    3838     HTMLArea.removeFromParent(elm); 
    3839     return true; 
    3840   } 
     3833if (HTMLArea.is_ie) 
     3834{ 
     3835  HTMLArea.prototype.checkBackspace = function() { 
     3836    var sel = this._getSelection(); 
     3837    if(sel.type == 'Control') 
     3838    { 
     3839      var elm = this._activeElement(sel); 
     3840      HTMLArea.removeFromParent(elm); 
     3841      return true; 
     3842    } 
    38413843 
    3842   // This bit of code preseves links when you backspace over the 
    3843   // endpoint of the link in IE.  Without it, if you have something like 
    3844   //    link_here | 
    3845   // where | is the cursor, and backspace over the last e, then the link 
    3846   // will de-link, which is a bit tedious 
    3847   var range = this._createRange(sel); 
    3848   var r2 = range.duplicate(); 
    3849   r2.moveStart("character", -1); 
    3850   var a = r2.parentElement(); 
    3851   if (a != range.parentElement() && 
    3852       /^a$/i.test(a.tagName)) { 
    3853     r2.collapse(true); 
    3854     r2.moveEnd("character", 1); 
    3855     r2.pasteHTML(''); 
    3856     r2.select(); 
    3857     return true; 
    3858   } 
    3859 }; 
    3860  
    3861 HTMLArea.prototype.dom_checkBackspace = function() { 
    3862   var self = this; 
    3863   setTimeout(function() { 
    3864     var sel = self._getSelection(); 
    3865     var range = self._createRange(sel); 
    3866     var SC = range.startContainer; 
    3867     var SO = range.startOffset; 
    3868     var EC = range.endContainer; 
    3869     var EO = range.endOffset; 
    3870     var newr = SC.nextSibling; 
    3871     if (SC.nodeType == 3) 
    3872       SC = SC.parentNode; 
    3873     if (!/\S/.test(SC.tagName)) { 
    3874       var p = document.createElement("p"); 
    3875       while (SC.firstChild) 
    3876         p.appendChild(SC.firstChild); 
    3877       SC.parentNode.insertBefore(p, SC); 
    3878       HTMLArea.removeFromParent(SC); 
    3879       var r = range.cloneRange(); 
    3880       r.setStartBefore(newr); 
    3881       r.setEndAfter(newr); 
    3882       r.extractContents(); 
    3883       sel.removeAllRanges(); 
    3884       sel.addRange(r); 
     3844    // This bit of code preseves links when you backspace over the 
     3845    // endpoint of the link in IE.  Without it, if you have something like 
     3846    //    link_here | 
     3847    // where | is the cursor, and backspace over the last e, then the link 
     3848    // will de-link, which is a bit tedious 
     3849    var range = this._createRange(sel); 
     3850    var r2 = range.duplicate(); 
     3851    r2.moveStart("character", -1); 
     3852    var a = r2.parentElement(); 
     3853    if (a != range.parentElement() && 
     3854        /^a$/i.test(a.tagName)) { 
     3855      r2.collapse(true); 
     3856      r2.moveEnd("character", 1); 
     3857      r2.pasteHTML(''); 
     3858      r2.select(); 
     3859      return true; 
    38853860    } 
    3886   }, 10); 
    3887 }; 
     3861  }; 
     3862} 
     3863else 
     3864{ 
     3865  HTMLArea.prototype.checkBackspace = function() { 
     3866    var self = this; 
     3867    setTimeout(function() { 
     3868      var sel = self._getSelection(); 
     3869      var range = self._createRange(sel); 
     3870      var SC = range.startContainer; 
     3871      var SO = range.startOffset; 
     3872      var EC = range.endContainer; 
     3873      var EO = range.endOffset; 
     3874      var newr = SC.nextSibling; 
     3875      if (SC.nodeType == 3) 
     3876        SC = SC.parentNode; 
     3877      if (!/\S/.test(SC.tagName)) { 
     3878        var p = document.createElement("p"); 
     3879        while (SC.firstChild) 
     3880          p.appendChild(SC.firstChild); 
     3881        SC.parentNode.insertBefore(p, SC); 
     3882        HTMLArea.removeFromParent(SC); 
     3883        var r = range.cloneRange(); 
     3884        r.setStartBefore(newr); 
     3885        r.setEndAfter(newr); 
     3886        r.extractContents(); 
     3887        sel.removeAllRanges(); 
     3888        sel.addRange(r); 
     3889      } 
     3890    }, 10); 
     3891  }; 
     3892} 
    38883893 
    38893894/** The idea here is 
    38903895 * 1. See if we are in a block element