package HTML::Widgets::NavMenu::Iterator::Base; use strict; use warnings; use base qw(HTML::Widgets::NavMenu::Tree::Iterator); use base 'Class::Accessor'; __PACKAGE__->mk_accessors(qw( nav_menu )); =head1 NAME HTML::Widgets::NavMenu::Iterator::Base - base class for the iterator. =head1 SYNOPSIS For internal use only. =head1 METHODS =cut sub _init { my $self = shift; $self->SUPER::_init(@_); my %args = (@_); $self->nav_menu($args{'nav_menu'}) or die "nav_menu not specified!"; $self->{'html'} = []; return 0; } sub _add_tags { my $self = shift; push (@{$self->{'html'}}, @_); } sub _is_root { my $self = shift; return ($self->stack->len() == 1); } sub _is_top_separator { my $self = shift; return $self->top->_node->separator; } =head2 $self->get_initial_node() Gets the initial node. =cut sub get_initial_node { my $self = shift; return $self->nav_menu->_get_traversed_tree(); } =head2 $self->get_node_subs({ args => $node}) Gets the subs of the node. =cut sub get_node_subs { my $self = shift; my %args = (@_); my $node = $args{'node'}; return [ @{$node->subs()} ]; } =head2 $self->get_new_accum_state( item => $item, node => $node ) Gets the new accumulated state. =cut sub get_new_accum_state { my $self = shift; my %args = (@_); my $parent_item = $args{'item'}; my $node = $args{'node'}; my $prev_state; if (defined($parent_item)) { $prev_state = $parent_item->_accum_state(); } else { $prev_state = +{}; } my $show_always = 0; if (exists($prev_state->{'show_always'})) { $show_always = $prev_state->{'show_always'}; } if (defined($node->show_always())) { $show_always = $node->show_always(); } my $rec_url_type; if (exists($prev_state->{'rec_url_type'})) { $rec_url_type = $prev_state->{'rec_url_type'}; } if (defined($node->rec_url_type())) { $rec_url_type = $node->rec_url_type(); } return { 'host' => ($node->host() ? $node->host() : $prev_state->{'host'}), 'show_always' => $show_always, 'rec_url_type' => $rec_url_type, }; } =head2 my $array_ref = $self->get_results() Returns an array reference with the resultant HTML. =cut sub get_results { my $self = shift; return [ @{$self->{'html'}} ]; } =head1 COPYRIGHT & LICENSE Copyright 2006 Shlomi Fish, all rights reserved. This program is released under the following license: MIT X11. =cut 1;