1 package SL::Layout::Base;
4 use parent qw(Rose::Object);
6 use List::MoreUtils qw(uniq);
9 use Rose::Object::MakeMethods::Generic (
10 'scalar --get_set_init' => [ qw(menu auto_reload_resources_param) ],
11 'scalar' => qw(focus),
13 'add_stylesheets_inline' => { interface => 'add', hash_key => 'stylesheets_inline' },
14 'add_javascripts_inline' => { interface => 'add', hash_key => 'javascripts_inline' },
15 'sub_layouts', => { interface => 'get_set_init' },
16 'add_sub_layouts' => { interface => 'add', hash_key => 'sub_layouts' },
26 my ($class, @slurp) = @_;
28 my $self = $class->SUPER::new(@slurp);
32 Menu->new('menu.ini');
35 sub init_auto_reload_resources_param {
36 return '' unless $::lx_office_conf{debug}->{auto_reload_resources};
37 return sprintf('?rand=%d-%d-%d', Time::HiRes::gettimeofday(), int(rand 1000000000000));
40 ##########################################
41 # inheritable/overridable
42 ##########################################
45 join '', map { $_->pre_content } $_[0]->sub_layouts;
49 join '', map { $_->start_content } $_[0]->sub_layouts;
53 join '', map { $_->end_content } $_[0]->sub_layouts;
57 join '', map { $_->post_content } $_[0]->sub_layouts;
60 sub stylesheets_inline {
61 uniq ( map { $_->stylesheets_inline } $_[0]->sub_layouts ),
62 @{ $_[0]->{stylesheets_inline} || [] };
65 sub javascripts_inline {
66 uniq ( map { $_->javascripts_inline } $_[0]->sub_layouts ),
67 @{ $_[0]->{javascripts_inline} || [] };
70 sub init_sub_layouts { [] }
73 #########################################
75 ########################################
83 push @{ $self->{stylesheets} ||= [] }, @_ if @_;
84 @{ $self->{stylesheets} ||= [] };
89 my $css_path = $self->get_stylesheet_for_user;
91 return uniq grep { $_ } map { $self->_find_stylesheet($_, $css_path) }
92 $self->use_stylesheet, map { $_->stylesheets } $self->sub_layouts;
95 sub _find_stylesheet {
96 my ($self, $stylesheet, $css_path) = @_;
98 return "$css_path/$stylesheet" if -f "$css_path/$stylesheet";
99 return "css/$stylesheet" if -f "css/$stylesheet";
100 return $stylesheet if -f $stylesheet;
103 sub get_stylesheet_for_user {
104 my $css_path = 'css';
105 if (my $user_style = $::myconfig{stylesheet}) {
106 $user_style =~ s/\.css$//; # nuke trailing .css, this is a remnand of pre 2.7.0 stylesheet handling
107 if (-d "$css_path/$user_style" &&
108 -f "$css_path/$user_style/main.css") {
109 $css_path = "$css_path/$user_style";
111 $css_path = "$css_path/kivitendo";
114 $css_path = "$css_path/kivitendo";
116 $::myconfig{css_path} = $css_path; # needed for menunew, FIXME: don't do this here
121 sub add_javascripts {
127 push @{ $self->{javascripts} ||= [] }, @_ if @_;
128 @{ $self->{javascripts} ||= [] };
134 return uniq grep { $_ } map { $self->_find_javascript($_) }
135 map({ $_->javascripts } $self->sub_layouts), $self->use_javascript;
138 sub _find_javascript {
139 my ($self, $javascript) = @_;
141 return "js/$javascript" if -f "js/$javascript";
142 return $javascript if -f $javascript;
146 ############################################
147 # track state of form header
148 ############################################
151 $_[0]{_header_done} = 1;