Source code for webviz._page_element

from abc import ABCMeta, abstractmethod
from uuid import uuid4
from ._header_element import HeaderElement
from os import path
from ordered_set import OrderedSet


[docs]class PageElement: """ A page element with data and a template which renders to `html`. Each element also has a unique ``containerId`` in order to make unique DOM IDs in the template. """ __metaclass__ = ABCMeta def __init__(self): self.containerId = 'element' + str(uuid4()) self.header_elements = OrderedSet() self.resources = {'js': [], 'css': []} def add_resource(self, absolute_path, subdir='.'): if subdir not in self.resources: self.resources[subdir] = [] self.resources[subdir].append(absolute_path) def add_css_file(self, filename): basename = path.basename(filename) location = path.join('resources', 'css', basename) self.header_elements.add(HeaderElement( tag='link', attributes={ 'rel': 'stylesheet', 'type': 'text/css', 'href': path.join('{root_folder}', location) })) self.add_resource(filename, subdir='css') def add_js_file(self, filename): basename = path.basename(filename) self.header_elements.add(HeaderElement( tag='script', attributes={ 'src': path.join('{root_folder}', 'resources', 'js', basename) } )) self.add_resource(filename, subdir='js')
[docs] @abstractmethod def get_template(self): """ :returns: The corresponding ``jinja2`` template for the plot, which can be rendered using: :: html = self.get_template().render(element=self) """ pass
def __str__(self): html = "" for element in self.header_elements: html += str(element) html += "\n" return html + self.get_template().render(element=self, root_folder='.')