# 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) return 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 return 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 return 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 return 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.include?(: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 s = '' if !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 return 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) return 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 = '' flash.each do |tipo, mensaje| case tipo.to_sym when :success, :notice tal = :success else tal = :danger end r << content_tag( :div, class: "alert alert-#{tal.to_s} "\ "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 return 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) r = 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