Changeset 461


Ignore:
Timestamp:
01/19/06 01:10:25 (8 years ago)
Author:
mokhet
Message:

apply checkBackspace patch from ticket #656 and fix BSD-style bracing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/htmlarea.js

    r460 r461  
    39023902        case 8: // KEY backspace 
    39033903        case 46: // KEY delete 
    3904       if (HTMLArea.is_gecko && !ev.shiftKey) { 
    3905         if (this.dom_checkBackspace()) 
     3904      if ((HTMLArea.is_gecko && !ev.shiftKey) || HTMLArea.is_ie) 
     3905      { 
     3906        if (this.checkBackspace()) 
     3907        { 
    39063908          HTMLArea._stopEvent(ev); 
    3907       } else if (HTMLArea.is_ie) { 
    3908         if (this.ie_checkBackspace()) 
    3909           HTMLArea._stopEvent(ev); 
     3909        } 
    39103910      } 
    39113911      break; 
     
    39303930}; 
    39313931 
    3932 HTMLArea.prototype.ie_checkBackspace = function() { 
    3933   var sel = this._getSelection(); 
    3934   if(HTMLArea.is_ie && sel.type == 'Control') 
    3935   { 
    3936     var elm = this._activeElement(sel); 
    3937     HTMLArea.removeFromParent(elm); 
    3938     return true; 
    3939   } 
    3940  
    3941   // This bit of code preseves links when you backspace over the 
    3942   // endpoint of the link in IE.  Without it, if you have something like 
    3943   //    link_here | 
    3944   // where | is the cursor, and backspace over the last e, then the link 
    3945   // will de-link, which is a bit tedious 
    3946   var range = this._createRange(sel); 
    3947   var r2 = range.duplicate(); 
    3948   r2.moveStart("character", -1); 
    3949   var a = r2.parentElement(); 
    3950   if (a != range.parentElement() && 
    3951       /^a$/i.test(a.tagName)) { 
    3952     r2.collapse(true); 
    3953     r2.moveEnd("character", 1); 
    3954     r2.pasteHTML(''); 
    3955     r2.select(); 
    3956     return true; 
    3957   } 
    3958 }; 
    3959  
    3960 HTMLArea.prototype.dom_checkBackspace = function() { 
    3961   var self = this; 
    3962   setTimeout(function() { 
    3963     var sel = self._getSelection(); 
    3964     var range = self._createRange(sel); 
    3965     var SC = range.startContainer; 
    3966     var SO = range.startOffset; 
    3967     var EC = range.endContainer; 
    3968     var EO = range.endOffset; 
    3969     var newr = SC.nextSibling; 
    3970     if (SC.nodeType == 3) 
    3971       SC = SC.parentNode; 
    3972     if (!/\S/.test(SC.tagName)) { 
    3973       var p = document.createElement("p"); 
    3974       while (SC.firstChild) 
    3975         p.appendChild(SC.firstChild); 
    3976       SC.parentNode.insertBefore(p, SC); 
    3977       HTMLArea.removeFromParent(SC); 
    3978       var r = range.cloneRange(); 
    3979       r.setStartBefore(newr); 
    3980       r.setEndAfter(newr); 
    3981       r.extractContents(); 
    3982       sel.removeAllRanges(); 
    3983       sel.addRange(r); 
    3984     } 
    3985   }, 10); 
    3986 }; 
     3932if(HTMLArea.is_ie) 
     3933{ 
     3934  // this function is for IE 
     3935  HTMLArea.prototype.checkBackspace = function() 
     3936  { 
     3937    var sel = this._getSelection(); 
     3938    if(sel.type == 'Control') 
     3939    { 
     3940      var elm = this._activeElement(sel); 
     3941      HTMLArea.removeFromParent(elm); 
     3942      return true; 
     3943    } 
     3944 
     3945    // This bit of code preseves links when you backspace over the 
     3946    // endpoint of the link in IE.  Without it, if you have something like 
     3947    //    link_here | 
     3948    // where | is the cursor, and backspace over the last e, then the link 
     3949    // will de-link, which is a bit tedious 
     3950    var range = this._createRange(sel); 
     3951    var r2 = range.duplicate(); 
     3952    r2.moveStart("character", -1); 
     3953    var a = r2.parentElement(); 
     3954    if (a != range.parentElement() && 
     3955        /^a$/i.test(a.tagName)) 
     3956    { 
     3957      r2.collapse(true); 
     3958      r2.moveEnd("character", 1); 
     3959      r2.pasteHTML(''); 
     3960      r2.select(); 
     3961      return true; 
     3962    } 
     3963  }; 
     3964} 
     3965else 
     3966{ 
     3967  // this function is for DOM 
     3968  HTMLArea.prototype.checkBackspace = function() 
     3969  { 
     3970    var self = this; 
     3971    setTimeout(function() 
     3972      { 
     3973        var sel = self._getSelection(); 
     3974        var range = self._createRange(sel); 
     3975        var SC = range.startContainer; 
     3976        var SO = range.startOffset; 
     3977        var EC = range.endContainer; 
     3978        var EO = range.endOffset; 
     3979        var newr = SC.nextSibling; 
     3980        if (SC.nodeType == 3) 
     3981        { 
     3982          SC = SC.parentNode; 
     3983        } 
     3984        if (!/\S/.test(SC.tagName)) 
     3985        { 
     3986          var p = document.createElement("p"); 
     3987          while (SC.firstChild) 
     3988          { 
     3989            p.appendChild(SC.firstChild); 
     3990          } 
     3991          SC.parentNode.insertBefore(p, SC); 
     3992          HTMLArea.removeFromParent(SC); 
     3993          var r = range.cloneRange(); 
     3994          r.setStartBefore(newr); 
     3995          r.setEndAfter(newr); 
     3996          r.extractContents(); 
     3997          sel.removeAllRanges(); 
     3998          sel.addRange(r); 
     3999        } 
     4000      }, 10); 
     4001  }; 
     4002} 
    39874003 
    39884004/** The idea here is 
Note: See TracChangeset for help on using the changeset viewer.