rails-bootstrap-tabs 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9387ee7d3a1b5eb0317ee1754f6990fef284f409
4
+ data.tar.gz: bb0a3016597dd703d25ecf09a8a6192830ab5953
5
+ SHA512:
6
+ metadata.gz: 2bb7c59df9ab48adb88e52d9169c42a2bd11b9d4c77e344ce07739ef80b3eb22400a46437721a8728cc291cd90f2759e42bc44be84839a5f089b309f993a455b
7
+ data.tar.gz: a464a0da3c2c7348b0e3178200339e474254040d3850874e3f750190b8b581457174752d72a7dd413dbaac2b222b2c0f36292791ee8fcbefe83ac2b0412cee61
@@ -0,0 +1,7 @@
1
+ module RailsBootstrapTabs
2
+ module Renderers
3
+ autoload :TabsRenderer, 'rails-bootstrap-tabs/renderers/tabs_renderer'
4
+ end
5
+ end
6
+
7
+ require 'rails-bootstrap-tabs/rails/engine'
@@ -0,0 +1,7 @@
1
+ module RailsBootstrapTabs::Helpers
2
+ module TabsHelper
3
+ def tabs(*args, &block)
4
+ RailsBootstrapTabs::Renderers::TabsRenderer.new(self, *args, &block).render
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ require 'rails-bootstrap-tabs/helpers/tabs_helper'
2
+
3
+ module RailsBootstrapTabs
4
+ module Rails
5
+ class Engine < ::Rails::Engine
6
+ initializer "rails-bootstrap-tabs" do
7
+ ActionView::Base.send :include, RailsBootstrapTabs::Helpers::TabsHelper
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,80 @@
1
+ module RailsBootstrapTabs::Renderers
2
+ class TabsRenderer
3
+ def initialize(template, *args, &block)
4
+ @template = template
5
+ @args = args || []
6
+ @options = args[0] || {}
7
+ @block = block
8
+ @tabs = []
9
+ end
10
+
11
+ def rstr
12
+ (0...8).map { ('a'.ord + rand(26)).chr }.join
13
+ end
14
+
15
+ def render
16
+ @block.call(Context.new(self))
17
+ prepare_tabs
18
+ render_tabs(@tabs) + render_panes(@tabs, @options)
19
+ end
20
+
21
+ def prepare_tabs
22
+ @tabs.each.with_index do |tab, index|
23
+ tab.options[:anchor] ||= "tab-#{index}-#{rstr}"
24
+ end
25
+ active_tab = @tabs.find { |t| t.options[:active] }
26
+ active_tab ||= @tabs.first
27
+ @tabs.each { |t| t.options.delete(:active) }
28
+ active_tab.options[:active] = true if active_tab
29
+ end
30
+
31
+ def render_tabs(tabs)
32
+ content_tag :ul, class: 'nav nav-tabs' do
33
+ tabs.map do |tab|
34
+ options = tab.options
35
+ content_tag :li, class: ('active' if options[:active]) do
36
+ link_to tab.name, "##{options[:anchor]}", data: { toggle: 'tab' }
37
+ end
38
+ end.join("\n").html_safe
39
+ end
40
+ end
41
+
42
+ def render_panes(tabs, options)
43
+ content_class = 'tab-content'
44
+ content_class << " #{options[:content_class]}" if options[:content_class]
45
+
46
+ content_tag :div, class: content_class do
47
+ tabs.map do |tab|
48
+ options = tab.options
49
+ pane_class = 'tab-pane'
50
+ pane_class << ' active' if options[:active]
51
+ content_tag :div, id: options[:anchor].to_s, class: pane_class do
52
+ tab.block.call if tab.block
53
+ end
54
+ end.join("\n").html_safe
55
+ end
56
+ end
57
+
58
+ def tab(name, options, &block)
59
+ @tabs << Tab.new(name, options, block)
60
+ end
61
+
62
+ class Context
63
+ include ActionView::Helpers::TagHelper
64
+
65
+ def initialize(renderer)
66
+ @renderer = renderer
67
+ end
68
+
69
+ def tab(name, options = {}, &block)
70
+ @renderer.tab(name, options, &block)
71
+ end
72
+ end
73
+
74
+ def method_missing(*args, &block)
75
+ @template.send(*args, &block)
76
+ end
77
+
78
+ Tab = Struct.new(:name, :options, :block)
79
+ end
80
+ end
@@ -0,0 +1,3 @@
1
+ module RailsBootstrapTabs
2
+ VERSION = '0.1.1'.freeze
3
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails-bootstrap-tabs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Ivan Reshetnikov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.11
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.2.11
27
+ description: A Rails plugin to build bootstrap tabs
28
+ email:
29
+ - resivalex@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - lib/rails-bootstrap-tabs.rb
35
+ - lib/rails-bootstrap-tabs/helpers/tabs_helper.rb
36
+ - lib/rails-bootstrap-tabs/rails/engine.rb
37
+ - lib/rails-bootstrap-tabs/renderers/tabs_renderer.rb
38
+ - lib/rails-bootstrap-tabs/version.rb
39
+ homepage: https://github.com/resivalex/rails-bootstrap-tabs
40
+ licenses:
41
+ - MIT
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 2.4.5
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: A Rails plugin to build bootstrap tabs
63
+ test_files: []