format :html do delegate :autoname?, to: :card view :new, perms: :create, unknown: true, cache: :never do framed_create_form new_form_opts end view :new_in_modal, perms: :create, unknown: true, cache: :never, wrap: { modal: { footer: "", size: :edit_modal_size, title: :new_in_modal_title, menu: :new_modal_menu } } do voo.buttons_view ||= :new_in_modal_buttons wrap do create_form "data-slot-selector": "modal-origin", "data-slot-error-selector": ".card-slot" end end view :simple_new, perms: :create, unknown: true, wrap: :slot, cache: :never do create_form end view :new_fields, perms: :create, unknown: true, cache: :never do wrap true, class: "w-100" do [ new_view_hidden, new_view_name, new_view_type, _render_content_formgroups, _render(voo.buttons_view || :new_buttons) ] end end def with_create_context with_nest_mode :edit do voo.title ||= new_view_title if new_name_prompt? voo.show :help yield end end def create_form form_opts={} with_create_context do card_form :create, form_opts do create_form_with_alert_guide end end end def new_modal_size :large end def new_modal_menu wrap_with_modal_menu do [render_close_modal_link, render_board_link] end end def framed_create_form form_opts={} form_opts.reverse_merge! success: new_success with_create_context do frame_and_form :create, form_opts do create_form_with_alert_guide end end end def create_form_with_alert_guide wrap_with :div, class: "d-flex justify-content-between" do [_render_new_fields, (alert_guide if voo.show?(:guide))] end end def new_form_opts { "data-main-success": JSON(redirect: true) } end # LOCALIZE def new_view_title output( "New", (card.type_name unless card.type_id == Card.default_type_id) ) end def new_in_modal_title new_name_prompt? ? new_view_title : render_title end def new_success { mark: (card.rule(:thanks) || "_self") } end def new_in_modal_success; end def new_view_hidden; end # NAME HANDLING def new_view_name if new_name_prompt? new_name_formgroup elsif !autoname? hidden_field_tag "card[name]", card.name end end def new_name_formgroup output _render_name_formgroup, hidden_field_tag("name_prompt", true) end def new_name_prompt? voo.visible? :name_formgroup do needs_name? || params[:name_prompt] end end def needs_name? card.name.blank? && !autoname? end # TYPE HANDLING def new_view_type if new_type_prompt? _render_new_type_formgroup else hidden_field_tag "card[type_id]", card.type_id end end def new_type_prompt? voo.visible? :new_type_formgroup do !new_type_preset? && new_type_prompt_context? && new_type_permitted? end end def new_type_preset? params[:type] || voo.type end def new_type_prompt_context? main? || card.simple? || card.is_template? end def new_type_permitted? Card.new(type_id: card.type_id).ok? :create end view :new_type_formgroup do wrap_type_formgroup do type_field class: "type-field _live-type-field slotter", href: path(view: :new_fields), "data-remote" => true end end view :new_buttons do button_formgroup do [standard_create_button, standard_cancel_button(href: cancel_create_path)] end end view :new_in_modal_buttons do class_up "button-form-group", "d-flex" button_formgroup do [standard_save_and_close_button(text: "Submit"), modal_cancel_button] end end # path to redirect to after canceling a new form def cancel_create_path if main? path_to_previous else path view: (voo&.home_view || :unknown) end end def standard_create_button args={} submit_button args.merge(class: "submit-button create-submit-button") end end