CHANGELOG.md
# 2.38.4-0 / Unreleased
- [Changed] [#1143](https://github.com/mar10/fancytree/issues/1143) Improve the appearance of vertical connectors of skin XP
- [Fixed] [#1153](https://github.com/mar10/fancytree/issues/1153) jQuery .focus() is deprecated
- [Fixed] [#1157](https://github.com/mar10/fancytree/issues/1157) Sporadic error restoring expansion
- [Fixed] [#1158](https://github.com/mar10/fancytree/issues/1158) Add guard for error handling
# 2.38.3 / 2023-02-01
- #1113 Update jQuery UI to 1.13.2
# 2.38.2-0 / 2022-06-30
- [Fixed] #1097 Removed incorrect set-function for jQuery cookie
- [Fixed] #1108 minExpandLevel: 2 together with table extension does not work
# 2.38.1 / 2022-01-14
- Replace deprecated jQuery functions: `$.isArray()`, `$.isFunction()`,
`$.trim()`, `$().click()`
- Update to jQuery 3.6.0 and jQuery UI 1.13.0
- Update formatter to [Prettier 2.0](https://prettier.io/blog/2020/03/21/2.0.0.html)
# 2.38.0 / 2021-02-09
- [Added] #1041 Make assertions more debuggable
- [Added] #1051 ext-filter Fuzzy matched title segment is not highlighted
- [Added] #1053 ext-dnd5 new option `dnd5.sourceCopyHook` (optional callback
passed to `toDict` on dragStart)
- [Added] #1054 ext-filter tree.updateFilter()
- [Fixed] #700 ext-filter Doing fuzzy filtering doesn't escape regex characters like the non fuzzy case
- [Fixed] #1042 Don't scroll while clicking an embedded link
- [Fixed] #1045 re-init exception (grid-ext)
# 2.37.0 / 2020-09-11
- [Changed] #871, #1032 ext-glyph:
- Support for SVG tags as used by fontawesome 5 with `all.js` library
- Improved padding and alignment for skin-awesome icons
- Allow to pass a callback() as `glyph.map<TYPE>` option
- Update Fontwesome demos to v5.0.13
- [Changed] #1025 ext-dnd5: changed behavior when `dndOpts.multiSource` is
true. Now dragging an unselected node will only drag that single node (while
keeping the other nodes selected). You have to drag one of the _selected_
nodes in order to drag the whole group.
- [Fixed] #1022 ext-persist: Handle 'Access is denied for this document'
- [Fixed] #1028 Uncaught TypeError: apply is not a function (regression of #1019)
- [Fixed] #1029 Fast expand/collapse of folder leads to inconsistent state
# 2.36.1 / 2020-07-25
- [Fixed] #1021 ext-dnd5 Regression (#1012) in drop marker
# 2.36.0 / 2020-07-15
- [Changed] #1005 Cast key to string in getNodeByKey()
- [Changed] #1013 ext-dnd5: log warning when jQuery is too old
- [Added] #1012 `dnd5.dropMarkerParent` allows usage in Webcomponents (i.e. shadow DOM)
- [Added] #1017 `copyFunctionsToData` allows also copying functions to the data property of the node
- [Fixed] #921 ext-edit / focus handling: Internet Explorer scrolls briefly
to the top/left after editing if the tree container is partially outside the viewport
- [Fixed] #1001 Invalid urls in skin-xp CSS
- [Fixed] ext-dnd5: dropEffectCallback=none was not reset in some cases
- [Fixed] #1018 ContextMenu extension always focuses the first node in the tree
# 2.35.0 / 2020-03-27
- [Changed] The `enableAspx` option will default to 'false' in the future.
For now, a warning is emitted, to explicitly set it or use the `postProcess`
event instead.
- [Added] #988 New option `dnd5.preventLazyParents` prevents dropping items on
unloaded lazy nodes (defaults to true)
- [Fixed] #983 lazyLoad with promise not calling postProcess
- [Fixed] #984 ext-edit: Exception when cancelling addSibling() or addChildren()
- [Fixed] #987 Lazy load puts "Load error" for content outside tree div
if parent folder is removed before loads ends
- [Fixed] #989 `node.toDict()` keeps empty `children` array
- [Fixed] #998 dnd5 triggering multiple loads of lazy nodes on hover
# 2.34.0 / 2019-12-26
- [DEPRECATED] jQuery UI widget methods:
Use `tree.METHOD()` instead of `$().fancytree("METHOD")`.
- [Added] `tree.debugTime()`, `tree.debugTimeEnd()` for debugging.
- [Added] `tree.destroy()` as alternative for `tree.widget.destroy()`.
- [Fixed] `$.ui.fancytree.getTree()` for Element arg.
- [Fixed] #973 when use ext-grid in one tree, other tree not use ext-grid has error on click.
- [Fixed] #974 ext-grid: too much output in production mode.
- [Fixed] #975 ext-grid: fix `tree.visitRows()` for empty tree.
- [Fixed] #978 ext-grid: addChildren() throws error when grid is hidden.
# 2.33.0 / 2019-10-29
- [Added] event `preInit` (fired before nodes are loaded).
- [Changed] jQuery is now a peerDependency (>=1.9), so users can install or re-use their own version.
- [Changed] ext-grid: `updateViewport` event is now also triggered for 'renumber' (i.e. expand, collapse)
- [Fixed] #963: tree.setExpanded() fails when autoScroll is enabled
- [Fixed] #964: handle case when `source` is not passed and no `<ul>` is embedded.
- [Fixed] #966: ext-dnd5: bug in function onDropEvent (case 'dragover')
- [Fixed] ext-filter: sub-match counter is one too high.
# 2.32.0 / 2019-09-10
- [Added] `node.hasClass()`
- [Added] `tree.applyCommand()` and `node.applyCommand()` (experimental!)
- [Added] `tree.isLoading()`
- [Added] `tree.toDict(includeRoot, callback)` and `node.toDict(recursive, callback)`:
callback can now return `false` or `"skip"` to skip nodes.
- [Fixed] #951 Hover issue in unselectable radio
- ext-dnd5: allow autoExpand even if dropping is prevented
- [Fixed] ext-filter: tree.rootNode.subMatchCount is now set correctly
- [Fixed] #955 node.navigate($.ui.keyCode.DOWN, false) does not return promise
- Stop testing with jQuery UI 1.10 and 1.11 (only jQuery UI 1.12 remains)
# 2.31.0 / 2019-05-30
- New extension **ext-grid** (experimental)<br>
This is a variant of `ext-table` that introduces viewport support, which
allows to maintain _huge_ data models while only rendering as many DOM elements as necessary.<br>
Main changes:
- A viewport is defined by the number of visible rows (`tree.viewport.count`) and the index of the first visible row (`.start`)
- When scrolling, rows are not hidden, but removed and replaced. (This implies that the contents of embedded input fields should be written into the model immediately.)
- Refactored **ext-dnd5**<br>
Some **breaking changes** were made, mainly to improve handling of the dropEffect
(note that ext-dnd5 was and still is experimental and in progress).
- Remove `dnd5.dropEffect` callback option (set `data.dropEffect` instead)
- Remove `dnd5.dragImage` callback option (call `data.dataTransfer.setDragImage()`
- and set `data.useDefaultImage = false` instead)
- Rename `dnd5.preventRecursiveMoves` to `dnd5.preventRecursion`
- `dnd5.preventVoidMoves` now only aplies to 'move' operations, so we can _copy_ before self
- [Added] `dnd5.preventSameParent` option
- [Added] hook `treeStructureChanged`
- [Added] methods `tree.findRelatedNode()`, `node.findRelatedNode()`
- [Added] method `node.getPath()`
- [Added] methods `$.ui.fancytree.getDragNode()`, `$.ui.fancytree.getDragNodeList()`
- [Added] event `updateViewport`
- [Added] tree option `.checkboxAutoHide` to hide checkboxes unless selected or hovered.
- [Added] tree option `.treeId` to prevent generation of a new sequence if the tree is re-initialized on a page.
- [Changed] `.getTree()` now also accepts the tree id string
- [Changed] #939: Keep a `partsel` flag that was explicitly set on a lazy node
- [Changed] ext-clones: make default key generation more robust against collisions
- [DEPRECATED] loaderror and lazyload options now throw an error instead of falling back to the correct loadError and lazyLoad
- [DEPRECATED] `tree.applyFilter` was removed
- [Fixed] #918 SVG font awesome 5 glyphs remove badge counter when parent node is collapsed
- [Fixed] #921 ext-edit respectively focus handling: Internet Explorer scrolls briefly
to the top/left of the tree container element after editing a node title if the
tree container is partially outside the viewport
- [Fixed] #931 Selecting grandparent selects all nodes of radiogroup in selectMode=3
- [Fixed] #946 dnd5 - Counter badge shows up, although the drag was cancelled from dragStart callback
- [Fixed] #947 dnd5 - dragEnd is fired only when re-ordering nodes within the same parent
- [Fixed] missing tree.error() and broken node.error()
- [Fixed] a bug in ext-logger
- Optimized performance of `expandAll()` and `ext-filter`
- Replace jshint/jscs with eslint
- Now testing on Puppeteer/Chromium instead of PhantonJS
- Use LF on Windows when checking out from git (added .gitattributes)
- Update to jQuery 3.4
# 2.30.2 / 2019-01-13
- Stop testing on IE 8 (no longer available on Saucelabs)
- [Fixed] #910 ext-dnd5 throws error for draggable column headers
- [Fixed] overrideMethod()'s calling context
- [Fixed] #912 ext-dnd5 + ext-glyph awesome5 does not show the icons when dragging an item
- [Fixed] #919 ext-multi: JavaScript error (event is not defined) in nodeKeydown
- [Fixed] #922 scrollIntoView for plain trees that don't have a scrollbar
- [Fixed] #924 ext-edit: Fix caret position for mouse-click in input
- [Fixed] #928 ext-dnd5: Fix `preventNonNodes` option
- [Fixed] #929 Fix `.getTree()` for jQuery 3
- [Fixed] #930 ext-dnd5: If drag does not start, no drag data should be stored
# 2.30.1 / 2018-11-13
- [Changed] Apply and enforce 'prettier' codestyle
- [Changed] #897 Set font for table extension
- [Fixed] #883: Font Awesome 4 animation spinner stays visible
- [Fixed] #894: Fancytree assertion failed: scrollParent should be a simple element or `window`, not document or body.
- [Fixed] #896 \_requireExtension: order managment
- [Fixed] #899 Creating duplicate icon when removing node using extension columnview
- [Fixed] #900 ColumnView Extension - Toggle between parent and children not working
- [Fixed] #909 With quicksearch enabled, does not search for non-Latin character
# 2.30.0 / 2018-09-02
- [Changed] ext-edit trigger 'clickActive' now only triggers if no modifier keys
(shift, meta, control, ...) are pressed.<br>
Trigger 'shift+click' now only triggers if no other modifier key (control, ...)
is pressed.
- [Changed] #879 Rename ext-debug to ext-logger
(jquery.fancytree.debug.js => jquery.fancytree.logger.js)
- [Added] ext-multi is now deployed with jquery.fancytree-all.js (still experimental)
- [Added] tree.activateKey(key, opts) now has an `opts` argument
- [Added] `nodata` option (bool, string, or callback)
- [Added] ext-table `mergeStatusColumns` option
- [Added] new method `tree.enable(flag)`
- [Added] new method `tree.expandAll(flag, opts)`
- [Added] new methods `tree.setOption(name, value)` and `tree.getOption(name)`
- [Fixed] ES6 import dependency on jquery for jquery.fancytree.ui-deps.js
- [Fixed] #863 setActive() sometimes does not scroll node into view
- [Fixed] #877 postProcess may now also return the object form `{..., children: []}`
- [Fixed] #884 ReferenceError: jQuery is not defined at \_simpleDeepMerge
- [Fixed] autoScroll, node.scrollIntoView(), and .makeVisible() now work for tables as well.
# 2.29.1 / 2018-06-27
- [Fixed] #848 Drag End Error with dnd5 extension (again):
fancytree-drag-remove class not removed on drop/dragend
- [Fixed] #875 ext-dnd5: Unwanted expanding of folder node when a node is dragged
before/after it
- [Fixed] #876 `triggerStart: []` does not override the default settings.<br>
**NOTE:** Options of type `Array` will now override the default option.
Before, arrays were merged with the default.
- [Fixed] ext-ariagrid default actions
# 2.29.0 / 2018-06-16
- [Changed]
`toggleEffect` now also accepts "toggle" or "slideToggle" to use jQuery effects instead of jQueryUI.<br>
`toggleEffect: { effect: "slideToggle", duration: 200 }` is now the default.<br>
'effects' component was removed from the bundled jquery.fancytree.ui-deps.js
- [Fixed] #746 Animation bug when expanding/collapsing nodes
- [Fixed] #848 Drag End Error with dnd5 extension
- [Fixed] #850 ext-childcounter doesn't work with custom icons
- [Fixed] #859 Fix log level configuration problem
- [Fixed] #865 toggleEffect animation (effect: blind) sometimes got stuck.
- Stop testing jQuery UI 1.9
- Update to jQuery 3.3.1
# 2.28.1 / 2018-03-19
- [Fixed] #844 Fix RTL for ext-table
- [Fixed] #845 Fix RTL for ext-dnd/ext-dnd5
- [Fixed] #764 Fix clicks on embedded <a> tags when filter is on
# 2.28.0 / 2018-03-02
- [Added] New extension ext-multi (experimental).
- [Added] ext-dnd5 support for dragging multiple selected nodes.
- [Added] #830 support for Font Awesome 5 (ext-glyph preset).
- [Added] ext-glyph supports SVG icons.
- [Added] `icon` option supports `{html: "..."}` content (also available for glyph-ext mapping).
- [Added] New method tree.visitRows()
- [Added] New method tree.selectAll()
- [Added] New method node.isBelowOf()
- [Added] New extension ext-fixed (experimental).
- [Changed] Re-rename clearData() to clearPersistData()
- [Changed] #828 Re-scale debugLevel from 0:quiet to 4:verbose, allowing to suppress warnings
and even errors.
- [Added] CSS helper classes:<br>
`.fancytree-helper-disabled`<br>
`.fancytree-helper-hidden` (replaces `ui-helper-hidden`)<br>
`.fancytree-helper-indeterminate-cb`<br>
`fancytree-helper-spin` for icon animations (replaces `glyphicon-spin`)
- [Fixed] #819: ext-filter: Handle nodes without title.
- [Fixed] #835: ext-dnd5: Accept drop externals after drag.
# 2.27.0 / 2017-12-16
- **BREAKING CHANGES:**
- `node.type` is now a first-class property of FancytreeNode.
Node data `{..., type: "foo"}` is now available as `node.type` (before: `node.data.type`).
- The properties `tree.types` and `tree.columns` have been added to Fancytree.
If passed with source data, they are now available directly instead of
`tree.data.types` or `tree.data.columns`.
- **Support patterns for node types:**
- The properties `node.type` and `tree.types` are recommended to implement node-type
specific configuration ([details](https://github.com/mar10/fancytree/wiki/TutorialNodeTypes)).
- Event `data` argument contains `typeInfo == tree.types[node.type]`.
- **Improved ext-glyph:**
- [Added] support for ligature icons (e.g. [material icons](https://material.io/icons/)).
- [Added] `icon` option can now return a dict to create a ligature icon.
- **Improved tree.loadKeyPath():**
- [Added] support for a custom path segment matcher.
This allows to have key paths with segments other than `node.key`.
- [Improved] the returned deferred promise now triggers `progress()` events which can
be used instead of the callback.
- The property `tree.columns` was added to Fancytree. Currently only reserved as
recommended pattern to pass global meta-data for ext-table.
- [Added] ext-edit: new trigger mode `clickActive` for option `triggerStart: [...]`.
- [Added] #798 Tooltip support for icons (dynamic option `iconTooltip`).
- [Added] #808 Pass custom storage providers to ext-persist.
- [Improved] ext-table no longer needs empty tbody/tr if thead is present.
- [Fixed] #796 UMD requirements for node/CommonJS
- [Fixed] #803 jquery.fancytree.ui-deps.js does not override existing widgets.
- [Fixed] #815 `<mark>` element missing in filtered nodes (minified bundle, IE 11).
- [Fixed] #816 findNextNode() doesn't set default for 'startNode' argument.
- [Added] Material Design demo
- [Added] Demo for Fancytree inside a jquery-confirm popup
- [Changed] String representation is now `"FancytreeNode@_4[title='My name']"`
- [DEPRECATED] `tree.clearCookies()`. Use <del>`tree.clearData()`</del> `tree.clearPersistData()` instead.
# 2.26.0 / 2017-11-04
- **BREAKING CHANGES:**
- [Fixed] #792 postProcess is now also called for non-Ajax sources.
- [Improved] LESS now compiles with webpack
- [Added] #791 ext-glyph support for radio buttons
- [Added] Color definitions for skin-awesome (taken from skin-lion)
- [Fixed] `$.ui.fancytree.getNode()` for ES6 environments
- [Fixed] #789 Wrong node is activated in IE, when clicking in unfocused container
# 2.25.0 / 2017-10-31
- **BREAKING CHANGES:**
- The `dist/src/` folder was renamed to `dist/modules`.
- Some directories like `demo/` are no longer part of the npm install.
- **Improved Module Support and Distribution**<br>
- The `dist/` folder now includes a `modules/` directory with fancytree core
and all extensions.
- All modules have UMD wrappers with defined dependencies.
- Internal jQuery UI dependencies are deployed as module and implicitly loaded.
- `jquery.fancytree/dist/modules/jquery.fancytree` is defined as
package main module, so Fancytree can be included using a simple<br>
`fancytree = require('jquery.fancytree')`.<br>
See [the docs](https://github.com/mar10/fancytree/wiki/TutorialIntegration)
for details.
- All modules now return the
[$.ui.fancytree object](https://wwWendt.de/tech/fancytree/doc/jsdoc/Fancytree_Static.html).
- [Added] new static method `$.ui.fancytree.createTree(elem, opts)`
- [Added] Source map files for `jquery.fancytree-all-deps.min.js`
- [Added] New extension ext-fixed (work-in-progress, experimental)
- [Fixed] #767: Input inside table head not working
- [Fixed] #768: Can't use keyboard to select nodes when `checkbox` option is false
- [Fixed] #782: wide extension - padding is off when checkbox option is changed
- [Fixed] #787: Fix getEventTarget() for custom icons
# 2.24.0 / 2017-08-26
- [Added] ext-glyph option `preset` (making the `map` option optional)
- [Fixed] Drop marker for ext-glyph + ext-dnd5
- [Fixed] #695: List AMD dependency on jQuery UI
- [Fixed] #735: Trying to set root node selected throws an error
- [Fixed] #740: Filtering must not consider escaped html entities
- [Fixed] #741: Passing an empty string ("") as filter calls clearFilter()
- [Fixed] #748: Drag start should not activate a node
- [Fixed] #761: ext-dnd5 throws exception when tree is empty
- [Fixed] #764: ext-filter breaks links
- Updated jsdoc to 3.5
# 2.23.0 / 2017-05-27
- **The external dependency on jQuery UI was removed**.<br>
A new library `jquery.fancytree-all-deps.min.js` is now added to the
distribution. It includes all dependencies on jQuery UI, so the only
remaining external dependency is jQuery.<br>
Continue to use `jquery.fancytree-all.min.js` if jQuery UI is already
included anyway.
- **Refactored the select behavior**<br>
[details](https://github.com/mar10/fancytree/wiki/SpecSelect):
<!-- [details](https://github.com/mar10/fancytree/wiki#selection-and-checkboxes) -->
- [Added] Allow control of selection status propagation with new options:
`unselectable`, `unselectableIgnore`, `unselectableStatus`.
- [Added] node option `radiogroup` to enable single-select for child nodes
- [Added] option `opts.noEvents` to `setSelected(flag, opts)`
- [Improved] Option 'checkbox' can have the string value "radio" (only has
the visual effect of replacing the icon)
- **BREAKING CHANGES:**
- The `hideCheckbox` option was removed. Use `checkbox: false` instead.<br>
Note that the `<li class='hideCheckbox'>` is still parsed from input
HTML and converted accordingly.
- The optional modifier class `<div class='fancytree-radio'>` was removed.
This class was used on the _container_ to turn all checkbox items into
radio buttons.<br>
Instead, this class is now added to `<span class="fancytree-checkbox fancytree-radio">`.
Use the `tree.checkox: "radio"` option to activate this for the whole tree.
- The callback signature for the `tree.tooltip` option has changed to
`tooltip(event, data)`
- [Improved] `aria` option is now on by default
- Use the new dynamic options pattern for
`checkbox`, `icon`, `tooltip`, `unselectable`, `unselectableIgnore`,
`unselectableStatus`.<br>
See also <a href="https://github.com/mar10/fancytree/wiki#dynamic-options">dynamic options</a>.
- [Added] New method `node.visitSiblings()`
- [Added] #730 ext-persist option `expandOpts` is passed to setExpanded()
Allows to suppress animation or event generation.
# 2.22.5 / 2017-05-11
- [Improved] #709 experimental ext-ariagrid
# 2.22.4 / 2017-05-06
- [Improved] #709 experimental ext-ariagrid
# 2.22.3 / 2017-05-05
- [Improved] #709 experimental ext-ariagrid
# 2.22.2 / 2017-04-29
- [Fixed] #729 Fix regression with addChild performance improvements (#708)
# 2.22.1 / 2017-04-21
- [Fixed] #722 Fix regression with addChild performance improvements (#708)
# 2.22.0 / 2017-04-11
- [Added] ext-dnd5 now part of standard distribution
- [Added] #693 ext-dnd/dnd5: configurable drop marker offset
- [Added] #616 ext-wide: configurable left padding
- [Added] New method $.ui.fancytree.evalOption()
- [Improved] #601 ext-filter: improve performance (don't render hidden nodes)
- [Improved] ext-contextMenu: disable keyboard while popup is open and restore focus
- [Improved] #701 ext-hotkeys: Prevent default behavior on hot key combination
- [Improved] #708 speedup improvement for addChildren
- [Fixed] #680 ext-dnd5: top level nodes not draggable
- [Fixed] #681 ext-table: exception when a lazy node has `children: []`
- [Fixed] #699 ext-dnd5: Icon remains after dnd is cancelled
- [Fixed] #702 $.ui.fancytree.getNode(jQuery)' for jQuery v3.x
- [Fixed] #706 Fix DND where fancytree-title span is not a direct child due to custom layouts
- [Fixed] #712 When clicking in a scrolled tree for the first time, focus is not set properly
- [Fixed] #716 ext-wide: animation 'jumps' (jQuery UI 1.12)
- [Fixed] #717, #719 expand/collapse shows displaced child nodes when scrolled (jQuery UI 1.12)
- Update demos to jQuery 3.2.1 / jQuery UI 1.12.1
# 2.21.0 / 2017-01-15
- [Added] New extension 'ext-dnd5' (beta) for native HTML5 drag'n'drop support
- [Added] `rtl` option for right-to-left script support
- [Added] Add $.ui.fancytree.overrideMethod()
- [Added] hook `treeSetOption` allows extensions to update on option changes
- [Changed] standard CSS no longer defines `overflow: auto` for the container.
If the tree container has a fixed height, `overflow: auto` or `overflow: scroll`
should be added to make it scrollable.
(Otherwise this always would be the scroll parent for ext-dnd5.)
- [Improved] better support for initializing from embedded JSON using the
`data-type="json"` attribute
- [Fixed] corner case of #658 when ext-edit is loaded, but inactive
- [Fixed] #396 Don't load 'loading.gif' for glyph skins
- [Fixed] #675 ext-table: node.render(false) puts first node at end
# 2.20.0 / 2016-11-13
- [Added] #419 `modifyChild` event. This event is also a good place to
implement auto sorting (#559)
- [Added] #419 node.triggerModifyChild() and node.triggerModify()
- [Added] #595 add custom node filter to `generateFormElements()`
- [Added] #610 `tree.tooltip` option allows automatic or custom tooltips
- [Added] #620 improved tooltip escaping to allow newlines
- [DEPRECATED] `removeNode` event. Listen for `modifyChild` with operation
'remove' instead (which is fired on the parent)
- [Improved] ThemeRoller theme
- [Improved] ext-filter
- #297 add filter option 'hideExpanders' to remove expanders if all child
nodes are hidden by filter
- Filter options and the `opts` argument of `filterNodes()` / `filterBranches()`
have been unified
- [Fixed] #230 themeroller theme compatible with ext-filter
- [Fixed] #528 autoCollapse option blocks filter's autoExpand option
- [Fixed] #529 Filter: Mark matching nodes even if parent was matched in branch mode
- [Fixed] #643 Exceptions in ext-filter if expression contains special chars
- [Fixed] #658 ext-filter does not work with ext-edit `editCreateNode()`
- [Improved] #656 WAI-ARIA support
- Set focus to first node on first tab-in
- Support [home] and [end] keys
- Set aria-activedescendant on container to active ID
- Set aria-multiselectable on container if selectMode != 1
- Set aria-treeitem, -selected, -expanded, on title span instead `<li>`
- [Fixed] #576 `loadKeyPath()` sometimes gets the root wrong
- [Fixed] #615 Drag & drop helper icons lose indentation with table extension
- [Fixed] #632 Tabbing is not working if there is an anchor tag in treeview
- [Fixed] #644 New nodes created with ext-edit, are hidden in filtered trees
- [Fixed] #647 ext-table: tree.render(true) does not discard existing markup
- [Fixed] #659 handling of function keys, when quicksearch is on
- Use QUnit 2.0
# 2.19.0 / 2016-08-11
- [Added] #607 tree.enableUpdate() to temporarily disable rendering to improve
performance on bulk updates
- [Added] modifier class `.fancytree-connectors` to be set on container<br>
Note: Experimental! Not required for skin-xp and not compatible with ext-table
- [Added] #623 ext-edit: `data.originalEvent` is now passed to `beforeClose`
- [Fixed] #604 Set `source` option does not update tree
- [Fixed] #609 node.load(true); doesn't maintain expanded
- [Fixed] #621 Cannot focus embedded input controls
- [Improved] #611 Keyboard navigation honors autoScroll option
- Extensions inherit main version number
# 2.18.0 / 2016-05-02
- [Added] #586 node.discardMarkup() (useful in the `collapsed` event)
- [Added] #171 new option `.escapeTitles`
- [Added] new callback `.enhanceTitle()`
- [Fixed] #515 Html tags included in filter results
- [Fixed] #593 ext-dnd revert position fails for tables
# 2.17.0 / 2016-04-11
- [Added] `node.addClass()`, `.removeClass()`, and `.toggleClass()`
- [Added] ext-filter: matcher-callback for `tree.filterNodes()` may now return
`"branch"` and `"skip"`
- [Added] ext-filter: new option`nodata` allows to configure a status node for
empty results
- [Added] `digits` argument to `node.getIndexHier(separator, digits)`
- [Added] tree option `.tabindex`, default is "0". Pass "" to resolve #577
- [DEPRECATED] tree option `.tabbable`. Use `.tabindex` instead
- [Added] New option `mode='firstChild'` for `node.moveTo()`
- [Added] New option `digits=<int>` for `node.getIndexHier()`
- [Fixed] ext-filter: branch mode honors `autoExpand: true`
- [Fixed] #584: aria-labelledby ids not unique
- Update to jQuery UI 1.11.4
# 2.16.1 / 2016-03-18
- [Added] ext-glyph: new icon for 'nodata' status nodes
- [Fixed] #575 missing loading icon in non-bootstrap themes.<br>
Glyph themes now display status images in icon span (was expander span before)
# 2.16.0 / 2016-03-16
- [Added] ext-clones: new method node.setRefKey(refKey)
- [Added] modifier class `.fancytree-fade-expander` to be set on container
- [Added] ext-dnd: `.dragExpand()` callback to prevent auto-expand
- [Improved] load error reporting
- [Improved] bootstrap theme icons and style (samples use bootstrap 3.3)
- [Improved] status nodes don't have icons
- [Improved] pass data argument to `source` callback
- [Improved] Handle exceptions inside `postProcess`
- [Improved] #568 ext-dnd: Auto-expanding of collapsed nodes should also work
when dropping is not allowed
- [Improved] #567 ext-dnd: fix revert position
- [Improved] #565 ext-dnd: fix intermediate display of wrong icon (sending 'over' after 'enter')
- [Fixed] #569 node.navigate does not return a Promise object
- [Fixed] #563 `tree.reactivate(false)` sets fancytree-treefocus and `tree.reactivate(true)`
doesn't set keyboard focus
- [Fixed] #562 Node span tag leaks outside table cell
- [Fixed] #526 tree.setFocus() does not set keyboard focus
- Updated to jQuery 1.12.1
- Updated grunt devDependencies
- Add jQuery 3.0 beta to test suite
- Added LICENSE.txt to dist
# 2.15.0 / 2016-01-11
- [Changed] Renamed class `fancytree-statusnode-wait` to `fancytree-statusnode-loading`
- [Added] new event `renderStatusColumns`
- [DEPRECATED] ext-table option `customStatus`. Use `renderStatusColumns` instead
- [Added] new event `clickPaging`
- [Added] new mode `nodata` for use with node.setStatus()
- [Added] new method `node.addPagingNode()`
- [Added] new method `node.replaceWith()`
- [Added] new type 'paging' for `node.statusNodeType`
- [Added] #542 new method `node.getSelectedNodes()`
- [Added] Helper class `glyphicon-spin` to allow rotating loading icon with bootstrap3
- [Improved] #356: serialize load requests
- [Improved] #538: Be more robust if site css defines custom li:before
- [Improved] ext-table: Define table row templates in `<tbody>`
- [Improved] ext-table: `<thead>` is now optional if `<tbody>` contains `<td>`s
# 2.14.0 / 2015-12-19
- [CHANGED] #519 Refactored custom icon configuration:<br>
(see also the [theming tutorial](https://github.com/mar10/fancytree/wiki/TutorialTheming))
- [Added] `options.icon` option/callback.<br>
Valid values are true, false, a string containing a class name or image
url, or a callback returning that.
- [Changed] `node.icon` option. Valid values are true, false, or a string
containing a class name or image url.<br>
This option existed before, but was stored in the `node.data.icon` namespace,
and did not accept class names.
- [DEPRECATED] `options.iconClass` callback: use `options.icon` instead
- [DEPRECATED] `options.icons`: use `options.icon` instead
- [DEPRECATED] `node.data.iconclass` option: use `node.icon` instead
- [DEPRECATED] `node.data.icon` option: use `node.icon` instead
- [Added] `tree.clear()` method.
- [Added] #520 ext-persist: new event `beforeRestore`
- [Fixed] #533 table-ext: nodeSetExpanded triggers redundant events
# 2.13.0 / 2015-11-16
- [Changed] If a node is initalized as `lazy: true`, and `children: []`,
treat it as 'loaded leaf node'.<br>
This is consistent with a lazy node that has no children property at all (i.e.
`undefined`). This would issue a lazyLoad event and a resopnse of `[]` would
mark the node as leaf node.
- [Added] new function $.ui.fancytree.getTree()
- [Added] ext-filter methods node.isMatched() and tree.isFilterActive()
- [Added] CSS for ext-childcounter badges is now part of the standard themes
- [Added] ext-childcounter method node.updateCounter()`
- [Fixed] #507 data-hideCheckbox="true"
- [Fixed] #513 activeVisible option does not work on init
- [Fixed] #516 ExtPersist requires cookie.js even when not using cookies
# 2.12.0 / 2015-09-10
- [Changed] Documented `iconClass` callback and changed signature from
`iconClass(node)` to `iconClass(event, data)`
- [Added] ext-dnd events `initHelper` and `updateHelper`
- [Added] ext-dnd option `smartRevert`
- [Added] #146 sample for multi-node drag'n'drop
- [Added] Sample for modifier keys to control copy/move behavior while dragging
- [Added] `highlight` and `fuzzy` options to ext-filter
- [Added] `fireActivate` option to ext-persist (default: true)
- [Added] #496 new methods tree.findFirst() / .findAll()
- [Improved] clearFilter() performance #491
- [Improved] dnd registers global handlers to cancel on ESC and mousedown
- [Fixed] #475 Font color while editing node title with bootstrap skin
- [Fixed] #484 Glyph plugin: Missing margin-left for span.fancytree-custom-icon
- [Fixed] #486 node.render(true) moves the node to the end of the list
- [Fixed] #489 `focusOnClick` option is ignored for tables if 'dnd' is listed after 'table' extension
- [Fixed] #495 Double clicking on expander with lazy-load causes assertion error
# 2.11.0 / 2015-07-26
- [Changed] Adding `fancytree-plain` class to container (if not table), allowing for more efficient css
- [Changed] #434: Use data-uris to inline loading.gif image
- [Changed] #460: Use padding-left instead of margin-left for table indent
- [Changed] #465: Add `node` argument to the `toDict()` callback
- [Improved] Nicer bootstrap theme and added table to the example
- [Improved] #464: ext-dnd supports ext-glyph
- [Improved] #466: Add counter badges to ext-filter
- [Fixed] Win8 theme jumpy hover effects
- [Fixed] #411: ext-edit fails with ext-table, when edit was cancelled
- [Fixed] #463: ext-table: render(deep) does not work
- [Fixed] #470: Wide plugin not present in jquery.fancytree-all.min.js
# 2.10.2 / 2015-07-02
- [Fixed] Add `dist/skin-custom-1` sample (again)
- [Fixed] #459 Don't collapse root folder when last node is removed
# 2.10.1 / 2015-06-27
- [Changed] Undo #340: Revert dist folder layout to v2.9.0, but add
dist/skin-common.less
# 2.10.0 / 2015-06-26 [YANKED]
- [Changed] #340: New dist folder layout: moved skin-\* folders into src/ folder
(**Note:** this change was reverted in v2.10.1)
- [Improved] Update to jQuery UI 1.11.4, jQuery 1.11.3
- [Improved] #340: add `dist/skin-common.less` to fix theme imports
- [Improved] #443 Support js-cookie (still compatible with jquery-cookie)
- [Fixed] #415 selected and unselectable shows unchecked checkbox
- [Fixed] #427 table + themeroller: apply color to TR
- [Fixed] #442 filterBranches shall use opts to allow autoExpand
- [Fixed] #445 enter key not handled correctly
- [Fixed] #449 After deleting last child, parent node remains expanded
- [Fixed] #452 destroy not removing nodes with ext-table
- [Fixed] #457 Autoscroll fails with lazyloading returning empty list
# 2.9.0 / 2015-04-19
- [Changed] ext-filter: `tree.filterNodes(filter, opts)` now accept an `opts`
object instead of `leavesOnly`
- [Improved] #417 only raise exception about data being a string if dataType is "json"
- [Added] #394 New option `autoExpand` for [ext-filter]
- [Fixed] #402, #405 rare exception in dnd events
- [Fixed] #420 nodeSetActive not returning promise
- [Fixed] #270 Keyboard focus not working when using dnd extension
# 2.8.1 / 2015-03-01
- [Improved] generateFormElements() new argument `opts`, default: `{stopOnParents: true}`
- [Fixed] #393 ext-table: checkboxColumnIdx not working
- [Fixed] #397 ext-edit: Creating sub category fails
- [Fixed] #403 generateFormElements() doesn't work with string args
# 2.8.0 / 2015-02-08
- [Changed] Deprecated ext-menu (was never officially supported, see http://localhost:8080/demo/index.html#sample-ext-menu.html)
- [Improved] Bluring the widget will now blur the focused node too.
- [Improved] Persistence will only set node focus if widget had focus (otherwise only activate the node).
- [Improved] Set default focus on first keypress to active node (first node otherwise)
- [Improved] #383 Accept [ECMAScript 6 Promise](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise) as source
- [Added] `_superApply()` for hook handlers.
- [Added] eventToString() supports mouse events
- [Fixed] persistence for focus (when using non-cookie storage)
- [Fixed] #391 Exception on autoscrolling filtered trees
# 2.7.0 / 2014-12-21
- [CHANGED] Dropped `fx` option. Use `toggleEffect` instead.
- [CHANGED] 'win8' and 'bootstrap' skins where modified to highlight the
title span instead of the node span, in order to be compatible with
[ext-wide]. The original skins are available as 'skin-win8-n' and
'skin-bootstrap-n' respectively.
- [Added] ext-wide extension (experimental)
- [Added] LESS files to distribution
- [Added] Publish on [cdnjs](https://cdnjs.com/libraries/jquery.fancytree)
- [Improved] tree.reactivate() returns a promise
- [Fixed] #246 Gaps when filtering in hide mode (patch by @lefunque)
- [Fixed] #287 wrong image on hovers
- [Fixed] #368 Standard browser behavior prevented (e.g. zoom with Ctrl+'+'/'-')
- [Fixed] #369 Suppress warning, when dropping top- on top-node
# 2.6.0 / 2014-11-29
- [Added] Option `focusOnSelect` to set focus when node is checked by a mouse
click (default: false)
- [Added] `restore` event, sent after ext-persist has restored the tree state
- [Improved] #359 Better navigation performance when skipping hidden nodes
- Publish on npm Registry
# 2.5.0 / 2014-11-23
- [CHANGED] [ext-persist] overrideSource option now defaults to true
- [Added] [ext-filter] Option `autoApply` re-applies filter on lazy loading
(on by default)
- [Added] quicksearch: navigate to next node by typing the first letters
- [Improved] [ext-dnd] Make draggable helper and parent configurable
- [Improved] #153 Add class `fancytree-unselectable` to respective nodes and
dim unselectable checkboxes
- [Improved] Update to jQuery 1.1.11, jQuery UI 1.11.2
- [Improved] New mode 'firstChild' for node.addNode()
- [Fixed] #324 Fix problem where minExpandLevel was not expanding root node
- [Fixed] #300 dnd.focusOnClick for jQuery UI 1.11
- [Fixed] #354 [ext-persist] with selectMode 3
# 2.4.1 / 2014-09-23
- [Fixed] Regression #323
# 2.4.0 / 2014-09-21
- [CHANGED] Renamed dist/jquery.fancytree-custom.min.js to jquery.fancytree-all.min.js
- [CHANGED] ext-edit callbacks no longer pass `data.value` (use `data.input.val()` instead).
- [Added] CDN support (http://www.jsdelivr.com/#!jquery.fancytree)
- [Added] New method `node.visitAndLoad()`
- [Added] New method `node.editCreateNode()` (ext-edit)
- [Added] New method `node.isRootNode()`
- [Added] New method `node.isTopLevel()`
- [Added] New option `id` to override default tree id
- [Added] New argument `stopOnParents` for tree.generateFormElements()
- [Improved] #294 node.load() should resolve 'ok', if node is already loaded
- [Improved] #293 minExpandLevel does not auto-expand
- [Improved] #313 Allow HTML in tooltips
- [Fixed] crash in scrollIntoView() when parent is `window`
- [Fixed] #305 Checkbox doesn't show with Glyph + Table
- [Fixed] #316 Fix hasChildren() when children = []
- [Fixed] #237 Ajax LoadError not updated in StatusNode with Table ext
- [Fixed] #295 loadKeyPath with multiple paths
- [DEPRECATED] node.isRoot(). Use node.isRootNode() instead
# 2.3.0 / 2014-08-17
- [CHANGED] renamed (undocumented) event 'loaderror' to 'loadError'
- [Added] postProcess now allows to signal error conditions (so it becomes easy to handle custom Ajax response formats)
- [Added] node.setStatus()
- [Added] ext-clones to the standard distribution.
- [Improved] loadError allows to return `false` to prevent default handling
- [Fixed] #258 Fix moveTo when moving a node to same parent
- [Fixed] #257 Glyph expander sometimes disappears
# 2.2.0 / 2014-06-28
- [Added] Option dnd.focusOnClick sets focus to tree widget, even when dragging
is enabled
- [Added] node.info()
- [Improved] #245 tree.generateInput() now returns data using PHPs array
convention, i.e. by appending brackets to the name: 'ft_1[]'.
- [Fixed] #250: Children lazy empty nodes remain checked when parent is
unchecked with hierarchical multi-selection
- [Fixed] #272 Navigation in filtered trees
# 2.1.0 / 2014-05-29
- [Added] #210: [ext-persist] optionally store information in sessionStorage or localStorage
- [Added] #64 [ext-filter] filterBranches() will restrict display to sub-trees
- [Added] New options 'scrollParent' and 'scrollOfs' are evaluated by node.scrollIntoView()
(which is also called on expand). This allows autoScroll to work with
[ext-table]: set scrollParent to `window` or a wrapper DIV with overflow: auto
- [Added] [ext-wide] use 100% wide selection bar (experimental)
- [Added] $.ui.fancytree.debounce()
- [Improved] [ext-columnview] css
- [Improved] skin-win8 now includes the loading.gif as inline CSS for faster response
- [Improved] Add 'fancytree-icon' class to icon IMG
- [Improved] css v-align for checkboxes and icons
- [Fixed] #217: persistence when node keys are numeric
- [Fixed] #228: html in node title prevents click
- [Fixed] #235: D'n'd helper is displaced, when window is scrolled
- [Fixed] #241: fromDict() does not update node title
- [Fixed] relative custom imagePath option
- [DEPRECATED] [ext-filter] Use filterNodes() instead of applyFilter()
- [DEPRECATED] [ext-filter] 'leavesOnly' option removed (see filterNodes())
# 2.0.0 / 2014-05-01
- Released 2.0.0
# 1.x
- See [Dynatree](https://code.google.com/p/dynatree/)