bootstrap-sass 3.0.1.0 → 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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG.md +4 -0
  4. data/Gemfile +9 -1
  5. data/README.md +58 -15
  6. data/Rakefile +1 -3
  7. data/lib/bootstrap-sass/sass_functions.rb +45 -10
  8. data/lib/bootstrap-sass/version.rb +2 -2
  9. data/lib/bootstrap-sass.rb +56 -36
  10. data/tasks/converter/less_conversion.rb +27 -26
  11. data/templates/project/manifest.rb +14 -5
  12. data/test/dummy/app/views/pages/root.html.slim +19 -3
  13. data/test/dummy_sass_only/Gemfile +4 -0
  14. data/test/dummy_sass_only/compile.rb +13 -0
  15. data/test/dummy_sass_only/import_all.sass +2 -0
  16. data/test/gemfiles/sass_3_2.gemfile +9 -1
  17. data/test/gemfiles/sass_head.gemfile +11 -2
  18. data/test/sass_test.rb +23 -0
  19. data/test/test_helper.rb +0 -1
  20. data/vendor/assets/javascripts/bootstrap/affix.js +2 -2
  21. data/vendor/assets/javascripts/bootstrap/alert.js +2 -2
  22. data/vendor/assets/javascripts/bootstrap/button.js +12 -6
  23. data/vendor/assets/javascripts/bootstrap/carousel.js +6 -6
  24. data/vendor/assets/javascripts/bootstrap/collapse.js +2 -2
  25. data/vendor/assets/javascripts/bootstrap/dropdown.js +6 -6
  26. data/vendor/assets/javascripts/bootstrap/modal.js +2 -2
  27. data/vendor/assets/javascripts/bootstrap/popover.js +2 -2
  28. data/vendor/assets/javascripts/bootstrap/scrollspy.js +3 -3
  29. data/vendor/assets/javascripts/bootstrap/tab.js +2 -2
  30. data/vendor/assets/javascripts/bootstrap/tooltip.js +2 -2
  31. data/vendor/assets/javascripts/bootstrap/transition.js +2 -2
  32. data/vendor/assets/stylesheets/bootstrap/_badges.scss +6 -6
  33. data/vendor/assets/stylesheets/bootstrap/_button-groups.scss +7 -33
  34. data/vendor/assets/stylesheets/bootstrap/_buttons.scss +2 -5
  35. data/vendor/assets/stylesheets/bootstrap/_carousel.scss +1 -0
  36. data/vendor/assets/stylesheets/bootstrap/_dropdowns.scss +3 -8
  37. data/vendor/assets/stylesheets/bootstrap/_forms.scss +17 -8
  38. data/vendor/assets/stylesheets/bootstrap/_glyphicons.scss +5 -5
  39. data/vendor/assets/stylesheets/bootstrap/_grid.scss +12 -26
  40. data/vendor/assets/stylesheets/bootstrap/_input-groups.scss +1 -1
  41. data/vendor/assets/stylesheets/bootstrap/_jumbotron.scss +8 -2
  42. data/vendor/assets/stylesheets/bootstrap/_labels.scss +6 -0
  43. data/vendor/assets/stylesheets/bootstrap/_mixins.scss +49 -62
  44. data/vendor/assets/stylesheets/bootstrap/_modals.scss +2 -5
  45. data/vendor/assets/stylesheets/bootstrap/_navbar.scss +41 -53
  46. data/vendor/assets/stylesheets/bootstrap/_navs.scss +0 -20
  47. data/vendor/assets/stylesheets/bootstrap/_panels.scss +11 -1
  48. data/vendor/assets/stylesheets/bootstrap/_progress-bars.scss +0 -12
  49. data/vendor/assets/stylesheets/bootstrap/_tables.scss +17 -22
  50. data/vendor/assets/stylesheets/bootstrap/_thumbnails.scss +17 -10
  51. data/vendor/assets/stylesheets/bootstrap/_type.scss +54 -52
  52. data/vendor/assets/stylesheets/bootstrap/_variables.scss +17 -10
  53. metadata +10 -3
  54. data/lib/bootstrap-sass/compass_functions.rb +0 -24
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b8797364bd5213c140e56b51051fb21da8f2c11
4
- data.tar.gz: ef4549f3ba70b18f94076ced4bdb735e4e0e70ad
3
+ metadata.gz: 8ae9333af752fe5ef268cfe31b0552c618fdc5d4
4
+ data.tar.gz: 7dee8bca5ee78f5ebec85cc6874ca004c70d3ef8
5
5
  SHA512:
6
- metadata.gz: b932bde89af172f7c61ae4abc40716c517388b04f006ed1d39f3979821abd2bc4c9391e52e2e66bcfd025aa7856c719fe91561d85fc737d0d88299cb01ac15dc
7
- data.tar.gz: 7f75a705ed281b6a7a61502f304be08ba8bccaec314e6bb98029038830694de35a05ecff2f2d6c8054d00ca13ef98278c635c28290fcfd63cc5cc8997958ef5d
6
+ metadata.gz: 2180967abbf038043dba58cae99e4eb1172e800ba90f1cab21392c3cbe2645d558bf254d2d9ec7a8a042ca11dd02f25179e90b0c6be92b20d46361784387e846
7
+ data.tar.gz: 6f9301b6bc8add8ec58c3cd67a031ec8ffbd1a3910419c15a1fd3551e53cbefd76f7e3271fb875e232f87e693ca4ced39730c6af91140205117befabf2593e55
data/.travis.yml CHANGED
@@ -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/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.0.2.1
4
+
5
+ * fix vendor paths for compass
6
+
3
7
  ## 3.0.0.0
4
8
 
5
9
  * Fully automated (lots of string juggling) LESS -> Sass conversion. - *Gleb Mazovetskiy*
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
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/thomas-mcdonald/bootstrap-sass.png?branch=master)](http://travis-ci.org/thomas-mcdonald/bootstrap-sass) [![Code Climate](https://codeclimate.com/github/thomas-mcdonald/bootstrap-sass.png)](https://codeclimate.com/github/thomas-mcdonald/bootstrap-sass)
4
4
 
5
- `bootstrap-sass` is an Sass-powered version of [Bootstrap](http://github.com/twbs/bootstrap), ready to drop right into your Sass powered applications.
5
+ `bootstrap-sass` is a Sass-powered version of [Bootstrap](http://github.com/twbs/bootstrap), ready to drop right into your Sass powered applications.
6
6
 
7
7
  ## Installation
8
8
 
@@ -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.1.0.rc'
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.
@@ -24,8 +24,8 @@ gem 'bootstrap-sass', '~> 3.0.1.0.rc'
24
24
  ### b. Compass (no Rails)
25
25
 
26
26
  Install the gem
27
- ```console
28
- gem install bootstrap-sass --pre
27
+ ```sh
28
+ gem install bootstrap-sass
29
29
  ```
30
30
 
31
31
  If you have an existing Compass project:
@@ -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,11 +51,56 @@ 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
- ### CSS / SCSS / SASS
100
+ ### Sass
57
101
 
58
- Import Bootstrap in an SCSS file (for example, `application.css.scss`) to get all of Bootstrap's styles, mixins and variables! We recommend against using `//= require` directives, since none of your other stylesheets will be [able to access][antirequire] the Bootstrap mixins or variables.
102
+ Import Bootstrap into a Sass file (for example, `application.css.scss`) to get all of Bootstrap's styles, mixins and variables!
103
+ We recommend against using `//= require` directives, since none of your other stylesheets will be [able to access][antirequire] the Bootstrap mixins or variables.
59
104
 
60
105
  ```scss
61
106
  @import "bootstrap";
@@ -77,24 +122,20 @@ $navbar-default-color: $light-orange;
77
122
  @import "bootstrap";
78
123
  ```
79
124
 
80
- For granular control over what is imported, instead of `@import "bootstrap"`, explicitly specify which modules and components should be included.
81
-
82
- Copy `bootstrap.scss` from the gem into the project's vendor/ as `bootstrap-custom.scss`.
125
+ You can also import components explicitly. To start with a full list of modules copy this file from the gem:
83
126
 
84
127
  ```bash
85
128
  cp $(bundle show bootstrap-sass)/vendor/assets/stylesheets/bootstrap/bootstrap.scss \
86
129
  vendor/assets/stylesheets/bootstrap-custom.scss
87
130
  ```
88
131
 
89
- Comment out the import statements you do not need from `bootstrap-custom.scss`.
90
-
91
- Finally, in your `application.sass`:
132
+ In your `application.sass`, replace `@import 'bootstrap'` with:
92
133
 
93
134
  ```scss
94
135
  @import 'bootstrap-custom';
95
136
  ```
96
137
 
97
- NB: This file now needs to be manually kept up to date with structural changes from upstream.
138
+ Comment out any modules you don't need from `bootstrap-custom`.
98
139
 
99
140
  ### Javascript
100
141
 
@@ -114,6 +155,8 @@ You can also load individual modules, provided you also require any dependencies
114
155
  //= require bootstrap/dropdown
115
156
  ```
116
157
 
158
+ ---
159
+
117
160
  ## Development and Contributing
118
161
 
119
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,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.1.0'
3
- BOOTSTRAP_SHA = 'ea3c89189a6b922c08729857006713de209b66d8'
2
+ VERSION = '3.0.3.0'
3
+ BOOTSTRAP_SHA = '6d03173a1aad98e75f7d33e65b411c519176c59a'
4
4
  end
@@ -1,55 +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.expand_path(File.join('..', '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
32
- def self.asset_pipeline?
33
- defined?(::Sprockets)
34
- end
31
+ def javascripts_path
32
+ File.join assets_path, 'javascripts'
33
+ end
35
34
 
36
- def self.compass?
37
- defined?(::Compass)
38
- end
35
+ def assets_path
36
+ @assets_path ||= File.join gem_path, 'vendor', 'assets'
37
+ end
39
38
 
40
- def self.rails?
41
- defined?(::Rails)
42
- end
39
+ # Environment detection helpers
40
+ def asset_pipeline?
41
+ defined?(::Sprockets)
42
+ end
43
43
 
44
- def self.register_compass_extension
45
- base = File.join(File.dirname(__FILE__), '..')
46
- styles = File.join(base, 'vendor', 'assets', 'stylesheets')
47
- templates = File.join(base, 'templates')
48
- ::Compass::Frameworks.register('bootstrap', :path => base, :stylesheets_directory => styles, :templates_directory => templates)
49
- end
44
+ def compass?
45
+ defined?(::Compass)
46
+ end
47
+
48
+ def rails?
49
+ defined?(::Rails)
50
+ end
51
+
52
+ private
53
+
54
+ def configure_sass
55
+ ::Sass.load_paths << stylesheets_path
50
56
 
51
- def self.register_rails_engine
52
- require 'bootstrap-sass/engine'
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
53
73
  end
54
74
  end
55
75
 
@@ -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,16 +69,14 @@ 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
73
79
  file = extract_nested_rule file, 'button&'
74
- when 'modals.less'
75
- # pre 3.0.1:
76
- if file =~ /body&,/
77
- file = replace_all file, /body&,(.*?)(\{.*?\})/m, "\\1\\2\nbody& \\2"
78
- file = extract_nested_rule file, 'body&'
79
- end
80
80
  when 'dropdowns.less'
81
81
  file = replace_all file, /(\s*)@extend \.pull-right-dropdown-menu;/, "\\1right: 0;\\1left: auto;"
82
82
  when 'forms.less'
@@ -86,12 +86,13 @@ class Converter
86
86
  file = replace_all file, /(\s*)\.navbar-(right|left)\s*\{\s*@extend\s*\.pull-(right|left);\s*/, "\\1.navbar-\\2 {\\1 float: \\2 !important;\\1"
87
87
  when 'tables.less'
88
88
  file = replace_all file, /(@include\s*table-row-variant\()(\w+)/, "\\1'\\2'"
89
- when 'list-group.less'
89
+ when 'thumbnails.less'
90
90
  file = extract_nested_rule file, 'a&'
91
91
  when 'glyphicons.less'
92
+ file = replace_all file, /\#\{(url\(.*?\))}/, '\1'
92
93
  file = replace_rules(file, '@font-face') { |rule|
93
94
  rule = replace_all rule, /(\$icon-font-\w+)/, '#{\1}'
94
- replace_all rule, /url\(/, 'font-url('
95
+ replace_asset_url rule, :font
95
96
  }
96
97
  end
97
98
 
@@ -115,7 +116,6 @@ class Converter
115
116
  file = replace_less_extend(file)
116
117
  file = replace_spin(file)
117
118
  file = replace_image_urls(file)
118
- file = replace_image_paths(file)
119
119
  file = replace_escaping(file)
120
120
  file = convert_less_ampersand(file)
121
121
  file = deinterpolate_vararg_mixins(file)
@@ -123,6 +123,10 @@ class Converter
123
123
  file
124
124
  end
125
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
+
126
130
  # convert grid mixins LESS when => SASS @if
127
131
  def convert_grid_mixins(file)
128
132
  file = replace_rules file, /@mixin make-grid-columns/, comments: false do |css, pos|
@@ -137,11 +141,11 @@ class Converter
137
141
  // [converter] Grid converted to use SASS cycles (LESS uses recursive nested mixin defs not supported by SASS)
138
142
  #{mxn_def.strip}
139
143
  $list: '';
140
- @for $i from 1 to $grid-columns {
144
+ $i: 1;
145
+ $list: "#{classes}";
146
+ @for $i from 2 through $grid-columns {
141
147
  $list: "#{classes}, \#{$list}";
142
148
  }
143
- $i: $grid-columns;
144
- $list: "\#{$list}, #{classes}";
145
149
  \#{$list} {
146
150
  #{unindent body}
147
151
  }
@@ -149,7 +153,7 @@ class Converter
149
153
  SASS
150
154
  end
151
155
  file = replace_rules file, /@mixin calc-grid/ do |css|
152
- css = indent css.gsub(/.*when \((.*?)\) {/, '@if \1 {').gsub(/(?<=\$type) = (\w+)/, ' == \1').gsub(/(?<=-)(\$[a-z]+)/, '#{\1}')
156
+ css = indent css.gsub(/.*when (.*?) {/, '@if \1 {').gsub(/(?<=\$type) = (\w+)/, ' == \1').gsub(/(?<=-)(\$[a-z]+)/, '#{\1}')
153
157
  if css =~ /== width/
154
158
  css = "@mixin calc-grid($index, $class, $type) {\n#{css}"
155
159
  elsif css =~ /== offset/
@@ -161,7 +165,7 @@ class Converter
161
165
  unindent <<-SASS, 8
162
166
  // [converter] This is defined recursively in LESS, but SASS supports real loops
163
167
  @mixin make-grid($columns, $class, $type) {
164
- @for $i from 1 through $columns {
168
+ @for $i from 0 through $columns {
165
169
  @include calc-grid($i, $class, $type);
166
170
  }
167
171
  }
@@ -283,9 +287,10 @@ class Converter
283
287
  # first find the rules, and remove them
284
288
  file = replace_rules(file, "\s*#{selector}", comments: true) { |rule, pos, css|
285
289
  matches << [rule, pos]
286
- new_selector ||= "#{get_selector(rule).sub(/&$/, '')}#{selector_for_pos(css, pos.begin)}"
287
- indent "// [converter] extracted #{get_selector(rule)} to #{new_selector}", indent_width(rule)
290
+ new_selector ||= "#{get_selector(rule).gsub(/&/, selector_for_pos(css, pos.begin))}"
291
+ indent "// [converter] extracted #{get_selector(rule)} to #{new_selector}".tr("\n", ' ').squeeze(' '), indent_width(rule)
288
292
  }
293
+ raise "extract_nested_rule: no such selector: #{selector}" if matches.empty?
289
294
  log_transform selector, new_selector
290
295
  # replace rule selector with new_selector
291
296
  matches.each do |m|
@@ -396,15 +401,11 @@ class Converter
396
401
  end
397
402
 
398
403
  def replace_image_urls(less)
399
- less.gsub(/background-image: url\("?(.*?)"?\);/) { |s| "background-image: image-url(\"#{$1}\");" }
400
- end
401
-
402
- def replace_image_paths(less)
403
- less.gsub('../img/', '')
404
+ less.gsub(/background-image: url\("?(.*?)"?\);/) { |s| replace_asset_url s, :image }
404
405
  end
405
406
 
406
407
  def replace_escaping(less)
407
- less = less.gsub(/\~"([^"]+)"/, '#{\1}') # Get rid of ~"" escape
408
+ less = less.gsub(/~"([^"]+)"/, '#{\1}') # Get rid of ~"" escape
408
409
  less.gsub!(/\$\{([^}]+)\}/, '$\1') # Get rid of @{} escape
409
410
  less.gsub!(/"([^"\n]*)(\$[\w\-]+)([^"\n]*)"/, '"\1#{\2}\3"') # interpolate variable in string, e.g. url("$file-1x") => url("#{$file-1x}")
410
411
  less.gsub(/(\W)e\(%\("?([^"]*)"?\)\)/, '\1\2') # Get rid of e(%("")) escape
@@ -420,7 +421,7 @@ class Converter
420
421
  regx = /^\.badge\s*\{[\s\/\w\(\)]+(&{1}-{1})\w.*?^}$/m
421
422
 
422
423
  tmp = ''
423
- less.scan(/^(\s*&)(-[\w\[\]]+\s*{.+})$/) do |ampersand, css|
424
+ less.scan(/^(\s*&)(-[\w\[\]]+\s*\{.+})$/) do |ampersand, css|
424
425
  tmp << ".badge#{css}\n"
425
426
  end
426
427
 
@@ -609,4 +610,4 @@ class Converter
609
610
  text
610
611
  end
611
612
  end
612
- 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"
8
- stylesheet '_variables.scss.erb', to: '_variables.scss', erb: true,
9
- bs_variables_path: File.expand_path("#{bs_stylesheets}/_variables.scss", File.dirname(__FILE__))
7
+
8
+ assets = "../../vendor/assets"
9
+
10
+ bs_stylesheets = "#{assets}/stylesheets/bootstrap"
11
+ stylesheet '_variables.scss.erb', :to => '_variables.scss', :erb => true,
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
- javascript "#{bs_javascripts}/#{file}", to: "bootstrap/#{file}"
18
+ javascript "#{bs_javascripts}/#{file}", :to => "bootstrap/#{file}"
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}"
16
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
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'sass', '~> 3.2'
4
+ gem 'bootstrap-sass', path: '../..'
@@ -0,0 +1,13 @@
1
+ require 'sass'
2
+ require 'bootstrap-sass'
3
+
4
+ css = Sass.compile(
5
+ File.read(File.expand_path('./import_all.sass', File.dirname(__FILE__))),
6
+ :syntax => 'sass'
7
+ )
8
+
9
+ if ARGV[0]
10
+ File.open(ARGV[0], 'w') { |f| f.write css }
11
+ else
12
+ puts css
13
+ end
@@ -0,0 +1,2 @@
1
+ @import 'bootstrap'
2
+ @import 'bootstrap/theme'
@@ -2,4 +2,12 @@ source "https://rubygems.org"
2
2
 
3
3
  gem 'sass', '~> 3.2.0'
4
4
 
5
- gemspec path: '../../'
5
+ platform :rbx do
6
+ gem 'rubysl', '~> 2.0'
7
+ gem 'rubysl-test-unit', '~> 2.0'
8
+ gem 'rubysl-json', '~> 2.0'
9
+ gem 'racc'
10
+ end
11
+
12
+
13
+ gemspec path: '../../'
@@ -1,6 +1,15 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem 'sass', github: 'nex3/sass'
4
- gem 'compass', '~> 0.12.2'
3
+ gem 'sass', '~> 3.3.0.rc.2'
4
+ gem 'compass', '~> 1.0.0.alpha.13'
5
+
6
+
7
+ platform :rbx do
8
+ gem 'rubysl', '~> 2.0'
9
+ gem 'rubysl-test-unit', '~> 2.0'
10
+ gem 'rubysl-json', '~> 2.0'
11
+ gem 'racc'
12
+ end
13
+
5
14
 
6
15
  gemspec path: '../../'