Ver código fonte

fix themed templates

George Baugh 2 anos atrás
pai
commit
78da79a6c3
2 arquivos alterados com 36 adições e 18 exclusões
  1. 31 13
      lib/Trog/Routes/HTML.pm
  2. 5 5
      lib/Trog/Themes.pm

+ 31 - 13
lib/Trog/Routes/HTML.pm

@@ -196,8 +196,8 @@ our %routes = (
 my $themed = 0;
 if ($Trog::Themes::theme_dir) {
     my $theme_mod = "$Trog::Themes::theme_dir/routes.pm";
-    if ( -f "www/$theme_mod" ) {
-        use lib 'www';
+    if ( -f $theme_mod ) {
+        use lib '.';
         require $theme_mod;
         @routes{ keys(%Theme::routes) } = values(%Theme::routes);
         $themed = 1;
@@ -224,7 +224,7 @@ sub index ( $query, $content = '', $i_styles = [] ) {
     my $to_render = $query->{template} // $landing_page;
     $content ||= Trog::Renderer->render( template => $to_render, data => $query, component => 1, contenttype => 'text/html' );
 
-    my @styles = ('avatars.css');
+    my @styles;
     unshift( @styles, qw{embed.css}) if $query->{embed};
     unshift( @styles, qw{screen.css structure.css});
     push( @styles, @$i_styles );
@@ -240,6 +240,22 @@ sub index ( $query, $content = '', $i_styles = [] ) {
 
     #Do embed content
     my $tmpl = $query->{embed} ? 'embed.tx' : 'index.tx';
+    $query->{theme_dir} =~ s/^\/www\///;
+
+    # TO support theming we have to do things like this rather than with an include directive in the templates.
+    my $htmltitle = Trog::Renderer->render( template => $htmltitle, data => $query, component => 1, contenttype => 'text/html' );
+    return $htmltitle if ref $htmltitle eq 'ARRAY';
+    my $midtitle  = Trog::Renderer->render( template => $midtitle,  data => $query, component => 1, contenttype => 'text/html' );
+    return $midtitle if ref $htmltitle eq 'ARRAY';
+    my $rightbar  = Trog::Renderer->render( template => $rightbar,  data => $query, component => 1, contenttype => 'text/html' );
+    return $rightbar if ref $htmltitle eq 'ARRAY';
+    my $leftbar   = Trog::Renderer->render( template => $leftbar,   data => $query, component => 1, contenttype => 'text/html' );
+    return $leftbar if ref $htmltitle eq 'ARRAY';
+    my $topbar    = Trog::Renderer->render( template => $topbar,    data => $query, component => 1, contenttype => 'text/html' );
+    return $topbar if ref $htmltitle eq 'ARRAY';
+    my $footbar   = Trog::Renderer->render( template => $footbar,   data => $query, component => 1, contenttype => 'text/html' );
+    return $footbar if ref $htmltitle eq 'ARRAY';
+
     return finish_render(
         $tmpl,
         {
@@ -249,12 +265,12 @@ sub index ( $query, $content = '', $i_styles = [] ) {
             theme_dir    => $Trog::Themes::td,
             content      => $content,
             title        => $title,
-            htmltitle    => Trog::Renderer->render( template => $htmltitle, data => $query, component => 1, contenttype => 'text/html' ),
-            midtitle     => Trog::Renderer->render( template => $midtitle,  data => $query, component => 1, contenttype => 'text/html' ),
-            rightbar     => Trog::Renderer->render( template => $rightbar,  data => $query, component => 1, contenttype => 'text/html' ),
-            leftbar      => Trog::Renderer->render( template => $leftbar,   data => $query, component => 1, contenttype => 'text/html' ),
-            topbar       => Trog::Renderer->render( template => $topbar,    data => $query, component => 1, contenttype => 'text/html' ),
-            footbar      => Trog::Renderer->render( template => $footbar,   data => $query, component => 1, contenttype => 'text/html' ),
+            htmltitle    => $htmltitle,
+            midtitle     => $midtitle,
+            rightbar     => $rightbar,
+            leftbar      => $leftbar,
+            topbar       => $topbar,
+            footbar      => $footbar,
             categories   => \@series,
             stylesheets  => \@styles,
             print_styles => \@p_styles,
@@ -1396,11 +1412,12 @@ sub finish_render ( $template, $vars, %headers ) {
     $vars->{scripts}     //= [];
 
     # Theme-ize the paths
-    $vars->{stylesheets}  = [grep { -f "www/$_" } @{_build_themed_styles($vars->{stylesheets})}];
-    $vars->{print_styles} = [grep { -f "www/$_" } @{_build_themed_styles($vars->{p_styles})}];
-    $vars->{scripts}      = [grep { -f "www/$_" } @{_build_themed_scripts($vars->{scripts})}];
+    $vars->{stylesheets}  = [map { s/^www\///; $_ } grep { -f $_ } @{_build_themed_styles($vars->{stylesheets})}];
+    $vars->{print_styles} = [map { s/^www\///; $_ } grep { -f $_ } @{_build_themed_styles($vars->{p_styles})}];
+    $vars->{scripts}      = [map { s/^www\///; $_ } grep { -f $_ } @{_build_themed_scripts($vars->{scripts})}];
 
-    print Dumper($vars->{stylesheets});
+    # Add in avatars.css, it's special
+    push(@{$vars->{stylesheets}},"/styles/avatars.css");
 
     # Absolute-ize the paths for scripts & stylesheets
     @{ $vars->{stylesheets} }  = map { CORE::index( $_, '/' ) == 0 ? $_ : "/$_" } @{ $vars->{stylesheets} };
@@ -1413,6 +1430,7 @@ sub finish_render ( $template, $vars, %headers ) {
     $vars->{cachecontrol} //= $Trog::Vars::cache_control{revalidate};
 
     $vars->{code} ||= 200;
+    $vars->{theme_dir} =~ s/^\/www\///;
     $vars->{header} = Trog::Renderer->render( template => 'header.tx', data => $vars, contenttype => 'text/html', component => 1 );
     $vars->{footer} = Trog::Renderer->render( template => 'footer.tx', data => $vars, contenttype => 'text/html', component => 1 );
 

+ 5 - 5
lib/Trog/Themes.pm

@@ -18,25 +18,25 @@ Utility functions for getting themed paths.
 my $conf         = Trog::Config::get();
 our $template_dir = 'www/templates';
 our $theme_dir    = '';
-$theme_dir = "themes/" . $conf->param('general.theme') if $conf->param('general.theme') && -d "www/themes/" . $conf->param('general.theme');
+$theme_dir = "www/themes/" . $conf->param('general.theme') if $conf->param('general.theme') && -d "www/themes/" . $conf->param('general.theme');
 our $td = $theme_dir ? "/$theme_dir" : '';
 
 sub template_dir ($template, $content_type, $is_component=0, $is_dir=0) {
     my $ct = $Trog::Vars::byct{$content_type};
-    my ($mtd, $mtemp) = ("$theme_dir/$ct", "$template_dir/$ct");
+    my ($mtd, $mtemp) = ("$theme_dir/templates/$ct", "$template_dir/$ct");
     if ($is_component) {
         $mtd   .= "/components";
         $mtemp .= "/components";
     }
     if ($is_dir) {
-        return $mtd && -d "www/$mtd/$template" ? $mtd : $mtemp;
+        return $mtd && -d "$mtd/$template" ? $mtd : $mtemp;
     }
-    return $mtd && -f "www/$mtd/$template" ? $mtd : $mtemp;
+    return $mtd && -f "$mtd/$template" ? $mtd : $mtemp;
 }
 
 # Pick appropriate dir based on whether theme override exists
 sub _dir_for_resource ($resource) {
-    return $theme_dir && -f "www/$theme_dir/$resource" ? $theme_dir : '';
+    return $theme_dir && -f "$theme_dir/$resource" ? $theme_dir : '';
 }
 
 sub themed ($resource) {