startgitStatic page generator for git repositories |
git clone git://git.dimitrijedobrota.com/startgit.git |
Log | Files | Refs | README | LICENSE | HACKING | CONTRIBUTING | CODE_OF_CONDUCT | BUILDING | |
commit | e6c7a87e81e7d8b564ecac48a068a7c6b8682467 |
parent | 2ec9390f72bcb110499d3c18d85c2e50d23f4dfe |
author | Dimitrije Dobrota <mail@dimitrijedobrota.com> |
date | Thu, 9 Jan 2025 11:13:56 +0100 |
Switch branch dropdown
Diffstat:M | CMakeLists.txt | | | +- |
M | source/main.cpp | | | ++++++++++++++++++++++++++++ |
2 files changed, 29 insertions(+), 1 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
@@ -4,7 +4,7 @@ include(cmake/prelude.cmake)
project(
startgit
VERSION 0.1.6
VERSION 0.1.7
DESCRIPTION "Static page generator for git repositories"
HOMEPAGE_URL "https://git.dimitrijedobrota.com/stargit.git"
LANGUAGES CXX
diff --git a/source/main.cpp b/source/main.cpp
@@ -70,6 +70,29 @@ void write_header(std::ostream& ost,
.set("class", "switch_label");
}
void write_title(std::ostream& ost,
const startgit::repository& repo,
const std::string& branch_name)
{
using namespace hemplate; // NOLINT
ost << html::h1(repo.get_name());
ost << html::h2(repo.get_description());
ost << html::label("Branch: ").set("for", "branch");
ost << html::select(
{{"id", "branch"}, {"onChange", "switchPage(this.value)"}});
for (const auto& branch : repo.get_branches()) {
auto option = html::option(branch.get_name());
option.set("value", branch.get_name());
if (branch.get_name() == branch_name) {
option.set("selected", "true");
}
ost << option;
}
ost << html::select();
}
void write_commit_table(std::ostream& ost, git2wrap::revwalk& rwalk)
{
using namespace hemplate; // NOLINT
@@ -131,6 +154,10 @@ void write_footer(std::ostream& ost)
ost << html::main();
ost << html::div();
ost << html::script(" ").set("src", "/scripts/main.js");
ost << html::script(
"function switchPage(value) { "
"history.replaceState(history.state, '', `${value}_log.html`); "
"location.reload();}");
ost << html::body();
ost << html::html();
}
@@ -222,6 +249,7 @@ int main(int argc, char* argv[])
branch.get_name(),
repo.get_owner(),
repo.get_description());
write_title(ofs, repo, branch.get_name());
write_commit_table(ofs, rwalk);
write_footer(ofs);
}