Skip to content

Releases: fin-hypergrid/core

Hypergrid v3.3.2

25 Nov 22:20
902a52e
Compare
Choose a tag to compare

Minor version update

This release introduces new functionality while remaining interface-backwards-compatible with prior v3.. releases.

Contents

  1. Removed off-screen blitting support (See PR #810)
  2. Added support for zoom CSS style (See PR #814)

1. Removed off-screen blitting support

This feature was off by default. Turning it on produced no measurable performance gain (in Chrome at least). We may add it back later if we can realize a benefit.

  • Removed grid.properties.useBitBlit, grid.canvas.bc, and grid.canvas.buffer
  • The method grid.canvas.flushBuffer() is now a no-op

2. Added support for zoom CSS style

style.zoom is non-standard but widely supported. (The only exception is Firefox.)

This PR adds the following support for when a Hypergrid is zoomed by setting document.body.style.zoom:

  1. Canvas resolution is now optimized with respect to the zoom settings of all the elements in the chain
  2. Mouse tracking coordinates are now properly adjusted when zoomed

Tested on Chrome, Safari, IE 11, and regression tested on Firefox where it has no effect.

Added method grid.resetZoom() which should be called:

  1. Any time you set the document.body.style.zoom. This does two things: Optimizes the canvas resolution; adjusts the mouse coordinates.
  2. After user adjusts browser zoom using ctrl +/- to optimize the resolution. This optimizes the canvas resolution for a sharper image. The mouse coordinates are not adjusted for browser zoom. The only way to tell if browser zoom changed (I believe) is to poll getComputedStyle(htmlElement).zoom (where htmlElement = document.body.parentElement).

Important caveat: Setting zoom style on any other element between body and canvas is not accommodated by resetZoom.

Pre-bundled build files

A bundled build of this release is available on the CDN:

Published to npm

This release has been published as a module to the npm registry, including umd folder that contains the same two build files found on the GitHub CDN.

Hypergrid v3.2.2

25 Nov 22:51
4eba8c3
Compare
Choose a tag to compare

Contents

  1. Scrolling on touch devices (see PR #807)
    With much thanks to @AmirF27 (sorry for the delay!)

  2. column.header setter no longer calls grid.repaint()
    This was the only call to repaint() outside of a UI interaction, so for consistency we are removing it. To see column header text change immediately, call grid.repaint() explicitly following column.header assignments or calls to grid.behavior.setHeaders(arrayOfHeaderText).

Build files

No build files are being published with this release because the next release (v3.3.2) will follow immediately.

NOTE

This version matches in content and version number a fork called faux-hypergrid.

Hypergrid v3.2.1

03 May 12:31
a556956
Compare
Choose a tag to compare

Minor version update

This is a "patch release" (fixes/improvements); it is interface-backwards-compatible with all v3...

Contents

  1. Anonymous column calculator bug (see PR #786)
  2. New: ./umd folder in npm module

As noted in the previous release (v3.2.0)...

Worth repeating:

Change regarding Versioning

Going forward and starting with [the v3.2.0] release, we shall bump the minor version number (middle tupple of version number) on any new functionality per npm SEMVER.

Previously we were often just bumping the patch number (last tupple), but patches are meant for bug fixes that do not introduce any new functionality. The semantics for a minor version bump is non-breaking/backwards compatible. It may however be expanded with new but optional parameters; just so long as it doesn't break existing code.

Change regarding pull requests

Going forward and starting with this release, we shall be switching over to the single-item-per-PR paradigm (where "item" is a bug fix or new feature implementation).

Previously we were putting an entire release's items into a single branch/PR with separate commits per item. This was easy to work with for me as the only active contributor because commits therein could be based on earlier commits without intermediate merges. Besides not being conducive to multiple contributors, however, it was difficult (impossible really) to get anyone to code review a big PR. Doing so requires reviewing each commit one by one. GitHub conversations are better supported at the PR level rather than at the commit level.

This change in strategy should make reviewing less daunting and hopefully we'll get more feedback before merging.

A final merge-to-master PR for the release shall bump the version number and update the README. A summary of the constituent PRs shall be listed in the PR description field (as well as being plainly visible in the commit list below the description).

Regarding rebasing

Constant rebasing is not necessary just to move the commit ahead of develop before the merge. Although the resulting git log --graph railroad diagrams end of with leap-frogging commit paths, they are still easily comprehensible. Only rebase when there are merge conflicts (which GitHub will tell you). After all, during a PR merge, git applies the same merge algorithms as would be performed in a rebase with no conflicts.

Published to npm

This release has been published as a module to the npm registry.

umd folder

The npm module now includes a ./umd folder which contains the same two build files found on the GitHub CDN (fin-hypergrid.js and fin-hypergrid.min.js).

Pre-bundled build files

A bundled build of this release is available on the CDN.

Hypergrid v3.2.0

17 Nov 19:03
9d19656
Compare
Choose a tag to compare

Note regarding the CDN release

The 3.2.0 pre-bundled build files were not published to the CDN as intended on 17-Nov-2018 along with the github repo and npm releases. This was due to an errant symlink which was rejected by the github pages build process, which event unfortunately went unnoticed. The CDN build was finally published on 29-Nov-2018. We regret the delay and apologize for any confusion that may have resulted.

Minor version update

This is a "minor version update," meaning it's interface-backwards-compatible with v3.1.* but introduces some new methods.

Contents

  1. Add mouse event details (see PR #773)
  2. Add Base.prototype.versionAtLeast (see PR #777)
  3. Add Registry.prototype.make (see PR #775)
  4. Add images.setTheme: Support for themeable SVG images (see PR #772)
  5. Bump version number (#778)
  6. Update README.md (#779)
  7. Resolve jsdoc compilation issue (#781)

Change regarding Versioning

Going forward and starting with this release, we shall bump the minor version number (middle tupple of version number) on any new functionality per npm SEMVER.

Previously we were often just bumping the patch number (last tupple), but patches are meant for bug fixes that do not introduce any new functionality. The interface for a minor version bump is non-breaking/backwards compatible. It may however be expanded with new but optional parameters; just so long as it doesn't break existing code.

Change regarding pull requests

Going forward and starting with this release, we shall be switching over to the single-item-per-PR paradigm (where "item" is a bug fix or new feature implementation).

Previously we were putting an entire release's items into a single branch/PR with separate commits per item. This was easy to work with for me as the only active contributor because commits therein could be based on earlier commits without intermediate merges. Besides not being conducive to multiple contributors, however, it was difficult (impossible really) to get anyone to code review a big PR. Doing so requires reviewing each commit one by one. GitHub conversations are better supported at the PR level rather than at the commit level.

This change in strategy should make reviewing less daunting and hopefully we'll get more feedback before merging.

A final merge-to-master PR for the release shall bump the version number and update the README. A summary of the constituent PRs shall be listed in the PR description field (as well as being plainly visible in the commit list below the description).

Regarding rebasing

Constant rebasing is not necessary just to move the commit ahead of develop before the merge. Although the resulting git log --graph railroad diagrams end of with leap-frogging commit paths, they are still easily comprehensible. Only rebase when there are merge conflicts (which GitHub checks will tell you). After all, during a PR merge, git applies the exact same merge algorithms as would be performed in a rebase with no conflicts.

Published to npm

This release has been published as a module to the npm registry.

Pre-bundled build files

A bundled build of this release is available on the CDN.

Hypergrid v3.1.0

25 Nov 22:53
fff78e6
Compare
Choose a tag to compare

Minor version update

This is a "minor version update," meaning it's interface-backwards-compatible with v3.0.* but introduces a new feature, the maximumColumnWidth prop (see below) as well as bug fixes, simplified license, and tutorial improvements.

Synopsis

  1. Fix bug in getSelectedRows
  2. renderLastSelection now bails on missing rows
  3. Update keys down array when shift key changes
  4. Update keys down array whenever referenced by mouse event handlers
  5. Implement maximumColumnWidth prop
  6. Capture off-grid mouseup during scrollbar thumb drag
  7. Retain scrollbar thumb's .hover CSS class throughout drag
  8. Normalize mouse wheel metrics across platforms and browsers
  9. Fix jsdocs type: options.contextAttributes
  10. Reorganize and update the Tutorial
  11. Updated copyright notice
  12. Updated license

1. Fix getSelectedRows [bug]

When all rows selected, SelectionModel.prototype.getSelectedRows returns inaccurate list. Addresses Issue #764 (see).

2. renderLastSelection now bails on missing rows [bug]

When the selection included rows that are now missing, Renderer.prototype.renderLastSelection previously threw an error. It now aborts without rendering.

3. Update keys down array when shift key changes [bug]

Addresses Issue #770 (see).

4. Update keys down array whenever referenced by mouse event handlers [bug]

Addresses Issue #769 (see).

5. Implement maximumColumnWidth prop [new feature]

Addresses Issue #761 (see). This is a new feature, hence the minor version number bump (3.1.0).

6. Capture off-grid mouseup during scrollbar thumb drag [enhancement]

Addresses finbars Issue #6 (see) into Hypergrid.

7. Retain scrollbar thumb's .hover CSS class throughout drag [enhancement]

Merges finbars Issue #7 (see) into Hypergrid.

8. Normalize mouse wheel metrics across platforms and browsers [enhancement]

The following platforms and browsers are supported by assigning multiplicative factors to each (webkit on macOS = 1.0):

  • macOS
    • webkit (Chrome/Safari/Opera)
    • moz (Firefox)
  • Windows
    • webkit (Chrome/Opera)
    • moz (Firefox)
    • IE 11
    • Edge

Measurements were taken with default wheel system settings. The macOS measurements were taken on 10.13.6 (High Sierra). The Windows measurements were taken on Windows 10 and Windows 7 SP 1 (which yielded identical results with the exception of IE 11 on W7 which was ~20% faster compared to to IE11 on W10 but not enough to be a concern, especially with < 1% browser market share).

Normalization can be turned off:

  • Before instantiation:
    var FinBar = require('finbars'); // or Hypegrid.modules.finbars or fin.Hypergrid.require('finbars')
    delete FinBar.normals;
  • For a specific grid instance:
    grid.sbVScroller.normal = grid.sbHScroller.normal = 1;

In any case (with or without normalization), the application layer can still apply its own (additional) factor using grid.properties.wheelVFactor and grid.properties.wheelHFactor.

9. Fix jsdocs typo: options.contextAttributes [docs]

Option was renamed (from canvasContextAttributes) before merge of v2.1.5 but jsdoc comments unfortunately got out of sync, disappointing anyone trying the option using the erroneous name in the docs.

10. Reorganize and update the Tutorial

The tutorial has been moved to a new home with its own more frequent release schedule:

https://fin-hypergrid.github.io/tutorial

The current release features new Help tabs for instructions on how to use the tutorial user interface (previously mixed in with the tutorial itself, which was confusing).

11. Updated copyright notice

The copyright notice was updated from "© 2015 Openfin" to "© 2015 Openfin and The Hypergrid Authors" in:

  • ./LICENSE file
  • jsdoc-template-hypergrid submodule (which puts the copyright notice at the bottom of every doc page) (See a separate PR in another repo.)

12. Updated license

The following restriction has been removed from the license:

You may not redistribute the software or modifications as part of any application that can be described as a development toolkit, library or framework.

This change makes the license back into a plain vanilla MIT license (per ./package.json).

Published to npm

This release has been published (as of 10/29/2018) as a module to the npm registry.

Pre-bundled build files

A bundled build of this release is available on the CDN.

Hypergrid v3.0.3

26 Sep 00:40
f57ba4a
Compare
Choose a tag to compare

This patch release v3.0.3:

This is a very minor release, fixing one reported issue and updated the tutorial.

Synopsis

  1. Grid now takes back focus after cancelling out of a cell editor
  2. Tutorial has been expanded to include Scrollbar Styling

1. Grid now takes back focus after cancelling out of a cell editor

See issue #753: Cancelling the editor loses focus ... This refers to the grid (i.e., it's <canvas> element) losing the focus so it wasn't responding to keyboard events (until click on).

2. Tutorial has been expanded to include Scrollbar Styling

Added a new tab Scrollbars to the Formatter Workbench tutorial along with accompanying tutorial pages and code snippets.

Published to npm

This release has been published (as of 9/25/2018) as a module to the npm registry.

Pre-bundled build files

A bundled build of this release is available on the CDN.

Hypergrid v3.0.2

29 Aug 11:35
e2b642e
Compare
Choose a tag to compare

This patch release v3.0.2:

  • Reflects:
    • core repo: PR #742
    • build repo: all direct commits since the 3.0.1 release (for item # 4 below)
  • Supersedes:

Synopsis

  1. Regression when no data rows (Issue #741)
  2. Fix linter errors in columnEnum.js
  3. Avoid throwing error on a mouse event received before columns are created
  4. Expose registries to fin.Hypergrid.require()
  5. DataModel instantiation option now accepts array
  6. Remove finbars.css from <head> section
  7. New column property: resizeColumnInPlace (Issue #749)
  8. Fix editOnNextCell feature (Issue #745)
  9. Avoid throwing error when dragging a column and column(s) selected (Issue #751)
  10. Demos

1. Regression when no data rows (Issue #741)

Solution was to properly handle edge cases in grid.renderer.paintGridLines:

  • No data rows
  • No header rows

2. Fix linter errors in columnEnum.js

3. Avoid throwing error on a mouse event received before columns are created

This annoying error happened if the mouse was moved over the grid during a page reload.

4. Expose registries to fin.Hypergrid.require()

The fin.Hypergrid.require() function is a feature of the build files only. (It is not needed with the fin-hypergrid npm module when a CommonJS-like require() function is already available.) As such, it is found in the build repo; the commits for these changes can therefore be found there. The changes are listed here because the build files (as well as the npm module) are published whenever the latest version is merged (see below).

The following expressions are now valid:

  • fin.Hypergrid.require('fin-hypergrid/src/cellEditors')
  • fin.Hypergrid.require('fin-hypergrid/src/cellRenderers')
  • fin.Hypergrid.require('fin-hypergrid/src/dataModels')
  • fin.Hypergrid.require('fin-hypergrid/src/features')

These expressions return the four currently defined registry objects.

Previously, fin.Hypergrid.require() only accepted fully qualified paths, ending in a module filename (e.g., fin.Hypergrid.require('fin-hypergrid/src/cellEditors/SimpleCell'). Now the registries are exposed so new modules can be added (with Registry.prototype.add) and existing modules can be referenced (with Registry.prototype.get) for use as base classes for the new modules. Registries are instantiated at load time and are therefore available before the first grid instantiation. (Previously grid.cellEditors, grid.cellRenderers, and grid.behavior.featureRegistry were accessible, but only after instantiation. The dataModels registry was not previously accessible.)

5. DataModel instantiation option now accepts array

As a convenience feature, when an array, instantiates a multi-stage data model as a data source stack. Each data source is instantiated in turn, passing the previous stack tip to the next constructor, forming a linked list. Each is data source module is a subclass of datasaur-base, which implements method inheritance on the stack.

Previously: Single-stage data model

var MyDataModel = require('./my-data-model');
var options = { DataModel: MyDataModel };
var grid = new Hypergrid(options); 

Alternatively, the following produces the same result:

var options = { dataModel: new MyDataModel };
var grid = new Hypergrid(options); 

Previously: Multi-stage data model

var dataModel = new (require('datasaur-indexed'))();
dataModel = new (require('datasaur-indexed'))(dataModel);
var grid = new Hypergrid({ dataModel: dataModel }); 

Now, with this enhancement: Multi-stage data model

The following is a short hand for the above

var DataModel = [ require('datasaur-local'), require('datasaur-indexed') ];
var grid = new Hypergrid({ DataModel: DataModel });

6. Remove finbars.css from <head> section

This stylesheet was being completely overridden by the duplicate in the <body> section (which remains).

7. New column property: resizeColumnInPlace (Issue #749)

Resizing a column through the UI (by clicking and dragging on the column's
right border in the column header row) normally affects the width of the whole grid.

Set this new property to truthy to inversely resize the next column.
In other words, if user expands (say) the third column, then the fourth column will contract —
and vice versa — without therefore affecting the width of the grid.

This is a column property and may be set for selected columns (myColumn.properties.resizeColumnInPlace)
or for all columns by setting it at the grid level. (myGrid.properties.resizeColumnInPlace).

Note that the implementation of this property does not allow expanding a
column beyond the width it can borrow from the next column.
The last column, however, is unconstrained and resizing it will affect the total grid width.

8. Fix editOnNextCell feature (Issue #745)

Issue was new cellEvent failed to define its gridCell.y prop.

9. Avoid throwing error when dragging a column and column(s) selected (Issue #751)

Fixed. This was due to improperly clearing existing selections in SelectionModel.prototype.clear.

This commit also blocks dragging column on right-click.

10. Demos

These demo commits are actually in the build repo. The changes are listed here because the live demos are published along with the bundled builds (see below).

Testbench demo

Restored the regressed "top-level global vars" help tip.

Formatter Workbench demo

Collapsed the four text areas into one using a tab bar (curvy-tabs) and incorporated the instructions onto the same page. (Compare v3.0.1 vs. v3.0.2 to see the difference.)

Note: The tutorial is still a work-in-progress

Cell borders

A new cell-borders demo contains sample code that shows how to implement cell borders using an overlay cell renderer (called Borders) for the purpose. Cell borders are line segments drawn on the edges of cells to form rule lines between cells.

Caveats: This method of drawing rules between cells cannot be used simultaneously with the current grid lines feature. Note also that it is not performant and not recommended when performance is paramount unless restricted to a small handful of cells.

Published to npm

This release has been published (as of 8/28/2018) as a module to the npm registry.

Pre-bundled build files

A bundled build of this release is available on the CDN.

Hypergrid v3.0.1

12 Jul 10:56
9fcf6a0
Compare
Choose a tag to compare

This patch release v3.0.1 supersedes v3.0.0.

Synopsis

  1. Fix row header click regression
  2. Make deprecated columnEnum methods backwards compatible
  3. New demo: click-rect.html
  4. clickRect enhancements

1. Fix row header click regression

v3.0.0 threw an error when clicking in a row number cell. This has been fixed.

2. Make deprecated columnEnum methods backwards compatible

Although behavior.columnEnum and related methods and properties have been deprecated, and will issue a warning if used, they are still supposed to be fully functional. The version released in 3.0.0, however, was not true to the original implementation, returning the column objects rather than the column indexes (and therefore not an "enum" at all). This was the only issue preventing the v2.1.x Dev Testbench demo from working with v3.0.x. This has been fixed.

3. New demo: click-rect.html

Demonstrates the use of config.clickRect and includes instructions and notes on the page and additional notes and alternate codings in the view source. (This demo is not dependent on the enhancements discussed below.)

4. clickRect enhancements

  • clickRect is now also a property — in addition to being settable by cell renderer
  • clickRect can now be a simple object { x:number, y:number, width:number, height:number } — as alternative to a Rectangle object
  • row selection now respects clickRect
  • add hotIcon property with possible values of 'left', 'center', or 'right'. Respected by the SimpleCell cell renderer which, per value, automatically sets config.clickRect to image rect specified in config.leftIcon, config.centerIcon, and config.rightIcon, respectively.
  • SimpleCell now paints center icon on top of text (previously only painted it if no text)

Ignore commit "skip calls to canvas.paintNow during createColumns()"

This commit (eb54c56) was supposed to be reverted; it was not intended to be included in this release. It is ineffective in resolving errors that are thrown when the paint loop is stopped. Ignore. This will be reverted in 3.0.2 in favor of a more general solution to these issues.

Published to npm

This release has been published (as of 7/14/2018) as a module to the npm registry.

Pre-bundled build file

A bundled build of this release is available on the CDN.

Hypergrid v3.0.0

07 Jul 03:29
f39fa11
Compare
Choose a tag to compare

Please make careful note herein of breaking changes.

In addition (depending on what version you are upgrading from), you will want to reveiw the release notes of late versions of 2.1.x, which added many new features!

CAUTION: DO NOT BLINDLY UPGRADE YOUR APP TO VERSION 3!!

While this new version is largely backwards compatible for many use cases, there are breaking changes as the major version number increment implies, especially around the dataModel object which will affect those applications that manipulate or depend on low-level aspects of the v2 dataModel object.

If you feel your use application is not one of those, do give it a try. Otherwise, please check back here in a few days for detailed release notes noting the pain points migrating from v2 to v3.

Demos

The demos have been removed from this core repo to a new repo called build. The live demo links on the CDN have not changed, including the default demo, the dev testbench. For a listing of the other demos, see the new demo index. (Note that because the links haven't changed, you may need to clear your cache to see all of the latest versions (although some of their contents haven't changed at all.)

Data model changes

We have retired the internal DataModel class and dataModels/JSON subclass, previously referenced as grid.behavior.dataModel. That reference now points to an external black-box dataModel.



(Some properties of the retired objects that dealt with the internal structure of the data model, such as .DataSources, .source, .dataSource, .pipeline, and .controllers`, are now gone. How the external data model works is no longer of any interest to Hypergrid. Furthermore, “data controllers” have been replaced with messaging.

)

To make this transition easier (seamless, in fact, for most developers), we have included a new default data model in the build (datasaur-local which subclasses datasaur-base), used when developers do not “bring their own” external data model, provided to either of two new instantiation options, dataModel (a fully instantiated data model API) or DataModel (a data model constructor).

The new data model interface is responsible for implementing a very small core set of three methods. Implementation of any of an additional larger set of methods is optional. When unimplemented, Hypergrid injects “fallback” implementations that provide basic functionality. This ensures that basic access to the data model is backwards compatible. The .dataModel.getCell and .getCellEditorAt “hooks” are both still supported.

(Note that DataSourceBase and DataSourceLocal have been retired.)

A detailed wiki describing the data model interface is forthcoming.

Data model messaging

New to Hypergrid is data model events. Hypergrid subscribes to and handles some basic data model events (for those data models that implement events), before propagating them out to the grid as grid events (which the application layer can subscribe to). You can also roll your own custom data model events to listen for as grid events. By convention, data model event strings should be revised with fin-hypergrid-data-.

For example, Hypergrid handles the fin-hypergrid-data-schema data model event by “decorating” the dataModel.schema array with a self-referential dictionary with column names as keys, including “camelized” versions of keys with underscores and hyphens, etc.

Behavior changes

  • The internal behaviors/JSON subclass of Behavior is now called Local.
  • Behavior object support for data controllers (grid.behavior.getController, .setController, .prop) have been retired in favor of data model messaging.
  • The propertiesBehavior.prototype.columnEnum, .columnEnumKey, and .columnEnumDecorators have been deprecated in favor of accessing column schema through .schema, .columns, and .allColumns, all of which now sport self-referential dictionaries. (Deprecated means these properties are still supported for now but accessing them will issue deprecation warnings to the console.)

Old deprecated methods retired

All methods previously deprecated in versions 1.x.x (which issued deprecation warnings to the console) have been removed. These methods are no longer supported and calling any of them will now throw an error. (You were warned.)

Miscellany

  • Fixed removeAllEventListeners
  • Added fin-hypergrid/src/lib/SelectionRectangle.js
Like Rectangle but .extent coords are exclusive rather than inclusive (i.e., 1 greater), which works better with .width, .height, and .area which were previously of little use.
  • New Hypergrid methods:
    • addState
    • stashRowSelections
    • unstashRowSelections
    • stashColumnSelections
    • unstashColumnSelections
  • Improved registerTheme and registerThemes logic.

Hypergrid 2.1.15

05 Jul 12:25
3c90bc8
Compare
Choose a tag to compare
  • This patch release v2.1.15 supersedes v2.1.14
  • Reflects PRs #735
  • Note that there were no releases v2.1.1, v2.1.9, v2.1.11, or 2.1.12

See also

In addition to the release notes below, please refer also to:

  • Release Notes: v2.1.0 wiki page
  • Notes for all subsequent releases through v2.1.14 (following these notes)

Published to npm

This release has been published as a module to the npm registry.

Pre-bundled build file

A bundled build of this release is available on the CDN.

Synopsis

  1. Fix partial render grid lines (Issue #730)
  2. Option to turn off canvas's alpha channel
  3. Fix error in Hypgrid.prototype.terminate
  4. Add more dashboard controls to demo/row-props.html
  5. Add autosizeGroups and documentation to fin-hypergrid-grouped-header-plugin

1. Fix partial renderer grid lines (Issue #730)

This issue affects the "partial renderer" only. The partial render is the "by-cells" grid renderer, which is the "difference engine" renderer that only repaints cells whose contents has changed. This renderer has the major advantage of speed, up to 5x faster (!).

The issue was that the cells were overwriting the lines previously drawn by the key frame render. This is because in the default "boxSizing" mode (grid.properties.boxSizing = 'border-box'), cell contents includes the one-pixel borders.

The fix was to redraw the grid lines in this situation, which incurs a negligible performance hit. You can however avoid this by setting .boxSizing = 'content-box' (which has some other advantages besides).

You can play with the box-sizing modes as well as the grid line widths using the new dashboard controls in the row-props.html app. (See item 4 below.)

2. Option to turn off canvas's alpha channel

Hypergrid intentionally supports transparent/translucent grids, for example:

grid.properties.backgroundColor = 'transparent'; grid.repaint();
grid.properties.backgroundColor = 'rgba(0,0,0,0)'; grid.repaint();
grid.properties.backgroundColor = 'rgba(200,0,0,.5)'; grid.repaint();

The use case for a transparent or translucent grid is rare, however, so we are introducing a new grid instantiation option for v2.1.15 and v3.0.0: options.canvasContextAttributes a value that will be passed to HTMLCanvasElement.getContext:

var gridOptions = {
    canvasContextAttributes: { alpha: false }
};
var myGrid = new Hypergrid(gridOptions);

The only "context attribute" currently available is alpha:

Boolean that indicates if the canvas contains an alpha channel. If set to false, the browser now knows that the backdrop is always opaque, which can speed up drawing of transparent content and images.

Use with caution. In particular, if the canvas is set to "opaque" ({alpha: false}), do not also specify a transparent or translucent color for grid.properties.backGround because content may then be drawn with corrupt anti-aliasing (at lest in Chrome v67).

Note that such an "opaque" canvas can still be made to appear translucent using the CSS opacity property — a different effect entirely.

Although alpha: false has no apparent performance gains (in Chrome v63), it does permit the graphics context to use sub-pixel rendering for sharper text when viewed on LCD or LED screens, in especially black text on white backgrounds. The improvement is particularly apparent when viewed on a high-pixel-density display (such as an Apple retina display).

canvasContextAttributes Canvas Text Sample
alpha: true transparent regular
anti-aliasing
regular.png
alpha: false opaque sub-pixel
rendering
sub-pixel.png

3. Fix error in Hypgrid.prototype.terminate

Fixed a coding error in the terminate method, which now functions correctly: The shared property Hypergrid.grids maintains a list of instantiated grids. Use grid.terminate() to remove a grid from the list before deleting it's canvas element.

4. Add more dashboard controls to demo/row-props.html

  • New controls:
    • Rule lines
      • Horizontal (between rows)
        • enable (gridLinesH)
        • color (gridLinesHColor)
        • width (gridLinesHWidth)
      • Vertical (between columns)
        • enable (gridLinesV)
        • color (gridLinesVColor)
        • width (gridLinesVWidth)
    • Divider rule lines
      • Horizontal (between column headers or fixed rows and the scrolling content)
        • color (fixedLinesHColor)
        • width (fixedLinesHWidth)
        • edge (fixedLinesHEdge)
      • Vertical (between row headers or fixed columns and the scrolling content)
        • color (fixedLinesVColor)
        • width (fixedLinesVWidth)
        • edge (fixedLinesVEdge)
    • Fixed row count (fixedRowCount)
    • Fixed column count (fixedColumnCount)
    • Cell "box sizing" (box-sizing)
  • Added missing repaint() calls to some controls.
  • Reposition "behind-the-grid content" (orange circle) relative to grid to accommodate wrapped controls.

5. Add autosizeGroups and documentation to fin-hypergrid-grouped-header-plugin

Though technically not a part of Hypergrid core, it is worth noting here that fin-hypergrid-grouped-header-plugin has been updated to version 1.2.0.

  • Add autosizeGroups property (default: true) — see README
  • Rewrote README.md. (The original README content w/examples was unfortunately lost some time back.)
  • Published to nmpjs.org. (Note however the version of the README found here has some minor errors & omissions.)
  • Published to CDN.