mirror of
https://github.com/twbs/bootstrap.git
synced 2025-02-22 15:39:59 +00:00
Merge branch 'v4-dev' into v4-media-breakpoint-between
This commit is contained in:
commit
e481c8fff2
@ -7,7 +7,6 @@ node_js:
|
||||
before_install:
|
||||
- travis_retry pip install -r test-infra/requirements.txt --user
|
||||
- rvm install 2.0.0 && rvm use 2.0.0
|
||||
- export GEMDIR=$(rvm gemdir)
|
||||
- "export TRAVIS_COMMIT_MSG=\"$(git log --format=%B --no-merges -n 1)\""
|
||||
- echo "$TRAVIS_COMMIT_MSG" | grep '\[skip validator\]'; export TWBS_DO_VALIDATOR=$?; true
|
||||
- echo "$TRAVIS_COMMIT_MSG" | grep '\[skip sauce\]'; export TWBS_DO_SAUCE=$?; true
|
||||
@ -23,8 +22,6 @@ cache:
|
||||
- vendor/bundle
|
||||
env:
|
||||
global:
|
||||
- JEKYLL_VERSION="2.5.3"
|
||||
- ROUGE_VERSION="1.8.0"
|
||||
- SAUCE_USERNAME="bootstrap"
|
||||
- secure: "pJkBwnuae9dKU5tEcCqccfS1QQw7/meEcfz63fM7ba7QJNjoA6BaXj08L5Z3Vb5vBmVPwBawxo5Hp0jC0r/Z/O0hGnAmz/Cz09L+cy7dSAZ9x4hvZePSja/UAusaB5ogMoO8l2b773MzgQeSmrLbExr9BWLeqEfjC2hFgdgHLaQ="
|
||||
- secure: "gqjqISbxBJK6byFbsmr1AyP1qoWH+rap06A2gI7v72+Tn2PU2nYkIMUkCvhZw6K889jv+LhQ/ybcBxDOXHpNCExCnSgB4dcnmYp+9oeNZb37jSP0rQ+Ib4OTLjzc3/FawE/fUq5kukZTC7porzc/k0qJNLAZRx3YLALmK1GIdUY="
|
||||
|
@ -35,7 +35,7 @@ Our bug tracker utilizes several labels to help organize and identify issues. He
|
||||
|
||||
- `browser bug` - Issues that are reported to us, but actually are the result of a browser-specific bug. These are diagnosed with reduced test cases and result in an issue opened on that browser's own bug tracker.
|
||||
- `confirmed` - Issues that have been confirmed with a reduced test case and identify a bug in Bootstrap.
|
||||
- `css` - Issues stemming from our compiled CSS or source Less files.
|
||||
- `css` - Issues stemming from our compiled CSS or source Sass files.
|
||||
- `docs` - Issues for improving or updating our documentation.
|
||||
- `examples` - Issues involving the example templates included in our docs.
|
||||
- `feature` - Issues asking for a new feature to be added, or an existing one to be extended or modified. New features require a minor version bump (e.g., `v3.0.0` to `v3.1.0`).
|
||||
@ -136,7 +136,7 @@ project (indentation, accurate comments, etc.) and any other requirements
|
||||
|
||||
**Do not edit `bootstrap.css`, `bootstrap-theme.css`, or `bootstrap.js`
|
||||
directly!** Those files are automatically generated. You should edit the
|
||||
source files in [`/bootstrap/less/`](https://github.com/twbs/bootstrap/tree/master/less)
|
||||
source files in [`/bootstrap/scss/`](https://github.com/twbs/bootstrap/tree/master/scss)
|
||||
and/or [`/bootstrap/js/`](https://github.com/twbs/bootstrap/tree/master/js) instead.
|
||||
|
||||
Similarly, when contributing to Bootstrap's documentation, you should edit the
|
||||
|
8
Gemfile
8
Gemfile
@ -4,9 +4,9 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
group :development, :test do
|
||||
gem 'jekyll', '~> 2.5.2'
|
||||
gem 'jekyll', '~> 2.5.3'
|
||||
gem 'jekyll-redirect-from', '~> 0.8.0'
|
||||
gem 'rouge', '~> 1.7.4'
|
||||
gem 'sass', '~> 3.4.9'
|
||||
gem 'scss-lint', '~> 0.31'
|
||||
gem 'rouge', '~> 1.9.1'
|
||||
gem 'sass', '~> 3.4.18'
|
||||
gem 'scss_lint', '~> 0.41'
|
||||
end
|
||||
|
54
Gemfile.lock
54
Gemfile.lock
@ -4,18 +4,18 @@ GEM
|
||||
blankslate (2.1.2.4)
|
||||
celluloid (0.16.0)
|
||||
timers (~> 4.0.0)
|
||||
classifier-reborn (2.0.2)
|
||||
classifier-reborn (2.0.3)
|
||||
fast-stemmer (~> 1.0)
|
||||
coffee-script (2.3.0)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.8.0)
|
||||
coffee-script-source (1.9.1.1)
|
||||
colorator (0.1)
|
||||
execjs (2.2.2)
|
||||
execjs (2.6.0)
|
||||
fast-stemmer (1.0.2)
|
||||
ffi (1.9.6)
|
||||
ffi (1.9.10)
|
||||
hitimes (1.2.2)
|
||||
jekyll (2.5.2)
|
||||
jekyll (2.5.3)
|
||||
classifier-reborn (~> 2.0)
|
||||
colorator (~> 0.1)
|
||||
jekyll-coffeescript (~> 1.0)
|
||||
@ -32,53 +32,53 @@ GEM
|
||||
toml (~> 0.1.0)
|
||||
jekyll-coffeescript (1.0.1)
|
||||
coffee-script (~> 2.2)
|
||||
jekyll-gist (1.1.0)
|
||||
jekyll-gist (1.3.3)
|
||||
jekyll-paginate (1.1.0)
|
||||
jekyll-redirect-from (0.8.0)
|
||||
jekyll (>= 2.0)
|
||||
jekyll-sass-converter (1.3.0)
|
||||
sass (~> 3.2)
|
||||
jekyll-watch (1.2.0)
|
||||
jekyll-watch (1.2.1)
|
||||
listen (~> 2.7)
|
||||
kramdown (1.5.0)
|
||||
liquid (2.6.1)
|
||||
listen (2.8.4)
|
||||
celluloid (>= 0.15.2)
|
||||
kramdown (1.8.0)
|
||||
liquid (2.6.3)
|
||||
listen (2.10.1)
|
||||
celluloid (~> 0.16.0)
|
||||
rb-fsevent (>= 0.9.3)
|
||||
rb-inotify (>= 0.9)
|
||||
mercenary (0.3.5)
|
||||
parslet (1.5.0)
|
||||
blankslate (~> 2.0)
|
||||
posix-spawn (0.3.9)
|
||||
pygments.rb (0.6.0)
|
||||
posix-spawn (0.3.11)
|
||||
pygments.rb (0.6.3)
|
||||
posix-spawn (~> 0.3.6)
|
||||
yajl-ruby (~> 1.1.0)
|
||||
yajl-ruby (~> 1.2.0)
|
||||
rainbow (2.0.0)
|
||||
rb-fsevent (0.9.4)
|
||||
rb-fsevent (0.9.5)
|
||||
rb-inotify (0.9.5)
|
||||
ffi (>= 0.5.0)
|
||||
redcarpet (3.2.2)
|
||||
rouge (1.7.4)
|
||||
redcarpet (3.3.2)
|
||||
rouge (1.9.1)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.4.9)
|
||||
scss-lint (0.31.0)
|
||||
sass (3.4.18)
|
||||
scss_lint (0.41.0)
|
||||
rainbow (~> 2.0)
|
||||
sass (~> 3.4.1)
|
||||
sass (~> 3.4.15)
|
||||
timers (4.0.1)
|
||||
hitimes
|
||||
toml (0.1.2)
|
||||
parslet (~> 1.5.0)
|
||||
yajl-ruby (1.1.0)
|
||||
yajl-ruby (1.2.1)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
jekyll (~> 2.5.2)
|
||||
jekyll (~> 2.5.3)
|
||||
jekyll-redirect-from (~> 0.8.0)
|
||||
rouge (~> 1.7.4)
|
||||
sass (~> 3.4.9)
|
||||
scss-lint (~> 0.31)
|
||||
rouge (~> 1.9.1)
|
||||
sass (~> 3.4.18)
|
||||
scss_lint (~> 0.41)
|
||||
|
||||
BUNDLED WITH
|
||||
1.10.5
|
||||
1.10.6
|
||||
|
18
Gruntfile.js
18
Gruntfile.js
@ -190,10 +190,6 @@ module.exports = function (grunt) {
|
||||
src: '<%= concat.bootstrap.dest %>',
|
||||
dest: 'dist/js/<%= pkg.name %>.min.js'
|
||||
},
|
||||
customize: {
|
||||
src: configBridge.paths.customizerJs,
|
||||
dest: 'docs/assets/js/customize.min.js'
|
||||
},
|
||||
docsJs: {
|
||||
src: configBridge.paths.docsJs,
|
||||
dest: 'docs/assets/js/docs.min.js'
|
||||
@ -403,14 +399,6 @@ module.exports = function (grunt) {
|
||||
exec: {
|
||||
npmUpdate: {
|
||||
command: 'npm update'
|
||||
},
|
||||
bundleUpdate: {
|
||||
command: function () {
|
||||
// Update dev gems and all the test gemsets
|
||||
return 'bundle update && ' + glob.sync('test-infra/gemfiles/*.gemfile').map(function (gemfile) {
|
||||
return 'BUNDLE_GEMFILE=' + gemfile + ' bundle update';
|
||||
}).join(' && ');
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@ -467,6 +455,7 @@ module.exports = function (grunt) {
|
||||
runSubset('sauce-js-unit') &&
|
||||
// Skip Sauce on Travis when [skip sauce] is in the commit message
|
||||
isUndefOrNonZero(process.env.TWBS_DO_SAUCE)) {
|
||||
testSubtasks.push('babel:dev');
|
||||
testSubtasks.push('connect');
|
||||
testSubtasks.push('saucelabs-qunit');
|
||||
}
|
||||
@ -474,7 +463,7 @@ module.exports = function (grunt) {
|
||||
grunt.registerTask('test-js', ['eslint', 'jscs:core', 'jscs:test', 'jscs:grunt', 'qunit']);
|
||||
|
||||
// JS distribution task.
|
||||
grunt.registerTask('dist-js', ['concat', 'lineremover', 'babel:dist', 'stamp', 'uglify:core', 'commonjs']);
|
||||
grunt.registerTask('dist-js', ['babel:dev', 'concat', 'lineremover', 'babel:dist', 'stamp', 'uglify:core', 'commonjs']);
|
||||
|
||||
grunt.registerTask('test-scss', ['scsslint']);
|
||||
|
||||
@ -535,7 +524,4 @@ module.exports = function (grunt) {
|
||||
done();
|
||||
});
|
||||
});
|
||||
// Task for updating the cached RubyGem packages used by the Travis build (which are controlled by test-infra/Gemfile.lock).
|
||||
// This task should be run and the updated file should be committed whenever Bootstrap's RubyGem dependencies change.
|
||||
grunt.registerTask('update-gemfile-lock', ['exec:bundleUpdate']);
|
||||
};
|
||||
|
2
dist/css/bootstrap.min.css.map
vendored
2
dist/css/bootstrap.min.css.map
vendored
File diff suppressed because one or more lines are too long
@ -3054,9 +3054,9 @@ var Tooltip = (function ($) {
|
||||
value: function setContent() {
|
||||
var tip = this.getTipElement();
|
||||
var title = this.getTitle();
|
||||
var method = this.config.html ? 'innerHTML' : 'innerText';
|
||||
var method = this.config.html ? 'html' : 'text';
|
||||
|
||||
$(tip).find(Selector.TOOLTIP_INNER)[0][method] = title;
|
||||
$(tip).find(Selector.TOOLTIP_INNER)[method](title);
|
||||
|
||||
$(tip).removeClass(ClassName.FADE).removeClass(ClassName.IN);
|
||||
|
||||
@ -3418,10 +3418,10 @@ var Popover = (function ($) {
|
||||
var tip = this.getTipElement();
|
||||
var title = this.getTitle();
|
||||
var content = this._getContent();
|
||||
var titleElement = $(tip).find(Selector.TITLE)[0];
|
||||
var $titleElement = $(tip).find(Selector.TITLE);
|
||||
|
||||
if (titleElement) {
|
||||
titleElement[this.config.html ? 'innerHTML' : 'innerText'] = title;
|
||||
if ($titleElement) {
|
||||
$titleElement[this.config.html ? 'html' : 'text'](title);
|
||||
}
|
||||
|
||||
// we use append for html objects to maintain js events
|
||||
|
2
dist/js/bootstrap.min.js
vendored
2
dist/js/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
6
dist/js/umd/popover.js
vendored
6
dist/js/umd/popover.js
vendored
@ -121,10 +121,10 @@
|
||||
var tip = this.getTipElement();
|
||||
var title = this.getTitle();
|
||||
var content = this._getContent();
|
||||
var titleElement = $(tip).find(Selector.TITLE)[0];
|
||||
var $titleElement = $(tip).find(Selector.TITLE);
|
||||
|
||||
if (titleElement) {
|
||||
titleElement[this.config.html ? 'innerHTML' : 'innerText'] = title;
|
||||
if ($titleElement) {
|
||||
$titleElement[this.config.html ? 'html' : 'text'](title);
|
||||
}
|
||||
|
||||
// we use append for html objects to maintain js events
|
||||
|
4
dist/js/umd/tooltip.js
vendored
4
dist/js/umd/tooltip.js
vendored
@ -348,9 +348,9 @@
|
||||
value: function setContent() {
|
||||
var tip = this.getTipElement();
|
||||
var title = this.getTitle();
|
||||
var method = this.config.html ? 'innerHTML' : 'innerText';
|
||||
var method = this.config.html ? 'html' : 'text';
|
||||
|
||||
$(tip).find(Selector.TOOLTIP_INNER)[0][method] = title;
|
||||
$(tip).find(Selector.TOOLTIP_INNER)[method](title);
|
||||
|
||||
$(tip).removeClass(ClassName.FADE).removeClass(ClassName.IN);
|
||||
|
||||
|
@ -2,58 +2,3 @@
|
||||
code: zh
|
||||
description: Bootstrap 中文文档
|
||||
url: http://v4.bootcss.com/
|
||||
|
||||
- name: Danish
|
||||
code: da
|
||||
description: Bootstrap på Dansk
|
||||
url: http://getbootstrap.dk/
|
||||
|
||||
- name: French
|
||||
code: fr
|
||||
description: Bootstrap en Français
|
||||
url: http://www.oneskyapp.com/fr/docs/bootstrap/getting-started/
|
||||
|
||||
- name: German
|
||||
code: de
|
||||
description: Bootstrap auf Deutsch
|
||||
url: http://holdirbootstrap.de/
|
||||
|
||||
- name: Italian
|
||||
code: it
|
||||
description: Bootstrap in Italiano
|
||||
url: http://www.hackerstribe.com/guide/IT-bootstrap-3.1.1/
|
||||
|
||||
- name: Korean
|
||||
code: ko
|
||||
description: Bootstrap 한국어
|
||||
url: http://bootstrapk.com/
|
||||
|
||||
- name: Brazilian Portuguese
|
||||
code: pt-BR
|
||||
description: Bootstrap em Português do Brasil
|
||||
url: http://bootstrapbrasil.github.io/
|
||||
|
||||
- name: Russian
|
||||
code: ru
|
||||
description: Bootstrap по-русски
|
||||
url: http://www.oneskyapp.com/ru/docs/bootstrap/
|
||||
|
||||
- name: Spanish
|
||||
code: es
|
||||
description: Bootstrap en Español
|
||||
url: http://www.oneskyapp.com/es/docs/bootstrap/
|
||||
|
||||
- name: Turkish
|
||||
code: tr
|
||||
description: Türkçe Bootstrap
|
||||
url: http://www.trbootstrap.com
|
||||
|
||||
- name: Ukrainian
|
||||
code: uk
|
||||
description: Bootstrap українською
|
||||
url: http://twbs.docs.org.ua
|
||||
|
||||
- name: Vietnamese
|
||||
code: vi
|
||||
description: Bootstrap bằng tiếng Việt
|
||||
url: http://getbootstrap.com.vn
|
||||
|
2
docs/assets/css/docs.min.css
vendored
2
docs/assets/css/docs.min.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -25,7 +25,7 @@
|
||||
// Detects the actual version of IE in use, even if it's in an older-IE emulation mode.
|
||||
// IE JavaScript conditional compilation docs: https://msdn.microsoft.com/library/121hztk3%28v=vs.94%29.aspx
|
||||
// @cc_on docs: https://msdn.microsoft.com/library/8ka90k2e%28v=vs.94%29.aspx
|
||||
var jscriptVersion = new Function('/*@cc_on return @_jscript_version; @*/')() // jshint ignore:line
|
||||
var jscriptVersion = new Function('/*@cc_on return @_jscript_version; @*/')()
|
||||
if (jscriptVersion === undefined) {
|
||||
return 11 // IE11+ not in emulation mode
|
||||
}
|
||||
|
196
docs/assets/js/vendor/anchor.js
vendored
196
docs/assets/js/vendor/anchor.js
vendored
@ -1,196 +0,0 @@
|
||||
/*!
|
||||
* AnchorJS - v1.0.1 - 2015-05-15
|
||||
* https://github.com/bryanbraun/anchorjs
|
||||
* Copyright (c) 2015 Bryan Braun; Licensed MIT
|
||||
*/
|
||||
|
||||
function AnchorJS(options) {
|
||||
'use strict';
|
||||
|
||||
this.options = options || {};
|
||||
|
||||
this._applyRemainingDefaultOptions = function(opts) {
|
||||
this.options.icon = this.options.hasOwnProperty('icon') ? opts.icon : ''; // Accepts characters (and also URLs?), like '#', '¶', '❡', or '§'.
|
||||
this.options.visible = this.options.hasOwnProperty('visible') ? opts.visible : 'hover'; // Also accepts 'always'
|
||||
this.options.placement = this.options.hasOwnProperty('placement') ? opts.placement : 'right'; // Also accepts 'left'
|
||||
this.options.class = this.options.hasOwnProperty('class') ? opts.class : ''; // Accepts any class name.
|
||||
};
|
||||
|
||||
this._applyRemainingDefaultOptions(options);
|
||||
|
||||
this.add = function(selector) {
|
||||
var elements,
|
||||
elsWithIds,
|
||||
idList,
|
||||
elementID,
|
||||
i,
|
||||
roughText,
|
||||
tidyText,
|
||||
index,
|
||||
count,
|
||||
newTidyText,
|
||||
readableID,
|
||||
anchor,
|
||||
div,
|
||||
anchorNodes;
|
||||
|
||||
this._applyRemainingDefaultOptions(this.options);
|
||||
|
||||
// Provide a sensible default selector, if none is given.
|
||||
if (!selector) {
|
||||
selector = 'h1, h2, h3, h4, h5, h6';
|
||||
} else if (typeof selector !== 'string') {
|
||||
throw new Error('The selector provided to AnchorJS was invalid.');
|
||||
}
|
||||
|
||||
elements = document.querySelectorAll(selector);
|
||||
if (elements.length === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
this._addBaselineStyles();
|
||||
|
||||
// We produce a list of existing IDs so we don't generate a duplicate.
|
||||
elsWithIds = document.querySelectorAll('[id]');
|
||||
idList = [].map.call(elsWithIds, function assign(el) {
|
||||
return el.id;
|
||||
});
|
||||
|
||||
for (i = 0; i < elements.length; i++) {
|
||||
|
||||
if (elements[i].hasAttribute('id')) {
|
||||
elementID = elements[i].getAttribute('id');
|
||||
} else {
|
||||
roughText = elements[i].textContent;
|
||||
|
||||
// Refine it so it makes a good ID. Strip out non-safe characters, replace
|
||||
// spaces with hyphens, truncate to 32 characters, and make toLowerCase.
|
||||
//
|
||||
// Example string: // '⚡⚡⚡ Unicode icons are cool--but don't belong in a URL.'
|
||||
tidyText = roughText.replace(/[^\w\s-]/gi, '') // ' Unicode icons are cool--but dont belong in a URL'
|
||||
.replace(/\s+/g, '-') // '-Unicode-icons-are-cool--but-dont-belong-in-a-URL'
|
||||
.replace(/-{2,}/g, '-') // '-Unicode-icons-are-cool-but-dont-belong-in-a-URL'
|
||||
.substring(0, 32) // '-Unicode-icons-are-cool-but-dont'
|
||||
.replace(/^-+|-+$/gm, '') // 'Unicode-icons-are-cool-but-dont'
|
||||
.toLowerCase(); // 'unicode-icons-are-cool-but-dont'
|
||||
|
||||
// Compare our generated ID to existing IDs (and increment it if needed)
|
||||
// before we add it to the page.
|
||||
newTidyText = tidyText;
|
||||
count = 0;
|
||||
do {
|
||||
if (index !== undefined) {
|
||||
newTidyText = tidyText + '-' + count;
|
||||
}
|
||||
// .indexOf is supported in IE9+.
|
||||
index = idList.indexOf(newTidyText);
|
||||
count += 1;
|
||||
} while (index !== -1);
|
||||
index = undefined;
|
||||
idList.push(newTidyText);
|
||||
|
||||
// Assign it to our element.
|
||||
// Currently the setAttribute element is only supported in IE9 and above.
|
||||
elements[i].setAttribute('id', newTidyText);
|
||||
|
||||
elementID = newTidyText;
|
||||
}
|
||||
|
||||
readableID = elementID.replace(/-/g, ' ');
|
||||
|
||||
anchor = '<a class="anchorjs-link ' + this.options.class + '" href="#' + elementID + '" aria-label="Anchor link for: ' + readableID + '" data-anchorjs-icon="' + this.options.icon + '"></a>';
|
||||
|
||||
div = document.createElement('div');
|
||||
div.innerHTML = anchor;
|
||||
anchorNodes = div.childNodes;
|
||||
|
||||
if (this.options.visible === 'always') {
|
||||
anchorNodes[0].style.opacity = '1';
|
||||
}
|
||||
|
||||
if (this.options.icon === '') {
|
||||
anchorNodes[0].style.fontFamily = 'anchorjs-icons';
|
||||
anchorNodes[0].style.fontStyle = 'normal';
|
||||
anchorNodes[0].style.fontVariant = 'normal';
|
||||
anchorNodes[0].style.fontWeight = 'normal';
|
||||
}
|
||||
|
||||
if (this.options.placement === 'left') {
|
||||
anchorNodes[0].style.position = 'absolute';
|
||||
anchorNodes[0].style.marginLeft = '-1em';
|
||||
anchorNodes[0].style.paddingRight = '0.5em';
|
||||
elements[i].insertBefore(anchorNodes[0], elements[i].firstChild);
|
||||
} else { // if the option provided is `right` (or anything else).
|
||||
anchorNodes[0].style.paddingLeft = '0.375em';
|
||||
elements[i].appendChild(anchorNodes[0]);
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
this.remove = function(selector) {
|
||||
var domAnchor,
|
||||
elements = document.querySelectorAll(selector);
|
||||
for (var i = 0; i < elements.length; i++) {
|
||||
domAnchor = elements[i].querySelector('.anchorjs-link');
|
||||
if (domAnchor) {
|
||||
elements[i].removeChild(domAnchor);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
this._addBaselineStyles = function() {
|
||||
// We don't want to add global baseline styles if they've been added before.
|
||||
if (document.head.querySelector('style.anchorjs') !== null) {
|
||||
return;
|
||||
}
|
||||
|
||||
var style = document.createElement('style'),
|
||||
linkRule =
|
||||
' .anchorjs-link {' +
|
||||
' opacity: 0;' +
|
||||
' text-decoration: none;' +
|
||||
' -webkit-font-smoothing: antialiased;' +
|
||||
' -moz-osx-font-smoothing: grayscale;' +
|
||||
' }',
|
||||
hoverRule =
|
||||
' *:hover > .anchorjs-link,' +
|
||||
' .anchorjs-link:focus {' +
|
||||
' opacity: 1;' +
|
||||
' }',
|
||||
anchorjsLinkFontFace =
|
||||
' @font-face {' +
|
||||
' font-family: "anchorjs-icons";' +
|
||||
' font-style: normal;' +
|
||||
' font-weight: normal;' + // Icon from icomoon; 10px wide & 10px tall; 2 empty below & 4 above
|
||||
' src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBTUAAAC8AAAAYGNtYXAWi9QdAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zgq29TcAAAF4AAABNGhlYWQEZM3pAAACrAAAADZoaGVhBhUDxgAAAuQAAAAkaG10eASAADEAAAMIAAAAFGxvY2EAKACuAAADHAAAAAxtYXhwAAgAVwAAAygAAAAgbmFtZQ5yJ3cAAANIAAAB2nBvc3QAAwAAAAAFJAAAACAAAwJAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpywPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6cv//f//AAAAAAAg6cv//f//AAH/4xY5AAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACADEARAJTAsAAKwBUAAABIiYnJjQ/AT4BMzIWFxYUDwEGIicmND8BNjQnLgEjIgYPAQYUFxYUBw4BIwciJicmND8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFA8BDgEjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAEAAAABAACiToc1Xw889QALBAAAAAAA0XnFFgAAAADRecUWAAAAAAJTAsAAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAAlMAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAAoAAMQAAAAAACgAUAB4AmgABAAAABQBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIABwCfAAEAAAAAAAMADgBLAAEAAAAAAAQADgC0AAEAAAAAAAUACwAqAAEAAAAAAAYADgB1AAEAAAAAAAoAGgDeAAMAAQQJAAEAHAAOAAMAAQQJAAIADgCmAAMAAQQJAAMAHABZAAMAAQQJAAQAHADCAAMAAQQJAAUAFgA1AAMAAQQJAAYAHACDAAMAAQQJAAoANAD4YW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQByYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype");' +
|
||||
' }',
|
||||
pseudoElContent =
|
||||
' [data-anchorjs-icon]::after {' +
|
||||
' content: attr(data-anchorjs-icon);' +
|
||||
' }',
|
||||
firstStyleEl;
|
||||
|
||||
style.className = 'anchorjs';
|
||||
style.appendChild(document.createTextNode('')); // Necessary for Webkit.
|
||||
|
||||
// We place it in the head with the other style tags, if possible, so as to
|
||||
// not look out of place. We insert before the others so these styles can be
|
||||
// overridden if necessary.
|
||||
firstStyleEl = document.head.querySelector('[rel="stylesheet"], style');
|
||||
if (firstStyleEl === undefined) {
|
||||
document.head.appendChild(style);
|
||||
} else {
|
||||
document.head.insertBefore(style, firstStyleEl);
|
||||
}
|
||||
|
||||
style.sheet.insertRule(linkRule, style.sheet.cssRules.length);
|
||||
style.sheet.insertRule(hoverRule, style.sheet.cssRules.length);
|
||||
style.sheet.insertRule(pseudoElContent, style.sheet.cssRules.length);
|
||||
style.sheet.insertRule(anchorjsLinkFontFace, style.sheet.cssRules.length);
|
||||
};
|
||||
}
|
||||
|
||||
var anchors = new AnchorJS();
|
6
docs/assets/js/vendor/anchor.min.js
vendored
Normal file
6
docs/assets/js/vendor/anchor.min.js
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
/*!
|
||||
* AnchorJS - v1.2.1 - 2015-07-02
|
||||
* https://github.com/bryanbraun/anchorjs
|
||||
* Copyright (c) 2015 Bryan Braun; Licensed MIT
|
||||
*/
|
||||
function AnchorJS(A){"use strict";this.options=A||{},this._applyRemainingDefaultOptions=function(A){this.options.icon=this.options.hasOwnProperty("icon")?A.icon:"",this.options.visible=this.options.hasOwnProperty("visible")?A.visible:"hover",this.options.placement=this.options.hasOwnProperty("placement")?A.placement:"right",this.options.class=this.options.hasOwnProperty("class")?A.class:""},this._applyRemainingDefaultOptions(A),this.add=function(A){var e,t,o,n,i,s,a,l,r,h,c,g;if(this._applyRemainingDefaultOptions(this.options),A){if("string"!=typeof A)throw new Error("The selector provided to AnchorJS was invalid.")}else A="h1, h2, h3, h4, h5, h6";if(e=document.querySelectorAll(A),0===e.length)return!1;for(this._addBaselineStyles(),t=document.querySelectorAll("[id]"),o=[].map.call(t,function(A){return A.id}),i=0;i<e.length;i++){if(e[i].hasAttribute("id"))n=e[i].getAttribute("id");else{s=e[i].textContent,a=s.replace(/[^\w\s-]/gi,"").replace(/\s+/g,"-").replace(/-{2,}/g,"-").substring(0,64).replace(/^-+|-+$/gm,"").toLowerCase(),h=a,r=0;do void 0!==l&&(h=a+"-"+r),l=o.indexOf(h),r+=1;while(-1!==l);l=void 0,o.push(h),e[i].setAttribute("id",h),n=h}c=n.replace(/-/g," "),g=document.createElement("a"),g.className="anchorjs-link "+this.options.class,g.href="#"+n,g.setAttribute("aria-label","Anchor link for: "+c),g.setAttribute("data-anchorjs-icon",this.options.icon),"always"===this.options.visible&&(g.style.opacity="1"),""===this.options.icon&&(g.style.fontFamily="anchorjs-icons",g.style.fontStyle="normal",g.style.fontVariant="normal",g.style.fontWeight="normal",g.style.lineHeight=1),"left"===this.options.placement?(g.style.position="absolute",g.style.marginLeft="-1em",g.style.paddingRight="0.5em",e[i].insertBefore(g,e[i].firstChild)):(g.style.paddingLeft="0.375em",e[i].appendChild(g))}return this},this.remove=function(A){for(var e,t=document.querySelectorAll(A),o=0;o<t.length;o++)e=t[o].querySelector(".anchorjs-link"),e&&t[o].removeChild(e);return this},this._addBaselineStyles=function(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style"),t=" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",o=" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",n=' @font-face { font-family: "anchorjs-icons"; font-style: normal; font-weight: normal; src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBTUAAAC8AAAAYGNtYXAWi9QdAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zgq29TcAAAF4AAABNGhlYWQEZM3pAAACrAAAADZoaGVhBhUDxgAAAuQAAAAkaG10eASAADEAAAMIAAAAFGxvY2EAKACuAAADHAAAAAxtYXhwAAgAVwAAAygAAAAgbmFtZQ5yJ3cAAANIAAAB2nBvc3QAAwAAAAAFJAAAACAAAwJAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpywPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6cv//f//AAAAAAAg6cv//f//AAH/4xY5AAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACADEARAJTAsAAKwBUAAABIiYnJjQ/AT4BMzIWFxYUDwEGIicmND8BNjQnLgEjIgYPAQYUFxYUBw4BIwciJicmND8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFA8BDgEjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAEAAAABAACiToc1Xw889QALBAAAAAAA0XnFFgAAAADRecUWAAAAAAJTAsAAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAAlMAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAAoAAMQAAAAAACgAUAB4AmgABAAAABQBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIABwCfAAEAAAAAAAMADgBLAAEAAAAAAAQADgC0AAEAAAAAAAUACwAqAAEAAAAAAAYADgB1AAEAAAAAAAoAGgDeAAMAAQQJAAEAHAAOAAMAAQQJAAIADgCmAAMAAQQJAAMAHABZAAMAAQQJAAQAHADCAAMAAQQJAAUAFgA1AAMAAQQJAAYAHACDAAMAAQQJAAoANAD4YW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQByYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype"); }',i=" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }";e.className="anchorjs",e.appendChild(document.createTextNode("")),A=document.head.querySelector('[rel="stylesheet"], style'),void 0===A?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(t,e.sheet.cssRules.length),e.sheet.insertRule(o,e.sheet.cssRules.length),e.sheet.insertRule(i,e.sheet.cssRules.length),e.sheet.insertRule(n,e.sheet.cssRules.length)}}}var anchors=new AnchorJS;
|
@ -96,7 +96,7 @@ The collapse plugin utilizes a few classes to handle the heavy lifting:
|
||||
- `.collapse.in` shows the content
|
||||
- `.collapsing` is added when the transition starts, and removed when it finishes
|
||||
|
||||
These classes can be found in `component-animations.less`.
|
||||
These classes can be found in `_animation.scss`.
|
||||
|
||||
### Via data attributes
|
||||
|
||||
|
@ -31,15 +31,17 @@
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="#">Project name</a>
|
||||
<nav class="nav navbar-nav pull-left">
|
||||
<a class="nav-item nav-link" href="#">Dashboard</a>
|
||||
<a class="nav-item nav-link" href="#">Settings</a>
|
||||
<a class="nav-item nav-link" href="#">Profile</a>
|
||||
<a class="nav-item nav-link" href="#">Help</a>
|
||||
</nav>
|
||||
<form class="navbar-form pull-right">
|
||||
<input type="text" class="form-control" placeholder="Search...">
|
||||
</form>
|
||||
<div id="navbar">
|
||||
<nav class="nav navbar-nav pull-left">
|
||||
<a class="nav-item nav-link" href="#">Dashboard</a>
|
||||
<a class="nav-item nav-link" href="#">Settings</a>
|
||||
<a class="nav-item nav-link" href="#">Profile</a>
|
||||
<a class="nav-item nav-link" href="#">Help</a>
|
||||
</nav>
|
||||
<form class="navbar-form pull-right">
|
||||
<input type="text" class="form-control" placeholder="Search...">
|
||||
</form>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container-fluid">
|
||||
|
@ -70,7 +70,7 @@
|
||||
<hr>
|
||||
|
||||
<footer>
|
||||
<p>© Company 2014</p>
|
||||
<p>© Company 2015</p>
|
||||
</footer>
|
||||
</div> <!-- /container -->
|
||||
|
||||
|
@ -28,7 +28,7 @@ Our Gruntfile includes the following commands and tasks:
|
||||
| --- | --- |
|
||||
| `grunt` | Run `grunt` to run tests locally and compile the CSS and JavaScript into `/dist`. **Uses [Sass](http://sass-lang.com/) and [UglifyJS](http://lisperator.net/uglifyjs/).** |
|
||||
| `grunt dist` | `grunt dist` creates the `/dist` directory with compiled files. **Uses [Sass](http://sass-lang.com/) and [UglifyJS](http://lisperator.net/uglifyjs/).** |
|
||||
| `grunt test` | Runs [JSHint](http://jshint.com) and [QUnit](http://qunitjs.com/) tests headlessly in [PhantomJS](http://phantomjs.org/) (used for CI). |
|
||||
| `grunt test` | Runs [scss-lint](https://github.com/brigade/scss-lint), [ESLint](http://eslint.org/) and [QUnit](http://qunitjs.com/) tests headlessly in [PhantomJS](http://phantomjs.org/) (used for CI). |
|
||||
| `grunt docs` | Builds and tests CSS, JavaScript, and other assets which are used when running the documentation locally via `jekyll serve`. |
|
||||
| `grunt watch` | This is a convenience method for watching just Sass files and automatically building them whenever you save. |
|
||||
|
||||
|
@ -52,7 +52,7 @@ Install Bootstrap in your Node powered apps with [the npm package](https://www.n
|
||||
|
||||
Bootstrap's `package.json` contains some additional metadata under the following keys:
|
||||
|
||||
- `less` - path to Bootstrap's main [Less](http://lesscss.org) source file
|
||||
- `sass` - path to Bootstrap's main [Sass](http://sass-lang.com/) source file
|
||||
- `style` - path to Bootstrap's non-minified CSS that's been precompiled using the default settings (no customization)
|
||||
|
||||
### Meteor
|
||||
|
@ -57,7 +57,7 @@ title: Bootstrap · The world's most popular mobile-first and responsive f
|
||||
<div class="col-sm-4 m-b-lg">
|
||||
<img src="assets/img/sass.png" alt="Sass support" class="img-responsive">
|
||||
<h4>Preprocessor</h4>
|
||||
<p>Bootstrap ships with vanilla CSS, but its source code utilizes <a href="../css/#sass">Sass</a>, a popular CSS preprocessor. Quickly get started with precompiled CSS or build on the source.</p>
|
||||
<p>Bootstrap ships with vanilla CSS, but its source code utilizes <a href="http://sass-lang.com/">Sass</a>, a popular CSS preprocessor. Quickly get started with precompiled CSS or build on the source.</p>
|
||||
</div>
|
||||
<div class="col-sm-4 m-b-lg">
|
||||
<img src="assets/img/devices.png" alt="Responsive across devices" class="img-responsive">
|
||||
|
@ -151,7 +151,7 @@ The following components have been removed in v4.0.0.
|
||||
| Wells | | Cards |
|
||||
| Justified navs | | |
|
||||
|
||||
TODO: audit classes in v4 that aren't present in v4
|
||||
TODO: audit classes in v3 that aren't present in v4
|
||||
|
||||
### Responsive utilities
|
||||
|
||||
|
@ -1,7 +0,0 @@
|
||||
{
|
||||
"extends" : "../js/.jshintrc",
|
||||
"asi" : false,
|
||||
"browser" : false,
|
||||
"es3" : false,
|
||||
"node" : true
|
||||
}
|
@ -4,7 +4,7 @@
|
||||
"../assets/js/vendor/holder.min.js",
|
||||
"assets/js/vendor/jekyll-search.js",
|
||||
"../assets/js/vendor/ZeroClipboard.min.js",
|
||||
"../assets/js/vendor/anchor.js",
|
||||
"../assets/js/vendor/anchor.min.js",
|
||||
"../assets/js/vendor/tether.min.js",
|
||||
"../assets/js/src/application.js"
|
||||
]
|
||||
|
6
js/dist/popover.js
vendored
6
js/dist/popover.js
vendored
@ -104,10 +104,10 @@ var Popover = (function ($) {
|
||||
var tip = this.getTipElement();
|
||||
var title = this.getTitle();
|
||||
var content = this._getContent();
|
||||
var titleElement = $(tip).find(Selector.TITLE)[0];
|
||||
var $titleElement = $(tip).find(Selector.TITLE);
|
||||
|
||||
if (titleElement) {
|
||||
titleElement[this.config.html ? 'innerHTML' : 'innerText'] = title;
|
||||
if ($titleElement) {
|
||||
$titleElement[this.config.html ? 'html' : 'text'](title);
|
||||
}
|
||||
|
||||
// we use append for html objects to maintain js events
|
||||
|
2
js/dist/popover.js.map
vendored
2
js/dist/popover.js.map
vendored
File diff suppressed because one or more lines are too long
4
js/dist/tooltip.js
vendored
4
js/dist/tooltip.js
vendored
@ -331,9 +331,9 @@ var Tooltip = (function ($) {
|
||||
value: function setContent() {
|
||||
var tip = this.getTipElement();
|
||||
var title = this.getTitle();
|
||||
var method = this.config.html ? 'innerHTML' : 'innerText';
|
||||
var method = this.config.html ? 'html' : 'text';
|
||||
|
||||
$(tip).find(Selector.TOOLTIP_INNER)[0][method] = title;
|
||||
$(tip).find(Selector.TOOLTIP_INNER)[method](title);
|
||||
|
||||
$(tip).removeClass(ClassName.FADE).removeClass(ClassName.IN);
|
||||
|
||||
|
2
js/dist/tooltip.js.map
vendored
2
js/dist/tooltip.js.map
vendored
File diff suppressed because one or more lines are too long
@ -116,12 +116,12 @@ const Popover = (($) => {
|
||||
let tip = this.getTipElement()
|
||||
let title = this.getTitle()
|
||||
let content = this._getContent()
|
||||
let titleElement = $(tip).find(Selector.TITLE)[0]
|
||||
let $titleElement = $(tip).find(Selector.TITLE)
|
||||
|
||||
if (titleElement) {
|
||||
titleElement[
|
||||
this.config.html ? 'innerHTML' : 'innerText'
|
||||
] = title
|
||||
if ($titleElement) {
|
||||
$titleElement[
|
||||
this.config.html ? 'html' : 'text'
|
||||
](title)
|
||||
}
|
||||
|
||||
// we use append for html objects to maintain js events
|
||||
|
@ -358,9 +358,9 @@ const Tooltip = (($) => {
|
||||
setContent() {
|
||||
let tip = this.getTipElement()
|
||||
let title = this.getTitle()
|
||||
let method = this.config.html ? 'innerHTML' : 'innerText'
|
||||
let method = this.config.html ? 'html' : 'text'
|
||||
|
||||
$(tip).find(Selector.TOOLTIP_INNER)[0][method] = title
|
||||
$(tip).find(Selector.TOOLTIP_INNER)[method](title)
|
||||
|
||||
$(tip)
|
||||
.removeClass(ClassName.FADE)
|
||||
|
@ -1,6 +0,0 @@
|
||||
{
|
||||
"extends" : "../../.jshintrc",
|
||||
"devel" : true,
|
||||
"es3" : false,
|
||||
"qunit" : true
|
||||
}
|
17
js/tests/vendor/qunit.css
vendored
17
js/tests/vendor/qunit.css
vendored
@ -1,12 +1,12 @@
|
||||
/*!
|
||||
* QUnit 1.17.1
|
||||
* QUnit 1.18.0
|
||||
* http://qunitjs.com/
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
* Released under the MIT license
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* Date: 2015-01-20T19:39Z
|
||||
* Date: 2015-04-03T10:23Z
|
||||
*/
|
||||
|
||||
/** Font Family and Sizes */
|
||||
@ -116,7 +116,13 @@
|
||||
|
||||
#qunit-tests.hidepass li.running,
|
||||
#qunit-tests.hidepass li.pass {
|
||||
display: none;
|
||||
visibility: hidden;
|
||||
position: absolute;
|
||||
width: 0px;
|
||||
height: 0px;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#qunit-tests li strong {
|
||||
@ -132,6 +138,11 @@
|
||||
color: #C2CCD1;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#qunit-tests li p a {
|
||||
padding: 0.25em;
|
||||
color: #6B6464;
|
||||
}
|
||||
#qunit-tests li a:hover,
|
||||
#qunit-tests li a:focus {
|
||||
color: #000;
|
||||
|
1355
js/tests/vendor/qunit.js
vendored
1355
js/tests/vendor/qunit.js
vendored
File diff suppressed because it is too large
Load Diff
10
package.js
10
package.js
@ -1,25 +1,17 @@
|
||||
// package metadata file for Meteor.js
|
||||
|
||||
/* jshint strict:false */
|
||||
/* global Package:true */
|
||||
|
||||
Package.describe({
|
||||
name: 'twbs:bootstrap', // http://atmospherejs.com/twbs/bootstrap
|
||||
summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.',
|
||||
version: '3.3.5',
|
||||
version: '4.0.0-alpha',
|
||||
git: 'https://github.com/twbs/bootstrap.git'
|
||||
});
|
||||
|
||||
Package.onUse(function (api) {
|
||||
api.versionsFrom('METEOR@1.0');
|
||||
api.use('jquery', 'client');
|
||||
api.addFiles([
|
||||
'dist/fonts/glyphicons-halflings-regular.eot',
|
||||
'dist/fonts/glyphicons-halflings-regular.svg',
|
||||
'dist/fonts/glyphicons-halflings-regular.ttf',
|
||||
'dist/fonts/glyphicons-halflings-regular.woff',
|
||||
'dist/fonts/glyphicons-halflings-regular.woff2'
|
||||
], 'client', { isAsset: true });
|
||||
api.addFiles([
|
||||
'dist/css/bootstrap.css',
|
||||
'dist/js/bootstrap.js'
|
||||
|
@ -44,7 +44,6 @@
|
||||
"grunt-contrib-csslint": "~0.4.0",
|
||||
"grunt-contrib-cssmin": "~0.12.2",
|
||||
"grunt-contrib-jade": "~0.14.1",
|
||||
"grunt-contrib-jshint": "~0.11.0",
|
||||
"grunt-contrib-qunit": "~0.5.2",
|
||||
"grunt-contrib-sass": "^0.8.1",
|
||||
"grunt-contrib-uglify": "~0.8.0",
|
||||
|
@ -384,7 +384,7 @@ input[type="checkbox"] {
|
||||
// Requires wrapping inputs and labels with `.form-group` for proper display of
|
||||
// default HTML form controls and our custom form controls (e.g., input groups).
|
||||
//
|
||||
// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
|
||||
// Heads up! This is mixin-ed into `.navbar-form` in _navbar.scss.
|
||||
|
||||
.form-inline {
|
||||
|
||||
|
@ -28,7 +28,6 @@
|
||||
@import "mixins/label";
|
||||
@import "mixins/reset-filter";
|
||||
@import "mixins/resize";
|
||||
@import "mixins/responsive-visibility";
|
||||
@import "mixins/screen-reader";
|
||||
@import "mixins/size";
|
||||
@import "mixins/tab-focus";
|
||||
|
@ -44,6 +44,6 @@
|
||||
|
||||
.hidden-print {
|
||||
@media print {
|
||||
@include responsive-invisibility(".hidden-print");
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
@ -1,21 +0,0 @@
|
||||
// Responsive utilities
|
||||
|
||||
//
|
||||
// More easily include all the states for responsive-utilities.less.
|
||||
// [converter] $parent hack
|
||||
@mixin responsive-visibility($parent) {
|
||||
#{$parent} {
|
||||
display: block !important;
|
||||
}
|
||||
table#{$parent} { display: table !important; }
|
||||
tr#{$parent} { display: table-row !important; }
|
||||
th#{$parent},
|
||||
td#{$parent} { display: table-cell !important; }
|
||||
}
|
||||
|
||||
// [converter] $parent hack
|
||||
@mixin responsive-invisibility($parent) {
|
||||
#{$parent} {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
@ -13,16 +13,13 @@ Similar to git, `s3_cache.py` makes the assumption that [SHA-256 will effectivel
|
||||
|
||||
|
||||
### For Bootstrap specifically
|
||||
`s3_cache.py` is used to cache the npm packages that our Grunt tasks depend on and the RubyGems that Jekyll depends on. (Jekyll is needed to compile our docs to HTML so that we can run them thru an HTML5 validator.)
|
||||
`s3_cache.py` is used to cache the npm packages that our Grunt tasks depend on.
|
||||
|
||||
For npm, the `node_modules` directory is cached based on our `npm-shrinkwrap.json` file.
|
||||
|
||||
For RubyGems, the `gemdir` of the current RVM-selected Ruby is cached based on the `pseudo_Gemfile.lock` file generated by our Travis build script.
|
||||
`pseudo_Gemfile.lock` contains the versions of Ruby and Jekyll that we're using (read our `.travis.yml` for details).
|
||||
|
||||
|
||||
## Why is `s3_cache.py` necessary?
|
||||
`s3_cache.py` is used to speed up Bootstrap's Travis builds. Installing npm packages and RubyGems used to take up a significant fraction of our total build times. Also, at the time that `s3_cache.py` was written, npm was occasionally unreliable.
|
||||
`s3_cache.py` is used to speed up Bootstrap's Travis builds. Installing npm packages used to take up a significant fraction of our total build times. Also, at the time that `s3_cache.py` was written, npm was occasionally unreliable.
|
||||
|
||||
Travis does offer built-in caching on their paid plans, but this do-it-ourselves S3 solution is significantly cheaper since we only need caching and not Travis' other paid features.
|
||||
|
||||
|
@ -3,10 +3,5 @@
|
||||
"key": "./npm-shrinkwrap.json",
|
||||
"cache": "../node_modules",
|
||||
"generate": "./uncached-npm-install.sh"
|
||||
},
|
||||
"rubygems": {
|
||||
"key": "$BUNDLE_GEMFILE",
|
||||
"cache": "../vendor/cache",
|
||||
"generate": "cd .. ; bundle install --path=\"`pwd`/vendor/cache\""
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +0,0 @@
|
||||
# Ruby Gems for the 'core' set of tests
|
||||
# Run `grunt update-gemfile-lock` to update to the latest compatible versions
|
||||
|
||||
source 'https://rubygems.org'
|
||||
|
||||
gem 'sass', '~> 3.4.9'
|
||||
gem 'scss-lint', '~> 0.31'
|
@ -1,15 +0,0 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
rainbow (2.0.0)
|
||||
sass (3.4.9)
|
||||
scss-lint (0.31.0)
|
||||
rainbow (~> 2.0)
|
||||
sass (~> 3.4.1)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
sass (~> 3.4.9)
|
||||
scss-lint (~> 0.31)
|
Loading…
x
Reference in New Issue
Block a user