auf Original-Version zurückgesetzt
[kivitendo-erp.git] / SL / Layout / MenuLeft.pm
index 2f260c9..ad7937e 100644 (file)
@@ -3,26 +3,22 @@ package SL::Layout::MenuLeft;
 use strict;
 use parent qw(SL::Layout::Base);
 
-use URI;
-
 use List::MoreUtils qw(apply);
+use SL::JSON qw(to_json);
+use URI;
 
-sub stylesheets {
+sub static_stylesheets {
   qw(icons16.css icons24.css menu.css)
 }
 
 sub javascripts_inline {
-  my $self = shift;
-  my $sections = [ section_menu($self->menu) ];
-  $self->render('menu/menu', { partial => 1, no_output => 1 },
-    sections  => $sections,
-  )
+  "\$(function(){kivi.LeftMenu.init(@{[ to_json([ section_menu($_[0]->menu) ]) ]})});"
 }
 
-sub javascripts {
+sub static_javascripts {
   qw(
     js/jquery.cookie.js
-    js/switchmenuframe.js
+    js/kivi.LeftMenu.js
   );
 }
 
@@ -30,67 +26,33 @@ sub pre_content {
   "<div id='html-menu'></div>\n";
 }
 
-sub start_content {
-  "<div id='content' class='html-menu'>\n";
-}
-
-sub end_content {
-  "</div>\n";
-}
-
 sub section_menu {
-  $::lxdebug->enter_sub(2);
-  my ($menu, $level, $id_prefix) = @_;
-  my @menuorder = $menu->access_control(\%::myconfig, $level);
+  my ($menu) = @_;
   my @items;
+  my @id_stack = (-1);
 
-  my $id = 0;
-
-  for my $item (@menuorder) {
-    my $menuitem   = $menu->{$item};
-    my $olabel     = apply { s/.*--// } $item;
-    my $ml         = apply { s/--.*// } $item;
-    my $icon_class = apply { y/ /-/   } $item;
-    my $spacer     = "s" . (0 + $item =~ s/--/--/g);
-
-    next if $level && $item ne "$level--$olabel";
+  for my $node ($menu->tree_walk) {
+    my $level      = $node->{level};
 
-    my $label         = $::locale->text($olabel);
-
-    $menuitem->{module} ||= $::form->{script};
-    $menuitem->{action} ||= "section_menu";
-    $menuitem->{href}   ||= "$menuitem->{module}?action=$menuitem->{action}";
-
-    # add other params
-    foreach my $key (keys %$menuitem) {
-      next if $key =~ /target|module|action|href/;
-      $menuitem->{href} .= "&" . $::form->escape($key, 1) . "=";
-      my ($value, $conf) = split(/=/, $menuitem->{$key}, 2);
-      $value = $::myconfig{$value} . "/$conf" if ($conf);
-      $menuitem->{href} .= $::form->escape($value, 1);
-    }
+    # do id stack
+    push @id_stack, -1 if    $level > $#id_stack;
+    pop @id_stack      while $level < $#id_stack;
+    $id_stack[-1]++;
 
-    my $anchor = $menuitem->{href};
+    my $label = $::locale->text($node->{name});
+    my $href  = $menu->href_for_node($node);
 
-    my @common_args = ($label, $spacer, "$id_prefix\_$id");
+    my @common_args  = ($label, "s" . $level, join '_', @id_stack);
 
-    if (!$level) { # toplevel
-      push @items, [ @common_args, "icon24 $icon_class", 'm' ];
-      #  make_image(size => 24, label => $item),
-      push @items, section_menu($menu, $item, "$id_prefix\_$id");
-    } elsif ($menuitem->{submenu}) {
+    if (!$node->{parent}) { # toplevel
+      push @items, [ @common_args, "icon24 $node->{icon}", 'm' ];
+    } elsif ($node->{children}) {
       push @items, [ @common_args, "icon16 submenu", 'sm' ];
-      #make_image(label => 'submenu'),
-      push @items, section_menu($menu, $item, "$id_prefix\_$id");
-    } elsif ($menuitem->{module}) {
-      push @items, [ @common_args, "icon16 $icon_class", 'i', $anchor ];
-      #make_image(size => 16, label => $item),
+    } else {
+      push @items, [ @common_args, "icon16 $node->{icon}", 'i', $href, $node->{target} ];
     }
-  } continue {
-    $id++;
   }
 
-  $::lxdebug->leave_sub(2);
   return @items;
 }
 
@@ -129,6 +91,8 @@ Each entry is another array with the following fields:
   2: unique id
   3: icon classes
   4: role classes
+  5: href
+  6: target
 
 From each entry the following dom will be generated, with [0] being entry 0 of
 the data array: