Layout Aufräumaktion:
[kivitendo-erp.git] / SL / Layout / Javascript.pm
1 package SL::Layout::Javascript;
2
3 use strict;
4 use parent qw(SL::Layout::Base);
5
6 use List::Util qw(max);
7 use URI;
8
9 sub init_sub_layouts {
10   [
11     SL::Layout::None->new,
12     SL::Layout::Top->new,
13   ]
14 }
15
16 sub use_javascript {
17   my $self = shift;
18   qw(
19     js/dhtmlsuite/menu-for-applications.js
20   ),
21   $self->SUPER::use_javascript(@_);
22 }
23
24 sub pre_content {
25   $_[0]->SUPER::pre_content .
26   &display
27 }
28
29 sub start_content {
30   "<div id='content'>\n";
31 }
32
33 sub end_content {
34   "</div>\n";
35 }
36
37 sub stylesheets {
38   $_[0]->add_stylesheets(qw(
39     dhtmlsuite/menu-item.css
40     dhtmlsuite/menu-bar.css
41     icons16.css
42     frame_header/header.css
43     menu.css
44   ));
45   $_[0]->SUPER::stylesheets;
46 }
47
48 sub display {
49   my ($self) = @_;
50
51   $self->presenter->render("menu/menunew",
52     force_ul_width  => 1,
53     menu_items      => $self->acc_menu,
54   );
55 }
56
57 sub acc_menu {
58   my ($self) = @_;
59
60   my $menu      = $self->menu;
61
62   my $all_items = [];
63   $self->create_menu($menu, $all_items);
64
65   my $item = { 'subitems' => $all_items };
66   calculate_width($item);
67
68   return $all_items;
69 }
70
71 sub calculate_width {
72   my $item           = shift;
73
74   $item->{max_width} = max map { length $_->{title} } @{ $item->{subitems} };
75
76   foreach my $subitem (@{ $item->{subitems} }) {
77     calculate_width($subitem) if ($subitem->{subitems});
78   }
79 }
80
81 sub create_menu {
82   my ($self, $menu, $all_items, $parent, $depth) = @_;
83   my $html;
84
85   my $form     = $main::form;
86   my %myconfig = %main::myconfig;
87
88   $depth ||= 0;
89
90   die if ($depth * 1 > 5);
91
92   my @menuorder  = $menu->access_control(\%myconfig, $parent);
93   $parent       .= "--" if ($parent);
94   $parent      ||= '';
95
96   foreach my $name (@menuorder) {
97     substr($name, 0, length($parent), "");
98     next if (($name eq "") || ($name =~ /--/));
99
100     my $menu_item = $menu->{"${parent}${name}"};
101     my $item      = { 'title' => $::locale->text($name) };
102     push @{ $all_items }, $item;
103
104     if ($menu_item->{submenu} || (!defined($menu_item->{module}) && !defined($menu_item->{href}))) {
105       $item->{subitems} = [];
106       $item->{image} = _icon_path("$name.png");
107       $self->create_menu($menu, $item->{subitems}, "${parent}${name}", $depth * 1 + 1);
108
109     } else {
110       $item->{image} = _icon_path("${parent}${name}.png");
111       $menu->menuitem_new("${parent}${name}", $item);
112     }
113   }
114 }
115
116 sub _icon_path {
117   my ($label, $size) = @_;
118
119   $size ||= 16;
120
121   my $img = "image/icons/${size}x${size}/$label";
122
123   return unless -f $img;
124   return $img;
125 }
126
127 1;