1 package SL::Layout::Base;
4 use parent qw(SL::Controller::Base);
6 use List::MoreUtils qw(uniq);
8 use Rose::Object::MakeMethods::Generic (
9 'scalar --get_set_init' => qw(menu),
10 'scalar' => qw(focus),
12 'add_stylesheets_inline' => { interface => 'add', hash_key => 'stylesheets_inline' },
13 'add_javascripts_inline' => { interface => 'add', hash_key => 'javascripts_inline' },
15 'add_sub_layouts' => { interface => 'add', hash_key => 'sub_layouts' },
24 my ($class, @slurp) = @_;
26 my $self = $class->SUPER::new(@slurp);
30 Menu->new('menu.ini');
33 ##########################################
34 # inheritable/overridable
35 ##########################################
38 join '', map { $_->pre_content } $_[0]->sub_layouts;
42 join '', map { $_->start_content } $_[0]->sub_layouts;
46 join '', map { $_->end_content } $_[0]->sub_layouts;
50 join '', map { $_->post_content } $_[0]->sub_layouts;
53 sub stylesheets_inline {
54 uniq ( map { $_->stylesheets_inline } $_[0]->sub_layouts ),
55 @{ $_[0]->{stylesheets_inline} || [] };
58 sub javascripts_inline {
59 uniq ( map { $_->javascripts_inline } $_[0]->sub_layouts ),
60 @{ $_[0]->{javascripts_inline} || [] };
64 #########################################
66 ########################################
70 push @{ $self->{stylesheets} ||= [] }, @_ if @_;
71 @{ $self->{stylesheets} ||= [] };
76 my $css_path = $self->get_stylesheet_for_user;
78 return uniq grep { $_ } map { $self->_find_stylesheet($_, $css_path) }
79 $self->use_stylesheet, map { $_->stylesheets } $self->sub_layouts;
82 sub _find_stylesheet {
83 my ($self, $stylesheet, $css_path) = @_;
85 return "$css_path/$stylesheet" if -f "$css_path/$stylesheet";
86 return "css/$stylesheet" if -f "css/$stylesheet";
87 return $stylesheet if -f $stylesheet;
90 sub get_stylesheet_for_user {
92 if (my $user_style = $::myconfig{stylesheet}) {
93 $user_style =~ s/\.css$//; # nuke trailing .css, this is a remnand of pre 2.7.0 stylesheet handling
94 if (-d "$css_path/$user_style" &&
95 -f "$css_path/$user_style/main.css") {
96 $css_path = "$css_path/$user_style";
98 $css_path = "$css_path/lx-office-erp";
101 $css_path = "$css_path/lx-office-erp";
103 $::myconfig{css_path} = $css_path; # needed for menunew, FIXME: don't do this here
111 push @{ $self->{javascripts} ||= [] }, @_ if @_;
112 @{ $self->{javascripts} ||= [] };
118 return uniq map { $self->_find_javascript($_) }
119 $self->use_javascript, map { $_->javascripts } $self->sub_layouts;
122 sub _find_javascript {
123 my ($self, $javascript) = @_;
125 return "js/$javascript" if -f "js/$javascript";
126 return $javascript if -f $javascript;
130 ############################################
131 # track state of form header
132 ############################################
135 $_[0]{_header_done} = 1;