summary history branches tags files
commit:276b8a01e78f59c6fec9e28584c678ddc335736e
author:Trevor Bentley
committer:Trevor Bentley
date:Sun Jan 15 00:38:43 2023 +0100
parents:8185721f944ab5897b51cc69867f71c3cd7365b6
add option to link directly to readme
diff --git a/config.toml b/config.toml
line changes: +11/-0
index 0c976f1..d059453
--- a/config.toml
+++ b/config.toml
@@ -54,6 +54,16 @@
 # file.
 #recursive_repo_dirs = []
 
+# List of files potentially containing repository documentation.
+#
+# Each repository root is searched for these files, in order.  The
+# first matching file is provided to the templates as a `readme`
+# variable, with the file contents.  Markdown files are rendered as
+# HTML if the feature is enabled.
+#
+# This can also be set per-repository.
+#readme_files = ["README.md", "README"]
+
 # List of files to copy to the site's `global_assets` directory.
 #
 # The files in this list are copied unmodified, and with the same name, to the
@@ -535,6 +545,7 @@ generated_by = "Itsy-Gitsy"
 #limit_context          = 200
 #limit_diffs            = 200
 #asset_files            = ["LICENSE"]
+#readme_files           = ["README.md", "README"]
 
 # An alternative way to specify the user-defined attributes.
 #

diff --git a/src/generate.rs b/src/generate.rs
line changes: +12/-0
index 1cc6611..63f732f
--- a/src/generate.rs
+++ b/src/generate.rs
@@ -345,6 +345,18 @@ impl GitsyGenerator {
             local_ctx.insert("site_generated_ts", &generated_dt.timestamp());
             local_ctx.insert("site_generated_offset", &generated_dt.offset().local_minus_utc());
 
+            if let Some(readmes) = &repo_desc.readme_files {
+                for readme in readmes {
+                    if let Some(file) = parsed_repo.root_files.iter().filter(|x| &x.name == readme).next() {
+                        louder!(" - found readme file: {}", file.name);
+                        let _ = GitsyGenerator::fill_file_contents(&repo, &file, &repo_desc)
+                            .expect("Failed to parse file.");
+                        local_ctx.insert("readme", &file);
+                        break;
+                    }
+                }
+            };
+
             if let Some(templ_file) = self.settings.templates.repo_summary.as_deref() {
                 match tera.render(templ_file, &local_ctx) {
                     Ok(rendered) => {

diff --git a/src/settings.rs b/src/settings.rs
line changes: +5/-0
index 5133fc8..0a65025
--- a/src/settings.rs
+++ b/src/settings.rs
@@ -231,6 +231,7 @@ pub struct GitsySettingsRepo {
     pub clone_url: Option<String>,
     pub website: Option<String>,
     pub branch: Option<String>,
+    pub readme_files: Option<Vec<String>>,
     pub asset_files: Option<Vec<String>>,
     pub render_markdown: Option<bool>,
     pub syntax_highlight: Option<bool>,
@@ -273,6 +274,7 @@ pub struct GitsySettings {
     pub site_url: Option<String>,
     pub site_description: Option<String>,
     pub clone_url: Option<String>,
+    pub readme_files: Option<Vec<String>>,
     pub asset_files: Option<Vec<String>>,
     pub branch: Option<String>,
     #[serde(rename(deserialize = "gitsy_templates"))]
@@ -356,6 +358,7 @@ impl GitsySettings {
                         };
                     }
                     global_to_repo!(settings, repo, branch);
+                    global_to_repo!(settings, repo, readme_files);
                     global_to_repo!(settings, repo, render_markdown);
                     global_to_repo!(settings, repo, syntax_highlight);
                     global_to_repo!(settings, repo, syntax_highlight_theme);
@@ -395,6 +398,7 @@ impl GitsySettings {
                             path: dir.path().clone(),
                             name: Some(name),
                             clone_url,
+                            readme_files: settings.readme_files.clone(),
                             branch: settings.branch.clone(),
                             render_markdown: settings.render_markdown.clone(),
                             syntax_highlight: settings.syntax_highlight.clone(),
@@ -434,6 +438,7 @@ impl GitsySettings {
                     path: dir.clone(),
                     name: Some(name),
                     clone_url,
+                    readme_files: settings.readme_files.clone(),
                     branch: settings.branch.clone(),
                     render_markdown: settings.render_markdown.clone(),
                     syntax_highlight: settings.syntax_highlight.clone(),

diff --git a/templates/style.css b/templates/style.css
line changes: +4/-4
index 4769d8e..8d7ece1
--- a/templates/style.css
+++ b/templates/style.css
@@ -335,14 +335,14 @@ div.commit-page span.del {
         font-size: 0.9rem;
     }
 }
-table.clone-url {
+table.links {
     width: 100%;
 }
-table.clone-url td.field {
+table.links td.field {
     font-weight: bold;
-    width: 8rem;
+    width: 10rem;
 }
-table.clone-url td.value {
+table.links td.value {
     text-align: left;
 }
 div.file-contents pre {

diff --git a/templates/summary.html b/templates/summary.html
line changes: +9/-1
index 5af5c59..32ab63c
--- a/templates/summary.html
+++ b/templates/summary.html
@@ -3,11 +3,19 @@
 {% block tab_summary_selected -%}selected{% endblock -%}
 
 {% block content %}
-<table class="clone-url">
+<table class="links">
   <colgroup>
     <col class="field" />
     <col class="value" />
   </colgroup>
+  <tr class="readme">
+    <td class="field website">Documentation:</td>
+    {% if readme and readme.id in file_ids -%}
+    <td class="value website"><a href="{{repo_url | safe}}/{{readme.kind}}/{{readme.id}}.html">{{readme.name | default(value="[none]")}}</a></td>
+    {% else -%}
+    <td class="value website">{{readme.name | default(value="[none]")}}</td>
+    {% endif -%}
+  </tr>
   <tr class="website">
     <td class="field website">Website:</td>
     <td class="value website">{{metadata.website | default(value="[none]")}}</td>