Stylesheets im Javascript layout verwalten
[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 new {
10   my ($class, @slurp) = @_;
11
12   my $self = $class->SUPER::new(@slurp);
13
14   $self->add_sub_layouts([
15     SL::Layout::None->new,
16   ]);
17
18   $self;
19 }
20
21 sub pre_content {
22   &display
23 }
24
25 sub start_content {
26   "<div id='content'>\n";
27 }
28
29 sub end_content {
30   "</div>\n";
31 }
32
33 sub stylesheets {
34   $_[0]->add_stylesheets(qw(
35     dhtmlsuite/menu-item.css
36     dhtmlsuite/menu-bar.css
37   ));
38   $_[0]->SUPER::stylesheets;
39 }
40
41 sub display {
42   my ($self) = @_;
43   my $form     = $main::form;
44
45   my $callback            = $form->unescape($form->{callback});
46   $callback               = URI->new($callback)->rel($callback) if $callback;
47   $callback               = "login.pl?action=company_logo"      if $callback =~ /^(\.\/)?$/;
48
49   $self->render("menu/menunew", { partial => 1, no_output => 1 },
50     force_ul_width  => 1,
51     date            => $self->clock_line,
52     menu_items      => $self->acc_menu,
53     callback        => $callback,
54   );
55 }
56
57 sub clock_line {
58   my $form     = $main::form;
59
60   my ($Sekunden, $Minuten,   $Stunden,   $Monatstag, $Monat,
61       $Jahr,     $Wochentag, $Jahrestag, $Sommerzeit)
62     = localtime(time);
63   $Monat     += 1;
64   $Jahrestag += 1;
65   $Monat     = $Monat < 10     ? $Monat     = "0" . $Monat     : $Monat;
66   $Monatstag = $Monatstag < 10 ? $Monatstag = "0" . $Monatstag : $Monatstag;
67   $Jahr += 1900;
68   my @Wochentage = ("Sonntag",    "Montag",  "Dienstag", "Mittwoch",
69                     "Donnerstag", "Freitag", "Samstag");
70   my @Monatsnamen = ("",       "Januar",    "Februar", "M&auml;rz",
71                      "April",  "Mai",       "Juni",    "Juli",
72                      "August", "September", "Oktober", "November",
73                      "Dezember");
74   return
75       $Wochentage[$Wochentag] . ", der "
76     . $Monatstag . "."
77     . $Monat . "."
78     . $Jahr . " - ";
79 }
80
81 sub acc_menu {
82   my ($self) = @_;
83
84   my $menu      = $self->menu;
85
86   my $all_items = [];
87   $self->create_menu($menu, $all_items);
88
89   my $item = { 'subitems' => $all_items };
90   calculate_width($item);
91
92   return $all_items;
93 }
94
95 sub calculate_width {
96   my $item           = shift;
97
98   $item->{max_width} = max map { length $_->{title} } @{ $item->{subitems} };
99
100   foreach my $subitem (@{ $item->{subitems} }) {
101     calculate_width($subitem) if ($subitem->{subitems});
102   }
103 }
104
105 sub create_menu {
106   my ($self, $menu, $all_items, $parent, $depth) = @_;
107   my $html;
108
109   my $form     = $main::form;
110   my %myconfig = %main::myconfig;
111
112   die if ($depth * 1 > 5);
113
114   my @menuorder  = $menu->access_control(\%myconfig, $parent);
115   $parent       .= "--" if ($parent);
116
117   foreach my $name (@menuorder) {
118     substr($name, 0, length($parent), "");
119     next if (($name eq "") || ($name =~ /--/));
120
121     my $menu_item = $menu->{"${parent}${name}"};
122     my $item      = { 'title' => $::locale->text($name) };
123     push @{ $all_items }, $item;
124
125     if ($menu_item->{submenu} || !defined($menu_item->{module}) || ($menu_item->{module} eq "menu.pl")) {
126       $item->{subitems} = [];
127       $item->{image} = _icon_path("$name.png");
128       $self->create_menu($menu, $item->{subitems}, "${parent}${name}", $depth * 1 + 1);
129
130     } else {
131       $item->{image} = _icon_path("${parent}${name}.png");
132       $menu->menuitem_new("${parent}${name}", $item);
133     }
134   }
135 }
136
137 sub _icon_path {
138   my ($label, $size) = @_;
139
140   $size ||= 16;
141
142   my $img = "image/icons/${size}x${size}/$label";
143
144   return unless -f $img;
145   return $img;
146 }
147
148 1;