require 'railsstrap/classes/modal'
module Railsstrap
module Helpers
# Displays a Bootstrap-styled modal.
# @see http://getbootstrap.com/javascript/#modals
# @return [String] the HTML to display a Bootstrap-styled modal.
# @overload modal(body, options = {})
# @param [#to_s] body the content to display as the modal body.
# @param [Hash] options the options for the modal. Any option not listed
# below is ignored, except for `:id` which is passed as an HTML
# attribute to the modal’s `
`.
# @option options [#to_s] :title ('Modal') the title of the modal.
# @option options [#to_s] :body the content to display as the modal body.
# Using this option is equivalent to passing the body as an argument.
# @option options [#to_s] :size the size of the modal. Can be `:large`
# (alias `:lg`) or `:small` (alias `:sm`).
# @option options [Hash] :button the options for the toggle button.
# * :caption (#to_s) ('Modal') the caption of the toggle button.
# * :context (#to_s) (:default) the contextual alternative to apply to
# the toggle button. Can be `:danger`, `:info`, `:link`, `:primary`,
# `:success` or `:warning`.
# * :size (#to_s) the size of the toggle button. Can be `:extra_small`
# (alias `:xs`), `:large` (alias `:lg`) or `:small` (alias `:sm`).
# * :layout (#to_s) if set to `:block`, span the button for the full
# width of the parent.
# @example Display a simple modal toggled by a blue button.
# modal 'You clicked me!', title: 'Click me', button: {context: :info}
# @overload modal(options = {}, &block)
# @param [Hash] options the options for the modal (see above).
# @yieldreturn [#to_s] the content to display in the modal.
# @example Display a modal with HTML content.
# modal title: 'Click me' do
# content_tag :div, class: 'modal-body' do
# content_tag :em, 'You clicked me!'
# end
# end
def modal(*args, &block)
modal = Railsstrap::Modal.new self, *args, &block
modal.extract! :button, :size, :body, :title, :id, :dismissable, :dismiss
modal.extract_from :button, [:variant, :size, :layout, :caption]
modal.append_class_to! :button, :btn
modal.append_class_to! :button, modal.button_variant_class
modal.append_class_to! :button, modal.button_size_class
modal.merge! button: {caption: modal.caption}
modal.append_class_to! :div, :'modal-dialog'
modal.append_class_to! :div, modal.dialog_size_class
modal.merge! div: {title: modal.title, id: modal.id}
modal.render_partial 'modal'
end
end
end