Skip to content
This repository has been archived by the owner on Jul 27, 2024. It is now read-only.

Tables Hack: Correct header rows and columns, Confluence-Like secondary bar, Auto-Sizing #7

Open
1 of 2 tasks
Roemer opened this issue Jan 21, 2024 · 0 comments
Open
1 of 2 tasks

Comments

@Roemer
Copy link

Roemer commented Jan 21, 2024

Hi all

I use a lot of tables when doing documentation and I miss some things from Confluence. So here are some hacks to bring back somethings. These are:

  • Create a secondary toolbar just for table editing as close as the one from Confluence
  • Also add buttons to easily set rows or columns as headers (in the secondary toolbar and the context toolbar for tables)
  • Style fixes for header columns
  • Make new tables responsive (autosizing) by default
  • Add a button to reset table to responsive

Here is how the tables look with the headers:
image

Here is the secondary toolbar for tables:
image

Here is the context toolbar for tables:
image

Here is the complete customization with comments so you can remove stuff you don't need:

<style>
  table tbody tr th {
    text-align: left;
    background-color: #f8f8f8;
    font-weight: 500;
  }
  table thead tr th {
    text-align: left;
  }
</style>

<script>
  window.addEventListener('editor-tinymce::pre-init', event => {
    // Get the config object
    const mceConfig = event.detail.config;
        
    // Create a secondary toolbar for table editing
    mceConfig.toolbar = [
      mceConfig.toolbar,
      'table tableinsertdialog maketableresponsive | tableinsertrowbefore tableinsertrowafter tabledeleterow | tablecutrow tablecopyrow tablepasterowbefore tablepasterowafter | tableinsertcolbefore tableinsertcolafter tabledeletecol | tablemergecells tablesplitcells | tablerowheader tablecolheader | tablecellbackgroundcolor | tabledelete'
    ];
    
    // Modify the table context toolbar
    mceConfig.table_toolbar = 'tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol | tablerowheader tablecolheader';

    // Make tables responsive by default
    mceConfig.table_sizing_mode = 'responsive';
  });

  window.addEventListener('editor-tinymce::setup', event => {
    // Get the editor
    const editor = event.detail.editor;
    // Add a button to make tables responsive
    editor.ui.registry.addButton('maketableresponsive', {
      tooltip: 'Make Table Responsive',
      icon: 'maketableresponsiveicon',
      onAction() {
        let tableElement = editor.selection.getNode();
        while (tableElement.nodeName !== 'TABLE') {
          tableElement = tableElement.parentNode;
           if (tableElement.nodeName === 'BODY') { return; }
        }
        tinymce.DOM.setStyle(tableElement, 'width', null);
        const colGroup = tableElement.getElementsByTagName('colgroup')[0];
        const cols = Array.from(colGroup.getElementsByTagName('col'));
        cols.forEach((child) => {
          tinymce.DOM.setStyle(child, 'width', null);
        });
      }
    });

    // Register a custom icon for maketableresponsive
    editor.ui.registry.addIcon('maketableresponsiveicon', `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="rgb(12.941176%,12.941176%,12.941176%)" xmlns:v="https://vecta.io/nano"><path d="M15.578 11.25H8.422l.891-1c.273-.312.246-.785-.062-1.062s-.785-.246-1.062.063l-2 2.25a.76.76 0 0 0 0 1l2 2.25c.277.309.75.336 1.063.063s.336-.75.063-1.062l-.891-1h7.156l-.887 1c-.277.313-.25.785.059 1.063s.785.246 1.063-.062l2-2.25a.79.79 0 0 0 .188-.469v-.059a.75.75 0 0 0-.191-.473l-1.996-2.25c-.277-.309-.75-.336-1.062-.062a.75.75 0 0 0-.059 1.063zM17.75 3A3.25 3.25 0 0 1 21 6.25v11.5c0 1.793-1.457 3.25-3.25 3.25H6.25C4.457 21 3 19.543 3 17.75V6.25A3.25 3.25 0 0 1 6.25 3zm1.75 3.25c0-.965-.785-1.75-1.75-1.75h-.25v5.148l-.941-1.062A1.75 1.75 0 0 0 16 8.168V4.5H8v3.668a1.75 1.75 0 0 0-.559.418L6.5 9.648V4.5h-.25c-.965 0-1.75.785-1.75 1.75v11.5c0 .965.785 1.75 1.75 1.75h.25v-5.148l.941 1.063a1.75 1.75 0 0 0 .559.418V19.5h8v-3.668a1.75 1.75 0 0 0 .559-.418l.941-1.062V19.5h.25c.965 0 1.75-.785 1.75-1.75zm0 0"/></svg>`);
  });
</script>

Hope this helps somebody and if there is interest, I could create a PR to add this to the existing hacks.

TODOs:

  • Custom Icon for "Make table responsive"
  • Making tables able to overflow and show a horizontal scrollbar
@Roemer Roemer changed the title Hack for easier creation of table row and column headers Tables Hack: Correct header rows and columns, Confluence-Like secondary bar Jan 30, 2024
@Roemer Roemer changed the title Tables Hack: Correct header rows and columns, Confluence-Like secondary bar Tables Hack: Correct header rows and columns, Confluence-Like secondary bar, Auto-Sizing Jan 30, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant