// The main method that causes the front page to be created. public void Create() { string keywords = "family tree history " + GMConfig.Instance.OwnersName; string title = GMConfig.Instance.SiteTitle; HTMLFile f = null; try { f = new HTMLFile(GMConfig.Instance.FrontPageURL, title, PageDescription, keywords); // Creates a new file, and puts standard header html into it. f.WriteLine(" <div id=\"page\"> <!-- page -->"); f.WriteLine(" <div id=\"cover\"> <!-- cover -->"); f.WriteLine("<h1>{0}</h1>", EscapeHTML(title, false)); if (!string.IsNullOrEmpty(GMConfig.Instance.FrontPageImageFilename)) { Rectangle newArea = new Rectangle(0, 0, 0, 0); string pictureFile = CopyMultimedia(GMConfig.Instance.FrontPageImageFilename, "", 0, 0, ref newArea, null); if (!string.IsNullOrEmpty(pictureFile)) { f.WriteLine("<p><img src=\"{0}\" alt=\"Front page image\" /></p>", pictureFile); } } if (!string.IsNullOrEmpty(GMConfig.Instance.CommentaryText)) { if (GMConfig.Instance.CommentaryIsHtml) { f.WriteLine("<p>{0}</p>", GMConfig.Instance.CommentaryText); } else { f.WriteLine("<p>{0}</p>", EscapeHTML(GMConfig.Instance.CommentaryText, false)); } } if (GMConfig.Instance.ShowFrontPageStats) { string individuals = fStats.Individuals == 0 ? "no" : fStats.Individuals.ToString(); individuals += " individual"; if (fStats.Individuals != 1) { individuals += "s"; } string sources = fStats.Sources == 0 ? "" : string.Concat(", cross-referenced to ", fStats.Sources.ToString(), " source"); if (fStats.Sources > 1) { sources += "s"; } string fileType = fStats.NonPicturesIncluded ? "multimedia file" : "image"; string multimedia = fStats.MultimediaFiles == 0 ? "" : string.Concat(". There are links to ", fStats.MultimediaFiles.ToString(), " ", fileType); if (fStats.MultimediaFiles > 1) { multimedia += "s"; } f.WriteLine(string.Concat(" <p>This website contains records on ", individuals, sources, multimedia, ".</p>")); } f.WriteLine(" <div id=\"links\"> <!-- links -->"); f.WriteLine(string.Concat(" <p><a href=\"individuals1.", GMConfig.Instance.HtmlExtension, "\">", GMConfig.Instance.IndexTitle, "</a></p>")); f.WriteLine(" </div> <!-- links -->"); if (GMConfig.Instance.KeyIndividuals != null && GMConfig.Instance.KeyIndividuals.Count > 0) { // Although in theory you might want a restricted individual as a key individual, (they still form part of the tree), in practice this isn't allowed: var censoredKeyIndividuals = new List <string>(GMConfig.Instance.KeyIndividuals.Count); foreach (string keyXref in GMConfig.Instance.KeyIndividuals) { GDMIndividualRecord air = fTree.XRefIndex_Find(keyXref) as GDMIndividualRecord; if (air != null) { censoredKeyIndividuals.Add(MakeLink(air)); } } if (censoredKeyIndividuals.Count > 0) { string plural = ""; if (censoredKeyIndividuals.Count > 1) { plural = "s"; } f.WriteLine("<div id=\"keyindividuals\">"); f.WriteLine("<p>Key Individual{0}:</p>", plural); f.WriteLine("<ul>"); foreach (string air_link in censoredKeyIndividuals) { f.WriteLine("<li>{0}</li>", air_link); } f.WriteLine("</ul>"); f.WriteLine("</div> <!-- keyindividuals -->"); } } string byEmail = ""; // Email contact address if (!string.IsNullOrEmpty(GMConfig.Instance.UserEmailAddress)) { byEmail = string.Concat(" by <a href=\"mailto:", GMConfig.Instance.UserEmailAddress, "\">", EscapeHTML(GMConfig.Instance.UserEmailAddress, false), "</a>"); } // Add brand and contact label f.WriteLine("<p>Website created{0} using GEDmill.</p>", byEmail); // Add last update string if (GMConfig.Instance.AddHomePageCreateTime) { f.WriteLine("<p>Created on {0}.</p>", GMHelper.GetNowDateStr()); } // Add link to users main website if (!string.IsNullOrEmpty(GMConfig.Instance.MainWebsiteLink)) { f.WriteLine("<p><a href=\"{0}\">Return to main site</a></p>", GMConfig.Instance.MainWebsiteLink); } f.WriteLine(" </div> <!-- cover -->"); f.WriteLine(" </div> <!-- page -->"); } catch (IOException e) { fLogger.WriteError("Caught IO Exception(7) : ", e); } catch (ArgumentException e) { fLogger.WriteError("Caught Argument Exception(7) : ", e); } finally { if (f != null) { // Add standard footer to the file f.Close(); } } }
// Constructor. Creates a file with the given name and writes a standard HTML header. public HTMLFile(string filename, string title, string description, string keywords) { // This is for CJ who ended up with 17000 files plastered all over her desktop... if (GMHelper.IsDesktop(filename)) { throw new HTMLException("A problem occurred when creating an HTML file:\r\nGEDmill will not place files onto the Desktop."); } fLogger.WriteInfo("HTMLFile : " + filename); if (File.Exists(filename)) { // Delete any current file File.SetAttributes(filename, FileAttributes.Normal); File.Delete(filename); } fStream = null; try { fStream = new FileStream(filename, FileMode.Create, FileAccess.Write); } catch (NotSupportedException) { throw new HTMLException(string.Format("A problem occurred when creating an HTML file:\r\nThe path or filename {0} is not valid.", filename)); } if (fStream != null) { var encoding = new UTF8EncodingWithoutPreamble(); fWriter = new StreamWriter(fStream, encoding); fWriter.WriteLine("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"); fWriter.WriteLine("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">"); fWriter.WriteLine(" <head>"); fWriter.WriteLine(" <link rel=\"stylesheet\" type=\"text/css\" href=\"" + GMConfig.Instance.StylesheetFilename + ".css\" />"); if (GMConfig.Instance.AllowMultipleImages) // Multiple images feature is currently (10Dec08) the only thing that uses javascript { fWriter.WriteLine(" <script type=\"text/javascript\" src=\"gedmill.js\"></script>"); } fWriter.WriteLine(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"); fWriter.WriteLine(" <meta http-equiv=\"imagetoolbar\" content=\"no\" />"); fWriter.WriteLine(string.Concat(" <meta name=\"Title\" content=\"", title, "\" />")); fWriter.WriteLine(string.Concat(" <meta name=\"Description\" content=\"", description, "\" />")); fWriter.WriteLine(string.Concat(" <meta name=\"Keywords\" content=\"", keywords, "\" />")); fWriter.WriteLine(" <meta name=\"Version\" content=\"1.00\" />"); fWriter.WriteLine(string.Concat(" <meta name=\"VersionDate\" content=\"", GMHelper.GetNowDateStr(), "\" />")); fWriter.WriteLine(string.Concat(" <title>", title, "</title>")); fWriter.WriteLine(" </head>"); fWriter.WriteLine(" "); fWriter.WriteLine(" <body>"); } }
public void Create() { fLogger.WriteInfo("CCreatorStylesheet::Create()"); StreamWriter sw = null; try { if (File.Exists(fCssFilename)) { // Delete any current file File.SetAttributes(fCssFilename, FileAttributes.Normal); File.Delete(fCssFilename); } var fs = new FileStream(string.Concat(GMConfig.Instance.OutputFolder, "\\", GMConfig.Instance.StylesheetFilename, ".css"), FileMode.Create, FileAccess.Write); sw = new StreamWriter(fs); sw.WriteLine(string.Concat("/* CSS file generated by ", GMConfig.SoftwareName, " on ", GMHelper.GetNowDateStr(), " */")); sw.WriteLine("BODY {"); sw.WriteLine(" background-color: #f1f4e9;"); if (fBackgroundImageFilename != "") { sw.WriteLine(string.Concat(" background-image: url(", fBackgroundImageFilename, ");")); } sw.WriteLine(" color: #000000;"); sw.WriteLine(" text-align: left;"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine(" font-size:8pt;"); sw.WriteLine("}"); sw.WriteLine("IMG {"); sw.WriteLine(" border: none;"); sw.WriteLine("}"); sw.WriteLine("H1 {"); sw.WriteLine(" margin:10px 0 4px 0; "); sw.WriteLine(" text-align: left;"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine(" font-size:26pt;"); sw.WriteLine(" font-weight: bold;"); sw.WriteLine("}"); sw.WriteLine("#summary {"); sw.WriteLine(" margin-bottom:40px;"); sw.WriteLine("}"); sw.WriteLine("#parents H1 {"); sw.WriteLine(" font-size:14pt;"); sw.WriteLine("}"); sw.WriteLine("#parents P {"); sw.WriteLine(" margin:4px 4px 4px 11px;"); sw.WriteLine("}"); sw.WriteLine("#parents {"); sw.WriteLine(" margin-bottom:25px;"); sw.WriteLine("}"); sw.WriteLine("#events H1 {"); sw.WriteLine(" font-size:14pt;"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine("}"); sw.WriteLine("#facts H1 {"); sw.WriteLine(" font-size:14pt;"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine("}"); sw.WriteLine("#notes H1 {"); sw.WriteLine(" font-size:14pt;"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine("}"); sw.WriteLine("#citations H1 {"); sw.WriteLine(" font-size:14pt;"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine("}"); sw.WriteLine("#citations {"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine(" text-align: left;"); sw.WriteLine(" font-size:10pt;"); sw.WriteLine(" margin-top: 22px;"); sw.WriteLine("}"); sw.WriteLine("#text H1 {"); sw.WriteLine(" font-size:14pt;"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine("}"); sw.WriteLine("#references H1 {"); sw.WriteLine(" font-size:14pt;"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine("}"); sw.WriteLine("H2 {"); sw.WriteLine(" margin:0 0 4px 0; "); sw.WriteLine(" text-align: left;"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine(" font-size:12pt;"); sw.WriteLine(" font-weight: normal;"); sw.WriteLine("}"); sw.WriteLine("H3 {"); sw.WriteLine(" margin:0 0 4px 0; "); sw.WriteLine(" text-align: left;"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine(" font-size:10pt;"); sw.WriteLine(" font-weight: normal;"); sw.WriteLine("}"); sw.WriteLine("P {"); sw.WriteLine(" margin:0; "); sw.WriteLine(" text-align:left; "); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine(" font-size:10pt;"); sw.WriteLine("}"); sw.WriteLine("A {"); sw.WriteLine(" text-decoration: none;"); sw.WriteLine("}"); sw.WriteLine("A:link {"); sw.WriteLine(" color:#1344e9;"); sw.WriteLine(" background-color: inherit;"); sw.WriteLine("}"); sw.WriteLine("A:visited {"); sw.WriteLine(" color:#0c2d9a;"); sw.WriteLine(" background-color: inherit;"); sw.WriteLine("}"); sw.WriteLine("A:hover {"); sw.WriteLine(" color:#0000ff;"); sw.WriteLine(" background-color: inherit;"); sw.WriteLine("}"); sw.WriteLine("A:active {"); sw.WriteLine(" color:#0c2d9a;"); sw.WriteLine(" background-color: inherit;"); sw.WriteLine("}"); sw.WriteLine("A.email {"); sw.WriteLine(" font-family: 'Courier New',monospace;"); sw.WriteLine("}"); sw.WriteLine("UL {"); sw.WriteLine(" padding-top: 0;"); sw.WriteLine(" margin-top: 0;"); sw.WriteLine(" border-top: 0;"); sw.WriteLine(" text-align: left;"); sw.WriteLine(" list-style-type: none;"); sw.WriteLine("}"); sw.WriteLine("DIV#cover H1 {"); sw.WriteLine(" text-align:center;"); sw.WriteLine(" padding-bottom:38px;"); sw.WriteLine("}"); sw.WriteLine("DIV#cover P {"); sw.WriteLine(" text-align:center;"); sw.WriteLine(" padding-bottom:28px;"); sw.WriteLine("}"); sw.WriteLine("DIV#cover DIV#links P {"); sw.WriteLine(" font-size:12pt;"); sw.WriteLine("}"); sw.WriteLine("DIV#page {"); sw.WriteLine(" width:800px; "); sw.WriteLine(" margin:0 auto;"); sw.WriteLine(" position:relative;"); sw.WriteLine("}"); sw.WriteLine("DIV#header {"); sw.WriteLine(" width:800px;"); sw.WriteLine(" margin:0 auto;"); sw.WriteLine("}"); sw.WriteLine("#header ul {"); sw.WriteLine(" padding: 0;"); sw.WriteLine(" margin: 0;"); sw.WriteLine("}"); sw.WriteLine("#header li {"); sw.WriteLine(" display:inline;"); sw.WriteLine(" font-size:14px;"); sw.WriteLine(" padding:2px 4px 2px 6px;"); sw.WriteLine(" line-height:20px;"); sw.WriteLine("}"); // For multiple images we like to keep a constant margin down the rhs to accomodate them (IE). Otherwise we just let images float and text spread around them. if (GMConfig.Instance.AllowMultipleImages) { sw.WriteLine("DIV#main {"); int nMainWidth = (760 - GMConfig.Instance.MaxImageWidth); if (nMainWidth < 0) { nMainWidth = 600; } sw.WriteLine(" width: " + nMainWidth + "px;"); sw.WriteLine("}"); } sw.WriteLine("DIV#individualSummary P {"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine(" font-size:22pt;"); sw.WriteLine("}"); sw.WriteLine("DIV#photos {"); sw.WriteLine(" position:relative;"); sw.WriteLine(" float:right;"); sw.WriteLine(" margin-top:16px;"); sw.WriteLine(" text-align:center;"); sw.WriteLine("}"); sw.WriteLine("DIV#mainphoto {"); sw.WriteLine(" width:" + (GMConfig.Instance.MaxImageWidth + 2) + "px;"); sw.WriteLine(" height:" + (GMConfig.Instance.MaxImageHeight + 40) + "px;"); sw.WriteLine(" overflow:auto;"); sw.WriteLine("}"); sw.WriteLine("IMG#mainphoto_img {"); sw.WriteLine(" border:1px solid black;"); sw.WriteLine("}"); sw.WriteLine("P#mainphoto_title {"); sw.WriteLine(" font-family:serif;"); sw.WriteLine(" font-weight:bold;"); sw.WriteLine(" text-align:center;"); sw.WriteLine("}"); sw.WriteLine("P#sourcepic_title {"); sw.WriteLine(" font-family:serif;"); sw.WriteLine(" font-weight:bold;"); sw.WriteLine("}"); sw.WriteLine("DIV#miniphotos {"); sw.WriteLine(" width:" + (GMConfig.Instance.MaxImageWidth + 2) + "px;"); sw.WriteLine(" text-align:left;"); sw.WriteLine("}"); sw.WriteLine("DIV.miniphoto {"); sw.WriteLine(" float:left;"); sw.WriteLine(" width:" + (GMConfig.Instance.MaxThumbnailImageWidth + 3) + "px;"); sw.WriteLine(" height:" + (GMConfig.Instance.MaxThumbnailImageHeight + 3) + "px;"); sw.WriteLine(" text-align:center;"); sw.WriteLine("}"); sw.WriteLine("IMG.miniphoto_img {"); sw.WriteLine(" border: 1px solid blue;"); sw.WriteLine(" width:" + (GMConfig.Instance.MaxThumbnailImageWidth + 3) + "px;"); sw.WriteLine(" height:" + (GMConfig.Instance.MaxThumbnailImageHeight + 3) + "px;"); sw.WriteLine("}"); sw.WriteLine("DIV#names {"); sw.WriteLine("}"); sw.WriteLine("DIV#references {"); sw.WriteLine("}"); sw.WriteLine(".reference {"); sw.WriteLine(" font-size:8pt;"); sw.WriteLine(" vertical-align:super;"); sw.WriteLine(" font-weight:normal;"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine(" line-height: 6pt;"); sw.WriteLine("}"); sw.WriteLine(".nicknames {"); sw.WriteLine(" font-size:12pt;"); sw.WriteLine(" font-weight: normal;"); sw.WriteLine(" font-style: italic;"); sw.WriteLine("}"); sw.WriteLine(".centred {"); sw.WriteLine(" text-align: center;"); sw.WriteLine("}"); sw.WriteLine("#index {"); sw.WriteLine(" text-align: left;"); sw.WriteLine("}"); sw.WriteLine("P.plain {"); sw.WriteLine(" font-size:11px;"); sw.WriteLine(" text-align:right;"); sw.WriteLine("}"); sw.WriteLine("P.plain A {"); sw.WriteLine(" text-decoration: none;"); sw.WriteLine(" color:inherit;"); sw.WriteLine("}"); sw.WriteLine("#headingsLinks P {"); sw.WriteLine(" margin-bottom: 18px;"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine(" font-size:12pt;"); sw.WriteLine(" font-weight: bold;"); sw.WriteLine(" text-align: center;"); sw.WriteLine(" border-top: 1px solid gray;"); sw.WriteLine(" border-bottom: 1px solid gray; "); sw.WriteLine("}"); sw.WriteLine("#index TD {"); sw.WriteLine(" width:360px;"); sw.WriteLine("}"); sw.WriteLine("#events {"); sw.WriteLine(" text-align: left;"); sw.WriteLine(" line-height: 14pt;"); sw.WriteLine("}"); sw.WriteLine(".eventNote {"); sw.WriteLine(" font-style: italic; "); sw.WriteLine("}"); sw.WriteLine("#text {"); sw.WriteLine(" font-family: 'Times New Roman', serif; "); sw.WriteLine(" text-align: left;"); sw.WriteLine(" font-size:13pt;"); sw.WriteLine(" margin: 22px 0 0 0;"); sw.WriteLine("}"); sw.WriteLine("#notes {"); sw.WriteLine(" font-family: 'Times New Roman', serif; "); sw.WriteLine(" text-align: left;"); sw.WriteLine(" font-size:13pt;"); sw.WriteLine(" margin-top: 22px;"); sw.WriteLine("}"); sw.WriteLine("#references {"); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif; "); sw.WriteLine(" text-align: left;"); sw.WriteLine(" font-size:10pt;"); sw.WriteLine(" margin-top: 22px;"); sw.WriteLine("}"); sw.WriteLine("#references UL {"); sw.WriteLine(" margin: 0 0 0 8px;"); sw.WriteLine("}"); sw.WriteLine("#notes UL {"); sw.WriteLine(" list-style-type: disc;"); sw.WriteLine(" margin-left:8px;"); sw.WriteLine(" padding-left:0px;"); sw.WriteLine("}"); sw.WriteLine("#notes LI {"); sw.WriteLine(" text-align:left; "); sw.WriteLine(" font-family: Verdana, Arial, Helvetica, sans-serif;"); sw.WriteLine(" font-size:10pt;"); sw.WriteLine("}"); sw.WriteLine("#sourcePics {"); sw.WriteLine(" margin: 20px 0 24px 0;"); sw.WriteLine("}"); sw.WriteLine("P.pretext {"); sw.WriteLine(" font-family: \"Courier New\", monospace; "); sw.WriteLine(" text-align: left;"); sw.WriteLine(" font-size:10pt;"); sw.WriteLine(" font-weight:normal;"); sw.WriteLine(" margin: 0 0 0 0;"); sw.WriteLine("}"); sw.WriteLine("DIV#footer {"); sw.WriteLine(" margin-top: 64px;"); sw.WriteLine("}"); sw.WriteLine("DIV#footer P {"); sw.WriteLine(" font-size:11px;"); sw.WriteLine(" text-align:right;"); sw.WriteLine("}"); sw.WriteLine("#events TD {"); sw.WriteLine(" padding: 0 0 6px 8px;"); sw.WriteLine(" vertical-align: top;"); sw.WriteLine("}"); sw.WriteLine("#facts TD {"); sw.WriteLine(" padding: 0 0 6px 8px;"); sw.WriteLine(" vertical-align: top;"); sw.WriteLine("}"); sw.WriteLine("#events TD.date {"); sw.WriteLine(" width:160px;"); sw.WriteLine("}"); sw.WriteLine("#facts TD.date {"); sw.WriteLine(" width:160px;"); sw.WriteLine("}"); sw.WriteLine("TD.date P {"); sw.WriteLine(" font-weight:normal;"); sw.WriteLine("}"); sw.WriteLine("TD.event P {"); sw.WriteLine(" font-weight:normal;"); sw.WriteLine(" line-height: 14pt;"); // Stops IE truncating bottom of gedcomLine sw.WriteLine(" margin-bottom:2px;"); // No this does actually. sw.WriteLine("}"); sw.WriteLine("TD P.important {"); sw.WriteLine(" font-weight:bold;"); sw.WriteLine("}"); sw.WriteLine("#minitree {"); sw.WriteLine(" position:relative;"); sw.WriteLine(" width:100%;"); sw.WriteLine(" overflow:auto;"); sw.WriteLine(" text-align:center;"); sw.WriteLine("}"); sw.WriteLine("DIV#keyindividuals P {"); sw.WriteLine(" padding-bottom: 8px;"); sw.WriteLine("}"); sw.WriteLine("DIV#keyindividuals UL {"); sw.WriteLine(" text-align:center;"); sw.WriteLine(" margin-left:auto;"); sw.WriteLine(" margin-right:auto;"); sw.WriteLine(" font-size:10pt;"); sw.WriteLine("}"); sw.WriteLine("DIV.hr {"); sw.WriteLine(" height:0;"); sw.WriteLine(" border-top:1px solid #eee;"); sw.WriteLine(" border-bottom:1px solid #aaa;"); sw.WriteLine("}"); } catch (IOException e) { fLogger.WriteError("Caught IO Exception(5) : ", e); } catch (ArgumentException e) { fLogger.WriteError("Caught Argument Exception(5) : ", e); } catch (UnauthorizedAccessException e) { fLogger.WriteError("Caught UnauthorizedAccessException(5) : ", e); } finally { if (sw != null) { sw.Close(); } } }