mirror of
https://github.com/twbs/bootstrap.git
synced 2025-02-19 16:54:24 +01:00
Merge branch 'master' into pr/12462
Conflicts: dist/css/bootstrap.css.map dist/css/bootstrap.min.css docs/dist/css/bootstrap.css.map docs/dist/css/bootstrap.min.css
This commit is contained in:
commit
e3cfd5821d
@ -26,6 +26,6 @@ env:
|
||||
- TWBS_TEST=core
|
||||
- TWBS_TEST=validate-html
|
||||
- TWBS_TEST=sauce-js-unit
|
||||
- TWBS_TEST=browserstack-js-unit
|
||||
# - TWBS_TEST=browserstack-js-unit
|
||||
matrix:
|
||||
fast_finish: true
|
||||
|
15
Gruntfile.js
15
Gruntfile.js
@ -30,7 +30,7 @@ module.exports = function (grunt) {
|
||||
banner: '/*!\n' +
|
||||
' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
|
||||
' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
|
||||
' * Licensed under <%= _.pluck(pkg.licenses, "type") %> (<%= _.pluck(pkg.licenses, "url") %>)\n' +
|
||||
' * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\n' +
|
||||
' */\n',
|
||||
jqueryCheck: 'if (typeof jQuery === \'undefined\') { throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery\') }\n\n',
|
||||
|
||||
@ -44,7 +44,10 @@ module.exports = function (grunt) {
|
||||
jshintrc: 'js/.jshintrc'
|
||||
},
|
||||
grunt: {
|
||||
src: ['Gruntfile.js', 'docs/grunt/*.js', 'test-infra/shrinkwrap.js']
|
||||
options: {
|
||||
node: true
|
||||
},
|
||||
src: ['Gruntfile.js', 'grunt/*.js']
|
||||
},
|
||||
src: {
|
||||
src: 'js/*.js'
|
||||
@ -62,7 +65,7 @@ module.exports = function (grunt) {
|
||||
config: 'js/.jscs.json',
|
||||
},
|
||||
grunt: {
|
||||
src: ['Gruntfile.js', 'docs/grunt/*.js', 'test-infra/shrinkwrap.js']
|
||||
src: ['Gruntfile.js', 'grunt/*.js']
|
||||
},
|
||||
src: {
|
||||
src: 'js/*.js'
|
||||
@ -259,7 +262,7 @@ module.exports = function (grunt) {
|
||||
options: {
|
||||
inject: 'js/tests/unit/phantom.js'
|
||||
},
|
||||
files: 'js/tests/*.html'
|
||||
files: 'js/tests/index.html'
|
||||
},
|
||||
|
||||
connect: {
|
||||
@ -287,8 +290,8 @@ module.exports = function (grunt) {
|
||||
}
|
||||
},
|
||||
files: {
|
||||
'docs/_includes/customizer-variables.html': 'docs/customizer-variables.jade',
|
||||
'docs/_includes/nav-customize.html': 'docs/customizer-nav.jade'
|
||||
'docs/_includes/customizer-variables.html': 'docs/jade/customizer-variables.jade',
|
||||
'docs/_includes/nav-customize.html': 'docs/jade/customizer-nav.jade'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -14,7 +14,9 @@ baseurl: /
|
||||
url: http://localhost:9001
|
||||
encoding: UTF-8
|
||||
|
||||
exclude: ["vendor"]
|
||||
exclude:
|
||||
- "jade"
|
||||
- "vendor"
|
||||
|
||||
# Custom vars
|
||||
current_version: 3.1.0
|
||||
|
2
dist/css/bootstrap-theme.css.map
vendored
2
dist/css/bootstrap-theme.css.map
vendored
File diff suppressed because one or more lines are too long
130
dist/css/bootstrap.css
vendored
130
dist/css/bootstrap.css
vendored
@ -307,7 +307,11 @@ figure {
|
||||
img {
|
||||
vertical-align: middle;
|
||||
}
|
||||
.img-responsive {
|
||||
.img-responsive,
|
||||
.thumbnail > img,
|
||||
.thumbnail a > img,
|
||||
.carousel-inner > .item > img,
|
||||
.carousel-inner > .item > a > img {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
@ -1709,9 +1713,6 @@ output {
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
|
||||
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
|
||||
}
|
||||
.form-control:-moz-placeholder {
|
||||
color: #999;
|
||||
}
|
||||
.form-control::-moz-placeholder {
|
||||
color: #999;
|
||||
opacity: 1;
|
||||
@ -1732,6 +1733,9 @@ fieldset[disabled] .form-control {
|
||||
textarea.form-control {
|
||||
height: auto;
|
||||
}
|
||||
input[type="search"] {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
input[type="date"] {
|
||||
line-height: 34px;
|
||||
}
|
||||
@ -1935,6 +1939,9 @@ select[multiple].input-lg {
|
||||
width: auto;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.form-inline .input-group > .form-control {
|
||||
width: 100%;
|
||||
}
|
||||
.form-inline .control-label {
|
||||
margin-bottom: 0;
|
||||
vertical-align: middle;
|
||||
@ -1999,7 +2006,6 @@ select[multiple].input-lg {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
-o-user-select: none;
|
||||
user-select: none;
|
||||
background-image: none;
|
||||
border: 1px solid transparent;
|
||||
@ -2311,19 +2317,22 @@ fieldset[disabled] .btn-link:focus {
|
||||
color: #999;
|
||||
text-decoration: none;
|
||||
}
|
||||
.btn-lg {
|
||||
.btn-lg,
|
||||
.btn-group-lg > .btn {
|
||||
padding: 10px 16px;
|
||||
font-size: 18px;
|
||||
line-height: 1.33;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.btn-sm {
|
||||
.btn-sm,
|
||||
.btn-group-sm > .btn {
|
||||
padding: 5px 10px;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.btn-xs {
|
||||
.btn-xs,
|
||||
.btn-group-xs > .btn {
|
||||
padding: 1px 5px;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
@ -3196,24 +3205,6 @@ input[type="button"].btn-block {
|
||||
.btn-group.open .dropdown-toggle {
|
||||
outline: 0;
|
||||
}
|
||||
.btn-group-xs > .btn {
|
||||
padding: 1px 5px;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.btn-group-sm > .btn {
|
||||
padding: 5px 10px;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.btn-group-lg > .btn {
|
||||
padding: 10px 16px;
|
||||
font-size: 18px;
|
||||
line-height: 1.33;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.btn-group > .btn + .dropdown-toggle {
|
||||
padding-right: 8px;
|
||||
padding-left: 8px;
|
||||
@ -3865,6 +3856,9 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
|
||||
width: auto;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.navbar-form .input-group > .form-control {
|
||||
width: 100%;
|
||||
}
|
||||
.navbar-form .control-label {
|
||||
margin-bottom: 0;
|
||||
vertical-align: middle;
|
||||
@ -4416,9 +4410,6 @@ a.list-group-item.active > .badge,
|
||||
}
|
||||
.thumbnail > img,
|
||||
.thumbnail a > img {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
}
|
||||
@ -4771,6 +4762,31 @@ a.list-group-item-danger.active:focus {
|
||||
.panel-body {
|
||||
padding: 15px;
|
||||
}
|
||||
.panel-heading {
|
||||
padding: 10px 15px;
|
||||
border-bottom: 1px solid transparent;
|
||||
border-top-left-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
}
|
||||
.panel-heading > .dropdown .dropdown-toggle {
|
||||
color: inherit;
|
||||
}
|
||||
.panel-title {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
font-size: 16px;
|
||||
color: inherit;
|
||||
}
|
||||
.panel-title > a {
|
||||
color: inherit;
|
||||
}
|
||||
.panel-footer {
|
||||
padding: 10px 15px;
|
||||
background-color: #f5f5f5;
|
||||
border-top: 1px solid #ddd;
|
||||
border-bottom-right-radius: 3px;
|
||||
border-bottom-left-radius: 3px;
|
||||
}
|
||||
.panel > .list-group {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
@ -4889,63 +4905,30 @@ a.list-group-item-danger.active:focus {
|
||||
.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
|
||||
border-right: 0;
|
||||
}
|
||||
.panel > .table-bordered > thead > tr:first-child > th,
|
||||
.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
|
||||
.panel > .table-bordered > tbody > tr:first-child > th,
|
||||
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th,
|
||||
.panel > .table-bordered > tfoot > tr:first-child > th,
|
||||
.panel > .table-responsive > .table-bordered > tfoot > tr:first-child > th,
|
||||
.panel > .table-bordered > thead > tr:first-child > td,
|
||||
.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
|
||||
.panel > .table-bordered > tbody > tr:first-child > td,
|
||||
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
|
||||
.panel > .table-bordered > tfoot > tr:first-child > td,
|
||||
.panel > .table-responsive > .table-bordered > tfoot > tr:first-child > td {
|
||||
border-top: 0;
|
||||
.panel > .table-bordered > thead > tr:first-child > th,
|
||||
.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
|
||||
.panel > .table-bordered > tbody > tr:first-child > th,
|
||||
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
|
||||
border-bottom: 0;
|
||||
}
|
||||
.panel > .table-bordered > thead > tr:last-child > th,
|
||||
.panel > .table-responsive > .table-bordered > thead > tr:last-child > th,
|
||||
.panel > .table-bordered > tbody > tr:last-child > th,
|
||||
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
|
||||
.panel > .table-bordered > tfoot > tr:last-child > th,
|
||||
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th,
|
||||
.panel > .table-bordered > thead > tr:last-child > td,
|
||||
.panel > .table-responsive > .table-bordered > thead > tr:last-child > td,
|
||||
.panel > .table-bordered > tbody > tr:last-child > td,
|
||||
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
|
||||
.panel > .table-bordered > tfoot > tr:last-child > td,
|
||||
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td {
|
||||
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
|
||||
.panel > .table-bordered > tbody > tr:last-child > th,
|
||||
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
|
||||
.panel > .table-bordered > tfoot > tr:last-child > th,
|
||||
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
|
||||
border-bottom: 0;
|
||||
}
|
||||
.panel > .table-responsive {
|
||||
margin-bottom: 0;
|
||||
border: 0;
|
||||
}
|
||||
.panel-heading {
|
||||
padding: 10px 15px;
|
||||
border-bottom: 1px solid transparent;
|
||||
border-top-left-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
}
|
||||
.panel-heading > .dropdown .dropdown-toggle {
|
||||
color: inherit;
|
||||
}
|
||||
.panel-title {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
font-size: 16px;
|
||||
color: inherit;
|
||||
}
|
||||
.panel-title > a {
|
||||
color: inherit;
|
||||
}
|
||||
.panel-footer {
|
||||
padding: 10px 15px;
|
||||
background-color: #f5f5f5;
|
||||
border-top: 1px solid #ddd;
|
||||
border-bottom-right-radius: 3px;
|
||||
border-bottom-left-radius: 3px;
|
||||
}
|
||||
.panel-group {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
@ -5446,9 +5429,6 @@ button.close {
|
||||
}
|
||||
.carousel-inner > .item > img,
|
||||
.carousel-inner > .item > a > img {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
line-height: 1;
|
||||
}
|
||||
.carousel-inner > .active,
|
||||
|
2
dist/css/bootstrap.css.map
vendored
2
dist/css/bootstrap.css.map
vendored
File diff suppressed because one or more lines are too long
2
dist/css/bootstrap.min.css
vendored
2
dist/css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
@ -572,6 +572,37 @@
|
||||
<p class="help-block">Point at which the navbar begins collapsing.</p>
|
||||
</div>
|
||||
</div>
|
||||
<h2 id="container-sizes">Container sizes</h2>
|
||||
<p>Define the maximum width of <code>.container</code> for different screen sizes.</p>
|
||||
<div class="row">
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@container-tablet">@container-tablet</label>
|
||||
<input id="input-@container-tablet" type="text" value="((720px + @grid-gutter-width))" data-var="@container-tablet" class="form-control"/>
|
||||
</div>
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@container-sm">@container-sm</label>
|
||||
<input id="input-@container-sm" type="text" value="@container-tablet" data-var="@container-sm" class="form-control"/>
|
||||
<p class="help-block">For <code>@screen-sm-min</code> and up.</p>
|
||||
</div>
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@container-desktop">@container-desktop</label>
|
||||
<input id="input-@container-desktop" type="text" value="((940px + @grid-gutter-width))" data-var="@container-desktop" class="form-control"/>
|
||||
</div>
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@container-md">@container-md</label>
|
||||
<input id="input-@container-md" type="text" value="@container-desktop" data-var="@container-md" class="form-control"/>
|
||||
<p class="help-block">For <code>@screen-md-min</code> and up.</p>
|
||||
</div>
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@container-large-desktop">@container-large-desktop</label>
|
||||
<input id="input-@container-large-desktop" type="text" value="((1140px + @grid-gutter-width))" data-var="@container-large-desktop" class="form-control"/>
|
||||
</div>
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@container-lg">@container-lg</label>
|
||||
<input id="input-@container-lg" type="text" value="@container-large-desktop" data-var="@container-lg" class="form-control"/>
|
||||
<p class="help-block">For <code>@screen-lg-min</code> and up.</p>
|
||||
</div>
|
||||
</div>
|
||||
<h2 id="navbar">Navbar</h2>
|
||||
<p></p>
|
||||
<div class="row">
|
||||
@ -1631,6 +1662,11 @@
|
||||
<input id="input-@blockquote-small-color" type="text" value="@gray-light" data-var="@blockquote-small-color" class="form-control"/>
|
||||
<p class="help-block">Blockquote small color</p>
|
||||
</div>
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@blockquote-font-size">@blockquote-font-size</label>
|
||||
<input id="input-@blockquote-font-size" type="text" value="(@font-size-base * 1.25)" data-var="@blockquote-font-size" class="form-control"/>
|
||||
<p class="help-block">Blockquote font size</p>
|
||||
</div>
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@blockquote-border-color">@blockquote-border-color</label>
|
||||
<input id="input-@blockquote-border-color" type="text" value="@gray-lighter" data-var="@blockquote-border-color" class="form-control"/>
|
||||
@ -1656,35 +1692,4 @@
|
||||
<p class="help-block">Horizontal offset for forms and lists.</p>
|
||||
</div>
|
||||
</div>
|
||||
<h2 id="container-sizes">Container sizes</h2>
|
||||
<p>Define the maximum width of <code>.container</code> for different screen sizes.</p>
|
||||
<div class="row">
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@container-tablet">@container-tablet</label>
|
||||
<input id="input-@container-tablet" type="text" value="((720px + @grid-gutter-width))" data-var="@container-tablet" class="form-control"/>
|
||||
</div>
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@container-sm">@container-sm</label>
|
||||
<input id="input-@container-sm" type="text" value="@container-tablet" data-var="@container-sm" class="form-control"/>
|
||||
<p class="help-block">For <code>@screen-sm-min</code> and up.</p>
|
||||
</div>
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@container-desktop">@container-desktop</label>
|
||||
<input id="input-@container-desktop" type="text" value="((940px + @grid-gutter-width))" data-var="@container-desktop" class="form-control"/>
|
||||
</div>
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@container-md">@container-md</label>
|
||||
<input id="input-@container-md" type="text" value="@container-desktop" data-var="@container-md" class="form-control"/>
|
||||
<p class="help-block">For <code>@screen-md-min</code> and up.</p>
|
||||
</div>
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@container-large-desktop">@container-large-desktop</label>
|
||||
<input id="input-@container-large-desktop" type="text" value="((1140px + @grid-gutter-width))" data-var="@container-large-desktop" class="form-control"/>
|
||||
</div>
|
||||
<div class="bs-customizer-input">
|
||||
<label for="input-@container-lg">@container-lg</label>
|
||||
<input id="input-@container-lg" type="text" value="@container-large-desktop" data-var="@container-lg" class="form-control"/>
|
||||
<p class="help-block">For <code>@screen-lg-min</code> and up.</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- NOTE: DO NOT EDIT THE PRECEDING SECTION DIRECTLY! It is autogenerated via the `build-customizer-html` Grunt task using the customizer-variables.jade template.-->
|
@ -102,6 +102,7 @@
|
||||
<a href="#progress">Progress bars</a>
|
||||
<ul class="nav">
|
||||
<li><a href="#progress-basic">Basic example</a></li>
|
||||
<li><a href="#progress-label">With label</a></li>
|
||||
<li><a href="#progress-alternatives">Contextual alternatives</a></li>
|
||||
<li><a href="#progress-striped">Striped</a></li>
|
||||
<li><a href="#progress-animated">Animated</a></li>
|
||||
|
@ -14,6 +14,7 @@
|
||||
<li><a href="#dropdowns">Dropdowns</a></li>
|
||||
<li><a href="#media-queries-breakpoints">Media queries breakpoints</a></li>
|
||||
<li><a href="#grid-system">Grid system</a></li>
|
||||
<li><a href="#container-sizes">Container sizes</a></li>
|
||||
<li><a href="#navbar">Navbar</a></li>
|
||||
<li><a href="#navs">Navs</a></li>
|
||||
<li><a href="#tabs">Tabs</a></li>
|
||||
@ -39,7 +40,6 @@
|
||||
<li><a href="#code">Code</a></li>
|
||||
<li><a href="#type">Type</a></li>
|
||||
<li><a href="#miscellaneous">Miscellaneous</a></li>
|
||||
<li><a href="#container-sizes">Container sizes</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#download">Download</a></li>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<header class="navbar navbar-static-top bs-docs-nav" role="banner" id="top">
|
||||
<header class="navbar navbar-static-top bs-docs-nav" id="top" role="banner">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
|
||||
|
17
docs/assets/js/customize.min.js
vendored
17
docs/assets/js/customize.min.js
vendored
File diff suppressed because one or more lines are too long
@ -6,14 +6,14 @@
|
||||
* details, see http://creativecommons.org/licenses/by/3.0/.
|
||||
*/
|
||||
|
||||
/* jshint multistr:true */
|
||||
/* jshint multistr: true */
|
||||
|
||||
window.onload = function () { // wait for load in a dumb way because B-0
|
||||
var cw = '/*!\n' +
|
||||
' * Bootstrap v3.1.0 (http://getbootstrap.com)\n' +
|
||||
' * Copyright 2011-2014 Twitter, Inc.\n' +
|
||||
' * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n' +
|
||||
' */\n\n';
|
||||
' */\n\n'
|
||||
|
||||
function showError(msg, err) {
|
||||
$('<div id="bsCustomizerAlert" class="bs-customizer-alert">\
|
||||
@ -40,9 +40,9 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
||||
}
|
||||
|
||||
function getQueryParam(key) {
|
||||
key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, '\\$&'); // escape RegEx meta chars
|
||||
var match = location.search.match(new RegExp('[?&]' + key + '=([^&]+)(&|$)'));
|
||||
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
|
||||
key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, '\\$&') // escape RegEx meta chars
|
||||
var match = location.search.match(new RegExp('[?&]' + key + '=([^&]+)(&|$)'))
|
||||
return match && decodeURIComponent(match[1].replace(/\+/g, ' '))
|
||||
}
|
||||
|
||||
function createGist(configJson) {
|
||||
|
6
docs/assets/js/docs.min.js
vendored
6
docs/assets/js/docs.min.js
vendored
File diff suppressed because one or more lines are too long
2
docs/assets/js/raw-files.min.js
vendored
2
docs/assets/js/raw-files.min.js
vendored
File diff suppressed because one or more lines are too long
316
docs/assets/js/vendor/holder.js
vendored
316
docs/assets/js/vendor/holder.js
vendored
@ -1,35 +1,43 @@
|
||||
/*!
|
||||
|
||||
Holder - 2.2 - client side image placeholders
|
||||
(c) 2012-2013 Ivan Malopinsky / http://imsky.co
|
||||
Holder - 2.3.1 - client side image placeholders
|
||||
(c) 2012-2014 Ivan Malopinsky / http://imsky.co
|
||||
|
||||
Provided under the MIT License.
|
||||
Commercial use requires attribution.
|
||||
|
||||
*/
|
||||
|
||||
var Holder = Holder || {};
|
||||
(function (app, win) {
|
||||
|
||||
var preempted = false,
|
||||
fallback = false,
|
||||
var system_config = {
|
||||
use_svg: false,
|
||||
use_canvas: false,
|
||||
use_fallback: false
|
||||
};
|
||||
var instance_config = {};
|
||||
var preempted = false;
|
||||
canvas = document.createElement('canvas');
|
||||
var dpr = 1, bsr = 1;
|
||||
var resizable_images = [];
|
||||
|
||||
if (!canvas.getContext) {
|
||||
fallback = true;
|
||||
system_config.use_fallback = true;
|
||||
} else {
|
||||
if (canvas.toDataURL("image/png")
|
||||
.indexOf("data:image/png") < 0) {
|
||||
//Android doesn't support data URI
|
||||
fallback = true;
|
||||
system_config.use_fallback = true;
|
||||
} else {
|
||||
var ctx = canvas.getContext("2d");
|
||||
}
|
||||
}
|
||||
|
||||
if(!fallback){
|
||||
if(!!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect){
|
||||
system_config.use_svg = true;
|
||||
system_config.use_canvas = false;
|
||||
}
|
||||
|
||||
if(!system_config.use_fallback){
|
||||
dpr = window.devicePixelRatio || 1,
|
||||
bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;
|
||||
}
|
||||
@ -129,46 +137,6 @@ app.flags = {
|
||||
}
|
||||
}
|
||||
|
||||
//getElementsByClassName polyfill
|
||||
document.getElementsByClassName||(document.getElementsByClassName=function(e){var t=document,n,r,i,s=[];if(t.querySelectorAll)return t.querySelectorAll("."+e);if(t.evaluate){r=".//*[contains(concat(' ', @class, ' '), ' "+e+" ')]",n=t.evaluate(r,t,null,0,null);while(i=n.iterateNext())s.push(i)}else{n=t.getElementsByTagName("*"),r=new RegExp("(^|\\s)"+e+"(\\s|$)");for(i=0;i<n.length;i++)r.test(n[i].className)&&s.push(n[i])}return s})
|
||||
|
||||
//getComputedStyle polyfill
|
||||
window.getComputedStyle||(window.getComputedStyle=function(e){return this.el=e,this.getPropertyValue=function(t){var n=/(\-([a-z]){1})/g;return t=="float"&&(t="styleFloat"),n.test(t)&&(t=t.replace(n,function(){return arguments[2].toUpperCase()})),e.currentStyle[t]?e.currentStyle[t]:null},this})
|
||||
|
||||
//http://javascript.nwbox.com/ContentLoaded by Diego Perini with modifications
|
||||
function contentLoaded(n,t){var l="complete",s="readystatechange",u=!1,h=u,c=!0,i=n.document,a=i.documentElement,e=i.addEventListener?"addEventListener":"attachEvent",v=i.addEventListener?"removeEventListener":"detachEvent",f=i.addEventListener?"":"on",r=function(e){(e.type!=s||i.readyState==l)&&((e.type=="load"?n:i)[v](f+e.type,r,u),!h&&(h=!0)&&t.call(n,null))},o=function(){try{a.doScroll("left")}catch(n){setTimeout(o,50);return}r("poll")};if(i.readyState==l)t.call(n,"lazy");else{if(i.createEventObject&&a.doScroll){try{c=!n.frameElement}catch(y){}c&&o()}i[e](f+"DOMContentLoaded",r,u),i[e](f+s,r,u),n[e](f+"load",r,u)}}
|
||||
|
||||
//https://gist.github.com/991057 by Jed Schmidt with modifications
|
||||
function selector(a){
|
||||
a=a.match(/^(\W)?(.*)/);var b=document["getElement"+(a[1]?a[1]=="#"?"ById":"sByClassName":"sByTagName")](a[2]);
|
||||
var ret=[]; b!==null&&(b.length?ret=b:b.length===0?ret=b:ret=[b]); return ret;
|
||||
}
|
||||
|
||||
//shallow object property extend
|
||||
function extend(a,b){
|
||||
var c={};
|
||||
for(var i in a){
|
||||
if(a.hasOwnProperty(i)){
|
||||
c[i]=a[i];
|
||||
}
|
||||
}
|
||||
for(var i in b){
|
||||
if(b.hasOwnProperty(i)){
|
||||
c[i]=b[i];
|
||||
}
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
//hasOwnProperty polyfill
|
||||
if (!Object.prototype.hasOwnProperty)
|
||||
/*jshint -W001, -W103 */
|
||||
Object.prototype.hasOwnProperty = function(prop) {
|
||||
var proto = this.__proto__ || this.constructor.prototype;
|
||||
return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
|
||||
}
|
||||
/*jshint +W001, +W103 */
|
||||
|
||||
function text_size(width, height, template) {
|
||||
height = parseInt(height, 10);
|
||||
width = parseInt(width, 10);
|
||||
@ -181,20 +149,68 @@ function text_size(width, height, template) {
|
||||
}
|
||||
}
|
||||
|
||||
function draw(args) {
|
||||
var ctx = args.ctx;
|
||||
var dimensions = args.dimensions;
|
||||
var template = args.template;
|
||||
var ratio = args.ratio;
|
||||
var holder = args.holder;
|
||||
var literal = holder.textmode == "literal";
|
||||
var exact = holder.textmode == "exact";
|
||||
var svg_el = (function(){
|
||||
//Prevent IE <9 from initializing SVG renderer
|
||||
if(!window.XMLSerializer) return;
|
||||
var serializer = new XMLSerializer();
|
||||
var svg_ns = "http://www.w3.org/2000/svg"
|
||||
var svg = document.createElementNS(svg_ns, "svg");
|
||||
//IE throws an exception if this is set and Chrome requires it to be set
|
||||
if(svg.webkitMatchesSelector){
|
||||
svg.setAttribute("xmlns", "http://www.w3.org/2000/svg")
|
||||
}
|
||||
var bg_el = document.createElementNS(svg_ns, "rect")
|
||||
var text_el = document.createElementNS(svg_ns, "text")
|
||||
var textnode_el = document.createTextNode(null)
|
||||
text_el.setAttribute("text-anchor", "middle")
|
||||
text_el.appendChild(textnode_el)
|
||||
svg.appendChild(bg_el)
|
||||
svg.appendChild(text_el)
|
||||
|
||||
return function(props){
|
||||
svg.setAttribute("width",props.width);
|
||||
svg.setAttribute("height", props.height);
|
||||
bg_el.setAttribute("width", props.width);
|
||||
bg_el.setAttribute("height", props.height);
|
||||
bg_el.setAttribute("fill", props.template.background);
|
||||
text_el.setAttribute("x", props.width/2)
|
||||
text_el.setAttribute("y", props.height/2)
|
||||
textnode_el.nodeValue=props.text
|
||||
text_el.setAttribute("style", css_properties({
|
||||
"fill": props.template.foreground,
|
||||
"font-weight": "bold",
|
||||
"font-size": props.text_height+"px",
|
||||
"font-family":props.font,
|
||||
"dominant-baseline":"central"
|
||||
}))
|
||||
return serializer.serializeToString(svg)
|
||||
}
|
||||
})()
|
||||
|
||||
function css_properties(props){
|
||||
var ret = [];
|
||||
for(p in props){
|
||||
if(props.hasOwnProperty(p)){
|
||||
ret.push(p+":"+props[p])
|
||||
}
|
||||
}
|
||||
return ret.join(";")
|
||||
}
|
||||
|
||||
function draw_canvas(args) {
|
||||
var ctx = args.ctx,
|
||||
dimensions = args.dimensions,
|
||||
template = args.template,
|
||||
ratio = args.ratio,
|
||||
holder = args.holder,
|
||||
literal = holder.textmode == "literal",
|
||||
exact = holder.textmode == "exact";
|
||||
|
||||
var ts = text_size(dimensions.width, dimensions.height, template);
|
||||
var text_height = ts.height;
|
||||
var width = dimensions.width * ratio,
|
||||
height = dimensions.height * ratio;
|
||||
var font = template.font ? template.font : "sans-serif";
|
||||
var font = template.font ? template.font : "Arial,Helvetica,sans-serif";
|
||||
canvas.width = width;
|
||||
canvas.height = height;
|
||||
ctx.textAlign = "center";
|
||||
@ -222,8 +238,50 @@ function draw(args) {
|
||||
return canvas.toDataURL("image/png");
|
||||
}
|
||||
|
||||
function render(mode, el, holder, src) {
|
||||
function draw_svg(args){
|
||||
var dimensions = args.dimensions,
|
||||
template = args.template,
|
||||
holder = args.holder,
|
||||
literal = holder.textmode == "literal",
|
||||
exact = holder.textmode == "exact";
|
||||
|
||||
var ts = text_size(dimensions.width, dimensions.height, template);
|
||||
var text_height = ts.height;
|
||||
var width = dimensions.width,
|
||||
height = dimensions.height;
|
||||
|
||||
var font = template.font ? template.font : "Arial,Helvetica,sans-serif";
|
||||
var text = template.text ? template.text : (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height));
|
||||
|
||||
if (literal) {
|
||||
var dimensions = holder.dimensions;
|
||||
text = dimensions.width + "x" + dimensions.height;
|
||||
}
|
||||
else if(exact && holder.exact_dimensions){
|
||||
var dimensions = holder.exact_dimensions;
|
||||
text = (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height));
|
||||
}
|
||||
var string = svg_el({
|
||||
text: text,
|
||||
width:width,
|
||||
height:height,
|
||||
text_height:text_height,
|
||||
font:font,
|
||||
template:template
|
||||
})
|
||||
return "data:image/svg+xml;base64,"+btoa(string);
|
||||
}
|
||||
|
||||
function draw(args) {
|
||||
if(instance_config.use_canvas && !instance_config.use_svg){
|
||||
return draw_canvas(args);
|
||||
}
|
||||
else{
|
||||
return draw_svg(args);
|
||||
}
|
||||
}
|
||||
|
||||
function render(mode, el, holder, src) {
|
||||
var dimensions = holder.dimensions,
|
||||
theme = holder.theme,
|
||||
text = holder.text ? decodeURIComponent(holder.text) : holder.text;
|
||||
@ -240,11 +298,11 @@ function render(mode, el, holder, src) {
|
||||
|
||||
if (mode == "image") {
|
||||
el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption);
|
||||
if (fallback || !holder.auto) {
|
||||
if (instance_config.use_fallback || !holder.auto) {
|
||||
el.style.width = dimensions.width + "px";
|
||||
el.style.height = dimensions.height + "px";
|
||||
}
|
||||
if (fallback) {
|
||||
if (instance_config.use_fallback) {
|
||||
el.style.backgroundColor = theme.background;
|
||||
} else {
|
||||
el.setAttribute("src", draw({ctx: ctx, dimensions: dimensions, template: theme, ratio:ratio, holder: holder}));
|
||||
@ -256,7 +314,7 @@ function render(mode, el, holder, src) {
|
||||
|
||||
}
|
||||
} else if (mode == "background") {
|
||||
if (!fallback) {
|
||||
if (!instance_config.use_fallback) {
|
||||
el.style.backgroundImage = "url(" + draw({ctx:ctx, dimensions: dimensions, template: theme, ratio: ratio, holder: holder}) + ")";
|
||||
el.style.backgroundSize = dimensions.width + "px " + dimensions.height + "px";
|
||||
}
|
||||
@ -264,18 +322,21 @@ function render(mode, el, holder, src) {
|
||||
el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption);
|
||||
if (dimensions.height.slice(-1) == "%") {
|
||||
el.style.height = dimensions.height
|
||||
} else {
|
||||
} else if(holder.auto == null || !holder.auto){
|
||||
el.style.height = dimensions.height + "px"
|
||||
}
|
||||
if (dimensions.width.slice(-1) == "%") {
|
||||
el.style.width = dimensions.width
|
||||
} else {
|
||||
} else if(holder.auto == null || !holder.auto){
|
||||
el.style.width = dimensions.width + "px"
|
||||
}
|
||||
if (el.style.display == "inline" || el.style.display === "" || el.style.display == "none") {
|
||||
el.style.display = "block";
|
||||
}
|
||||
if (fallback) {
|
||||
|
||||
set_initial_dimensions(el)
|
||||
|
||||
if (instance_config.use_fallback) {
|
||||
el.style.backgroundColor = theme.background;
|
||||
} else {
|
||||
resizable_images.push(el);
|
||||
@ -290,19 +351,36 @@ function dimension_check(el, callback) {
|
||||
width: el.clientWidth
|
||||
};
|
||||
if (!dimensions.height && !dimensions.width) {
|
||||
if (el.hasAttribute("data-holder-invisible")) {
|
||||
throw new Error("Holder: placeholder is not visible");
|
||||
} else {
|
||||
el.setAttribute("data-holder-invisible", true)
|
||||
setTimeout(function () {
|
||||
callback.call(this, el)
|
||||
}, 1)
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
el.removeAttribute("data-holder-invisible")
|
||||
el.setAttribute("data-holder-invisible", true)
|
||||
callback.call(this, el)
|
||||
}
|
||||
else{
|
||||
el.removeAttribute("data-holder-invisible")
|
||||
return dimensions;
|
||||
}
|
||||
}
|
||||
|
||||
function set_initial_dimensions(el){
|
||||
if(el.holder_data){
|
||||
var dimensions = dimension_check(el, app.invisible_error_fn( set_initial_dimensions))
|
||||
if(dimensions){
|
||||
var holder = el.holder_data;
|
||||
holder.initial_dimensions = dimensions;
|
||||
holder.fluid_data = {
|
||||
fluid_height: holder.dimensions.height.slice(-1) == "%",
|
||||
fluid_width: holder.dimensions.width.slice(-1) == "%",
|
||||
mode: null
|
||||
}
|
||||
if(holder.fluid_data.fluid_width && !holder.fluid_data.fluid_height){
|
||||
holder.fluid_data.mode = "width"
|
||||
holder.fluid_data.ratio = holder.initial_dimensions.width / parseFloat(holder.dimensions.height)
|
||||
}
|
||||
else if(!holder.fluid_data.fluid_width && holder.fluid_data.fluid_height){
|
||||
holder.fluid_data.mode = "height";
|
||||
holder.fluid_data.ratio = parseFloat(holder.dimensions.width) / holder.initial_dimensions.height
|
||||
}
|
||||
}
|
||||
}
|
||||
return dimensions;
|
||||
}
|
||||
|
||||
function resizable_update(element) {
|
||||
@ -319,9 +397,19 @@ function resizable_update(element) {
|
||||
var el = images[i]
|
||||
if (el.holder_data) {
|
||||
var holder = el.holder_data;
|
||||
var dimensions = dimension_check(el, resizable_update)
|
||||
var dimensions = dimension_check(el, app.invisible_error_fn( resizable_update))
|
||||
if(dimensions){
|
||||
if(holder.fluid){
|
||||
if(holder.auto){
|
||||
switch(holder.fluid_data.mode){
|
||||
case "width":
|
||||
dimensions.height = dimensions.width / holder.fluid_data.ratio;
|
||||
break;
|
||||
case "height":
|
||||
dimensions.width = dimensions.height * holder.fluid_data.ratio;
|
||||
break;
|
||||
}
|
||||
}
|
||||
el.setAttribute("src", draw({
|
||||
ctx: ctx,
|
||||
dimensions: dimensions,
|
||||
@ -350,7 +438,7 @@ function parse_flags(flags, options) {
|
||||
theme: extend(settings.themes.gray, {})
|
||||
};
|
||||
var render = false;
|
||||
for (sl = flags.length, j = 0; j < sl; j++) {
|
||||
for (var fl = flags.length, j = 0; j < fl; j++) {
|
||||
var flag = flags[j];
|
||||
if (app.flags.dimensions.match(flag)) {
|
||||
render = true;
|
||||
@ -385,10 +473,20 @@ for (var flag in app.flags) {
|
||||
return val.match(this.regex)
|
||||
}
|
||||
}
|
||||
|
||||
app.invisible_error_fn = function(fn){
|
||||
return function(el){
|
||||
if(el.hasAttribute("data-holder-invisible")){
|
||||
throw new Error("Holder: invisible placeholder")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
app.add_theme = function (name, theme) {
|
||||
name != null && theme != null && (settings.themes[name] = theme);
|
||||
return app;
|
||||
};
|
||||
|
||||
app.add_image = function (src, el) {
|
||||
var node = selector(el);
|
||||
if (node.length) {
|
||||
@ -400,21 +498,31 @@ app.add_image = function (src, el) {
|
||||
}
|
||||
return app;
|
||||
};
|
||||
|
||||
app.run = function (o) {
|
||||
instance_config = extend({}, system_config)
|
||||
preempted = true;
|
||||
|
||||
|
||||
var options = extend(settings, o),
|
||||
images = [],
|
||||
imageNodes = [],
|
||||
bgnodes = [];
|
||||
|
||||
if(options.use_canvas != null && options.use_canvas){
|
||||
instance_config.use_canvas = true;
|
||||
instance_config.use_svg = false;
|
||||
}
|
||||
|
||||
if (typeof (options.images) == "string") {
|
||||
imageNodes = selector(options.images);
|
||||
} else if (window.NodeList && options.images instanceof window.NodeList) {
|
||||
imageNodes = options.images;
|
||||
} else if (window.Node && options.images instanceof window.Node) {
|
||||
imageNodes = [options.images];
|
||||
} else if(window.HTMLCollection && options.images instanceof window.HTMLCollection){
|
||||
imageNodes = options.images
|
||||
}
|
||||
|
||||
|
||||
if (typeof (options.bgnodes) == "string") {
|
||||
bgnodes = selector(options.bgnodes);
|
||||
} else if (window.NodeList && options.elements instanceof window.NodeList) {
|
||||
@ -469,8 +577,7 @@ app.run = function (o) {
|
||||
src = attr_datasrc;
|
||||
}
|
||||
if (src) {
|
||||
var holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1)
|
||||
.split("/"), options);
|
||||
var holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1).split("/"), options);
|
||||
if (holder) {
|
||||
if (holder.fluid) {
|
||||
render("fluid", images[i], holder, src)
|
||||
@ -482,6 +589,7 @@ app.run = function (o) {
|
||||
}
|
||||
return app;
|
||||
};
|
||||
|
||||
contentLoaded(win, function () {
|
||||
if (window.addEventListener) {
|
||||
window.addEventListener("resize", resizable_update, false);
|
||||
@ -489,7 +597,7 @@ contentLoaded(win, function () {
|
||||
} else {
|
||||
window.attachEvent("onresize", resizable_update)
|
||||
}
|
||||
preempted || app.run();
|
||||
preempted || app.run({});
|
||||
});
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define([], function () {
|
||||
@ -497,4 +605,44 @@ if (typeof define === "function" && define.amd) {
|
||||
});
|
||||
}
|
||||
|
||||
//github.com/davidchambers/Base64.js
|
||||
(function(){function t(t){this.message=t}var e="undefined"!=typeof exports?exports:this,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";t.prototype=Error(),t.prototype.name="InvalidCharacterError",e.btoa||(e.btoa=function(e){for(var o,n,a=0,i=r,c="";e.charAt(0|a)||(i="=",a%1);c+=i.charAt(63&o>>8-8*(a%1))){if(n=e.charCodeAt(a+=.75),n>255)throw new t("'btoa' failed");o=o<<8|n}return c}),e.atob||(e.atob=function(e){if(e=e.replace(/=+$/,""),1==e.length%4)throw new t("'atob' failed");for(var o,n,a=0,i=0,c="";n=e.charAt(i++);~n&&(o=a%4?64*o+n:n,a++%4)?c+=String.fromCharCode(255&o>>(6&-2*a)):0)n=r.indexOf(n);return c})})();
|
||||
|
||||
//getElementsByClassName polyfill
|
||||
document.getElementsByClassName||(document.getElementsByClassName=function(e){var t=document,n,r,i,s=[];if(t.querySelectorAll)return t.querySelectorAll("."+e);if(t.evaluate){r=".//*[contains(concat(' ', @class, ' '), ' "+e+" ')]",n=t.evaluate(r,t,null,0,null);while(i=n.iterateNext())s.push(i)}else{n=t.getElementsByTagName("*"),r=new RegExp("(^|\\s)"+e+"(\\s|$)");for(i=0;i<n.length;i++)r.test(n[i].className)&&s.push(n[i])}return s})
|
||||
|
||||
//getComputedStyle polyfill
|
||||
window.getComputedStyle||(window.getComputedStyle=function(e){return this.el=e,this.getPropertyValue=function(t){var n=/(\-([a-z]){1})/g;return t=="float"&&(t="styleFloat"),n.test(t)&&(t=t.replace(n,function(){return arguments[2].toUpperCase()})),e.currentStyle[t]?e.currentStyle[t]:null},this})
|
||||
|
||||
//http://javascript.nwbox.com/ContentLoaded by Diego Perini with modifications
|
||||
function contentLoaded(n,t){var l="complete",s="readystatechange",u=!1,h=u,c=!0,i=n.document,a=i.documentElement,e=i.addEventListener?"addEventListener":"attachEvent",v=i.addEventListener?"removeEventListener":"detachEvent",f=i.addEventListener?"":"on",r=function(e){(e.type!=s||i.readyState==l)&&((e.type=="load"?n:i)[v](f+e.type,r,u),!h&&(h=!0)&&t.call(n,null))},o=function(){try{a.doScroll("left")}catch(n){setTimeout(o,50);return}r("poll")};if(i.readyState==l)t.call(n,"lazy");else{if(i.createEventObject&&a.doScroll){try{c=!n.frameElement}catch(y){}c&&o()}i[e](f+"DOMContentLoaded",r,u),i[e](f+s,r,u),n[e](f+"load",r,u)}}
|
||||
|
||||
//https://gist.github.com/991057 by Jed Schmidt with modifications
|
||||
function selector(a,b){var a=a.match(/^(\W)?(.*)/),b=b||document,c=b["getElement"+(a[1]?"#"==a[1]?"ById":"sByClassName":"sByTagName")],d=c.call(b,a[2]),e=[];return null!==d&&(e=d.length||0===d.length?d:[d]),e}
|
||||
|
||||
//shallow object property extend
|
||||
function extend(a,b){
|
||||
var c={};
|
||||
for(var i in a){
|
||||
if(a.hasOwnProperty(i)){
|
||||
c[i]=a[i];
|
||||
}
|
||||
}
|
||||
for(var i in b){
|
||||
if(b.hasOwnProperty(i)){
|
||||
c[i]=b[i];
|
||||
}
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
//hasOwnProperty polyfill
|
||||
if (!Object.prototype.hasOwnProperty)
|
||||
/*jshint -W001, -W103 */
|
||||
Object.prototype.hasOwnProperty = function(prop) {
|
||||
var proto = this.__proto__ || this.constructor.prototype;
|
||||
return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
|
||||
}
|
||||
/*jshint +W001, +W103 */
|
||||
|
||||
})(Holder, window);
|
||||
|
148
docs/assets/js/vendor/jszip.js
vendored
148
docs/assets/js/vendor/jszip.js
vendored
@ -1,5 +1,15 @@
|
||||
(function(e){if("function"==typeof bootstrap)bootstrap("jszip",e);else if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else if("undefined"!=typeof ses){if(!ses.ok())return;ses.makeJSZip=e}else"undefined"!=typeof window?window.JSZip=e():global.JSZip=e()})(function(){var define,ses,bootstrap,module,exports;
|
||||
return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||||
/*!
|
||||
|
||||
JSZip - A Javascript class for generating and reading zip files
|
||||
<http://stuartk.com/jszip>
|
||||
|
||||
(c) 2009-2012 Stuart Knightley <stuart [at] stuartk.com>
|
||||
Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.
|
||||
|
||||
JSZip uses the library zlib.js released under the following license :
|
||||
zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License
|
||||
*/
|
||||
!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.JSZip=e():"undefined"!=typeof global?global.JSZip=e():"undefined"!=typeof self&&(self.JSZip=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||||
'use strict';
|
||||
// private property
|
||||
var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||
@ -225,7 +235,7 @@ DataReader.prototype = {
|
||||
};
|
||||
module.exports = DataReader;
|
||||
|
||||
},{"./utils":15}],5:[function(require,module,exports){
|
||||
},{"./utils":14}],5:[function(require,module,exports){
|
||||
'use strict';
|
||||
exports.base64 = false;
|
||||
exports.binary = false;
|
||||
@ -252,16 +262,9 @@ exports.uncompress = function(input) {
|
||||
return inflate.decompress();
|
||||
};
|
||||
|
||||
},{"zlibjs/bin/rawdeflate.min":20,"zlibjs/bin/rawinflate.min":21}],7:[function(require,module,exports){
|
||||
},{"zlibjs/bin/rawdeflate.min":19,"zlibjs/bin/rawinflate.min":20}],7:[function(require,module,exports){
|
||||
'use strict';
|
||||
/**
|
||||
|
||||
JSZip - A Javascript class for generating and reading zip files
|
||||
<http://stuartk.com/jszip>
|
||||
|
||||
(c) 2009-2012 Stuart Knightley <stuart [at] stuartk.com>
|
||||
Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.
|
||||
|
||||
Usage:
|
||||
zip = new JSZip();
|
||||
zip.file("hello.txt", "Hello, World!").file("tempfile", "nothing");
|
||||
@ -306,12 +309,13 @@ function JSZip(data, options) {
|
||||
JSZip.prototype = require('./object');
|
||||
JSZip.prototype.load = require('./load');
|
||||
JSZip.support = require('./support');
|
||||
JSZip.defaults = require('./defaults');
|
||||
JSZip.utils = require('./utils');
|
||||
JSZip.base64 = require('./base64');
|
||||
JSZip.compressions = require('./compressions');
|
||||
module.exports = JSZip;
|
||||
|
||||
},{"./base64":1,"./compressions":3,"./load":8,"./object":10,"./support":13,"./utils":15}],8:[function(require,module,exports){
|
||||
},{"./base64":1,"./compressions":3,"./defaults":5,"./load":8,"./object":9,"./support":12,"./utils":14}],8:[function(require,module,exports){
|
||||
'use strict';
|
||||
var base64 = require('./base64');
|
||||
var ZipEntries = require('./zipEntries');
|
||||
@ -337,29 +341,7 @@ module.exports = function(data, options) {
|
||||
return this;
|
||||
};
|
||||
|
||||
},{"./base64":1,"./zipEntries":16}],9:[function(require,module,exports){
|
||||
'use strict';
|
||||
var Uint8ArrayReader = require('./uint8ArrayReader');
|
||||
|
||||
function NodeBufferReader(data) {
|
||||
this.data = data;
|
||||
this.length = this.data.length;
|
||||
this.index = 0;
|
||||
}
|
||||
NodeBufferReader.prototype = new Uint8ArrayReader();
|
||||
|
||||
/**
|
||||
* @see DataReader.readData
|
||||
*/
|
||||
NodeBufferReader.prototype.readData = function(size) {
|
||||
this.checkOffset(size);
|
||||
var result = this.data.slice(this.index, this.index + size);
|
||||
this.index += size;
|
||||
return result;
|
||||
};
|
||||
module.exports = NodeBufferReader;
|
||||
|
||||
},{"./uint8ArrayReader":14}],10:[function(require,module,exports){
|
||||
},{"./base64":1,"./zipEntries":15}],9:[function(require,module,exports){
|
||||
'use strict';
|
||||
var support = require('./support');
|
||||
var utils = require('./utils');
|
||||
@ -714,7 +696,9 @@ var generateZipParts = function(name, file, compressedObject, offset) {
|
||||
useUTF8 = utfEncodedFileName !== file.name,
|
||||
o = file.options,
|
||||
dosTime,
|
||||
dosDate;
|
||||
dosDate,
|
||||
extraFields = "",
|
||||
unicodePathExtraField = "";
|
||||
|
||||
// date
|
||||
// @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html
|
||||
@ -733,6 +717,32 @@ var generateZipParts = function(name, file, compressedObject, offset) {
|
||||
dosDate = dosDate << 5;
|
||||
dosDate = dosDate | o.date.getDate();
|
||||
|
||||
if (useUTF8) {
|
||||
// set the unicode path extra field. unzip needs at least one extra
|
||||
// field to correctly handle unicode path, so using the path is as good
|
||||
// as any other information. This could improve the situation with
|
||||
// other archive managers too.
|
||||
// This field is usually used without the utf8 flag, with a non
|
||||
// unicode path in the header (winrar, winzip). This helps (a bit)
|
||||
// with the messy Windows' default compressed folders feature but
|
||||
// breaks on p7zip which doesn't seek the unicode path extra field.
|
||||
// So for now, UTF-8 everywhere !
|
||||
unicodePathExtraField =
|
||||
// Version
|
||||
decToHex(1, 1) +
|
||||
// NameCRC32
|
||||
decToHex(this.crc32(utfEncodedFileName), 4) +
|
||||
// UnicodeName
|
||||
utfEncodedFileName;
|
||||
|
||||
extraFields +=
|
||||
// Info-ZIP Unicode Path Extra Field
|
||||
"\x75\x70" +
|
||||
// size
|
||||
decToHex(unicodePathExtraField.length, 2) +
|
||||
// content
|
||||
unicodePathExtraField;
|
||||
}
|
||||
|
||||
var header = "";
|
||||
|
||||
@ -756,10 +766,10 @@ var generateZipParts = function(name, file, compressedObject, offset) {
|
||||
// file name length
|
||||
header += decToHex(utfEncodedFileName.length, 2);
|
||||
// extra field length
|
||||
header += "\x00\x00";
|
||||
header += decToHex(extraFields.length, 2);
|
||||
|
||||
|
||||
var fileRecord = signature.LOCAL_FILE_HEADER + header + utfEncodedFileName;
|
||||
var fileRecord = signature.LOCAL_FILE_HEADER + header + utfEncodedFileName + extraFields;
|
||||
|
||||
var dirRecord = signature.CENTRAL_FILE_HEADER +
|
||||
// version made by (00: DOS)
|
||||
@ -777,7 +787,9 @@ var generateZipParts = function(name, file, compressedObject, offset) {
|
||||
// relative offset of local header
|
||||
decToHex(offset, 4) +
|
||||
// file name
|
||||
utfEncodedFileName;
|
||||
utfEncodedFileName +
|
||||
// extra field
|
||||
extraFields;
|
||||
|
||||
|
||||
return {
|
||||
@ -1270,7 +1282,7 @@ var out = {
|
||||
};
|
||||
module.exports = out;
|
||||
|
||||
},{"./base64":1,"./compressedObject":2,"./compressions":3,"./defaults":5,"./nodeBuffer":18,"./signature":11,"./support":13,"./utils":15}],11:[function(require,module,exports){
|
||||
},{"./base64":1,"./compressedObject":2,"./compressions":3,"./defaults":5,"./nodeBuffer":17,"./signature":10,"./support":12,"./utils":14}],10:[function(require,module,exports){
|
||||
'use strict';
|
||||
exports.LOCAL_FILE_HEADER = "PK\x03\x04";
|
||||
exports.CENTRAL_FILE_HEADER = "PK\x01\x02";
|
||||
@ -1279,7 +1291,7 @@ exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07";
|
||||
exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06";
|
||||
exports.DATA_DESCRIPTOR = "PK\x07\x08";
|
||||
|
||||
},{}],12:[function(require,module,exports){
|
||||
},{}],11:[function(require,module,exports){
|
||||
'use strict';
|
||||
var DataReader = require('./dataReader');
|
||||
var utils = require('./utils');
|
||||
@ -1317,7 +1329,7 @@ StringReader.prototype.readData = function(size) {
|
||||
};
|
||||
module.exports = StringReader;
|
||||
|
||||
},{"./dataReader":4,"./utils":15}],13:[function(require,module,exports){
|
||||
},{"./dataReader":4,"./utils":14}],12:[function(require,module,exports){
|
||||
var process=require("__browserify_process");'use strict';
|
||||
exports.base64 = true;
|
||||
exports.array = true;
|
||||
@ -1351,7 +1363,7 @@ else {
|
||||
}
|
||||
}
|
||||
|
||||
},{"__browserify_process":19}],14:[function(require,module,exports){
|
||||
},{"__browserify_process":18}],13:[function(require,module,exports){
|
||||
'use strict';
|
||||
var DataReader = require('./dataReader');
|
||||
|
||||
@ -1396,7 +1408,7 @@ Uint8ArrayReader.prototype.readData = function(size) {
|
||||
};
|
||||
module.exports = Uint8ArrayReader;
|
||||
|
||||
},{"./dataReader":4}],15:[function(require,module,exports){
|
||||
},{"./dataReader":4}],14:[function(require,module,exports){
|
||||
'use strict';
|
||||
var support = require('./support');
|
||||
var compressions = require('./compressions');
|
||||
@ -1749,7 +1761,7 @@ exports.isRegExp = function (object) {
|
||||
};
|
||||
|
||||
|
||||
},{"./compressions":3,"./nodeBuffer":18,"./support":13}],16:[function(require,module,exports){
|
||||
},{"./compressions":3,"./nodeBuffer":17,"./support":12}],15:[function(require,module,exports){
|
||||
'use strict';
|
||||
var StringReader = require('./stringReader');
|
||||
var NodeBufferReader = require('./nodeBufferReader');
|
||||
@ -1947,7 +1959,7 @@ ZipEntries.prototype = {
|
||||
// }}} end of ZipEntries
|
||||
module.exports = ZipEntries;
|
||||
|
||||
},{"./nodeBufferReader":9,"./signature":11,"./stringReader":12,"./support":13,"./uint8ArrayReader":14,"./utils":15,"./zipEntry":17}],17:[function(require,module,exports){
|
||||
},{"./nodeBufferReader":17,"./signature":10,"./stringReader":11,"./support":12,"./uint8ArrayReader":13,"./utils":14,"./zipEntry":16}],16:[function(require,module,exports){
|
||||
'use strict';
|
||||
var StringReader = require('./stringReader');
|
||||
var utils = require('./utils');
|
||||
@ -2166,14 +2178,43 @@ ZipEntry.prototype = {
|
||||
if (this.useUTF8()) {
|
||||
this.fileName = jszipProto.utf8decode(this.fileName);
|
||||
this.fileComment = jszipProto.utf8decode(this.fileComment);
|
||||
} else {
|
||||
var upath = this.findExtraFieldUnicodePath();
|
||||
if (upath !== null) {
|
||||
this.fileName = upath;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Find the unicode path declared in the extra field, if any.
|
||||
* @return {String} the unicode path, null otherwise.
|
||||
*/
|
||||
findExtraFieldUnicodePath: function() {
|
||||
var upathField = this.extraFields[0x7075];
|
||||
if (upathField) {
|
||||
var extraReader = new StringReader(upathField.value);
|
||||
|
||||
// wrong version
|
||||
if (extraReader.readInt(1) !== 1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// the crc of the filename changed, this field is out of date.
|
||||
if (jszipProto.crc32(this.fileName) !== extraReader.readInt(4)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return jszipProto.utf8decode(extraReader.readString(upathField.length - 5));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
module.exports = ZipEntry;
|
||||
|
||||
},{"./compressedObject":2,"./object":10,"./stringReader":12,"./utils":15}],18:[function(require,module,exports){
|
||||
},{"./compressedObject":2,"./object":9,"./stringReader":11,"./utils":14}],17:[function(require,module,exports){
|
||||
|
||||
},{}],19:[function(require,module,exports){
|
||||
},{}],18:[function(require,module,exports){
|
||||
// shim for using process in browser
|
||||
|
||||
var process = module.exports = {};
|
||||
@ -2192,7 +2233,8 @@ process.nextTick = (function () {
|
||||
if (canPost) {
|
||||
var queue = [];
|
||||
window.addEventListener('message', function (ev) {
|
||||
if (ev.source === window && ev.data === 'process-tick') {
|
||||
var source = ev.source;
|
||||
if ((source === window || source === null) && ev.data === 'process-tick') {
|
||||
ev.stopPropagation();
|
||||
if (queue.length > 0) {
|
||||
var fn = queue.shift();
|
||||
@ -2227,7 +2269,7 @@ process.chdir = function (dir) {
|
||||
throw new Error('process.chdir is not supported');
|
||||
};
|
||||
|
||||
},{}],20:[function(require,module,exports){
|
||||
},{}],19:[function(require,module,exports){
|
||||
/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */(function() {'use strict';var n=void 0,u=!0,aa=this;function ba(e,d){var c=e.split("."),f=aa;!(c[0]in f)&&f.execScript&&f.execScript("var "+c[0]);for(var a;c.length&&(a=c.shift());)!c.length&&d!==n?f[a]=d:f=f[a]?f[a]:f[a]={}};var C="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array;function K(e,d){this.index="number"===typeof d?d:0;this.d=0;this.buffer=e instanceof(C?Uint8Array:Array)?e:new (C?Uint8Array:Array)(32768);if(2*this.buffer.length<=this.index)throw Error("invalid index");this.buffer.length<=this.index&&ca(this)}function ca(e){var d=e.buffer,c,f=d.length,a=new (C?Uint8Array:Array)(f<<1);if(C)a.set(d);else for(c=0;c<f;++c)a[c]=d[c];return e.buffer=a}
|
||||
K.prototype.a=function(e,d,c){var f=this.buffer,a=this.index,b=this.d,k=f[a],m;c&&1<d&&(e=8<d?(L[e&255]<<24|L[e>>>8&255]<<16|L[e>>>16&255]<<8|L[e>>>24&255])>>32-d:L[e]>>8-d);if(8>d+b)k=k<<d|e,b+=d;else for(m=0;m<d;++m)k=k<<1|e>>d-m-1&1,8===++b&&(b=0,f[a++]=L[k],k=0,a===f.length&&(f=ca(this)));f[a]=k;this.buffer=f;this.d=b;this.index=a};K.prototype.finish=function(){var e=this.buffer,d=this.index,c;0<this.d&&(e[d]<<=8-this.d,e[d]=L[e[d]],d++);C?c=e.subarray(0,d):(e.length=d,c=e);return c};
|
||||
var ga=new (C?Uint8Array:Array)(256),M;for(M=0;256>M;++M){for(var R=M,S=R,ha=7,R=R>>>1;R;R>>>=1)S<<=1,S|=R&1,--ha;ga[M]=(S<<ha&255)>>>0}var L=ga;function ja(e){this.buffer=new (C?Uint16Array:Array)(2*e);this.length=0}ja.prototype.getParent=function(e){return 2*((e-2)/4|0)};ja.prototype.push=function(e,d){var c,f,a=this.buffer,b;c=this.length;a[this.length++]=d;for(a[this.length++]=e;0<c;)if(f=this.getParent(c),a[c]>a[f])b=a[c],a[c]=a[f],a[f]=b,b=a[c+1],a[c+1]=a[f+1],a[f+1]=b,c=f;else break;return this.length};
|
||||
@ -2250,9 +2292,9 @@ function Ha(e,d,c){var f,a,b=0,k,m,g,p,v=e.length;m=0;p=c.length;a:for(;m<p;m++)
|
||||
function oa(e,d){var c=e.length,f=new ja(572),a=new (C?Uint8Array:Array)(c),b,k,m,g,p;if(!C)for(g=0;g<c;g++)a[g]=0;for(g=0;g<c;++g)0<e[g]&&f.push(g,e[g]);b=Array(f.length/2);k=new (C?Uint32Array:Array)(f.length/2);if(1===b.length)return a[f.pop().index]=1,a;g=0;for(p=f.length/2;g<p;++g)b[g]=f.pop(),k[g]=b[g].value;m=Ja(k,k.length,d);g=0;for(p=b.length;g<p;++g)a[b[g].index]=m[g];return a}
|
||||
function Ja(e,d,c){function f(a){var b=g[a][p[a]];b===d?(f(a+1),f(a+1)):--k[b];++p[a]}var a=new (C?Uint16Array:Array)(c),b=new (C?Uint8Array:Array)(c),k=new (C?Uint8Array:Array)(d),m=Array(c),g=Array(c),p=Array(c),v=(1<<c)-d,x=1<<c-1,l,h,q,t,w;a[c-1]=d;for(h=0;h<c;++h)v<x?b[h]=0:(b[h]=1,v-=x),v<<=1,a[c-2-h]=(a[c-1-h]/2|0)+d;a[0]=b[0];m[0]=Array(a[0]);g[0]=Array(a[0]);for(h=1;h<c;++h)a[h]>2*a[h-1]+b[h]&&(a[h]=2*a[h-1]+b[h]),m[h]=Array(a[h]),g[h]=Array(a[h]);for(l=0;l<d;++l)k[l]=c;for(q=0;q<a[c-1];++q)m[c-
|
||||
1][q]=e[q],g[c-1][q]=q;for(l=0;l<c;++l)p[l]=0;1===b[c-1]&&(--k[0],++p[c-1]);for(h=c-2;0<=h;--h){t=l=0;w=p[h+1];for(q=0;q<a[h];q++)t=m[h+1][w]+m[h+1][w+1],t>e[l]?(m[h][q]=t,g[h][q]=d,w+=2):(m[h][q]=e[l],g[h][q]=l,++l);p[h]=0;1===b[h]&&f(h)}return k}
|
||||
function pa(e){var d=new (C?Uint16Array:Array)(e.length),c=[],f=[],a=0,b,k,m,g;b=0;for(k=e.length;b<k;b++)c[e[b]]=(c[e[b]]|0)+1;b=1;for(k=16;b<=k;b++)f[b]=a,a+=c[b]|0,a<<=1;b=0;for(k=e.length;b<k;b++){a=f[e[b]];f[e[b]]+=1;m=d[b]=0;for(g=e[b];m<g;m++)d[b]=d[b]<<1|a&1,a>>>=1}return d};ba("Zlib.RawDeflate",ka);ba("Zlib.RawDeflate.prototype.compress",ka.prototype.h);var Ka={NONE:0,FIXED:1,DYNAMIC:ma},V,La,$,Ma;if(Object.keys)V=Object.keys(Ka);else for(La in V=[],$=0,Ka)V[$++]=La;$=0;for(Ma=V.length;$<Ma;++$)La=V[$],ba("Zlib.RawDeflate.CompressionType."+La,Ka[La]);}).call(this); //@ sourceMappingURL=rawdeflate.min.js.map
|
||||
function pa(e){var d=new (C?Uint16Array:Array)(e.length),c=[],f=[],a=0,b,k,m,g;b=0;for(k=e.length;b<k;b++)c[e[b]]=(c[e[b]]|0)+1;b=1;for(k=16;b<=k;b++)f[b]=a,a+=c[b]|0,a<<=1;b=0;for(k=e.length;b<k;b++){a=f[e[b]];f[e[b]]+=1;m=d[b]=0;for(g=e[b];m<g;m++)d[b]=d[b]<<1|a&1,a>>>=1}return d};ba("Zlib.RawDeflate",ka);ba("Zlib.RawDeflate.prototype.compress",ka.prototype.h);var Ka={NONE:0,FIXED:1,DYNAMIC:ma},V,La,$,Ma;if(Object.keys)V=Object.keys(Ka);else for(La in V=[],$=0,Ka)V[$++]=La;$=0;for(Ma=V.length;$<Ma;++$)La=V[$],ba("Zlib.RawDeflate.CompressionType."+La,Ka[La]);}).call(this);
|
||||
|
||||
},{}],21:[function(require,module,exports){
|
||||
},{}],20:[function(require,module,exports){
|
||||
/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */(function() {'use strict';var l=void 0,p=this;function q(c,d){var a=c.split("."),b=p;!(a[0]in b)&&b.execScript&&b.execScript("var "+a[0]);for(var e;a.length&&(e=a.shift());)!a.length&&d!==l?b[e]=d:b=b[e]?b[e]:b[e]={}};var r="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array;function u(c){var d=c.length,a=0,b=Number.POSITIVE_INFINITY,e,f,g,h,k,m,s,n,t;for(n=0;n<d;++n)c[n]>a&&(a=c[n]),c[n]<b&&(b=c[n]);e=1<<a;f=new (r?Uint32Array:Array)(e);g=1;h=0;for(k=2;g<=a;){for(n=0;n<d;++n)if(c[n]===g){m=0;s=h;for(t=0;t<g;++t)m=m<<1|s&1,s>>=1;for(t=m;t<e;t+=k)f[t]=g<<16|n;++h}++g;h<<=1;k<<=1}return[f,a,b]};function v(c,d){this.g=[];this.h=32768;this.c=this.f=this.d=this.k=0;this.input=r?new Uint8Array(c):c;this.l=!1;this.i=w;this.p=!1;if(d||!(d={}))d.index&&(this.d=d.index),d.bufferSize&&(this.h=d.bufferSize),d.bufferType&&(this.i=d.bufferType),d.resize&&(this.p=d.resize);switch(this.i){case x:this.a=32768;this.b=new (r?Uint8Array:Array)(32768+this.h+258);break;case w:this.a=0;this.b=new (r?Uint8Array:Array)(this.h);this.e=this.u;this.m=this.r;this.j=this.s;break;default:throw Error("invalid inflate mode");
|
||||
}}var x=0,w=1;
|
||||
v.prototype.t=function(){for(;!this.l;){var c=y(this,3);c&1&&(this.l=!0);c>>>=1;switch(c){case 0:var d=this.input,a=this.d,b=this.b,e=this.a,f=l,g=l,h=l,k=b.length,m=l;this.c=this.f=0;f=d[a++];if(f===l)throw Error("invalid uncompressed block header: LEN (first byte)");g=f;f=d[a++];if(f===l)throw Error("invalid uncompressed block header: LEN (second byte)");g|=f<<8;f=d[a++];if(f===l)throw Error("invalid uncompressed block header: NLEN (first byte)");h=f;f=d[a++];if(f===l)throw Error("invalid uncompressed block header: NLEN (second byte)");h|=
|
||||
@ -2267,7 +2309,7 @@ v.prototype.s=function(c,d){var a=this.b,b=this.a;this.n=c;for(var e=a.length,f,
|
||||
v.prototype.e=function(){var c=new (r?Uint8Array:Array)(this.a-32768),d=this.a-32768,a,b,e=this.b;if(r)c.set(e.subarray(32768,c.length));else{a=0;for(b=c.length;a<b;++a)c[a]=e[a+32768]}this.g.push(c);this.k+=c.length;if(r)e.set(e.subarray(d,d+32768));else for(a=0;32768>a;++a)e[a]=e[d+a];this.a=32768;return e};
|
||||
v.prototype.u=function(c){var d,a=this.input.length/this.d+1|0,b,e,f,g=this.input,h=this.b;c&&("number"===typeof c.o&&(a=c.o),"number"===typeof c.q&&(a+=c.q));2>a?(b=(g.length-this.d)/this.n[2],f=258*(b/2)|0,e=f<h.length?h.length+f:h.length<<1):e=h.length*a;r?(d=new Uint8Array(e),d.set(h)):d=h;return this.b=d};
|
||||
v.prototype.m=function(){var c=0,d=this.b,a=this.g,b,e=new (r?Uint8Array:Array)(this.k+(this.a-32768)),f,g,h,k;if(0===a.length)return r?this.b.subarray(32768,this.a):this.b.slice(32768,this.a);f=0;for(g=a.length;f<g;++f){b=a[f];h=0;for(k=b.length;h<k;++h)e[c++]=b[h]}f=32768;for(g=this.a;f<g;++f)e[c++]=d[f];this.g=[];return this.buffer=e};
|
||||
v.prototype.r=function(){var c,d=this.a;r?this.p?(c=new Uint8Array(d),c.set(this.b.subarray(0,d))):c=this.b.subarray(0,d):(this.b.length>d&&(this.b.length=d),c=this.b);return this.buffer=c};q("Zlib.RawInflate",v);q("Zlib.RawInflate.prototype.decompress",v.prototype.t);var T={ADAPTIVE:w,BLOCK:x},U,V,W,X;if(Object.keys)U=Object.keys(T);else for(V in U=[],W=0,T)U[W++]=V;W=0;for(X=U.length;W<X;++W)V=U[W],q("Zlib.RawInflate.BufferType."+V,T[V]);}).call(this); //@ sourceMappingURL=rawinflate.min.js.map
|
||||
v.prototype.r=function(){var c,d=this.a;r?this.p?(c=new Uint8Array(d),c.set(this.b.subarray(0,d))):c=this.b.subarray(0,d):(this.b.length>d&&(this.b.length=d),c=this.b);return this.buffer=c};q("Zlib.RawInflate",v);q("Zlib.RawInflate.prototype.decompress",v.prototype.t);var T={ADAPTIVE:w,BLOCK:x},U,V,W,X;if(Object.keys)U=Object.keys(T);else for(V in U=[],W=0,T)U[W++]=V;W=0;for(X=U.length;W<X;++W)V=U[W],q("Zlib.RawInflate.BufferType."+V,T[V]);}).call(this);
|
||||
|
||||
},{}]},{},[7])
|
||||
(7)
|
||||
|
@ -2261,6 +2261,23 @@ body { padding-bottom: 70px; }
|
||||
<span class="sr-only">60% Complete</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endhighlight %}
|
||||
|
||||
<h3 id="progress-label">With label</h3>
|
||||
<p>Remove the <code>.sr-only</code> class from within the progress bar to show a visible percentage. For low percentages, consider adding a <code>min-width</code> to ensure the label's text is fully visible.</p>
|
||||
<div class="bs-example">
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;">
|
||||
60%
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% highlight html %}
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;">
|
||||
60%
|
||||
</div>
|
||||
</div>
|
||||
{% endhighlight %}
|
||||
|
||||
<h3 id="progress-alternatives">Contextual alternatives</h3>
|
||||
|
@ -76,11 +76,6 @@ lead: "Global CSS settings, fundamental HTML elements styled and enhanced with e
|
||||
</ul>
|
||||
<p>Look to the examples for applying these principles to your code.</p>
|
||||
|
||||
<div class="bs-callout bs-callout-info">
|
||||
<h4>Grids and full-width layouts</h4>
|
||||
<p>Folks looking to create fully fluid layouts (meaning your site stretches the entire width of the viewport) must wrap their grid content in a containing element with <code>padding: 0 15px;</code> to offset the <code>margin: 0 -15px;</code> used on <code>.row</code>s.</p>
|
||||
</div>
|
||||
|
||||
<h3 id="grid-media-queries">Media queries</h3>
|
||||
<p>We use the following media queries in our Less files to create the key breakpoints in our grid system.</p>
|
||||
{% highlight scss %}
|
||||
@ -3245,7 +3240,7 @@ a {
|
||||
<p>Easily truncate text with an ellipsis with a single mixin. <strong>Requires element to be <code>block</code> or <code>inline-block</code> level.</strong></p>
|
||||
{% highlight scss %}
|
||||
// Mixin
|
||||
.text-truncate() {
|
||||
.text-overflow() {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
@ -3255,7 +3250,7 @@ a {
|
||||
.branch-name {
|
||||
display: inline-block;
|
||||
max-width: 200px;
|
||||
.text-truncate();
|
||||
.text-overflow();
|
||||
}
|
||||
{% endhighlight %}
|
||||
|
||||
|
2
docs/dist/css/bootstrap-theme.css.map
vendored
2
docs/dist/css/bootstrap-theme.css.map
vendored
File diff suppressed because one or more lines are too long
2
docs/dist/css/bootstrap.css.map
vendored
2
docs/dist/css/bootstrap.css.map
vendored
File diff suppressed because one or more lines are too long
2
docs/dist/css/bootstrap.min.css
vendored
2
docs/dist/css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
@ -29,12 +29,14 @@ body {
|
||||
@media (min-width: 768px) {
|
||||
.sidebar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
top: 51px;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 1000;
|
||||
display: block;
|
||||
padding: 70px 20px 20px;
|
||||
padding: 20px;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */
|
||||
background-color: #f5f5f5;
|
||||
border-right: 1px solid #eee;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
$(document).ready(function() {
|
||||
$('[data-toggle=offcanvas]').click(function() {
|
||||
$('.row-offcanvas').toggleClass('active');
|
||||
$(document).ready(function () {
|
||||
$('[data-toggle=offcanvas]').click(function () {
|
||||
$('.row-offcanvas').toggleClass('active')
|
||||
});
|
||||
});
|
@ -28,53 +28,49 @@
|
||||
|
||||
<body>
|
||||
|
||||
<!-- Wrap all page content here -->
|
||||
<div id="wrap">
|
||||
|
||||
<!-- Fixed navbar -->
|
||||
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="#">Project name</a>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="active"><a href="#">Home</a></li>
|
||||
<li><a href="#about">About</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#">Action</a></li>
|
||||
<li><a href="#">Another action</a></li>
|
||||
<li><a href="#">Something else here</a></li>
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown-header">Nav header</li>
|
||||
<li><a href="#">Separated link</a></li>
|
||||
<li><a href="#">One more separated link</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div><!--/.nav-collapse -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Begin page content -->
|
||||
<!-- Fixed navbar -->
|
||||
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
|
||||
<div class="container">
|
||||
<div class="page-header">
|
||||
<h1>Sticky footer with fixed navbar</h1>
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="#">Project name</a>
|
||||
</div>
|
||||
<p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS. A fixed navbar has been added within <code>#wrap</code> with <code>padding-top: 60px;</code> on the <code>.container</code>.</p>
|
||||
<p>Back to <a href="../sticky-footer">the default sticky footer</a> minus the navbar.</p>
|
||||
<div class="collapse navbar-collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="active"><a href="#">Home</a></li>
|
||||
<li><a href="#about">About</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#">Action</a></li>
|
||||
<li><a href="#">Another action</a></li>
|
||||
<li><a href="#">Something else here</a></li>
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown-header">Nav header</li>
|
||||
<li><a href="#">Separated link</a></li>
|
||||
<li><a href="#">One more separated link</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div><!--/.nav-collapse -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Begin page content -->
|
||||
<div class="container">
|
||||
<div class="page-header">
|
||||
<h1>Sticky footer with fixed navbar</h1>
|
||||
</div>
|
||||
<p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS. A fixed navbar has been added with <code>padding-top: 60px;</code> on the <code>body > .container</code>.</p>
|
||||
<p>Back to <a href="../sticky-footer">the default sticky footer</a> minus the navbar.</p>
|
||||
</div>
|
||||
|
||||
<div id="footer">
|
||||
<div class="container">
|
||||
<p class="text-muted">Place sticky footer content here.</p>
|
||||
|
@ -1,24 +1,18 @@
|
||||
/* Sticky footer styles
|
||||
-------------------------------------------------- */
|
||||
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
/* The html and body elements cannot have any padding or margin. */
|
||||
}
|
||||
|
||||
/* Wrapper for page content to push down footer */
|
||||
#wrap {
|
||||
height: auto;
|
||||
html {
|
||||
position: relative;
|
||||
min-height: 100%;
|
||||
/* Pad bottom by footer height */
|
||||
padding: 0 0 60px;
|
||||
/* Negative indent footer by its height */
|
||||
margin: 0 auto -60px;
|
||||
}
|
||||
|
||||
/* Set the fixed height of the footer here */
|
||||
body {
|
||||
/* Margin bottom by footer height */
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
#footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
/* Set the fixed height of the footer here */
|
||||
height: 60px;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
@ -28,7 +22,7 @@ body {
|
||||
-------------------------------------------------- */
|
||||
/* Not required for template or sticky footer method. */
|
||||
|
||||
#wrap > .container {
|
||||
body > .container {
|
||||
padding: 60px 15px 0;
|
||||
}
|
||||
.container .text-muted {
|
||||
|
@ -28,17 +28,13 @@
|
||||
|
||||
<body>
|
||||
|
||||
<!-- Wrap all page content here -->
|
||||
<div id="wrap">
|
||||
|
||||
<!-- Begin page content -->
|
||||
<div class="container">
|
||||
<div class="page-header">
|
||||
<h1>Sticky footer</h1>
|
||||
</div>
|
||||
<p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.</p>
|
||||
<p>Use <a href="../sticky-footer-navbar">the sticky footer with a fixed navbar</a> if need be, too.</p>
|
||||
<!-- Begin page content -->
|
||||
<div class="container">
|
||||
<div class="page-header">
|
||||
<h1>Sticky footer</h1>
|
||||
</div>
|
||||
<p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.</p>
|
||||
<p>Use <a href="../sticky-footer-navbar">the sticky footer with a fixed navbar</a> if need be, too.</p>
|
||||
</div>
|
||||
|
||||
<div id="footer">
|
||||
|
@ -1,24 +1,18 @@
|
||||
/* Sticky footer styles
|
||||
-------------------------------------------------- */
|
||||
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
/* The html and body elements cannot have any padding or margin. */
|
||||
}
|
||||
|
||||
/* Wrapper for page content to push down footer */
|
||||
#wrap {
|
||||
height: auto;
|
||||
html {
|
||||
position: relative;
|
||||
min-height: 100%;
|
||||
/* Pad bottom by footer height */
|
||||
padding: 0 0 60px;
|
||||
/* Negative indent footer by its height */
|
||||
margin: 0 auto -60px;
|
||||
}
|
||||
|
||||
/* Set the fixed height of the footer here */
|
||||
body {
|
||||
/* Margin bottom by footer height */
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
#footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
/* Set the fixed height of the footer here */
|
||||
height: 60px;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
@ -369,7 +369,7 @@ bootstrap/
|
||||
<p class="lead">Bootstrap is built to work best in the latest desktop and mobile browsers, meaning older browsers might display differently styled, though fully functional, renderings of certain components.</p>
|
||||
|
||||
<h3 id="support-browsers">Supported browsers</h3>
|
||||
<p>Specifically, we support the <strong>latest versions</strong> of the following browsers and platforms:</p>
|
||||
<p>Specifically, we support the <strong>latest versions</strong> of the following browsers and platforms. On Windows, <strong>we support Internet Explorer 8-11</strong>. More specific support information is provided below.</p>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-striped">
|
||||
<thead>
|
||||
@ -543,10 +543,10 @@ if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
|
||||
<p>On <code><select></code> elements, the Android stock browser will not display the side controls if there is a <code>border-radius</code> and/or <code>border</code> applied. Use the snippet of code below to remove the offending CSS and render the <code><select></code> as an unstyled element on the Android stock browser. The user agent sniffing avoids interference with Chrome, Safari, and Mozilla browsers.</p>
|
||||
{% highlight html %}
|
||||
<script>
|
||||
var nua = navigator.userAgent;
|
||||
var isAndroid = (nua.indexOf('Mozilla/5.0') > -1 && nua.indexOf('Android ') > -1 && nua.indexOf('AppleWebKit') > -1 && nua.indexOf('Chrome') === -1);
|
||||
var nua = navigator.userAgent
|
||||
var isAndroid = (nua.indexOf('Mozilla/5.0') > -1 && nua.indexOf('Android ') > -1 && nua.indexOf('AppleWebKit') > -1 && nua.indexOf('Chrome') === -1)
|
||||
if (isAndroid) {
|
||||
$('select.form-control').removeClass('form-control').css('width', '100%');
|
||||
$('select.form-control').removeClass('form-control').css('width', '100%')
|
||||
}
|
||||
</script>
|
||||
{% endhighlight %}
|
||||
@ -769,6 +769,7 @@ if (isAndroid) {
|
||||
<li><a href="http://www.oneskyapp.com/docs/bootstrap/ru">Bootstrap по-русски (Russian)</a></li>
|
||||
<li><a href="http://www.oneskyapp.com/docs/bootstrap/es">Bootstrap en Español (Spanish)</a></li>
|
||||
<li><a href="http://twbs.site-konstruktor.com.ua">Bootstrap ua Українською (Ukrainian)</a></li>
|
||||
<li><a href="http://bootstrapk.com/BS3/">Bootstrap 한국어 (Korean)</a></li>
|
||||
</ul>
|
||||
<p>Have another language to add, or perhaps a different or better translation? Let us know by <a href="https://github.com/twbs/bootstrap/issues/new">opening an issue</a>.</p>
|
||||
</div>
|
||||
|
@ -15,8 +15,13 @@ lead: "Bring Bootstrap's components to life with over a dozen custom jQuery plug
|
||||
<p>Plugins can be included individually (using Bootstrap's individual <code>*.js</code> files), or all at once (using <code>bootstrap.js</code> or the minified <code>bootstrap.min.js</code>).</p>
|
||||
|
||||
<div class="bs-callout bs-callout-danger">
|
||||
<h4>Do not attempt to include both.</h4>
|
||||
<p>Both <code>bootstrap.js</code> and <code>bootstrap.min.js</code> contain all plugins in a single file.</p>
|
||||
<h4>Using the compiled JavaScript</h4>
|
||||
<p>Both <code>bootstrap.js</code> and <code>bootstrap.min.js</code> contain all plugins in a single file. Include only one.</p>
|
||||
</div>
|
||||
|
||||
<div class="bs-callout bs-callout-danger">
|
||||
<h4>Component data attributes</h4>
|
||||
<p>Don't mix data attributes from separate plugins on the same component. For example, a button cannot have a tooltip and toggle a modal. To accomplish this, use a wrapping element.</p>
|
||||
</div>
|
||||
|
||||
<div class="bs-callout bs-callout-danger">
|
||||
@ -561,6 +566,7 @@ $('.dropdown-toggle').dropdown()
|
||||
<p>Toggles the dropdown menu of a given navbar or tabbed navigation.</p>
|
||||
|
||||
<h3>Events</h3>
|
||||
<p>All dropdown events are fired at the <code>.dropdown-menu</code>'s parent element.</p>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-striped">
|
||||
<thead>
|
||||
@ -1438,10 +1444,10 @@ $('#my-alert').bind('closed.bs.alert', function () {
|
||||
</button>
|
||||
<script>
|
||||
$('#loading-example-btn').click(function () {
|
||||
var btn = $(this);
|
||||
btn.button('loading');
|
||||
var btn = $(this)
|
||||
btn.button('loading')
|
||||
$.ajax(...).always(function () {
|
||||
btn.button('reset');
|
||||
btn.button('reset')
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@ -1546,10 +1552,10 @@ $('.btn').button()
|
||||
<button id="loading-example-btn" type="button" class="btn btn-primary" data-loading-text="loading stuff...">...</button>
|
||||
<script>
|
||||
$('#loading-example-btn').click(function () {
|
||||
var btn = $(this);
|
||||
btn.button('loading');
|
||||
var btn = $(this)
|
||||
btn.button('loading')
|
||||
$.ajax(...).always(function () {
|
||||
btn.button('reset');
|
||||
btn.button('reset')
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
@ -1,4 +1,3 @@
|
||||
/* jshint node: true */
|
||||
/*!
|
||||
* Bootstrap Grunt task for Glyphicons data generation
|
||||
* http://getbootstrap.com
|
||||
|
@ -1,4 +1,3 @@
|
||||
/* jshint node: true */
|
||||
/*!
|
||||
* Bootstrap Grunt task for parsing Less docstrings
|
||||
* http://getbootstrap.com
|
||||
|
@ -1,4 +1,5 @@
|
||||
/* jshint node: true */
|
||||
/* global btoa: true */
|
||||
|
||||
/*!
|
||||
* Bootstrap Grunt task for generating raw-files.min.js for the Customizer
|
||||
* http://getbootstrap.com
|
||||
@ -6,7 +7,7 @@
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
var btoa = require('btoa') // jshint ignore:line
|
||||
var btoa = require('btoa')
|
||||
var fs = require('fs')
|
||||
|
||||
function getFiles(type) {
|
||||
|
@ -1,5 +1,3 @@
|
||||
/* jshint node: true */
|
||||
|
||||
/*
|
||||
This Grunt task updates the npm-shrinkwrap.canonical.json file that's used as the key for Bootstrap's npm packages cache.
|
||||
This task should be run and the updated file should be committed whenever Bootstrap's dependencies change.
|
||||
|
@ -96,9 +96,9 @@
|
||||
//
|
||||
// Remix the default button sizing classes into new ones for easier manipulation.
|
||||
|
||||
.btn-group-xs > .btn { .btn-xs(); }
|
||||
.btn-group-sm > .btn { .btn-sm(); }
|
||||
.btn-group-lg > .btn { .btn-lg(); }
|
||||
.btn-group-xs > .btn { &:extend(.btn-xs); }
|
||||
.btn-group-sm > .btn { &:extend(.btn-sm); }
|
||||
.btn-group-lg > .btn { &:extend(.btn-lg); }
|
||||
|
||||
|
||||
// Split button dropdowns
|
||||
|
@ -21,7 +21,7 @@
|
||||
// Account for jankitude on images
|
||||
> img,
|
||||
> a > img {
|
||||
.img-responsive();
|
||||
&:extend(.img-responsive);
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
@ -133,9 +133,10 @@ output {
|
||||
.placeholder();
|
||||
|
||||
// Disabled and read-only inputs
|
||||
// Note: HTML5 says that controls under a fieldset > legend:first-child won't
|
||||
// be disabled if the fieldset is disabled. Due to implementation difficulty,
|
||||
// we don't honor that edge case; we style them as disabled anyway.
|
||||
//
|
||||
// HTML5 says that controls under a fieldset > legend:first-child won't be
|
||||
// disabled if the fieldset is disabled. Due to implementation difficulty, we
|
||||
// don't honor that edge case; we style them as disabled anyway.
|
||||
&[disabled],
|
||||
&[readonly],
|
||||
fieldset[disabled] & {
|
||||
@ -150,10 +151,24 @@ output {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Search inputs in iOS
|
||||
//
|
||||
// This overrides the extra rounded corners on search inputs in iOS so that our
|
||||
// `.form-control` class can properly style them. Note that this cannot simply
|
||||
// be added to `.form-control` as it's not specific enough. For details, see
|
||||
// https://github.com/twbs/bootstrap/issues/11586.
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
|
||||
// Special styles for iOS date input
|
||||
//
|
||||
// In Mobile Safari, date inputs require a pixel line-height that matches the
|
||||
// given height of the input.
|
||||
|
||||
input[type="date"] {
|
||||
line-height: @input-height-base;
|
||||
}
|
||||
@ -334,6 +349,10 @@ input[type="checkbox"],
|
||||
width: auto; // Prevent labels from stacking above inputs in `.form-group`
|
||||
vertical-align: middle;
|
||||
}
|
||||
// Input groups need that 100% width though
|
||||
.input-group > .form-control {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.control-label {
|
||||
margin-bottom: 0;
|
||||
|
@ -54,8 +54,7 @@
|
||||
|
||||
// Placeholder text
|
||||
.placeholder(@color: @input-color-placeholder) {
|
||||
&:-moz-placeholder { color: @color; } // Firefox 4-18
|
||||
&::-moz-placeholder { color: @color; // Firefox 19+
|
||||
&::-moz-placeholder { color: @color; // Firefox
|
||||
opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526
|
||||
&:-ms-input-placeholder { color: @color; } // Internet Explorer 10+
|
||||
&::-webkit-input-placeholder { color: @color; } // Safari and Chrome
|
||||
@ -253,7 +252,6 @@
|
||||
-webkit-user-select: @select;
|
||||
-moz-user-select: @select;
|
||||
-ms-user-select: @select; // IE10+
|
||||
-o-user-select: @select;
|
||||
user-select: @select;
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,37 @@
|
||||
&:extend(.clearfix all);
|
||||
}
|
||||
|
||||
// Optional heading
|
||||
.panel-heading {
|
||||
padding: 10px 15px;
|
||||
border-bottom: 1px solid transparent;
|
||||
.border-top-radius((@panel-border-radius - 1));
|
||||
|
||||
> .dropdown .dropdown-toggle {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
// Within heading, strip any `h*` tag of its default margins for spacing.
|
||||
.panel-title {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
font-size: ceil((@font-size-base * 1.125));
|
||||
color: inherit;
|
||||
|
||||
> a {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
// Optional footer (stays gray in every modifier class)
|
||||
.panel-footer {
|
||||
padding: 10px 15px;
|
||||
background-color: @panel-footer-bg;
|
||||
border-top: 1px solid @panel-inner-border;
|
||||
.border-bottom-radius((@panel-border-radius - 1));
|
||||
}
|
||||
|
||||
|
||||
// List groups in panels
|
||||
//
|
||||
@ -130,12 +161,22 @@
|
||||
> td:last-child {
|
||||
border-right: 0;
|
||||
}
|
||||
&:first-child > th,
|
||||
&:first-child > td {
|
||||
border-top: 0;
|
||||
}
|
||||
}
|
||||
> thead,
|
||||
> tbody {
|
||||
> tr:first-child {
|
||||
> td,
|
||||
> th {
|
||||
border-bottom: 0;
|
||||
}
|
||||
&:last-child > th,
|
||||
&:last-child > td {
|
||||
}
|
||||
}
|
||||
> tbody,
|
||||
> tfoot {
|
||||
> tr:last-child {
|
||||
> td,
|
||||
> th {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
@ -148,38 +189,6 @@
|
||||
}
|
||||
|
||||
|
||||
// Optional heading
|
||||
.panel-heading {
|
||||
padding: 10px 15px;
|
||||
border-bottom: 1px solid transparent;
|
||||
.border-top-radius((@panel-border-radius - 1));
|
||||
|
||||
> .dropdown .dropdown-toggle {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
// Within heading, strip any `h*` tag of its default margins for spacing.
|
||||
.panel-title {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
font-size: ceil((@font-size-base * 1.125));
|
||||
color: inherit;
|
||||
|
||||
> a {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
// Optional footer (stays gray in every modifier class)
|
||||
.panel-footer {
|
||||
padding: 10px 15px;
|
||||
background-color: @panel-footer-bg;
|
||||
border-top: 1px solid @panel-inner-border;
|
||||
.border-bottom-radius((@panel-border-radius - 1));
|
||||
}
|
||||
|
||||
|
||||
// Collapsable panels (aka, accordion)
|
||||
//
|
||||
// Wrap a series of panels in `.panel-group` to turn them into an accordion with
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
> img,
|
||||
a > img {
|
||||
.img-responsive();
|
||||
&:extend(.img-responsive);
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
@ -233,7 +233,7 @@ abbr[data-original-title] {
|
||||
blockquote {
|
||||
padding: (@line-height-computed / 2) @line-height-computed;
|
||||
margin: 0 0 @line-height-computed;
|
||||
font-size: (@font-size-base * 1.25);
|
||||
font-size: @blockquote-font-size;
|
||||
border-left: 5px solid @blockquote-border-color;
|
||||
|
||||
p,
|
||||
|
@ -301,6 +301,26 @@
|
||||
@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
|
||||
|
||||
|
||||
//== Container sizes
|
||||
//
|
||||
//## Define the maximum width of `.container` for different screen sizes.
|
||||
|
||||
// Small screen / tablet
|
||||
@container-tablet: ((720px + @grid-gutter-width));
|
||||
//** For `@screen-sm-min` and up.
|
||||
@container-sm: @container-tablet;
|
||||
|
||||
// Medium screen / desktop
|
||||
@container-desktop: ((940px + @grid-gutter-width));
|
||||
//** For `@screen-md-min` and up.
|
||||
@container-md: @container-desktop;
|
||||
|
||||
// Large screen / wide desktop
|
||||
@container-large-desktop: ((1140px + @grid-gutter-width));
|
||||
//** For `@screen-lg-min` and up.
|
||||
@container-lg: @container-large-desktop;
|
||||
|
||||
|
||||
//== Navbar
|
||||
//
|
||||
//##
|
||||
@ -790,6 +810,8 @@
|
||||
@headings-small-color: @gray-light;
|
||||
//** Blockquote small color
|
||||
@blockquote-small-color: @gray-light;
|
||||
//** Blockquote font size
|
||||
@blockquote-font-size: (@font-size-base * 1.25);
|
||||
//** Blockquote border color
|
||||
@blockquote-border-color: @gray-lighter;
|
||||
//** Page header border color
|
||||
@ -805,23 +827,3 @@
|
||||
|
||||
//** Horizontal offset for forms and lists.
|
||||
@component-offset-horizontal: 180px;
|
||||
|
||||
|
||||
//== Container sizes
|
||||
//
|
||||
//## Define the maximum width of `.container` for different screen sizes.
|
||||
|
||||
// Small screen / tablet
|
||||
@container-tablet: ((720px + @grid-gutter-width));
|
||||
//** For `@screen-sm-min` and up.
|
||||
@container-sm: @container-tablet;
|
||||
|
||||
// Medium screen / desktop
|
||||
@container-desktop: ((940px + @grid-gutter-width));
|
||||
//** For `@screen-md-min` and up.
|
||||
@container-md: @container-desktop;
|
||||
|
||||
// Large screen / wide desktop
|
||||
@container-large-desktop: ((1140px + @grid-gutter-width));
|
||||
//** For `@screen-lg-min` and up.
|
||||
@container-lg: @container-large-desktop;
|
||||
|
10
package.json
10
package.json
@ -20,12 +20,10 @@
|
||||
"bugs": {
|
||||
"url": "https://github.com/twbs/bootstrap/issues"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT",
|
||||
"url": "https://github.com/twbs/bootstrap/blob/master/LICENSE"
|
||||
}
|
||||
],
|
||||
"license": {
|
||||
"type": "MIT",
|
||||
"url": "https://github.com/twbs/bootstrap/blob/master/LICENSE"
|
||||
},
|
||||
"devDependencies": {
|
||||
"browserstack-runner": "~0.1.0",
|
||||
"btoa": "~1.1.1",
|
||||
|
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user