Sha256: 5b51d9c4b5f5a913ebf12c7dd075e339d3eb885b2c06fab3f9b0e959a691d8a6

Contents?: true

Size: 1.94 KB

Versions: 1

Compression:

Stored size: 1.94 KB

Contents

module Caisson::Helpers
  class OrbitSlider
    attr_reader :core

    delegate :capture, to: :core
    delegate :content_tag, to: :core

    def initialize(core, items, options={})
      @options = build_options options

      @core = core
      @items = items
    end

    def generate(&block)
      wrap_slider build_slides(&block)
    end

    private

    def build_options(options)
      options.reverse_merge(
        animation_speed: 400,
        bullets: false,
        class: 'slider',
        columns_per_slide: 1,
        id: "slider-#{rand(10000)}",
        timer_speed: 0)
    end


    def build_item(item, last=false, &block)
      '<li>' + capture(item, &block).to_s + '</li>'
    end

    def build_slides(&block)
      slides = []

      @items.each_slice @options[:columns_per_slide] do |slice|
        content = '<li><div class="spacer"></div><ul class="items small-block-grid-3 large-block-grid-' + @options[:columns_per_slide].to_s + '">'
        slice.each_with_index { |item,i| content << build_item(item, (i==slice.length-1), &block) }
        content << '</ul><div class="spacer"></div></li>'

        slides << content
      end

      return slides.join("\n")
    end

    def parse_attribute_value(raw_value)
      case raw_value
        when true then '1'
        when false then '0'
        else raw_value
      end
    end

    def stringify_options
      results = []

      @options.each { |k,v| results << "#{k}:#{v};" if not [:class, :columns_per_slide, :id].include? k }

      return results.join
    end

    def wrap_slider(content)
      attributes = { 'data-caisson' => 'orbit-slider', 'data-orbit' => '', 'data-options' => stringify_options }

      @options.each do |k,v|
        case k.to_s
          when 'id' then attributes[:id] = v
          when 'class' then attributes[:class] = ['slider', v].compact.join(' ')
          else nil
        end
      end

      return content_tag(:ul, content.html_safe, attributes)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
caisson-0.0.3 lib/caisson/helpers/orbit_slider.rb