| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 from data_source_registry import CreateDataSources | 5 from data_source_registry import CreateDataSources |
| 6 from third_party.handlebar import Handlebar | 6 from third_party.handlebar import Handlebar |
| 7 from url_constants import GITHUB_BASE, EXTENSIONS_SAMPLES | 7 from url_constants import GITHUB_BASE, EXTENSIONS_SAMPLES |
| 8 | 8 |
| 9 | 9 |
| 10 class TemplateRenderer(object): | 10 class TemplateRenderer(object): |
| 11 '''Renders templates with the server's available data sources. | 11 '''Renders templates with the server's available data sources. |
| 12 ''' | 12 ''' |
| 13 | 13 |
| 14 def __init__(self, server_instance): | 14 def __init__(self, server_instance): |
| 15 self._server_instance = server_instance | 15 self._server_instance = server_instance |
| 16 | 16 |
| 17 def Render(self, | 17 def Render(self, |
| 18 template, | 18 template, |
| 19 request, | 19 request, |
| 20 data_sources=None, | 20 data_sources=None, |
| 21 additional_context=None): | 21 additional_context={}): |
| 22 '''Renders |template| using |request|. | 22 '''Renders |template| using |request|. |
| 23 | 23 |
| 24 Specify |data_sources| to only include the DataSources with the given names | 24 Specify |data_sources| to only include the DataSources with the given names |
| 25 when rendering the template. | 25 when rendering the template. |
| 26 | 26 |
| 27 Specify |additional_context| to inject additional template context when | 27 Specify |additional_context| to inject additional template context when |
| 28 rendering the template. | 28 rendering the template. |
| 29 ''' | 29 ''' |
| 30 assert isinstance(template, Handlebar), type(template) | 30 assert isinstance(template, Handlebar), type(template) |
| 31 render_context = self._CreateDataSources(request) | 31 render_context = CreateDataSources(self._server_instance, request) |
| 32 if data_sources is not None: | 32 if data_sources is not None: |
| 33 render_context = dict((name, d) for name, d in render_context.iteritems() | 33 render_context = dict((name, d) for name, d in render_context.iteritems() |
| 34 if name in data_sources) | 34 if name in data_sources) |
| 35 render_context.update({ | 35 render_context.update({ |
| 36 'apps_samples_url': GITHUB_BASE, | 36 'apps_samples_url': GITHUB_BASE, |
| 37 'base_path': self._server_instance.base_path, | 37 'base_path': self._server_instance.base_path, |
| 38 'extensions_samples_url': EXTENSIONS_SAMPLES, | 38 'extensions_samples_url': EXTENSIONS_SAMPLES, |
| 39 'static': self._server_instance.base_path + 'static', | 39 'static': self._server_instance.base_path + 'static', |
| 40 }) | 40 }) |
| 41 if additional_context: | 41 render_context.update(additional_context) |
| 42 render_context.update(additional_context) | |
| 43 render_data = template.Render(render_context) | 42 render_data = template.Render(render_context) |
| 44 return render_data.text, render_data.errors | 43 return render_data.text, render_data.errors |
| 45 | |
| 46 def _CreateDataSources(self, request): | |
| 47 server_instance = self._server_instance | |
| 48 data_sources = CreateDataSources(server_instance, request=request) | |
| 49 data_sources.update({ | |
| 50 'samples': server_instance.samples_data_source_factory.Create(request), | |
| 51 }) | |
| 52 return data_sources | |
| OLD | NEW |