Changeset 1390


Ignore:
Timestamp:
02/08/18 22:47:46 (10 months ago)
Author:
gogo
Message:

#1550 Inserting or deleting cells in TableOperations? can be confusing for users (leading to non-existent cells, correctly). Add a xinha_config.TableOperations.toolbarLayout = 'compact'; option which reduces the compexity. Also add xinha_config.TableOperations.renameSplitCellButton = 'Unmerge Cells'; because "split" is confusing when it can only be used on merged cells, you expect it to work on normal cells and create two cells from one, "Unmerge" is clearer.

Location:
trunk/plugins
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/plugins/ContextMenu/ContextMenu.js

    r1379 r1390  
    5252        var tbo = this.editor.plugins.TableOperations; 
    5353        if (tbo) tbo = tbo.instance; 
    54  
    5554        var selection = editor.hasSelectedText(); 
    5655        if (!Xinha.is_gecko) { 
     
    139138                        td = target; 
    140139                        if (!tbo) break; 
    141                         elmenus.push(null, 
    142                                      [ Xinha._lc("C_ell Properties...", "ContextMenu"), 
     140                        elmenus.push(null); 
     141      if(typeof config.btnList["TO-cell-prop"] != 'undefined') 
     142      { 
     143                                     elmenus.push([ Xinha._lc("C_ell Properties...", "ContextMenu"), 
    143144                                       function() { tableOperation("TO-cell-prop"); }, 
    144145                                       Xinha._lc("Show the Table Cell Properties dialog", "ContextMenu"), 
    145                                        config.btnList["TO-cell-prop"][1] ], 
    146  
     146                                       config.btnList["TO-cell-prop"][1] ]); 
     147      } 
     148       
     149      if(typeof config.btnList["TO-cell-insert-after"] != 'undefined') 
     150      { 
     151             elmenus.push( 
    147152             [ Xinha._lc("Insert Cell After", "ContextMenu"), 
    148153                                       function() { tableOperation("TO-cell-insert-after"); }, 
    149154                                       Xinha._lc("Insert Cell After", "ContextMenu"), 
    150                                        config.btnList["TO-cell-insert-after"][1] ], 
    151  
    152              [ Xinha._lc("Insert Cell Before", "ContextMenu"), 
     155                                       config.btnList["TO-cell-insert-after"][1] ]); 
     156      } 
     157       
     158      if(typeof config.btnList["TO-cell-insert-before"] != 'undefined') 
     159      { 
     160             elmenus.push([ Xinha._lc("Insert Cell Before", "ContextMenu"), 
    153161                                       function() { tableOperation("TO-cell-insert-before"); }, 
    154162                                       Xinha._lc("Insert Cell After", "ContextMenu"), 
    155                                        config.btnList["TO-cell-insert-before"][1] ], 
    156  
    157              [ Xinha._lc("Delete Cell", "ContextMenu"), 
     163                                       config.btnList["TO-cell-insert-before"][1] ]); 
     164      } 
     165       
     166      if(typeof config.btnList["TO-cell-delete"] != 'undefined') 
     167      { 
     168             elmenus.push([ Xinha._lc("Delete Cell", "ContextMenu"), 
    158169                                       function() { tableOperation("TO-cell-delete"); }, 
    159170                                       Xinha._lc("Delete Cell", "ContextMenu"), 
    160                                        config.btnList["TO-cell-delete"][1] ], 
    161  
    162              [ Xinha._lc("Merge Cells", "ContextMenu"), 
     171                                       config.btnList["TO-cell-delete"][1] ]); 
     172      } 
     173       
     174      if(typeof config.btnList["TO-cell-merge"] != 'undefined') 
     175      { 
     176             elmenus.push([ Xinha._lc("Merge Cells", "ContextMenu"), 
    163177                                       function() { tableOperation("TO-cell-merge"); }, 
    164178                                       Xinha._lc("Merge Cells", "ContextMenu"), 
    165179                                       config.btnList["TO-cell-merge"][1] ] 
    166180                                ); 
     181      } 
    167182                        break; 
    168183                    case "tr": 
    169184                        tr = target; 
    170185                        if (!tbo) break; 
    171                         elmenus.push(null, 
    172                                      [ Xinha._lc("Ro_w Properties...", "ContextMenu"), 
     186                        elmenus.push(null); 
     187       
     188      if(typeof config.btnList["TO-row-prop"] != 'undefined') 
     189      { 
     190             elmenus.push([ Xinha._lc("Ro_w Properties...", "ContextMenu"), 
    173191                                       function() { tableOperation("TO-row-prop"); }, 
    174192                                       Xinha._lc("Show the Table Row Properties dialog", "ContextMenu"), 
    175                                        config.btnList["TO-row-prop"][1] ], 
    176  
    177                                      [ Xinha._lc("I_nsert Row Before", "ContextMenu"), 
     193                                       config.btnList["TO-row-prop"][1] ]); 
     194      } 
     195       
     196      if(typeof config.btnList["TO-row-insert-above"] != 'undefined') 
     197      { 
     198             elmenus.push([ Xinha._lc("I_nsert Row Before", "ContextMenu"), 
    178199                                       function() { tableOperation("TO-row-insert-above"); }, 
    179200                                       Xinha._lc("Insert a new row before the current one", "ContextMenu"), 
    180                                        config.btnList["TO-row-insert-above"][1] ], 
    181  
    182                                      [ Xinha._lc("In_sert Row After", "ContextMenu"), 
     201                                       config.btnList["TO-row-insert-above"][1] ]); 
     202      } 
     203       
     204      if(typeof config.btnList["TO-row-insert-under"] != 'undefined') 
     205      { 
     206             elmenus.push([ Xinha._lc("In_sert Row After", "ContextMenu"), 
    183207                                       function() { tableOperation("TO-row-insert-under"); }, 
    184208                                       Xinha._lc("Insert a new row after the current one", "ContextMenu"), 
    185                                        config.btnList["TO-row-insert-under"][1] ], 
    186  
    187                                      [ Xinha._lc("_Delete Row", "ContextMenu"), 
     209                                       config.btnList["TO-row-insert-under"][1] ]); 
     210      } 
     211       
     212      if(typeof config.btnList["TO-row-delete"] != 'undefined') 
     213      { 
     214             elmenus.push([ Xinha._lc("_Delete Row", "ContextMenu"), 
    188215                                       function() { tableOperation("TO-row-delete"); }, 
    189216                                       Xinha._lc("Delete the current row", "ContextMenu"), 
    190217                                       config.btnList["TO-row-delete"][1] ] 
    191218                                ); 
     219      } 
    192220                        break; 
    193221                    case "table": 
    194222                        table = target; 
    195223                        if (!tbo) break; 
    196                         elmenus.push(null, 
    197                                      [ Xinha._lc("_Table Properties...", "ContextMenu"), 
     224                        elmenus.push(null); 
     225       
     226      if(typeof config.btnList["TO-table-prop"] != 'undefined') 
     227      { 
     228             elmenus.push([ Xinha._lc("_Table Properties...", "ContextMenu"), 
    198229                                       function() { tableOperation("TO-table-prop"); }, 
    199230                                       Xinha._lc("Show the Table Properties dialog", "ContextMenu"), 
    200                                        config.btnList["TO-table-prop"][1] ], 
    201  
    202                                      [ Xinha._lc("Insert _Column Before", "ContextMenu"), 
     231                                       config.btnList["TO-table-prop"][1] ]); 
     232      } 
     233       
     234      if(typeof config.btnList["TO-col-insert-before"] != 'undefined') 
     235      { 
     236             elmenus.push([ Xinha._lc("Insert _Column Before", "ContextMenu"), 
    203237                                       function() { tableOperation("TO-col-insert-before"); }, 
    204238                                       Xinha._lc("Insert a new column before the current one", "ContextMenu"), 
    205                                        config.btnList["TO-col-insert-before"][1] ], 
    206  
    207                                      [ Xinha._lc("Insert C_olumn After", "ContextMenu"), 
     239                                       config.btnList["TO-col-insert-before"][1] ]); 
     240      } 
     241       
     242      if(typeof config.btnList["TO-col-insert-after"] != 'undefined') 
     243      { 
     244             elmenus.push([ Xinha._lc("Insert C_olumn After", "ContextMenu"), 
    208245                                       function() { tableOperation("TO-col-insert-after"); }, 
    209246                                       Xinha._lc("Insert a new column after the current one", "ContextMenu"), 
    210                                        config.btnList["TO-col-insert-after"][1] ], 
    211  
    212                                      [ Xinha._lc("De_lete Column", "ContextMenu"), 
     247                                       config.btnList["TO-col-insert-after"][1] ]); 
     248      } 
     249       
     250      if(typeof config.btnList["TO-col-delete"] != 'undefined') 
     251      { 
     252             elmenus.push([ Xinha._lc("De_lete Column", "ContextMenu"), 
    213253                                       function() { tableOperation("TO-col-delete"); }, 
    214254                                       Xinha._lc("Delete the current column", "ContextMenu"), 
    215255                                       config.btnList["TO-col-delete"][1] ] 
    216256                                ); 
     257      } 
    217258                        break; 
    218259                    case "body": 
  • trunk/plugins/TableOperations/TableOperations.js

    r1382 r1390  
    2121  'tabToNext':   true, // Hit tab in a table cell goes to next (shift for prev) cell 
    2222  'dblClickOpenTableProperties': false, // Double click on a cell to open table properties (I don't like this, it's unintuitive when you double-click to select a word, perhaps if it was default only for empty cells - James) 
     23  'toolbarLayout': 'compact', // 'compact' or anything else will give you full 
     24  'renameSplitCellButton': 'Unmerge Cells', // Split cell isn't a very obvious term, it implies being able to make new cells, really it is unmerging merged cells and can only be used in that context 
    2325  'addToolbarLineBreak': true // By default TableOperations adds a 'linebreak' in the toolbar. 
    2426  // Set to false to prevent this and instead just append the buttons without a 'linebreak'. 
     
    2931 
    3032  var cfg = editor.config; 
    31   var bl = TableOperations.btnList; 
    3233  var self = this; 
    3334 
     
    3940  var toolbar; 
    4041  if( cfg.TableOperations.addToolbarLineBreak ) { 
    41     toolbar = ["linebreak", "inserttable", "toggleborders"]; 
     42    toolbar = ["linebreak"]; 
    4243  } else { 
    43     toolbar = ["inserttable", "toggleborders"]; 
    44   } 
    45  
     44    toolbar = ["inserttable"]; 
     45  } 
     46 
     47  var bl = [ ]; 
     48  var tb_order = null; 
     49  switch(editor.config.TableOperations.toolbarLayout) 
     50  { 
     51    case 'compact': 
     52      tb_order = [ 
     53        null, 
     54        'inserttable', 
     55        'toggleborders', 
     56        'table-prop', 
     57        'row-prop', 
     58        'cell-prop', 
     59        null, 
     60        'row-insert-above', 
     61        'row-insert-under', 
     62        'row-delete', 
     63 
     64        'col-insert-before', 
     65        'col-insert-after', 
     66        'col-delete', 
     67        null, 
     68        'cell-merge', 
     69        'cell-split' 
     70      ]; 
     71       
     72      break;     
     73       
     74    default: 
     75      break; 
     76  } 
     77   
     78  if(tb_order != null) 
     79  { 
     80    for(var i = 0; i < tb_order.length; i++) 
     81    { 
     82      if(tb_order[i] == null) 
     83      { 
     84        bl.push(null); 
     85      } 
     86      else if(tb_order[i].match(/inserttable|toggleborders/)) 
     87      { 
     88        bl.push(tb_order[i]); 
     89      } 
     90      else 
     91      { 
     92        for(var j = 0; j < TableOperations.btnList.length; j++) 
     93        { 
     94          if(TableOperations.btnList[j] != null && TableOperations.btnList[j][0] == tb_order[i]) 
     95          { 
     96            bl.push(TableOperations.btnList[j]); 
     97          }           
     98        } 
     99      } 
     100    } 
     101  } 
     102  else 
     103  { 
     104    bl.push(null); 
     105    bl.push('inserttable'); 
     106    bl.push('toggleborders'); 
     107    for(var j = 0; j < TableOperations.btnList.length; j++) 
     108    { 
     109      bl.push(TableOperations.btnList[j]); 
     110    } 
     111  } 
     112   
     113   
    46114  for (var i = 0; i < bl.length; ++i) { 
    47115    var btn = bl[i]; 
     116     
    48117    if (!btn) { 
    49118      if(cfg.TableOperations.showButtons) toolbar.push("separator"); 
     119    } 
     120    else if(typeof btn == 'string') 
     121    { 
     122      toolbar.push(btn); 
    50123    } else { 
     124       
     125      if(this.editor.config.TableOperations.renameSplitCellButton) 
     126      { 
     127        if(btn[0] == 'cell-split') 
     128        { 
     129          btn[2] = this.editor.config.TableOperations.renameSplitCellButton; 
     130        } 
     131      } 
     132       
    51133      var id = "TO-" + btn[0]; 
    52134      cfg.registerButton(id, Xinha._lc(btn[2], "TableOperations"), editor.imgURL(btn[0] + ".gif", "TableOperations"), false, 
Note: See TracChangeset for help on using the changeset viewer.