Moves navbar generation to its own class and adds ordering of categories

This commit is contained in:
Rosia E Evans 2023-10-11 10:35:27 +01:00
parent e514df19fb
commit 5765d04fe6
12 changed files with 88 additions and 41 deletions

View file

@ -16,6 +16,10 @@
<li><a href=/TestFullArticle.html>Example Post</a></li> <li><a href=/TestFullArticle.html>Example Post</a></li>
<li><a href=/index.html>Welcome!</a></li> <li><a href=/index.html>Welcome!</a></li>
<h2>Newer Work</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>Older Work</h2> <h2>Older Work</h2>
<li><a href=/MindMap.html>Mind Map Maker</a></li> <li><a href=/MindMap.html>Mind Map Maker</a></li>
<li><a href=/Aardvark.html>AardvarkXR</a></li> <li><a href=/Aardvark.html>AardvarkXR</a></li>
@ -23,8 +27,7 @@
<li><a href=/CatTowerDefence.html>Tower defence game</a></li> <li><a href=/CatTowerDefence.html>Tower defence game</a></li>
<h2>Newer Work</h2> <h2>Thoughts And Essays</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>University</h2> <h2>University</h2>

View file

@ -16,6 +16,10 @@
<li><a href=/TestFullArticle.html>Example Post</a></li> <li><a href=/TestFullArticle.html>Example Post</a></li>
<li><a href=/index.html>Welcome!</a></li> <li><a href=/index.html>Welcome!</a></li>
<h2>Newer Work</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>Older Work</h2> <h2>Older Work</h2>
<li><a href=/MindMap.html>Mind Map Maker</a></li> <li><a href=/MindMap.html>Mind Map Maker</a></li>
<li><a href=/Aardvark.html>AardvarkXR</a></li> <li><a href=/Aardvark.html>AardvarkXR</a></li>
@ -23,8 +27,7 @@
<li><a href=/CatTowerDefence.html>Tower defence game</a></li> <li><a href=/CatTowerDefence.html>Tower defence game</a></li>
<h2>Newer Work</h2> <h2>Thoughts And Essays</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>University</h2> <h2>University</h2>

View file

@ -16,6 +16,10 @@
<li><a href=/TestFullArticle.html>Example Post</a></li> <li><a href=/TestFullArticle.html>Example Post</a></li>
<li><a href=/index.html>Welcome!</a></li> <li><a href=/index.html>Welcome!</a></li>
<h2>Newer Work</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>Older Work</h2> <h2>Older Work</h2>
<li><a href=/MindMap.html>Mind Map Maker</a></li> <li><a href=/MindMap.html>Mind Map Maker</a></li>
<li><a href=/Aardvark.html>AardvarkXR</a></li> <li><a href=/Aardvark.html>AardvarkXR</a></li>
@ -23,8 +27,7 @@
<li><a href=/CatTowerDefence.html>Tower defence game</a></li> <li><a href=/CatTowerDefence.html>Tower defence game</a></li>
<h2>Newer Work</h2> <h2>Thoughts And Essays</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>University</h2> <h2>University</h2>

View file

@ -16,6 +16,10 @@
<li><a href=/TestFullArticle.html>Example Post</a></li> <li><a href=/TestFullArticle.html>Example Post</a></li>
<li><a href=/index.html>Welcome!</a></li> <li><a href=/index.html>Welcome!</a></li>
<h2>Newer Work</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>Older Work</h2> <h2>Older Work</h2>
<li><a href=/MindMap.html>Mind Map Maker</a></li> <li><a href=/MindMap.html>Mind Map Maker</a></li>
<li><a href=/Aardvark.html>AardvarkXR</a></li> <li><a href=/Aardvark.html>AardvarkXR</a></li>
@ -23,8 +27,7 @@
<li><a href=/CatTowerDefence.html>Tower defence game</a></li> <li><a href=/CatTowerDefence.html>Tower defence game</a></li>
<h2>Newer Work</h2> <h2>Thoughts And Essays</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>University</h2> <h2>University</h2>

View file

@ -16,6 +16,10 @@
<li><a href=/TestFullArticle.html>Example Post</a></li> <li><a href=/TestFullArticle.html>Example Post</a></li>
<li><a href=/index.html>Welcome!</a></li> <li><a href=/index.html>Welcome!</a></li>
<h2>Newer Work</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>Older Work</h2> <h2>Older Work</h2>
<li><a href=/MindMap.html>Mind Map Maker</a></li> <li><a href=/MindMap.html>Mind Map Maker</a></li>
<li><a href=/Aardvark.html>AardvarkXR</a></li> <li><a href=/Aardvark.html>AardvarkXR</a></li>
@ -23,8 +27,7 @@
<li><a href=/CatTowerDefence.html>Tower defence game</a></li> <li><a href=/CatTowerDefence.html>Tower defence game</a></li>
<h2>Newer Work</h2> <h2>Thoughts And Essays</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>University</h2> <h2>University</h2>

View file

@ -16,6 +16,10 @@
<li><a href=/TestFullArticle.html>Example Post</a></li> <li><a href=/TestFullArticle.html>Example Post</a></li>
<li><a href=/index.html>Welcome!</a></li> <li><a href=/index.html>Welcome!</a></li>
<h2>Newer Work</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>Older Work</h2> <h2>Older Work</h2>
<li><a href=/MindMap.html>Mind Map Maker</a></li> <li><a href=/MindMap.html>Mind Map Maker</a></li>
<li><a href=/Aardvark.html>AardvarkXR</a></li> <li><a href=/Aardvark.html>AardvarkXR</a></li>
@ -23,8 +27,7 @@
<li><a href=/CatTowerDefence.html>Tower defence game</a></li> <li><a href=/CatTowerDefence.html>Tower defence game</a></li>
<h2>Newer Work</h2> <h2>Thoughts And Essays</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>University</h2> <h2>University</h2>

View file

@ -17,11 +17,12 @@ nav{
} }
nav h1{ nav h1{
font-size: 1.2rem; font-size: 1.3rem;
} }
nav h2{ nav h2{
font-size: 1rem; font-size: 1rem;
margin-bottom: 0;
} }
article{ article{

View file

@ -16,6 +16,10 @@
<li><a href=/TestFullArticle.html>Example Post</a></li> <li><a href=/TestFullArticle.html>Example Post</a></li>
<li><a href=/index.html>Welcome!</a></li> <li><a href=/index.html>Welcome!</a></li>
<h2>Newer Work</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>Older Work</h2> <h2>Older Work</h2>
<li><a href=/MindMap.html>Mind Map Maker</a></li> <li><a href=/MindMap.html>Mind Map Maker</a></li>
<li><a href=/Aardvark.html>AardvarkXR</a></li> <li><a href=/Aardvark.html>AardvarkXR</a></li>
@ -23,8 +27,7 @@
<li><a href=/CatTowerDefence.html>Tower defence game</a></li> <li><a href=/CatTowerDefence.html>Tower defence game</a></li>
<h2>Newer Work</h2> <h2>Thoughts And Essays</h2>
<li><a href=/ThisSite.html>This Site</a></li>
<h2>University</h2> <h2>University</h2>

View file

@ -17,11 +17,12 @@ nav{
} }
nav h1{ nav h1{
font-size: 1rem; font-size: 1.3rem;
} }
nav h2{ nav h2{
font-size: 1rem; font-size: 1rem;
margin-bottom: 0;
} }
article{ article{

View file

@ -14,7 +14,10 @@ BlogPageBuilder::BlogPageBuilder(std::string templateFileUrl, std::string inFold
parser = new BlogParser(); parser = new BlogParser();
collectPages(); collectPages();
navSection = generateNavSection();
NavBarGenerator* navGen = new NavBarGenerator();
navSection = navGen->generateNavSection(pages, options);
delete navGen;
} }
BlogPageBuilder::~BlogPageBuilder() BlogPageBuilder::~BlogPageBuilder()
@ -65,9 +68,12 @@ void BlogPageBuilder::collectPages()
} }
} }
std::string BlogPageBuilder::generateCategories(std::string rootFolderUrl) std::string NavBarGenerator::generateCategories(std::string rootFolderUrl)
{ {
std::stringstream buffer; std::stringstream buffer;
std::set<std::string> categories;
auto directoryIterator = std::filesystem::directory_iterator(rootFolderUrl); auto directoryIterator = std::filesystem::directory_iterator(rootFolderUrl);
for (auto folder : directoryIterator) for (auto folder : directoryIterator)
{ {
@ -76,16 +82,20 @@ std::string BlogPageBuilder::generateCategories(std::string rootFolderUrl)
std::string path = folder.path(); std::string path = folder.path();
std::string folderName = path.substr(path.find_last_of("/")+1, path.length()-path.find_last_of("/")); std::string folderName = path.substr(path.find_last_of("/")+1, path.length()-path.find_last_of("/"));
buffer << "\n<h2>" << folderName << "</h2>\n"; categories.insert(folderName);
buffer << generateCategories(folder.path());
buffer << "\n";
} }
} }
for (std::string category : categories)
{
buffer << "\n<h2>" << category << "</h2>\n";
buffer << generateCategories(rootFolderUrl + "/" + category);
buffer << "\n";
}
return buffer.str(); return buffer.str();
} }
std::string BlogPageBuilder::findDeepestCategory(std::string url) std::string NavBarGenerator::findDeepestCategory(std::string url)
{ {
int categoryEnd = url.rfind("/"); int categoryEnd = url.rfind("/");
int categoryStart = url.rfind("/", categoryEnd-1); int categoryStart = url.rfind("/", categoryEnd-1);
@ -94,7 +104,7 @@ std::string BlogPageBuilder::findDeepestCategory(std::string url)
return url.substr(categoryStart, categoryEnd); return url.substr(categoryStart, categoryEnd);
} }
std::string BlogPageBuilder::insertPagesIntoCategories(std::string categories) std::string NavBarGenerator::insertPagesIntoCategories(std::string categories, std::vector<Page*> pages)
{ {
for (Page* page : pages) for (Page* page : pages)
{ {
@ -122,12 +132,13 @@ std::string BlogPageBuilder::insertPagesIntoCategories(std::string categories)
return categories; return categories;
} }
std::string BlogPageBuilder::generateNavSection() std::string NavBarGenerator::generateNavSection(std::vector<Page*> pages, int options)
{ {
this->options = options;
std::string buffer; std::string buffer;
buffer.append(navHeader); buffer.append(navHeader);
buffer.append(generateCategories(SOURCE_FILE_FOLDER)); buffer.append(generateCategories(SOURCE_FILE_FOLDER));
buffer = insertPagesIntoCategories(buffer); buffer = insertPagesIntoCategories(buffer, pages);
return buffer; return buffer;
} }
@ -144,3 +155,8 @@ bool BlogPageBuilder::isOptionEnabled(int flag)
{ {
return (options & flag) == flag; return (options & flag) == flag;
} }
bool NavBarGenerator::isOptionEnabled(int flag)
{
return (options & flag) == flag;
}

View file

@ -5,6 +5,7 @@
#include <sstream> #include <sstream>
#include <vector> #include <vector>
#include <filesystem> #include <filesystem>
#include <set>
#include "BlogParser.h" #include "BlogParser.h"
#include "Page.h" #include "Page.h"
@ -14,15 +15,30 @@
* along with an optional articleIdentifier. The template is searched for this * along with an optional articleIdentifier. The template is searched for this
* and the blog is placed after it. * and the blog is placed after it.
*/ */
enum OptionFlags
class BlogPageBuilder
{
public:
enum OptionFlags
{ {
NONE = 0X0, NONE = 0X0,
HIDE_PRIVATE = 0x1 HIDE_PRIVATE = 0x1
}; };
class NavBarGenerator
{
private:
std::string navHeader = "\n<h1>Navigation</h1>\n\n";
int options;
std::string generateCategories(std::string rootFolderUrl);
std::string insertPagesIntoCategories(std::string categories, std::vector<Page*> pages);
std::string findDeepestCategory(std::string url);
bool isOptionEnabled(int flag);
public:
std::string generateNavSection(std::vector<Page*> pages, int options);
};
class BlogPageBuilder
{
private: private:
int options; int options;
@ -42,14 +58,6 @@ private:
int calculateIdentifierLocation(std::string id, std::string text); int calculateIdentifierLocation(std::string id, std::string text);
void collectPages(); void collectPages();
// TODO separate these into a separate object
std::string navHeader = "\n<h1>Navigation</h1>\n\n";
std::string generateNavSection();
std::string generateCategories(std::string rootFolderUrl);
std::string insertPagesIntoCategories(std::string categories);
std::string findDeepestCategory(std::string url);
void createPage(Page* page); void createPage(Page* page);
bool isOptionEnabled(int flag); bool isOptionEnabled(int flag);

View file

@ -65,9 +65,9 @@ int main(int argc, char* argv[])
std::string output = getArgValue(argc, argv, "-out="); std::string output = getArgValue(argc, argv, "-out=");
if (output == "") if (output == "")
output = OUTPUT_FILE_FOLDER; output = OUTPUT_FILE_FOLDER;
int flags = BlogPageBuilder::OptionFlags::NONE; int flags = OptionFlags::NONE;
if (doesArgExist(argc, argv, "-hide")) if (doesArgExist(argc, argv, "-hide"))
flags |= BlogPageBuilder::OptionFlags::HIDE_PRIVATE; flags |= OptionFlags::HIDE_PRIVATE;
// generated pages // generated pages
BlogPageBuilder* builder = new BlogPageBuilder(RESOURCE_FOLDER "/Templates/BlogPageTemplate.html", source, output, flags); BlogPageBuilder* builder = new BlogPageBuilder(RESOURCE_FOLDER "/Templates/BlogPageTemplate.html", source, output, flags);