twitter-bootstrap-rails 2.2.3 → 3.2.2

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 (204) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +460 -185
  3. data/Rakefile +7 -1
  4. data/app/assets/fonts/fontawesome-webfont.eot +0 -0
  5. data/app/assets/fonts/fontawesome-webfont.svg +640 -0
  6. data/app/assets/fonts/fontawesome-webfont.ttf +0 -0
  7. data/app/assets/fonts/fontawesome-webfont.woff +0 -0
  8. data/app/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  9. data/app/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  10. data/app/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  11. data/app/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  12. data/app/assets/javascripts/twitter/bootstrap.js +12 -0
  13. data/app/assets/javascripts/twitter/bootstrap/affix.js +142 -0
  14. data/app/assets/javascripts/twitter/bootstrap/alert.js +92 -0
  15. data/app/assets/javascripts/twitter/bootstrap/button.js +110 -0
  16. data/app/assets/javascripts/twitter/bootstrap/carousel.js +223 -0
  17. data/app/assets/javascripts/twitter/bootstrap/collapse.js +170 -0
  18. data/app/assets/javascripts/twitter/bootstrap/dropdown.js +151 -0
  19. data/app/assets/javascripts/twitter/bootstrap/modal.js +280 -0
  20. data/app/assets/javascripts/twitter/bootstrap/popover.js +113 -0
  21. data/app/assets/javascripts/twitter/bootstrap/scrollspy.js +170 -0
  22. data/app/assets/javascripts/twitter/bootstrap/tab.js +128 -0
  23. data/app/assets/javascripts/twitter/bootstrap/tooltip.js +457 -0
  24. data/app/assets/javascripts/twitter/bootstrap/transition.js +59 -0
  25. data/{vendor → app}/assets/javascripts/twitter/bootstrap_ujs.js +0 -0
  26. data/app/assets/stylesheets/twitter-bootstrap-static/bootstrap.css.erb +1 -0
  27. data/app/assets/stylesheets/twitter-bootstrap-static/fontawesome.css.erb +2026 -0
  28. data/app/assets/stylesheets/twitter-bootstrap-static/sprites.css.erb +1 -0
  29. data/app/helpers/badge_label_helper.rb +16 -0
  30. data/app/helpers/bootstrap_flash_helper.rb +20 -6
  31. data/app/helpers/form_errors_helper.rb +22 -0
  32. data/app/helpers/glyph_helper.rb +13 -5
  33. data/app/helpers/modal_helper.rb +37 -20
  34. data/app/helpers/navbar_helper.rb +209 -0
  35. data/app/helpers/twitter_breadcrumbs_helper.rb +11 -2
  36. data/app/views/twitter-bootstrap/_breadcrumbs.html.erb +9 -9
  37. data/lib/generators/bootstrap/install/install_generator.rb +13 -8
  38. data/lib/generators/bootstrap/install/templates/bootstrap.coffee +2 -3
  39. data/lib/generators/bootstrap/install/templates/bootstrap.js +2 -3
  40. data/lib/generators/bootstrap/install/templates/bootstrap_and_overrides.less +14 -13
  41. data/lib/generators/bootstrap/install/templates/en.bootstrap.yml +11 -5
  42. data/lib/generators/bootstrap/layout/layout_generator.rb +1 -4
  43. data/lib/generators/bootstrap/layout/templates/layout.html.erb +34 -58
  44. data/lib/generators/bootstrap/layout/templates/layout.html.haml +25 -44
  45. data/lib/generators/bootstrap/layout/templates/layout.html.slim +20 -39
  46. data/lib/generators/bootstrap/partial/templates/_login.html.erb +2 -3
  47. data/lib/generators/bootstrap/themed/templates/_form.html.erb +30 -10
  48. data/lib/generators/bootstrap/themed/templates/_form.html.haml +10 -8
  49. data/lib/generators/bootstrap/themed/templates/_form.html.slim +11 -9
  50. data/lib/generators/bootstrap/themed/templates/edit.html.erb +1 -2
  51. data/lib/generators/bootstrap/themed/templates/edit.html.haml +1 -1
  52. data/lib/generators/bootstrap/themed/templates/edit.html.slim +2 -2
  53. data/lib/generators/bootstrap/themed/templates/index.html.erb +3 -3
  54. data/lib/generators/bootstrap/themed/templates/index.html.haml +3 -3
  55. data/lib/generators/bootstrap/themed/templates/index.html.slim +5 -6
  56. data/lib/generators/bootstrap/themed/templates/new.html.erb +1 -2
  57. data/lib/generators/bootstrap/themed/templates/new.html.haml +1 -1
  58. data/lib/generators/bootstrap/themed/templates/new.html.slim +2 -2
  59. data/lib/generators/bootstrap/themed/templates/show.html.erb +6 -8
  60. data/lib/generators/bootstrap/themed/templates/show.html.haml +5 -5
  61. data/lib/generators/bootstrap/themed/templates/show.html.slim +7 -8
  62. data/lib/generators/bootstrap/themed/templates/simple_form/_form.html.erb +5 -5
  63. data/lib/generators/bootstrap/themed/templates/simple_form/_form.html.haml +3 -3
  64. data/lib/generators/bootstrap/themed/templates/simple_form/_form.html.slim +4 -4
  65. data/lib/generators/bootstrap/themed/themed_generator.rb +4 -4
  66. data/lib/twitter-bootstrap-rails.rb +4 -4
  67. data/lib/twitter/bootstrap/rails/breadcrumbs.rb +69 -0
  68. data/lib/twitter/bootstrap/rails/engine.rb +17 -7
  69. data/lib/twitter/bootstrap/rails/version.rb +1 -1
  70. data/spec/lib/breadcrumbs_spec.rb +99 -0
  71. data/spec/lib/twitter_bootstrap_rails/badge_label_helper_spec.rb +30 -0
  72. data/spec/lib/twitter_bootstrap_rails/bootstrap_flash_helper_spec.rb +128 -0
  73. data/spec/lib/twitter_bootstrap_rails/form_errors_helper_spec.rb +148 -0
  74. data/spec/lib/twitter_bootstrap_rails/glyph_helper_spec.rb +24 -0
  75. data/spec/lib/twitter_bootstrap_rails/modal_helper_spec.rb +62 -0
  76. data/spec/lib/twitter_bootstrap_rails/navbar_helper_spec.rb +396 -0
  77. data/spec/lib/twitter_bootstrap_rails/uri_state_spec.rb +49 -0
  78. data/spec/spec_helper.rb +21 -0
  79. data/vendor/assets/stylesheets/twitter-bootstrap-static/bootstrap.css.erb +5990 -195
  80. data/vendor/static-source/bootstrap.less +0 -1
  81. data/vendor/static-source/fontawesome.less +7 -6
  82. data/vendor/static-source/sprites.less +3 -3
  83. data/vendor/toolkit/fontawesome/bordered-pulled.less +16 -0
  84. data/vendor/toolkit/fontawesome/core.less +11 -0
  85. data/vendor/toolkit/fontawesome/fixed-width.less +6 -0
  86. data/vendor/toolkit/fontawesome/font-awesome.less +17 -0
  87. data/vendor/toolkit/fontawesome/icons.less +552 -0
  88. data/vendor/toolkit/fontawesome/larger.less +13 -0
  89. data/vendor/toolkit/fontawesome/list.less +19 -0
  90. data/vendor/toolkit/fontawesome/mixins.less +25 -0
  91. data/vendor/toolkit/fontawesome/path.less +14 -0
  92. data/vendor/toolkit/fontawesome/rotated-flipped.less +20 -0
  93. data/vendor/toolkit/fontawesome/spinning.less +29 -0
  94. data/vendor/toolkit/fontawesome/stacked.less +20 -0
  95. data/vendor/toolkit/fontawesome/variables.less +561 -0
  96. data/vendor/toolkit/twitter/bootstrap/alerts.less +47 -58
  97. data/vendor/toolkit/twitter/bootstrap/badges.less +55 -0
  98. data/vendor/toolkit/twitter/bootstrap/bootstrap.less +26 -39
  99. data/vendor/toolkit/twitter/bootstrap/breadcrumbs.less +11 -9
  100. data/vendor/toolkit/twitter/bootstrap/button-groups.less +168 -152
  101. data/vendor/toolkit/twitter/bootstrap/buttons.less +101 -170
  102. data/vendor/toolkit/twitter/bootstrap/carousel.less +150 -65
  103. data/vendor/toolkit/twitter/bootstrap/close.less +20 -19
  104. data/vendor/toolkit/twitter/bootstrap/code.less +38 -30
  105. data/vendor/toolkit/twitter/bootstrap/component-animations.less +12 -3
  106. data/vendor/toolkit/twitter/bootstrap/dropdowns.less +124 -146
  107. data/vendor/toolkit/twitter/bootstrap/forms.less +401 -547
  108. data/vendor/toolkit/twitter/bootstrap/glyphicons.less +234 -0
  109. data/vendor/toolkit/twitter/bootstrap/grid.less +74 -11
  110. data/vendor/toolkit/twitter/bootstrap/input-groups.less +166 -0
  111. data/vendor/toolkit/twitter/bootstrap/jumbotron.less +48 -0
  112. data/vendor/toolkit/twitter/bootstrap/labels.less +64 -0
  113. data/vendor/toolkit/twitter/bootstrap/list-group.less +132 -0
  114. data/vendor/toolkit/twitter/bootstrap/media.less +8 -7
  115. data/vendor/toolkit/twitter/bootstrap/mixins.less +36 -699
  116. data/vendor/toolkit/twitter/bootstrap/mixins/alerts.less +14 -0
  117. data/vendor/toolkit/twitter/bootstrap/mixins/background-variant.less +8 -0
  118. data/vendor/toolkit/twitter/bootstrap/mixins/border-radius.less +18 -0
  119. data/vendor/toolkit/twitter/bootstrap/mixins/buttons.less +52 -0
  120. data/vendor/toolkit/twitter/bootstrap/mixins/center-block.less +7 -0
  121. data/vendor/toolkit/twitter/bootstrap/mixins/clearfix.less +22 -0
  122. data/vendor/toolkit/twitter/bootstrap/mixins/forms.less +85 -0
  123. data/vendor/toolkit/twitter/bootstrap/mixins/gradients.less +59 -0
  124. data/vendor/toolkit/twitter/bootstrap/mixins/grid-framework.less +91 -0
  125. data/vendor/toolkit/twitter/bootstrap/mixins/grid.less +122 -0
  126. data/vendor/toolkit/twitter/bootstrap/mixins/hide-text.less +21 -0
  127. data/vendor/toolkit/twitter/bootstrap/mixins/image.less +33 -0
  128. data/vendor/toolkit/twitter/bootstrap/mixins/labels.less +12 -0
  129. data/vendor/toolkit/twitter/bootstrap/mixins/list-group.less +29 -0
  130. data/vendor/toolkit/twitter/bootstrap/mixins/nav-divider.less +10 -0
  131. data/vendor/toolkit/twitter/bootstrap/mixins/nav-vertical-align.less +9 -0
  132. data/vendor/toolkit/twitter/bootstrap/mixins/opacity.less +8 -0
  133. data/vendor/toolkit/twitter/bootstrap/mixins/pagination.less +23 -0
  134. data/vendor/toolkit/twitter/bootstrap/mixins/panels.less +24 -0
  135. data/vendor/toolkit/twitter/bootstrap/mixins/progress-bar.less +10 -0
  136. data/vendor/toolkit/twitter/bootstrap/mixins/reset-filter.less +8 -0
  137. data/vendor/toolkit/twitter/bootstrap/mixins/resize.less +6 -0
  138. data/vendor/toolkit/twitter/bootstrap/mixins/responsive-visibility.less +15 -0
  139. data/vendor/toolkit/twitter/bootstrap/mixins/size.less +10 -0
  140. data/vendor/toolkit/twitter/bootstrap/mixins/tab-focus.less +9 -0
  141. data/vendor/toolkit/twitter/bootstrap/mixins/table-row.less +28 -0
  142. data/vendor/toolkit/twitter/bootstrap/mixins/text-emphasis.less +8 -0
  143. data/vendor/toolkit/twitter/bootstrap/mixins/text-overflow.less +8 -0
  144. data/vendor/toolkit/twitter/bootstrap/mixins/vendor-prefixes.less +224 -0
  145. data/vendor/toolkit/twitter/bootstrap/modals.less +109 -54
  146. data/vendor/toolkit/twitter/bootstrap/navbar.less +542 -384
  147. data/vendor/toolkit/twitter/bootstrap/navs.less +192 -359
  148. data/vendor/toolkit/twitter/bootstrap/normalize.less +425 -0
  149. data/vendor/toolkit/twitter/bootstrap/pager.less +46 -34
  150. data/vendor/toolkit/twitter/bootstrap/pagination.less +70 -105
  151. data/vendor/toolkit/twitter/bootstrap/panels.less +248 -0
  152. data/vendor/toolkit/twitter/bootstrap/popovers.less +61 -61
  153. data/vendor/toolkit/twitter/bootstrap/print.less +101 -0
  154. data/vendor/toolkit/twitter/bootstrap/progress-bars.less +51 -73
  155. data/vendor/toolkit/twitter/bootstrap/responsive-embed.less +34 -0
  156. data/vendor/toolkit/twitter/bootstrap/responsive-utilities.less +177 -42
  157. data/vendor/toolkit/twitter/bootstrap/scaffolding.less +120 -23
  158. data/vendor/toolkit/twitter/bootstrap/tables.less +171 -182
  159. data/vendor/toolkit/twitter/bootstrap/theme.less +260 -0
  160. data/vendor/toolkit/twitter/bootstrap/thumbnails.less +26 -43
  161. data/vendor/toolkit/twitter/bootstrap/tooltip.less +49 -24
  162. data/vendor/toolkit/twitter/bootstrap/type.less +208 -147
  163. data/vendor/toolkit/twitter/bootstrap/utilities.less +33 -7
  164. data/vendor/toolkit/twitter/bootstrap/variables.less +761 -215
  165. data/vendor/toolkit/twitter/bootstrap/wells.less +7 -7
  166. metadata +199 -92
  167. data/lib/generators/bootstrap/partial/templates/_navbar.html.erb +0 -13
  168. data/lib/twitter/bootstrap/rails/twitter-bootstrap-breadcrumbs.rb +0 -42
  169. data/test/lib/breadcrumbs_test.rb +0 -75
  170. data/test/test_helper.rb +0 -8
  171. data/vendor/assets/fonts/fontawesome-webfont.eot +0 -0
  172. data/vendor/assets/fonts/fontawesome-webfont.ttf +0 -0
  173. data/vendor/assets/fonts/fontawesome-webfont.woff +0 -0
  174. data/vendor/assets/images/twitter/bootstrap/glyphicons-halflings-white.png +0 -0
  175. data/vendor/assets/images/twitter/bootstrap/glyphicons-halflings.png +0 -0
  176. data/vendor/assets/javascripts/twitter/bootstrap.js +0 -13
  177. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-affix.js +0 -117
  178. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-alert.js +0 -99
  179. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-button.js +0 -105
  180. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-carousel.js +0 -207
  181. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-collapse.js +0 -167
  182. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-dropdown.js +0 -165
  183. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-modal.js +0 -247
  184. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-popover.js +0 -114
  185. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-scrollspy.js +0 -162
  186. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-tab.js +0 -144
  187. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-tooltip.js +0 -353
  188. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-transition.js +0 -60
  189. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-typeahead.js +0 -335
  190. data/vendor/assets/stylesheets/twitter-bootstrap-static/fontawesome.css.erb +0 -531
  191. data/vendor/assets/stylesheets/twitter-bootstrap-static/sprites.css.erb +0 -146
  192. data/vendor/toolkit/fontawesome-ie7.less +0 -350
  193. data/vendor/toolkit/fontawesome.less +0 -532
  194. data/vendor/toolkit/twitter/bootstrap/accordion.less +0 -34
  195. data/vendor/toolkit/twitter/bootstrap/hero-unit.less +0 -25
  196. data/vendor/toolkit/twitter/bootstrap/labels-badges.less +0 -84
  197. data/vendor/toolkit/twitter/bootstrap/layouts.less +0 -16
  198. data/vendor/toolkit/twitter/bootstrap/reset.less +0 -216
  199. data/vendor/toolkit/twitter/bootstrap/responsive-1200px-min.less +0 -28
  200. data/vendor/toolkit/twitter/bootstrap/responsive-767px-max.less +0 -193
  201. data/vendor/toolkit/twitter/bootstrap/responsive-768px-979px.less +0 -19
  202. data/vendor/toolkit/twitter/bootstrap/responsive-navbar.less +0 -189
  203. data/vendor/toolkit/twitter/bootstrap/responsive.less +0 -48
  204. data/vendor/toolkit/twitter/bootstrap/sprites.less +0 -197
@@ -0,0 +1 @@
1
+ @font-face{font-family:'Glyphicons Halflings';src:url('<%= asset_path 'glyphicons-halflings-regular.eot' %>');src:url('<%= asset_path 'glyphicons-halflings-regular.eot?#iefix' %>') format('embedded-opentype'),url('<%= asset_path 'glyphicons-halflings-regular.woff' %>') format('woff'),url('<%= asset_path 'glyphicons-halflings-regular.ttf' %>') format('truetype'),url('<%= asset_path 'glyphicons-halflings-regular.svg#glyphicons-halflingsregular' %>') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}
@@ -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
@@ -1,15 +1,29 @@
1
1
  module BootstrapFlashHelper
2
- def bootstrap_flash
2
+ ALERT_TYPES = [:success, :info, :warning, :danger] unless const_defined?(:ALERT_TYPES)
3
+
4
+ def bootstrap_flash(options = {})
3
5
  flash_messages = []
4
6
  flash.each do |type, message|
5
7
  # Skip empty messages, e.g. for devise messages set to nothing in a locale file.
6
8
  next if message.blank?
9
+
10
+ type = type.to_sym
7
11
  type = :success if type == :notice
8
- type = :error if type == :alert
9
- text = content_tag(:div,
10
- content_tag(:button, raw("&times;"), :class => "close", "data-dismiss" => "alert") +
11
- message, :class => "alert fade in alert-#{type}")
12
- flash_messages << text if message
12
+ type = :danger if type == :alert
13
+ type = :danger if type == :error
14
+ next unless ALERT_TYPES.include?(type)
15
+
16
+ tag_class = options.extract!(:class)[:class]
17
+ tag_options = {
18
+ class: "alert fade in alert-#{type} #{tag_class}"
19
+ }.merge(options)
20
+
21
+ close_button = content_tag(:button, raw("&times;"), type: "button", class: "close", "data-dismiss" => "alert")
22
+
23
+ Array(message).each do |msg|
24
+ text = content_tag(:div, close_button + msg, tag_options)
25
+ flash_messages << text if msg
26
+ end
13
27
  end
14
28
  flash_messages.join("\n").html_safe
15
29
  end
@@ -0,0 +1,22 @@
1
+ module FormErrorsHelper
2
+ include ActionView::Helpers::FormTagHelper
3
+
4
+ def error_span(attribute, options = {})
5
+ options[:span_class] ||= 'help-block'
6
+ options[:error_class] ||= 'has-error'
7
+
8
+ if errors_on?(attribute)
9
+ @template.content_tag( :div, :class => options[:error_class] ) do
10
+ content_tag( :span, errors_for(attribute), :class => options[:span_class] )
11
+ end
12
+ end
13
+ end
14
+
15
+ def errors_on?(attribute)
16
+ object.errors[attribute].present? if object.respond_to?(:errors)
17
+ end
18
+
19
+ def errors_for(attribute)
20
+ object.errors[attribute].try(:join, ', ') || object.errors[attribute].try(:to_s)
21
+ end
22
+ end
@@ -1,12 +1,20 @@
1
1
  module GlyphHelper
2
2
  # ==== Examples
3
3
  # glyph(:share_alt)
4
- # # => <i class="icon-share-alt"></i>
4
+ # # => <span class="icon-share-alt"></span>
5
5
  # glyph(:lock, :white)
6
- # # => <i class="icon-lock icon-white"></i>
7
-
6
+ # # => <span class="icon-lock icon-white"></span>
7
+ # glyph(:thumbs_up, :pull_left)
8
+ # # => <i class="icon-thumbs-up pull-left"></i>
9
+ # glyph(:lock, {tag: :span})
10
+ # # => <span class="icon-lock"></span>
8
11
  def glyph(*names)
9
- content_tag :i, nil, :class => names.map{|name| "icon-#{name.to_s.gsub('_','-')}" }
12
+ options = (names.last.kind_of?(Hash)) ? names.pop : {}
13
+ names.map! { |name| name.to_s.gsub('_','-') }
14
+ names.map! do |name|
15
+ name =~ /pull-(?:left|right)/ ? name : "glyphicon glyphicon-#{name}"
16
+ end
17
+ options[:tag] = options[:tag] ||= :i
18
+ content_tag options[:tag], nil, :class => names
10
19
  end
11
20
  end
12
-
@@ -1,42 +1,59 @@
1
1
  module ModalHelper
2
- def modal_dialog(options = {}, escape = true, &block)
3
- default_options = {:class => "bootstrap-modal modal"}
4
- content_tag :div, nil, options.merge(default_options), escape, &block
2
+
3
+ #modals have a header, a body, a footer for options.
4
+ def modal_dialog(options = {}, &block)
5
+ options = {:id => 'modal', :size => '', :show_close => true, :dismiss => true}.merge options
6
+ content_tag :div, :class => "bootstrap-modal modal fade", :id => options[:id] do
7
+ content_tag :div, :class => "modal-dialog #{options['size']}" do
8
+ content_tag :div, :class => "modal-content" do
9
+ modal_header(options[:header], &block) +
10
+ modal_body(options[:body], &block) +
11
+ modal_footer(options[:footer], &block)
12
+ end
13
+ end
14
+ end
5
15
  end
6
16
 
7
- def modal_header(options = {}, escape = true, &block)
8
- default_options = {:class => 'modal-header'}
9
- content_tag :div, nil, options.merge(default_options), escape do
10
- raw("<button class=\"close\" data-dismiss=\"modal\">&times;</button>" + capture(&block))
17
+ def modal_header(options, &block)
18
+ content_tag :div, :class => 'modal-header' do
19
+ if options[:show_close]
20
+ close_button(options[:dismiss]) +
21
+ content_tag(:h4, options[:title], :class => 'modal-title', &block)
22
+ else
23
+ content_tag(:h4, options[:title], :class => 'modal-title', &block)
24
+ end
11
25
  end
12
26
  end
13
27
 
14
- def modal_body(options = {}, escape = true, &block)
15
- default_options = {:class => 'modal-body'}
16
- content_tag :div, nil, options.merge(default_options), escape, &block
28
+ def modal_body(options, &block)
29
+ content_tag :div, options[:content], :class => 'modal-body', :style => options[:style], &block
30
+ end
31
+
32
+ def modal_footer(options, &block)
33
+ content_tag :div, options[:content], :class => 'modal-footer', &block
17
34
  end
18
35
 
19
- def modal_footer(options = {}, escape = true, &block)
20
- default_options = {:class => 'modal-footer'}
21
- content_tag :div, nil, options.merge(default_options), escape, &block
36
+ def close_button(dismiss)
37
+ #It doesn't seem to like content_tag, so we do this instead.
38
+ raw("<button class=\"close\" data-dismiss=\"#{dismiss}\" aria-hidden=\"true\">&times;</button>")
22
39
  end
23
40
 
24
- def modal_toggle(content_or_options = nil, options = {}, &block)
41
+ def modal_toggle(content_or_options = nil, options, &block)
25
42
  if block_given?
26
43
  options = content_or_options if content_or_options.is_a?(Hash)
27
- default_options = {:class => 'btn', "data-toggle" => "modal", "href" => options[:dialog]}.merge(options)
44
+ default_options = { :class => 'btn btn-default', "data-toggle" => "modal", "href" => options[:dialog] }.merge(options)
28
45
 
29
46
  content_tag :a, nil, default_options, true, &block
30
47
  else
31
- default_options = {:class => 'btn', "data-toggle" => "modal", "href" => options[:dialog]}.merge(options)
48
+ default_options = { :class => 'btn btn-default', "data-toggle" => "modal", "href" => options[:dialog] }.merge(options)
32
49
  content_tag :a, content_or_options, default_options, true
33
50
  end
34
51
  end
35
52
 
36
- def modal_cancel_button content, options = {}
37
- default_options = {:class => "btn bootstrap-modal-cancel-button"}
53
+ def modal_cancel_button(content, options)
54
+ default_opts = { :class => "btn bootstrap-modal-cancel-button" }
38
55
 
39
- content_tag_string "a", content, default_options.merge(options)
56
+ content_tag_string "a", content, default_opts.merge(options)
40
57
  end
41
- end
42
58
 
59
+ end
@@ -0,0 +1,209 @@
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_nav(options) do
5
+ container_div(options[:brand], options[:brand_link], options[:responsive], options[:fluid], options[:no_turbolink]) do
6
+ yield if block_given?
7
+ end
8
+ end
9
+ end
10
+
11
+ def menu_group(options={}, &block)
12
+ pull_class = "navbar-#{options[:pull].to_s}" if options[:pull].present?
13
+ content_tag(:ul, :class => "nav navbar-nav #{pull_class}", &block)
14
+ end
15
+
16
+ def menu_item(name=nil, path="#", *args, &block)
17
+ path = name || path if block_given?
18
+ options = args.extract_options!
19
+ content_tag :li, :class => is_active?(path, options) do
20
+ if block_given?
21
+ link_to path, options, &block
22
+ else
23
+ link_to name, path, options, &block
24
+ end
25
+ end
26
+ end
27
+
28
+ def drop_down(name)
29
+ content_tag :li, :class => "dropdown" do
30
+ drop_down_link(name) + drop_down_list { yield }
31
+ end
32
+ end
33
+
34
+ def drop_down_with_submenu(name, &block)
35
+ content_tag :li, :class => "dropdown" do
36
+ drop_down_link(name) + drop_down_sublist(&block)
37
+ end
38
+ end
39
+
40
+ def drop_down_sublist(&block)
41
+ content_tag :ul, :class => "dropdown-menu", &block
42
+ end
43
+
44
+ def drop_down_submenu(name, &block)
45
+ content_tag :li, :class => "dropdown-submenu" do
46
+ link_to(name, "") + drop_down_list(&block)
47
+ end
48
+ end
49
+
50
+ def drop_down_divider
51
+ content_tag :li, "", :class => "divider"
52
+ end
53
+
54
+ def drop_down_header(text)
55
+ content_tag :li, text, :class => "nav-header"
56
+ end
57
+
58
+ def menu_divider
59
+ content_tag :li, "", :class => "divider-vertical"
60
+ end
61
+
62
+ def menu_text(text=nil, options={}, &block)
63
+ pull = options.delete(:pull)
64
+ pull_class = pull.present? ? "pull-#{pull.to_s}" : nil
65
+ options.append_merge!(:class, pull_class)
66
+ options.append_merge!(:class, "navbar-text")
67
+ content_tag :p, options do
68
+ text || yield
69
+ end
70
+ end
71
+
72
+ # Returns current url or path state (useful for buttons).
73
+ # Example:
74
+ # # Assume we'r currently at blog/categories/test
75
+ # uri_state('/blog/categories/test', {}) # :active
76
+ # uri_state('/blog/categories', {}) # :chosen
77
+ # uri_state('/blog/categories/test', {method: delete}) # :inactive
78
+ # uri_state('/blog/categories/test/3', {}) # :inactive
79
+ def uri_state(uri, options={})
80
+ return options[:status] if options.key?(:status)
81
+
82
+ root_url = request.host_with_port + '/'
83
+ root = uri == '/' || uri == root_url
84
+
85
+ request_uri = if uri.start_with?(root_url)
86
+ request.url
87
+ else
88
+ request.path
89
+ end
90
+
91
+ if !options[:method].nil? || !options["data-method"].nil?
92
+ :inactive
93
+ elsif uri == request_uri || (options[:root] && (request_uri == '/') || (request_uri == root_url))
94
+ :active
95
+ else
96
+ if request_uri.start_with?(uri) and not(root)
97
+ :chosen
98
+ else
99
+ :inactive
100
+ end
101
+ end
102
+ end
103
+
104
+ private
105
+
106
+ def nav_bar_nav(options, &block)
107
+
108
+ position = "static-#{options[:static].to_s}" if options[:static]
109
+ position = "fixed-#{options[:fixed].to_s}" if options[:fixed]
110
+ inverse = (options[:inverse].present? && options[:inverse] == true) ? true : false
111
+
112
+ content_tag :nav, :class => nav_bar_css_class(position, inverse), :role => "navigation" do
113
+ yield
114
+ end
115
+ end
116
+
117
+ def container_div(brand, brand_link, responsive, fluid, no_turbolink, &block)
118
+ div_container_class = fluid ? "container-fluid" : "container"
119
+ no_turbolink ||= false
120
+
121
+ content_tag :div, :class => div_container_class do
122
+ container_div_with_block(brand, brand_link, responsive, no_turbolink, &block)
123
+ end
124
+ end
125
+
126
+ def container_div_with_block(brand, brand_link, responsive, no_turbolink, &block)
127
+ output = []
128
+ if responsive == true
129
+ output << responsive_nav_header(brand, brand_link, no_turbolink)
130
+ output << responsive_div { capture(&block) }
131
+ else
132
+ output << brand_link(brand, brand_link, no_turbolink)
133
+ output << capture(&block)
134
+ end
135
+ output.join("\n").html_safe
136
+ end
137
+
138
+ def responsive_nav_header(brand, brand_link, no_turbolink)
139
+ content_tag(:div, :class => "navbar-header") do
140
+ output = []
141
+ output << responsive_button
142
+ output << brand_link(brand, brand_link, no_turbolink)
143
+ output.join("\n").html_safe
144
+ end
145
+ end
146
+
147
+ def nav_bar_css_class(position, inverse = false)
148
+ css_class = ["navbar", "navbar-default"]
149
+ css_class << "navbar-#{position}" if position.present?
150
+ css_class << "navbar-inverse" if inverse
151
+ css_class.join(" ")
152
+ end
153
+
154
+ def brand_link(name, url, no_turbolink)
155
+ return "" if name.blank?
156
+ url ||= root_url
157
+
158
+ if no_turbolink
159
+ link_to(name, url, :class => "navbar-brand", :data => { :no_turbolink => true})
160
+ else
161
+ link_to(name, url, :class => "navbar-brand")
162
+ end
163
+ end
164
+
165
+ def responsive_button
166
+ %{<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
167
+ <span class="sr-only">Toggle navigation</span>
168
+ <span class="icon-bar"></span>
169
+ <span class="icon-bar"></span>
170
+ <span class="icon-bar"></span>
171
+ </button>}
172
+ end
173
+
174
+ def responsive_div(&block)
175
+ content_tag(:div, :class => "navbar-collapse collapse", &block)
176
+ end
177
+
178
+ def is_active?(path, options={})
179
+ state = uri_state(path, options)
180
+ "active" if state.in?([:active, :chosen]) || state === true
181
+ end
182
+
183
+ def name_and_caret(name)
184
+ "#{name} #{content_tag(:b, :class => "caret") {}}".html_safe
185
+ end
186
+
187
+ def drop_down_link(name)
188
+ link_to(name_and_caret(name), "#", :class => "dropdown-toggle", "data-toggle" => "dropdown")
189
+ end
190
+
191
+ def drop_down_list(&block)
192
+ content_tag :ul, :class => "dropdown-menu", &block
193
+ end
194
+ end
195
+
196
+ class Hash
197
+ # appends a string to a hash key's value after a space character (Good for merging CSS classes in options hashes)
198
+ def append_merge!(key, value)
199
+ # just return self if value is blank
200
+ return self if value.blank?
201
+
202
+ current_value = self[key]
203
+ # just merge if it doesn't already have that key
204
+ self[key] = value and return if current_value.blank?
205
+ # raise error if we're trying to merge into something that isn't a string
206
+ raise ArgumentError, "Can only merge strings" unless current_value.is_a?(String)
207
+ self[key] = [current_value, value].compact.join(" ")
208
+ end
209
+ end
@@ -1,5 +1,14 @@
1
1
  module TwitterBreadcrumbsHelper
2
- def render_breadcrumbs(divider = '/')
3
- render :partial => 'twitter-bootstrap/breadcrumbs', :locals => { :divider => divider }
2
+ def render_bootstrap_breadcrumbs(divider = '/', options={}, &block)
3
+ default_options = { :class => '', :item_class => '', :divider_class => '', :active_class => 'active' }.merge(options)
4
+ content = render :partial => 'twitter-bootstrap/breadcrumbs', :layout => false, :locals => { :divider => divider, options: options }
5
+ if block_given?
6
+ capture(content, &block)
7
+ else
8
+ content
9
+ end
4
10
  end
11
+
12
+ # Add backward compatible alias unless BC on rails present
13
+ alias_method :render_breadcrumbs, :render_bootstrap_breadcrumbs unless defined?(::BreadcrumbsOnRails)
5
14
  end
@@ -1,14 +1,14 @@
1
- <% if @breadcrumbs.present? %>
2
- <ul class="breadcrumb">
3
- <% separator = divider %>
4
- <% @breadcrumbs[0..-2].each do |crumb| %>
5
- <li>
1
+ <% if @__bs_breadcrumbs.present? %>
2
+ <ul class="breadcrumb <%= options[:class] %>">
3
+ <% separator = divider.html_safe if divider %>
4
+ <% @__bs_breadcrumbs[0..-2].each do |crumb| %>
5
+ <li class="<%= options[:item_class] %>">
6
6
  <%= link_to crumb[:name], crumb[:url], crumb[:options] %>
7
- <span class="divider"><%= separator %></span>
7
+ <span class="divider <%= options[:divider_class] %>"><%= separator if separator %></span>
8
8
  </li>
9
9
  <% end %>
10
- <li class="active">
11
- <%= @breadcrumbs.last[:name] %>
10
+ <li class="<%= options[:active_class] %>">
11
+ <%= @__bs_breadcrumbs.last[:name] %>
12
12
  </li>
13
13
  </ul>
14
- <% end %>
14
+ <% end %>
@@ -5,25 +5,30 @@ module Bootstrap
5
5
  class InstallGenerator < ::Rails::Generators::Base
6
6
 
7
7
  source_root File.expand_path("../templates", __FILE__)
8
- desc "This generator installs Twitter Bootstrap to Asset Pipeline"
8
+ desc "This generator installs Bootstrap to Asset Pipeline"
9
9
  argument :stylesheets_type, :type => :string, :default => 'less', :banner => '*less or static'
10
+ class_option :'no-coffeescript', :type => :boolean, :default => false, :desc => 'Skips coffeescript replacement into app generators'
10
11
 
11
12
  def add_assets
12
13
 
13
- if File.exist?('app/assets/javascripts/application.js')
14
- insert_into_file "app/assets/javascripts/application.js", "//= require twitter/bootstrap\n", :after => "jquery_ujs\n"
14
+ js_manifest = 'app/assets/javascripts/application.js'
15
+
16
+ if File.exist?(js_manifest)
17
+ insert_into_file js_manifest, "//= require twitter/bootstrap\n", :after => "jquery_ujs\n"
15
18
  else
16
- copy_file "application.js", "app/assets/javascripts/application.js"
19
+ copy_file "application.js", js_manifest
17
20
  end
18
21
 
19
- if File.exist?('app/assets/stylesheets/application.css')
22
+ css_manifest = 'app/assets/stylesheets/application.css'
23
+
24
+ if File.exist?(css_manifest)
20
25
  # Add our own require:
21
- content = File.read("app/assets/stylesheets/application.css")
26
+ content = File.read(css_manifest)
22
27
  if content.match(/require_tree\s+\.\s*$/)
23
28
  # Good enough - that'll include our bootstrap_and_overrides.css.less
24
29
  else
25
30
  style_require_block = " *= require bootstrap_and_overrides\n"
26
- insert_into_file "app/assets/stylesheets/application.css", style_require_block, :after => "require_self\n"
31
+ insert_into_file css_manifest, style_require_block, :after => "require_self\n"
27
32
  end
28
33
  else
29
34
  copy_file "application.css", "app/assets/stylesheets/application.css"
@@ -56,7 +61,6 @@ module Bootstrap
56
61
  def cleanup_legacy
57
62
  # Remove old requires (if any) that included twitter/bootstrap directly:
58
63
  gsub_file("app/assets/stylesheets/application.css", %r|\s*\*=\s*twitter/bootstrap\s*\n|, "")
59
- gsub_file("app/assets/stylesheets/application.css", %r|\s*\*=\s*twitter/bootstrap_responsive\s*\n|, "")
60
64
  if File.exist?('app/assets/stylesheets/bootstrap_override.css.less')
61
65
  puts <<-EOM
62
66
  Warning:
@@ -72,6 +76,7 @@ module Bootstrap
72
76
  end
73
77
 
74
78
  def use_coffeescript?
79
+ return false if options[:'no-coffeescript']
75
80
  ::Rails.configuration.app_generators.rails[:javascript_engine] == :coffee
76
81
  end
77
82
  end