Releases: niklak/dom_query
0.11.0
Release Notes for v0.11.0 (2024-12-10) 🚀
✨ New Features
-
Atomic Feature:
Added theatomic
feature, which replacesNodeData
's use ofStrTendril
withTendril<tendril::fmt::UTF8, tendril::Atomic>
.
This enablesNodeData
and related structures, includingDocument
, to implement theSend
trait. -
NodeRef Enhancements:
- Introduced
NodeRef::insert_siblings_after
, enabling the insertion of a node along with its siblings after a selected node. - Introduced
NodeRef::before_html
andNodeRef::after_html
for inserting HTML content before or after a specific node.
- Introduced
-
Selection Enhancements:
- Introduced
Selection::set_text
to set the content of each node in the selection to specified content. - Introduced
Selection::before_html
andSelection::after_html
to insert HTML content before or after each node in a selection. - Introduced
Selection::prepend_selection
, allowing nodes from one selection to be prepended to the current selection.
- Introduced
🔨 Improvements
- Internal code changes reduce calls to
RefCell::borrow
andRefCell::borrow_mut
.
Full Changelog: 0.10.0...0.11.0
0.10.0
Release Notes v0.10.0 (November 25, 2024) 🚀
✨ New Features
- Introduced new node manipulation methods:
NodeRef::insert_after
: Insert a node after the selected nodeNodeRef::descendants_it
: Iterate over all descendants of a nodeNodeRef::descendants
: Get a vector containing all descendants of a node
- Added normalization functionality:
NodeRef::normalize
: Merges adjacent text nodes and removes empty text nodes at node levelDocument::normalize
: Performs normalization across the entire document
⚠️ Deprecations
Several methods have been deprecated in favor of more consistently named alternatives:
NodeRef::append_prev_sibling
→NodeRef::insert_before
NodeRef::append_prev_siblings
→NodeRef::insert_siblings_before
Tree::append_prev_sibling_of
→Tree::insert_before_of
🔨 Improvements
- Modified
Document::from
andDocument::fragment
to disable scripting in HTML parser, enabling proper querying ofnoscript
elements
🐛 Fixed
Document::text
method now returns the text content, whereas previously it returned an empty string
🔧 Minor Changes
- Added support for ordered comparison of node IDs through implementation of
Ord
trait forNodeId
🔄 Migration Guide
Users are encouraged to update their code to use the new method names for better maintainability. The deprecated methods will be removed in a future release.
Full Changelog: 0.9.1...0.10.0
0.9.0
Release Notes v0.9.0 (November 9, 2024)
This release includes significant improvements to node selection and manipulation methods, new functionality for content prepending, and a critical bug fix
🔄 Changes
- Added reverse iteration support in
Tree::child_ids_of_it
andNodeRef::children_it
(userev: true
for reverse order) - Improved internal logic for selection operations (
Selection::append_selection
andSelection::replace_with_selection
)
✨ New Features
- Added new node prepending methods:
NodeRef::prepend_child
: Insert a single child at the startNodeRef::prepend_children
: Insert multiple children at the startNodeRef::prepend_html
: Parse and insert HTML content at the startSelection::prepend_html
: Parse and insert HTML at the start of all matched nodes
- Introduced new selection extension methods:
Selection::ancestors
: Get ancestors of matched elementsSelection::add_selection
: Add another selection to current selectionSelection::add_matcher
Selection::add
Selection::try_add
🐛 Bug Fixes
- Enhanced selection operations to properly handle multiple nodes and cross-tree selections:
- Fixed
Selection::append_selection
- Fixed
Selection::replace_with_selection
- Fixed
- Improved node attachment methods to automatically handle node detachment from previous parent:
Node::append_child
Node::append_children
Node::prepend_child
Node::prepend_children
⚠️ Critical Fix
Fixed a significant issue in NodeRef::first_element_child
where the method incorrectly checked the node itself instead of its children. This fix may affect existing code that relies on this method.
Impact:
- CSS selector
:has()
behavior could have been affected - First element child detection logic
- Code depending on this method's behavior
Action Required:
Please review any code that depends on NodeRef::first_element_child
after upgrading to ensure compatibility with the corrected behavior.
Full Changelog: 0.8.0...0.9.0
0.8.0
Release Notes v0.8.0 (November 3, 2024)
This release brings significant internal refactoring, new filtering capabilities, and improvements to node manipulation methods.
🔄 Major Changes
- Simplified internal architecture by replacing generic types with concrete
NodeData
type - Moved implementations from
Node
toNodeRef
(Node
is now an alias forNodeRef
) - Simplified the internal logic of several methods (
replace_with_html
,set_html
,append_html
) usingTree::merge
✨ New Features
- Added new Selection filtering methods:
Selection::filter
Selection::filter_matcher
Selection::try_filter
Selection::filter_selection
- Introduced new NodeRef manipulation methods:
NodeRef::replace_with
- replace a node with another oneNodeRef::replace_with_html
- replace a node with HTML contentNodeRef::set_text
- set node's text contentNodeRef::append_prev_siblings
- prepend nodes before selected node
- Added new
:only-text
pseudo-class for selecting nodes with single text child - Implemented
NodeIdProver
trait forNodeRef
andNode
to simplify API usage
🛠️ Minor Changes
- Simplified
Node::has_text
functionality
🐛 Bug Fixes
- Corrected
<NodeRef<'a> as selectors::Element>::is_empty
to handle line breaks and whitespace properly.
🗑️ Removals
The following deprecated methods have been removed:
Tree::append_children_from_another_tree
Tree::append_prev_siblings_from_another_tree
Node::append_children_from_another_tree
Node::append_prev_siblings_from_another_tree
Full Changelog: 0.7.0...0.8.0
0.7.0
Release Notes v0.7.0 (October 27, 2024)
🚀 New Features
Node Tree API
- Added
Node::ancestors
method to get all or limited number of node ancestors - New methods for working with related elements:
Node::element_children
: returns child nodes ofNodeData::Element
typeNode::children_it
: provides an iterator over child nodesNode::ancestors_it
: provides an iterator over ancestor nodes
- Added
Node::immediate_text
method to get node's text without descendants- Similarly,
Selection::immediate_text
does the same for every node in selection
- Similarly,
Tree API Extensions
- New methods for working with node IDs:
Tree:child_ids_of
andTree:child_ids_of_it
: get child node IDs as vec and as iterator respectivelyTree:ancestor_ids_of
andTree:ancestor_ids_of_it
: get ancestor node IDs as vec and as iterator respectively
Selector Improvements
- Enabled support for
:is()
and:where()
pseudo-classes - Implemented
:has
support from theselectors
crate - Added
From<Vec<Node>>
implementation forSelection
🔄 Changes
Performance Optimizations
- Improved performance for several core operations:
Document::from
Selection::select
- Other related methods
- Switched from
rustc-hash
tofoldhash
API Changes
- Exposed
Matcher::match_element
for use outside the crate - Updated
selectors::Element
implementation forNode<'a>::opaque
- Removed
&mut
requirement fromSelection
methods
Dependencies
- Updated to
selectors
v0.26.0
Full Changelog: 0.6.0...0.7.0
0.6.0
[0.6.0] - 2024-10-19
Changed
- Exposed
Document::tree
. Selection
methods that required&mut
now doesn't require&mut
.- Changed the project structure, now modules are divided based on the
struct
implementations.
Added
- Added
Node::append_html
andNode::set_html
methods for creating children nodes of a single selected node. - Added
Tree<NodeData>::new_element
, an easy way to create an empty element with a given name. - Added
NodeRef::last_child
. - Added
Node::has_attr
method, which returnstrue
if an attribute exists on the node element.
Selection::has_attr
does the same thing for the first node inside selection. - Added
Node::remove_all_attrs
method for removing all attributes of a node.
Selection::remove_all_attrs
does the same thing for the every node inside selection. - Added
Node::remove_attrs
method, a convenient way to remove multiple attributes from the node element.
Selection::remove_attrs
does the same thing for the every node inside selection. - Added
Node::rename
method, which allows to change node's name.
Selection::rename
does the same thing for the every node inside selection.
Full Changelog: 0.5.0...0.6.0
0.5.0
[0.5.0] - 2024-10-10
Added
- Added
select_single_matcher
andselect_single
methods forDocument
andSelection
. - Added
Document::fragment
which allows to create a document fragment.
Changed
- Update documentation
- A small breaking change:
From
implementation forDocument
, now it is based onInto<StrTendril>
and because of that, previousFrom<&String>
implementation will not work anymore (they are in config). If your code consumes&String
, you should useString::as_str()
instead. - Refactored the code (
NodeData::Element
).