@@ -1,6 +1,6 @@ | |||
# -*- coding: utf-8 -*- | |||
""" | |||
Autoextend css plugin | |||
Autoextend plugin | |||
""" | |||
from hyde.plugin import Plugin | |||
@@ -8,7 +8,7 @@ import re | |||
class AutoExtendPlugin(Plugin): | |||
""" | |||
The plugin class for less css | |||
The plugin class for extending templates using metadata. | |||
""" | |||
def __init__(self, site): | |||
@@ -8,7 +8,7 @@ from hyde.fs import Folder | |||
class FlattenerPlugin(Plugin): | |||
""" | |||
The plugin class for syntax text replacement. | |||
The plugin class for flattening nested folders. | |||
""" | |||
def __init__(self, site): | |||
super(FlattenerPlugin, self).__init__(site) | |||
@@ -384,6 +384,7 @@ class Jinja2Template(Template): | |||
self.env.globals['media_url'] = media_url | |||
self.env.globals['content_url'] = content_url | |||
self.env.globals['engine'] = engine | |||
self.env.globals['deps'] = {} | |||
self.env.filters['markdown'] = markdown | |||
self.env.filters['syntax'] = syntax | |||
@@ -411,10 +412,10 @@ class Jinja2Template(Template): | |||
from jinja2.meta import find_referenced_templates | |||
ast = self.env.parse(text) | |||
tpls = find_referenced_templates(ast) | |||
deps = [] | |||
deps = list(self.env.globals['deps'].get('path', [])) | |||
for dep in tpls: | |||
deps.append(dep) | |||
if dep: | |||
deps.append(dep) | |||
deps.extend(self.get_dependencies(dep)) | |||
return list(set(deps)) | |||
@@ -25,8 +25,8 @@ class Generator(object): | |||
self.generated_once = False | |||
self.__context__ = dict(site=site) | |||
if hasattr(site.config, 'context'): | |||
self.__context__.update( | |||
Context.load(site.sitepath, site.config.context)) | |||
site.context = Context.load(site.sitepath, site.config.context) | |||
self.__context__.update(site.context) | |||
self.template = None | |||
Plugin.load_all(site) | |||
@@ -108,6 +108,12 @@ class Generator(object): | |||
logger.info("Generation Complete") | |||
self.events.generation_complete() | |||
def get_dependencies(self, resource): | |||
""" | |||
Gets the dependencies for a given resource. | |||
""" | |||
return self.template.get_dependencies(resource.relative_path) | |||
def has_resource_changed(self, resource): | |||
""" | |||
Checks if the given resource has changed since the | |||
@@ -126,7 +132,7 @@ class Generator(object): | |||
if resource.source_file.is_binary or not resource.uses_template: | |||
logger.debug("No Changes found in %s" % resource) | |||
return False | |||
deps = self.template.get_dependencies(resource.relative_path) | |||
deps = self.get_dependencies(resource) | |||
if not deps or None in deps: | |||
logger.debug("No changes found in %s" % resource) | |||
return False | |||
@@ -134,6 +140,8 @@ class Generator(object): | |||
layout = Folder(self.site.sitepath).child_folder('layout') | |||
logger.debug("Checking for changes in dependents:%s" % deps) | |||
for dep in deps: | |||
if not dep: | |||
return True | |||
source = File(content.child(dep)) | |||
if not source.exists: | |||
source = File(layout.child(dep)) | |||
@@ -348,6 +348,7 @@ class Site(object): | |||
self.config = config if config else Config(self.sitepath) | |||
self.content = RootNode(self.config.content_root_path, self) | |||
self.plugins = [] | |||
self.context = {} | |||
def load(self): | |||
""" | |||
@@ -171,6 +171,39 @@ class TestJinjaTemplate(object): | |||
assert 'layout.html' in deps | |||
assert 'index.html' in deps | |||
def test_depends_with_reference_tag(self): | |||
site = Site(TEST_SITE) | |||
JINJA2.copy_contents_to(site.content.source) | |||
inc = File(TEST_SITE.child('content/inc.md')) | |||
inc.write("{% refer to 'index.html' as index%}") | |||
site.load() | |||
gen = Generator(site) | |||
gen.load_template_if_needed() | |||
t = gen.template | |||
deps = list(t.get_dependencies('inc.md')) | |||
assert len(deps) == 3 | |||
assert 'helpers.html' in deps | |||
assert 'layout.html' in deps | |||
assert 'index.html' in deps | |||
def test_cant_find_depends_with_reference_tag_var(self): | |||
site = Site(TEST_SITE) | |||
JINJA2.copy_contents_to(site.content.source) | |||
inc = File(TEST_SITE.child('content/inc.md')) | |||
inc.write("{% set ind = 'index.html' %}{% refer to ind as index %}") | |||
site.load() | |||
gen = Generator(site) | |||
gen.load_template_if_needed() | |||
t = gen.template | |||
deps = list(t.get_dependencies('inc.md')) | |||
assert len(deps) == 1 | |||
assert not deps[0] | |||
def test_can_include_templates_with_processing(self): | |||
text = """ | |||
=== | |||
@@ -276,6 +309,34 @@ Hyde & Jinja. | |||
text2 = """ | |||
{% refer to "inc.md" as inc %} | |||
{{ inc.html('.fulltext') }} | |||
""" | |||
html = assert_markdown_typogrify_processed_well(text, text2) | |||
assert "mark" not in html | |||
assert "reference" not in html | |||
def test_refer_with_var(self): | |||
text = """ | |||
=== | |||
is_processable: False | |||
=== | |||
<div class="fulltext"> | |||
{% filter markdown|typogrify %} | |||
{% mark heading %} | |||
This is a heading | |||
================= | |||
{% endmark %} | |||
{% reference content %} | |||
Hyde & Jinja. | |||
{% endreference %} | |||
{% endfilter %} | |||
</div> | |||
""" | |||
text2 = """ | |||
{% set incu = 'inc.md' %} | |||
{% refer to incu as inc %} | |||
{{ inc.html('.fulltext') }} | |||
""" | |||
html = assert_markdown_typogrify_processed_well(text, text2) | |||
assert "mark" not in html |