summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/menu.pl39
1 files changed, 33 insertions, 6 deletions
diff --git a/scripts/menu.pl b/scripts/menu.pl
index 622c0cce..6836c1b4 100644
--- a/scripts/menu.pl
+++ b/scripts/menu.pl
@@ -44,15 +44,42 @@ sub expanding_menu {
template => 'menu_expand',
format => 'HTML',
);
- $request->{menu_items} = [];
- for (keys %$menu){
- push @{$request->{menu_items}}, $menu->{$_};
- }
+ $request->{subs} = [];
+ _attach_references({source => $menu, dest => $request->{subs}, path => ""});
$menu->debug({file => '/tmp/debug-menu'});
- $request->{menu_items} = {};
- $request->{menu_items}->{subs} = $menu;
$request->debug({file => '/tmp/debug'});
$template->render($request);
}
+sub _attach_references {
+ no strict qw(refs);
+ my ($args) = @_;
+ my ($source, $dest, $path)
+ = ($args->{source}, $args->{dest}, $args->{path});
+ my %hash;
+ if ($path and $source->{id}){
+ for (sort keys %$source){
+ next if $_ eq 'subs';
+ $hash{$_} = $source->{$_};
+ }
+ $hash{path} = $path;
+ push @{$dest}, \%hash;
+ foreach (sort keys %{$source->{subs}}) {
+ _attach_references({
+ source => $source->{subs}->{$_},
+ dest => $dest,
+ path => "$path--$_",
+ });
+ }
+ } else {
+ foreach (sort keys %$source){
+ _attach_references({
+ source => $source->{$_},
+ dest => $dest,
+ path => "$_",
+ });
+ }
+ }
+}
+
1;