bootstrap-sass 3.0.2.1 → 3.0.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bootstrap-sass might be problematic. Click here for more details.

Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/Gemfile +9 -1
  4. data/README.md +49 -3
  5. data/Rakefile +1 -3
  6. data/lib/bootstrap-sass.rb +54 -43
  7. data/lib/bootstrap-sass/sass_functions.rb +45 -10
  8. data/lib/bootstrap-sass/version.rb +2 -2
  9. data/tasks/converter/less_conversion.rb +18 -12
  10. data/templates/project/manifest.rb +11 -2
  11. data/test/dummy/app/views/pages/root.html.slim +19 -3
  12. data/test/dummy_sass_only/Gemfile +4 -0
  13. data/test/dummy_sass_only/compile.rb +13 -0
  14. data/test/dummy_sass_only/import_all.sass +2 -0
  15. data/test/gemfiles/sass_3_2.gemfile +9 -1
  16. data/test/gemfiles/sass_head.gemfile +11 -2
  17. data/test/sass_test.rb +23 -0
  18. data/test/test_helper.rb +0 -1
  19. data/vendor/assets/javascripts/bootstrap/affix.js +1 -1
  20. data/vendor/assets/javascripts/bootstrap/alert.js +1 -1
  21. data/vendor/assets/javascripts/bootstrap/button.js +11 -5
  22. data/vendor/assets/javascripts/bootstrap/carousel.js +5 -5
  23. data/vendor/assets/javascripts/bootstrap/collapse.js +1 -1
  24. data/vendor/assets/javascripts/bootstrap/dropdown.js +5 -5
  25. data/vendor/assets/javascripts/bootstrap/modal.js +1 -1
  26. data/vendor/assets/javascripts/bootstrap/popover.js +1 -1
  27. data/vendor/assets/javascripts/bootstrap/scrollspy.js +2 -2
  28. data/vendor/assets/javascripts/bootstrap/tab.js +1 -1
  29. data/vendor/assets/javascripts/bootstrap/tooltip.js +1 -1
  30. data/vendor/assets/javascripts/bootstrap/transition.js +1 -1
  31. data/vendor/assets/stylesheets/bootstrap/_badges.scss +6 -6
  32. data/vendor/assets/stylesheets/bootstrap/_button-groups.scss +7 -33
  33. data/vendor/assets/stylesheets/bootstrap/_buttons.scss +2 -5
  34. data/vendor/assets/stylesheets/bootstrap/_carousel.scss +1 -0
  35. data/vendor/assets/stylesheets/bootstrap/_dropdowns.scss +3 -8
  36. data/vendor/assets/stylesheets/bootstrap/_forms.scss +11 -0
  37. data/vendor/assets/stylesheets/bootstrap/_glyphicons.scss +5 -5
  38. data/vendor/assets/stylesheets/bootstrap/_grid.scss +12 -26
  39. data/vendor/assets/stylesheets/bootstrap/_input-groups.scss +1 -1
  40. data/vendor/assets/stylesheets/bootstrap/_jumbotron.scss +8 -2
  41. data/vendor/assets/stylesheets/bootstrap/_labels.scss +6 -0
  42. data/vendor/assets/stylesheets/bootstrap/_mixins.scss +38 -51
  43. data/vendor/assets/stylesheets/bootstrap/_modals.scss +2 -5
  44. data/vendor/assets/stylesheets/bootstrap/_navbar.scss +41 -53
  45. data/vendor/assets/stylesheets/bootstrap/_navs.scss +0 -20
  46. data/vendor/assets/stylesheets/bootstrap/_panels.scss +11 -1
  47. data/vendor/assets/stylesheets/bootstrap/_progress-bars.scss +0 -12
  48. data/vendor/assets/stylesheets/bootstrap/_tables.scss +5 -18
  49. data/vendor/assets/stylesheets/bootstrap/_thumbnails.scss +9 -3
  50. data/vendor/assets/stylesheets/bootstrap/_type.scss +54 -52
  51. data/vendor/assets/stylesheets/bootstrap/_variables.scss +17 -10
  52. metadata +10 -3
  53. data/lib/bootstrap-sass/compass_functions.rb +0 -24
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7adbd7c5c49bbaf3ac3ca916dca5a5c5fcfbdd32
4
- data.tar.gz: 98f8ed3a12d41e396130826cd46bd4b3bcfa8089
3
+ metadata.gz: 8ae9333af752fe5ef268cfe31b0552c618fdc5d4
4
+ data.tar.gz: 7dee8bca5ee78f5ebec85cc6874ca004c70d3ef8
5
5
  SHA512:
6
- metadata.gz: af547f0a32aef0187ddd596aa6ff90574994339b444b3f11da80e8ac4e0b35bf6dccf84974ee7a06c124c0accfad0338d4334f6772adc91e64fd56ad86195be7
7
- data.tar.gz: 64d7cfa04ca0050be992dda8541a884caa5c3dd2b3ee59a337cb078a75955b729743d4c1f2169a4b0470fafe191b482a27d000178b915323733e618de2e46e81
6
+ metadata.gz: 2180967abbf038043dba58cae99e4eb1172e800ba90f1cab21392c3cbe2645d558bf254d2d9ec7a8a042ca11dd02f25179e90b0c6be92b20d46361784387e846
7
+ data.tar.gz: 6f9301b6bc8add8ec58c3cd67a031ec8ffbd1a3910419c15a1fd3551e53cbefd76f7e3271fb875e232f87e693ca4ced39730c6af91140205117befabf2593e55
@@ -3,7 +3,7 @@ rvm:
3
3
  - 2.0.0
4
4
  - 1.9.3
5
5
  - jruby
6
- - rbx-19mode
6
+ - rbx
7
7
  gemfile:
8
8
  - test/gemfiles/sass_3_2.gemfile
9
9
  - test/gemfiles/sass_head.gemfile
data/Gemfile CHANGED
@@ -1,3 +1,11 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gemspec
3
+ gemspec
4
+
5
+ platform :rbx do
6
+ gem 'rubysl', '~> 2.0'
7
+ gem 'rubysl-json', '~> 2.0'
8
+ gem 'rubysl-test-unit', '~> 2.0'
9
+ gem 'racc'
10
+ end
11
+
data/README.md CHANGED
@@ -16,7 +16,7 @@ In your Gemfile you need to add the `bootstrap-sass` gem, and ensure that the `s
16
16
 
17
17
  ```ruby
18
18
  gem 'sass-rails', '>= 3.2' # sass-rails needs to be higher than 3.2
19
- gem 'bootstrap-sass', '~> 3.0.2.0'
19
+ gem 'bootstrap-sass', '~> 3.0.3.0'
20
20
  ```
21
21
 
22
22
  `bundle install` and restart your server to make the files available through the pipeline.
@@ -36,13 +36,13 @@ require 'bootstrap-sass'
36
36
  ```
37
37
 
38
38
  ```console
39
- compass install bootstrap
39
+ bundle exec compass install bootstrap
40
40
  ```
41
41
 
42
42
  If you are creating a new Compass project, you can generate it with bootstrap-sass support:
43
43
 
44
44
  ```console
45
- compass create my-new-project -r bootstrap-sass --using bootstrap
45
+ bundle exec compass create my-new-project -r bootstrap-sass --using bootstrap
46
46
  ```
47
47
 
48
48
  This will create a new Compass project with the following files in it:
@@ -51,6 +51,50 @@ This will create a new Compass project with the following files in it:
51
51
  * [styles.scss](/templates/project/styles.scss) - main project SCSS file, import `variables` and `bootstrap`.
52
52
 
53
53
 
54
+ ### c. Sass-only (no Compass, nor Rails)
55
+
56
+ Require the gem, and load paths and Sass helpers will be configured automatically:
57
+
58
+ ```ruby
59
+ require 'bootstrap-sass'
60
+ ```
61
+
62
+ When using outside ruby (e.g. as a bower package), disable ruby asset lookup helper:
63
+
64
+ ```sass
65
+ $bootstrap-sass-asset-helper: false
66
+ ```
67
+
68
+
69
+ #### JS and fonts
70
+
71
+ If you are using Rails or Sprockets, see Usage.
72
+
73
+ If none of Rails/Sprockets/Compass were detected the fonts will be referenced as:
74
+
75
+ ```sass
76
+ "#{$icon-font-path}/#{$icon-font-name}.eot"
77
+ ```
78
+
79
+ `$icon-font-path` defaults to `bootstrap/`.
80
+
81
+ When not using an asset pipeline, you have to copy fonts and javascripts from the gem.
82
+
83
+ ```bash
84
+ mkdir public/fonts
85
+ cp -r $(bundle show bootstrap-sass)/vendor/assets/fonts/ public/fonts/
86
+ mkdir public/javascripts
87
+ cp -r $(bundle show bootstrap-sass)/vendor/assets/javascripts/ public/javascripts/
88
+ ```
89
+
90
+ In ruby you can get the assets' location in the filesystem like this:
91
+
92
+ ```ruby
93
+ Bootstrap.stylesheets_path
94
+ Bootstrap.fonts_path
95
+ Bootstrap.javascripts_path
96
+ ```
97
+
54
98
  ## Usage
55
99
 
56
100
  ### Sass
@@ -111,6 +155,8 @@ You can also load individual modules, provided you also require any dependencies
111
155
  //= require bootstrap/dropdown
112
156
  ```
113
157
 
158
+ ---
159
+
114
160
  ## Development and Contributing
115
161
 
116
162
  If you'd like to help with the development of bootstrap-sass itself, read this section.
data/Rakefile CHANGED
@@ -8,9 +8,8 @@ end
8
8
  desc 'Dumps output to a CSS file for testing'
9
9
  task :debug do
10
10
  require 'sass'
11
- require './lib/bootstrap-sass/compass_functions'
12
11
  require './lib/bootstrap-sass/sass_functions'
13
- path = './vendor/assets/stylesheets'
12
+ path = Bootstrap.stylesheets_path
14
13
  %w(bootstrap).each do |file|
15
14
  engine = Sass::Engine.for_file("#{path}/#{file}.scss", syntax: :scss, load_paths: [path])
16
15
  File.open("./#{file}.css", 'w') { |f| f.write(engine.render) }
@@ -29,7 +28,6 @@ task :compile, :css_path do |t, args|
29
28
  lib_path = File.join(File.dirname(__FILE__), 'lib')
30
29
  $:.unshift(lib_path) unless $:.include?(lib_path)
31
30
  require 'sass'
32
- require 'bootstrap-sass/compass_functions'
33
31
  require 'bootstrap-sass/sass_functions'
34
32
  require 'term/ansicolor'
35
33
 
@@ -1,64 +1,75 @@
1
1
  module Bootstrap
2
2
  class FrameworkNotFound < StandardError; end
3
3
 
4
- # Inspired by Kaminari
5
- def self.load!
6
- if compass?
7
- require 'bootstrap-sass/compass_functions'
8
- register_compass_extension
9
- elsif asset_pipeline?
4
+ class << self
5
+ # Inspired by Kaminari
6
+ def load!
10
7
  require 'bootstrap-sass/sass_functions'
8
+ register_compass_extension if compass?
9
+
10
+ if rails?
11
+ require 'sass-rails'
12
+ register_rails_engine
13
+ end
14
+
15
+ configure_sass
11
16
  end
12
17
 
13
- if rails?
14
- require 'sass-rails'
15
- register_rails_engine
18
+ # Paths
19
+ def gem_path
20
+ @gem_path ||= File.expand_path '..', File.dirname(__FILE__)
16
21
  end
17
22
 
18
- unless rails? || compass?
19
- raise Bootstrap::FrameworkNotFound,
20
- 'bootstrap-sass requires either Rails > 3.1 or Compass, neither of which are loaded'
23
+ def stylesheets_path
24
+ File.join assets_path, 'stylesheets'
21
25
  end
22
26
 
23
- bs_stylesheets = File.join(gem_path, 'vendor', 'assets', 'stylesheets')
24
- ::Sass.load_paths << bs_stylesheets
25
- if ::Sass::Script::Number.precision < 10
26
- # see https://github.com/thomas-mcdonald/bootstrap-sass/issues/409
27
- ::Sass::Script::Number.precision = 10
27
+ def fonts_path
28
+ File.join assets_path, 'fonts'
28
29
  end
29
- end
30
30
 
31
- private
31
+ def javascripts_path
32
+ File.join assets_path, 'javascripts'
33
+ end
32
34
 
33
- def self.gem_path
34
- @gem_path ||= File.expand_path File.join('..'), File.dirname(__FILE__)
35
- end
35
+ def assets_path
36
+ @assets_path ||= File.join gem_path, 'vendor', 'assets'
37
+ end
36
38
 
37
- def self.asset_pipeline?
38
- defined?(::Sprockets)
39
- end
39
+ # Environment detection helpers
40
+ def asset_pipeline?
41
+ defined?(::Sprockets)
42
+ end
40
43
 
41
- def self.compass?
42
- defined?(::Compass)
43
- end
44
+ def compass?
45
+ defined?(::Compass)
46
+ end
44
47
 
45
- def self.rails?
46
- defined?(::Rails)
47
- end
48
+ def rails?
49
+ defined?(::Rails)
50
+ end
48
51
 
49
- def self.register_compass_extension
50
- styles = File.join gem_path, 'vendor', 'assets', 'stylesheets'
51
- templates = File.join gem_path, 'templates'
52
- ::Compass::Frameworks.register(
53
- 'bootstrap',
54
- :path => gem_path,
55
- :stylesheets_directory => styles,
56
- :templates_directory => templates
57
- )
58
- end
52
+ private
59
53
 
60
- def self.register_rails_engine
61
- require 'bootstrap-sass/engine'
54
+ def configure_sass
55
+ ::Sass.load_paths << stylesheets_path
56
+
57
+ # bootstrap requires minimum precision of 10, see https://github.com/thomas-mcdonald/bootstrap-sass/issues/409
58
+ ::Sass::Script::Number.precision = [10, ::Sass::Script::Number.precision].max
59
+ end
60
+
61
+ def register_compass_extension
62
+ ::Compass::Frameworks.register(
63
+ 'bootstrap',
64
+ :path => gem_path,
65
+ :stylesheets_directory => stylesheets_path,
66
+ :templates_directory => File.join(gem_path, 'templates')
67
+ )
68
+ end
69
+
70
+ def register_rails_engine
71
+ require 'bootstrap-sass/engine'
72
+ end
62
73
  end
63
74
  end
64
75
 
@@ -1,14 +1,49 @@
1
1
  require 'sass'
2
+ require 'bootstrap-sass'
2
3
 
3
4
  module Sass::Script::Functions
4
- # LARS: Snatched from compass - 2011-11-29 - used for gradients in IE6-9
5
- # returns an IE hex string for a color with an alpha channel
6
- # suitable for passing to IE filters.
7
- def ie_hex_str(color)
8
- assert_type color, :Color
9
- alpha = (color.alpha * 255).round
10
- alphastr = alpha.to_s(16).rjust(2, '0')
11
- Sass::Script::String.new("##{alphastr}#{color.send(:hex_str)[1..-1]}".upcase)
12
- end
13
- declare :ie_hex_str, [:color]
5
+ def twbs_font_path(source)
6
+ twbs_asset_path source, :font
7
+ end
8
+ declare :twbs_font_path, [:source]
9
+
10
+ def twbs_image_path(source)
11
+ twbs_asset_path source, :image
12
+ end
13
+ declare :twbs_image_path, [:source]
14
+
15
+ def twbs_asset_path(source, type)
16
+ url = if Bootstrap.asset_pipeline? && (context = sprockets_context)
17
+ context.send(:"#{type}_path", source.value)
18
+ elsif Bootstrap.compass?
19
+ send(:"#{type}_url", source, Sass::Script::Bool.new(true)).value
20
+ end
21
+
22
+ # sass-only
23
+ url ||= source.value.gsub('"', '')
24
+ Sass::Script::String.new(url, :string)
25
+ end
26
+ declare :twbs_asset_path, [:source]
27
+
28
+ unless Sass::Script::Functions.instance_methods.include?(:ie_hex_str)
29
+ # polyfill sass < 3.2.6 (taken from sass 3.2.12):
30
+ def ie_hex_str(color)
31
+ assert_type color, :Color, :color
32
+ alpha = (color.alpha * 255).round.to_s(16).rjust(2, '0')
33
+ Sass::Script::String.new("##{alpha}#{color.send(:hex_str)[1..-1]}".upcase)
34
+ end
35
+ declare :ie_hex_str, [:color]
36
+ end
37
+
38
+ protected
39
+
40
+ def sprockets_context
41
+ # Modern way to get context:
42
+ if options.key?(:sprockets)
43
+ options[:sprockets][:context]
44
+ # Compatibility with sprockets pre 2.10.0:
45
+ elsif (importer = options[:importer]) && importer.respond_to?(:context)
46
+ importer.context
47
+ end
48
+ end
14
49
  end
@@ -1,4 +1,4 @@
1
1
  module Bootstrap
2
- VERSION = '3.0.2.1'
3
- BOOTSTRAP_SHA = '463343af63344dbbc3db04f40b0b804baa919b7e'
2
+ VERSION = '3.0.3.0'
3
+ BOOTSTRAP_SHA = '6d03173a1aad98e75f7d33e65b411c519176c59a'
4
4
  end
@@ -3,7 +3,9 @@ require_relative 'char_string_scanner'
3
3
  # This module transforms LESS into SCSS.
4
4
  # It is implemented via lots of string manipulation: scanning back and forwards for regexps and doing substitions.
5
5
  # Since it does not parse the LESS into an AST, bits of it may assume LESS to be formatted a certain way, and only limited,
6
- # static analysis can be performed. This approach has so far been enough to automatically convert all of twbs/bootstrap.
6
+ # static analysis can be performed. This approach has so far been mostly enough to automatically convert most all of twbs/bootstrap.
7
+ # There is some bootstrap-specific to make up for lack of certain features in Sass 3.2 (recursion, mixin namespacing)
8
+ # and vice versa in LESS (vararg mixins).
7
9
  class Converter
8
10
  module LessConversion
9
11
  # Some regexps for matching bits of SCSS:
@@ -31,7 +33,7 @@ class Converter
31
33
 
32
34
  # These mixins will get vararg definitions in SCSS (not supported by LESS):
33
35
  VARARG_MIXINS = %w(
34
- transition transition-transform box-shadow
36
+ transition transition-duration transition-property transition-transform box-shadow
35
37
  )
36
38
 
37
39
  def process_stylesheet_assets
@@ -67,6 +69,10 @@ class Converter
67
69
  file = replace_rules(file, ' @media') { |r| unindent(r, 2) }
68
70
  when 'variables.less'
69
71
  file = insert_default_vars(file)
72
+ file = <<-SCSS + file
73
+ // bootstrap specific variable. set to false if not using ruby + asset pipeline / compass.
74
+ $bootstrap-sass-asset-helper: true !default;
75
+ SCSS
70
76
  file = replace_all file, /(\$icon-font-path:).*(!default)/, '\1 "bootstrap/" \2'
71
77
  when 'close.less'
72
78
  # extract .close { button& {...} } rule
@@ -83,9 +89,10 @@ class Converter
83
89
  when 'thumbnails.less'
84
90
  file = extract_nested_rule file, 'a&'
85
91
  when 'glyphicons.less'
92
+ file = replace_all file, /\#\{(url\(.*?\))}/, '\1'
86
93
  file = replace_rules(file, '@font-face') { |rule|
87
94
  rule = replace_all rule, /(\$icon-font-\w+)/, '#{\1}'
88
- replace_all rule, /url\(/, 'font-url('
95
+ replace_asset_url rule, :font
89
96
  }
90
97
  end
91
98
 
@@ -109,7 +116,6 @@ class Converter
109
116
  file = replace_less_extend(file)
110
117
  file = replace_spin(file)
111
118
  file = replace_image_urls(file)
112
- file = replace_image_paths(file)
113
119
  file = replace_escaping(file)
114
120
  file = convert_less_ampersand(file)
115
121
  file = deinterpolate_vararg_mixins(file)
@@ -117,6 +123,10 @@ class Converter
117
123
  file
118
124
  end
119
125
 
126
+ def replace_asset_url(rule, type)
127
+ replace_all rule, /url\((.*?)\)/, "url(if($bootstrap-sass-asset-helper, twbs-#{type}-path(\\1), \\1))"
128
+ end
129
+
120
130
  # convert grid mixins LESS when => SASS @if
121
131
  def convert_grid_mixins(file)
122
132
  file = replace_rules file, /@mixin make-grid-columns/, comments: false do |css, pos|
@@ -391,15 +401,11 @@ class Converter
391
401
  end
392
402
 
393
403
  def replace_image_urls(less)
394
- less.gsub(/background-image: url\("?(.*?)"?\);/) { |s| "background-image: image-url(\"#{$1}\");" }
395
- end
396
-
397
- def replace_image_paths(less)
398
- less.gsub('../img/', '')
404
+ less.gsub(/background-image: url\("?(.*?)"?\);/) { |s| replace_asset_url s, :image }
399
405
  end
400
406
 
401
407
  def replace_escaping(less)
402
- less = less.gsub(/\~"([^"]+)"/, '#{\1}') # Get rid of ~"" escape
408
+ less = less.gsub(/~"([^"]+)"/, '#{\1}') # Get rid of ~"" escape
403
409
  less.gsub!(/\$\{([^}]+)\}/, '$\1') # Get rid of @{} escape
404
410
  less.gsub!(/"([^"\n]*)(\$[\w\-]+)([^"\n]*)"/, '"\1#{\2}\3"') # interpolate variable in string, e.g. url("$file-1x") => url("#{$file-1x}")
405
411
  less.gsub(/(\W)e\(%\("?([^"]*)"?\)\)/, '\1\2') # Get rid of e(%("")) escape
@@ -415,7 +421,7 @@ class Converter
415
421
  regx = /^\.badge\s*\{[\s\/\w\(\)]+(&{1}-{1})\w.*?^}$/m
416
422
 
417
423
  tmp = ''
418
- less.scan(/^(\s*&)(-[\w\[\]]+\s*{.+})$/) do |ampersand, css|
424
+ less.scan(/^(\s*&)(-[\w\[\]]+\s*\{.+})$/) do |ampersand, css|
419
425
  tmp << ".badge#{css}\n"
420
426
  end
421
427
 
@@ -604,4 +610,4 @@ class Converter
604
610
  text
605
611
  end
606
612
  end
607
- end
613
+ end
@@ -4,13 +4,22 @@ description 'Bootstrap for Sass'
4
4
  stylesheet 'styles.scss'
5
5
 
6
6
  # SCSS:
7
- bs_stylesheets = "../../vendor/assets/stylesheets/bootstrap"
7
+
8
+ assets = "../../vendor/assets"
9
+
10
+ bs_stylesheets = "#{assets}/stylesheets/bootstrap"
8
11
  stylesheet '_variables.scss.erb', :to => '_variables.scss', :erb => true,
9
12
  :bs_variables_path => File.expand_path("#{bs_stylesheets}/_variables.scss", File.dirname(__FILE__))
10
13
 
11
14
  # JS:
12
- bs_javascripts = "../../vendor/assets/javascripts/bootstrap"
15
+ bs_javascripts = "#{assets}/javascripts/bootstrap"
13
16
  Dir.glob File.expand_path("#{bs_javascripts}/*.js", File.dirname(__FILE__)) do |path|
14
17
  file = File.basename(path)
15
18
  javascript "#{bs_javascripts}/#{file}", :to => "bootstrap/#{file}"
16
19
  end
20
+
21
+ bs_fonts = "#{assets}/fonts/bootstrap"
22
+ Dir.glob File.expand_path("#{bs_fonts}/*", File.dirname(__FILE__)) do |path|
23
+ file = File.basename(path)
24
+ font "#{bs_fonts}/#{file}", :to => "bootstrap/#{file}"
25
+ end
@@ -1,7 +1,7 @@
1
1
  .container
2
2
  .panel.panel-primary
3
- h1 Dummy App
4
- .row
3
+ .panel-heading: h1 Dummy App
4
+ .panel-body: .row
5
5
  .col-sm-3
6
6
  h2 3 columns
7
7
  ul.list-group
@@ -11,9 +11,25 @@
11
11
  .col-sm-3
12
12
  h2 3 columns
13
13
  button.btn.btn-primary type='button' Button
14
+ button.btn.btn-primary type='button' Button
15
+ h2 Icons
16
+ ul.list-inline
17
+ li: i.glyphicon.glyphicon-user
18
+ li: i.glyphicon.glyphicon-bullhorn
19
+ li: i.glyphicon.glyphicon-tint
14
20
  .col-sm-6
15
21
  h2 6 columns
16
- .panel.panel-primary
22
+ .panel.panel-primary: .panel-body
17
23
  .row
18
24
  .col-xs-4.col-xs-push-4
19
25
  .panel.panel-default: h3 This is col-xs-4 col-xs-push-4
26
+
27
+ form.form-inline
28
+ .form-group
29
+ input.sr-only for="exampleInputEmail2" Email address
30
+ input.form-control#exampleInputEmail2 type="email" placeholder="Enter email"
31
+ .checkbox
32
+ label
33
+ input type="checkbox"
34
+ | Remember me
35
+ button.btn.btn-default type="submit" Sign in