Merge branch 'v4' into star-buttons

This commit is contained in:
Thomas Park
2020-09-19 19:23:39 -04:00
committed by GitHub
57 changed files with 162 additions and 61 deletions

View File

@@ -26,6 +26,8 @@ jobs:
${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.NODE }}-
- run: java -version
- name: Install npm dependencies
run: npm ci
@@ -34,3 +36,6 @@ jobs:
- name: Run tests
run: npm test
- name: Run vnu.jar tests
run: npm run htmllint

View File

@@ -51,6 +51,7 @@ module.exports = grunt => {
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-sass');
grunt.loadNpmTasks('grunt-html');
// Force use of Unix newlines
grunt.util.linefeed = '\n';
@@ -148,6 +149,21 @@ module.exports = grunt => {
dest: ''
}
},
htmllint: {
options: {
ignore: [
/Attribute “autocomplete” is only allowed when the input type is.*/,
/Attribute “autocomplete” not allowed on element “button” at this point./,
/Bad value “” for attribute “action” on element “form”./
]
},
src: [
'docs/**/*.html',
'!docs/**/bower_components/**/*.html',
'!docs/_vendor/**/*.html',
'!docs/2/**/*.html'
]
},
connect: {
options: {
hostname: 'localhost',
@@ -238,6 +254,7 @@ module.exports = grunt => {
});
grunt.registerTask('vendor', 'copy:vendor');
grunt.registerTask('docs-css', ['sass:docs', 'postcss:docs']);
grunt.registerTask('server', 'connect:keepalive');

View File

@@ -25,6 +25,11 @@ section {
margin-bottom: 15px;
}
iframe {
overflow: hidden;
border: none;
}
#social {
display: inline-block;
margin-top: 45px;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@@ -1 +1 @@
body{padding-top:50px}body>.navbar{-webkit-transition:background-color .3s ease-in;transition:background-color .3s ease-in}@media (min-width:768px){body>.navbar-transparent{background-color:transparent}body>.navbar-transparent .navbar-nav>.open>a{background-color:transparent!important}}#home{padding-top:0}#home .navbar-brand{padding:13.5px 15px 12.5px}#home .navbar-brand>img{display:inline;margin:0 10px;height:100%}#banner{min-height:300px;border-bottom:none}.table-of-contents{margin-top:1em}.page-header h1{font-size:4em}.bs-docs-section{margin-top:6em}.bs-docs-section h1{padding-top:100px}.bs-component{position:relative}.bs-component .modal{position:relative;top:auto;right:auto;left:auto;bottom:auto;z-index:1;display:block}.bs-component .modal-dialog{width:90%}.bs-component .popover{position:relative;display:inline-block;width:220px;margin:20px}#source-button{position:absolute;top:0;right:0;z-index:100;font-weight:700}.nav-tabs{margin-bottom:15px}.progress{margin-bottom:10px}footer{margin:5em 0}footer li{float:left;margin-right:1.5em;margin-bottom:1.5em}footer p{clear:left;margin-bottom:0}.splash{padding:9em 0 2em;background-color:#141d27;background-image:url(../img/bg.jpg);background-size:cover;background-attachment:fixed;color:#fff;text-align:center}.splash .logo{width:160px}.splash h1{font-size:3em}.splash #social{margin:2em 0}.splash .alert{margin:2em 0}.section-tout{padding:4em 0 3em;border-bottom:1px solid rgba(0,0,0,.05);background-color:#eaf1f1}.section-tout .fa{margin-right:.5em}.section-tout p{margin-bottom:3em}.section-preview{padding:4em 0 4em}.section-preview .preview{margin-bottom:4em;background-color:#eaf1f1}.section-preview .preview .image{position:relative}.section-preview .preview .image:before{box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);position:absolute;top:0;left:0;width:100%;height:100%;content:"";pointer-events:none}.section-preview .preview .options{padding:1em 2em 2em;border:1px solid rgba(0,0,0,.05);border-top:none;text-align:center}.section-preview .preview .options p{margin-bottom:2em}.section-preview .dropdown-menu{text-align:left}.section-preview .lead{margin-bottom:2em}@media (max-width:767px){.section-preview .image img{width:100%}}.sponsor #carbonads{max-width:240px;margin:0 auto}.sponsor .carbon-text{display:block;margin-top:1em;font-size:12px}.sponsor .carbon-poweredby{float:right;margin-top:1em;font-size:10px}@media (max-width:767px){.splash{padding-top:4em}.splash .logo{width:100px}.splash h1{font-size:2em}#banner{margin-bottom:2em;text-align:center}}
body{padding-top:50px}body>.navbar{-webkit-transition:background-color .3s ease-in;transition:background-color .3s ease-in}iframe{overflow:hidden;border:none}@media (min-width:768px){body>.navbar-transparent{background-color:transparent}body>.navbar-transparent .navbar-nav>.open>a{background-color:transparent!important}}#home{padding-top:0}#home .navbar-brand{padding:13.5px 15px 12.5px}#home .navbar-brand>img{display:inline;margin:0 10px;height:100%}#banner{min-height:300px;border-bottom:none}.table-of-contents{margin-top:1em}.page-header h1{font-size:4em}.bs-docs-section{margin-top:6em}.bs-docs-section h1{padding-top:100px}.bs-component{position:relative}.bs-component .modal{position:relative;top:auto;right:auto;left:auto;bottom:auto;z-index:1;display:block}.bs-component .modal-dialog{width:90%}.bs-component .popover{position:relative;display:inline-block;width:220px;margin:20px}#source-button{position:absolute;top:0;right:0;z-index:100;font-weight:700}.nav-tabs{margin-bottom:15px}.progress{margin-bottom:10px}footer{margin:5em 0}footer li{float:left;margin-right:1.5em;margin-bottom:1.5em}footer p{clear:left;margin-bottom:0}.splash{padding:9em 0 2em;background-color:#141d27;background-image:url(../img/bg.jpg);background-size:cover;background-attachment:fixed;color:#fff;text-align:center}.splash .logo{width:160px}.splash h1{font-size:3em}.splash #social{margin:2em 0}.splash .alert{margin:2em 0}.section-tout{padding:4em 0 3em;border-bottom:1px solid rgba(0,0,0,.05);background-color:#eaf1f1}.section-tout .fa{margin-right:.5em}.section-tout p{margin-bottom:3em}.section-preview{padding:4em 0 4em}.section-preview .preview{margin-bottom:4em;background-color:#eaf1f1}.section-preview .preview .image{position:relative}.section-preview .preview .image:before{box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);position:absolute;top:0;left:0;width:100%;height:100%;content:"";pointer-events:none}.section-preview .preview .options{padding:1em 2em 2em;border:1px solid rgba(0,0,0,.05);border-top:none;text-align:center}.section-preview .preview .options p{margin-bottom:2em}.section-preview .dropdown-menu{text-align:left}.section-preview .lead{margin-bottom:2em}@media (max-width:767px){.section-preview .image img{width:100%}}.sponsor #carbonads{max-width:240px;margin:0 auto}.sponsor .carbon-text{display:block;margin-top:1em;font-size:12px}.sponsor .carbon-poweredby{float:right;margin-top:1em;font-size:10px}@media (max-width:767px){.splash{padding-top:4em}.splash .logo{width:100px}.splash h1{font-size:2em}#banner{margin-bottom:2em;text-align:center}}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@@ -1,7 +0,0 @@
(function(){
var bsa = document.createElement('script');
bsa.type = 'text/javascript';
bsa.async = true;
bsa.src = 'https://s3.buysellads.com/ac/bsa.js';
(document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild(bsa);
})();

View File

@@ -7,6 +7,11 @@ body {
}
}
iframe {
overflow: hidden;
border: none;
}
@media (min-width: 768px) {
body {
> .navbar-transparent {

View File

@@ -160,9 +160,9 @@
<h1 id="support">Support</h1>
<p>Show your support for Bootswatch by buying official gear.</p>
<p>T-shirts based on several themes including Cyborg, Flatly, and Slate are available at <a href="https://shop.spreadshirt.com/bootswatch/">Spreadshirt</a>.</p>
<p><a href="https://shop.spreadshirt.com/bootswatch/"><img src="../assets/img/tshirt.jpg"></a></p>
<p><a href="https://shop.spreadshirt.com/bootswatch/"><img src="../assets/img/tshirt.jpg" alt="Bootswatch T-shirt"></a></p>
<p>Stickers are available at <a href="https://www.stickermule.com/marketplace/1959-bootswatch">Sticker Mule</a>.</p>
<p><a href="https://www.stickermule.com/marketplace/1959-bootswatch"><img src="../assets/img/stickers.jpg"></a></p>
<p><a href="https://www.stickermule.com/marketplace/1959-bootswatch"><img src="../assets/img/stickers.jpg" alt="Bootswatch Stickers"></a></p>
<p>Donations are also accepted via <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=PU2DH4BMF9MWS&source=url">PayPal</a>.</p>
</div>

View File

@@ -33,7 +33,7 @@
<div class="navbar navbar-default navbar-fixed-top navbar-transparent">
<div class="container">
<div class="navbar-header">
<a href="./" class="navbar-brand"><img src="assets/img/logo-nav.png">Bootswatch</a>
<a href="./" class="navbar-brand"><img src="assets/img/logo-nav.png" alt="">Bootswatch</a>
<button class="navbar-toggle" type="button" data-toggle="collapse" data-target="#navbar-main">
<span class="icon-bar"></span>
<span class="icon-bar"></span>

View File

@@ -854,7 +854,7 @@
</div>
<div class="bs-example">
<form role="form">
<form>
<div class="form-group has-success has-feedback">
<label class="control-label" for="inputSuccess2">Input with success</label>
<input type="text" class="form-control" id="inputSuccess2">
@@ -1725,7 +1725,7 @@
<div class="navbar navbar-default">
<form class="navbar-form navbar-left">
<select name="" class="form-control" style="width: 200px;">
<select class="form-control" style="width: 200px;">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
@@ -2865,7 +2865,7 @@
================================================== -->
<div class="bs-docs-section">
<div class="page-header">
<h1 id="popovers">Checkbox / Radio</h1>
<h1 id="checkbox-radio">Checkbox / Radio</h1>
</div>
<div class="bs-example" style="padding-bottom: 24px;">
<div class="btn-group" data-toggle="buttons">

View File

@@ -1 +1 @@
body{padding-top:120px}pre{background:#f7f7f9}iframe{border:none}@media (min-width: 768px){body>.navbar-transparent{box-shadow:none}body>.navbar-transparent .navbar-nav>.open>a{box-shadow:none}}#home,#help{font-size:.9rem}#home .navbar,#help .navbar{background:#349aed;background:linear-gradient(145deg, #349aed 50%, #34d8ed 100%);transition:box-shadow 200ms ease-in}#home .navbar-transparent,#help .navbar-transparent{background:none !important;box-shadow:none}#home .navbar-brand .nav-link,#help .navbar-brand .nav-link{display:inline-block;margin-right:-30px}#home .nav-link,#help .nav-link{text-transform:uppercase;font-weight:500;color:#fff}#home{padding-top:0}#home .btn{padding:.6rem .55rem .5rem;box-shadow:none;font-size:.7rem;font-weight:500}.bs-docs-section{margin-top:4em}.bs-docs-section .page-header h1{padding:2rem 0;font-size:3rem}.dropdown-menu.show[aria-labelledby="themes"]{display:-ms-flexbox;display:flex;width:420px;-ms-flex-wrap:wrap;flex-wrap:wrap}.dropdown-menu.show[aria-labelledby="themes"] .dropdown-item{width:33.333%}.dropdown-menu.show[aria-labelledby="themes"] .dropdown-item:first-child{width:100%}.bs-component{position:relative}.bs-component+.bs-component{margin-top:1rem}.bs-component .card{margin-bottom:1rem}.bs-component .modal{position:relative;top:auto;right:auto;left:auto;bottom:auto;z-index:1;display:block}.bs-component .modal-dialog{width:90%}.bs-component .popover{position:relative;display:inline-block;width:220px;margin:20px}.source-button{display:none;position:absolute;top:0;right:0;z-index:100;font-weight:700}.source-button:hover{cursor:pointer}.bs-component:hover .source-button{display:block}#source-modal pre{max-height:calc(100vh - 11rem);background-color:rgba(0,0,0,0.7);color:rgba(255,255,255,0.7)}.nav-tabs{margin-bottom:15px}.progress{margin-bottom:10px}#footer{margin:5em 0}#footer li{float:left;margin-right:1.5em;margin-bottom:1.5em}#footer p{clear:left;margin-bottom:0}.splash{padding:12em 0 6em;background:#349aed;background:linear-gradient(145deg, #349aed 50%, #34d8ed 100%);color:#fff;text-align:center}.splash .logo{width:160px}.splash h1{font-size:3em;color:#fff}.splash #social{margin:2em 0 3em}.splash .alert{margin:2em 0;border:none}.splash .sponsor a{color:#fff}.section-tout{padding:6em 0 1em;border-bottom:1px solid rgba(0,0,0,0.05);background-color:#eaf1f1;text-align:center}.section-tout .icon{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;width:80px;height:80px;margin:0 auto 1rem;background:#349aed;background:linear-gradient(145deg, #3b9cea 50%, #3db8eb 100%);border-radius:50%;font-size:2rem;color:rgba(0,0,0,0.5)}.section-tout p{margin-bottom:5em}.section-preview{padding:4em 0}.section-preview .preview{margin-bottom:4em;background-color:#eaf1f1}.section-preview .preview .image{position:relative}.section-preview .preview .image::before{box-shadow:inset 0 0 0 1px rgba(0,0,0,0.1);position:absolute;top:0;left:0;width:100%;height:100%;content:"";pointer-events:none}.section-preview .preview .options{padding:2em;border:1px solid rgba(0,0,0,0.05);border-top:none;text-align:center}.section-preview .preview .options p{margin-bottom:2em}.section-preview .dropdown-menu{text-align:left}.section-preview .lead{margin-bottom:2em}.sponsor #carbonads{max-width:240px;margin:0 auto}.sponsor .carbon-text{display:block;margin-top:1em;font-size:12px}.sponsor .carbon-poweredby{float:right;margin-top:1em;font-size:10px}@media (max-width: 767px){.splash{padding-top:8em}.splash .logo{width:100px}.splash h1{font-size:2em}#banner{margin-bottom:2em;text-align:center}}
body{padding-top:120px}pre{background:#f7f7f9}iframe{overflow:hidden;border:none}@media (min-width: 768px){body>.navbar-transparent{box-shadow:none}body>.navbar-transparent .navbar-nav>.open>a{box-shadow:none}}#home,#help{font-size:.9rem}#home .navbar,#help .navbar{background:#349aed;background:linear-gradient(145deg, #349aed 50%, #34d8ed 100%);transition:box-shadow 200ms ease-in}#home .navbar-transparent,#help .navbar-transparent{background:none !important;box-shadow:none}#home .navbar-brand .nav-link,#help .navbar-brand .nav-link{display:inline-block;margin-right:-30px}#home .nav-link,#help .nav-link{text-transform:uppercase;font-weight:500;color:#fff}#home{padding-top:0}#home .btn{padding:.6rem .55rem .5rem;box-shadow:none;font-size:.7rem;font-weight:500}.bs-docs-section{margin-top:4em}.bs-docs-section .page-header h1{padding:2rem 0;font-size:3rem}.dropdown-menu.show[aria-labelledby="themes"]{display:-ms-flexbox;display:flex;width:420px;-ms-flex-wrap:wrap;flex-wrap:wrap}.dropdown-menu.show[aria-labelledby="themes"] .dropdown-item{width:33.333%}.dropdown-menu.show[aria-labelledby="themes"] .dropdown-item:first-child{width:100%}.bs-component{position:relative}.bs-component+.bs-component{margin-top:1rem}.bs-component .card{margin-bottom:1rem}.bs-component .modal{position:relative;top:auto;right:auto;left:auto;bottom:auto;z-index:1;display:block}.bs-component .modal-dialog{width:90%}.bs-component .popover{position:relative;display:inline-block;width:220px;margin:20px}.source-button{display:none;position:absolute;top:0;right:0;z-index:100;font-weight:700}.source-button:hover{cursor:pointer}.bs-component:hover .source-button{display:block}#source-modal pre{max-height:calc(100vh - 11rem);background-color:rgba(0,0,0,0.7);color:rgba(255,255,255,0.7)}.nav-tabs{margin-bottom:15px}.progress{margin-bottom:10px}#footer{margin:5em 0}#footer li{float:left;margin-right:1.5em;margin-bottom:1.5em}#footer p{clear:left;margin-bottom:0}.splash{padding:12em 0 6em;background:#349aed;background:linear-gradient(145deg, #349aed 50%, #34d8ed 100%);color:#fff;text-align:center}.splash .logo{width:160px}.splash h1{font-size:3em;color:#fff}.splash #social{margin:2em 0 3em}.splash .alert{margin:2em 0;border:none}.splash .sponsor a{color:#fff}.section-tout{padding:6em 0 1em;border-bottom:1px solid rgba(0,0,0,0.05);background-color:#eaf1f1;text-align:center}.section-tout .icon{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;width:80px;height:80px;margin:0 auto 1rem;background:#349aed;background:linear-gradient(145deg, #3b9cea 50%, #3db8eb 100%);border-radius:50%;font-size:2rem;color:rgba(0,0,0,0.5)}.section-tout p{margin-bottom:5em}.section-preview{padding:4em 0}.section-preview .preview{margin-bottom:4em;background-color:#eaf1f1}.section-preview .preview .image{position:relative}.section-preview .preview .image::before{box-shadow:inset 0 0 0 1px rgba(0,0,0,0.1);position:absolute;top:0;left:0;width:100%;height:100%;content:"";pointer-events:none}.section-preview .preview .options{padding:2em;border:1px solid rgba(0,0,0,0.05);border-top:none;text-align:center}.section-preview .preview .options p{margin-bottom:2em}.section-preview .dropdown-menu{text-align:left}.section-preview .lead{margin-bottom:2em}.sponsor #carbonads{max-width:240px;margin:0 auto}.sponsor .carbon-text{display:block;margin-top:1em;font-size:12px}.sponsor .carbon-poweredby{float:right;margin-top:1em;font-size:10px}@media (max-width: 767px){.splash{padding-top:8em}.splash .logo{width:100px}.splash h1{font-size:2em}#banner{margin-bottom:2em;text-align:center}}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 KiB

After

Width:  |  Height:  |  Size: 97 KiB

View File

@@ -9,6 +9,7 @@ pre {
}
iframe {
overflow: hidden;
border: none;
}

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -687,13 +687,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -85,7 +85,6 @@
<p>Using the themes is as easy as downloading a CSS file and replacing the one that comes with <a href="https://getbootstrap.com/" rel="noopener" target="_blank">Bootstrap</a>.</p>
<h4>Package</h4>
<p>You can install as a package via npm with the command <code>npm install bootswatch</code>.</p>
<p>
<h5>React Users (create-react-app, or similar bundler)</h5>
<p>Modern JavaScript bundlers (webpack, parcel, rollup) support importing CSS from JS files. This can make it easier to deploy various 1st- and 3rd-party assets predictably.</p>
@@ -106,7 +105,6 @@ import './App.css';
function App() {
...
</pre>
</p>
<h4>CDN</h4>
<p>You can also hotlink the themes via CDN at <a href="https://www.bootstrapcdn.com/bootswatch/">BootstrapCDN</a>.</p>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

View File

@@ -690,13 +690,13 @@
</div>
<div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Valid input</label>
<label class="form-control-label" for="inputValid">Valid input</label>
<input type="text" value="correct value" class="form-control is-valid" id="inputValid">
<div class="valid-feedback">Success! You've done it.</div>
</div>
<div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Invalid input</label>
<label class="form-control-label" for="inputInvalid">Invalid input</label>
<input type="text" value="wrong value" class="form-control is-invalid" id="inputInvalid">
<div class="invalid-feedback">Sorry, that username's taken. Try another?</div>
</div>

75
package-lock.json generated
View File

@@ -2308,6 +2308,75 @@
}
}
},
"grunt-html": {
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/grunt-html/-/grunt-html-14.2.0.tgz",
"integrity": "sha512-Ir4n4axiY/FHrv9v1XhfaehSrRqZ1PYTRDaTIY5VxeaIsAm4KlYjr+hyrq+gwqyaD/iiWznOBE22c6U5si5WEQ==",
"dev": true,
"requires": {
"async": "^3.2.0",
"chalk": "^4.1.0",
"vnu-jar": "20.6.30"
},
"dependencies": {
"ansi-styles": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"dev": true,
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
}
},
"async": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
"integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
"dev": true
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"grunt-known-options": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz",
@@ -6112,6 +6181,12 @@
"unist-util-stringify-position": "^2.0.0"
}
},
"vnu-jar": {
"version": "20.6.30",
"resolved": "https://registry.npmjs.org/vnu-jar/-/vnu-jar-20.6.30.tgz",
"integrity": "sha512-zlNNe7jW6cTIrxVlZK9AcZiNWjxzjqi7LpTafBCi4OY4bsh2uyGhxXT2l6hZ3ibpxP0ZC/pQsBpFQEACS0ePIg==",
"dev": true
},
"websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",

View File

@@ -14,6 +14,7 @@
},
"scripts": {
"build": "grunt swatch",
"htmllint": "grunt htmllint",
"stylelint": "stylelint \"{build,dist,docs/_assets}/**/*.scss\" --rd",
"test": "npm run stylelint"
},
@@ -33,6 +34,7 @@
"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-cssmin": "^3.0.0",
"grunt-contrib-watch": "^1.1.0",
"grunt-html": "^14.2.0",
"grunt-sass": "^3.1.0",
"jquery": "^3.5.1",
"node-sass": "^4.14.1",