Procházet zdrojové kódy

Fix issue with td, also fix JSON route?

Andy Baugh před 11 měsíci
rodič
revize
83b4abe0cc
3 změnil soubory, kde provedl 23 přidání a 22 odebrání
  1. 12 12
      lib/Trog/Routes/HTML.pm
  2. 1 6
      lib/Trog/Routes/JSON.pm
  3. 10 4
      lib/Trog/Themes.pm

+ 12 - 12
lib/Trog/Routes/HTML.pm

@@ -240,7 +240,7 @@ Most subsequent functions simply pass content to this function.
 =cut
 
 sub index ( $query, $content = '', $i_styles = [], $i_scripts = [] ) {
-    $query->{theme_dir} = $Trog::Themes::td;
+    $query->{theme_dir} = Trog::Themes::td();
 
     my $to_render = $query->{template} // $landing_page;
     $content ||= Trog::Renderer->render( template => $to_render, data => $query, component => 1, contenttype => 'text/html' );
@@ -294,7 +294,7 @@ sub index ( $query, $content = '', $i_styles = [], $i_scripts = [] ) {
             %$query,
             search_lang  => $data->lang(),
             search_help  => $data->help(),
-            theme_dir    => $Trog::Themes::td,
+            theme_dir    => Trog::Themes::td(),
             content      => $content,
             title        => $title,
             htmltitle    => $htmltitle,
@@ -333,7 +333,7 @@ sub _build_social_meta ( $query, $title ) {
     $card_type = 'featured_image' if $query->{primary_post} && $query->{primary_post}{is_image};
     $card_type = 'player'         if $query->{primary_post} && $query->{primary_post}{is_video};
 
-    my $image = $Theme::default_image ? "https://$query->{domain}/$Trog::Themes::td/$Theme::default_image" : '';
+    my $image = $Theme::default_image ? "https://$query->{domain}/" . Trog::Themes::get_dir() . "/$Theme::default_image" : '';
     $image = "https://$query->{domain}/$query->{primary_post}{preview}" if $query->{primary_post} && $query->{primary_post}{preview};
     $image = "https://$query->{domain}/$query->{primary_post}{href}"    if $query->{primary_post} && $query->{primary_post}{is_image};
 
@@ -475,7 +475,7 @@ sub totp ($query) {
     return Trog::Routes::HTML::index(
         {
             title     => 'Enable TOTP 2-Factor Auth',
-            theme_dir => $Trog::Themes::td,
+            theme_dir => Trog::Themes::td(),
             uri       => $uri,
             qr        => $qr,
             failure   => $failure,
@@ -551,7 +551,7 @@ sub login ($query) {
             message     => int( $query->{failed} ) < 1 ? "Login Successful, Redirecting..." : "Login Failed.",
             btnmsg      => $btnmsg,
             stylesheets => _build_themed_styles( [qw{structure.css screen.css login.css}] ),
-            theme_dir   => $Trog::Themes::td,
+            theme_dir   => Trog::Themes::td(),
             has_users   => $hasusers,
             %$query,
         },
@@ -669,7 +669,7 @@ sub config ( $query = {} ) {
     return Trog::Routes::HTML::index(
         {
             title              => 'Configure tCMS',
-            theme_dir          => $Trog::Themes::td,
+            theme_dir          => Trog::Themes::td(),
             stylesheets        => [qw{config.css}],
             scripts            => [qw{post.js}],
             themes             => _get_themes() || [],
@@ -707,7 +707,7 @@ sub resetpass ($query) {
     return Trog::Routes::HTML::index(
         {
             title       => 'Request Authentication Resets',
-            theme_dir   => $Trog::Themes::td,
+            theme_dir   => Trog::Themes::td(),
             stylesheets => [qw{config.css}],
             scripts     => [qw{post.js}],
             message     => $query->{message},
@@ -1133,14 +1133,14 @@ sub posts ( $query, $direct = 0 ) {
     my ( $header, $footer );
     $header = Trog::Renderer->render(
         template    => 'headers/' . $query->{primary_post}{header},
-        data        => { theme_dir => $Trog::Themes::td, %$query },
+        data        => { theme_dir => Trog::Themes::td(), %$query },
         component   => 1,
         contenttype => 'text/html',
     ) if $query->{primary_post}{header};
     return $header if ref $header eq 'ARRAY';
     $footer = Trog::Renderer->render(
         template    => 'footers/' . $query->{primary_post}{footer},
-        data        => { theme_dir => $Trog::Themes::td, %$query },
+        data        => { theme_dir => Trog::Themes::td(), %$query },
         component   => 1,
         contenttype => 'text/html',
     ) if $query->{primary_post}{footer};
@@ -1548,7 +1548,7 @@ sub manual ($query) {
     return Trog::Routes::HTML::index(
         {
             title     => 'tCMS Manual',
-            theme_dir => $Trog::Themes::td,
+            theme_dir => Trog::Themes::td(),
             content   => $content,
             template  => 'manual.tx',
             is_admin  => 1,
@@ -1563,7 +1563,7 @@ sub processed ($query) {
     return Trog::Routes::HTML::index(
         {
             title     => "Your request has been processed",
-            theme_dir => $Trog::Themes::td,
+            theme_dir => Trog::Themes::td(),
         },
         "Your request has been processed.<br /><br />You will recieve subsequent communications about this matter via means you have provided earlier.",
         ['post.css']
@@ -1579,7 +1579,7 @@ sub metrics ($query) {
     return Trog::Routes::HTML::index(
         {
             title     => 'tCMS Metrics',
-            theme_dir => $Trog::Themes::td,
+            theme_dir => Trog::Themes::td(),
             template  => 'metrics.tx',
             is_admin  => 1,
             %$query,

+ 1 - 6
lib/Trog/Routes/JSON.pm

@@ -18,12 +18,6 @@ use Trog::Routes::HTML();
 
 use Trog::Log::Metrics();
 
-my $conf = Trog::Config::get();
-
-# TODO de-duplicate this, it's shared in html
-my $theme_dir = '';
-$theme_dir = "themes/" . $conf->param('general.theme') if $conf->param('general.theme') && -d "www/themes/" . $conf->param('general.theme');
-
 our %routes = (
     '/api/catalog' => {
         method     => 'GET',
@@ -93,6 +87,7 @@ sub catalog ($query) {
 
 sub webmanifest ($query) {
     state $headers  = { ETag => 'manifest-' . _version() };
+    my $theme_dir = Trog::Themes::get_dir();
     state %manifest = (
         "icons" => [
             { "src" => "$theme_dir/img/icon/favicon-32.png",  "type" => "image/png", "sizes" => "32x32" },

+ 10 - 4
lib/Trog/Themes.pm

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