module Alchemy module Admin module ContentsHelper include Alchemy::Admin::BaseHelper # Returns a string for the id attribute of a html element for the given content def content_dom_id(content) return "" if content.nil? if content.class == String c = Content.find_by_name(content) return "" if c.nil? else c = content end "#{c.essence_type.demodulize.underscore}_#{c.id}" end # Renders the name of elements content or the default name defined in elements.yml def render_content_name(content) if content.blank? warning('Element is nil') return "" else content_name = content.name_for_label end if content.description.blank? warning("Content #{content.name} is missing its description") title = _t(:content_description_missing) content_name = %( #{content_name}).html_safe end content.has_validations? ? "#{content_name}*".html_safe : content_name end # Renders a link to show the new content overlay that lets you add additional contents. # # See +render_create_content_link+ helper for exmaples on how to define additional contents. # def render_new_content_link(element) link_to_overlay_window( render_icon(:create) + _t('add new content'), alchemy.new_admin_element_content_path(element), { :size => '310x115', :title => _t('Select an content'), :overflow => true }, { :id => "add_content_for_element_#{element.id}", :class => 'button with_icon new_content_link' } ) end # Renders a link that dynamically adds an additional content into your element editor view. # # NOTE: You have to define additional contents in your elements.yml file first. # # ==== Example: # # # config/alchemy/elements.yml # - name: downloads: # contents: # - name: file # type: EssenceFile # additional_contents: # - name: file # type: EssenceFile # # Then add this helper into the elements editor view partial: # # <%= render_create_content_link(element, 'file') %> # # Optionally you can pass a label: # # <%= render_create_content_link(element, 'file', :label => 'Add a file') %> # def render_create_content_link(element, content_name, options = {}, options_for_content = {}) defaults = { :label => _t('Add %{name}', :name => _t(content_name, :scope => :content_names)) } options = defaults.merge(options) link_to(render_icon(:create) + options[:label], alchemy.admin_contents_path( :content => { :name => content_name, :element_id => element.id }, :options => options_for_content.to_json ), :method => :post, :remote => true, :id => "add_content_for_element_#{element.id}", :class => 'button with_icon new_content_link' ) end # Renders a link for removing that content def delete_content_link(content) link_to_confirmation_window( render_icon('delete-small'), _t('Do you really want to delete this content?'), alchemy.admin_content_path(content), :class => 'icon_button small', :title => _t('Remove this content') ) if content.settings[:deletable] end # Renders the label and a remove link for a content. def label_and_remove_link(content) content_tag :label do [render_hint_for(content), render_content_name(content), delete_content_link(content)].compact.join(' ').html_safe end end end end end