Sha256: 00509158ce0828940734e8357cf324a38ef73c633c9f8f2bad506520ba364e83

Contents?: true

Size: 1.63 KB

Versions: 24

Compression:

Stored size: 1.63 KB

Contents

module Octopress
  module Ink
    module Tags
      class IncludeTag < Liquid::Tag
        PLUGIN_SYNTAX = /(.+?):(\S+)/

        def initialize(tag_name, markup, tokens)
          super
          @og_markup = @markup = markup
        end

        def render(context)
          return unless markup = Helpers::Conditional.parse(@markup, context)
          if markup =~ Helpers::Var::HAS_FILTERS
            markup = $1
            filters = $2
          end
          markup = Helpers::Var.evaluate_ternary(markup, context)
          markup = Helpers::Path.parse(markup, context)

          include_tag = Jekyll::Tags::IncludeTag.new('include', markup, [])

          # If markup references a plugin e.g. plugin-name:include-file.html
          if markup.strip =~ PLUGIN_SYNTAX
            plugin = $1
            path = $2
            begin
              content = Plugins.include(plugin, path).read
            rescue => error
              raise IOError.new "Include failed: {% #{@tag_name} #{@og_markup}%}. The plugin '#{plugin}' does not have an include named '#{path}'."
            end
            partial = Liquid::Template.parse(content)
            content = context.stack {
              context['include'] = include_tag.parse_params(context)
              partial.render!(context)
            }.strip
            
          # Otherwise, use Jekyll's default include tag
          else
            content = include_tag.render(context).strip
          end

          unless content.nil? || filters.nil?
            content = Helpers::Var.render_filters(content, filters, context)
          end

          content
        end
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
octopress-ink-1.0.0.alpha.35 lib/octopress-ink/tags/include.rb
octopress-ink-1.0.0.alpha.34 lib/octopress-ink/tags/include.rb
octopress-ink-1.0.0.alpha.33 lib/octopress-ink/tags/include.rb
octopress-ink-1.0.0.alpha.32 lib/octopress-ink/tags/include.rb