class Jekyll::ViewSource::Generator

Public Instance Methods

generate(site) click to toggle source
# File lib/jekyll-viewsource.rb, line 36
def generate(site)
  ViewSource.site(site)

  config = site.config[VIEWSOURCE] || {}
  return unless config["enabled"].nil? || config["enabled"]

  config['options'] ||= ''

  @debug = config["debug"]
  ViewSource.debug_state @debug
  Cache.setup(site, config['cache'].nil? || config['cache'])

  config['collection'] = config['collection'].split(/,\s*/) if config['collection'].is_a?(String)

  collections = [ config['collection'], config["collections"] ].flatten.compact.uniq

  collections = [ "posts", "pages" ] if collections.empty?

  collections.each do |collection|
    if collection == "pages"
      items = site.pages
    else
      next if !site.collections.has_key?(collection)
      items = site.collections[collection].docs
    end

    process = items.select { |item| item.data[VIEWSOURCE]}

    process.each do |item|
      vs_opts = item.data[VIEWSOURCE].to_s + ' ' + config['options']

      if m = /pretty\s*=?\s*(['"](.*?)['"]|)/.match(vs_opts)
        pretty = m[2] || DEFAULT_CSS
      end

      if m = /linkback\s*=?\s*(['"](.*?)['"]|)/.match(vs_opts)
        linkback = m[2] || 'Back'
      end

      view_md = (vs_opts =~ /\b(md|markdown)\b/i)
      view_pr = (vs_opts =~ /\b(prerender)\b/i)
      view_html = (vs_opts =~ /\bhtml\b/i)

      view_md ||= !view_html

      suffix = (pretty ? INFIXED_HTML : INFIXED_TXT)

      # Enqueue for post site render
      if view_md || view_pr
        dest_folder = Pathname(item.url).dirname
        dest_folder = '' if dest_folder.to_s == '/'
        filename = File.basename(item.path)
        item.data[MD_FILE_PROP] = "#{dest_folder}/#{filename}"
        if view_md
          item.data[MD_SOURCE_URL] = item.data[MD_FILE_PROP] + suffix
        end

        if view_pr
          item.data[PR_SOURCE_URL] = item.data[MD_FILE_PROP] + suffix
        end
      end

      if view_html
        item.data[HTML_FILE_PROP] = "#{item.destination('')}".sub!(site.dest, '')
        item.data[HTML_SOURCE_URL] = item.data[HTML_FILE_PROP] + suffix
      end

      item.data[PRETTY_PROP] = pretty
      item.data[LINKBACK_PROP] = "#{item.url}|$|#{linkback}" if linkback
      if view_md || view_html
        Renderer.enqueue(item)
      elsif view_pr
        Renderer.enqueue(item, PR)
      end

    end
  end

end