From: Harishankar Date: Sat, 16 May 2020 15:15:00 +0000 (+0530) Subject: Document tree generation to HTML output completed X-Git-Url: https://harishankar.org/repos/?p=biaweb2.git;a=commitdiff_plain;h=abd61eb094efbfca05e6fe0f1dd34a3e8e7de7a2 Document tree generation to HTML output completed Completed the document tree generation - now the tree is created along with all children and also the documents in the tree --- diff --git a/biaweb.cpp b/biaweb.cpp index 0d9a3e8..b1c827b 100644 --- a/biaweb.cpp +++ b/biaweb.cpp @@ -14,13 +14,17 @@ int main (int argc, char *argv[]) { std::shared_ptr a2 (new DocumentTree("Child a2")); std::shared_ptr a3 (new DocumentTree("Child a3")); std::shared_ptr a4 (new DocumentTree("Child a4")); + std::shared_ptr d1 (new Document("Test Document", "", + "")); + d1.get()->set_markdown_content ("# Heading \n\nThis is some text, hello world"); + a1.get()->add_document (d1.get()); a3.get()->add_child (a4.get()); a1.get()->add_child (a2.get()); a1.get()->add_child (a3.get()); tree.get()->add_child (a1.get()); std::cout << a3.get()->stub_hierarchy () << a3.get()->get_stub () << std::endl; tree.get()->visualize_tree (); - tree.get()->create_index (convert_title (argv[1])); + tree.get()->create_tree_html (convert_title (argv[1])); } else std::cout << "Usage: " << argv[0] << "
" << std::endl; diff --git a/biawebdocument.hpp b/biawebdocument.hpp index f001373..0c0b74c 100644 --- a/biawebdocument.hpp +++ b/biawebdocument.hpp @@ -41,7 +41,7 @@ namespace biaweb { this->meta_keywords = meta_keywords; this->content = content; this->is_index = is_index; - if (is_index) + if (! is_index) this->filename = convert_title (title); else this->filename = "index"; @@ -52,6 +52,8 @@ namespace biaweb { // set whether this is the index document void set_index (bool index = true) { this->is_index = index; + index == true ? this->filename = "index" : + this->filename = convert_title (this->title); } // get whether this is the index document @@ -59,6 +61,11 @@ namespace biaweb { return this->is_index; } + // get the file name + std::string get_filename () { + return this->filename; + } + // set the document modification date void set_modified_date (std::time_t modif) { this->mdate = modif; diff --git a/biawebdocumenttree.hpp b/biawebdocumenttree.hpp index 41aa81a..cf75c86 100644 --- a/biawebdocumenttree.hpp +++ b/biawebdocumenttree.hpp @@ -41,7 +41,7 @@ namespace biaweb { } // create the document index for this tree - void create_index (std::string destdir); + void create_tree_html (std::string destdir); // set the title void set_title (std::string title) { @@ -131,8 +131,9 @@ namespace biaweb { child.visualize_tree (); } - // create the tree index - the index file for this tree - void DocumentTree::create_index (std::string destdir) { + // create the tree - the index file for this tree and all the documents and + // the child trees recursively + void DocumentTree::create_tree_html (std::string destdir) { std::unique_ptr index (new Document (this->title)); index.get()->set_index (); // set the file name path @@ -145,26 +146,63 @@ namespace biaweb { if (urlpath != "") urlpath += "/"; - // create the sidebar - std::unique_ptr bar (new SideBar ()); - bar.get()->set_title (SUB_CAT + this->title); + // create the sidebars + // First sidebar + // Create a link to the index page and + // If this tree has a parent, create a sidebar link to the level up + std::unique_ptr bar1 (new SideBar()); + SideBarItem item0; + item0.set_sidebar_text (INDEX); + item0.set_sidebar_url (urlpath + "index.html"); + bar1.get()->add_sidebar_item (item0); + if (this->get_parent() != nullptr) { + SideBarItem item1; + item1.set_sidebar_text (GO_UP); + item1.set_sidebar_url (this->stub_hierarchy() + "index.html"); + bar1.get()->add_sidebar_item (item1); + } + index.get()->add_side_bar (*bar1.get()); + + // create a sidebar for the child levels if there are children + std::unique_ptr bar2 (new SideBar ()); + bar2.get()->set_title (SUB_CAT + this->title); for (DocumentTree tree : this->children) { // we use site relative URLs that rely on the base href tag // so for biaweb generated sites, the base href tag should be // used in the main template SideBarItem item (tree.get_title(), urlpath + tree.stub + "/" + "index.html"); - bar.get()->add_sidebar_item (item); + bar2.get()->add_sidebar_item (item); } - index.get()->add_side_bar (*bar.get()); + index.get()->add_side_bar (*bar2.get()); // create the path and then the index file std::filesystem::create_directories (filepath); - index->output_to_html (filepath); + + // Create the list of documents in this tree with links + // Reuse the sidebar class and sidebaritem class which is + // basically a list of links but instead of adding a sidebar + // add it to the content portion + SideBar article_list; + article_list.set_title (this->title + ": " + ART_LIST); + for (Document doc : this->docs) { + SideBarItem item; + item.set_sidebar_text (doc.get_title()); + item.set_sidebar_url (urlpath + doc.get_filename() + ".html"); + article_list.add_sidebar_item (item); + // output the document also, add the side bars + if (this->get_parent() != nullptr) + doc.add_side_bar (*bar1.get()); + doc.add_side_bar (*bar2.get()); + doc.output_to_html (filepath); + } + index.get()->set_content (article_list.to_html()); + + index.get()->output_to_html (filepath); // create index for children for (DocumentTree tree : this->children) - tree.create_index (destdir); + tree.create_tree_html (destdir); } } diff --git a/biawebsidebar.hpp b/biawebsidebar.hpp index 5b73b75..75761da 100644 --- a/biawebsidebar.hpp +++ b/biawebsidebar.hpp @@ -6,7 +6,7 @@ #include #include "biawebutil.hpp" -// classes to describe the sidebar and sidebar item containers which form part of +// classes to describe the a list of items and sidebar item containers which form part of // main document namespace biaweb { // class to represent a sidebar item which can contain a text and link or only diff --git a/biawebstrings.hpp b/biawebstrings.hpp index 8e2f947..df9af51 100644 --- a/biawebstrings.hpp +++ b/biawebstrings.hpp @@ -4,6 +4,8 @@ namespace biaweb { const char* GO_UP = "Go up"; const char* SUB_CAT = "Sub categories: "; + const char* ART_LIST = "List of Articles"; + const char* INDEX = "Index Page"; } #endif diff --git a/templates/main.tpl.html b/templates/main.tpl.html index 0bdf62f..b506bc9 100644 --- a/templates/main.tpl.html +++ b/templates/main.tpl.html @@ -40,7 +40,7 @@ width: 32%; padding: 1%; } - div#sidebar a, a:visited { + div#sidebar a, div#sidebar a:visited { color: white; } div#main {