#include <fmt/chrono.h>
#include "biawebstrings.hpp"
#include "biawebdocument.hpp"
+#include "biawebtemplate.hpp"
// to implement a list of items (documents) with creation/modified date/time display
namespace biaweb {
// Just the required fields to build the item
std::string title;
std::string url;
+ std::string desc;
std::time_t ctime;
std::time_t mtime;
public:
- DocListItem (std::string title, std::string url,
- std::time_t ctime, std::time_t mtime ) {
- this->title = escape_html (title);
- this->url = url;
- this->ctime = ctime;
- this->mtime = mtime;
+ DocListItem (Document *doc, std::string urlpath) {
+ this->title = doc->get_title ();
+ this->url = urlpath + doc->get_filename() + ".html";
+ this->ctime = doc->get_creation_date ();
+ this->mtime = doc->get_modified_date ();
+ this->desc = doc->get_meta_desc ();
+ }
+
+ std::string get_desc () {
+ return this->desc;
}
std::time_t get_mtime() {
return this->mtime;
}
- void set_mtime(std::time_t mtime) {
- this->mtime = mtime;
- }
+
std::time_t get_ctime() {
return this->ctime;
}
- void set_ctime(std::time_t ctime) {
- this->ctime = ctime;
- }
std::string get_url() {
return this->url;
}
- void set_url(std::string url) {
- this->url = url;
- }
-
std::string get_title() {
return this->title;
}
- void set_title(std::string title) {
- this->title = escape_html (title);
- }
// output to HTML vide the template
- std::string to_html (std::string templatedir);
+ std::string to_html (Template *t);
};
// output to HTML vide the template
- std::string DocListItem::to_html (std::string templatedir) {
- std::ifstream templ (templatedir + "/doclistitem.tpl.html");
- std::string templstr ((std::istreambuf_iterator<char> (templ)),
- (std::istreambuf_iterator<char> ()) );
- templ.close ();
+ std::string DocListItem::to_html (Template *t) {
+ std::string templstr = t->get_doclistitem_tpl ();
+ std::tm c, m;
+ c = *std::localtime (&this->ctime);
+ m = *std::localtime (&this->mtime);
std::string outputhtml = fmt::format (templstr, fmt::arg("url", this->url),
- fmt::arg("doctitle", this->title),
- fmt::arg("cdate", *std::localtime (&this->ctime)),
- fmt::arg("mdate", *std::localtime (&this->mtime)));
+ fmt::arg("doctitle", this->title),
+ fmt::arg("desc", this->desc),
+ fmt::arg("cdate", c),
+ fmt::arg("mdate", m));
return outputhtml;
}
std::list<DocListItem> items;
public:
void set_title (std::string title) {
- this->title = escape_html (title);
+ this->title = title;
}
// add a document item
void add_document_item (DocListItem docitem) {
this->items.insert (this->items.cend(), docitem);
}
// render to HTML from a template
- std::string to_html (std::string templatedir);
+ std::string to_html (Template *t);
};
- std::string DocList::to_html (std::string templatedir) {
- std::ifstream templ (templatedir + "/doclist.tpl.html");
- std::string templstr ( (std::istreambuf_iterator<char> (templ) ),
- (std::istreambuf_iterator<char> ()));
-
- templ.close ();
+ std::string DocList::to_html (Template *t) {
+ std::string templstr = t->get_doclist_tpl ();
std::string outputhtml = "";
// if the number of elements is non zero
if (this->items.size () != 0) {
std::string docitems = "";
for (DocListItem item : this->items)
- docitems += item.to_html (templatedir);
+ docitems += item.to_html (t);
outputhtml = fmt::format (templstr,
fmt::arg ("title", this->title),