# frozen_string_literal: true # Ayudadores para Bootstrap 5 basados en los ayudadores para # Bootstrap 3 de la gema twitter-bootstrap-rails module Msip module BootstrapHelper # Genera grupo de menus def grupo_menus(opciones = {}, &bloque) adclases = ["navbar-nav", "me-auto"] if (opciones[:pull] && opciones[:pull] == :right) || (opciones[:empujar] && opciones[:empujar] == :derecha) adclases << "ms-auto" adclases.delete("me-auto") end r = content_tag(:ul, class: adclases, &bloque) r end module_function :grupo_menus alias_method :menu_group, :grupo_menus module_function :menu_group # Genera opcion menú def opcion_menu(opcionmenu, url, opciones = {}) cop = opciones.clone if cop[:desplegable] || cop[:dropdown] cop.delete(:desplegable) cop.delete(:dropdown) r = content_tag(:li) do link_to(opcionmenu, url, cop.merge({ class: "dropdown-item" })) end else r = content_tag(:li, class: "nav-item") do link_to(opcionmenu, url, cop.merge({ class: "nav-link" })) end end r end module_function :opcion_menu alias_method :menu_item, :opcion_menu module_function :menu_item # Opción de un menú dashboardkit def opcion_menu_dk(opcionmenu, url, opciones = {}) cop = opciones.clone if cop[:desplegable] || cop[:dropdown] cop.delete(:desplegable) cop.delete(:dropdown) r = link_to(opcionmenu, url, cop.merge({ class: "dropdown-item" })) else r = content_tag(:li, class: "pc-item") do link_to(opcionmenu, url, cop.merge({ class: "pc-link" })) end end r end module_function :opcion_menu_dk # Genera grupo de menus def despliega_abajo(opcionmenu, &bloque) opab = opcionmenu.gsub(" ", "_") r = content_tag(:li, class: "nav-item dropdown") do link_to( opcionmenu, "#", class: "nav-link dropdown-toggle", id: "navbarDropdown" + opab, role: "button", "data-bs-toggle" => "dropdown", "aria-expanded" => false, ) + content_tag( :ul, class: "dropdown-menu dropdown-menu-light", "aria-labelledby" => "navbarDropdown" + opab, &bloque ) end r end module_function :despliega_abajo alias_method :drop_down, :despliega_abajo module_function :drop_down def despliega_abajo_dk(opcionmenu, url, opciones = {}, &bloque) copiaop = opciones opab = opcionmenu.gsub(" ", "_") maticon = "home" if opciones[:maticon] maticon = opciones[:maticon] copiaop.delete(:maticon) end claseli = "pc-item" flecha = "" if opciones.keys.exclude?(:sinflecha) flecha = content_tag(:span, class: "pc-arrow") do content_tag(:i, "data-feather" => "chevron-right") do end end claseli += " pc-hasmenu" else copiaop.delete(:sinflecha) end leyenda = false if opciones[:leyenda] leyenda = true claseli += " pc-caption" end r = content_tag(:li, class: claseli) do if leyenda # content_tag(:span, class: 'pc-micon') do content_tag(:label) do opcionmenu end # end else link_to( url, copiaop.merge({ class: "pc-link", id: "navbarDropdown" + opab, }) ) do unless bloque.nil? end content_tag(:span, class: "pc-micon") do content_tag(:i, class: "material-icons-two-tone") do maticon end end + content_tag(:span, class: "pc-mtext") do opcionmenu end + flecha end + content_tag(:ul, class: "pc-submenu", &bloque) end end r end module_function :opcion_menu_dk # Genera grupo de menus def grupo_menus_dk(opciones = {}, &bloque) adclases = ["pc-navbar"] r = content_tag(:ul, class: adclases, &bloque) r end module_function :grupo_menus_dk def barra_navegacion(opciones, &bloque) r = content_tag( :nav, class: "navbar navbar-expand-lg navbar-light bg-light", ) do content_tag( :div, class: "container-fluid", ) do r2 = "" if opciones[:marca] || opciones[:brand] r2 += link_to( opciones[:marca] ? opciones[:marca] : opciones[:brand], opciones[:enlace_marca] ? opciones[:enlace_marca] : opciones[:brand_link], class: "navbar-brand", ) end r2 += content_tag( :button, class: "navbar-toggler", type: "button", "data-bs-toggle" => "collapse", "data-bs-target" => "#navbarSupportedContent", "aria-controls" => "navbarSupportedContent", "aria-expanded" => false, "aria-label" => "Intercambiar navegación", ) do content_tag(:span, "", class: "navbar-toggler-icon") end r2 += content_tag( :div, class: "collapse navbar-collapse", id: "navbarSupportedContent", &bloque ) r2.html_safe end end r.html_safe end module_function :barra_navegacion alias_method :nav_bar, :barra_navegacion module_function :nav_bar def anuncios_bootstrap r = "".dup flash.each do |tipo, mensaje| tal = case tipo.to_sym when :success, :notice :success else :danger end r << content_tag( :div, class: "alert alert-#{tal} "\ "alert-dismissible fade show", role: :alert, ) do content_tag(:span, mensaje) + content_tag( :button, type: :button, class: "btn-close", "data-bs-dismiss" => :alert, "aria-label" => "Close", ) do end end end r.html_safe end module_function :anuncios_bootstrap alias_method :bootstrap_flash, :anuncios_bootstrap module_function :bootstrap_flash # Sección colapsable dentro de un div con clase accordion # @param acid Id del acorden # @param idit Id del item # @param titulo Titulo del item # @param expandido booleano para que inicie expandido # @param bloque Que se presenta al expandir def item_acordeon_bs( acid, idit, titulo, expandido = false, opciones = {}, &bloque ) content_tag( :div, class: "accordion-item " + opciones.fetch("clase_accordion-item", ""), ) do content_tag( :h5, class: "accordion-header mb-0 " + opciones.fetch( "clase_accordion-header", "" ), id: "enc_" + idit, style: opciones.fetch("estilo_accordion-header", nil), ) do content_tag( :button, class: "accordion-button " + ( expandido ? "" : "collapsed " ) + opciones.fetch( "clase_accordion-button", "" ), type: "button", "data-bs-toggle" => "collapse", "data-bs-target" => "#" + idit, "aria-expanded" => (expandido ? "true" : "false"), "aria-controls" => idit, style: opciones.fetch("estilo_accordion-button", nil), id: "enc_" + idit, ) do titulo end end + content_tag( :div, class: "accordion-collapse collapse " + ( expandido ? "show " : "" ) + opciones.fetch("clase_accordion-collapse", ""), "aria-labelledby" => "enc_#{idit}", "data-bs-parent" => acid, id: idit, ) do content_tag( :div, class: "accordion-body " + opciones.fetch("clase_accordion-body", ""), style: opciones.fetch("estilo_accordion-body", nil), ) do yield bloque end end end end module_function :item_acordeon_bs # Encabezado de pestaña. Debe tener un contenido_pestaña_bs # Va dentro de un