# Copyright 2013 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. from data_source_registry import CreateDataSources from third_party.handlebar import Handlebar from url_constants import GITHUB_BASE, EXTENSIONS_SAMPLES class TemplateRenderer(object): '''Renders templates with the server's available data sources. ''' def __init__(self, server_instance): self._server_instance = server_instance def Render(self, template, request, data_sources=None, additional_context=None): '''Renders |template| using |request|. Specify |data_sources| to only include the DataSources with the given names when rendering the template. Specify |additional_context| to inject additional template context when rendering the template. ''' assert isinstance(template, Handlebar), type(template) render_context = self._CreateDataSources(request) if data_sources is not None: render_context = dict((name, d) for name, d in render_context.iteritems() if name in data_sources) render_context.update({ 'apps_samples_url': GITHUB_BASE, 'base_path': self._server_instance.base_path, 'extensions_samples_url': EXTENSIONS_SAMPLES, # TODO(kalman): Figure out where "pepperversion" comes from. It's used # internally in pepper and unfortunately the syntax appears to be # {{pepperversion}} for some reason. 'pepperversion': '', 'static': self._server_instance.base_path + 'static', }) if additional_context: render_context.update(additional_context) render_data = template.Render(render_context) return render_data.text, render_data.errors def _CreateDataSources(self, request): server_instance = self._server_instance data_sources = CreateDataSources(server_instance, request=request) data_sources.update({ 'samples': server_instance.samples_data_source_factory.Create(request), }) return data_sources