MyWebsitesGenerator/TestWebGen/GeneralBuilder.cpp
2017-05-01 21:51:45 +02:00

173 lines
5.3 KiB
C++

#pragma once
#include "stdafx.h"
#include "GeneralBuilder.h"
#include "ThePraDev.h"
#include "ThePraArt.h"
GeneralBuilder::GeneralBuilder()
{
}
GeneralBuilder::~GeneralBuilder()
{
}
void GeneralBuilder::BuildThePraSite(Sites site)
{
Utilities tool{Utilities()};
string cPath{tool.GetCurrentPath()};
cout << cPath << endl;
switch (site)
{
case DEV:
{
ThePraDev a{ThePraDev()};
string link = "https://www.thepra-dev.com/", html = ".html";
Document index = Document();
Head(index, link + "index" + html, "ThePra WebSite");
Body(index, cPath + a.contentLinks[0], site);
cout << cPath + a.contentLinks[0] << endl;
WriteToFile(index, a.outputLinks[0]);
Document code = Document();
Head(code, link + "code" + html, "ThePra Code");
Body(code, cPath + a.contentLinks[1], site);
cout << cPath + a.contentLinks[1] << endl;
WriteToFile(code, a.outputLinks[1]);
Document blog = Document();
Head(blog, link + "blog" + html, "ThePra Blog");
Body(blog, cPath + a.contentLinks[2], site);
cout << cPath + a.contentLinks[2] << endl;
WriteToFile(blog, a.outputLinks[2]);
Document about = Document();
Head(about, link + "about" + html, "ThePra About");
Body(about, cPath + a.contentLinks[3], site);
cout << cPath + a.contentLinks[3] << endl;
WriteToFile(about, a.outputLinks[3]);
Document contact = Document();
Head(contact, link + "contact" + html, "ThePra Contact");
Body(contact, cPath + a.contentLinks[4], site);
cout << cPath + a.contentLinks[4] << endl;
WriteToFile(contact, a.outputLinks[4]);
}
break;
case ART:
{
ThePraArt a{ThePraArt()};
string link = "http://art.thepra-dev.com/", html = ".html";
Document index = Document();
Head(index, link + "index" + html, "ThePra Art Blog");
Body(index, cPath + a.contentLinks[0], site);
cout << cPath + a.contentLinks[0] << endl;
WriteToFile(index, a.outputLinks[0]);
Document aboutme = Document();
Head(aboutme, link + "aboutme" + html, "ThePra About");
Body(aboutme, cPath + a.contentLinks[1], site);
cout << cPath + a.contentLinks[1] << endl;
WriteToFile(aboutme, a.outputLinks[1]);
Document youtubePosts = Document();
Head(youtubePosts, link + "youtubeposts" + html, "ThePra Youtube videos");
Body(youtubePosts, cPath + a.contentLinks[2], site, Red);
cout << cPath + a.contentLinks[2] << endl;
WriteToFile(youtubePosts, a.outputLinks[2]);
}
break;
default:
break;
}
}
void GeneralBuilder::Head(Document &file,
string canonicalURL,
string title,
Levels level,
string description,
list<string> cssStyles)
{
string whichLevel = ChooseLevel(level);
// ESSENTIAL
Node charset = Node(meta).SetAttribute("charset", "utf-8").UseClosingTag(false);
Node edge = Node(meta).SetAttribute(http_equiv, "x-ua-compatible").SetAttribute(content, "ie=edge").UseClosingTag(false);
Node viewport = Node(meta).SetAttribute(name, "viewport").SetAttribute(content, "width=device-width, initial-scale=1").UseClosingTag(false);
Node titleP = Node("title", title);
// OTHER
Node canon = Node(link).SetAttribute(rel, "canonical").SetAttribute(href, canonicalURL).UseClosingTag(false);
Node base = Node("base").SetAttribute(href, canonicalURL).UseClosingTag(false);
Node contentSecurityPolicy = Node(meta).SetAttribute(http_equiv, "Content-Security-Policy").SetAttribute(content, "default-src 'self'").UseClosingTag(false);
Node descriptionP = Node(meta).SetAttribute(name, "description").SetAttribute(content, description).UseClosingTag(false);
Node robots = Node(meta).SetAttribute(name, "robots").SetAttribute(content, "index,follow,noodp").UseClosingTag(false);
Node googleBot = Node(meta).SetAttribute(name, "googlebot").SetAttribute(content, "index,follow").UseClosingTag(false);
Node referrer = Node(meta).SetAttribute(name, "referrer").SetAttribute(content, "no-referrer").UseClosingTag(false);
Node icon = Node(link).SetAttribute(rel, "icon").SetAttribute(href, whichLevel + "icon/favicon.png").SetAttribute("type", "image/png").UseClosingTag(false);
file.AddNodeToHead(charset);
file.AddNodeToHead(edge);
file.AddNodeToHead(viewport);
file.AddNodeToHead(titleP);
file.AddNodeToHead(base);
file.AddNodeToHead(canon);
if (cssStyles.front() == "")
{
Node style = Node(link).SetAttribute(rel, "stylesheet").SetAttribute(href, whichLevel + "style.css").UseClosingTag(false);
file.AddNodeToHead(style);
}
else
{
for each (string s in cssStyles)
{
Node style = Node(link).SetAttribute(rel, "stylesheet").SetAttribute(href, whichLevel + s).UseClosingTag(false);
file.AddNodeToHead(style);
}
}
//file.AddNodeToHead(contentSecurityPolicy);
file.AddNodeToHead(descriptionP);
file.AddNodeToHead(robots);
file.AddNodeToHead(googleBot);
file.AddNodeToHead(referrer);
file.AddNodeToHead(icon);
}
void GeneralBuilder::Body(Document &file, string cPath, Sites site, Col color, PageType type)
{
switch (site)
{
case DEV:
{
ThePraDev::BuildBody(file, cPath, ROOT, type);
}
case ART:
{
ThePraArt::BuildBody(file, cPath, ROOT, color, type);
}
default:// I'm drunk
break;
}
}
void GeneralBuilder::WriteToFile(Document doc, string p)
{
path PathToCheck = path(p);
if (exists(PathToCheck))
{
remove(PathToCheck);
doc.WriteToFile(p, Readability::MULTILINE);
}
else
{
doc.WriteToFile(p, Readability::MULTILINE);
}
}