def render(self, level, idPrefix="") -> htmltree.HtmlElement: """Renders a Section into the appropriate html representation Parameters ---------- level : int level of the nesting for this section, determines the size of the heading title for the Section (The higher the level, the smaller the title font-size). Ranges from H2 - H5 in html terms. idPrefix : String used for href/id referencing for the left hand side table of contents to be paired with the item that render() is called upon. Returns ------- HtmlElement : an html representation of this Nodes report content. Appended into the report after it is rendered within writeReports(). """ itemsToAdd = [] headingLevel = copy.deepcopy(self.levelDict[level]) headingLevel.A.update({"id": "{}".format(idPrefix)}) headingLevel.C.append(self.title) heading = headingLevel itemsToAdd.append(heading) for key in self.childContents: element = self.childContents[key] if isinstance(element, htmltree.HtmlElement): item = element.render() else: item = element.render(level + 1, idPrefix + str(key)) itemsToAdd.append(item) return htmltree.Div(*itemsToAdd)
def render(self, level, idPrefix="") -> htmltree.HtmlElement: """Renders the Timeseries into a graph and places that Image into an html Img tag and returns a div containing that image and the images caption if it has one stored.""" figName = self.plot() if self.encode: img = htmltree.Img( src=encode64(os.path.abspath(figName)), alt="{}_image".format(self.title), id=idPrefix, ) else: htmltree.Img( src=os.path.abspath(figName), alt="{}_image".format(self.title), id=idPrefix, ) return htmltree.Div( img, htmltree.P(self.caption), )
def writeReports(self): """Renders each report into a document for viewing.""" body = htmltree.Body() head = htmltree.Head() head.C.append(htmltree.Link(rel="stylesheet", href="styles.css")) divMain = htmltree.Div(id="container") header = htmltree.Div(id="heading") header.C.append( htmltree.Img( src="https://terrapower.github.io/armi/_images/armi-logo.png", alt="logo", _class="heading", ) ) header.C.append( htmltree.H1( "{} Report".format(armi.context.APP_NAME.capitalize()), _class="heading", id="titleFont", ) ) divMain.C.append(header) div = htmltree.Div(id="reportContent") div.C.append(htmltree.H4("Report Generated for : " + self.title)) body.C.append(self.tableOfContents()) for group in self.sections: div.C.append(htmltree.H1(group, id=group)) for subgroup in self.sections[group].childContents: innerDiv = htmltree.Div() if isinstance(self.sections[group][subgroup], htmltree.HtmlElement): fig = self.sections[group].childContents[subgroup].render() else: fig = ( self.sections[group] .childContents[subgroup] .render(0, str(group) + str(subgroup)) ) innerDiv.C.append(fig) div.C.append(innerDiv) divMain.C.append(div) body.C.append(divMain) body.C.append(htmltree.Script(src="report.js")) doc = htmltree.Html(head, body) # Copy css file to the correct folder containing the reportContent.html shutil.copy( os.path.abspath( os.path.join(os.path.abspath(__file__), os.pardir, "styles.css") ), "styles.css", ) shutil.copy( os.path.abspath( os.path.join(os.path.abspath(__file__), os.pardir, "report.js") ), "report.js", ) fileurl = doc.renderToFile("index.html", 0) return fileurl