Example #1
0
class CompressedCSSNode(template.Node):
    def __init__(self, name):
        self.name = name
        self.packager = Packager()

    def render(self, context):
        package_name = template.Variable(self.name).resolve(context)
        try:
            package = self.packager.package_for('css', package_name)
        except PackageNotFound:
            return ''  # fail silently, do not return anything if an invalid group is specified

        if settings.COMPRESS:
            compressed_path = self.packager.pack_stylesheets(package)
            return self.render_css(package, compressed_path)
        else:
            package['paths'] = self.packager.compile(package['paths'])
            return self.render_individual(package)

    def render_css(self, package, path):
        context = {}
        if not 'template' in package:
            package['template'] = "compress/css.html"
        if not 'context' in package:
            context = package['context']
        context.update({
            'url': self.packager.individual_url(path)
        })
        return render_to_string(package['template'], context)

    def render_individual(self, package):
        tags = [self.render_css(package, path) for path in package['paths']]
        return '\n'.join(tags)
Example #2
0
class CompressedNode(template.Node):
    def __init__(self, name, aType):
        self.name = name
        self.type = aType
        if aType == 'css':
            self.template = "compress/css.html"
        else:
            self.template = "compress/js.html"
        self.packager = Packager()

    def create_tags(self, package, path):
        context = {}
        if 'context' in package:
            context = package['context']
        context.update({'url': self.packager.individual_url(path)})
        return render_to_string(package['template'], context)

    def render(self, context):
        package_name = template.Variable(self.name).resolve(context)
        try:
            package = self.packager.package_for(self.type, package_name)
            package['type'] = self.type
        except PackageNotFound:
            # fail silently, do not return anything if an invalid group
            return ''

        if not 'template' in package:
            package['template'] = self.template

        if 'externals' in package:
            out = '\n'.join([self.render_external(package, url) \
                             for url in package['externals']])
        else:
            out = ''
        individual = True

        compressed_path = None
        if settings.COMPRESS:
            compressed_path = self.packager.pack(package)

        # If something wrong with compressing (can't create files) -
        # fallback to individual
        if compressed_path:
            out += self.create_tags(package, compressed_path)
            individual = False

        if individual:
            package['paths'] = self.packager.compile(package['paths'])
            out += self.render_individual(package)

        return out

    def render_external(self, package, url):
        return render_to_string(package['template'], {'url': url})

    def render_individual(self, package):
        tags = [self.create_tags(package, path) \
                for path in package['paths']]
        return '\n'.join(tags)
Example #3
0
class CompressedJSNode(template.Node):
    def __init__(self, name):
        self.name = name
        self.packager = Packager()

    def render(self, context):
        package_name = template.Variable(self.name).resolve(context)
        try:
            package = self.packager.package_for('js', package_name)
        except PackageNotFound:
            return ''  # fail silently, do not return anything if an invalid group is specified

        if 'externals' in package:
            return '\n'.join([self.render_external(package, url) for url in package['externals']])

        if settings.COMPRESS:
            compressed_path = self.packager.pack_javascripts(package)
            return self.render_js(package, compressed_path)
        else:
            package['paths'] = self.packager.compile(package['paths'])
            templates = self.packager.pack_templates(package)
            return self.render_individual(package, templates)

    def render_js(self, package, path):
        context = {}
        if not 'template' in package:
            package['template'] = "compress/js.html"
        if not 'context' in package:
            context = package['context']
        context.update({
            'url': self.packager.individual_url(path)
        })
        return render_to_string(package['template'], context)

    def render_external(self, package, url):
        if not 'template' in package:
            package['template'] = "compress/js.html"
        return render_to_string(package['template'], {
            'url': url
        })

    def render_inline(self, package, js):
        context = {}
        if not 'context' in package:
            context = package['context']
        context.update({
            'source': js
        })
        return render_to_string("compress/inline_js.html", context)

    def render_individual(self, package, templates=None):
        tags = [self.render_js(package, js) for js in package['paths']]
        if templates:
            tags.append(self.render_inline(package, templates))
        return '\n'.join(tags)
Example #4
0
class CompressedNode(template.Node):
    def __init__(self, name, aType):
        self.name = name
        self.type = aType
        if aType == 'css':
            self.template = "compress/css.html"
        else:
            self.template = "compress/js.html"
        self.packager = Packager()

    def create_tags(self, package, path):
        context = {}
        if 'context' in package:
            context = package['context']
        context.update({
            'url': self.packager.individual_url(path)
            })
        return render_to_string(package['template'], context)

    def render(self, context):
        package_name = template.Variable(self.name).resolve(context)
        try:
            package = self.packager.package_for(self.type, package_name)
            package['type'] = self.type
        except PackageNotFound:
            # fail silently, do not return anything if an invalid group
            return ''

        if not 'template' in package:
            package['template'] = self.template

        if 'externals' in package:
            out = '\n'.join([self.render_external(package, url) \
                             for url in package['externals']])
        else:
            out = ''
        individual = True

        compressed_path = None
        if settings.COMPRESS:
            compressed_path = self.packager.pack(package)

        # If something wrong with compressing (can't create files) -
        # fallback to individual
        if compressed_path:
            out += self.create_tags(package, compressed_path)
            individual = False

        if individual:
            package['paths'] = self.packager.compile(package['paths'])
            out += self.render_individual(package)

        return out

    def render_external(self, package, url):
        return render_to_string(package['template'], { 'url': url })

    def render_individual(self, package):
        tags = [self.create_tags(package, path) \
                for path in package['paths']]
        return '\n'.join(tags)