Ticket #1541: formatblock.2.diff

File formatblock.2.diff, 3.1 KB (added by ejucovy, 9 years ago)

a much simpler patch that lets me accomplish the same thing more elegantly

  • XinhaCore.js

     
    10581058    "Address"  : "address", 
    10591059    "Formatted": "pre" 
    10601060  }; 
    1061    
     1061 
     1062  this.formatblockDetector = {}; 
     1063 
    10621064  this.dialogOptions = 
    10631065  {  
    10641066    'centered' : true, //true: dialog is shown in the center the screen, false dialog is shown near the clicked toolbar button 
     
    49014903        var blocks = []; 
    49024904        for ( var indexBlock in this.config.formatblock ) 
    49034905        { 
     4906          var blockname = this.config.formatblock[indexBlock]; 
    49044907          // prevent iterating over wrong type 
    4905           if ( typeof this.config.formatblock[indexBlock] == 'string' ) 
     4908          if ( typeof blockname == 'string' ) 
    49064909          { 
    4907             blocks[blocks.length] = this.config.formatblock[indexBlock]; 
     4910            blocks[blocks.length] = this.config.formatblockDetector[blockname] || blockname; 
    49084911          } 
    49094912        } 
    49104913 
    4911         var deepestAncestor = this._getFirstAncestor(this.getSelection(), blocks); 
     4914        var match = this._getFirstAncestorAndWhy(this.getSelection(), blocks); 
     4915        var deepestAncestor = match[0]; 
     4916        var matchIndex = match[1]; 
    49124917        if ( deepestAncestor ) 
    49134918        { 
    4914           for ( var x = 0; x < blocks.length; x++ ) 
    4915           { 
    4916             if ( blocks[x].toLowerCase() == deepestAncestor.tagName.toLowerCase() ) 
    4917             { 
    4918               btn.element.selectedIndex = x; 
    4919             } 
    4920           } 
     4919          btn.element.selectedIndex = matchIndex; 
    49214920        } 
    49224921        else 
    49234922        { 
     
    50475046 */ 
    50485047Xinha.prototype._getFirstAncestor = function(sel, types) 
    50495048{ 
     5049  return this._getFirstAncestorAndWhy(sel, types)[0]; 
     5050}; 
     5051 
     5052// same as above, but also returns index into types array of match 
     5053Xinha.prototype._getFirstAncestorAndWhy = function(sel, types) 
     5054{ 
    50505055  var prnt = this.activeElement(sel); 
    50515056  if ( prnt === null ) 
    50525057  { 
     
    50575062    } 
    50585063    catch(ex) 
    50595064    { 
    5060       return null; 
     5065      return [null, null]; 
    50615066    } 
    50625067  } 
    50635068 
     
    50725077    { 
    50735078      if ( types === null ) 
    50745079      { 
    5075         return prnt; 
     5080        return [prnt, null]; 
    50765081      } 
    50775082      for (var index=0; index<types.length; ++index) { 
    50785083        if (typeof types[index] == 'string' && types[index] == prnt.tagName.toLowerCase()){ 
    50795084          // Criteria is a tag name.  It matches 
    5080         return prnt; 
     5085          return [prnt, index]; 
    50815086      } 
    50825087        else if (typeof types[index] == 'function' && types[index](this, prnt)) { 
    50835088          // Criteria is a callback.  It matches 
    5084           return prnt; 
     5089          return [prnt, index]; 
    50855090        } 
    50865091      } 
    50875092 
     
    50975102    prnt = prnt.parentNode; 
    50985103  } 
    50995104 
    5100   return null; 
     5105  return [null, null]; 
    51015106}; 
    51025107 
    51035108/** Traverses the DOM upwards and returns the first element that is a block level element 
     
    52215226      this.execCommand(txt, false, value); 
    52225227    break; 
    52235228    case "formatblock": 
    5224       // Mozilla inserts an empty tag (<>) if no parameter is passed   
     5229      // Mozilla inserts an empty tag (<>) if no parameter is passed 
    52255230      if ( !value ) 
    52265231      { 
    52275232        this.updateToolbar();