def __init__(self, project, load_plugins=True): self.project = project self.root_path = os.path.abspath(project.tree) self.jinja_env = CustomJinjaEnvironment( autoescape=self.select_jinja_autoescape, extensions=['jinja2.ext.autoescape', 'jinja2.ext.with_'], loader=jinja2.FileSystemLoader( os.path.join(self.root_path, 'templates'))) from lektor.db import F self.jinja_env.filters.update( tojson=tojson_filter, latformat=lambda x, secs=True: format_lat_long(lat=x, secs=secs), longformat=lambda x, secs=True: format_lat_long(long=x, secs=secs), latlongformat=lambda x, secs=True: format_lat_long(secs=secs, *x), # By default filters need to be side-effect free. This is not # the case for this one, so we need to make it as a dummy # context filter so that jinja2 will not inline it. url=jinja2.contextfilter(lambda ctx, *a, **kw: url_to(*a, **kw)), asseturl=jinja2.contextfilter( lambda ctx, *a, **kw: get_asset_url(*a, **kw)), markdown=jinja2.contextfilter( lambda ctx, *a, **kw: Markdown(*a, **kw)), ) self.jinja_env.globals.update( F=F, url_to=url_to, site=site_proxy, config=config_proxy, bag=lookup_from_bag, get_random_id=lambda: uuid.uuid4().hex, ) self.jinja_env.filters.update( datetimeformat=_pass_locale(dates.format_datetime), dateformat=_pass_locale(dates.format_date), timeformat=_pass_locale(dates.format_time), ) from lektor.types import builtin_types self.types = builtin_types.copy() from lektor.publisher import builtin_publishers self.publishers = builtin_publishers.copy() # The plugins that are loaded for this environment. This is # modified by the plugin controller and registry methods on the # environment. self.plugin_controller = PluginController(self) self.plugins = {} self.plugin_ids_by_class = {} self.build_programs = [] self.special_file_assets = {} self.special_file_suffixes = {} self.custom_url_resolvers = [] self.custom_generators = [] if load_plugins: self.load_plugins()
def __get__(self, obj, type=None): if obj is None: return self return Markdown(apply_jinja2(self.source), record=obj)
def __get__(self, obj, type=None): if obj is None: return self return Markdown(self.source, record=obj)
def __init__(self, project, load_plugins=True, extra_flags=None): self.project = project self.root_path = os.path.abspath(project.tree) self.theme_paths = [ os.path.join(self.root_path, 'themes', theme) for theme in self.project.themes ] if not self.theme_paths: # load the directories in the themes directory as the themes try: for fname in os.listdir(os.path.join(self.root_path, 'themes')): f = os.path.join(self.root_path, 'themes', fname) if os.path.isdir(f): self.theme_paths.append(f) except OSError: pass template_paths = [ os.path.join(path, 'templates') for path in [self.root_path] + self.theme_paths ] self.jinja_env = CustomJinjaEnvironment( autoescape=self.select_jinja_autoescape, extensions=[ 'jinja2.ext.autoescape', 'jinja2.ext.with_', 'jinja2.ext.do' ], loader=jinja2.FileSystemLoader(template_paths)) from lektor.db import F, get_alts self.jinja_env.filters.update( tojson=tojson_filter, latformat=lambda x, secs=True: format_lat_long(lat=x, secs=secs), longformat=lambda x, secs=True: format_lat_long(long=x, secs=secs), latlongformat=lambda x, secs=True: format_lat_long(secs=secs, *x), # By default filters need to be side-effect free. This is not # the case for this one, so we need to make it as a dummy # context filter so that jinja2 will not inline it. url=jinja2.contextfilter(lambda ctx, *a, **kw: url_to(*a, **kw)), asseturl=jinja2.contextfilter( lambda ctx, *a, **kw: get_asset_url(*a, **kw)), markdown=jinja2.contextfilter( lambda ctx, *a, **kw: Markdown(*a, **kw)), ) self.jinja_env.globals.update( F=F, url_to=url_to, site=site_proxy, config=config_proxy, bag=lookup_from_bag, get_alts=get_alts, get_random_id=lambda: uuid.uuid4().hex, ) self.jinja_env.filters.update( datetimeformat=_pass_locale(dates.format_datetime), dateformat=_pass_locale(dates.format_date), timeformat=_pass_locale(dates.format_time), ) from lektor.types import builtin_types self.types = builtin_types.copy() from lektor.publisher import builtin_publishers self.publishers = builtin_publishers.copy() # The plugins that are loaded for this environment. This is # modified by the plugin controller and registry methods on the # environment. self.plugin_controller = PluginController(self, extra_flags) self.plugins = {} self.plugin_ids_by_class = {} self.build_programs = [] self.special_file_assets = {} self.special_file_suffixes = {} self.custom_url_resolvers = [] self.custom_generators = [] self.virtual_sources = {} if load_plugins: self.load_plugins() from lektor.db import siblings_resolver self.virtualpathresolver('siblings')(siblings_resolver)
def value_from_raw(self, raw): return Markdown(raw.value or u'')
def test_integration(record, source, expected): rendered = _normalize_html(Markdown(source, record)) assert re.match(expected, rendered)
def markdown(self, source, record): return Markdown(source, record)
def value_from_raw(self, raw): if raw.value is None: return raw.missing_value('Missing markdown') return Markdown(raw.value)