module AdminIt # module Helpers # class Cell < WrapIt::Base include WrapIt::TextContainer default_tag 'td' attr_accessor :column option :column before_capture do unless column.nil? col = parent.parent.context.field(column) unless col.nil? col.render(parent.parent.context.entity, instance: self) end end end end # class ActionsCell < WrapIt::Base default_tag 'td' before_capture do context = parent.parent.context entity = context.entity resource = parent.parent.resource single = resource.singles.select { |c| !(c <= NewContext) } buttons = single.map do |_context| if _context <= ShowContext && context.show_in_dialog? '<a class="btn btn-xs btn-info" ' + %Q(data-toggle="modal" data-target="#confirm_modal" ) + %Q(href="#{_context.path(entity)}?layout=dialog">) + %Q(<i class="fa fa-#{_context.icon}"></i></a>) else cl = _context <= ShowContext ? 'info' : 'default' href = _context.path(entity) "<a class=\"btn btn-xs btn-#{cl}\" href=\"#{href}\">" \ "<i class=\"fa fa-#{_context.icon}\"></i></a>" end end if resource.destroyable? if context.confirm_destroy? confirm = single.find { |c| c.context_name == :confirm } || single.first { |c| c <= ShowContext } unless confirm.nil? buttons << '<a class="btn btn-xs btn-danger" ' + %Q(data-toggle="modal" data-target="#confirm_modal" ) + %Q(href="#{confirm.path(entity)}) + '?layout=dialog&confirm=destroy">' + '<i class="fa fa-trash-o"></i></a>' end else show = single.first { |c| c <= ShowContext } unless show.nil? buttons << @template.link_to( html_safe('<i class="fa fa-trash-o"></i>'), show.path(entity), method: :delete, class: 'btn btn-xs btn-danger' ) end end end html = buttons.join html = "<div class=\"btn-group\">#{html}</div>" if buttons.size > 1 self[:content] = html_safe(html) end end # class Header < WrapIt::Container default_tag 'tr' child :cell, Cell, tag: 'th' end # class Row < WrapIt::Container default_tag 'tr' child :cell, Cell child :actions, ActionsCell before_capture do block = parent.context.row instance_exec(parent.context.entity, &block) unless block.nil? end end # class Table < WrapIt::Container default_tag 'table' html_class %w(table) attr_writer :context argument :context, if: AdminIt::Context def context @context ||= @template.context end def resource context.resource end child :header, Header child :row, Row end register :table, Table end end