compass/doc-src/lib/default.rb

138 lines
3.2 KiB
Ruby
Raw Normal View History

2010-01-21 06:25:44 +00:00
# All files in the 'lib' directory will be loaded
# before nanoc starts compiling.
include Nanoc3::Helpers::LinkTo
include Nanoc3::Helpers::Capturing
include Nanoc3::Helpers::Rendering
2010-01-25 00:06:34 +00:00
include Nanoc3::Helpers::Breadcrumbs
def body_class(item)
classes = [""]
2010-04-24 17:43:32 +00:00
classes += item[:classnames] || []
classes << "demo" if item.identifier =~ /^\/examples/
classes.join(" ")
end
def body_id(item)
2010-01-31 18:01:04 +00:00
if item[:body_id]
item[:body_id]
elsif id = item.identifier.chop[1..-1]
2010-01-22 19:41:08 +00:00
id.gsub(/\/|_/, "-")
end
end
def body_attributes(item)
{
:id => body_id(item),
:class => body_class(item)
}
end
module Enumerable
def sorted_and_grouped_by_name
sort_by{|i| yield(i)}.group_by{|i| yield(i).sub(/^[^\w]/,"")[0..0].upcase}
end
end
class Recycler
attr_accessor :values
attr_accessor :index
def initialize *values
self.values = values
self.index = 0
end
def next
values[index]
ensure
self.index += 1
self.index = 0 if self.index >= self.values.size
end
def reset!
self.index = 0
end
end
def cycle(*args)
yield Recycler.new *args
end
def default_path(item)
item.reps.find{|r| r.name == :default}.path
end
def find(identifier)
@items.find{|i| i.identifier == identifier}
end
2010-04-24 17:03:34 +00:00
def get_var(instance_var)
instance_variable_defined?("@#{instance_var}") ? instance_variable_get("@#{instance_var}") : yield
end
2010-12-19 00:25:49 +00:00
def sidebar_item(item)
if item.nil?
nil
elsif item[:sidebar]
item
else
sidebar_item(item.parent)
end
end
def sidebar_stylesheet(item)
i = sidebar_item(item)
i[:stylesheet] if i
end
2010-04-24 17:03:34 +00:00
2010-04-21 05:43:25 +00:00
def item_tree(item, options = {})
crumb = item[:crumb] || item[:title]
2010-04-21 16:37:02 +00:00
options[:heading_level] ||= 1 if options.fetch(:headings, true)
child_html = ""
2010-04-21 05:43:25 +00:00
if options.fetch(:depth,1) > 0
child_opts = options.dup
child_opts[:depth] -= 1 if child_opts.has_key?(:depth)
2010-12-19 00:25:49 +00:00
child_opts[:heading_depth] -= 1 if child_opts.has_key?(:heading_depth)
child_opts[:heading_level] += 1 if child_opts[:heading_level]
child_opts.delete(:omit_self)
item.children.sort_by{|c| c[:crumb] || c[:title]}.each do |child|
next if child[:navigable] == false
child_html << item_tree(child, child_opts)
end
2010-04-21 05:43:25 +00:00
else
options.delete(:heading_level)
end
child_html = render("partials/sidebar/container", :contents => child_html) unless child_html.size == 0
css_class = nil
2010-04-21 05:43:25 +00:00
contents = unless options[:omit_self]
item_opts = {
:current_item => item,
:selected => !!@item.identifier[item.identifier],
:crumb => item[:crumb] || item[:title]
}
2010-12-19 00:25:49 +00:00
if options[:heading_level] && (options.fetch(:heading_depth, 1) > 0)
render("partials/sidebar/heading",
item_opts.merge(:heading => "h#{options[:heading_level]}")
)
2010-04-21 05:43:25 +00:00
else
render("partials/sidebar/item", item_opts)
2010-04-21 05:43:25 +00:00
end
end
%Q{#{contents}#{child_html}}
end
2010-04-24 17:03:34 +00:00
def tutorial_item(path)
path = "" if path == :root
@items.detect do |i|
2010-11-22 01:30:41 +00:00
i.identifier == "/help/tutorials/#{path}"
2010-04-24 17:03:34 +00:00
end
end
def compass_version
v = Compass.version
2010-11-16 01:41:18 +00:00
"#{v[:major]}.#{v[:minor]}#{"."+v[:state] if v[:state]}.#{v[:build]}"
end
2011-01-10 06:18:05 +00:00
def long_compass_version
require 'compass/commands'
Compass::Commands::PrintVersion.long_output_string
end