lib/ccs/components/govuk/button.rb in ccs-frontend_helpers-0.1.0.rc.2 vs lib/ccs/components/govuk/button.rb in ccs-frontend_helpers-0.1.0.rc.3

- old
+ new

@@ -1,104 +1,106 @@ require_relative '../base' -module CCS::Components - module GovUK - # = GOV.UK Button - # - # This is used to generate the button component from the - # {https://design-system.service.gov.uk/components/button GDS - Components - Button} - # - # @!attribute [r] text - # @return [String] Text for the button - # @!attribute [r] render_method - # @return [String] The method that will be used to render the button +module CCS + module Components + module GovUK + # = GOV.UK Button + # + # This is used to generate the button component from the + # {https://design-system.service.gov.uk/components/button GDS - Components - Button} + # + # @!attribute [r] text + # @return [String] Text for the button + # @!attribute [r] render_method + # @return [String] The method that will be used to render the button - class Button < Base - private + class Button < Base + private - attr_reader :text, :render_method + attr_reader :text, :render_method - public + public - # @param text [String] the text that will be shown in the button - # @param options [Hash] options that will be used in customising the HTML - # - # @option options [String] :classes additional CSS classes for the button HTML - # @option options [Boolean] :is_start_button indicates if it is a start button - # @option options [String] :href the URI that will be used in anchor tag - # @option options [ActionView::Helpers::FormBuilder] :form the form builder used to create the submit button - # @option options [Hash] :attributes ({}) any additional attributes that will added as part of the HTML + # @param text [String] the text that will be shown in the button + # @param options [Hash] options that will be used in customising the HTML + # + # @option options [String] :classes additional CSS classes for the button HTML + # @option options [Boolean] :is_start_button indicates if it is a start button + # @option options [String] :href the URI that will be used in anchor tag + # @option options [ActionView::Helpers::FormBuilder] :form the form builder used to create the submit button + # @option options [Hash] :attributes ({}) any additional attributes that will added as part of the HTML - def initialize(text:, **options) - super(**options) + def initialize(text:, **options) + super(**options) - @options[:attributes][:class] << ' govuk-button--disabled' if @options[:attributes][:disabled] - @options[:attributes][:class] << ' govuk-button--start' if @options[:is_start_button] + @options[:attributes][:class] << ' govuk-button--disabled' if @options[:attributes][:disabled] + @options[:attributes][:class] << ' govuk-button--start' if @options[:is_start_button] - @text = text - @render_method = :"render_#{if @options[:href] - :link - elsif @options[:form] - :submit - else - :button - end}" - end + @text = text + @render_method = :"render_#{if @options[:href] + :link + elsif @options[:form] + :submit + else + :button + end}" + end - # Generates the HTML for the GOV.UK Back link component - # - # @return [ActiveSupport::SafeBuffer] + # Generates the HTML for the GOV.UK Back link component + # + # @return [ActiveSupport::SafeBuffer] - def render - send(@render_method) - end + def render + send(@render_method) + end - # The default attributes for the button + # The default attributes for the button - DEFAULT_ATTRIBUTES = { class: 'govuk-button', data: { module: 'govuk-button' } }.freeze + DEFAULT_ATTRIBUTES = { class: 'govuk-button', data: { module: 'govuk-button' } }.freeze - private + private - # Generates the HTML for the GOV.UK button component as an anchor tag. - # - # @return [ActiveSupport::SafeBuffer] + # Generates the HTML for the GOV.UK button component as an anchor tag. + # + # @return [ActiveSupport::SafeBuffer] - def render_link - @options[:attributes][:role] = :button - @options[:attributes][:draggable] = false + def render_link + @options[:attributes][:role] = :button + @options[:attributes][:draggable] = false - link_to(@options[:href], **@options[:attributes]) do - concat(text) - concat(start_button_icon) if @options[:is_start_button] + link_to(@options[:href], **@options[:attributes]) do + concat(text) + concat(start_button_icon) if @options[:is_start_button] + end end - end - # Generates the HTML for the GOV.UK button component as a button. - # - # @return [ActiveSupport::SafeBuffer] + # Generates the HTML for the GOV.UK button component as a button. + # + # @return [ActiveSupport::SafeBuffer] - def render_button - button_tag(**@options[:attributes]) do - concat(text) - concat(start_button_icon) if @options[:is_start_button] + def render_button + button_tag(**@options[:attributes]) do + concat(text) + concat(start_button_icon) if @options[:is_start_button] + end end - end - # Generates the HTML for the GOV.UK button component as an input. - # - # @return [ActiveSupport::SafeBuffer] + # Generates the HTML for the GOV.UK button component as an input. + # + # @return [ActiveSupport::SafeBuffer] - def render_submit - @options[:form].submit(text, **@options[:attributes]) - end + def render_submit + @options[:form].submit(text, **@options[:attributes]) + end - # Generates the arrow if the button is a start button - # - # @return [ActiveSupport::SafeBuffer] + # Generates the arrow if the button is a start button + # + # @return [ActiveSupport::SafeBuffer] - def start_button_icon - tag.svg(class: 'govuk-button__start-icon', xmlns: 'http://www.w3.org/2000/svg', width: 17.5, height: 19, viewBox: '0 0 33 40', aria: { hidden: true }, focusable: false) do - tag.path(fill: 'currentColor', d: 'M0 0h13l20 20-20 20H0l20-20z') + def start_button_icon + tag.svg(class: 'govuk-button__start-icon', xmlns: 'http://www.w3.org/2000/svg', width: 17.5, height: 19, viewBox: '0 0 33 40', aria: { hidden: true }, focusable: false) do + tag.path(fill: 'currentColor', d: 'M0 0h13l20 20-20 20H0l20-20z') + end end end end end end