Changeset 963 for trunk/modules/WebKit


Ignore:
Timestamp:
02/04/08 17:23:41 (12 years ago)
Author:
ray
Message:

#1150 synchronize "Remove Format" between browsers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/modules/WebKit/WebKit.js

    r962 r963  
    327327      return true; // Indicate paste is done, stop command being issued to browser by Xinha.prototype.execCommand 
    328328    break; 
     329    case 'removeformat': 
     330      var editor = this.editor; 
     331      var sel = editor.getSelection(); 
     332      var selSave = editor.saveSelection(sel); 
     333      var range = editor.createRange(sel); 
     334 
     335      var els = editor._doc.getElementsByTagName('*'); 
     336      els = Xinha.collectionToArray(els); 
     337      var start = ( range.startContainer.nodeType == 1 ) ? range.startContainer : range.startContainer.parentNode; 
     338      var i,el,newNode, fragment, child,r2 = editor._doc.createRange(); 
     339 
     340      function clean (el) 
     341      { 
     342        if (el.nodeType != 1) return; 
     343        el.removeAttribute('style'); 
     344        for (var j=0; j<el.childNodes.length;j++) 
     345        { 
     346          clean(el.childNodes[j]); 
     347        } 
     348        if ( (el.tagName.toLowerCase() == 'span' && !el.attributes.length ) || el.tagName.toLowerCase() == 'font') 
     349        { 
     350          r2.selectNodeContents(el); 
     351          fragment = r2.extractContents(); 
     352          while (fragment.firstChild) 
     353          { 
     354            child = fragment.removeChild(fragment.firstChild); 
     355            el.parentNode.insertBefore(child, el); 
     356          } 
     357          el.parentNode.removeChild(el); 
     358        } 
     359      } 
     360      if (sel.isCollapsed) 
     361      { 
     362        els = editor._doc.body.childNodes; 
     363        for (i = 0; i < els.length; i++)  
     364        { 
     365          el = els[i]; 
     366          if (el.nodeType != 1) continue; 
     367          if (el.tagName.toLowerCase() == 'span') 
     368          { 
     369            newNode = editor.convertNode(el, 'div'); 
     370            el.parentNode.replaceChild(newNode, el); 
     371            el = newNode; 
     372          } 
     373          clean(el); 
     374        } 
     375      }  
     376      else 
     377      { 
     378        for (i=0; i<els.length;i++) 
     379        { 
     380          el = els[i]; 
     381          if ( range.isPointInRange(el, 0) || (els[i] == start && range.startOffset == 0)) 
     382          { 
     383            clean(el); 
     384          } 
     385        } 
     386      } 
     387 
     388      r2.detach(); 
     389      editor.restoreSelection(selSave); 
     390      return true; 
     391    break; 
    329392  } 
    330393 
Note: See TracChangeset for help on using the changeset viewer.