Tabulator has undergone a complete rebuild in this release, adding a ton of new functionality as well as making it easier than ever to contribute to the project.
The Tabulator Ideas Repo has lauched today, providing space for members of the community to share their tips, tricks and code examples with everyone else
Anyone is welcome to submit a PR with a link to one of the following:
Demo / Example - A Code Pen or JS Fiddle demonstrating how to use a table feature
To help users out the answers to some of the most common Tabulator questions can now be found on the FAQ Page.
New Format Documentation Section05/09/2018
As Tabulator has gorwn so has it s documentation. To make life easier as of version 4.0 the docs have now been broken down into smaller pages that focus on different parts of Tabulator.
Sorry for going silent for a month or so there, work got a little bit manic so i couldnt put as much time into Tabulator as i would have liked, but im back on it now.
The revised initial release of 4.0 is now looking like the end of august, with beta versions coming out in the next couple of weeks.
Version 4.0 Comming Soon24/06/2018
I have begun work on the mammoth task of building Tabulator 4.0, and thought I would give you some tasters of what is to come.
The updates will include:
Tabulator will be free of core dependencies, no more need for JQuery!
A jQuery wrapper for those that want to keep using jQuery with Tabulator the way it is
Promise based architecture to make it easier to trigger actions after a table has rendered
Source refactored to ES8
Virtual DOM efficiency and speed improvements
Overhaul of the extensions system to make it even easier to use
New minimal core.js build that will only included the very basic table functionality to allow for ultra low code footprint
Enhaced clipboard functionality with style copy
Cell level selection (select ranges of cells)
Filter Enhancements
Sorter Enhancements
Formatter Enhancements
Much Much More...
In a couple of weeks I will be looking for some people to alpha test some of the new functionality and give some feedback on what they think. Check the news section in a couple of weeks for details on how to sign up.
Im hoping to get the release out by the end of July, so keep your eyes peeled for more news.
Keep on Tabulating!
Oli :)
Patreon Support14/04/2018
A number of the kind and generous souls that use Tabulator have asked if there was a way to financially help support Tabulators development.
I have now setup a Patreon page, for those users that wish to make a donation towards the costs of keeping up the Tabulator site.
More information on supporting Tabulator can be found on the Community Page
Version 3.5 Released14/04/2018
Ive been a busy beaver once again, and the 3.5 release is jam packed with a whole host of upgrades to almost every part of Tabulator, along with some completely new features.
Row Management Pipeline
A new render pipeline has been created in the row manager to make rendering the table more efficient and make the addition of new render functionality eaiser.
The new replaceData function works like the setData function, except it silently replaces the data in the table, keeping the existing scroll position of the data. Ideal for refreshing lists etc.
The new ajaxProgressiveLoad works with the ajax and pagination extensions to load large data sets in chunks rather than in one block, improving table load time.
It can either load all the data, sequentially in one go. or with scrolling mode, it can load the data as needed when the user scrolls down the table.
The fitColumns layout mode has been upgraded to allow for more customizable column resizing.
With the new widthGrow and widthShrink column definition objects you can set how much of the total freespace should be allocated to each column when the table is resized.
The pagination extension has had an overhaul to ensure more consistent rendering across all table configurations.
The new paginationAddRow option lets you decided how you would like new rows added to paginated data, to the start/end of the page or to the start/end of the table data.
The new paginationButtonCount setup option lets you choose how many pagination buttons are shown at the bottom of the table.
The getColumns function now takes an additional argument, that lets you get a structured array of column components, that includes column groups. you can then use the getSubColumns and getParentColumn functions to navigate the column struture.
Calling the show or hide functions on a column group component will show or hide all columns in that group.
Column Resizing
Columns can now have resing enabled and disabled on a per column basis, using the new resizable column definition propery.
Scroll To Row Improvements
The scrollToRow function now accepts additional arguments to allow you to align the row to the top, center or bottom of the table, and to not move if the row is already visible.
The scrollToColumn function now accepts additional arguments to allow you to align the column to the left, center or right of the table, and to not move if the column is already visible.
You can now use the tooltipGenerationMode option to choose whether a tooltip should be generated when data is loaded into the table, or when a user overs over a cell.
Bootstrap 4 Style
A new table CSS stylesheet is available for Bootstrap 4, it can be found in /dist/css/bootstrap/bootstrap4.min.css
The documentation has been updated to include a breakdown of some of the core architecture concepts of Tabualtor, to make it easier for people to understand how it works, and when callbacks will be triggered.
A number of additional examples have been aded to the example section to demonstrate some of the new functionality of this release, as well as to show how to use some existing functionality like nested tables and multi-input header filters.
A number of small tweaks have been made to the system including:
Group visibility toggling now works correctly when table is paginated and in classic render mode
Remote pagination now loads correctly on table initialization
Responsive layout mode now correctly takes into account the column visibility and column order
The hideInHtml property now hides both header and column data in html output
Cell component navigation commands now work correctly through column calculations and group headers
The addData and updateOrAddData functions now return rowcomponents for the rows created.
The rowSelectionChanged event is now correctly fired when the selection is cleared when data is set
A typo in the resize binding for non-chrome browsers has been fixed
Some table height issues in classic render mode have been resolved
Ajax requests will now be loaded in sequence, if a new request is made, and previous requests will be discarded when they return
Group column calculations and calculation formatters now update correctly when a cell in that group is edited
The tick editor now works correctly in firefox on macs.
A regression in 3.4.6 where deleting a row resulted in a blank line being left in the table, has now been fixed
Row deletion no longer causes extra entry in history action list
Row resizing is now disabled by default, to match documentation
The persistent columns extension will now try to merge the stored columns with the new column layout if the column definitions have changed.
Long column group names will no longer cause a rendering glitch if they exceed the width of the columns in the group
A extra call to the dataLoaded callback when an ajax request was made has been removed.
Version 3.4 Released11/02/2018
The long awaited version 3.4 is now available. I have spent a lot of time going through the virtual DOM and row grouping systems to improve stability and optimize rendering, and as always added a load of shiney new features.
Rendering Performance
The addRows and updateData functions have been tweaked to dramatically improve performance when loading data into the table.
When rows are added/deleted/hidden/moved in the table, it now remains in the same scroll postion, rather than skipping or bouncing to the top of the table.
The memory leak on the setData function has been fixed.
The issue with random whitespace appearing at the top of the table on scroll or group collapse has now been resolved.
The height property no longer needs to be set to enable the virtual DOM as long as the height has been set on the element either in CSS or as a direct inline style.
The table will use the new ES8 ResizeObserver feature to track when the table changes size and automatically redraw it for you, as this is currently only available on the latest version of chrom it will fallback to tracking when the window changes size on older browsers. This feature can be disabled with the autoResize option if needed.
Column Layout and Resizing
Using the new layoutColumnsOnNewData option, you can force column widths to be recalculated to fit new data when in a fitData layout mode when the setData function is called.
Double clicking on a column resize handle will cause the column to automatically resize to fit the data it contains.
You can now trigger a horizontal scroll to a column using the scrollToColumn function. There is also a scrollTo function on the Column Component that performs the same action.
Complex header group structures now render correctly.
Group Headers now correctly update when rows are added/deleted/moved.
Dragging and dropping rows between groups now updates the rows data to match the group it has been moved into.
When the table is in grouped mode and the addRow function is used, the row will now appear in the correct group.
The groupClick event is no longer blocked by the group header toggle click.
If a group is made up of rows with an "undefined" key value, the group title is now an empty string instead of the word "undefined".
If all rows are moved out of a group, the group is now removed from the table.
Persistent Configuration
The persistent config extension has had a complete overhaul and now also allows you to persitently store column sorting and filters using the new persistentSort and persistentFilter options.
To fit with the extensions new functionality the persistence mode and ID options are now set in the persistenceMode and persistenceID options respectively.
By default all validator excluding the required validator will allow null, undefined and empty strings. You should now use the required validator to prevent these.
Validators can now be used on columns with fields based on nested data.
New editors have been added, including range and select.
The number editor now accepts max, min & step parameters.
A range of callbacks for detecting the cell editing lifecycle are now available in the column definition, including cellEditing, cellEdited & cellEditCancelled.
A new cancelEdit function has been added to the Cell Component to allow for programmatic cancelling of a user edit.
A new optional argument has been added to the edit function on the Cell Component to force a cell into edit mode even if its editable property is set to false.
A new lookup formatter has been added to restrict visible cell values to a predefined list.
The progress formatter now accepts a number of new parameters to set legend text, and define a range of bar colours based on cell value.
The image formatter will now normalize the height of its row once the image has loaded.
The link formatter now has a range of parameters to make it easy to customise its appearance and functionality. As a result of this improvement the email formatter is now deprecated.
There is now a reformat function on the Row Component, to programmatically trigger a re-formatting of the row.
The new getRowPosition function and Row Component getPosition function allow you to retrieve the current position of a row in the table.
You can also retrieve a row from its position in the table using the getRowFromPosition function.
HTML Output
The new column definition propery hideInHtml can be used to prevent columns being visible in the output from the getHtml function.
General System Tweaks
A number of small tweaks have been made to the system including:
The 5th level grouping header now has the correct left margin
The updateData function will now accept JSON encoded strings as well as arrays of objects
The rowSelected and rowDeselected callbacks are now triggered when muliple rows are selected/delesected
Rows are now deselected on deletion
Pagination buttons now have their type attribute set to button to prevent accidental form submission if the table is inside a form element
An edge case where group headers were preventing table rendering has been fixed
A regression in the getGroups function has been fixed
A regression with the ajaxLoader option has been resolved
The history list now clears correctly when a new action is performed
Header filters no longer affect width calculations for columns
Horizontal scroll no longer resets on a non-force redraw event
Version 3.3 Released01/10/2017
So after a couple of months break to focus on setting up the new Tabulator website server, Im back with the 3.3 release, which is jam packed full of loads of new shiney features.
New Column Layout System
A new layout extension has been created to manage column layouts, provide new ways of laying out columns and even allow you to add your own column layout functions.
A new layout mode hase been added, the fitDataFill mode is identical to the fit data mode, but ensures that rows are always at least the full width of the table.
Tabulator now supports the use of validators to check that data entered in the table through an editor is valid before it is stored.
A wide range of build in validators are available to use with the new validator column definition object property. You can even build your own if you fancy it.
The row grouping system has received some TLC and now has a load of additional features.
The getGroups function has been added to return a list of the current first level group components.
A number of click event calbacks have been added to give greater control of user interaction with groups, including groupClick, groupDblClick, groupContext, groupTap, groupDblTap, groupTapHold.
The new groupToggleElement option allows you to set which element the user should click to toggle the group open/closed.
The groupHeader and groupStartOpen functions are now passed the group component as a fourth argument.
The new groupClosedShowCalcs option allows you to keep column calculations in groups visible when the group is closed.
You can now apply formatters to column calculation cells using the topCalcFormatter, bottomCalcFormatter, topCalcFormatterParams, and bottomCalcFormatterParams options.
Mathematical calculations now cast strings to numbers for better accuracy.
Calculations in groups now updated when a cell in the group is edited.
Ajax sorting and filtering has now been improved, with all sorters and filters (including header filters) being passed back in the ajax request. To cope with this update, new filters and sorters parameters are now passed with the ajax requests.
The restoreOldValue function has been added to the cell component to allow the cell to be revered to its previous value without tirggering cell edit callbacks.
You can now export the contents of your table as an HTML formatted table if needed using the new getHtml function.
Version Numbers in Source Files
All source files now contain their version number to make it easier to track what code you are using when debugging.
General System Tweaks
A number of small tweaks have been made to the system including:
Group headers now maintain width when all groups are closed
Row handle formatter now vertically aligns to the center of the cell
The getSort function has been renamed to getSorters to better fit in with naming convertion of other functions
The tooltipHeader column definition property has been renamed to headerTooltip to better fit in with naming convertion of other column header properties
Row Components are now passed to the dataSorted callback
The getField function is now available on Cell Components in the header filter editor callbacks
The like filter now correctly handles null or undefined values
Fixed regression in 3.2 where the Cell Component getElement function was returning a DOM node, it now correctly returns a jQuery element
Bootstrap tables now have a background color of #ffffff by default to prevent visual corruption of frozen columns
Row Components are now correctly passed into sorter functions
Functions on components have been moved into the objects respective prototypes to improve efficiency
Development Roadmap Launched17/09/2017
Tabulators development roadmap is now available for anyone to view
To take a peek into Tabulators future, have a look at:
I am happy to announce that as of today Tabulator will now be hosted on its own domain at tabulator.info
Over the coming months you will notice loads of new features popping up on the site including:
Development Roadmap
Example Table Builder
Package Build Tools
FAQ's Section
Newsletter Signup
And much much more...
Stay tuned for further announcements
Version 3.2 Released23/07/2017
Its been a busy month in the world of Tabulator, following tons of great user feedback I am happy to announce the release of Tabulator 3.2
Virtual DOM Render Speed Dramatically Improved
The render speed of the virtual DOM has been dramatically improved, allowing for a great experience even on older browsers like IE 11. Fallback modes have also been introduced to replace some of the graphically intensive operations with simpler alternatives on less capable browsers.
The virtualDomBuffer option has been added to allow more control over the efficiency of the renderer.
It is now possible to add calculation rows to the top and bottom of your tables, providing a range of calculations on the column data, including, max, min, average, sum and count.
The resizableColumns option now accepts the values of header and cell to give more choice on how a user can resize columns.
Variable Height Formatters
The textarea formatter will now automatically adjust the height of a row as its column is resized to ensure that no text is hidden by overflowing the cell. To enable this behaviour on other formatters you can now use the variableHieght property in column definition object.
A number of small tweaks have been made to the system including:
The pagination element will now act responsively, hiding the page number selector when the table is too narrow to display it
The fit columns to data display mode now correctly resizes columns when data is set
The redraw function has been improved to give a better look after redrawing a previously hidden table
Fixed placeholder element rendering on table redraw
Initial data is now correctly loaded into table in local pagination mode
Cell navigation functions now work correctly after column reorder
Version 3.1 Released18/06/2017
Well its been a really busy month, with all the great feeback from the 3.0 release I have made a load of improvements to existing funcctionality and added a load of new features!
Virtual DOM Improvements
Additional tweaks have been made to the virtual DOM to make it more efficient, it also handles tables with wide variations in row height much better.
The setHeight function has been added to help with changing the table height after initialization.
The redraw function has been fixed so resizing tables can now be correctly redrawn.
Key Bindings
The new key bindings extension allows for direct interaction with Tabulator with the use of keyboard shortcuts.
The new history extension tracks user interaction with the table, recording cell edit, row add and row delete events. It allows the user to call undo and redo functions on the table to move back and forward through their history.
This extension can also be linked to the key bindings extension to allow users to use keyboard shortcuts to undo and redo edits.
A number of small tweaks have been made to the system including:
The updateRow function now only triggers the updated cells to redraw, not the whole row
The setColumns function now renders correctly when called multiple times
The setValue function on Cell Components now mutates the incoming data by default
Input and text area editors have been updated to ensure they take up the full row height when they are displayed
Version 3.0 Released04/06/2017
The much awaited Tabulator 3.0 is now officially released!, checkout the documentation for more information.
I would like to pass on a massive thankyou to all the GitHub users that helped with the beta testing of the release. It is the community that really makes Tabulator Great!
Version 3.0 Updates and Stable Release Date!29/05/2017
A big Thank You goes out to everyone that has provided feedback on the beta so far, it has been a massive help. Keep up the good work!
Following on from the feedback the following tweaks have been made to the beta:
Column Widths
The default "fit to data" column width calculations now take column header titles into account so you don't end up with titles with ellipsis when the column data is small.
Additional Parameters
The editorParams, headerFilterParams, mutatorParams and accessorParams column definition properties have been added to allow you to pass additional data into editors, mutators and accessors, allowing for better code reuse and simple configuration.
Row Styling
Styling of rows in the virtual DOM has been fixed. Rows are now assigned a tabulator-row-odd or tabulator-row-even class based on their position in the table.
Data Sanitization
Text based formatters now sanitize data before it is added to the table to prevent HTML and JavaScript injection attacks. To display HTML direcly in the cell you can now use the new html formatter.
A number of regressions and differences with version 2.12 have been fixed.
Stable Release Date Set
As the issues for 3.0 beta start to dry up we are looking very close to a stable release! With this in mind I am giving one more week for user feedback, and setting the release date for the stable version of 3.0 to next weekend, 03/06/2017
Version 3.0 Beta Available!21/05/2017
The beta version of tabulator 3.0 is now available to Download from GitHub. And what a a treat is is going to be!
I have been busy beavering away for the last month, compleatly rebuilding Tabulator from the ground up to make it faster, more feature packed, and more extensible than ever before.
There are a lot of changes in 3.0 so here is a highlight of the updates, checkout the Documentation for full details of all the changes.
Virtual DOM
Tabulator now uses a virtual DOM to render only the rows that are currently visible in the display. This allows the table to process 10,000's of rows with no performance overhead!
One of the biggest changes of this release is the introduction of the component.
Version 2 struggled with many callbacks, each with their own set of arguments that constantly needed updating to match users needs. To simplify this, callbacks are now passed component objects that represent the cells, rows, columns and groups of the table.
Each object has its own set of fuctions that you can call on it to access DOM elements, get parent components, set values and trigger actions.
Any future functionality needed in callbacks will be added to the components, keeping the argument lists the same, making it easier to move from version to version.
Tabulator is now styled using SASS instead of LESS.
Minified Source Files
Minified JS and CSS files are now available in the /dist/ folder.
Console Logging
To help developers out, Tabulator now produces a wide array of console warnings and errors when you try and make it do something it shouldn't.
New Callbacks
The callback system has been completely overhauled, with components passed into every callback. Existing callbacks have had functionality changes and loads of new callbacks have been created.
The naming of configuration options and callbacks in version 2 had become a bit eratic. To help make things more intuative a number of properties and functions have been renamed to follow a standard convention.
Have a look through the documentation to familiarize yourself with the changes.
Remote Sorting and Filtering
The ajaxFiltering and ajaxSorting options now give you the choice of passing filter and sort parameters a remote server to let it do the fitlering and sorting instead of Tabulator.
Empty tables can look a bit dull and confuse your users. There is now a placeholder option that lets you add placeholder text or elements to your table to show your users it is supposed to be empty.
Tabulator will now automatically try and guess the appropriate sorter for a column based on its data, without you having to declare it in the column definition array.
Sorters and formatters have all received a bit of a polish to make them eaiser to use, and faster. The updated date and time formatters use the moment.js library to perform even more complex sorting functionality.
Editors have been completly overhauled, custom editors now have access to the success, cancel and onRendered functions, to make interaction with the table simpler than ever.
The new editable column option allows you to use a callbck to check whether a cell should be editable.
Two new functions, updateOrAddRow & updateOrAddData, have been added to allow you to insert new data or update existing data in the same function.
The addRow has been enhanced to allow you to add a new row anywhere in the table.
The getRow and getRowData functions now allow you to find individual row DOM elements and their associated data without having to search through the whole table.
When a cell is being edited, its parent row has the tabulator-row-editing class added to help with custom styling.
Three new callbacks, headerOnClick, headerOnDblClick & headerOnContext, have been added to the column definition object to track user interaction with the column header elements.
The selectableRollingSelection and selectablePersistence options have been added to give you more control over how the row selection feature functions.
CSV generation now automatically escapes reserved characters, and you can pass additional setup options and custom delimiters in the new options object.
A new rownum formatter has been added to show an incrementing row number next to each row in a table. The formatter has been designed to work with standard and paginated tables.
There have been a number of small tweaks to Tabulator to improve functionality, including:
Momentum scrolling on mobile devices
Improved header filter functionality
UI and Styling fixes
The open state of row groups can now be set using the groupStartOpen property
Version 2.9 Released12/12/2016
It has been a busy month in the world of Tabulator, this months update sees a bucket load of new and improved features:
Localization
You can now localize the contents of a Tabulator to the language of the browser being used to view it. A whole host of configuration options are now available to make your tables accessible no mater where in the world they are being used.
It is now possible to download data as a file direct from Tabulator with no need to download files from the server. At present CSV and JSON files are available, with more coming soon. You can even define your own file formatter to create your own custom file types.
The existing progressive rendering functionality can now be combined with ajax pagination, to allow table data to be loaded from a remote server as a user scrolls down the table.
The ajaxResponse callback is triggered whenever a response from an ajax request is received. It allows access to all received ajax data before the data is loaded into the table, and provides an opportunity to make and changes to the data before it is parsed into Tabulator.
Aria accessibility tags have now been added to every element in Tabulator make the table machine readable by screen readers and other digital accessibility equipment.
You can now use the column definitions array when importing table data from HTML table elements, this opens up all of the standard column setup options to imported tables.
If the ajaxURL option is set in a table constructor, the data is now automatically loaded once the table is created, without any need to call the setData function.
Version 2.6 Released09/10/2016
Mutators and Accessors Added
Mutators (setters) and Accessors (getters) have been added to allow you to manipulate the table data as it enters and leaves your Tabulator, allowing you to convert values for use in your table and then change them again as they leave.
The money formatter has been improved to cope with non numeric values.
getData Function Improved
The getData function can now be passed an argument to decide if you want to return all of the table data or just that matching the current filter/sort.
New callbacks to monitor all stages of data flow in the system have been added.
dataLoading
dataLoaded
dataLoadError
dataEdited
dataFiltering
dataFiltered
dataSorting
dataSorted
rowEdit Callback Replaced With cellEdited
The rowEdit callback has been replaced with the cellEdited callback. Not only is this more descriptive of the event, it also contains new arguments, passing the old value of the cell, the new value, the DOM objects for the cell and the row and the name of the field being edited.
rowContext Callback No Longer Prevents Default Browser Context Menu
The rowContext callback no longer prevents the default browser context menu from opening.
Callbacks Renamed
Several callbacks have been renamed to make sure they all follow the same naming conventions.
Callbacks ending in Load now end in Loaded.
Callbacks ending with Edit now end with Edited.
Movable Row Placeholder Style Added
The tabulator-row-moving class has been added to allow styling of the movable row placeholder.
Scrollable Empty Tables
Empty tables can now be scrolled horizontally if the combined width of the column headers exceeds the width of the tabulator elemen.
Improved Custom Sorters and Editors
Sorter and editor functions are now passed an additional data argument so they can see all the data for the current row rather than just the cell being processed.
Version 2.4 Released13/08/2016
Packaged Themes
Four new prepacked themes have now been included with tabulator:
Simple - A plain, simplistic layout showing only basic grid lines. (/themes/tabulator_simple.css)
Midnight - A dark, stylish layout using simple shades of grey. (/themes/tabulator_midnight.css)
Modern - A neat, stylish layout using one primary color. (/themes/tabulator_modern.css)
Autumn - A colorful, bright layout using shades of orange and brown. (/themes/tabulator_autumn.css)
A demo of each of these in action can be found on the Examples page.
Textarea Formatter and Editor
A new textarea formatter and editor have been added to allow for the display and editing of multi-line text.
Is is now possible to filter the table data directly from the column headers, by setting the headerFilter parameter in the column definition object for that column.
It is now possible to set tooltips to display on column headers. This is particularly useful when your columns are too narrow to display full header names.
Set columns has been updated to fix a rendering glitch when changing the number of columns.
New dataFiltered Callback
The dataFiltered callback is now available offering access to the filtered subset of the table data after new data is loaded into a table or a filter operation is performed.
A couple of new formatters have been added for creating button columns:
buttonTick - displays a tick icon on each row (for use as a button)
buttonCross - displays a cross icon on each row (for use as a button)
An additional formatter has been added for colored cells:
color - sets the background colour of the cell to the value. Can be any valid CSS color eg. #ff0000, #f00, rgb(255,0,0), red, rgba(255,0,0,0), hsl(0, 100%, 50%)
Tabulator can store the layout of columns in a cookie so that each time a user comes back to the page, the table is laid out just as they left it. To enable this feature set the columnLayoutCookie options parameter to true.
Set New Column Definitions
Column definitions can be changed after Tabulator creation using the setColumns function.
Get Column Definitions
To get the current column definition array (including any changes made through user actions, such as resizing or re-ordering columns), call the getColumns function.
Cell Editor Updates
A number of updates have been made to the cell editing system.