format :html do view :type, unknown: true do link_to_card card.type_card, nil, class: "cardtype" end def type_formgroup args={} if card.cards_of_type_exist? wrap_with :div, t(:format_cards_exist, scope: "core", cardname: safe_name) else super end end view :add_link do add_link end view :add_button do add_link class: "btn btn-secondary" end def add_link opts={} voo.title ||= t(:format_add_card, cardname: safe_name) link_to render_title, add_link_opts(opts) end def add_link_opts opts modal = opts.delete :modal if modal.nil? || modal modal_link_opts opts.merge(path: add_path(:new_in_modal)) else opts.merge path: add_path(:new) end end view :add_url do card_url _render_add_path end def add_path view path_args = { mark: card.name } process_voo_params(path_args) if voo.params if view == :new path_args[:action] = :new else path_args[:action] = :type path_args[:view] = view end path path_args end # don't cache because it depends on update permission for another card view :configure_link, cache: :never, perms: ->(fmt) { fmt.can_configure? } do configure_link end def can_configure? Card.fetch(card, :type, :structure, new: {}).ok? :update end view :configure_button, cache: :never, denial: :blank, perms: ->(fmt) { fmt.can_configure? } do configure_link "btn btn-secondary" end def configure_link css_class=nil return "" unless Card.fetch(card, :type, :structure, new: {}).ok? :update voo.title ||= t(:format_configure_card, cardname: safe_name.pluralize) title = _render_title link_to_card card, title, path: { view: :bridge, bridge: { tab: :rules_tab }, set: Card::Name[safe_name, :type] }, class: css_classes("configure-type-link ml-3", css_class) end private def process_voo_params path_args context = (@parent&.card || card).name Rack::Utils.parse_nested_query(voo.params).each do |key, value| value = value.to_name.absolute(context) if value key = key.to_name.absolute(context) path_args[key] = value end end end