Skip to content

Commit

Permalink
Polish the Table block
Browse files Browse the repository at this point in the history
This branch is based off of `try/better-responsive-table`, but without my attempt at better responsiveness.

- New toggle to decide whether table has fixed widths, off by default, as discussed in #2620
- Surface and style the resizing tool
  • Loading branch information
Joen Asmussen committed May 16, 2018
1 parent 165067f commit 015727f
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 11 deletions.
23 changes: 21 additions & 2 deletions core-blocks/table/editor.scss
Original file line number Diff line number Diff line change
@@ -1,11 +1,30 @@
.wp-block-table {
table {
border-collapse: collapse;
width: 100%;
}

td,
th {
padding: 0.5em;
border: 1px solid currentColor;
}

td[data-mce-selected="1"], th[data-mce-selected="1"] {
background-color: $light-gray-500;
td[data-mce-selected="1"],
th[data-mce-selected="1"] {
background-color: $light-gray-300;
}
}

// Style the resize handles
.ephox-snooker-resizer-rows {
cursor: row-resize;
}

.ephox-snooker-resizer-cols {
cursor: col-resize;
}

.ephox-snooker-resizer-bar-dragging {
background: $blue-medium-500;
}
54 changes: 47 additions & 7 deletions core-blocks/table/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,24 @@
* External dependencies
*/
import { __ } from '@wordpress/i18n';
import classnames from 'classnames';

/**
* WordPress dependencies
*/
import { Fragment } from '@wordpress/element';
import { getPhrasingContentSchema } from '@wordpress/blocks';
import {
getPhrasingContentSchema,
BlockControls,
BlockAlignmentToolbar,
RichText,
} from '@wordpress/editor';
InspectorControls,
} from '@wordpress/blocks';

import {
PanelBody,
ToggleControl,
} from '@wordpress/components';

/**
* Internal dependencies
Expand Down Expand Up @@ -73,6 +80,10 @@ export const settings = {
align: {
type: 'string',
},
hasFixedLayout: {
type: 'boolean',
default: false,
},
},

transforms: {
Expand All @@ -93,8 +104,19 @@ export const settings = {
},

edit( { attributes, setAttributes, isSelected, className } ) {
const { content } = attributes;
const { content, hasFixedLayout } = attributes;
const updateAlignment = ( nextAlign ) => setAttributes( { align: nextAlign } );
const toggleFixedLayout = () => {
setAttributes( { hasFixedLayout: ! hasFixedLayout } );
};

const classes = classnames(
className,
{
'has-fixed-layout': hasFixedLayout,
},
);

return (
<Fragment>
<BlockControls>
Expand All @@ -103,22 +125,40 @@ export const settings = {
onChange={ updateAlignment }
/>
</BlockControls>
<InspectorControls>
<PanelBody title={ __( 'Table Settings' ) } className="blocks-table-settings">
<ToggleControl
label={ __( 'Fixed width table cells' ) }
checked={ !! hasFixedLayout }
onChange={ toggleFixedLayout }
/>
</PanelBody>
</InspectorControls>
<TableBlock
onChange={ ( nextContent ) => {
setAttributes( { content: nextContent } );
} }
content={ content }
className={ className }
className={ classes }
isSelected={ isSelected }
/>
</Fragment>
);
},

save( { attributes } ) {
const { content, align } = attributes;
save( { attributes, className } ) {
const { content, align, hasFixedLayout } = attributes;

const classes = classnames(
className,
{
'has-fixed-layout': hasFixedLayout,
[ `align${ align }` ]: align,
},
);

return (
<RichText.Content tagName="table" className={ align ? `align${ align }` : null } value={ content } />
<RichText.Content tagName="table" className={ classes } value={ content } />
);
},
};
18 changes: 16 additions & 2 deletions core-blocks/table/style.scss
Original file line number Diff line number Diff line change
@@ -1,9 +1,23 @@
.wp-block-table {
overflow-x: auto;
display: block;
border-collapse: collapse;
width: 100%;

table {
border-collapse: collapse;
tbody {
width: 100%;
display: table;
min-width: $break-mobile / 2;
}

td,
th {
padding: 0.5em;
border: 1px solid currentColor;
}

// Fixed layout toggle
&.has-fixed-layout tbody {
table-layout: fixed;
}
}

0 comments on commit 015727f

Please sign in to comment.