Ticket #1541: formatblock.diff

File formatblock.diff, 3.0 KB (added by guest, 8 years ago)
  • XinhaCore.js

     
    17501750        // == "formatblock" we retrieve config.formatblock (or 
    17511751        // a different way to write it in JS is 
    17521752        // config["formatblock"]. 
    1753         options = editor.config[txt]; 
     1753        options = {}; 
     1754        for (var i in editor.config[txt]) 
     1755        { 
     1756          val = editor.config[txt][i]; 
     1757          if (typeof val == 'object') { 
     1758            options[i] = val.tag; 
     1759          } 
     1760          else 
     1761          { 
     1762            options[i] = val; 
     1763          } 
     1764        } 
    17541765        cmd = txt; 
    17551766      break; 
    17561767      default: 
     
    48824894        var blocks = []; 
    48834895        for ( var indexBlock in this.config.formatblock ) 
    48844896        { 
    4885           // prevent iterating over wrong type 
    4886           if ( typeof this.config.formatblock[indexBlock] == 'string' ) 
     4897          var blockItem = this.config.formatblock[indexBlock]; 
     4898          if (typeof blockItem == 'object') 
    48874899          { 
    4888             blocks[blocks.length] = this.config.formatblock[indexBlock]; 
     4900            blocks[blocks.length] = blockItem.detect || blockItem.tag; 
    48894901          } 
     4902          else if (typeof blockItem == 'string') 
     4903          { 
     4904            blocks[blocks.length] = blockItem; 
     4905          } 
    48904906        } 
    48914907 
    48924908        var deepestAncestor = this._getFirstAncestor(this.getSelection(), blocks); 
     
    48944910        { 
    48954911          for ( var x = 0; x < blocks.length; x++ ) 
    48964912          { 
    4897             if ( blocks[x].toLowerCase() == deepestAncestor.tagName.toLowerCase() ) 
     4913            if (typeof blocks[x] == 'function') 
    48984914            { 
     4915              if (blocks[x](this, deepestAncestor)) 
     4916              { 
     4917                btn.element.selectedIndex = x; 
     4918                break; 
     4919              } 
     4920            } 
     4921            else if ( blocks[x].toLowerCase() == deepestAncestor.tagName.toLowerCase() ) 
     4922            { 
    48994923              btn.element.selectedIndex = x; 
    49004924            } 
    49014925          } 
     
    52025226      this.execCommand(txt, false, value); 
    52035227    break; 
    52045228    case "formatblock": 
    5205       // Mozilla inserts an empty tag (<>) if no parameter is passed   
     5229      // Mozilla inserts an empty tag (<>) if no parameter is passed 
    52065230      if ( !value ) 
    52075231      { 
    52085232        this.updateToolbar(); 
    52095233        break; 
    52105234      } 
     5235      var invoker = null; 
     5236      for (var i in this.config.formatblock) 
     5237      { 
     5238        var val = this.config.formatblock[i]; 
     5239        if (typeof val == 'object' 
     5240            && val.tag == value) 
     5241        { 
     5242          invoker = val.invoker || null; 
     5243          break; 
     5244        } 
     5245      } 
     5246 
    52115247      if( !Xinha.is_gecko || value !== 'blockquote' ) 
    52125248      { 
    52135249        value = "<" + value + ">"; 
    52145250      } 
    5215       this.execCommand(txt, false, value); 
     5251      if (invoker) 
     5252      { 
     5253        invoker(this); 
     5254      } else { 
     5255        this.execCommand(txt, false, value); 
     5256      } 
    52165257    break; 
    52175258    default: 
    52185259      // try to look it up in the registered dropdowns