2007-01-22 14:43:50 +01:00
|
|
|
require 'chunks/chunk'
|
2008-05-21 00:02:10 +02:00
|
|
|
require 'stringsupport'
|
2007-01-22 14:43:50 +01:00
|
|
|
|
|
|
|
# The category chunk looks for "category: news" on a line by
|
|
|
|
# itself and parses the terms after the ':' as categories.
|
|
|
|
# Other classes can search for Category chunks within
|
|
|
|
# rendered content to find out what categories this page
|
|
|
|
# should be in.
|
|
|
|
#
|
|
|
|
# Category lines can be hidden using ':category: news', for example
|
|
|
|
class Category < Chunk::Abstract
|
2007-09-06 17:40:48 +02:00
|
|
|
|
2007-01-22 14:43:50 +01:00
|
|
|
CATEGORY_PATTERN = /^(:)?category\s*:(.*)$/i
|
|
|
|
def self.pattern() CATEGORY_PATTERN end
|
|
|
|
|
|
|
|
attr_reader :hidden, :list
|
|
|
|
|
|
|
|
def initialize(match_data, content)
|
|
|
|
super(match_data, content)
|
|
|
|
@hidden = match_data[1]
|
2008-05-22 09:46:45 +02:00
|
|
|
@list = match_data[2].split(',').map { |c| c.to_s.is_utf8? ? c.strip.escapeHTML : nil }
|
2007-09-06 17:40:48 +02:00
|
|
|
@list.compact!
|
2007-01-22 14:43:50 +01:00
|
|
|
@unmask_text = ''
|
|
|
|
if @hidden
|
|
|
|
@unmask_text = ''
|
|
|
|
else
|
|
|
|
category_urls = @list.map { |category| url(category) }.join(', ')
|
|
|
|
@unmask_text = '<div class="property"> category: ' + category_urls + '</div>'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
# TODO move presentation of page metadata to controller/view
|
|
|
|
def url(category)
|
2007-09-10 06:20:06 +02:00
|
|
|
%{<a class="category_link" href="../list/#{category}">#{category}</a>}
|
2007-01-22 14:43:50 +01:00
|
|
|
end
|
|
|
|
end
|