devbootsrap 0.0.2 → 0.0.3

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.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/fonts/fontawesome-webfont.eot +0 -0
  3. data/app/assets/fonts/fontawesome-webfont.svg +414 -0
  4. data/app/assets/fonts/fontawesome-webfont.ttf +0 -0
  5. data/app/assets/fonts/fontawesome-webfont.woff +0 -0
  6. data/app/assets/images/twitter/bootstrap/glyphicons-halflings-white.png +0 -0
  7. data/app/assets/images/twitter/bootstrap/glyphicons-halflings.png +0 -0
  8. data/app/assets/javascripts/twitter/bootstrap.js +13 -0
  9. data/app/assets/javascripts/twitter/bootstrap/bootstrap-affix.js +117 -0
  10. data/app/assets/javascripts/twitter/bootstrap/bootstrap-alert.js +99 -0
  11. data/app/assets/javascripts/twitter/bootstrap/bootstrap-button.js +105 -0
  12. data/app/assets/javascripts/twitter/bootstrap/bootstrap-carousel.js +207 -0
  13. data/app/assets/javascripts/twitter/bootstrap/bootstrap-collapse.js +167 -0
  14. data/app/assets/javascripts/twitter/bootstrap/bootstrap-dropdown.js +169 -0
  15. data/app/assets/javascripts/twitter/bootstrap/bootstrap-modal.js +247 -0
  16. data/app/assets/javascripts/twitter/bootstrap/bootstrap-popover.js +114 -0
  17. data/app/assets/javascripts/twitter/bootstrap/bootstrap-scrollspy.js +162 -0
  18. data/app/assets/javascripts/twitter/bootstrap/bootstrap-tab.js +144 -0
  19. data/app/assets/javascripts/twitter/bootstrap/bootstrap-tooltip.js +361 -0
  20. data/app/assets/javascripts/twitter/bootstrap/bootstrap-transition.js +60 -0
  21. data/app/assets/javascripts/twitter/bootstrap/bootstrap-typeahead.js +335 -0
  22. data/app/assets/javascripts/twitter/bootstrap_ujs.js +11 -0
  23. data/app/assets/stylesheets/twitter-bootstrap-static/bootstrap.css.erb +892 -0
  24. data/app/assets/stylesheets/twitter-bootstrap-static/fontawesome.css.erb +1338 -0
  25. data/app/assets/stylesheets/twitter-bootstrap-static/sprites.css.erb +146 -0
  26. data/app/helpers/badge_label_helper.rb +16 -0
  27. data/app/helpers/bootstrap_flash_helper.rb +24 -0
  28. data/app/helpers/flash_block_helper.rb +17 -0
  29. data/app/helpers/glyph_helper.rb +17 -0
  30. data/app/helpers/modal_helper.rb +55 -0
  31. data/app/helpers/navbar_helper.rb +202 -0
  32. data/app/helpers/twitter_breadcrumbs_helper.rb +10 -0
  33. data/app/views/twitter-bootstrap/_breadcrumbs.html.erb +14 -0
  34. data/lib/devbootsrap.rb +17 -0
  35. data/lib/devbootsrap/version.rb +1 -1
  36. data/lib/generators/bootstrap/install/install_generator.rb +85 -0
  37. data/lib/generators/bootstrap/install/templates/application.css +7 -0
  38. data/lib/generators/bootstrap/install/templates/application.js +10 -0
  39. data/lib/generators/bootstrap/install/templates/bootstrap.coffee +3 -0
  40. data/lib/generators/bootstrap/install/templates/bootstrap.js +4 -0
  41. data/lib/generators/bootstrap/install/templates/bootstrap_and_overrides.css +7 -0
  42. data/lib/generators/bootstrap/install/templates/bootstrap_and_overrides.less +30 -0
  43. data/lib/generators/bootstrap/install/templates/en.bootstrap.yml +23 -0
  44. data/lib/generators/bootstrap/layout/layout_generator.rb +23 -0
  45. data/lib/generators/bootstrap/layout/templates/layout.html.erb +106 -0
  46. data/lib/generators/bootstrap/layout/templates/layout.html.haml +65 -0
  47. data/lib/generators/bootstrap/layout/templates/layout.html.slim +67 -0
  48. data/lib/generators/bootstrap/partial/partial_generator.rb +20 -0
  49. data/lib/generators/bootstrap/partial/templates/_login.html.erb +29 -0
  50. data/lib/generators/bootstrap/themed/templates/_form.html.erb +16 -0
  51. data/lib/generators/bootstrap/themed/templates/_form.html.haml +10 -0
  52. data/lib/generators/bootstrap/themed/templates/_form.html.slim +11 -0
  53. data/lib/generators/bootstrap/themed/templates/edit.html.erb +5 -0
  54. data/lib/generators/bootstrap/themed/templates/edit.html.haml +4 -0
  55. data/lib/generators/bootstrap/themed/templates/edit.html.slim +4 -0
  56. data/lib/generators/bootstrap/themed/templates/index.html.erb +40 -0
  57. data/lib/generators/bootstrap/themed/templates/index.html.haml +25 -0
  58. data/lib/generators/bootstrap/themed/templates/index.html.slim +27 -0
  59. data/lib/generators/bootstrap/themed/templates/new.html.erb +5 -0
  60. data/lib/generators/bootstrap/themed/templates/new.html.haml +4 -0
  61. data/lib/generators/bootstrap/themed/templates/new.html.slim +4 -0
  62. data/lib/generators/bootstrap/themed/templates/show.html.erb +23 -0
  63. data/lib/generators/bootstrap/themed/templates/show.html.haml +15 -0
  64. data/lib/generators/bootstrap/themed/templates/show.html.slim +17 -0
  65. data/lib/generators/bootstrap/themed/templates/simple_form/_form.html.erb +14 -0
  66. data/lib/generators/bootstrap/themed/templates/simple_form/_form.html.haml +11 -0
  67. data/lib/generators/bootstrap/themed/templates/simple_form/_form.html.slim +12 -0
  68. data/lib/generators/bootstrap/themed/themed_generator.rb +148 -0
  69. data/lib/twitter-bootstrap-rails.rb +10 -0
  70. data/lib/twitter/bootstrap/rails/bootstrap.rb +2 -0
  71. data/lib/twitter/bootstrap/rails/breadcrumbs.rb +58 -0
  72. data/lib/twitter/bootstrap/rails/engine.rb +35 -0
  73. data/lib/twitter/bootstrap/rails/version.rb +7 -0
  74. data/vendor/assets/stylesheets/twitter-bootstrap-static/bootstrap.css.erb +889 -0
  75. data/vendor/static-source/bootstrap.less +2 -0
  76. data/vendor/static-source/fontawesome.less +8 -0
  77. data/vendor/static-source/sprites.less +6 -0
  78. data/vendor/toolkit/fontawesome/bordered-pulled.less +16 -0
  79. data/vendor/toolkit/fontawesome/core.less +12 -0
  80. data/vendor/toolkit/fontawesome/fixed-width.less +6 -0
  81. data/vendor/toolkit/fontawesome/font-awesome.less +17 -0
  82. data/vendor/toolkit/fontawesome/icons.less +412 -0
  83. data/vendor/toolkit/fontawesome/larger.less +13 -0
  84. data/vendor/toolkit/fontawesome/list.less +19 -0
  85. data/vendor/toolkit/fontawesome/mixins.less +20 -0
  86. data/vendor/toolkit/fontawesome/path.less +14 -0
  87. data/vendor/toolkit/fontawesome/rotated-flipped.less +9 -0
  88. data/vendor/toolkit/fontawesome/spinning.less +30 -0
  89. data/vendor/toolkit/fontawesome/stacked.less +20 -0
  90. data/vendor/toolkit/fontawesome/variables.less +381 -0
  91. data/vendor/toolkit/twitter/bootstrap/accordion.less +34 -0
  92. data/vendor/toolkit/twitter/bootstrap/alerts.less +79 -0
  93. data/vendor/toolkit/twitter/bootstrap/bootstrap.less +62 -0
  94. data/vendor/toolkit/twitter/bootstrap/breadcrumbs.less +24 -0
  95. data/vendor/toolkit/twitter/bootstrap/button-groups.less +229 -0
  96. data/vendor/toolkit/twitter/bootstrap/buttons.less +228 -0
  97. data/vendor/toolkit/twitter/bootstrap/carousel.less +158 -0
  98. data/vendor/toolkit/twitter/bootstrap/close.less +32 -0
  99. data/vendor/toolkit/twitter/bootstrap/code.less +61 -0
  100. data/vendor/toolkit/twitter/bootstrap/component-animations.less +22 -0
  101. data/vendor/toolkit/twitter/bootstrap/dropdowns.less +248 -0
  102. data/vendor/toolkit/twitter/bootstrap/forms.less +690 -0
  103. data/vendor/toolkit/twitter/bootstrap/grid.less +21 -0
  104. data/vendor/toolkit/twitter/bootstrap/hero-unit.less +25 -0
  105. data/vendor/toolkit/twitter/bootstrap/labels-badges.less +84 -0
  106. data/vendor/toolkit/twitter/bootstrap/layouts.less +16 -0
  107. data/vendor/toolkit/twitter/bootstrap/media.less +55 -0
  108. data/vendor/toolkit/twitter/bootstrap/mixins.less +702 -0
  109. data/vendor/toolkit/twitter/bootstrap/modals.less +95 -0
  110. data/vendor/toolkit/twitter/bootstrap/navbar.less +497 -0
  111. data/vendor/toolkit/twitter/bootstrap/navs.less +409 -0
  112. data/vendor/toolkit/twitter/bootstrap/pager.less +43 -0
  113. data/vendor/toolkit/twitter/bootstrap/pagination.less +123 -0
  114. data/vendor/toolkit/twitter/bootstrap/popovers.less +133 -0
  115. data/vendor/toolkit/twitter/bootstrap/progress-bars.less +122 -0
  116. data/vendor/toolkit/twitter/bootstrap/reset.less +216 -0
  117. data/vendor/toolkit/twitter/bootstrap/responsive-1200px-min.less +28 -0
  118. data/vendor/toolkit/twitter/bootstrap/responsive-767px-max.less +193 -0
  119. data/vendor/toolkit/twitter/bootstrap/responsive-768px-979px.less +19 -0
  120. data/vendor/toolkit/twitter/bootstrap/responsive-navbar.less +189 -0
  121. data/vendor/toolkit/twitter/bootstrap/responsive-utilities.less +59 -0
  122. data/vendor/toolkit/twitter/bootstrap/responsive.less +48 -0
  123. data/vendor/toolkit/twitter/bootstrap/scaffolding.less +53 -0
  124. data/vendor/toolkit/twitter/bootstrap/sprites.less +197 -0
  125. data/vendor/toolkit/twitter/bootstrap/tables.less +244 -0
  126. data/vendor/toolkit/twitter/bootstrap/thumbnails.less +53 -0
  127. data/vendor/toolkit/twitter/bootstrap/tooltip.less +70 -0
  128. data/vendor/toolkit/twitter/bootstrap/type.less +247 -0
  129. data/vendor/toolkit/twitter/bootstrap/utilities.less +30 -0
  130. data/vendor/toolkit/twitter/bootstrap/variables.less +301 -0
  131. data/vendor/toolkit/twitter/bootstrap/wells.less +29 -0
  132. data/vendor/toolkit/twitter/bootstrap_base.less +2 -0
  133. metadata +130 -1
@@ -0,0 +1,146 @@
1
+ .clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0;}
2
+ .clearfix:after{clear:both;}
3
+ .hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}
4
+ .input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
5
+ [class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("<%= asset_path 'twitter/bootstrap/glyphicons-halflings.png' %>");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px;}
6
+ .icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("<%= asset_path 'twitter/bootstrap/glyphicons-halflings-white.png' %>");}
7
+ .icon-glass{background-position:0 0;}
8
+ .icon-music{background-position:-24px 0;}
9
+ .icon-search{background-position:-48px 0;}
10
+ .icon-envelope{background-position:-72px 0;}
11
+ .icon-heart{background-position:-96px 0;}
12
+ .icon-star{background-position:-120px 0;}
13
+ .icon-star-empty{background-position:-144px 0;}
14
+ .icon-user{background-position:-168px 0;}
15
+ .icon-film{background-position:-192px 0;}
16
+ .icon-th-large{background-position:-216px 0;}
17
+ .icon-th{background-position:-240px 0;}
18
+ .icon-th-list{background-position:-264px 0;}
19
+ .icon-ok{background-position:-288px 0;}
20
+ .icon-remove{background-position:-312px 0;}
21
+ .icon-zoom-in{background-position:-336px 0;}
22
+ .icon-zoom-out{background-position:-360px 0;}
23
+ .icon-off{background-position:-384px 0;}
24
+ .icon-signal{background-position:-408px 0;}
25
+ .icon-cog{background-position:-432px 0;}
26
+ .icon-trash{background-position:-456px 0;}
27
+ .icon-home{background-position:0 -24px;}
28
+ .icon-file{background-position:-24px -24px;}
29
+ .icon-time{background-position:-48px -24px;}
30
+ .icon-road{background-position:-72px -24px;}
31
+ .icon-download-alt{background-position:-96px -24px;}
32
+ .icon-download{background-position:-120px -24px;}
33
+ .icon-upload{background-position:-144px -24px;}
34
+ .icon-inbox{background-position:-168px -24px;}
35
+ .icon-play-circle{background-position:-192px -24px;}
36
+ .icon-repeat{background-position:-216px -24px;}
37
+ .icon-refresh{background-position:-240px -24px;}
38
+ .icon-list-alt{background-position:-264px -24px;}
39
+ .icon-lock{background-position:-287px -24px;}
40
+ .icon-flag{background-position:-312px -24px;}
41
+ .icon-headphones{background-position:-336px -24px;}
42
+ .icon-volume-off{background-position:-360px -24px;}
43
+ .icon-volume-down{background-position:-384px -24px;}
44
+ .icon-volume-up{background-position:-408px -24px;}
45
+ .icon-qrcode{background-position:-432px -24px;}
46
+ .icon-barcode{background-position:-456px -24px;}
47
+ .icon-tag{background-position:0 -48px;}
48
+ .icon-tags{background-position:-25px -48px;}
49
+ .icon-book{background-position:-48px -48px;}
50
+ .icon-bookmark{background-position:-72px -48px;}
51
+ .icon-print{background-position:-96px -48px;}
52
+ .icon-camera{background-position:-120px -48px;}
53
+ .icon-font{background-position:-144px -48px;}
54
+ .icon-bold{background-position:-167px -48px;}
55
+ .icon-italic{background-position:-192px -48px;}
56
+ .icon-text-height{background-position:-216px -48px;}
57
+ .icon-text-width{background-position:-240px -48px;}
58
+ .icon-align-left{background-position:-264px -48px;}
59
+ .icon-align-center{background-position:-288px -48px;}
60
+ .icon-align-right{background-position:-312px -48px;}
61
+ .icon-align-justify{background-position:-336px -48px;}
62
+ .icon-list{background-position:-360px -48px;}
63
+ .icon-indent-left{background-position:-384px -48px;}
64
+ .icon-indent-right{background-position:-408px -48px;}
65
+ .icon-facetime-video{background-position:-432px -48px;}
66
+ .icon-picture{background-position:-456px -48px;}
67
+ .icon-pencil{background-position:0 -72px;}
68
+ .icon-map-marker{background-position:-24px -72px;}
69
+ .icon-adjust{background-position:-48px -72px;}
70
+ .icon-tint{background-position:-72px -72px;}
71
+ .icon-edit{background-position:-96px -72px;}
72
+ .icon-share{background-position:-120px -72px;}
73
+ .icon-check{background-position:-144px -72px;}
74
+ .icon-move{background-position:-168px -72px;}
75
+ .icon-step-backward{background-position:-192px -72px;}
76
+ .icon-fast-backward{background-position:-216px -72px;}
77
+ .icon-backward{background-position:-240px -72px;}
78
+ .icon-play{background-position:-264px -72px;}
79
+ .icon-pause{background-position:-288px -72px;}
80
+ .icon-stop{background-position:-312px -72px;}
81
+ .icon-forward{background-position:-336px -72px;}
82
+ .icon-fast-forward{background-position:-360px -72px;}
83
+ .icon-step-forward{background-position:-384px -72px;}
84
+ .icon-eject{background-position:-408px -72px;}
85
+ .icon-chevron-left{background-position:-432px -72px;}
86
+ .icon-chevron-right{background-position:-456px -72px;}
87
+ .icon-plus-sign{background-position:0 -96px;}
88
+ .icon-minus-sign{background-position:-24px -96px;}
89
+ .icon-remove-sign{background-position:-48px -96px;}
90
+ .icon-ok-sign{background-position:-72px -96px;}
91
+ .icon-question-sign{background-position:-96px -96px;}
92
+ .icon-info-sign{background-position:-120px -96px;}
93
+ .icon-screenshot{background-position:-144px -96px;}
94
+ .icon-remove-circle{background-position:-168px -96px;}
95
+ .icon-ok-circle{background-position:-192px -96px;}
96
+ .icon-ban-circle{background-position:-216px -96px;}
97
+ .icon-arrow-left{background-position:-240px -96px;}
98
+ .icon-arrow-right{background-position:-264px -96px;}
99
+ .icon-arrow-up{background-position:-289px -96px;}
100
+ .icon-arrow-down{background-position:-312px -96px;}
101
+ .icon-share-alt{background-position:-336px -96px;}
102
+ .icon-resize-full{background-position:-360px -96px;}
103
+ .icon-resize-small{background-position:-384px -96px;}
104
+ .icon-plus{background-position:-408px -96px;}
105
+ .icon-minus{background-position:-433px -96px;}
106
+ .icon-asterisk{background-position:-456px -96px;}
107
+ .icon-exclamation-sign{background-position:0 -120px;}
108
+ .icon-gift{background-position:-24px -120px;}
109
+ .icon-leaf{background-position:-48px -120px;}
110
+ .icon-fire{background-position:-72px -120px;}
111
+ .icon-eye-open{background-position:-96px -120px;}
112
+ .icon-eye-close{background-position:-120px -120px;}
113
+ .icon-warning-sign{background-position:-144px -120px;}
114
+ .icon-plane{background-position:-168px -120px;}
115
+ .icon-calendar{background-position:-192px -120px;}
116
+ .icon-random{background-position:-216px -120px;width:16px;}
117
+ .icon-comment{background-position:-240px -120px;}
118
+ .icon-magnet{background-position:-264px -120px;}
119
+ .icon-chevron-up{background-position:-288px -120px;}
120
+ .icon-chevron-down{background-position:-313px -119px;}
121
+ .icon-retweet{background-position:-336px -120px;}
122
+ .icon-shopping-cart{background-position:-360px -120px;}
123
+ .icon-folder-close{background-position:-384px -120px;width:16px;}
124
+ .icon-folder-open{background-position:-408px -120px;width:16px;}
125
+ .icon-resize-vertical{background-position:-432px -119px;}
126
+ .icon-resize-horizontal{background-position:-456px -118px;}
127
+ .icon-hdd{background-position:0 -144px;}
128
+ .icon-bullhorn{background-position:-24px -144px;}
129
+ .icon-bell{background-position:-48px -144px;}
130
+ .icon-certificate{background-position:-72px -144px;}
131
+ .icon-thumbs-up{background-position:-96px -144px;}
132
+ .icon-thumbs-down{background-position:-120px -144px;}
133
+ .icon-hand-right{background-position:-144px -144px;}
134
+ .icon-hand-left{background-position:-168px -144px;}
135
+ .icon-hand-up{background-position:-192px -144px;}
136
+ .icon-hand-down{background-position:-216px -144px;}
137
+ .icon-circle-arrow-right{background-position:-240px -144px;}
138
+ .icon-circle-arrow-left{background-position:-264px -144px;}
139
+ .icon-circle-arrow-up{background-position:-288px -144px;}
140
+ .icon-circle-arrow-down{background-position:-312px -144px;}
141
+ .icon-globe{background-position:-336px -144px;}
142
+ .icon-wrench{background-position:-360px -144px;}
143
+ .icon-tasks{background-position:-384px -144px;}
144
+ .icon-filter{background-position:-408px -144px;}
145
+ .icon-briefcase{background-position:-432px -144px;}
146
+ .icon-fullscreen{background-position:-456px -144px;}
@@ -0,0 +1,16 @@
1
+ module BadgeLabelHelper
2
+ def badge(*args)
3
+ badge_label(:badge, *args)
4
+ end
5
+
6
+ def tag_label(*args)
7
+ badge_label(:label, *args)
8
+ end
9
+
10
+ private
11
+ def badge_label(what, value, type = nil)
12
+ klass = [what]
13
+ klass << "#{what}-#{type}" if type.present?
14
+ content_tag :span, value, :class => "#{klass.join(' ')}"
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ module BootstrapFlashHelper
2
+ ALERT_TYPES = [:error, :info, :success, :warning] unless const_defined?(:ALERT_TYPES)
3
+
4
+ def bootstrap_flash
5
+ flash_messages = []
6
+ flash.each do |type, message|
7
+ # Skip empty messages, e.g. for devise messages set to nothing in a locale file.
8
+ next if message.blank?
9
+
10
+ type = type.to_sym
11
+ type = :success if type == :notice
12
+ type = :error if type == :alert
13
+ next unless ALERT_TYPES.include?(type)
14
+
15
+ Array(message).each do |msg|
16
+ text = content_tag(:div,
17
+ content_tag(:button, raw("&times;"), :class => "close", "data-dismiss" => "alert") +
18
+ msg, :class => "alert fade in alert-#{type}")
19
+ flash_messages << text if msg
20
+ end
21
+ end
22
+ flash_messages.join("\n").html_safe
23
+ end
24
+ end
@@ -0,0 +1,17 @@
1
+ module FlashBlockHelper
2
+ def flash_block
3
+ output = ''
4
+ flash.each do |type, message|
5
+ output += flash_container(type, message)
6
+ end
7
+
8
+ raw(output)
9
+ end
10
+
11
+ def flash_container(type, message)
12
+ raw(content_tag(:div, :class => "alert alert-#{type}") do
13
+ content_tag(:a, raw("&times;"),:class => 'close', :data => {:dismiss => 'alert'}) +
14
+ message
15
+ end)
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module GlyphHelper
2
+ # ==== Examples
3
+ # glyph(:share_alt)
4
+ # # => <i class="icon-share-alt"></i>
5
+ # glyph(:lock, :white)
6
+ # # => <i class="icon-lock icon-white"></i>
7
+ # glyph(:thumbs_up, :pull_left)
8
+ # # => <i class="icon-thumbs-up pull-left"></i>
9
+
10
+ def glyph(*names)
11
+ names.map! { |name| name.to_s.gsub('_','-') }
12
+ names.map! do |name|
13
+ name =~ /pull-(?:left|right)/ ? name : "icon-#{name}"
14
+ end
15
+ content_tag :i, nil, :class => names
16
+ end
17
+ end
@@ -0,0 +1,55 @@
1
+ module ModalHelper
2
+
3
+ #modals have a header, a body, a footer for options.
4
+ def modal_dialog(options = {}, &block)
5
+ content_tag :div, :id => options[:id], :class => "bootstrap-modal modal hide fade" do
6
+ modal_header(options[:header]) +
7
+ modal_body(options[:body]) +
8
+ modal_footer(options[:footer])
9
+ end
10
+ end
11
+
12
+ def modal_header(options = {}, &block)
13
+ content_tag :div, :class => 'modal-header' do
14
+ if options[:show_close]
15
+ close_button(options[:dismiss]) +
16
+ content_tag(:h3, options[:title], &block)
17
+ else
18
+ content_tag(:h3, options[:title], &block)
19
+ end
20
+ end
21
+ end
22
+
23
+ def modal_body(options = {}, &block)
24
+ content_tag :div, options, :class => 'modal-body', &block
25
+ end
26
+
27
+ def modal_footer(options = {}, &block)
28
+ content_tag :div, options, :class => 'modal-footer', &block
29
+ end
30
+
31
+ def close_button(dismiss)
32
+ #It doesn't seem to like content_tag, so we do this instead.
33
+ raw("<button class=\"close\" data-dismiss=\"#{dismiss}\">&times;</button>")
34
+ end
35
+
36
+ def modal_toggle(content_or_options = nil, options = {}, &block)
37
+ if block_given?
38
+ options = content_or_options if content_or_options.is_a?(Hash)
39
+ default_options = { :class => 'btn', "data-toggle" => "modal", "href" => options[:dialog] }.merge(options)
40
+
41
+ content_tag :a, nil, default_options, true, &block
42
+ else
43
+ default_options = { :class => 'btn', "data-toggle" => "modal", "href" => options[:dialog] }.merge(options)
44
+ content_tag :a, content_or_options, default_options, true
45
+ end
46
+ end
47
+
48
+ def modal_cancel_button content, options = {}
49
+ default_options = { :class => "btn bootstrap-modal-cancel-button" }
50
+
51
+ content_tag_string "a", content, default_options.merge(options)
52
+ end
53
+
54
+ end
55
+
@@ -0,0 +1,202 @@
1
+ #Credit for this goes to https://github.com/julescopeland/Rails-Bootstrap-Navbar
2
+ module NavbarHelper
3
+ def nav_bar(options={}, &block)
4
+ nav_bar_div(options) do
5
+ navbar_inner_div do
6
+ container_div(options[:brand], options[:brand_link], options[:brand_html_left], options[:brand_html_right], options[:responsive], options[:fluid]) do
7
+ yield if block_given?
8
+ end
9
+ end
10
+ end
11
+ end
12
+
13
+ def menu_group(options={}, &block)
14
+ pull_class = "pull-#{options[:pull].to_s}" if options[:pull].present?
15
+ content_tag(:ul, :class => "nav #{pull_class}", &block)
16
+ end
17
+
18
+ def menu_item(name=nil, path="#", *args, &block)
19
+ path = name || path if block_given?
20
+ options = args.extract_options!
21
+ content_tag :li, :class => is_active?(path, options) do
22
+ name, path = path, options if block_given?
23
+ link_to name, path, options, &block
24
+ end
25
+ end
26
+
27
+ def drop_down(name)
28
+ content_tag :li, :class => "dropdown" do
29
+ drop_down_link(name) + drop_down_list { yield }
30
+ end
31
+ end
32
+
33
+ def drop_down_with_submenu(name, &block)
34
+ content_tag :li, :class => "dropdown" do
35
+ drop_down_link(name) + drop_down_sublist(&block)
36
+ end
37
+ end
38
+
39
+ def drop_down_sublist(&block)
40
+ content_tag :ul, :class => "dropdown-menu", &block
41
+ end
42
+
43
+ def drop_down_submenu(name, &block)
44
+ content_tag :li, :class => "dropdown-submenu" do
45
+ link_to(name, "") + drop_down_list(&block)
46
+ end
47
+ end
48
+
49
+ def drop_down_divider
50
+ content_tag :li, "", :class => "divider"
51
+ end
52
+
53
+ def drop_down_header(text)
54
+ content_tag :li, text, :class => "nav-header"
55
+ end
56
+
57
+ def menu_divider
58
+ content_tag :li, "", :class => "divider-vertical"
59
+ end
60
+
61
+ def menu_text(text=nil, options={}, &block)
62
+ pull = options.delete(:pull)
63
+ pull_class = pull.present? ? "pull-#{pull.to_s}" : nil
64
+ options.append_merge!(:class, pull_class)
65
+ options.append_merge!(:class, "navbar-text")
66
+ content_tag :p, options do
67
+ text || yield
68
+ end
69
+ end
70
+
71
+ # Returns current url or path state (useful for buttons).
72
+ # Example:
73
+ # # Assume we'r currently at blog/categories/test
74
+ # uri_state('/blog/categories/test', {}) # :active
75
+ # uri_state('/blog/categories', {}) # :chosen
76
+ # uri_state('/blog/categories/test', {method: delete}) # :inactive
77
+ # uri_state('/blog/categories/test/3', {}) # :inactive
78
+ def uri_state(uri, options={})
79
+ return options[:status] if options.key?(:status)
80
+
81
+ root_url = request.host_with_port + '/'
82
+ root = uri == '/' || uri == root_url
83
+
84
+ request_uri = if uri.start_with?(root_url)
85
+ request.url
86
+ else
87
+ request.path
88
+ end
89
+
90
+ if !options[:method].nil? || !options["data-method"].nil?
91
+ :inactive
92
+ elsif uri == request_uri || (options[:root] && (request_uri == '/') || (request_uri == root_url))
93
+ :active
94
+ else
95
+ if request_uri.start_with?(uri) and not(root)
96
+ :chosen
97
+ else
98
+ :inactive
99
+ end
100
+ end
101
+ end
102
+
103
+ private
104
+
105
+ def nav_bar_div(options, &block)
106
+
107
+ position = "static-#{options[:static].to_s}" if options[:static]
108
+ position = "fixed-#{options[:fixed].to_s}" if options[:fixed]
109
+ inverse = (options[:inverse].present? && options[:inverse] == true) ? true : false
110
+
111
+ content_tag :div, :class => nav_bar_css_class(position, inverse) do
112
+ yield
113
+ end
114
+ end
115
+
116
+ def navbar_inner_div(&block)
117
+ content_tag :div, :class => "navbar-inner" do
118
+ yield
119
+ end
120
+ end
121
+
122
+ def container_div(brand, brand_link, brand_html_left, brand_html_right, responsive, fluid, &block)
123
+ content_tag :div, :class => "container#{"-fluid" if fluid}" do
124
+ container_div_with_block(brand, brand_link, brand_html_left, brand_html_right, responsive, &block)
125
+ end
126
+ end
127
+
128
+ def container_div_with_block(brand, brand_link, brand_html_left, brand_html_right, responsive, &block)
129
+ output = []
130
+ if responsive == true
131
+ output << responsive_button
132
+ output << brand_link(brand, brand_link, brand_html_left, brand_html_right)
133
+ output << responsive_div { capture(&block) }
134
+ else
135
+ output << brand_link(brand, brand_link, brand_html_left, brand_html_right)
136
+ output << capture(&block)
137
+ end
138
+ output.join("\n").html_safe
139
+ end
140
+
141
+ def nav_bar_css_class(position, inverse = false)
142
+ css_class = ["navbar"]
143
+ css_class << "navbar-#{position}" if position.present?
144
+ css_class << "navbar-inverse" if inverse
145
+ css_class.join(" ")
146
+ end
147
+
148
+ def brand_link(name, url, brand_html_left, brand_html_right)
149
+ return "" if name.blank?
150
+ url ||= root_url
151
+
152
+ output = []
153
+ output << '<div class="brand_html_left">' + brand_html_left + '</div>' if brand_html_left
154
+ output << link_to(name, url, :class => "brand")
155
+ output << '<div class="brand_html_right">' + brand_html_right + '</div>' if brand_html_right
156
+ output.join("\n").html_safe
157
+ end
158
+
159
+ def responsive_button
160
+ %{<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
161
+ <span class="icon-bar"></span>
162
+ <span class="icon-bar"></span>
163
+ <span class="icon-bar"></span>
164
+ </a>}
165
+ end
166
+
167
+ def responsive_div(&block)
168
+ content_tag(:div, :class => "nav-collapse collapse", &block)
169
+ end
170
+
171
+ def is_active?(path, options={})
172
+ state = uri_state(path, options)
173
+ "active" if state.in?([:active, :chosen]) || state === true
174
+ end
175
+
176
+ def name_and_caret(name)
177
+ "#{name} #{content_tag(:b, :class => "caret") {}}".html_safe
178
+ end
179
+
180
+ def drop_down_link(name)
181
+ link_to(name_and_caret(name), "#", :class => "dropdown-toggle", "data-toggle" => "dropdown")
182
+ end
183
+
184
+ def drop_down_list(&block)
185
+ content_tag :ul, :class => "dropdown-menu", &block
186
+ end
187
+ end
188
+
189
+ class Hash
190
+ # appends a string to a hash key's value after a space character (Good for merging CSS classes in options hashes)
191
+ def append_merge!(key, value)
192
+ # just return self if value is blank
193
+ return self if value.blank?
194
+
195
+ current_value = self[key]
196
+ # just merge if it doesn't already have that key
197
+ self[key] = value and return if current_value.blank?
198
+ # raise error if we're trying to merge into something that isn't a string
199
+ raise ArgumentError, "Can only merge strings" unless current_value.is_a?(String)
200
+ self[key] = [current_value, value].compact.join(" ")
201
+ end
202
+ end