Skip to content

Releases: d3plus/d3plus

1.3.1

18 Jun 14:43
Compare
Choose a tag to compare
  • The default text and number formatting functions are now global utilites, d3plus.string.title and d3plus.number.format.
  • Log scales labels are now formatted using scientific notation ( 10⁴, 10⁵, etc ).
  • Added Macedonian localizations (thanks to @slobodanblazeski). To help contribute more languages, please go to this page for more information.
  • A vast improvement to the way d3plus.color.lighter behaves (example).
  • Passing a data url directly to D3plus now supports all data types (not just JSON).
  • Previously, certain key names were not allowed in Tree Maps (listed here). Now, all key names are accepted.
  • Improved default form colors.
  • Created d3plus.string.list, which combines an array of strings into one list.
  • Created d3plus.color.sort, which is a comparator function used to sort colors based on their hue (rainbow sorting).
  • Created d3plus.string.format, which allows for string formatting similar to Python (using variables like {0} and {1}).
  • Moved d3plus.util.merge to d3plus.object.merge.
  • Moved d3plus.util.strip to d3plus.string.strip.
  • Deleted d3plus.color.darker in favor of using d3.rgb.darker().
  • Removed axis labels in "small" Chart visualizations.
  • Fixed Tree Map and Stacked legends when small data is grouped into an "other" category.
  • Fixed bug where clicking the back button would not reset the sub-title.
  • Fixed bug where the color of form toggles could not be changed.
  • Removed some excess bottom margin when a Custom Interface has not been specified.
  • Fixed bug where Custom Error Messages would not hide the visualization.
  • Fixed bugs related to having multiple visualizations on the same page.

1.3.0 "Sky"

28 May 18:13
Compare
Choose a tag to compare

GUI in the Sky with Diamonds

Version 1.3.0 is laying down the groundwork for some exciting possibilities. We've completely refactored the backend code structure to be much more modular (read: contributor friendly) and we've started on a path that is going to allow for some much better interaction with the visualizations.

Major Changes

  • Now introducing D3plus Forms, a great way to create beautiful cross-browser form elements. We're starting with just Dropdowns and Toggles, but will be adding more in the future. While we use these forms internally to create UI elements for visualizations, these forms can be used anywhere on the web by invoking d3plus.form( ) (examples here and here).
  • D3plus now supports language localization (example) with the new Value Formatting method. The currently supported languages are English "en" and Portuguese "pt" (thanks to @mariohmol). To help contribute, please go to this page for more information.
  • All .style( ) properties have now been completely merged into their respective functions. This provides a much more natural way of changing specific styles (while still keeping the source code separate for new styles).
  • Modernizr is no longer needed in order to take advantage of touch specific event handling.
  • The .text_format( ) and .number_format( ) functions have been moved inside of the new global Value Formatting method. You can access them by the "text" and "number" keys, respectively.
  • Every method has been unified to use "value" as the default value key (some used to use "key"). If you have code that sets a method's "key", you'll have to change that to "value".
  • When calling a method without passing any arguments, D3plus will now return that method's "value" if it exists. If it does not exist, or the method is passed the Object constructor, D3plus will return the full method's object. See the new Methods documentation for full details.
  • All methods can now be passed callback functions that will get called when the value of the method is changed. When passing the Draw method a function, the function will be passed a list of every method that has been changed since the last Draw event was triggered. See the new Methods documentation for full details.

Full Changelog

  • The Github Wiki has been completely retooled to make it more easier to find what you're looking for.
  • The size scale is now publicly accessible.
  • You can not modify the overlap percentage of nodes in a Network.
  • New d3plus.object.validate utility that checks to see if the item passed is a javascript keyed object.
  • New d3plus.array.udpate utility that will either append or remove an object from an array whether or not it is currently present in the array.
  • d3plus.font.validate now locally stores font lists once they've been validated to save time it gets called again with the same list.
  • d3plus.color.text now uses a better YIQ algorithm.
  • Smarter Legend behavior when trying to find parent names, icons and colors.
  • Made the .html( ) method a Tooltip Parameter.
  • Made the .rendering( ) method a Shape Parameter.
  • Moved all source methods into d3plus.method (previously in d3plus.public).
  • Moved all source visualizations into d3plus.visualization (previously in d3plus.apps).

1.2.4

15 Apr 17:41
Compare
Choose a tag to compare
  • The .focus() node in Rings is now smaller if .edges() labels are displayed, in order to correctly display primary edge labels.
  • All visualizations extending Chart now correctly add buffers to each axis when needed, regardless of scale type (previously, logarithmic scales were not getting a buffer applied).
  • .legend() category boxes can now be ordered by the following variables: color, id, size, text (defaults to color sorting).
  • .messages() will only be displayed on initialization and for .draw() updates dealing with datasets that are over the "large" limits defined in both .data() and .edges().
  • Fixed odd behavior with shapeRendering on mobile devices.
  • Fixed issue where certain grid lines and ticks would not appear in a Chart.
  • Fixed a bug where setting .color() to an .id() that is not a string would result in a .legend() with a color scale, rather than category boxes.
  • Fixed a bug where .focus() tooltips were not being removed when changing .focus() to something without data.
  • Fixed a bug where the .legend() would not display on Visualizations with only .edges() defined (without .data() and .nodes() defined).

1.2.3

11 Apr 21:27
Compare
Choose a tag to compare
  • .edges() now have a "size" key which can be used to size edges based on a variable.
  • When using the .legend() with Rings, it now only shows the colors used for the current .focus() (not the entire dataset). This also has the added benefit of drastically speeding up the visualization when using very large networks.
  • Added a custom label for the center node in Rings when using the .size() method.
  • Changed "d3plus.utils" to d3plus.util and "d3plus.fonts" to d3plus.font to be more consistent with our internal (singular) naming convention
  • Various small design tweaks/fixes.
  • In addition to the standard Makefile, we've also added support for using gulp.js as a development environment with live compiling and page refreshing

1.2.2

08 Apr 19:59
Compare
Choose a tag to compare
  • Multiple node size and label optimizations for the Rings visualization.
  • Nodes in the Rings visualization can now be sized using the .size() method.
  • .data(), .attrs(), .nodes(), .edges(), and .coords() can all be passed a URL (and callback function) to load data, and D3plus will do the appropriate JSON call (see this example).
  • Numerous optimizations to improve viewing visualizations on touch enabled devices. Modernizr is required for these optimizations.
  • New d3plus.utils.distances() utility which, when passed an array of nodes, returns an array listing all of the pixel distances between the nodes.
  • .messages() can now be passed a string to be used for all messages.
  • The visibility of the .timeline() handles can now be toggled.
  • Fixed a bug where setting the .zoom() "pan" behavior to false was not working.
  • Fixed a bug where sometimes the default text styles would not render properly.
  • Fixed a bug where .descs() question marks would sometimes incorrectly appear in tooltips next to values that had no descriptions.
  • Fixed a bug where color scales would not be updated when changing .depth().
  • Fixed a bug where grouped nodes in visualizations that merge small nodes were not getting the correct .color() value.

1.2.1

02 Apr 17:41
Compare
Choose a tag to compare

In addition to the changes below, we now have streamlined the process we use to created Examples on our website. You will be seeing a rapid growth in the number of Examples on that page in the coming days/weeks.

  • All font-family styles now accept arrays and comma-separated strings (similar to CSS). This list is automatically run through d3plus.fonts.validate() to determine the best font installed on the user's device (if the list has not already been validated).
  • Defining a global font style now works recursively, overwriting any other specific elements that have fonts associated with them. This is a great way to quickly change all of the fonts displayed to a specific family.
  • Added public variables to the .zoom() method to disable specific aspects of the zoom behavior, namely "scroll", "pan", and "click".
  • Added public variable to the .labels() method to disable automatic label resizing.
  • Geo Map labels now live on a layer above all of the coordinates, fixing the bug where some labels would be cropped by other geometries on top of them.
  • Created new Scatter visualization type that extends Chart.
  • Fixed "Back" button not getting enough vertical space in the header when viewing deeper nesting levels.
  • Fixed dynamic sub-title not getting reset when returning to the highest depth.
  • Fixed issue where some area labels would get duplicated when zooming/updating the visualization.
  • Fixed issue where continuous .x() and .y() variables were getting aggregated when nesting (they should not).
  • Fixed issue where labels for .edges() were trying to be drawn when there was no label key defined.
  • Fixed issue where some labels would not get run through the default .text_format() function.
  • d3plus.utils.wordwrap() has better ellipsis detection.
  • Optimized drawing large Line Plots.
  • Fixed issue with ghost lines in nested Line Plots.
  • Fixed issue where the .legend() gradient was not getting exported to PDF properly.
  • Improved default style for the .timeline(), bringing it in line with the other UI elements.
  • Changed the default color "heatmap" and "scale" styles to use the new color scale released with version 1.2.0.
  • Added tick sizing to Style Parameters.
  • If a number's key matches "year" or "date", or the defined .time() key, the default .number_format() function will not format the number (commas won't be added to years).
  • Added additional "small words" to the default .text_format() function. The words "a", "and", "of", and "to" will not be capitalized if they are not the start of a phrase.
  • Visually tweaked the back button and timeline/legend paddings, along with reversing the positions of the timeline and legend (legend is now above timeline).
  • Removed some deprecated styles from d3plus.css.
  • Updated to support D3 v3.4.4 and Topojson v1.6.0.

1.2.0 "Royal"

28 Mar 19:54
Compare
Choose a tag to compare

Royale with Cheese

I'm excited to finally be launching version 1.2 of D3plus. This version includes a lot of the features that are present in DataViva, such as zooming in visualizations, along with a slew of other optimizations and new features. Please read over these release notes, as a few things have changed:

Major Changes

  • The .links() method has been renamed to .edges(). Please update your visualizations accordingly.
  • Visualizations now support "zooming", either in the traditional sense of the word (like in Geo Map) or with nesting levels (like in Tree Map). Can be disabled using the new .zoom() method.
  • When an element is selected using .focus(), a tall tooltip will appear on the right side of the visualization displaying information about the element (if information is available). Can be disabled by setting the "tooltip" value of .focus() to false.
  • When .edges() are specified, a list of Primary Connections will be automatically placed in all large tooltips (such as the .focus() tooltip).
  • Visualizations now display status messages, telling the user what is happening behind the scenes as the visualization is being drawn/redrawn. These messages can be disabled using the new .messages() method.
  • Implementation of new "history" functionality. It's in the early stages and is currently only used when zooming by nesting levels to allow a way to back out of the zoom. This behavior can be disabled using the new .history() method.
  • If the Network Visualization is only passed an .edge() list, and not a .nodes() list, the nodes x and y positions will be calculated dynamically using a force layout.
  • Tree Map now groups small data points together using the .size() threshold.
  • Geo Map now has coordinate area labels.

New Utilities

Full Changelog

  • The map projection "center" and "area threshold" of the .coords() method is now publicly accessible.
  • The .edges() method now allows setting custom "source" and "target" keys.
  • d3plus.color.text() now returns "#f7f7f7" instead of "#ffffff" for light text.
  • d3plus.color.random() has been updated to use a new custom color palette.
  • d3plus.color.lighter() and d3plus.color.darker() have been tweaked to retain more of the original color's hue, while still modifying the brightness.
  • Network, Rings, and Geo Map visualizations do not require setting .data()
  • .type() now supports a "mode" key that determines the "mode" of the current Visualization (currently only used in Tree Map to set the mode of the packing calculation).
  • If .size() is set to "square", the nodes in the Rings visualization are now rotated based on their position.
  • The .legend() tooltip now displays if multiple data points use the same color.
  • .title() and .footer() methods can all be passed a URL link to open when clicked.
  • Removed "auto-draw" behavior from .draw().
  • New/more Style Parameters for titles, footer, highlighting, anchor links, and server messages.
  • Fixed various calculations and display issues with the total bar .title().
  • .size() "threshold" value is now a boolean, and each Visualization Type determines what percentage of data to group together.
  • When data below the "size threshold" is grouped, the number of grouped items is shown in the tooltip.
  • Removed % from d3plus.utils.wordwrap() line break detection.
  • Edges now only go to the edge of nodes (whether they are circles or squares), preventing edge arrows from appearing underneath the nodes.
  • Fixed issue where some nodes were not being colored properly with the .active() "spotlight" boolean.
  • Improvements to the d3plus.forms() beta code, getting closer to a full release.
  • Removal of some old deprecated zoom code from 0.9.
  • Various other code cleanup and bug fixes.

1.1.11

11 Mar 19:49
Compare
Choose a tag to compare
  • .size() method will now correctly remove data points that have negative values (objects will only get sized by positive values)
  • Fixed bug with Stacked where Y axis would not get set properly from .size() method
  • Various small fixes/tweaks to prepare for version 1.2

1.1.10

04 Mar 02:32
Compare
Choose a tag to compare
  • fixed .legend() not updating when switching from scale to squares
  • fixed bug where nodes in Rings would not sort correctly (and would cause a Firefox crash)
  • fixed edge-case missing space when breaking text lines at non-space characters using d3plus.utils.wordwrap()
  • tweaked stroke and fill colors of all shapes
  • improved behavior of d3plus.color.lighter()
  • fixed incompatibilities with the newest version of D3.js (3.4.3)
  • various behind-the-scenes improvements to the d3plus.ui() beta code, which will be available soon

1.1.9

24 Feb 20:51
Compare
Choose a tag to compare
  • .links() now supports passing a "label" key for labeling connections
  • .links() now also supports displaying arrows at the end of each line. Both the direction and the size of the arrow can be specified.
  • Chart shapes now display at the correct y position when a .title() has been defined
  • "total" .title() sub-method now appears in Stacked
  • created public variable in .links() to define the cutoff for a "large" network of links
  • fixed bug preventing passing .html() a function
  • tooltips will now only be displayed on hover if they contain information not available in the visualization (ex. they will not be displayed if the shape has a label and the tooltip only contains the label)
  • tooltips now always correctly display .active() and .temp() fill percentages
  • changed default dark text color of d3plus.color.text() from #333333 to #444444
  • changed math to increase available space for labels placed inside of circles
  • fixed bug in d3plus.utils.merge() where deep nested objects would not clone correctly