Sha256: 0eb067f61a629e8242e8856078ab2e282602d8218330e03410284920e23af571

Contents?: true

Size: 1.66 KB

Versions: 21

Compression:

Stored size: 1.66 KB

Contents

require 'forwardable'

module SimpleNavigation
  module Renderer

    # This is the base class for all renderers.
    #
    # A renderer is responsible for rendering an ItemContainer and its containing items to HTML.
    class Base
      extend Forwardable
            
      attr_reader :options, :adapter
      
      def_delegators :adapter, :link_to, :content_tag
            
      def initialize(options) #:nodoc:
        @options = options
        @adapter = SimpleNavigation.adapter
      end

      def expand_all?
        !!options[:expand_all]
      end

      def level
        options[:level] || :all
      end

      def skip_if_empty?
        !!options[:skip_if_empty]
      end

      def include_sub_navigation?(item)
        consider_sub_navigation?(item) && expand_sub_navigation?(item)
      end

      def render_sub_navigation_for(item)
        item.sub_navigation.render(self.options)
      end
                  
      # Renders the specified ItemContainer to HTML.
      #
      # When implementing a renderer, please consider to call include_sub_navigation? to determin
      # whether an item's sub_navigation should be rendered or not.
      #
      def render(item_container)
        raise 'subclass responsibility'
      end

      protected

      def consider_sub_navigation?(item)
        return false if item.sub_navigation.nil?
        case level
        when :all
          return true
        when Integer
          return false
        when Range
          return item.sub_navigation.level <= level.max
        end
        false
      end

      def expand_sub_navigation?(item)
        expand_all? || item.selected?
      end
            
    end
  end
end

Version data entries

21 entries across 21 versions & 2 rubygems

Version Path
simple-navigation-3.6.0 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.5.1 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.5.0 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.4.2 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.4.1 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.4.0 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.3.4 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.3.3 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.3.2 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.3.1 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.3.0 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.2.0 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-ext-0.0.2 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-ext-0.0.1 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.1.1 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.1.0 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.0.2 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.0.1 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.0.0 lib/simple_navigation/rendering/renderer/base.rb
simple-navigation-3.0.0.beta2 lib/simple_navigation/rendering/renderer/base.rb