180 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			5.7 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", ROOT, a.description);
 | |
| 			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", ROOT, a.description);
 | |
| 			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", ROOT, a.description);
 | |
| 			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", ROOT, a.description);
 | |
| 			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", ROOT, a.description);
 | |
| 			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", ROOT, a.description);
 | |
| 			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", ROOT, a.description);
 | |
| 			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", ROOT, a.description);
 | |
| 			Body(youtubePosts, cPath + a.contentLinks[2], site, Red);
 | |
| 			cout << cPath + a.contentLinks[2] << endl;
 | |
| 			WriteToFile(youtubePosts, a.outputLinks[2]);
 | |
| 
 | |
| 			Document postTemplate{Document()};
 | |
| 			Head(postTemplate, "", "*TEXT* - ThePra", ROOT, "*TEXT*");
 | |
| 			Body(postTemplate, cPath + a.contentLinks[3], site);
 | |
| 			cout << cPath + a.contentLinks[3] << endl;
 | |
| 			WriteToFile(postTemplate, a.outputLinks[3]);
 | |
| 
 | |
| 		}
 | |
| 		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)
 | |
| {
 | |
| 	//cout << doc.ToString(Readability::MULTILINE) << endl;
 | |
| 	path PathToCheck = path(p);
 | |
| 	if (exists(PathToCheck))
 | |
| 	{
 | |
| 		remove(PathToCheck);
 | |
| 		doc.WriteToFile(p, Readability::MULTILINE);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		doc.WriteToFile(p, Readability::MULTILINE);
 | |
| 	}
 | |
| }
 | |
| 
 |