add a basic default dark theme

This commit is contained in:
Trevor Bentley
2023-01-15 17:50:33 +01:00
parent 15fe76b0ba
commit 88e76d788c
39 changed files with 1505 additions and 8 deletions
+569
View File
@@ -0,0 +1,569 @@
###############################################################################
##
## Global, site-wide configuration settings
##
###############################################################################
# A friendly name for the generated site.
#
# This is accessible in all templates.
#site_name = ""
# The URL where this generated site is hosted.
#
# This is accessible in all templates.
#site_url = ""
# A description of the generated site.
#
# This is accessible in all templates.
#site_description = ""
# URL where the repositories can be cloned from.
#
# Use the "%REPO%" variable to substitute the repository name.
#
# This can also be set per-repository.
#clone_url = "https://github.com/your_user/%REPO%"
# Which branch to use for generating history.
#
# Itsy-Gitsy currently only supports traversing the history of a single branch,
# which is the one named here. Common options are "master" and "main".
# Defaults to "master" if not specified.
#
# Note that this probably should not contain any remote prefix, like "origin/",
# though it may. Also note that the "default branch" is only a concept for
# remote repositories; local repositories do not have the concept, hence this
# must be explicitly specified.
#
# This can also be set per-repository.
#branch = "master"
# List of directories, each of which contains Git repositories to
# index.
#
# For each directory listed here, Itsy-Gitsy imports all of the
# immediate subdirectories as repositories. Each repository is
# imported with its name set to the name of the subdirectory it is in.
#
# Every repository imported in this way has the global setting from
# this file applied. It is not possible to apply per-repository
# settings for bulk-imported repositories. Repositories that require
# specific configuration can be explicitly specified later in this
# 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
# configured `global_asset` output directory. Use for including global,
# site-wide resources, such as stylesheets, images, and icons.
#
# Currently does NOT support globbing or directories. Each file must be listed
# individually.
#
# Use "%TEMPLATE%" variable to substitute the path to the current
# template folder.
#
# Use "%REPO%" variable to substitute the path to the currently
# processing repository (only sensible when used as a per-repo
# configuration).
#
# This can also be set per-repository, in which case the `repo_assets` output
# directory is used.
asset_files = ["%TEMPLATE%/style.css"]
# Whether to split history output into pages
#
# If non-zero and a `history` template is specified, the history
# output is generated several times, each with the `history` variable
# in the template engine containing the next `paginate_history` number
# of entries.
#
# A `page` variable is available in the template, which contains the
# current, next, previous, and total number of pages.
#
# Use the "%PAGE%" variable in the `history` output variable to
# substitute the page number into the produced filename.
paginate_history = 50
# Whether to split branches output into pages
#
# If non-zero and a `branches` template is specified, the branches
# output is generated several times, each with the `branches` variable
# in the template engine containing the next `paginate_branches`
# number of entries.
#
# A `page` variable is available in the template, which contains the
# current, next, previous, and total number of pages.
#
# Use the "%PAGE%" variable in the `branches` output variable to
# substitute the page number into the produced filename.
paginate_branches = 50
# Whether to split tags output into pages
#
# If non-zero and a `tags` template is specified, the tags output is
# generated several times, each with the `tags` variable in the
# template engine containing the next `paginate_tags` number of
# entries.
#
# A `page` variable is available in the template, which contains the
# current, next, previous, and total number of pages.
#
# Use the "%PAGE%" variable in the `tags` output variable to
# substitute the page number into the produced filename.
paginate_tags = 50
# Whether to render Markdown files in repos into HTML.
#
# Rendering Markdown can make site generation take more time. It has potential
# security implications, as user-generated input (files in the repo) are
# formatted into HTML and served unescaped. Use with caution.
#
# This can also be set per-repository.
render_markdown = true
# Whether render files with syntax highlighting, as HTML.
#
# Applying syntax highlighting is CPU-intensive, and greatly increases site
# generation time. It has potential security implications, as user-generated
# input (files in the repo) are formatted into HTML and served unescaped. Use
# with caution.
#
# This can also be set per-repository.
syntax_highlight = true
# Which theme to use for syntax highlighting colors.
#
# The default themes from Syntect are available, namely:
#
# - `base16-ocean.light`
# - `base16-ocean.dark`
# - `base16-eighties.dark`
# - `base16-mocha.dark`
# - `InspiredGitHub`
# - `Solarized (dark)`
# - `Solarized (light)`
#
syntax_highlight_theme = "base16-ocean.dark"
# Limits maximum number of history items (i.e. git log) to parse.
#
# After the limit is reached, no more history items will be processed or stored
# in memory, and no more commits will be output to disk. For large
# repositories, this can increase processing speed and decrease memory and disk
# usage.
#
# This can also be set per-repository.
#limit_history = 500
# Limits maximum number of commits to output.
#
# When the limit is reached, no more commits are written to disk. Similar to
# `limit_history`, but the entire git log is still read into RAM and provided
# to the templates.
#
# This can also be set per-repository.
#limit_commits = 500
# Limits maximum number of branches to parse.
#
# When the limit is reached, no more branches are parsed in memory or provided
# to the `branch` template.
#
# Since branch order is unsorted and non-deterministic, the most sensible
# values for this are very large, or 0 (to disable branches).
#
# This can also be set per-repository.
#limit_branches = 500
# Limits maximum number of tags to parse.
#
# When the limit is reached, no more tags are parsed in memory or provided to
# the `tag` template.
#
# Since tag order is unsorted and non-deterministic, the most sensible values
# for this are very large, or 0 (to disable tags).
#
# This can also be set per-repository.
#limit_tags = 500
# Limits directory depth to traverse when parsing files.
#
# Limits the number of directories traversed when enumerating files in the
# `all_files` entry, which is passed as part of the repository to each
# template. This can help reduce RAM usage, and potentially disk usage, for
# repositories with a very large number of files or directories.
#
# Set to 0 to disable both `all_files` and `root_files`, i.e. do not parse any
# file listing. If set to 1 or greater, only applies to `all_files`.
#
# This can also be set per-repository.
#limit_tree_depth = 20
# Limits size of files in repo with content previews.
#
# Only non-binary files smaller than this limit will have their contents
# provided to the `file` template. Large files are still processed, but do not
# include the text contents.
#
# This can also be set per-repository.
#limit_file_size = 2097152
# Limits size of a single produced repository.
#
# Limits the size of a generated repository preview. This is a low-precision
# limit, terminating generation wherever it happens to be, and may lead to many
# dead links in the final output.
#
# This limit is not strict: generation is terminated after the first file that
# exceeds this limit. The output size might somewhat overflow this limit.
# Also, static repository assets specified in this configuration are NOT
# included in this limit.
#
# This is intended merely as a safety mechanism to prevent massive run-away
# disk usage.
#
# This can also be set per-repository.
#limit_repo_size = 52428800
# Limits total size of all output.
#
# Limits the size of the total run: the sum of all repositories. This is a
# low-precision limit, terminating generation wherever it happens to be, and
# may lead to many dead links or entirely missing repositories.
#
# This limit is not strict: generation is terminated after the first file that
# exceeds this limit. The output size might somewhat overflow this limit.
# Also, static repository assets specified in this configuration are NOT
# included in this limit.
#
# This is intended merely as a safety mechanism to prevent massive run-away
# disk usage.
#
# This can also be set per-repository.
#limit_total_size = 524288000
# Limits number of contextual elements available to templates.
#
# By default, if this limit is not set, all repository elements
# (history, branches, tags, commits) are provided in full to all
# repository templates, so every page can see all repo metadata.
#
# For parallel output generation, one copy of the repo metadata is
# made per CPU core. All of this must be loaded into RAM, which means
# large repositories can be very slow to process, or exhaust memory.
#
# This setting limits all elements, *except* those directly relevant
# to the page being rendered. For example, all elements except
# `branches` are limited in the `branches` template, all elements
# except `tags` are limited in the `tags` template, and so on.
#
# This is critically important for very large repositories, to prevent
# them from consuming all memory and destroying all things.
#
# This can also be set per-repository.
#limit_context = 200
# Limit number of diffs and diff statistics.
#
# By default, if this limit is not set, every history item contains
# statistics (files changes, additions, and deletions), and every
# commit item contains a diff. These are all held in memory and
# passed to each repository template.
#
# While parsing history, and if this limit is reached, subsequent
# history and commit items will not have diffs and statistics
# included.
#
# This is critically important for very large repositories, to prevent
# them from consuming all memory and destroying all things.
#
# This can also be set per-repository.
#limit_diffs = 200
###############################################################################
##
## Subsection specifying which files to use as templates.
##
## The individual templates are relative to the `path` directory. Each
## template is a single file using the Tera template engine's format for text
## substitution.
##
## All except `path` are optional. If not specified, the associated outputs
## will not be generated.
##
###############################################################################
[gitsy_templates]
# Path to a folder containing Tera templates.
#
# All files with a .html extension found under this directory, and its
# immediate children directories, are imported into the Tera template engine.
path = "templates/default_dark/"
# Template responsible for the list of repositories.
#
# This template is evaluated with the list of all configured repositories. It
# is intended for providing an overview of the available repositories, but the
# full details of each repository are also included.
#
# This template executes one time.
repo_list = "repos.html"
# Template responsible for summarizing a single repository.
#
# This template is evaluated with a single parsed repository, with all repo
# data (commits, branches, etc) available.
#
# This template executes one time per repository.
repo_summary = "summary.html"
# Template responsible for displaying the commit history.
#
# This template is evaluated with the same data as `repo_summary`. If
# the `paginate_history` setting is non-zero, this may be called
# several times with the `history` template variable reduced to the
# requested page size, and with a `page` template variable provided to
# identify the current, previous, and next pages.
#
# This template executes at least one time per repository, or several
# times if paginated.
history = "history.html"
# Template responsible for displaying a single commit.
#
# Called once per parsed commit, with both the whole repository and the current
# commit available to the template.
#
# This template executes many times.
commit = "commit.html"
# Template responsible for displaying the repo branches.
#
# This template is evaluated with the same data as `repo_summary`. If
# the `paginate_branches` setting is non-zero, this may be called
# several times with the `branches` template variable reduced to the
# requested page size, and with a `page` template variable provided to
# identify the current, previous, and next pages.
#
# This template executes at least one time per repository, or several
# times if paginated.
branches = "branches.html"
# Template responsible for displaying a single branch.
#
# Called once per parsed branch, with both the whole repository and the current
# branch available to the template.
#
# This template executes many times.
branch = "branch.html"
# Template responsible for displaying the repo tags.
#
# This template is evaluated with the same data as `repo_summary`. If
# the `paginate_tags` setting is non-zero, this may be called several
# times with the `tags` template variable reduced to the requested
# page size, and with a `page` template variable provided to identify
# the current, previous, and next pages.
#
# This template executes at least one time per repository, or several
# times if paginated.
tags = "tags.html"
# Template responsible for displaying a single tag.
#
# Called once per parsed tag, with both the whole repository and the current
# tag available to the template.
#
# This template executes many times.
tag = "tag.html"
# Template responsible for displaying file tree.
#
# Called with the same variables as the `summary` page, this simply gives an
# alternative locate to list the files in the root of the repository.
#
# This template executes once per repository.
files = "files.html"
# Template responsible for displaying a single file.
#
# Called once per parsed file, with both the whole repository and the current
# file available to the template.
#
# This template executes many times.
file = "file.html"
# Template responsible for displaying a single directory.
#
# Called once per parsed directory, with both the whole repository and the
# current directory available to the template.
#
# This template executes many times.
dir = "dir.html"
# Template responsible for displaying a site-wide error.
#
# Intended for 404 (page not found) errors. If used, you must configure your
# webserver to redirect HTTP errors to the generated error page.
#
# This template executes one time.
error = "404.html"
###############################################################################
##
## Subsection specifying names of output files/directories.
##
## Each entry pairs with one of the entries in `gitsy_templates` above,
## specifying the directories and filenames for the rendered output, after the
## template engine has performed its substitutions.
##
## All outputs are relative to the `path` directory.
##
## There are currently two supported variables for paths:
##
## * "%REPO%" -- replaced with the name of the currently processing repository
## * "%ID%" -- replaced with the ID of the currently processing object
## * "%PAGE%" -- replaced with the current page number if output is paginated
##
## All except `path` are optional. If not specified, sensible defaults will be
## used.
##
###############################################################################
[gitsy_outputs]
path = "rendered/"
repo_list = "index.html"
repo_summary = "%REPO%/index.html"
history = "%REPO%/history%PAGE%.html"
commit = "%REPO%/commit/%ID%.html"
branches = "%REPO%/branches%PAGE%.html"
branch = "%REPO%/branch/%ID%.html"
tags = "%REPO%/tags%PAGE%.html"
tag = "%REPO%/tag/%ID%.html"
files = "%REPO%/files.html"
file = "%REPO%/file/%ID%.html"
syntax_css = "%REPO%/file/syntax.css"
dir = "%REPO%/dir/%ID%.html"
error = "404.html"
# Output directory for files specified in global `asset_files`.
#
# Each input file is copied to this directory unmodified.
global_assets = "assets/"
# Output directory for files specified in per-repo `asset_files`.
#
# Each input file is copied to this directory unmodified.
repo_assets = "%REPO%/assets/"
# Directory to clone remote repositories into.
#
# Remote repositories must be cloned locally to parse. They are cloned into
# subdirectories of `cloned_repos`, as bare git repos. These are not deleted
# when Itsy-Gitsy finishes. If the directories already exist when Itsy-Gitsy
# runs, all remote refs are fetched rather than recloning.
#
# Only non-authenticated HTTPS repositories are currently supported.
cloned_repos = "cloned_repos/"
###############################################################################
##
## Subsection for arbitrary, global user data.
##
## These variables are available to every page template. Add extra metadata
## that you want available site-wide here.
##
###############################################################################
[gitsy_extra]
generated_by = "Itsy-Gitsy"
generated_by_url = "https://git.trevorbentley.com/itsy-gitsy/"
#global_user_defined_var = "whatever"
#these_can_also_be_numbers = 5
#or_bools = true
#or_other_toml_types = {like_dicts = "yep, those too"}
###############################################################################
##
## Individual repository configurations.
##
###############################################################################
# The section name is used as the repository name if no `name` attribute is
# provided.
#[my_repository]
# Path to the Git repository.
#path = "/path/to/my_repository"
# Name of this repository, if different from the section name.
#name = "my_repository"
# A description of this repository.
#description = ""
# URL of website associated with this repository.
#website = ""
# Dictionary of arbitrary, user-defined attributes associated with the repo.
#
# Specifying as an inline-table requires all keys to be on one line.
#
# Available in all repo-specific page templates.
#
#attributes = { status = "active", type = "daemon" }
# Per-repository settings, same as the global versions described above:
#clone_url = "https://github.com/your_user/%REPO%"
#branch = "master"
#render_markdown = false
#syntax_highlighting = false
#syntax_highlight_theme = "base16-ocean.dark"
#paginate_history = 50
#paginate_branches = 50
#paginate_tags = 50
#limit_history = 500
#limit_commits = 500
#limit_branches = 500
#limit_tags = 500
#limit_tree_depth = 20
#limit_file_size = 2097152
#limit_repo_size = 52428800
#limit_total_size = 524288000
#limit_context = 200
#limit_diffs = 200
#asset_files = ["%REPO%/LICENSE"]
#readme_files = ["README.md", "README"]
# An alternative way to specify the user-defined attributes.
#
# This method allows keys to be on their own lines.
#
#[circadian.attributes]
#status = "active"
#type = "daemon"
# Remote HTTPS repositories can also be specified:
#
#[remote_repo]
#path = "https://github.com/my_user_name/remote_repo"
+10 -3
View File
@@ -73,9 +73,16 @@ readme_files = ["README.md", "README"]
# Currently does NOT support globbing or directories. Each file must be listed
# individually.
#
# Use "%TEMPLATE%" variable to substitute the path to the current
# template folder.
#
# Use "%REPO%" variable to substitute the path to the currently
# processing repository (only sensible when used as a per-repo
# configuration).
#
# This can also be set per-repository, in which case the `repo_assets` output
# directory is used.
asset_files = ["templates/style.css"]
asset_files = ["%TEMPLATE%/style.css"]
# Whether to split history output into pages
#
@@ -307,7 +314,7 @@ syntax_highlight_theme = "base16-ocean.light"
#
# All files with a .html extension found under this directory, and its
# immediate children directories, are imported into the Tera template engine.
path = "templates/"
path = "templates/default_light/"
# Template responsible for the list of repositories.
#
@@ -545,7 +552,7 @@ generated_by_url = "https://git.trevorbentley.com/itsy-gitsy/"
#limit_total_size = 524288000
#limit_context = 200
#limit_diffs = 200
#asset_files = ["LICENSE"]
#asset_files = ["%REPO%/LICENSE"]
#readme_files = ["README.md", "README"]
# An alternative way to specify the user-defined attributes.
+6 -1
View File
@@ -631,7 +631,9 @@ impl GitsyGenerator {
if repo_desc.asset_files.is_some() {
let target_dir = self.settings.outputs.repo_assets(Some(&parsed_repo), None);
for src_file in repo_desc.asset_files.as_ref().unwrap() {
let src_file = PathBuf::from(repo_path.to_owned() + "/" + src_file);
let src_file = src_file.replace("%TEMPLATE%", &self.settings.templates.template_dir());
let src_file = src_file.replace("%REPO%", &repo_path);
let src_file = PathBuf::from(repo_path.to_owned() + "/" + &src_file);
let mut dst_file = PathBuf::from(&target_dir);
dst_file.push(src_file.file_name().expect(&format!(
"Failed to copy repo asset file: {} ({})",
@@ -646,6 +648,7 @@ impl GitsyGenerator {
if let Ok(meta) = std::fs::metadata(dst_file) {
repo_bytes += meta.len() as usize;
}
loud!(" - copied asset: {}", src_file.display());
}
}
@@ -719,6 +722,7 @@ impl GitsyGenerator {
if self.settings.asset_files.is_some() {
let target_dir = self.settings.outputs.global_assets(None, None);
for src_file in self.settings.asset_files.as_ref().unwrap() {
let src_file = src_file.replace("%TEMPLATE%", &self.settings.templates.template_dir());
let src_file = PathBuf::from(src_file);
let mut dst_file = PathBuf::from(&target_dir);
dst_file.push(
@@ -731,6 +735,7 @@ impl GitsyGenerator {
if let Ok(meta) = std::fs::metadata(dst_file) {
global_bytes += meta.len() as usize;
}
loud!(" - copied asset: {}", src_file.display());
}
}
+2 -1
View File
@@ -31,7 +31,8 @@ use settings::{GitsyCli, GitsySettings};
// TODO:
//
// * basic, light, dark, and fancy default themes
// * favicon
// * permalinks (at least for README?)
// * better error propagation
// * automated tests
// * documentation + examples
+9
View File
@@ -127,6 +127,15 @@ pub struct GitsySettingsTemplates {
pub error: Option<String>,
}
impl GitsySettingsTemplates {
pub fn template_dir(&self) -> String {
self.path.clone().canonicalize()
.expect(&format!("ERROR: unable to canonicalize template path: {}", self.path.display()))
.to_str().expect(&format!("ERROR: unable to parse template path: {}", self.path.display()))
.to_string()
}
}
#[derive(Deserialize, Debug)]
pub struct GitsySettingsOutputs {
pub path: PathBuf,
+362
View File
@@ -0,0 +1,362 @@
:root {
--greyblue: #dee2ea;
--greyblue: #345886;
--greypink: #e0deea;
--greypink: #c0d2dd;
--greypink: #555;
--offwhite: #424242;
--offerwhite: #666;
--deepred: #d9ac7d;
--deepblue: #f0e0bb;
--nearwhite: #404040;
--nearblack: #f0f0f0;
--borderverylight: #ddd;
--borderlight: #515151;
--borderdark: #888;
}
body {
height: 100%;
margin: 0;
min-height: 100%;
font-family: monospace,monospace;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
line-height: 1.5;
background-color: var(--nearwhite);
color: var(--nearblack);
}
div {
color: var(--nearblack);
}
div.banner {
width: 95%;
max-width: 100rem;
color: var(--offwhite);
background-color: var(--greyblue);
border-radius: 0 0 30px 30px;
font-family: sans-serif;
text-align: center;
margin: 0 auto 0 auto;
margin-bottom: 1rem;
padding-bottom: 0.5rem;
}
div.breadcrumbs {
background-color: var(--greypink);
font-weight: bold;
padding: 0.5em;
border-radius: 10px 10px 0 0;
}
div.breadcrumbs a {
color: var(--nearblack);
text-decoration: none;
}
div.breadcrumbs span.site-title {
font-size: 1rem;
}
div.breadcrumbs span.repo-name {
font-size: 1.5rem;
}
div.site-title {
letter-spacing: .1em;
font-size: 2.5rem;
font-weight: bold;
}
div.site-description {
min-height: 1.5em;
}
a {
word-wrap: break-word;
background-color: transparent;
color: var(--deepblue);
transition: opacity .1s;
}
a:hover {
opacity: 0.5;
}
a.disabled {
pointer-events: none;
color: var(--nearblack);
}
div.main {
width: 95%;
max-width: 100rem;
margin: 0 auto 0 auto;
}
div.content {
padding: 1em 0 1em 0;
}
table {
width: 100%;
}
table.tabs {
padding: 0 0 0 0;
margin: 0 auto 0 auto;
background-color: var(--offwhite);
border-radius: 0 0 3px 3px;
border-bottom: solid 3px var(--borderlight);
border-spacing: 0;
}
table.tabs td.tab {
text-align: center;
min-width: 8em;
border-right: solid 1px var(--borderdark);
}
table.tabs td.padding {
width: 100%;
}
table.tabs a {
color: var(--deepred);
text-decoration: none;
letter-spacing: .1em;
font-weight: bold;
}
table.tabs td.selected {
background-color: var(--greyblue);
background-color: #ede5de;
background-color: var(--greypink);
}
table.summary-table, table.repo-list {
width: 100%;
max-width: 100%;
background-color: var(--offwhite);
border-radius: 8px;
}
table.summary-table th, table.repo-list th {
text-align: left;
padding-left: 0.3em;
}
table.summary-table tr:nth-child(even), table.repo-list tr:nth-child(even) {
background-color: var(--offerwhite);
}
table.repo-list td {
padding: 0.3em 0.3em 0.3em 0.3em;
}
table.summary-table td, table.repo-list td {
word-break: break-all;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding-left: 0.3em;
}
table.repo-list col.repo {
width: 12rem;
}
table.repo-list td.description {
max-width: 40em;
}
table.repo-list col.description {
width: 30rem;
}
table.repo-list col.website {
width: 7em;
max-width: 7em;
}
table.repo-list col.updated {
width: 10em;
max-width: 10em;
}
table.summary-table col.oid {
width: 7em;
max-width: 7em;
}
table.summary-table col.date {
width: 9em;
max-width: 9em;
}
table.summary-table col.diff {
width: 9em;
max-width: 9em;
}
table.summary-table col.msg {
width: 30rem;
}
table.summary-table col.refs {
width: 25rem;
}
table.summary-table col.branch {
width: 30em;
}
table.summary-table col.tag {
width: 30em;
}
table.summary-table col.type {
width: 7em;
max-width: 7em;
}
table.summary-table col.mode {
width: 7em;
max-width: 7em;
}
table.summary-table col.size {
width: 7em;
max-width: 7em;
}
table.summary-table td.msg {
max-width: 10em;
}
table.summary-table td.refs {
font-size: 0.8rem;
}
table.summary-table span.ref {
color: var(--nearblack);
background-color: var(--greyblue);
border-radius: 10px;
margin-right: 1em;
padding: 0 0.5em 0 0.5em;
}
table.summary-table td.sans {
font-family: sans-serif;
}
div.summary-header {
color: var(--nearblack);
letter-spacing: 0.05em;
background-color: var(--greyblue);
font-size: 1.4rem;
font-weight: bold;
text-align: center;
text-transform: uppercase;
margin-top: 2rem;
border-bottom: solid 1px var(--borderdark);
border-radius: 10px 10px 0 0;
}
div.full-header {
color: var(--nearblack);
letter-spacing: 0.05em;
background-color: var(--greyblue);
font-size: 1.4rem;
font-weight: bold;
text-align: center;
text-transform: uppercase;
margin-top: 0rem;
border-bottom: solid 1px var(--borderdark);
border-radius: 10px 10px 0 0;
}
div.nocap-header {
color: var(--nearblack);
letter-spacing: 0.05em;
background-color: var(--greyblue);
font-size: 1.4rem;
font-weight: bold;
text-align: center;
margin-top: 0rem;
border-bottom: solid 1px var(--borderdark);
border-radius: 10px 10px 0 0;
}
hr {
border-color: var(--borderverylight);
}
div.footer {
margin-top: 1em;
padding-bottom: 2em;
text-align: center;
font-size: 0.9rem;
}
nav.paginate {
text-align: center;
margin-top: 2em;
}
nav.paginate span.paginate {
margin: 0 5em 0 5em;
}
nav.paginate a.disabled {
text-decoration: none;
color: var(--borderlight);
}
div.file-contents {
background-color: var(--offwhite);
font-size: 1rem;
overflow: visible;
padding: 0 0.5em 0 0.5em;
}
div.commit-page, div.branch-page, div.tag-page {
background-color: var(--offwhite);
font-size: 1rem;
overflow: visible;
}
table.commit-header, table.branch-header, table.tag-header {
width: 100%;
background-color: var(--offerwhite);
background-color: var(--greypink);
border-radius: 10px 10px 0 0;
padding: 0.5em;
border-bottom: solid 2px var(--borderlight);
}
table.commit-header td.field, table.branch-header td.field, table.tag-header td.field {
width: 10em;
font-weight: bold;
}
div.commit-message {
padding: 1em 0.5em 2em 0.5em;
border-bottom: solid 2px var(--borderlight);
}
div.branch-message, div.tag-message {
padding: 1em 0.5em 2em 0.5em;
}
div.commit-diff {
padding: 0.5em;
}
div.commit-diff-header {
font-weight: bold;
}
div.commit span.hunk-header {
font-weight: bold;
}
div.commit-diff-header pre, div.branch-page pre, div.tag-page pre {
padding: 0;
margin: 0;
}
div.commit-page span.add {
color: #00aa00;
}
div.commit-page span.del {
color: #bb0000;
}
@media screen and (max-width:50em) {
body, table, div {
font-size: 0.8rem;
}
div.footer {
font-size: 0.7rem;
}
col.nosmall, td.nosmall, th.nosmall {
display: none;
visibility: hidden;
}
table.tabs td.tab {
min-width: 0em;
padding: 0 0.3em 0 0.3em;
}
div.file-contents {
font-size: 0.7rem;
}
div.breadcrumbs span.site-title {
font-size: 0.7rem;
}
div.breadcrumbs span.repo-name {
font-size: 0.9rem;
}
}
table.links {
width: 100%;
}
table.links td.field {
font-weight: bold;
width: 10rem;
}
table.links td.value {
text-align: left;
}
div.file-contents pre {
background-color: var(--offwhite);
padding: 0.2em 0.5em 0.2em 0.5em;
}
div.file-contents table {
border-collapse: true;
font-size: 1rem;
}
div.file-contents table th {
border-bottom: 1px solid;
}
div.file-contents table td {
padding: 0.2em 0.5em 0.2em 0.5em;
}
+5
View File
@@ -0,0 +1,5 @@
{% extends "base.html" %}
{% block content %}
The page you are seeking does not exist.
{% endblock content %}
+61
View File
@@ -0,0 +1,61 @@
<html>
<head>
{% set head_title = site_name | default(value="Itsy-Gitsy") -%}
{% set head_description = metadata.description | default(value=site_description | default(value="Static Git repository listings")) -%}
{% set root_url = site_url | default(value=site_dir) -%}
{% if name -%}
{% set repo_url = root_url ~ "/" ~ name -%}
{% set head_title = head_title ~ " -- " ~ name -%}
{% endif -%}
{% set asset_url = root_url ~ "/" ~ site_assets -%}
{% set head_url = repo_url | default(value=root_url) -%}
{% block html_head -%}
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="HandheldFriendly" content="True" />
<title>{{head_title}}</title>
<meta name="description" content="{{ head_description }}">
<meta name="og:title" content="{{head_title}}">
<meta name="og:url" content="{{ head_url | safe }}">
<meta name="og:description" content="{{ head_description }}">
<meta name="og:type" content="website">
<link rel="canonical" href="{{ head_url | safe }}">
<link rel="stylesheet" type="text/css" href="{{ asset_url | safe }}/style.css" />
{% block html_head_extra -%}
{% endblock html_head_extra -%}
{% endblock html_head -%}
</head>
<body>
{% block header -%}{% include "header.html" -%}{% endblock header -%}
<div class="main">
<div class="subheader">
{% block subheader -%}{% include "subheader.html" -%}{% endblock subheader -%}
</div>
{% if repo_url -%}
<table class='tabs'>
<tr>
<td class="tab {% block tab_summary_selected -%}{% endblock -%} "><a href='{{ repo_url | safe }}/index.html' class="tab">summary</a></td>
<td class="tab {% block tab_history_selected -%}{% endblock -%} "><a href='{{ repo_url | safe }}/history.html' class="tab">history</a></td>
<td class="tab {% block tab_branches_selected -%}{% endblock -%}"><a href='{{ repo_url | safe }}/branches.html' class="tab">branches</a></td>
<td class="tab {% block tab_tags_selected -%}{% endblock -%} "><a href='{{ repo_url | safe }}/tags.html' class="tab">tags</a></td>
<td class="tab {% block tab_files_selected -%}{% endblock -%} "><a href='{{ repo_url | safe }}/files.html' class="tab">files</a></td>
<td class="padding"></td>
</tr>
</table>
{% endif -%}
<div class="content">
{% block content %}{% endblock content %}
</div>
</div>
{% block footer -%}{% include "footer.html" -%}{% endblock footer -%}
</body>
</html>
+16
View File
@@ -0,0 +1,16 @@
{% extends "base.html" %}
{% block tab_branches_selected -%}selected{% endblock -%}
{% block content %}
<div class="branch-page">
<table class="branch-header">
<tr class="header"><td class="field">branch:</td><td class="value">{{branch.ref_name}}</td></tr>
<tr class="header"><td class="field">commit:</td><td class="value">{% if branch.full_hash in commits -%}<a href="{{repo_url | safe}}/commit/{{branch.full_hash}}.html">{{branch.full_hash}}</a>{% else -%}{{branch.full_hash}}{% endif -%}</td></tr>
<tr class="header"><td class="field">author:</td><td class="value">{{branch.author.name}} <{{branch.author.email}}></td></tr>
<tr class="header"><td class="field">committer:</td><td class="value">{{branch.committer.name}} <{{branch.committer.email}}></td></tr>
<tr class="header"><td class="field">date:</td><td class="value">{{ts_to_git_timestamp(ts=branch.ts_utc, tz=branch.ts_offset)}}</td></tr>
</table>
<div class="branch-message"><pre>{{branch.message}}</pre></div>
</div>
{% endblock content %}
+37
View File
@@ -0,0 +1,37 @@
{% extends "base.html" %}
{% block tab_branches_selected -%}selected{% endblock -%}
{% block content %}
<div class="full-header branches">Branches</div>
<table class="summary-table branches">
<colgroup>
<col class="branch" />
<col class="oid" />
<col class="msg nosmall" />
<col class="author" />
<col class="date" />
</colgroup>
<tr>
<th>Branch</th>
<th>Commit</th>
<th class="nosmall">Message</th>
<th>Author</th>
<th>Date</th>
</tr>
{% for entry in branches -%}
<tr class="branch">
<td class="name"><a href="branch/{{entry.full_hash}}.html">{{entry.ref_name}}</a></td>
<td class="oid">{{entry.short_hash}}</td>
<td class="msg sans nosmall">{{entry.summary}}</td>
<td class="author sans">{{entry.author.name}}</td>
<td class="date">{{ts_to_date(ts=entry.ts_utc, tz=entry.ts_offset)}}</td>
</tr>
{% endfor -%}
</table>
<nav class="paginate" role="navigation">
<a class="paginate {% if not page.prev_page -%}disabled{% endif -%}" href="{{ page.prev_page }}">&lt; prev page</a>
<span class="paginate">[page {{ page.page_idx }} of {{ page.pages }}]</span>
<a class="paginate {% if not page.next_page -%}disabled{% endif -%}" href="{{ page.next_page }}">next page &gt;</a>
</nav>
{% endblock content %}
+39
View File
@@ -0,0 +1,39 @@
{% extends "base.html" %}
{% block tab_history_selected -%}selected{% endblock -%}
{% block content %}
<div class="commit-page">
<table class="commit-header">
<tr class="header"><td class="field">commit:</td><td class="value">{{commit.full_hash}}</td></tr>
<tr class="header"><td class="field">author:</td><td class="value">{{commit.author.name}} <{{commit.author.email}}></td></tr>
<tr class="header"><td class="field">committer:</td><td class="value">{{commit.committer.name}} <{{commit.committer.email}}></td></tr>
<tr class="header"><td class="field">date:</td><td class="value">{{ts_to_git_timestamp(ts=commit.ts_utc, tz=commit.ts_offset)}}</td></tr>
<tr class="header"><td class="field">parents:</td><td class="value">{% for parent in commit.parents -%}{% if loop.index0 > 0 -%}, {%endif-%}{% if parent in commits -%}<a href="{{parent}}.html">{{parent}}</a>{%else-%}{{parent}}{%endif-%}{%-endfor-%}</td></tr>
</table>
<div class="commit-message">
<pre style="margin: 0;">{{commit.message}}</pre>
</div>
{% if commit.diff -%}
{% for file in commit.diff.files -%}
<div class="commit-diff">
<div class="commit-diff-header">
<pre>diff --git a/{{file.basefile}} b/{{file.basefile}}
line changes: +{{file.additions}}/-{{file.deletions}}
index {{file.oldid | truncate(length=7,end="")}}..{{file.newid | truncate(length=7,end="")}}
--- {{file.oldfile}}
+++ {{file.newfile}}</pre>
</div>
{% for hunk in file.hunks -%}
<pre><span class="hunk-header">{{hunk.context}}</span>
{%- for line in hunk.lines -%}
<span class="{{ line.kind }}">{{line.prefix}}{{line.text}}</span>
{%- endfor -%}
</pre>
{% endfor -%}
<br/>
{% endfor -%}
{% endif -%}
</div>
</div>
{% endblock content %}
+38
View File
@@ -0,0 +1,38 @@
{% extends "base.html" %}
{% block tab_files_selected -%}selected{% endblock -%}
{% block subheader -%}
<div class="breadcrumbs"><span class="site-title"><a href="{{ root_url | safe }}/index.html">{{site_name | default(value="Itsy-Gitsy") }}</a></span>{% if name -%}&nbsp;&gt;&gt;&nbsp;<span class="site-title">{{ name }}</span>{% endif -%}&nbsp;&gt;&gt;&nbsp;<span class="repo-name">{{ dir.path }}</span></div>
{% endblock -%}
{% block content %}
<div class="nocap-header files">{{ dir.path }}</div>
<table class="summary-table files">
<colgroup>
<col class="file" />
<col class="type" />
<col class="mode" />
<col class="size" />
</colgroup>
<tr>
<th>File</th>
<th>Type</th>
<th>Mode</th>
<th>Size</th>
</tr>
{% for file in files -%}
<tr class="file">
{% if file.kind == "dir" -%}
{% set file_name = file.name ~ "/" -%}
{% else -%}
{% set file_name = file.name -%}
{% endif -%}
<td class="name">{% if file.id in file_ids -%}<a href="{{repo_url | safe}}/{{file.kind}}/{{file.id}}.html">{{file_name}}</a>{% else -%}{{file_name}}{% endif -%}</td>
<td class="type">{{file.kind}}</td>
<td class="mode">{{file.mode | mask(mask="0xfff") | oct}}</td>
<td class="size">{{file.size}}</td>
</tr>
{% endfor -%}
</table>
{% endblock content %}
+26
View File
@@ -0,0 +1,26 @@
{% extends "base.html" %}
{% block html_head_extra %}
<link rel="stylesheet" type="text/css" href="syntax.css" />
{% endblock html_head_extra %}
{% block tab_files_selected -%}selected{% endblock -%}
{% block subheader -%}
<div class="breadcrumbs"><span class="site-title"><a href="{{ root_url | safe }}/index.html">{{site_name | default(value="Itsy-Gitsy") }}</a></span>{% if name -%}&nbsp;&gt;&gt;&nbsp;<span class="site-title">{{ name }}</span>{% endif -%}&nbsp;&gt;&gt;&nbsp;<span class="repo-name">{{ file.path }}</span></div>
{% endblock -%}
{% block content %}
<div class="nocap-header file">{{ file.path }}</div>
<div class="file-contents">
{% if file.contents_safe -%}
{% if file.contents_preformatted -%}
<pre>{{file.contents | safe }}</pre>
{%- else -%}
{{file.contents | safe }}
{%- endif -%}
{%- else -%}
<pre style="margin: 0">{{file.contents}}</pre>
{%- endif -%}
</div>
{% endblock content %}
+34
View File
@@ -0,0 +1,34 @@
{% extends "base.html" %}
{% block tab_files_selected -%}selected{% endblock -%}
{% block content %}
<div class="full-header tags">File tree</div>
<table class="summary-table files">
<colgroup>
<col class="file" />
<col class="type nosmall" />
<col class="mode nosmall" />
<col class="size nosmall" />
</colgroup>
<tr>
<th>File</th>
<th class="nosmall">Type</th>
<th class="nosmall">Mode</th>
<th class="nosmall">Size</th>
</tr>
{% for file in root_files -%}
<tr class="file">
{% if file.kind == "dir" -%}
{% set file_name = file.name ~ "/" -%}
{% else -%}
{% set file_name = file.name -%}
{% endif -%}
<td class="name">{% if file.id in file_ids -%}<a href="{{repo_url | safe}}/{{file.kind}}/{{file.id}}.html">{{file_name}}</a>{% else -%}{{file_name}}{% endif -%}</td>
<td class="type nosmall">{{file.kind}}</td>
<td class="mode nosmall">{{file.mode | mask(mask="0xfff") | oct}}</td>
<td class="size nosmall">{{file.size}}</td>
</tr>
{% endfor -%}
</table>
{% endblock content %}
+7
View File
@@ -0,0 +1,7 @@
<div class="footer">
<hr/>
{% if extra and extra.generated_by_url -%}
Generated by <a href="{{extra.generated_by_url | safe}}">{{extra | get(key="generated_by", default="Itsy-Gitsy")}}</a> on {{ts_to_git_timestamp(ts=site_generated_ts, tz=site_generated_offset)}}</div>
{% else -%}
Generated by {{extra | get(key="generated_by", default="Itsy-Gitsy")}} on {{ts_to_git_timestamp(ts=site_generated_ts, tz=site_generated_offset)}}</div>
{% endif -%}
+9
View File
@@ -0,0 +1,9 @@
<div class="banner">
{% if name -%}
<div class="site-title">{{name | default(value="unnamed repository") }}</div>
<div class="site-description">{{metadata.description | default(value="") }}</div>
{% else -%}
<div class="site-title">{{site_name | default(value="Itsy-Gitsy") }}</div>
<div class="site-description">{{site_description | default(value="A collection of Git repositories")}}</div>
{% endif -%}
</div>
+40
View File
@@ -0,0 +1,40 @@
{% extends "base.html" %}
{% block tab_history_selected -%}selected{% endblock -%}
{% block content %}
<div class="full-header commit">History</div>
<table class="summary-table commits">
<colgroup>
<col class="oid" />
<col class="msg" />
<col class="author" />
<col class="date" />
<col class="diff nosmall" />
<col class="refs nosmall" />
</colgroup>
<tr>
<th>Commit</th>
<th>Message</th>
<th>Author</th>
<th>Date</th>
<th class="nosmall">Diff</th>
<th class="nosmall">Refs</th>
</tr>
{% for entry in history -%}
<tr class="commit">
<td class="oid">{% if entry.full_hash in commit_ids -%}<a href="commit/{{entry.full_hash}}.html">{{entry.short_hash}}</a>{% else -%}{{entry.short_hash}}{% endif -%}</td>
<td class="msg sans">{{entry.summary}}</td>
<td class="author sans">{{entry.author.name}}</td>
<td class="date">{{ts_to_date(ts=entry.ts_utc, tz=entry.ts_offset)}}</td>
<td class="diff nosmall">{% if entry.stats -%}{{entry.stats.files}} (+{{entry.stats.additions}}/-{{entry.stats.deletions}}){% endif -%}</td>
<td class="refs nosmall">{%- for ref in entry.alt_refs -%}{%- if loop.index0 < 3 -%}<span class="ref">{{ref}}</span>{%- endif -%}{%- endfor -%}{% if entry.alt_refs | length > 3 -%}<span class="ref">...</span>{% endif -%}</td>
</tr>
{% endfor -%}
</table>
<nav class="paginate" role="navigation">
<a class="paginate {% if not page.prev_page -%}disabled{% endif -%}" href="{{ page.prev_page }}">&lt; prev page</a>
<span class="paginate">[page {{ page.page_idx }} of {{ page.pages }}]</span>
<a class="paginate {% if not page.next_page -%}disabled{% endif -%}" href="{{ page.next_page }}">next page &gt;</a>
</nav>
{% endblock content %}
+26
View File
@@ -0,0 +1,26 @@
{% extends "base.html" %}
{% block content %}
<table class="repo-list">
<colgroup>
<col class="repo" />
<col class="description nosmall" />
<col class="website" />
<col class="updated" />
</colgroup>
<tr>
<th>Repository</th>
<th class="nosmall">Description</th>
<th>Website</th>
<th>Last Updated</th>
</tr>
{% for repo in repos | sort(attribute="last_ts_utc") | reverse -%}
<tr>
<td class="repo"><a href="{{repo.name}}/index.html">{{ repo.name }}</a></td>
<td class="description nosmall">{{repo.metadata.description}}</td>
<td class="website">{% if repo.metadata.website -%}<a href="{{repo.metadata.website}}">link</a>{% endif -%}</td>
<td class="date">{{ts_to_date(ts=repo.history[0].ts_utc, tz=repo.history[0].ts_offset)}}</td>
</tr>
{% endfor -%}
</table>
{% endblock content %}
@@ -16,6 +16,8 @@
}
body {
height: 100%;
margin: 0;
min-height: 100%;
font-family: monospace,monospace;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
@@ -23,9 +25,8 @@ body {
background-color: var(--nearwhite);
color: var(--nearblack);
}
body {
margin: 0;
min-height: 100%;
div {
color: var(--nearblack);
}
div.banner {
width: 95%;
+1
View File
@@ -0,0 +1 @@
<div class="breadcrumbs"><span class="site-title"><a href="{{ root_url | safe }}/index.html">{{site_name | default(value="Itsy-Gitsy") }}</a></span>{% if name -%}&nbsp;&gt;&gt;&nbsp;<span class="repo-name">{{ name }}</span>{% endif -%}</div>
+151
View File
@@ -0,0 +1,151 @@
{% extends "base.html" %}
{% block tab_summary_selected -%}selected{% endblock -%}
{% block content %}
<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>
{% if metadata.website -%}
<td class="value website"><a href="{{ metadata.website }}">{{metadata.website | default(value="[none]")}}</a></td>
{% else -%}
<td class="value website">{{metadata.website | default(value="[none]")}}</td>
{% endif-%}
</tr>
<tr class="clone">
<td class="field clone">Clone URL:</td>
<td class="value clone">{{metadata.clone | default(value="[none]")}}</td>
</tr>
</table>
<div class="summary-header commit">Recent history</div>
<table class="summary-table commits">
<colgroup>
<col class="oid" />
<col class="msg" />
<col class="author" />
<col class="date" />
<col class="diff nosmall" />
<col class="refs nosmall" />
</colgroup>
<tr>
<th>Commit</th>
<th>Message</th>
<th>Author</th>
<th>Date</th>
<th class="nosmall">Diff</th>
<th class="nosmall">Refs</th>
</tr>
{% for entry in history -%}
{% if loop.index0 < 10 -%}
<tr class="commit">
<td class="oid">{% if entry.full_hash in commit_ids -%}<a href="commit/{{entry.full_hash}}.html">{{entry.short_hash}}</a>{% else -%}{{entry.short_hash}}{% endif -%}</td>
<td class="msg sans">{{entry.summary}}</td>
<td class="author sans">{{entry.author.name}}</td>
<td class="date">{{ts_to_date(ts=entry.ts_utc, tz=entry.ts_offset)}}</td>
<td class="diff nosmall">{% if entry.stats -%}{{entry.stats.files}} (+{{entry.stats.additions}}/-{{entry.stats.deletions}}){% endif -%}</td>
<td class="refs nosmall">{%- for ref in entry.alt_refs -%}{%- if loop.index0 < 3 -%}<span class="ref">{{ref}}</span>{%- endif -%}{%- endfor -%}{% if entry.alt_refs | length > 3 -%}<span class="ref">...</span>{% endif -%}</td>
</tr>
{% endif -%}
{% endfor -%}
</table>
<div class="summary-header branches">Recent branches</div>
<table class="summary-table branches">
<colgroup>
<col class="branch" />
<col class="oid" />
<col class="msg nosmall" />
<col class="author" />
<col class="date" />
</colgroup>
<tr>
<th>Branch</th>
<th>Commit</th>
<th class="nosmall">Message</th>
<th>Author</th>
<th>Date</th>
</tr>
{% for entry in branches | sort(attribute="ts_utc") | reverse -%}
{% if loop.index0 < 10 -%}
<tr class="branch">
<td class="name"><a href="branch/{{entry.full_hash}}.html">{{entry.ref_name}}</a></td>
<td class="oid">{{entry.short_hash}}</td>
<td class="msg sans nosmall">{{entry.summary}}</td>
<td class="author sans">{{entry.author.name}}</td>
<td class="date">{{ts_to_date(ts=entry.ts_utc, tz=entry.ts_offset)}}</td>
</tr>
{% endif -%}
{% endfor -%}
</table>
<div class="summary-header tags">Recent tags</div>
<table class="summary-table tags">
<colgroup>
<col class="tag" />
<col class="oid" />
<col class="msg nosmall" />
<col class="author" />
<col class="date" />
</colgroup>
<tr>
<th>Tag</th>
<th>Commit</th>
<th class="nosmall">Message</th>
<th>Author</th>
<th>Date</th>
</tr>
{% for entry in tags | sort(attribute="ts_utc") | reverse -%}
{% if loop.index0 < 10 -%}
<tr class="tag">
<td class="name"><a href="tag/{{entry.full_hash}}.html">{{entry.ref_name}}</a></td>
<td class="oid">{{entry.short_hash}}</td>
<td class="msg sans nosmall">{{entry.summary}}</td>
<td class="author sans">{{entry.author.name}}</td>
<td class="date">{{ts_to_date(ts=entry.ts_utc, tz=entry.ts_offset)}}</td>
</tr>
{% endif -%}
{% endfor -%}
</table>
<div class="summary-header tags">File tree</div>
<table class="summary-table files">
<colgroup>
<col class="file" />
<col class="type nosmall" />
<col class="mode nosmall" />
<col class="size nosmall" />
</colgroup>
<tr>
<th>File</th>
<th class="nosmall">Type</th>
<th class="nosmall">Mode</th>
<th class="nosmall">Size</th>
</tr>
{% for file in root_files -%}
<tr class="file">
{% if file.kind == "dir" -%}
{% set file_name = file.name ~ "/" -%}
{% else -%}
{% set file_name = file.name -%}
{% endif -%}
<td class="name">{% if file.id in file_ids -%}<a href="{{repo_url | safe}}/{{file.kind}}/{{file.id}}.html">{{file_name}}</a>{% else -%}{{file_name}}{% endif -%}</td>
<td class="type nosmall">{{file.kind}}</td>
<td class="mode nosmall">{{file.mode | mask(mask="0xfff") | oct}}</td>
<td class="size nosmall">{{file.size}}</td>
</tr>
{% endfor -%}
</table>
{% endblock content %}
+16
View File
@@ -0,0 +1,16 @@
{% extends "base.html" %}
{% block tab_tags_selected -%}selected{% endblock -%}
{% block content %}
<div class="tag-page">
<table class="tag-header">
<tr class="header"><td class="field">tag:</td><td class="value">{{tag.ref_name}}</td></tr>
<tr class="header"><td class="field">hash:</td><td class="value">{{tag.full_hash}}</td></tr>
<tr class="header"><td class="field">tagged commit:</td><td class="value">{% if tag.tagged_id -%}{% if tag.tagged_id in commits -%}<a href="{{repo_url | safe}}/commit/{{tag.tagged_id}}.html">{{tag.tagged_id}}</a>{% else -%}{{tag.tagged_id}}{% endif -%}{% endif -%}</td></tr>
<tr class="header"><td class="field">author:</td><td class="value">{{tag.author.name}} <{{tag.author.email}}></td></tr>
<tr class="header"><td class="field">date:</td><td class="value">{{ts_to_git_timestamp(ts=tag.ts_utc, tz=tag.ts_offset)}}</td></tr>
</table>
<div class="tag-message"><pre>{{tag.message}}</pre></div>
</div>
{% endblock content %}
+37
View File
@@ -0,0 +1,37 @@
{% extends "base.html" %}
{% block tab_tags_selected -%}selected{% endblock -%}
{% block content %}
<div class="full-header tags">Tags</div>
<table class="summary-table tags">
<colgroup>
<col class="tag" />
<col class="oid" />
<col class="msg nosmall" />
<col class="author" />
<col class="date" />
</colgroup>
<tr>
<th>Tag</th>
<th>Commit</th>
<th class="nosmall">Message</th>
<th>Author</th>
<th>Date</th>
</tr>
{% for entry in tags -%}
<tr class="tag">
<td class="name"><a href="tag/{{entry.full_hash}}.html">{{entry.ref_name}}</a></td>
<td class="oid">{{entry.short_hash}}</td>
<td class="msg sans nosmall">{{entry.summary}}</td>
<td class="author sans">{{entry.author.name}}</td>
<td class="date">{{ts_to_date(ts=entry.ts_utc, tz=entry.ts_offset)}}</td>
</tr>
{% endfor -%}
</table>
<nav class="paginate" role="navigation">
<a class="paginate {% if not page.prev_page -%}disabled{% endif -%}" href="{{ page.prev_page }}">&lt; prev page</a>
<span class="paginate">[page {{ page.page_idx }} of {{ page.pages }}]</span>
<a class="paginate {% if not page.next_page -%}disabled{% endif -%}" href="{{ page.next_page }}">next page &gt;</a>
</nav>
{% endblock content %}