module Polyblock module ViewHelpers def pb(name, options={}) options = { # :editable => false, :tag => :div, :tag_options => {}, :condensed => false, :length => 250, :omission => '... (continued)' }.merge(options) # Fetch or create Polyblock pb = Block.fetch_or_create(name) pb_id = pb.new_record? ? Block.next_id : pb.id name = pb.name if name.is_a? Block random_id = Block.random_id # Build output tag content = pb.content.present? ? pb.content : "[Editable content space for Polyblock #{name}]" tag_options = options[:tag_options].deep_merge({:id => "pb-#{pb_id}-#{random_id}", :data => {:pbid => pb_id, :pbname => name}}) tag_options[:contenteditable] = if options[:condensed] 'false' elsif options.has_key?(:editable) options[:editable] ? 'true' : 'false' elsif respond_to?(:can?) && can?(:manage, pb) 'true' elsif respond_to?(:user_signed_in?) && user_signed_in? if current_user.respond_to?(:admin?) && current_user.admin? 'true' elsif pb.contentable.present? && pb.contentable.respond_to?(:user_id) && pb.contentable.user_id == current_user.id 'true' else 'false' end else 'false' end tag_options.delete(:contenteditable) if tag_options[:contenteditable] == 'false' tag_options[:class] = (tag_options.key?(:class) ? "#{tag_options[:class]} ": '') + 'polyblock' tag_options[:data][:pb_exists] = pb.new_record? # Truncation if options[:condensed] tag_options[:class] += " polyblock-condensed" content = CGI.unescapeHTML(content.gsub('

', '
').gsub(' ', ' ')) truncate(sanitize(strip_tags(content)), :length => options[:length], :omission => options[:omission]) else content_tag(options[:tag], content, tag_options, false) end end def simple_fields_for_polyblock(name, f, options={}) options = { :label => false, :input_html => {} }.merge(options) pb = if name.is_a?(String) Block.fetch_or_initialize(name) elsif name.is_a?(Symbol) f.object else nil end render :partial => 'polyblock/simple_fields_for', :locals => {:f => f, :pb => pb, :name => name, :options => options} end def polyblock_editor_bar render :partial => 'polyblock/editor_bar' end end end