bootstrap-sass 3.1.1.0 → 3.1.1.1
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.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/.travis.yml +5 -2
- data/Gemfile +4 -0
- data/README.md +41 -20
- data/Rakefile +5 -2
- data/bootstrap-sass.gemspec +10 -7
- data/bower.json +98 -2
- data/lib/bootstrap-sass.rb +0 -1
- data/lib/bootstrap-sass/version.rb +2 -2
- data/package.json +25 -0
- data/tasks/bower.rake +33 -0
- data/tasks/converter.rb +3 -1
- data/tasks/converter/less_conversion.rb +54 -35
- data/tasks/converter/network.rb +10 -7
- data/templates/project/_variables.sass.erb +6 -0
- data/templates/project/manifest.rb +2 -2
- data/templates/project/styles.sass +3 -0
- data/test/dummy_node_mincer/apple-touch-icon-144-precomposed.png +0 -0
- data/test/dummy_node_mincer/application.css.ejs.scss +6 -0
- data/test/dummy_node_mincer/manifest.js +87 -0
- data/test/{dummy → dummy_rails}/README.rdoc +0 -0
- data/test/{dummy → dummy_rails}/Rakefile +0 -0
- data/test/{dummy → dummy_rails}/app/assets/images/.keep +0 -0
- data/test/{dummy → dummy_rails}/app/assets/javascripts/application.js +0 -0
- data/test/{dummy → dummy_rails}/app/assets/stylesheets/application.css.sass +0 -0
- data/test/{dummy → dummy_rails}/app/controllers/application_controller.rb +0 -0
- data/test/{dummy → dummy_rails}/app/controllers/pages_controller.rb +0 -0
- data/test/{dummy → dummy_rails}/app/helpers/application_helper.rb +0 -0
- data/test/{dummy → dummy_rails}/app/views/layouts/application.html.erb +0 -0
- data/test/{dummy → dummy_rails}/app/views/pages/root.html.slim +0 -0
- data/test/{dummy → dummy_rails}/bin/bundle +0 -0
- data/test/{dummy → dummy_rails}/bin/rails +0 -0
- data/test/{dummy → dummy_rails}/bin/rake +0 -0
- data/test/{dummy → dummy_rails}/config.ru +0 -0
- data/test/{dummy → dummy_rails}/config/application.rb +3 -6
- data/test/{dummy → dummy_rails}/config/boot.rb +0 -0
- data/test/{dummy → dummy_rails}/config/environment.rb +0 -0
- data/test/{dummy → dummy_rails}/config/environments/development.rb +0 -0
- data/test/{dummy → dummy_rails}/config/environments/production.rb +0 -0
- data/test/{dummy → dummy_rails}/config/environments/test.rb +0 -0
- data/test/{dummy → dummy_rails}/config/initializers/backtrace_silencers.rb +0 -0
- data/test/{dummy → dummy_rails}/config/initializers/filter_parameter_logging.rb +0 -0
- data/test/{dummy → dummy_rails}/config/initializers/inflections.rb +0 -0
- data/test/{dummy → dummy_rails}/config/initializers/mime_types.rb +0 -0
- data/test/{dummy → dummy_rails}/config/initializers/secret_token.rb +0 -0
- data/test/{dummy → dummy_rails}/config/initializers/session_store.rb +0 -0
- data/test/{dummy → dummy_rails}/config/initializers/wrap_parameters.rb +0 -0
- data/test/{dummy → dummy_rails}/config/locales/en.yml +0 -0
- data/test/{dummy → dummy_rails}/config/locales/es.yml +0 -0
- data/test/{dummy → dummy_rails}/config/routes.rb +0 -0
- data/test/{dummy → dummy_rails}/db/test.sqlite3 +0 -0
- data/test/{dummy → dummy_rails}/lib/assets/.keep +0 -0
- data/test/{dummy → dummy_rails}/log/.keep +0 -0
- data/test/{dummy → dummy_rails}/public/404.html +0 -0
- data/test/{dummy → dummy_rails}/public/422.html +0 -0
- data/test/{dummy → dummy_rails}/public/500.html +0 -0
- data/test/{dummy → dummy_rails}/public/favicon.ico +0 -0
- data/test/gemfiles/sass_3_2.gemfile +3 -0
- data/test/gemfiles/sass_3_3.gemfile +17 -0
- data/test/gemfiles/sass_head.gemfile +5 -2
- data/test/node_mincer_test.rb +35 -0
- data/test/node_sass_test.rb +15 -0
- data/test/test_helper.rb +2 -2
- data/vendor/assets/javascripts/bootstrap/affix.js +2 -4
- data/vendor/assets/javascripts/bootstrap/carousel.js +5 -5
- data/vendor/assets/javascripts/bootstrap/collapse.js +18 -13
- data/vendor/assets/javascripts/bootstrap/dropdown.js +8 -8
- data/vendor/assets/javascripts/bootstrap/modal.js +43 -15
- data/vendor/assets/javascripts/bootstrap/popover.js +1 -1
- data/vendor/assets/javascripts/bootstrap/scrollspy.js +5 -4
- data/vendor/assets/javascripts/bootstrap/tooltip.js +64 -41
- data/vendor/assets/javascripts/bootstrap/transition.js +4 -4
- data/vendor/assets/stylesheets/_bootstrap-mincer.scss +17 -0
- data/vendor/assets/stylesheets/bootstrap.scss +3 -2
- data/vendor/assets/stylesheets/bootstrap/_badges.scss +13 -11
- data/vendor/assets/stylesheets/bootstrap/_button-groups.scss +12 -2
- data/vendor/assets/stylesheets/bootstrap/_carousel.scss +12 -3
- data/vendor/assets/stylesheets/bootstrap/_code.scss +0 -1
- data/vendor/assets/stylesheets/bootstrap/_component-animations.scss +10 -4
- data/vendor/assets/stylesheets/bootstrap/_dropdowns.scss +1 -0
- data/vendor/assets/stylesheets/bootstrap/_forms.scss +62 -20
- data/vendor/assets/stylesheets/bootstrap/_glyphicons.scss +4 -0
- data/vendor/assets/stylesheets/bootstrap/_jumbotron.scss +4 -0
- data/vendor/assets/stylesheets/bootstrap/_labels.scss +11 -9
- data/vendor/assets/stylesheets/bootstrap/_list-group.scss +19 -0
- data/vendor/assets/stylesheets/bootstrap/_mixins.scss +35 -943
- data/vendor/assets/stylesheets/bootstrap/_modals.scss +11 -3
- data/vendor/assets/stylesheets/bootstrap/_navbar.scss +40 -2
- data/vendor/assets/stylesheets/bootstrap/_normalize.scss +21 -19
- data/vendor/assets/stylesheets/bootstrap/_panels.scss +2 -3
- data/vendor/assets/stylesheets/bootstrap/_popovers.scss +1 -1
- data/vendor/assets/stylesheets/bootstrap/_progress-bars.scss +16 -7
- data/vendor/assets/stylesheets/bootstrap/_responsive-embed.scss +34 -0
- data/vendor/assets/stylesheets/bootstrap/_responsive-utilities.scss +99 -0
- data/vendor/assets/stylesheets/bootstrap/_scaffolding.scss +16 -0
- data/vendor/assets/stylesheets/bootstrap/_tables.scss +2 -2
- data/vendor/assets/stylesheets/bootstrap/_type.scss +16 -6
- data/vendor/assets/stylesheets/bootstrap/_variables.scss +26 -10
- data/vendor/assets/stylesheets/bootstrap/bootstrap.scss +3 -2
- data/vendor/assets/stylesheets/bootstrap/mixins/_alerts.scss +14 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_background-variant.scss +11 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_border-radius.scss +18 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_buttons.scss +50 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_center-block.scss +7 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_clearfix.scss +22 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_forms.scss +84 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_gradients.scss +58 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +87 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_grid.scss +122 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_hide-text.scss +21 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_image.scss +33 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_labels.scss +12 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_list-group.scss +31 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +10 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +9 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_opacity.scss +8 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_pagination.scss +23 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_panels.scss +20 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_progress-bar.scss +8 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +8 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_resize.scss +6 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +21 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_size.scss +10 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +9 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_table-row.scss +28 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +11 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_text-overflow.scss +8 -0
- data/vendor/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +224 -0
- metadata +169 -136
- data/templates/project/_variables.scss.erb +0 -3
- data/templates/project/styles.scss +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d3f1fad60e55fbb88ef5e8a50535ccd5a05a20a4
|
4
|
+
data.tar.gz: e574370f0aa62a710bb5f382a7a7582f5bb01afd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73d37a1223e4b25fd3ecd6cab281255f9994afe8410982de4e13942f9168b967b5ec1d4f6ff8268a1bbf69194907f9f38d1e04725efbcea3a5bc8d2a83c5be03
|
7
|
+
data.tar.gz: 68ff6488249a052a596ec8cdfa0af5753ac9b2f55c16d3b3812651df5da63d2688c5674c548b5c898d6774697936680dbf2a1ef50e1b287bf99fe4eca433fe9f
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
+
- 2.1.1
|
3
4
|
- 2.0.0
|
4
|
-
- 1.9.3
|
5
5
|
- jruby
|
6
|
-
- rbx
|
6
|
+
- rbx
|
7
7
|
gemfile:
|
8
8
|
- test/gemfiles/sass_3_2.gemfile
|
9
|
+
- test/gemfiles/sass_3_3.gemfile
|
9
10
|
- test/gemfiles/sass_head.gemfile
|
11
|
+
before_install:
|
12
|
+
- "npm install node-sass mincer ejs"
|
10
13
|
matrix:
|
11
14
|
allow_failures:
|
12
15
|
- gemfile: test/gemfiles/sass_head.gemfile
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
# Bootstrap for Sass
|
2
|
-
|
3
|
-
[![Build Status](https://secure.travis-ci.org/twbs/bootstrap-sass.png?branch=master)](http://travis-ci.org/twbs/bootstrap-sass)
|
1
|
+
# Bootstrap for Sass [![Build Status](http://img.shields.io/travis/twbs/bootstrap-sass.svg)](http://travis-ci.org/twbs/bootstrap-sass)
|
4
2
|
|
5
3
|
`bootstrap-sass` is a Sass-powered version of [Bootstrap](http://github.com/twbs/bootstrap), ready to drop right into your Sass powered applications.
|
6
4
|
|
@@ -15,7 +13,7 @@ Please see the appropriate guide for your environment of choice:
|
|
15
13
|
In your Gemfile you need to add the `bootstrap-sass` gem, and ensure that the `sass-rails` gem is present - it is added to new Rails applications by default.
|
16
14
|
|
17
15
|
```ruby
|
18
|
-
gem 'sass-rails', '>= 3.2'
|
16
|
+
gem 'sass-rails', '>= 3.2'
|
19
17
|
gem 'bootstrap-sass', '~> 3.1.1'
|
20
18
|
```
|
21
19
|
|
@@ -24,8 +22,9 @@ gem 'bootstrap-sass', '~> 3.1.1'
|
|
24
22
|
|
25
23
|
#### Rails 3.2.x
|
26
24
|
|
27
|
-
For Rails 3.2.x, make sure
|
28
|
-
|
25
|
+
For Rails 3.2.x, make sure bootstrap-sass is moved out of the `:assets` group.
|
26
|
+
This is because, by default, assets group gems are not required in `production`.
|
27
|
+
However, for pre-compilation to succeed in production, `bootstrap-sass` gem must be required.
|
29
28
|
|
30
29
|
### b. Compass without Rails
|
31
30
|
|
@@ -51,10 +50,16 @@ If you are creating a new Compass project, you can generate it with bootstrap-sa
|
|
51
50
|
bundle exec compass create my-new-project -r bootstrap-sass --using bootstrap
|
52
51
|
```
|
53
52
|
|
53
|
+
or, alternatively, if you're not using a Gemfile for your dependencies:
|
54
|
+
|
55
|
+
```console
|
56
|
+
compass create my-new-project -r bootstrap-sass --using bootstrap
|
57
|
+
```
|
58
|
+
|
54
59
|
This will create a new Compass project with the following files in it:
|
55
60
|
|
56
|
-
* [_variables.scss](/templates/project/_variables.
|
57
|
-
* [styles.scss](/templates/project/styles.
|
61
|
+
* [_variables.scss](/templates/project/_variables.sass.erb) - all of bootstrap variables (override them here).
|
62
|
+
* [styles.scss](/templates/project/styles.sass) - main project SCSS file, import `variables` and `bootstrap`.
|
58
63
|
|
59
64
|
Some bootstrap-sass mixins may conflict with the Compass ones.
|
60
65
|
If this happens, change the import order so that Compass mixins are loaded later.
|
@@ -67,20 +72,33 @@ Require the gem, and load paths and Sass helpers will be configured automaticall
|
|
67
72
|
require 'bootstrap-sass'
|
68
73
|
```
|
69
74
|
|
70
|
-
### d. Bower
|
75
|
+
### d. Node.js / Bower
|
71
76
|
|
72
|
-
Using bootstrap-sass as a Bower package is still being tested
|
77
|
+
Using bootstrap-sass as a Bower package is still being tested. It is compatible with node-sass 0.8.3+. You can install it with:
|
73
78
|
|
74
79
|
```bash
|
75
|
-
bower install
|
80
|
+
bower install bootstrap-sass-official
|
76
81
|
```
|
77
82
|
|
78
|
-
`bootstrap-sass` is taken so make sure you use the
|
83
|
+
`bootstrap-sass` is taken so make sure you use the command above.
|
79
84
|
|
80
85
|
Sass, JS, and all other assets are located at [vendor/assets](/vendor/assets).
|
81
86
|
|
82
|
-
|
87
|
+
#### Mincer
|
83
88
|
|
89
|
+
If you use [mincer][mincer] with node-sass, import bootstrap into a `.css.ejs.scss` file like so:
|
90
|
+
|
91
|
+
```scss
|
92
|
+
// Import mincer asset paths helper integration
|
93
|
+
@import "bootstrap-mincer";
|
94
|
+
@import "bootstrap";
|
95
|
+
```
|
96
|
+
|
97
|
+
See also this [example manifest.js](/test/dummy_node_mincer/manifest.js) for mincer.
|
98
|
+
|
99
|
+
#### Number precision
|
100
|
+
|
101
|
+
bootstrap-sass [requires](https://github.com/twbs/bootstrap-sass/issues/409) minimum [Sass number precision][sass-precision] of 10 (default is 5).
|
84
102
|
|
85
103
|
When using ruby Sass compiler with the bower version you can enforce the limit with:
|
86
104
|
|
@@ -88,14 +106,16 @@ When using ruby Sass compiler with the bower version you can enforce the limit w
|
|
88
106
|
::Sass::Script::Number.precision = [10, ::Sass::Script::Number.precision].max
|
89
107
|
```
|
90
108
|
|
109
|
+
Precision option is now available in libsass, but it has not made into node-sass yet.
|
110
|
+
|
91
111
|
#### JS and fonts
|
92
112
|
|
93
|
-
Assets are discovered automatically on Rails, Sprockets, and
|
113
|
+
Assets are discovered automatically on Rails, Sprockets, Compass, and Node + Mincer, using native asset path helpers.
|
94
114
|
|
95
115
|
Otherwise the fonts are referenced as:
|
96
116
|
|
97
117
|
```sass
|
98
|
-
"#{$icon-font-path}
|
118
|
+
"#{$icon-font-path}#{$icon-font-name}.eot"
|
99
119
|
```
|
100
120
|
|
101
121
|
`$icon-font-path` defaults to `bootstrap/`.
|
@@ -152,7 +172,7 @@ In `application.sass`, replace `@import 'bootstrap'` with:
|
|
152
172
|
|
153
173
|
### Javascript
|
154
174
|
|
155
|
-
We have a helper that includes all Bootstrap javascripts. If you use Rails (or Sprockets separately),
|
175
|
+
We have a helper that includes all Bootstrap javascripts. If you use Rails (or Sprockets separately),
|
156
176
|
put this in your Javascript manifest (usually in `application.js`) to load the files in the [correct order](/vendor/assets/javascripts/bootstrap.js):
|
157
177
|
|
158
178
|
```js
|
@@ -183,12 +203,12 @@ Keeping bootstrap-sass in sync with upstream changes from Bootstrap used to be a
|
|
183
203
|
Upstream changes to the Bootstrap project can now be pulled in using the `convert` rake task.
|
184
204
|
|
185
205
|
Here's an example run that would pull down the master branch from the main [twbs/bootstrap](https://github.com/twbs/bootstrap) repo:
|
186
|
-
|
206
|
+
|
187
207
|
rake convert
|
188
|
-
|
189
|
-
This will convert the latest LESS to
|
208
|
+
|
209
|
+
This will convert the latest LESS to Sass and update to the latest JS.
|
190
210
|
To convert a specific branch or version, pass the branch name or the commit hash as the first task argument:
|
191
|
-
|
211
|
+
|
192
212
|
rake convert[e8a1df5f060bf7e6631554648e0abde150aedbe4]
|
193
213
|
|
194
214
|
The latest converter script is located [here][converter] and does the following:
|
@@ -226,3 +246,4 @@ Michael Hartl's [Rails Tutorial](http://railstutorial.org/), [gitlabhq](http://g
|
|
226
246
|
[antirequire]: https://github.com/twbs/bootstrap-sass/issues/79#issuecomment-4428595
|
227
247
|
[jsdocs]: http://getbootstrap.com/javascript/#transitions
|
228
248
|
[sass-precision]: http://sass-lang.com/documentation/Sass/Script/Number.html#precision-class_method
|
249
|
+
[mincer]: https://github.com/nodeca/mincer
|
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
load './tasks/bower.rake'
|
2
|
+
|
1
3
|
require 'rake/testtask'
|
2
4
|
Rake::TestTask.new do |t|
|
3
5
|
t.libs << "test"
|
@@ -37,13 +39,14 @@ task :compile, :css_path do |t, args|
|
|
37
39
|
require 'term/ansicolor'
|
38
40
|
|
39
41
|
path = 'vendor/assets/stylesheets'
|
42
|
+
css_path = args.with_defaults(css_path: 'tmp')[:css_path]
|
40
43
|
puts Term::ANSIColor.bold "Compiling SCSS in #{path}"
|
44
|
+
Dir.mkdir(css_path) unless File.directory?(css_path)
|
41
45
|
%w(bootstrap bootstrap/_theme).each do |file|
|
42
|
-
save_path = "#{
|
46
|
+
save_path = "#{css_path}/#{file.sub(/(^|\/)?_+/, '\1').sub('/', '-')}.css"
|
43
47
|
puts Term::ANSIColor.cyan(" #{save_path}") + '...'
|
44
48
|
engine = Sass::Engine.for_file("#{path}/#{file}.scss", syntax: :scss, load_paths: [path])
|
45
49
|
css = engine.render
|
46
|
-
File.mkdir('tmp') unless File.directory?('tmp')
|
47
50
|
File.open(save_path, 'w') { |f| f.write css }
|
48
51
|
end
|
49
52
|
end
|
data/bootstrap-sass.gemspec
CHANGED
@@ -11,17 +11,20 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.homepage = "https://github.com/twbs/bootstrap-sass"
|
12
12
|
s.license = 'MIT'
|
13
13
|
|
14
|
-
s.add_development_dependency 'compass'
|
15
|
-
s.add_development_dependency 'term-ansicolor'
|
16
|
-
s.add_development_dependency 'sass-rails', '>= 3.2'
|
17
14
|
s.add_runtime_dependency 'sass', '~> 3.2'
|
18
15
|
|
19
|
-
|
20
|
-
s.add_development_dependency '
|
21
|
-
s.add_development_dependency '
|
22
|
-
s.add_development_dependency 'jquery-rails'
|
16
|
+
# Dummy Rails app dependencies
|
17
|
+
s.add_development_dependency 'sprockets-rails', '>= 2.0.1'
|
18
|
+
s.add_development_dependency 'jquery-rails', '>= 3.1.0'
|
23
19
|
s.add_development_dependency 'slim-rails'
|
24
20
|
s.add_development_dependency 'uglifier'
|
21
|
+
# Compass dummy app
|
22
|
+
s.add_development_dependency 'compass'
|
23
|
+
# Integration testing
|
24
|
+
s.add_development_dependency 'capybara'
|
25
|
+
s.add_development_dependency 'poltergeist'
|
26
|
+
# Converter
|
27
|
+
s.add_development_dependency 'term-ansicolor'
|
25
28
|
|
26
29
|
s.files = `git ls-files`.split("\n")
|
27
30
|
s.test_files = `git ls-files -- test/*`.split("\n")
|
data/bower.json
CHANGED
@@ -9,7 +9,96 @@
|
|
9
9
|
"Gleb Mazovetskiy"
|
10
10
|
],
|
11
11
|
"description": "bootstrap-sass is a Sass-powered version of Bootstrap, ready to drop right into your Sass powered applications.",
|
12
|
-
"main": [
|
12
|
+
"main": [
|
13
|
+
"vendor/assets/stylesheets/_bootstrap-mincer.scss",
|
14
|
+
"vendor/assets/stylesheets/bootstrap/_alerts.scss",
|
15
|
+
"vendor/assets/stylesheets/bootstrap/_badges.scss",
|
16
|
+
"vendor/assets/stylesheets/bootstrap/_breadcrumbs.scss",
|
17
|
+
"vendor/assets/stylesheets/bootstrap/_button-groups.scss",
|
18
|
+
"vendor/assets/stylesheets/bootstrap/_buttons.scss",
|
19
|
+
"vendor/assets/stylesheets/bootstrap/_carousel.scss",
|
20
|
+
"vendor/assets/stylesheets/bootstrap/_close.scss",
|
21
|
+
"vendor/assets/stylesheets/bootstrap/_code.scss",
|
22
|
+
"vendor/assets/stylesheets/bootstrap/_component-animations.scss",
|
23
|
+
"vendor/assets/stylesheets/bootstrap/_dropdowns.scss",
|
24
|
+
"vendor/assets/stylesheets/bootstrap/_forms.scss",
|
25
|
+
"vendor/assets/stylesheets/bootstrap/_glyphicons.scss",
|
26
|
+
"vendor/assets/stylesheets/bootstrap/_grid.scss",
|
27
|
+
"vendor/assets/stylesheets/bootstrap/_input-groups.scss",
|
28
|
+
"vendor/assets/stylesheets/bootstrap/_jumbotron.scss",
|
29
|
+
"vendor/assets/stylesheets/bootstrap/_labels.scss",
|
30
|
+
"vendor/assets/stylesheets/bootstrap/_list-group.scss",
|
31
|
+
"vendor/assets/stylesheets/bootstrap/_media.scss",
|
32
|
+
"vendor/assets/stylesheets/bootstrap/_mixins.scss",
|
33
|
+
"vendor/assets/stylesheets/bootstrap/_modals.scss",
|
34
|
+
"vendor/assets/stylesheets/bootstrap/_navbar.scss",
|
35
|
+
"vendor/assets/stylesheets/bootstrap/_navs.scss",
|
36
|
+
"vendor/assets/stylesheets/bootstrap/_normalize.scss",
|
37
|
+
"vendor/assets/stylesheets/bootstrap/_pager.scss",
|
38
|
+
"vendor/assets/stylesheets/bootstrap/_pagination.scss",
|
39
|
+
"vendor/assets/stylesheets/bootstrap/_panels.scss",
|
40
|
+
"vendor/assets/stylesheets/bootstrap/_popovers.scss",
|
41
|
+
"vendor/assets/stylesheets/bootstrap/_print.scss",
|
42
|
+
"vendor/assets/stylesheets/bootstrap/_progress-bars.scss",
|
43
|
+
"vendor/assets/stylesheets/bootstrap/_responsive-embed.scss",
|
44
|
+
"vendor/assets/stylesheets/bootstrap/_responsive-utilities.scss",
|
45
|
+
"vendor/assets/stylesheets/bootstrap/_scaffolding.scss",
|
46
|
+
"vendor/assets/stylesheets/bootstrap/_tables.scss",
|
47
|
+
"vendor/assets/stylesheets/bootstrap/_theme.scss",
|
48
|
+
"vendor/assets/stylesheets/bootstrap/_thumbnails.scss",
|
49
|
+
"vendor/assets/stylesheets/bootstrap/_tooltip.scss",
|
50
|
+
"vendor/assets/stylesheets/bootstrap/_type.scss",
|
51
|
+
"vendor/assets/stylesheets/bootstrap/_utilities.scss",
|
52
|
+
"vendor/assets/stylesheets/bootstrap/_variables.scss",
|
53
|
+
"vendor/assets/stylesheets/bootstrap/_wells.scss",
|
54
|
+
"vendor/assets/stylesheets/bootstrap/bootstrap.scss",
|
55
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_alerts.scss",
|
56
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_background-variant.scss",
|
57
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_border-radius.scss",
|
58
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_buttons.scss",
|
59
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_center-block.scss",
|
60
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_clearfix.scss",
|
61
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_forms.scss",
|
62
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_gradients.scss",
|
63
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_grid-framework.scss",
|
64
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_grid.scss",
|
65
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_hide-text.scss",
|
66
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_image.scss",
|
67
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_labels.scss",
|
68
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_list-group.scss",
|
69
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_nav-divider.scss",
|
70
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss",
|
71
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_opacity.scss",
|
72
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_pagination.scss",
|
73
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_panels.scss",
|
74
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_progress-bar.scss",
|
75
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_reset-filter.scss",
|
76
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_resize.scss",
|
77
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss",
|
78
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_size.scss",
|
79
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_tab-focus.scss",
|
80
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_table-row.scss",
|
81
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss",
|
82
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_text-overflow.scss",
|
83
|
+
"vendor/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss",
|
84
|
+
"vendor/assets/stylesheets/bootstrap.scss",
|
85
|
+
"vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.eot",
|
86
|
+
"vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.svg",
|
87
|
+
"vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf",
|
88
|
+
"vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.woff",
|
89
|
+
"vendor/assets/javascripts/bootstrap/affix.js",
|
90
|
+
"vendor/assets/javascripts/bootstrap/alert.js",
|
91
|
+
"vendor/assets/javascripts/bootstrap/button.js",
|
92
|
+
"vendor/assets/javascripts/bootstrap/carousel.js",
|
93
|
+
"vendor/assets/javascripts/bootstrap/collapse.js",
|
94
|
+
"vendor/assets/javascripts/bootstrap/dropdown.js",
|
95
|
+
"vendor/assets/javascripts/bootstrap/tab.js",
|
96
|
+
"vendor/assets/javascripts/bootstrap/transition.js",
|
97
|
+
"vendor/assets/javascripts/bootstrap/scrollspy.js",
|
98
|
+
"vendor/assets/javascripts/bootstrap/modal.js",
|
99
|
+
"vendor/assets/javascripts/bootstrap/tooltip.js",
|
100
|
+
"vendor/assets/javascripts/bootstrap/popover.js"
|
101
|
+
],
|
13
102
|
"keywords": [
|
14
103
|
"twbs",
|
15
104
|
"bootstrap",
|
@@ -17,6 +106,13 @@
|
|
17
106
|
],
|
18
107
|
"license": "MIT",
|
19
108
|
"ignore": [
|
20
|
-
"**/.*",
|
109
|
+
"**/.*",
|
110
|
+
"lib",
|
111
|
+
"tasks",
|
112
|
+
"templates",
|
113
|
+
"test",
|
114
|
+
"*.gemspec",
|
115
|
+
"Rakefile",
|
116
|
+
"Gemfile"
|
21
117
|
]
|
22
118
|
}
|
data/lib/bootstrap-sass.rb
CHANGED
data/package.json
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
{
|
2
|
+
"name": "bootstrap-sass",
|
3
|
+
"version": "3.1.1",
|
4
|
+
"description": "bootstrap-sass is a Sass-powered version of Bootstrap, ready to drop right into your Sass powered applications.",
|
5
|
+
"main": "index.js",
|
6
|
+
"repository": {
|
7
|
+
"type": "git",
|
8
|
+
"url": "git://github.com/twbs/bootstrap-sass"
|
9
|
+
},
|
10
|
+
"keywords": [
|
11
|
+
"bootstrap",
|
12
|
+
"sass",
|
13
|
+
"css"
|
14
|
+
],
|
15
|
+
"contributors": [
|
16
|
+
"Thomas McDonald",
|
17
|
+
"Tristan Harward",
|
18
|
+
"Peter Gumeson",
|
19
|
+
"Gleb Mazovetskiy"
|
20
|
+
],
|
21
|
+
"license": "MIT",
|
22
|
+
"bugs": {
|
23
|
+
"url": "https://github.com/twbs/bootstrap-sass/issues"
|
24
|
+
}
|
25
|
+
}
|
data/tasks/bower.rake
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'find'
|
2
|
+
require 'bootstrap-sass'
|
3
|
+
require 'json'
|
4
|
+
require 'pathname'
|
5
|
+
|
6
|
+
namespace :bower do
|
7
|
+
|
8
|
+
find_files = ->(path) {
|
9
|
+
Find.find(Pathname.new(path).relative_path_from(Pathname.new Dir.pwd).to_s).map do |path|
|
10
|
+
path if File.file?(path)
|
11
|
+
end.compact
|
12
|
+
}
|
13
|
+
|
14
|
+
desc 'update main and version in bower.json'
|
15
|
+
task :spec do
|
16
|
+
Dir.chdir Bootstrap.gem_path do
|
17
|
+
spec = JSON.parse(File.read 'bower.json')
|
18
|
+
js_paths = File.read(File.join Bootstrap.javascripts_path, 'bootstrap.js').lines.map do |line|
|
19
|
+
line.strip if line.sub!(%r(//\s*=\s*require\s*(.*)\s*), 'vendor/assets/javascripts/\1.js')
|
20
|
+
end.compact
|
21
|
+
|
22
|
+
spec['main'] = find_files.(Bootstrap.stylesheets_path) +
|
23
|
+
find_files.(Bootstrap.fonts_path) +
|
24
|
+
js_paths
|
25
|
+
|
26
|
+
spec['version'] = Bootstrap::VERSION[0..-3]
|
27
|
+
|
28
|
+
File.open('bower.json', 'w') do |f|
|
29
|
+
f.puts JSON.pretty_generate(spec)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/tasks/converter.rb
CHANGED
@@ -59,13 +59,15 @@ class Converter
|
|
59
59
|
|
60
60
|
@save_to.each { |_, v| FileUtils.mkdir_p(v) }
|
61
61
|
|
62
|
+
process_font_assets
|
62
63
|
process_stylesheet_assets
|
63
64
|
process_javascript_assets
|
64
|
-
process_font_assets
|
65
65
|
store_version
|
66
66
|
end
|
67
67
|
|
68
68
|
def save_file(path, content, mode='w')
|
69
|
+
dir = File.dirname(path)
|
70
|
+
FileUtils.mkdir_p(dir) unless File.directory?(dir)
|
69
71
|
File.open(path, mode) { |file| file.write(content) }
|
70
72
|
end
|
71
73
|
|
@@ -26,12 +26,12 @@ class Converter
|
|
26
26
|
SCSS_MIXIN_DEF_ARGS_RE = /[\w\-,\s$:#%()]*/
|
27
27
|
LESS_MIXIN_DEF_ARGS_RE = /[\w\-,;.\s@:#%()]*/
|
28
28
|
|
29
|
-
# These mixins
|
29
|
+
# These mixins will get vararg definitions in SCSS (not supported by LESS):
|
30
30
|
NESTED_MIXINS = {'#gradient' => 'gradient'}
|
31
31
|
|
32
32
|
# These mixins will get vararg definitions in SCSS (not supported by LESS):
|
33
33
|
VARARG_MIXINS = %w(
|
34
|
-
transition transition-duration transition-property transition-transform box-shadow
|
34
|
+
scale transition transition-duration transition-property transition-transform box-shadow
|
35
35
|
)
|
36
36
|
|
37
37
|
# Convert a snippet of bootstrap LESS to Scss
|
@@ -45,7 +45,7 @@ class Converter
|
|
45
45
|
def load_shared
|
46
46
|
@shared_mixins ||= begin
|
47
47
|
log_status ' Reading shared mixins from mixins.less'
|
48
|
-
read_mixins read_files('less',
|
48
|
+
read_mixins read_files('less', bootstrap_less_files.grep(/mixins\//)).values.join("\n"), nested: NESTED_MIXINS
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -59,27 +59,31 @@ class Converter
|
|
59
59
|
log_processing name
|
60
60
|
# apply common conversions
|
61
61
|
file = convert_less(file)
|
62
|
+
if name.start_with?('mixins/')
|
63
|
+
file = varargify_mixin_definitions(file, *VARARG_MIXINS)
|
64
|
+
%w(responsive-(in)?visibility input-size text-emphasis-variant bg-variant).each do |mixin|
|
65
|
+
file = parameterize_mixin_parent_selector file, mixin if file =~ /#{mixin}/
|
66
|
+
end
|
67
|
+
NESTED_MIXINS.each do |sel, name|
|
68
|
+
file = flatten_mixins(file, sel, name) if /#{Regexp.escape(sel)}/ =~ file
|
69
|
+
end
|
70
|
+
file = replace_all file, /(?<=[.-])\$state/, '#{$state}' if file =~ /[.-]\$state/
|
71
|
+
end
|
62
72
|
case name
|
63
|
-
when 'mixins.less'
|
64
|
-
|
65
|
-
|
66
|
-
end
|
67
|
-
file = varargify_mixin_definitions(file, *VARARG_MIXINS)
|
68
|
-
file = deinterpolate_vararg_mixins(file)
|
69
|
-
%w(responsive-(in)?visibility input-size text-emphasis-variant bg-variant).each do |mixin|
|
70
|
-
file = parameterize_mixin_parent_selector file, mixin
|
71
|
-
end
|
72
|
-
file = replace_ms_filters(file)
|
73
|
-
file = replace_all file, /(?<=[.-])\$state/, '#{$state}'
|
73
|
+
when 'mixins/buttons.less'
|
74
|
+
file = replace_all file, /(\.dropdown-toggle)&/, '&\1'
|
75
|
+
when 'mixins/list-group.less'
|
74
76
|
file = replace_rules(file, ' .list-group-item-') { |rule| extract_nested_rule rule, 'a&' }
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
#
|
80
|
-
file =
|
81
|
-
|
77
|
+
when 'mixins/gradients.less'
|
78
|
+
file = replace_ms_filters(file)
|
79
|
+
file = deinterpolate_vararg_mixins(file)
|
80
|
+
when 'mixins/vendor-prefixes.less'
|
81
|
+
# remove second scale mixins as this is handled via vararg in the first one
|
82
|
+
file = replace_rules(file, '.scale(@ratioX; @ratioY)') {}
|
83
|
+
when 'mixins/grid-framework.less'
|
82
84
|
file = convert_grid_mixins file
|
85
|
+
when 'component-animations.less'
|
86
|
+
file = extract_nested_rule file, "#{SELECTOR_RE}&\\.in"
|
83
87
|
when 'responsive-utilities.less'
|
84
88
|
file = apply_mixin_parent_selector file, '\.(?:visible|hidden)'
|
85
89
|
when 'variables.less'
|
@@ -104,9 +108,10 @@ class Converter
|
|
104
108
|
file = replace_all file, /(\s*)\.navbar-(right|left)\s*\{\s*@extend\s*\.pull-(right|left);\s*/, "\\1.navbar-\\2 {\\1 float: \\2 !important;\\1"
|
105
109
|
when 'tables.less'
|
106
110
|
file = replace_all file, /(@include\s*table-row-variant\()(\w+)/, "\\1'\\2'"
|
107
|
-
when 'thumbnails.less'
|
111
|
+
when 'thumbnails.less', 'labels.less', 'badges.less'
|
108
112
|
file = extract_nested_rule file, 'a&'
|
109
113
|
when 'glyphicons.less'
|
114
|
+
file = bootstrap_font_files.map { |p| %Q(//= depend_on_asset "bootstrap/#{File.basename(p)}") } * "\n" + "\n" + file
|
110
115
|
file = replace_all file, /\#\{(url\(.*?\))}/, '\1'
|
111
116
|
file = replace_rules(file, '@font-face') { |rule|
|
112
117
|
rule = replace_all rule, /(\$icon-font(?:-\w+)+)/, '#{\1}'
|
@@ -119,7 +124,10 @@ class Converter
|
|
119
124
|
end
|
120
125
|
|
121
126
|
name = name.sub(/\.less$/, '.scss')
|
122
|
-
path =
|
127
|
+
path = File.join save_to, name
|
128
|
+
unless name == 'bootstrap.scss'
|
129
|
+
path = File.join File.dirname(path), '_' + File.basename(path)
|
130
|
+
end
|
123
131
|
save_file(path, file)
|
124
132
|
log_processed File.basename(path)
|
125
133
|
end
|
@@ -130,7 +138,9 @@ class Converter
|
|
130
138
|
end
|
131
139
|
|
132
140
|
def bootstrap_less_files
|
133
|
-
@bootstrap_less_files ||= get_paths_by_type('less', /\.less$/)
|
141
|
+
@bootstrap_less_files ||= get_paths_by_type('less', /\.less$/) +
|
142
|
+
get_paths_by_type('mixins', /\.less$/,
|
143
|
+
get_tree(get_tree_sha('mixins', get_tree(get_tree_sha('less'))))).map { |p| "mixins/#{p}" }
|
134
144
|
end
|
135
145
|
|
136
146
|
# apply general less to scss conversion
|
@@ -138,15 +148,16 @@ class Converter
|
|
138
148
|
# get local mixin names before converting the definitions
|
139
149
|
mixins = @shared_mixins + read_mixins(file)
|
140
150
|
file = replace_vars(file)
|
141
|
-
file = replace_file_imports(file)
|
142
151
|
file = replace_mixin_definitions(file)
|
143
152
|
file = replace_mixins(file, mixins)
|
144
153
|
file = replace_spin(file)
|
154
|
+
file = replace_fadein(file)
|
145
155
|
file = replace_image_urls(file)
|
146
156
|
file = replace_escaping(file)
|
147
157
|
file = convert_less_ampersand(file)
|
148
158
|
file = deinterpolate_vararg_mixins(file)
|
149
159
|
file = replace_calculation_semantics(file)
|
160
|
+
file = replace_file_imports(file)
|
150
161
|
file
|
151
162
|
end
|
152
163
|
|
@@ -183,7 +194,7 @@ SASS
|
|
183
194
|
mixin_all_grid_columns css, selector: '.col-#{$class}-#{$i}', to: '$grid-columns'
|
184
195
|
end
|
185
196
|
file = replace_rules file, /@mixin calc-grid-column/ do |css|
|
186
|
-
css = indent css.gsub(/.*when (.*?) {/, '@if \1 {').gsub(/(
|
197
|
+
css = indent css.gsub(/.*when (.*?) {/, '@if \1 {').gsub(/(\$[\w-]+)\s+=\s+(\w+)/, '\1 == \2').gsub(/(?<=-)(\$[a-z]+)/, '#{\1}')
|
187
198
|
if css =~ /== width/
|
188
199
|
css = "@mixin calc-grid-column($index, $class, $type) {\n#{css}"
|
189
200
|
elsif css =~ /== offset/
|
@@ -279,7 +290,7 @@ SASS
|
|
279
290
|
|
280
291
|
# @import "file.less" to "#{target_path}file;"
|
281
292
|
def replace_file_imports(less, target_path = '')
|
282
|
-
less.gsub %r([@\$]import ["|']([\w
|
293
|
+
less.gsub %r([@\$]import ["|']([\w\-/]+).less["|'];),
|
283
294
|
%Q(@import "#{target_path}\\1";)
|
284
295
|
end
|
285
296
|
|
@@ -320,15 +331,15 @@ SASS
|
|
320
331
|
matches = []
|
321
332
|
# first find the rules, and remove them
|
322
333
|
file = replace_rules(file, "\s*#{selector}", comments: true) { |rule, pos, css|
|
323
|
-
|
324
|
-
|
325
|
-
indent "// [converter] extracted #{get_selector(rule)} to #{
|
334
|
+
new_sel = new_selector || "#{get_selector(rule).gsub(/&/, selector_for_pos(css, pos.begin))}"
|
335
|
+
matches << [rule, pos, new_sel]
|
336
|
+
indent "// [converter] extracted #{get_selector(rule)} to #{new_sel}".tr("\n", ' ').squeeze(' '), indent_width(rule)
|
326
337
|
}
|
327
338
|
raise "extract_nested_rule: no such selector: #{selector}" if matches.empty?
|
328
|
-
log_transform selector, new_selector
|
329
339
|
# replace rule selector with new_selector
|
330
340
|
matches.each do |m|
|
331
|
-
m[0].sub! /(#{COMMENT_RE}*)^(\s*).*?(\s*){/m, "\\1\\2#{
|
341
|
+
m[0].sub! /(#{COMMENT_RE}*)^(\s*).*?(\s*){/m, "\\1\\2#{m[2]}\\3{"
|
342
|
+
log_transform selector, m[2]
|
332
343
|
end
|
333
344
|
replace_substrings_at file,
|
334
345
|
matches.map { |_, pos| close_brace_pos(file, pos.begin, 1) + 1 },
|
@@ -440,6 +451,10 @@ SASS
|
|
440
451
|
less.gsub(/(?![\-$@.])spin(?!-)/, 'adjust-hue')
|
441
452
|
end
|
442
453
|
|
454
|
+
def replace_fadein(less)
|
455
|
+
less.gsub(/(?![\-$@.])fadein\((.*?),\s*(.*?)%\)/) { "rgba(#{$1}, #{$2.to_i / 100.0})" }
|
456
|
+
end
|
457
|
+
|
443
458
|
def replace_image_urls(less)
|
444
459
|
less.gsub(/background-image: url\("?(.*?)"?\);/) { |s| replace_asset_url s, :image }
|
445
460
|
end
|
@@ -488,11 +503,14 @@ SASS
|
|
488
503
|
# to:
|
489
504
|
# @mixin transition($transition...) {
|
490
505
|
def varargify_mixin_definitions(scss, *mixins)
|
491
|
-
log_transform *mixins
|
492
506
|
scss = scss.dup
|
507
|
+
replaced = []
|
493
508
|
mixins.each do |mixin|
|
494
|
-
scss.gsub! /(@mixin\s*#{Regexp.quote(mixin)})\((#{SCSS_MIXIN_DEF_ARGS_RE})\)/, '\1(\2...)'
|
509
|
+
if scss.gsub! /(@mixin\s*#{Regexp.quote(mixin)})\((#{SCSS_MIXIN_DEF_ARGS_RE})\)/, '\1(\2...)'
|
510
|
+
replaced << mixin
|
511
|
+
end
|
495
512
|
end
|
513
|
+
log_transform *replaced unless replaced.empty?
|
496
514
|
scss
|
497
515
|
end
|
498
516
|
|
@@ -511,7 +529,8 @@ SASS
|
|
511
529
|
|
512
530
|
# get full selector for rule_block
|
513
531
|
def get_selector(rule_block)
|
514
|
-
/^\s*(#{SELECTOR_RE}?)\s*\{/.match(rule_block) && $1 && $1.strip
|
532
|
+
sel = /^\s*(#{SELECTOR_RE}?)\s*\{/.match(rule_block) && $1 && $1.strip
|
533
|
+
sel.sub /\s*\{\n\s.*/m, ''
|
515
534
|
end
|
516
535
|
|
517
536
|
# replace CSS rule blocks matching rule_prefix with yield(rule_block, rule_pos)
|