bootstrap-sass 3.0.2.1 → 3.0.3.0

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.

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