use List::MoreUtils qw(apply);
-my $nbsp = ' ';
-my $mainlevel;
-
-# end of main
-
-sub display {
+sub render {
$::lxdebug->enter_sub;
- my $callback = $::form->unescape($::form->{callback});
- $callback = URI->new($callback)->rel($callback) if $callback;
- $callback = "login.pl?action=company_logo" if $callback =~ /^(\.\/)?$/;
- my $framesize = _calc_framesize();
-
- $::form->header(doctype => 'frameset');
-
- print qq|
-<frameset rows="28px,*" cols="*" framespacing="0" frameborder="0">
- <frame src="controller.pl?action=FrameHeader/header" scrolling="NO">
- <frameset cols="$framesize,*" framespacing="0" frameborder="0" border="0" id="menuframe" name="menuframe">
- <frame src="$::form->{script}?action=acc_menu" name="acc_menu" scrolling="auto" noresize marginwidth="0">
- <frame src="$callback" name="main_window" scrolling="auto">
- </frameset>
- <noframes>
- You need a browser that can read frames to see this page.
- </noframes>
-</frameset>
-</HTML>
-|;
-
- $::lxdebug->leave_sub;
-}
+ $::form->use_stylesheet(qw(css/icons16.css css/icons24.css));
-sub acc_menu {
- $::lxdebug->enter_sub;
-
- my $framesize = _calc_framesize() - 2;
my $menu = Menu->new("menu.ini");
- $mainlevel = $::form->{level};
- $::form->{title} = $::locale->text('kivitendo');
- $::form->header;
- print $::form->parse_html_template('menu/menu', {
- framesize => $framesize,
- sections => [ section_menu($menu) ],
- });
+ my $sections = [ section_menu($menu) ];
$::lxdebug->leave_sub;
+ $::form->parse_html_template('menu/menu', {
+ sections => $sections,
+ inline => 1,
+ });
}
sub section_menu {
- $::lxdebug->enter_sub;
- my ($menu, $level) = @_;
+ $::lxdebug->enter_sub(2);
+ my ($menu, $level, $id_prefix) = @_;
my @menuorder = $menu->access_control(\%::myconfig, $level);
my @items;
+ my $id = 0;
+
for my $item (@menuorder) {
my $menuitem = $menu->{$item};
- my $label = apply { s/.*--// } $item;
+ my $olabel = apply { s/.*--// } $item;
my $ml = apply { s/--.*// } $item;
- my $show = $ml eq $mainlevel;
- my $spacer = $nbsp x (($item =~ s/--/--/g) * 2);
- my $label_icon = $level . "--" . $label . ".png";
+ my $icon_class = apply { y/ /-/ } $item;
+ my $spacer = "s" . (0 + $item =~ s/--/--/g);
- next if $level && $item ne "$level--$label";
+ next if $level && $item ne "$level--$olabel";
- $label = $::locale->text($label);
+ my $label = $::locale->text($olabel);
$menuitem->{module} ||= $::form->{script};
$menuitem->{action} ||= "section_menu";
- $menuitem->{target} ||= "main_window";
$menuitem->{href} ||= "$menuitem->{module}?action=$menuitem->{action}";
# add other params
my $anchor = $menuitem->{href};
- if (!$level) { # toplevel
- my $ml_ = $::form->escape($ml);
- my $image = make_image(icon => $item . '.png', size => 24, label => $label);
- my $anchor = "menu.pl?action=acc_menu&level=$ml_";
-
- push @items, make_item(href => $anchor, img => $image, label => $label, height => 24, class => 'menu');
- push @items, section_menu($menu, $item);
+ my %common_args = (
+ l => $label,
+ s => $spacer,
+ id => "$id_prefix\_$id",
+ );
+ if (!$level) { # toplevel
+ push @items, { %common_args,
+ i => "icon24 $icon_class", # make_image(size => 24, label => $item),
+ c => 'm',
+ };
+ push @items, section_menu($menu, $item, "$id_prefix\_$id");
} elsif ($menuitem->{submenu}) {
- my $image = make_image(submenu => 1);
- if ($mainlevel && $item =~ /^\Q$mainlevel\E/) {
- push @items, make_item(target => $menuitem->{target}, spacer => $spacer, img => $image, label => $label, class => 'submenu') if $show;
- push @items, section_menu($menu, $item);
- } else {
- push @items, make_item(spacer => $spacer, href => $anchor, img => $image, label => $label . ' ...', class => 'submenu') if $show;
- }
+ push @items, { %common_args,
+ i => "icon16 submenu", #make_image(label => 'submenu'),
+ c => 'sm',
+ };
+ push @items, section_menu($menu, $item, "$id_prefix\_$id");
} elsif ($menuitem->{module}) {
- my $image = make_image(label => $label, icon => $label_icon);
- push @items, make_item(target => $menuitem->{target}, img => $image, href => $anchor, spacer => $spacer, label => $label, class => 'item') if $show;
- push @items, section_menu($menu, $item) if $show && $::form->{$item} && $::form->{level} eq $item;
- }
- }
- $::lxdebug->leave_sub;
- return @items;
-}
-
-sub make_item {
- my %params = @_;
- $params{a} ||= '';
- $params{spacer} ||= '';
- $params{height} ||= 16;
-
- return {
- %params,
- chunks => [ multiline($params{label}) ],
- };
-}
-
-# multi line hack, sschoeling jul06
-# if a label is too long, try to split it at whitespaces, then join it to chunks of less
-# than 20 chars and store it in an array.
-# use this array later instead of the -ed label
-sub multiline {
- my ($label) = @_;
- my @chunks;
- my $l = 20;
- for (split / /, $label) {
- $l += length $_;
- if ($l < 20) {
- $chunks[-1] .= " $_";
- } else {
- $l = length $_;
- push @chunks, $_;
+ push @items, { %common_args,
+ i => "icon16 $icon_class", #make_image(size => 16, label => $item),
+ h => $anchor,
+ c => 'i',
+ };
}
+ } continue {
+ $id++;
}
- return @chunks;
-}
-
-sub make_image {
- my (%params) = @_;
-
- my $icon = $params{icon};
- my $size = $params{size} || 16;
- return unless _show_images();
-
- my $icon_found = $icon && -f _icon_path($icon, $size);
- my $padding = $size == 16 && $icon_found ? $nbsp x 2
- : $size == 24 ? $nbsp
- : '';
-
- return {
- src => $icon_found ? _icon_path($icon, $size) : "image/unterpunkt.png",
- alt => $params{label},
- width => $icon_found ? $size : 24,
- height => $size,
- padding => $padding,
- }
+ $::lxdebug->leave_sub(2);
+ return @items;
}
sub _calc_framesize {
_calc_framesize() != 240;
}
-sub _icon_path {
- my ($label, $size) = @_;
-
- $size ||= 16;
-
- return "image/icons/${size}x${size}/$label";
-}
-
1;
__END__