Updated JS requirements.
@@ -29,17 +29,17 @@
|
||||
"test-infra"
|
||||
],
|
||||
"dependencies": {
|
||||
"jquery": ">= 1.9.1"
|
||||
"jquery": "1.9.1 - 3"
|
||||
},
|
||||
"version": "3.3.5",
|
||||
"_release": "3.3.5",
|
||||
"version": "3.3.7",
|
||||
"_release": "3.3.7",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v3.3.5",
|
||||
"commit": "16b48259a62f576e52c903c476bd42b90ab22482"
|
||||
"tag": "v3.3.7",
|
||||
"commit": "0b9c4a4007c44201dce9a6cc1a38407005c26c86"
|
||||
},
|
||||
"_source": "git://github.com/twbs/bootstrap.git",
|
||||
"_target": "3.3.5",
|
||||
"_source": "https://github.com/twbs/bootstrap.git",
|
||||
"_target": "3.3.7",
|
||||
"_originalSource": "bootstrap",
|
||||
"_direct": true
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
Bootstrap uses [GitHub's Releases feature](https://github.com/blog/1547-release-your-software) for its changelogs.
|
||||
|
||||
See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap.
|
||||
|
||||
Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release.
|
||||
@@ -0,0 +1,6 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
group :development, :test do
|
||||
gem 'jekyll', '~> 3.1.2'
|
||||
gem 'jekyll-sitemap', '~> 0.11.0'
|
||||
end
|
||||
@@ -0,0 +1,43 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
addressable (2.4.0)
|
||||
colorator (0.1)
|
||||
ffi (1.9.14-x64-mingw32)
|
||||
jekyll (3.1.6)
|
||||
colorator (~> 0.1)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
jekyll-watch (~> 1.1)
|
||||
kramdown (~> 1.3)
|
||||
liquid (~> 3.0)
|
||||
mercenary (~> 0.3.3)
|
||||
rouge (~> 1.7)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-sass-converter (1.4.0)
|
||||
sass (~> 3.4)
|
||||
jekyll-sitemap (0.11.0)
|
||||
addressable (~> 2.4.0)
|
||||
jekyll-watch (1.4.0)
|
||||
listen (~> 3.0, < 3.1)
|
||||
kramdown (1.11.1)
|
||||
liquid (3.0.6)
|
||||
listen (3.0.8)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
mercenary (0.3.6)
|
||||
rb-fsevent (0.9.7)
|
||||
rb-inotify (0.9.7)
|
||||
ffi (>= 0.5.0)
|
||||
rouge (1.11.1)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.4.22)
|
||||
|
||||
PLATFORMS
|
||||
x64-mingw32
|
||||
|
||||
DEPENDENCIES
|
||||
jekyll (~> 3.1.2)
|
||||
jekyll-sitemap (~> 0.11.0)
|
||||
|
||||
BUNDLED WITH
|
||||
1.12.5
|
||||
@@ -1,7 +1,7 @@
|
||||
/*!
|
||||
* Bootstrap's Gruntfile
|
||||
* http://getbootstrap.com
|
||||
* Copyright 2013-2015 Twitter, Inc.
|
||||
* Copyright 2013-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
@@ -17,7 +17,6 @@ module.exports = function (grunt) {
|
||||
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var npmShrinkwrap = require('npm-shrinkwrap');
|
||||
var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js');
|
||||
var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js');
|
||||
var getLessVarsData = function () {
|
||||
@@ -130,7 +129,7 @@ module.exports = function (grunt) {
|
||||
warnings: false
|
||||
},
|
||||
mangle: true,
|
||||
preserveComments: 'some'
|
||||
preserveComments: /^!|@preserve|@license|@cc_on/i
|
||||
},
|
||||
core: {
|
||||
src: '<%= concat.bootstrap.dest %>',
|
||||
@@ -231,6 +230,8 @@ module.exports = function (grunt) {
|
||||
// and then simplify the fix for https://github.com/twbs/bootstrap/issues/14837 accordingly
|
||||
compatibility: 'ie8',
|
||||
keepSpecialComments: '*',
|
||||
sourceMap: true,
|
||||
sourceMapInlineSources: true,
|
||||
advanced: false
|
||||
},
|
||||
minifyCore: {
|
||||
@@ -243,6 +244,7 @@ module.exports = function (grunt) {
|
||||
},
|
||||
docs: {
|
||||
src: [
|
||||
'docs/assets/css/ie10-viewport-bug-workaround.css',
|
||||
'docs/assets/css/src/pygments-manni.css',
|
||||
'docs/assets/css/src/docs.css'
|
||||
],
|
||||
@@ -275,7 +277,7 @@ module.exports = function (grunt) {
|
||||
copy: {
|
||||
fonts: {
|
||||
expand: true,
|
||||
src: 'fonts/*',
|
||||
src: 'fonts/**',
|
||||
dest: 'dist/'
|
||||
},
|
||||
docs: {
|
||||
@@ -299,7 +301,9 @@ module.exports = function (grunt) {
|
||||
|
||||
jekyll: {
|
||||
options: {
|
||||
config: '_config.yml'
|
||||
bundleExec: true,
|
||||
config: '_config.yml',
|
||||
incremental: false
|
||||
},
|
||||
docs: {},
|
||||
github: {
|
||||
@@ -312,12 +316,27 @@ module.exports = function (grunt) {
|
||||
htmlmin: {
|
||||
dist: {
|
||||
options: {
|
||||
collapseBooleanAttributes: true,
|
||||
collapseWhitespace: true,
|
||||
conservativeCollapse: true,
|
||||
minifyCSS: true,
|
||||
decodeEntities: false,
|
||||
minifyCSS: {
|
||||
compatibility: 'ie8',
|
||||
keepSpecialComments: 0
|
||||
},
|
||||
minifyJS: true,
|
||||
minifyURLs: false,
|
||||
processConditionalComments: true,
|
||||
removeAttributeQuotes: true,
|
||||
removeComments: true
|
||||
removeComments: true,
|
||||
removeOptionalAttributes: true,
|
||||
removeOptionalTags: true,
|
||||
removeRedundantAttributes: true,
|
||||
removeScriptTypeAttributes: true,
|
||||
removeStyleLinkTypeAttributes: true,
|
||||
removeTagWhitespace: false,
|
||||
sortAttributes: true,
|
||||
sortClassName: true
|
||||
},
|
||||
expand: true,
|
||||
cwd: '_gh_pages',
|
||||
@@ -329,17 +348,17 @@ module.exports = function (grunt) {
|
||||
}
|
||||
},
|
||||
|
||||
jade: {
|
||||
pug: {
|
||||
options: {
|
||||
pretty: true,
|
||||
data: getLessVarsData
|
||||
},
|
||||
customizerVars: {
|
||||
src: 'docs/_jade/customizer-variables.jade',
|
||||
src: 'docs/_pug/customizer-variables.pug',
|
||||
dest: 'docs/_includes/customizer-variables.html'
|
||||
},
|
||||
customizerNav: {
|
||||
src: 'docs/_jade/customizer-nav.jade',
|
||||
src: 'docs/_pug/customizer-nav.pug',
|
||||
dest: 'docs/_includes/nav/customize.html'
|
||||
}
|
||||
},
|
||||
@@ -348,7 +367,7 @@ module.exports = function (grunt) {
|
||||
options: {
|
||||
ignore: [
|
||||
'Attribute "autocomplete" not allowed on element "button" at this point.',
|
||||
'Attribute "autocomplete" not allowed on element "input" at this point.',
|
||||
'Attribute "autocomplete" is only allowed when the input type is "color", "date", "datetime", "datetime-local", "email", "hidden", "month", "number", "password", "range", "search", "tel", "text", "time", "url", or "week".',
|
||||
'Element "img" is missing required attribute "src".'
|
||||
]
|
||||
},
|
||||
@@ -370,25 +389,6 @@ module.exports = function (grunt) {
|
||||
}
|
||||
},
|
||||
|
||||
sed: {
|
||||
versionNumber: {
|
||||
pattern: (function () {
|
||||
var old = grunt.option('oldver');
|
||||
return old ? RegExp.quote(old) : old;
|
||||
})(),
|
||||
replacement: grunt.option('newver'),
|
||||
exclude: [
|
||||
'dist/fonts',
|
||||
'docs/assets',
|
||||
'fonts',
|
||||
'js/tests/vendor',
|
||||
'node_modules',
|
||||
'test-infra'
|
||||
],
|
||||
recursive: true
|
||||
}
|
||||
},
|
||||
|
||||
'saucelabs-qunit': {
|
||||
all: {
|
||||
options: {
|
||||
@@ -483,16 +483,11 @@ module.exports = function (grunt) {
|
||||
// Default task.
|
||||
grunt.registerTask('default', ['clean:dist', 'copy:fonts', 'test']);
|
||||
|
||||
// Version numbering task.
|
||||
// grunt change-version-number --oldver=A.B.C --newver=X.Y.Z
|
||||
// This can be overzealous, so its changes should always be manually reviewed!
|
||||
grunt.registerTask('change-version-number', 'sed');
|
||||
|
||||
grunt.registerTask('build-glyphicons-data', function () { generateGlyphiconsData.call(this, grunt); });
|
||||
|
||||
// task for building customizer
|
||||
grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']);
|
||||
grunt.registerTask('build-customizer-html', 'jade');
|
||||
grunt.registerTask('build-customizer-html', 'pug');
|
||||
grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () {
|
||||
var banner = grunt.template.process('<%= banner %>');
|
||||
generateRawFiles(grunt, banner);
|
||||
@@ -510,22 +505,7 @@ module.exports = function (grunt) {
|
||||
grunt.registerTask('docs-js', ['uglify:docsJs', 'uglify:customize']);
|
||||
grunt.registerTask('lint-docs-js', ['jshint:assets', 'jscs:assets']);
|
||||
grunt.registerTask('docs', ['docs-css', 'lint-docs-css', 'docs-js', 'lint-docs-js', 'clean:docs', 'copy:docs', 'build-glyphicons-data', 'build-customizer']);
|
||||
grunt.registerTask('docs-github', ['jekyll:github', 'htmlmin']);
|
||||
|
||||
grunt.registerTask('prep-release', ['dist', 'docs', 'jekyll:github', 'htmlmin', 'compress']);
|
||||
|
||||
// Task for updating the cached npm packages used by the Travis build (which are controlled by test-infra/npm-shrinkwrap.json).
|
||||
// This task should be run and the updated file should be committed whenever Bootstrap's dependencies change.
|
||||
grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', '_update-shrinkwrap']);
|
||||
grunt.registerTask('_update-shrinkwrap', function () {
|
||||
var done = this.async();
|
||||
npmShrinkwrap({ dev: true, dirname: __dirname }, function (err) {
|
||||
if (err) {
|
||||
grunt.fail.warn(err);
|
||||
}
|
||||
var dest = 'test-infra/npm-shrinkwrap.json';
|
||||
fs.renameSync('npm-shrinkwrap.json', dest);
|
||||
grunt.log.writeln('File ' + dest.cyan + ' updated.');
|
||||
done();
|
||||
});
|
||||
});
|
||||
grunt.registerTask('prep-release', ['dist', 'docs', 'docs-github', 'compress']);
|
||||
};
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
Before opening an issue:
|
||||
|
||||
- [Search for duplicate or closed issues](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue)
|
||||
- [Validate](http://validator.w3.org/nu/) and [lint](https://github.com/twbs/bootlint#in-the-browser) any HTML to avoid common problems
|
||||
- Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs
|
||||
- Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md)
|
||||
|
||||
When asking general "how to" questions:
|
||||
|
||||
- Please do not open an issue here
|
||||
- Instead, ask for help on [StackOverflow, IRC, or Slack](https://github.com/twbs/bootstrap/blob/master/README.md#community)
|
||||
|
||||
When reporting a bug, include:
|
||||
|
||||
- Operating system and version (Windows, Mac OS X, Android, iOS, Win10 Mobile)
|
||||
- Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser)
|
||||
- Reduced test cases and potential fixes using [JS Bin](https://jsbin.com)
|
||||
|
||||
When suggesting a feature, include:
|
||||
|
||||
- As much detail as possible for what we should add and why it's important to Bootstrap
|
||||
- Relevant links to prior art, screenshots, or live demos whenever possible
|
||||
@@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2011-2015 Twitter, Inc
|
||||
Copyright (c) 2011-2016 Twitter, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,36 +1,40 @@
|
||||
# [Bootstrap](http://getbootstrap.com)
|
||||
|
||||
[](https://bootstrap-slack.herokuapp.com)
|
||||

|
||||
[](https://www.npmjs.com/package/bootstrap)
|
||||
[](https://travis-ci.org/twbs/bootstrap)
|
||||
[](https://david-dm.org/twbs/bootstrap#info=devDependencies)
|
||||
[](https://www.nuget.org/packages/Bootstrap)
|
||||
[](https://saucelabs.com/u/bootstrap)
|
||||
|
||||
Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](https://twitter.com/mdo) and [Jacob Thornton](https://twitter.com/fat), and maintained by the [core team](https://github.com/orgs/twbs/people) with the massive support and involvement of the community.
|
||||
|
||||
To get started, check out <http://getbootstrap.com>!
|
||||
|
||||
|
||||
## Table of contents
|
||||
|
||||
- [Quick start](#quick-start)
|
||||
- [Bugs and feature requests](#bugs-and-feature-requests)
|
||||
- [Documentation](#documentation)
|
||||
- [Contributing](#contributing)
|
||||
- [Community](#community)
|
||||
- [Versioning](#versioning)
|
||||
- [Creators](#creators)
|
||||
- [Copyright and license](#copyright-and-license)
|
||||
* [Quick start](#quick-start)
|
||||
* [Bugs and feature requests](#bugs-and-feature-requests)
|
||||
* [Documentation](#documentation)
|
||||
* [Contributing](#contributing)
|
||||
* [Community](#community)
|
||||
* [Versioning](#versioning)
|
||||
* [Creators](#creators)
|
||||
* [Copyright and license](#copyright-and-license)
|
||||
|
||||
|
||||
## Quick start
|
||||
|
||||
Several quick start options are available:
|
||||
|
||||
- [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.3.5.zip).
|
||||
- Clone the repo: `git clone https://github.com/twbs/bootstrap.git`.
|
||||
- Install with [Bower](http://bower.io): `bower install bootstrap`.
|
||||
- Install with [npm](https://www.npmjs.com): `npm install bootstrap`.
|
||||
- Install with [Meteor](https://www.meteor.com): `meteor add twbs:bootstrap`.
|
||||
- Install with [Composer](https://getcomposer.org): `composer require twbs/bootstrap`.
|
||||
* [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.3.7.zip).
|
||||
* Clone the repo: `git clone https://github.com/twbs/bootstrap.git`.
|
||||
* Install with [Bower](http://bower.io): `bower install bootstrap`.
|
||||
* Install with [npm](https://www.npmjs.com): `npm install bootstrap@3`.
|
||||
* Install with [Meteor](https://www.meteor.com): `meteor add twbs:bootstrap`.
|
||||
* Install with [Composer](https://getcomposer.org): `composer require twbs/bootstrap`.
|
||||
|
||||
Read the [Getting started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more.
|
||||
|
||||
@@ -44,9 +48,11 @@ bootstrap/
|
||||
│ ├── bootstrap.css
|
||||
│ ├── bootstrap.css.map
|
||||
│ ├── bootstrap.min.css
|
||||
│ ├── bootstrap.min.css.map
|
||||
│ ├── bootstrap-theme.css
|
||||
│ ├── bootstrap-theme.css.map
|
||||
│ └── bootstrap-theme.min.css
|
||||
│ ├── bootstrap-theme.min.css
|
||||
│ └── bootstrap-theme.min.css.map
|
||||
├── js/
|
||||
│ ├── bootstrap.js
|
||||
│ └── bootstrap.min.js
|
||||
@@ -61,11 +67,12 @@ bootstrap/
|
||||
We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). CSS [source maps](https://developer.chrome.com/devtools/docs/css-preprocessors) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. Fonts from Glyphicons are included, as is the optional Bootstrap theme.
|
||||
|
||||
|
||||
|
||||
## Bugs and feature requests
|
||||
|
||||
Have a bug or a feature request? Please first read the [issue guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/twbs/bootstrap/issues/new).
|
||||
|
||||
Note that **feature requests must target [Bootstrap v4](https://github.com/twbs/bootstrap/tree/v4-dev),** because Bootstrap v3 is now in maintenance mode and is closed off to new features. This is so that we can focus our efforts on Bootstrap v4.
|
||||
|
||||
|
||||
## Documentation
|
||||
|
||||
@@ -73,11 +80,10 @@ Bootstrap's documentation, included in this repo in the root directory, is built
|
||||
|
||||
### Running documentation locally
|
||||
|
||||
1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v2.5.x).
|
||||
- **Windows users:** Read [this unofficial guide](http://jekyll-windows.juthilo.com/) to get Jekyll up and running without problems.
|
||||
2. Install the Ruby-based syntax highlighter, [Rouge](https://github.com/jneen/rouge), with `gem install rouge`.
|
||||
3. From the root `/bootstrap` directory, run `jekyll serve` in the command line.
|
||||
4. Open <http://localhost:9001> in your browser, and voilà.
|
||||
1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) and other Ruby dependencies with `bundle install`.
|
||||
**Note for Windows users:** Read [this unofficial guide](http://jekyll-windows.juthilo.com/) to get Jekyll up and running without problems.
|
||||
2. From the root `/bootstrap` directory, run `bundle exec jekyll serve` in the command line.
|
||||
4. Open `http://localhost:9001` in your browser, and voilà.
|
||||
|
||||
Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/).
|
||||
|
||||
@@ -88,50 +94,49 @@ Documentation for v2.3.2 has been made available for the time being at <http://g
|
||||
[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download.
|
||||
|
||||
|
||||
|
||||
## Contributing
|
||||
|
||||
Please read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development.
|
||||
|
||||
Moreover, if your pull request contains JavaScript patches or features, you must include [relevant unit tests](https://github.com/twbs/bootstrap/tree/master/js/tests). All HTML and CSS should conform to the [Code Guide](https://github.com/mdo/code-guide), maintained by [Mark Otto](https://github.com/mdo).
|
||||
|
||||
Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <http://editorconfig.org>.
|
||||
**Bootstrap v3 is now closed off to new features.** It has gone into maintenance mode so that we can focus our efforts on [Bootstrap v4](https://github.com/twbs/bootstrap/tree/v4-dev), the future of the framework. Pull requests which add new features (rather than fix bugs) should target [Bootstrap v4 (the `v4-dev` git branch)](https://github.com/twbs/bootstrap/tree/v4-dev) instead.
|
||||
|
||||
Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <http://editorconfig.org>.
|
||||
|
||||
|
||||
## Community
|
||||
|
||||
Get updates on Bootstrap's development and chat with the project maintainers and community members.
|
||||
|
||||
- Follow [@getbootstrap on Twitter](https://twitter.com/getbootstrap).
|
||||
- Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com).
|
||||
- Join [the official Slack room](https://bootstrap-slack.herokuapp.com).
|
||||
- Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel.
|
||||
- Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](https://stackoverflow.com/questions/tagged/twitter-bootstrap-3)).
|
||||
- Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/browse/keyword/bootstrap) or similar delivery mechanisms for maximum discoverability.
|
||||
|
||||
* Follow [@getbootstrap on Twitter](https://twitter.com/getbootstrap).
|
||||
* Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com).
|
||||
* Join [the official Slack room](https://bootstrap-slack.herokuapp.com).
|
||||
* Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel.
|
||||
* Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](https://stackoverflow.com/questions/tagged/twitter-bootstrap-3)).
|
||||
* Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/browse/keyword/bootstrap) or similar delivery mechanisms for maximum discoverability.
|
||||
|
||||
|
||||
## Versioning
|
||||
|
||||
For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](http://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible.
|
||||
|
||||
See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release.
|
||||
|
||||
|
||||
## Creators
|
||||
|
||||
**Mark Otto**
|
||||
|
||||
- <https://twitter.com/mdo>
|
||||
- <https://github.com/mdo>
|
||||
* <https://twitter.com/mdo>
|
||||
* <https://github.com/mdo>
|
||||
|
||||
**Jacob Thornton**
|
||||
|
||||
- <https://twitter.com/fat>
|
||||
- <https://github.com/fat>
|
||||
|
||||
* <https://twitter.com/fat>
|
||||
* <https://github.com/fat>
|
||||
|
||||
|
||||
## Copyright and license
|
||||
|
||||
Code and documentation copyright 2011-2015 Twitter, Inc. Code released under [the MIT license](https://github.com/twbs/bootstrap/blob/master/LICENSE). Docs released under [Creative Commons](https://github.com/twbs/bootstrap/blob/master/docs/LICENSE).
|
||||
Code and documentation copyright 2011-2016 Twitter, Inc. Code released under [the MIT license](https://github.com/twbs/bootstrap/blob/master/LICENSE). Docs released under [Creative Commons](https://github.com/twbs/bootstrap/blob/master/docs/LICENSE).
|
||||
|
||||
@@ -29,6 +29,6 @@
|
||||
"test-infra"
|
||||
],
|
||||
"dependencies": {
|
||||
"jquery": ">= 1.9.1"
|
||||
"jquery": "1.9.1 - 3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*!
|
||||
* Bootstrap v3.3.5 (http://getbootstrap.com)
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
.btn-default,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*!
|
||||
* Bootstrap v3.3.5 (http://getbootstrap.com)
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
|
||||
@@ -279,10 +279,10 @@ th {
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
.glyphicon-asterisk:before {
|
||||
content: "\2a";
|
||||
content: "\002a";
|
||||
}
|
||||
.glyphicon-plus:before {
|
||||
content: "\2b";
|
||||
content: "\002b";
|
||||
}
|
||||
.glyphicon-euro:before,
|
||||
.glyphicon-eur:before {
|
||||
@@ -1106,7 +1106,6 @@ a:focus {
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:focus {
|
||||
outline: thin dotted;
|
||||
outline: 5px auto -webkit-focus-ring-color;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
@@ -2537,7 +2536,6 @@ select[size] {
|
||||
input[type="file"]:focus,
|
||||
input[type="radio"]:focus,
|
||||
input[type="checkbox"]:focus {
|
||||
outline: thin dotted;
|
||||
outline: 5px auto -webkit-focus-ring-color;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
@@ -2582,6 +2580,10 @@ output {
|
||||
.form-control::-webkit-input-placeholder {
|
||||
color: #999;
|
||||
}
|
||||
.form-control::-ms-expand {
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
}
|
||||
.form-control[disabled],
|
||||
.form-control[readonly],
|
||||
fieldset[disabled] .form-control {
|
||||
@@ -2988,7 +2990,7 @@ select[multiple].input-lg {
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.form-horizontal .form-group-lg .control-label {
|
||||
padding-top: 14.333333px;
|
||||
padding-top: 11px;
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
@@ -3025,7 +3027,6 @@ select[multiple].input-lg {
|
||||
.btn.focus,
|
||||
.btn:active.focus,
|
||||
.btn.active.focus {
|
||||
outline: thin dotted;
|
||||
outline: 5px auto -webkit-focus-ring-color;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
@@ -3096,9 +3097,6 @@ fieldset[disabled] a.btn {
|
||||
.open > .dropdown-toggle.btn-default {
|
||||
background-image: none;
|
||||
}
|
||||
.btn-default.disabled,
|
||||
.btn-default[disabled],
|
||||
fieldset[disabled] .btn-default,
|
||||
.btn-default.disabled:hover,
|
||||
.btn-default[disabled]:hover,
|
||||
fieldset[disabled] .btn-default:hover,
|
||||
@@ -3107,13 +3105,7 @@ fieldset[disabled] .btn-default:hover,
|
||||
fieldset[disabled] .btn-default:focus,
|
||||
.btn-default.disabled.focus,
|
||||
.btn-default[disabled].focus,
|
||||
fieldset[disabled] .btn-default.focus,
|
||||
.btn-default.disabled:active,
|
||||
.btn-default[disabled]:active,
|
||||
fieldset[disabled] .btn-default:active,
|
||||
.btn-default.disabled.active,
|
||||
.btn-default[disabled].active,
|
||||
fieldset[disabled] .btn-default.active {
|
||||
fieldset[disabled] .btn-default.focus {
|
||||
background-color: #fff;
|
||||
border-color: #ccc;
|
||||
}
|
||||
@@ -3162,9 +3154,6 @@ fieldset[disabled] .btn-default.active {
|
||||
.open > .dropdown-toggle.btn-primary {
|
||||
background-image: none;
|
||||
}
|
||||
.btn-primary.disabled,
|
||||
.btn-primary[disabled],
|
||||
fieldset[disabled] .btn-primary,
|
||||
.btn-primary.disabled:hover,
|
||||
.btn-primary[disabled]:hover,
|
||||
fieldset[disabled] .btn-primary:hover,
|
||||
@@ -3173,13 +3162,7 @@ fieldset[disabled] .btn-primary:hover,
|
||||
fieldset[disabled] .btn-primary:focus,
|
||||
.btn-primary.disabled.focus,
|
||||
.btn-primary[disabled].focus,
|
||||
fieldset[disabled] .btn-primary.focus,
|
||||
.btn-primary.disabled:active,
|
||||
.btn-primary[disabled]:active,
|
||||
fieldset[disabled] .btn-primary:active,
|
||||
.btn-primary.disabled.active,
|
||||
.btn-primary[disabled].active,
|
||||
fieldset[disabled] .btn-primary.active {
|
||||
fieldset[disabled] .btn-primary.focus {
|
||||
background-color: #337ab7;
|
||||
border-color: #2e6da4;
|
||||
}
|
||||
@@ -3228,9 +3211,6 @@ fieldset[disabled] .btn-primary.active {
|
||||
.open > .dropdown-toggle.btn-success {
|
||||
background-image: none;
|
||||
}
|
||||
.btn-success.disabled,
|
||||
.btn-success[disabled],
|
||||
fieldset[disabled] .btn-success,
|
||||
.btn-success.disabled:hover,
|
||||
.btn-success[disabled]:hover,
|
||||
fieldset[disabled] .btn-success:hover,
|
||||
@@ -3239,13 +3219,7 @@ fieldset[disabled] .btn-success:hover,
|
||||
fieldset[disabled] .btn-success:focus,
|
||||
.btn-success.disabled.focus,
|
||||
.btn-success[disabled].focus,
|
||||
fieldset[disabled] .btn-success.focus,
|
||||
.btn-success.disabled:active,
|
||||
.btn-success[disabled]:active,
|
||||
fieldset[disabled] .btn-success:active,
|
||||
.btn-success.disabled.active,
|
||||
.btn-success[disabled].active,
|
||||
fieldset[disabled] .btn-success.active {
|
||||
fieldset[disabled] .btn-success.focus {
|
||||
background-color: #5cb85c;
|
||||
border-color: #4cae4c;
|
||||
}
|
||||
@@ -3294,9 +3268,6 @@ fieldset[disabled] .btn-success.active {
|
||||
.open > .dropdown-toggle.btn-info {
|
||||
background-image: none;
|
||||
}
|
||||
.btn-info.disabled,
|
||||
.btn-info[disabled],
|
||||
fieldset[disabled] .btn-info,
|
||||
.btn-info.disabled:hover,
|
||||
.btn-info[disabled]:hover,
|
||||
fieldset[disabled] .btn-info:hover,
|
||||
@@ -3305,13 +3276,7 @@ fieldset[disabled] .btn-info:hover,
|
||||
fieldset[disabled] .btn-info:focus,
|
||||
.btn-info.disabled.focus,
|
||||
.btn-info[disabled].focus,
|
||||
fieldset[disabled] .btn-info.focus,
|
||||
.btn-info.disabled:active,
|
||||
.btn-info[disabled]:active,
|
||||
fieldset[disabled] .btn-info:active,
|
||||
.btn-info.disabled.active,
|
||||
.btn-info[disabled].active,
|
||||
fieldset[disabled] .btn-info.active {
|
||||
fieldset[disabled] .btn-info.focus {
|
||||
background-color: #5bc0de;
|
||||
border-color: #46b8da;
|
||||
}
|
||||
@@ -3360,9 +3325,6 @@ fieldset[disabled] .btn-info.active {
|
||||
.open > .dropdown-toggle.btn-warning {
|
||||
background-image: none;
|
||||
}
|
||||
.btn-warning.disabled,
|
||||
.btn-warning[disabled],
|
||||
fieldset[disabled] .btn-warning,
|
||||
.btn-warning.disabled:hover,
|
||||
.btn-warning[disabled]:hover,
|
||||
fieldset[disabled] .btn-warning:hover,
|
||||
@@ -3371,13 +3333,7 @@ fieldset[disabled] .btn-warning:hover,
|
||||
fieldset[disabled] .btn-warning:focus,
|
||||
.btn-warning.disabled.focus,
|
||||
.btn-warning[disabled].focus,
|
||||
fieldset[disabled] .btn-warning.focus,
|
||||
.btn-warning.disabled:active,
|
||||
.btn-warning[disabled]:active,
|
||||
fieldset[disabled] .btn-warning:active,
|
||||
.btn-warning.disabled.active,
|
||||
.btn-warning[disabled].active,
|
||||
fieldset[disabled] .btn-warning.active {
|
||||
fieldset[disabled] .btn-warning.focus {
|
||||
background-color: #f0ad4e;
|
||||
border-color: #eea236;
|
||||
}
|
||||
@@ -3426,9 +3382,6 @@ fieldset[disabled] .btn-warning.active {
|
||||
.open > .dropdown-toggle.btn-danger {
|
||||
background-image: none;
|
||||
}
|
||||
.btn-danger.disabled,
|
||||
.btn-danger[disabled],
|
||||
fieldset[disabled] .btn-danger,
|
||||
.btn-danger.disabled:hover,
|
||||
.btn-danger[disabled]:hover,
|
||||
fieldset[disabled] .btn-danger:hover,
|
||||
@@ -3437,13 +3390,7 @@ fieldset[disabled] .btn-danger:hover,
|
||||
fieldset[disabled] .btn-danger:focus,
|
||||
.btn-danger.disabled.focus,
|
||||
.btn-danger[disabled].focus,
|
||||
fieldset[disabled] .btn-danger.focus,
|
||||
.btn-danger.disabled:active,
|
||||
.btn-danger[disabled]:active,
|
||||
fieldset[disabled] .btn-danger:active,
|
||||
.btn-danger.disabled.active,
|
||||
.btn-danger[disabled].active,
|
||||
fieldset[disabled] .btn-danger.active {
|
||||
fieldset[disabled] .btn-danger.focus {
|
||||
background-color: #d9534f;
|
||||
border-color: #d43f3a;
|
||||
}
|
||||
@@ -3817,6 +3764,7 @@ tbody.collapse.in {
|
||||
border-radius: 0;
|
||||
}
|
||||
.btn-group-vertical > .btn:first-child:not(:last-child) {
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
@@ -3824,6 +3772,7 @@ tbody.collapse.in {
|
||||
.btn-group-vertical > .btn:last-child:not(:first-child) {
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
}
|
||||
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
|
||||
@@ -3881,6 +3830,9 @@ tbody.collapse.in {
|
||||
width: 100%;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.input-group .form-control:focus {
|
||||
z-index: 3;
|
||||
}
|
||||
.input-group-lg > .form-control,
|
||||
.input-group-lg > .input-group-addon,
|
||||
.input-group-lg > .input-group-btn > .btn {
|
||||
@@ -4792,7 +4744,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
|
||||
.pagination > li > span:hover,
|
||||
.pagination > li > a:focus,
|
||||
.pagination > li > span:focus {
|
||||
z-index: 3;
|
||||
z-index: 2;
|
||||
color: #23527c;
|
||||
background-color: #eee;
|
||||
border-color: #ddd;
|
||||
@@ -4803,7 +4755,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
|
||||
.pagination > .active > span:hover,
|
||||
.pagination > .active > a:focus,
|
||||
.pagination > .active > span:focus {
|
||||
z-index: 2;
|
||||
z-index: 3;
|
||||
color: #fff;
|
||||
cursor: default;
|
||||
background-color: #337ab7;
|
||||
@@ -5024,6 +4976,8 @@ a.badge:focus {
|
||||
}
|
||||
.container .jumbotron,
|
||||
.container-fluid .jumbotron {
|
||||
padding-right: 15px;
|
||||
padding-left: 15px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.jumbotron .container {
|
||||
@@ -5978,7 +5932,6 @@ button.close {
|
||||
opacity: .5;
|
||||
}
|
||||
.modal-header {
|
||||
min-height: 16.42857143px;
|
||||
padding: 15px;
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
}
|
||||
@@ -6371,6 +6324,7 @@ button.close {
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
filter: alpha(opacity=50);
|
||||
opacity: .5;
|
||||
}
|
||||
@@ -6484,16 +6438,16 @@ button.close {
|
||||
.carousel-control .icon-next {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
margin-top: -15px;
|
||||
margin-top: -10px;
|
||||
font-size: 30px;
|
||||
}
|
||||
.carousel-control .glyphicon-chevron-left,
|
||||
.carousel-control .icon-prev {
|
||||
margin-left: -15px;
|
||||
margin-left: -10px;
|
||||
}
|
||||
.carousel-control .glyphicon-chevron-right,
|
||||
.carousel-control .icon-next {
|
||||
margin-right: -15px;
|
||||
margin-right: -10px;
|
||||
}
|
||||
.carousel-caption {
|
||||
right: 20%;
|
||||
@@ -6532,6 +6486,8 @@ button.close {
|
||||
.pager:after,
|
||||
.panel-body:before,
|
||||
.panel-body:after,
|
||||
.modal-header:before,
|
||||
.modal-header:after,
|
||||
.modal-footer:before,
|
||||
.modal-footer:after {
|
||||
display: table;
|
||||
@@ -6551,6 +6507,7 @@ button.close {
|
||||
.navbar-collapse:after,
|
||||
.pager:after,
|
||||
.panel-body:after,
|
||||
.modal-header:after,
|
||||
.modal-footer:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*!
|
||||
* Bootstrap v3.3.5 (http://getbootstrap.com)
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under the MIT license
|
||||
*/
|
||||
|
||||
@@ -11,16 +11,16 @@ if (typeof jQuery === 'undefined') {
|
||||
+function ($) {
|
||||
'use strict';
|
||||
var version = $.fn.jquery.split(' ')[0].split('.')
|
||||
if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
|
||||
throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
|
||||
if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
|
||||
throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
|
||||
}
|
||||
}(jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: transition.js v3.3.5
|
||||
* Bootstrap: transition.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#transitions
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -77,10 +77,10 @@ if (typeof jQuery === 'undefined') {
|
||||
}(jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: alert.js v3.3.5
|
||||
* Bootstrap: alert.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#alerts
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -96,7 +96,7 @@ if (typeof jQuery === 'undefined') {
|
||||
$(el).on('click', dismiss, this.close)
|
||||
}
|
||||
|
||||
Alert.VERSION = '3.3.5'
|
||||
Alert.VERSION = '3.3.7'
|
||||
|
||||
Alert.TRANSITION_DURATION = 150
|
||||
|
||||
@@ -109,7 +109,7 @@ if (typeof jQuery === 'undefined') {
|
||||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
|
||||
}
|
||||
|
||||
var $parent = $(selector)
|
||||
var $parent = $(selector === '#' ? [] : selector)
|
||||
|
||||
if (e) e.preventDefault()
|
||||
|
||||
@@ -172,10 +172,10 @@ if (typeof jQuery === 'undefined') {
|
||||
}(jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: button.js v3.3.5
|
||||
* Bootstrap: button.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#buttons
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -192,7 +192,7 @@ if (typeof jQuery === 'undefined') {
|
||||
this.isLoading = false
|
||||
}
|
||||
|
||||
Button.VERSION = '3.3.5'
|
||||
Button.VERSION = '3.3.7'
|
||||
|
||||
Button.DEFAULTS = {
|
||||
loadingText: 'loading...'
|
||||
@@ -214,10 +214,10 @@ if (typeof jQuery === 'undefined') {
|
||||
|
||||
if (state == 'loadingText') {
|
||||
this.isLoading = true
|
||||
$el.addClass(d).attr(d, d)
|
||||
$el.addClass(d).attr(d, d).prop(d, true)
|
||||
} else if (this.isLoading) {
|
||||
this.isLoading = false
|
||||
$el.removeClass(d).removeAttr(d)
|
||||
$el.removeClass(d).removeAttr(d).prop(d, false)
|
||||
}
|
||||
}, this), 0)
|
||||
}
|
||||
@@ -281,10 +281,15 @@ if (typeof jQuery === 'undefined') {
|
||||
|
||||
$(document)
|
||||
.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
|
||||
var $btn = $(e.target)
|
||||
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
|
||||
var $btn = $(e.target).closest('.btn')
|
||||
Plugin.call($btn, 'toggle')
|
||||
if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
|
||||
if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
|
||||
// Prevent double click on radios, and the double selections (so cancellation) on checkboxes
|
||||
e.preventDefault()
|
||||
// The target component still receive the focus
|
||||
if ($btn.is('input,button')) $btn.trigger('focus')
|
||||
else $btn.find('input:visible,button:visible').first().trigger('focus')
|
||||
}
|
||||
})
|
||||
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
|
||||
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
|
||||
@@ -293,10 +298,10 @@ if (typeof jQuery === 'undefined') {
|
||||
}(jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: carousel.js v3.3.5
|
||||
* Bootstrap: carousel.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#carousel
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -324,7 +329,7 @@ if (typeof jQuery === 'undefined') {
|
||||
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
|
||||
}
|
||||
|
||||
Carousel.VERSION = '3.3.5'
|
||||
Carousel.VERSION = '3.3.7'
|
||||
|
||||
Carousel.TRANSITION_DURATION = 600
|
||||
|
||||
@@ -531,13 +536,14 @@ if (typeof jQuery === 'undefined') {
|
||||
}(jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: collapse.js v3.3.5
|
||||
* Bootstrap: collapse.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#collapse
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
/* jshint latedef: false */
|
||||
|
||||
+function ($) {
|
||||
'use strict';
|
||||
@@ -561,7 +567,7 @@ if (typeof jQuery === 'undefined') {
|
||||
if (this.options.toggle) this.toggle()
|
||||
}
|
||||
|
||||
Collapse.VERSION = '3.3.5'
|
||||
Collapse.VERSION = '3.3.7'
|
||||
|
||||
Collapse.TRANSITION_DURATION = 350
|
||||
|
||||
@@ -743,10 +749,10 @@ if (typeof jQuery === 'undefined') {
|
||||
}(jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: dropdown.js v3.3.5
|
||||
* Bootstrap: dropdown.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#dropdowns
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -763,7 +769,7 @@ if (typeof jQuery === 'undefined') {
|
||||
$(element).on('click.bs.dropdown', this.toggle)
|
||||
}
|
||||
|
||||
Dropdown.VERSION = '3.3.5'
|
||||
Dropdown.VERSION = '3.3.7'
|
||||
|
||||
function getParent($this) {
|
||||
var selector = $this.attr('data-target')
|
||||
@@ -795,7 +801,7 @@ if (typeof jQuery === 'undefined') {
|
||||
if (e.isDefaultPrevented()) return
|
||||
|
||||
$this.attr('aria-expanded', 'false')
|
||||
$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
|
||||
$parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -829,7 +835,7 @@ if (typeof jQuery === 'undefined') {
|
||||
|
||||
$parent
|
||||
.toggleClass('open')
|
||||
.trigger('shown.bs.dropdown', relatedTarget)
|
||||
.trigger($.Event('shown.bs.dropdown', relatedTarget))
|
||||
}
|
||||
|
||||
return false
|
||||
@@ -909,10 +915,10 @@ if (typeof jQuery === 'undefined') {
|
||||
}(jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: modal.js v3.3.5
|
||||
* Bootstrap: modal.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#modals
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -943,7 +949,7 @@ if (typeof jQuery === 'undefined') {
|
||||
}
|
||||
}
|
||||
|
||||
Modal.VERSION = '3.3.5'
|
||||
Modal.VERSION = '3.3.7'
|
||||
|
||||
Modal.TRANSITION_DURATION = 300
|
||||
Modal.BACKDROP_TRANSITION_DURATION = 150
|
||||
@@ -1050,7 +1056,9 @@ if (typeof jQuery === 'undefined') {
|
||||
$(document)
|
||||
.off('focusin.bs.modal') // guard against infinite focus loop
|
||||
.on('focusin.bs.modal', $.proxy(function (e) {
|
||||
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
|
||||
if (document !== e.target &&
|
||||
this.$element[0] !== e.target &&
|
||||
!this.$element.has(e.target).length) {
|
||||
this.$element.trigger('focus')
|
||||
}
|
||||
}, this))
|
||||
@@ -1247,11 +1255,11 @@ if (typeof jQuery === 'undefined') {
|
||||
}(jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: tooltip.js v3.3.5
|
||||
* Bootstrap: tooltip.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#tooltip
|
||||
* Inspired by the original jQuery.tipsy by Jason Frame
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -1274,7 +1282,7 @@ if (typeof jQuery === 'undefined') {
|
||||
this.init('tooltip', element, options)
|
||||
}
|
||||
|
||||
Tooltip.VERSION = '3.3.5'
|
||||
Tooltip.VERSION = '3.3.7'
|
||||
|
||||
Tooltip.TRANSITION_DURATION = 150
|
||||
|
||||
@@ -1565,9 +1573,11 @@ if (typeof jQuery === 'undefined') {
|
||||
|
||||
function complete() {
|
||||
if (that.hoverState != 'in') $tip.detach()
|
||||
that.$element
|
||||
.removeAttr('aria-describedby')
|
||||
.trigger('hidden.bs.' + that.type)
|
||||
if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
|
||||
that.$element
|
||||
.removeAttr('aria-describedby')
|
||||
.trigger('hidden.bs.' + that.type)
|
||||
}
|
||||
callback && callback()
|
||||
}
|
||||
|
||||
@@ -1610,7 +1620,10 @@ if (typeof jQuery === 'undefined') {
|
||||
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
|
||||
elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
|
||||
}
|
||||
var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
|
||||
var isSvg = window.SVGElement && el instanceof window.SVGElement
|
||||
// Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
|
||||
// See https://github.com/twbs/bootstrap/issues/20280
|
||||
var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
|
||||
var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
|
||||
var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
|
||||
|
||||
@@ -1726,6 +1739,7 @@ if (typeof jQuery === 'undefined') {
|
||||
that.$tip = null
|
||||
that.$arrow = null
|
||||
that.$viewport = null
|
||||
that.$element = null
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1762,10 +1776,10 @@ if (typeof jQuery === 'undefined') {
|
||||
}(jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: popover.js v3.3.5
|
||||
* Bootstrap: popover.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#popovers
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -1782,7 +1796,7 @@ if (typeof jQuery === 'undefined') {
|
||||
|
||||
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
|
||||
|
||||
Popover.VERSION = '3.3.5'
|
||||
Popover.VERSION = '3.3.7'
|
||||
|
||||
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
|
||||
placement: 'right',
|
||||
@@ -1871,10 +1885,10 @@ if (typeof jQuery === 'undefined') {
|
||||
}(jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: scrollspy.js v3.3.5
|
||||
* Bootstrap: scrollspy.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#scrollspy
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -1900,7 +1914,7 @@ if (typeof jQuery === 'undefined') {
|
||||
this.process()
|
||||
}
|
||||
|
||||
ScrollSpy.VERSION = '3.3.5'
|
||||
ScrollSpy.VERSION = '3.3.7'
|
||||
|
||||
ScrollSpy.DEFAULTS = {
|
||||
offset: 10
|
||||
@@ -2044,10 +2058,10 @@ if (typeof jQuery === 'undefined') {
|
||||
}(jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: tab.js v3.3.5
|
||||
* Bootstrap: tab.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#tabs
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -2064,7 +2078,7 @@ if (typeof jQuery === 'undefined') {
|
||||
// jscs:enable requireDollarBeforejQueryAssignment
|
||||
}
|
||||
|
||||
Tab.VERSION = '3.3.5'
|
||||
Tab.VERSION = '3.3.7'
|
||||
|
||||
Tab.TRANSITION_DURATION = 150
|
||||
|
||||
@@ -2200,10 +2214,10 @@ if (typeof jQuery === 'undefined') {
|
||||
}(jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: affix.js v3.3.5
|
||||
* Bootstrap: affix.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#affix
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -2229,7 +2243,7 @@ if (typeof jQuery === 'undefined') {
|
||||
this.checkPosition()
|
||||
}
|
||||
|
||||
Affix.VERSION = '3.3.5'
|
||||
Affix.VERSION = '3.3.7'
|
||||
|
||||
Affix.RESET = 'affix affix-top affix-bottom'
|
||||
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
#!/usr/bin/env node
|
||||
'use strict';
|
||||
|
||||
/* globals Set */
|
||||
/*!
|
||||
* Script to update version number references in the project.
|
||||
* Copyright 2015 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var sh = require('shelljs');
|
||||
sh.config.fatal = true;
|
||||
var sed = sh.sed;
|
||||
|
||||
// Blame TC39... https://github.com/benjamingr/RegExp.escape/issues/37
|
||||
RegExp.quote = function (string) {
|
||||
return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&');
|
||||
};
|
||||
RegExp.quoteReplacement = function (string) {
|
||||
return string.replace(/[$]/g, '$$');
|
||||
};
|
||||
|
||||
var DRY_RUN = false;
|
||||
|
||||
function walkAsync(directory, excludedDirectories, fileCallback, errback) {
|
||||
if (excludedDirectories.has(path.parse(directory).base)) {
|
||||
return;
|
||||
}
|
||||
fs.readdir(directory, function (err, names) {
|
||||
if (err) {
|
||||
errback(err);
|
||||
return;
|
||||
}
|
||||
names.forEach(function (name) {
|
||||
var filepath = path.join(directory, name);
|
||||
fs.lstat(filepath, function (err, stats) {
|
||||
if (err) {
|
||||
process.nextTick(errback, err);
|
||||
return;
|
||||
}
|
||||
if (stats.isSymbolicLink()) {
|
||||
return;
|
||||
}
|
||||
else if (stats.isDirectory()) {
|
||||
process.nextTick(walkAsync, filepath, excludedDirectories, fileCallback, errback);
|
||||
}
|
||||
else if (stats.isFile()) {
|
||||
process.nextTick(fileCallback, filepath);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function replaceRecursively(directory, excludedDirectories, allowedExtensions, original, replacement) {
|
||||
original = new RegExp(RegExp.quote(original), 'g');
|
||||
replacement = RegExp.quoteReplacement(replacement);
|
||||
var updateFile = !DRY_RUN ? function (filepath) {
|
||||
if (allowedExtensions.has(path.parse(filepath).ext)) {
|
||||
sed('-i', original, replacement, filepath);
|
||||
}
|
||||
} : function (filepath) {
|
||||
if (allowedExtensions.has(path.parse(filepath).ext)) {
|
||||
console.log('FILE: ' + filepath);
|
||||
}
|
||||
else {
|
||||
console.log('EXCLUDED:' + filepath);
|
||||
}
|
||||
};
|
||||
walkAsync(directory, excludedDirectories, updateFile, function (err) {
|
||||
console.error('ERROR while traversing directory!:');
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
function main(args) {
|
||||
if (args.length !== 2) {
|
||||
console.error('USAGE: change-version old_version new_version');
|
||||
console.error('Got arguments:', args);
|
||||
process.exit(1);
|
||||
}
|
||||
var oldVersion = args[0];
|
||||
var newVersion = args[1];
|
||||
var EXCLUDED_DIRS = new Set([
|
||||
'.git',
|
||||
'node_modules',
|
||||
'vendor'
|
||||
]);
|
||||
var INCLUDED_EXTENSIONS = new Set([
|
||||
// This extension whitelist is how we avoid modifying binary files
|
||||
'',
|
||||
'.css',
|
||||
'.html',
|
||||
'.js',
|
||||
'.json',
|
||||
'.less',
|
||||
'.md',
|
||||
'.nuspec',
|
||||
'.ps1',
|
||||
'.scss',
|
||||
'.txt',
|
||||
'.yml'
|
||||
]);
|
||||
replaceRecursively('.', EXCLUDED_DIRS, INCLUDED_EXTENSIONS, oldVersion, newVersion);
|
||||
}
|
||||
|
||||
main(process.argv.slice(2));
|
||||
@@ -13,7 +13,7 @@
|
||||
"docsJs": [
|
||||
"../assets/js/vendor/holder.min.js",
|
||||
"../assets/js/vendor/ZeroClipboard.min.js",
|
||||
"../assets/js/vendor/anchor.js",
|
||||
"../assets/js/vendor/anchor.min.js",
|
||||
"../assets/js/src/application.js"
|
||||
]
|
||||
},
|
||||
@@ -37,10 +37,10 @@
|
||||
"+function ($) {",
|
||||
" 'use strict';",
|
||||
" var version = $.fn.jquery.split(' ')[0].split('.')",
|
||||
" if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {",
|
||||
" throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher')",
|
||||
" if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {",
|
||||
" throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')",
|
||||
" }",
|
||||
"}(jQuery);\n\n"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
{
|
||||
browserName: "iphone",
|
||||
platform: "OS X 10.10",
|
||||
version: "8.2"
|
||||
version: "9.2"
|
||||
},
|
||||
|
||||
# iOS Chrome not currently supported by Sauce Labs
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: affix.js v3.3.5
|
||||
* Bootstrap: affix.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#affix
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
this.checkPosition()
|
||||
}
|
||||
|
||||
Affix.VERSION = '3.3.5'
|
||||
Affix.VERSION = '3.3.7'
|
||||
|
||||
Affix.RESET = 'affix affix-top affix-bottom'
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: alert.js v3.3.5
|
||||
* Bootstrap: alert.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#alerts
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
$(el).on('click', dismiss, this.close)
|
||||
}
|
||||
|
||||
Alert.VERSION = '3.3.5'
|
||||
Alert.VERSION = '3.3.7'
|
||||
|
||||
Alert.TRANSITION_DURATION = 150
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
|
||||
}
|
||||
|
||||
var $parent = $(selector)
|
||||
var $parent = $(selector === '#' ? [] : selector)
|
||||
|
||||
if (e) e.preventDefault()
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: button.js v3.3.5
|
||||
* Bootstrap: button.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#buttons
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
this.isLoading = false
|
||||
}
|
||||
|
||||
Button.VERSION = '3.3.5'
|
||||
Button.VERSION = '3.3.7'
|
||||
|
||||
Button.DEFAULTS = {
|
||||
loadingText: 'loading...'
|
||||
@@ -41,10 +41,10 @@
|
||||
|
||||
if (state == 'loadingText') {
|
||||
this.isLoading = true
|
||||
$el.addClass(d).attr(d, d)
|
||||
$el.addClass(d).attr(d, d).prop(d, true)
|
||||
} else if (this.isLoading) {
|
||||
this.isLoading = false
|
||||
$el.removeClass(d).removeAttr(d)
|
||||
$el.removeClass(d).removeAttr(d).prop(d, false)
|
||||
}
|
||||
}, this), 0)
|
||||
}
|
||||
@@ -108,10 +108,15 @@
|
||||
|
||||
$(document)
|
||||
.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
|
||||
var $btn = $(e.target)
|
||||
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
|
||||
var $btn = $(e.target).closest('.btn')
|
||||
Plugin.call($btn, 'toggle')
|
||||
if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
|
||||
if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
|
||||
// Prevent double click on radios, and the double selections (so cancellation) on checkboxes
|
||||
e.preventDefault()
|
||||
// The target component still receive the focus
|
||||
if ($btn.is('input,button')) $btn.trigger('focus')
|
||||
else $btn.find('input:visible,button:visible').first().trigger('focus')
|
||||
}
|
||||
})
|
||||
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
|
||||
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: carousel.js v3.3.5
|
||||
* Bootstrap: carousel.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#carousel
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
|
||||
}
|
||||
|
||||
Carousel.VERSION = '3.3.5'
|
||||
Carousel.VERSION = '3.3.7'
|
||||
|
||||
Carousel.TRANSITION_DURATION = 600
|
||||
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: collapse.js v3.3.5
|
||||
* Bootstrap: collapse.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#collapse
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
/* jshint latedef: false */
|
||||
|
||||
+function ($) {
|
||||
'use strict';
|
||||
@@ -29,7 +30,7 @@
|
||||
if (this.options.toggle) this.toggle()
|
||||
}
|
||||
|
||||
Collapse.VERSION = '3.3.5'
|
||||
Collapse.VERSION = '3.3.7'
|
||||
|
||||
Collapse.TRANSITION_DURATION = 350
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: dropdown.js v3.3.5
|
||||
* Bootstrap: dropdown.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#dropdowns
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
$(element).on('click.bs.dropdown', this.toggle)
|
||||
}
|
||||
|
||||
Dropdown.VERSION = '3.3.5'
|
||||
Dropdown.VERSION = '3.3.7'
|
||||
|
||||
function getParent($this) {
|
||||
var selector = $this.attr('data-target')
|
||||
@@ -51,7 +51,7 @@
|
||||
if (e.isDefaultPrevented()) return
|
||||
|
||||
$this.attr('aria-expanded', 'false')
|
||||
$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
|
||||
$parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
|
||||
$parent
|
||||
.toggleClass('open')
|
||||
.trigger('shown.bs.dropdown', relatedTarget)
|
||||
.trigger($.Event('shown.bs.dropdown', relatedTarget))
|
||||
}
|
||||
|
||||
return false
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: modal.js v3.3.5
|
||||
* Bootstrap: modal.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#modals
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
Modal.VERSION = '3.3.5'
|
||||
Modal.VERSION = '3.3.7'
|
||||
|
||||
Modal.TRANSITION_DURATION = 300
|
||||
Modal.BACKDROP_TRANSITION_DURATION = 150
|
||||
@@ -140,7 +140,9 @@
|
||||
$(document)
|
||||
.off('focusin.bs.modal') // guard against infinite focus loop
|
||||
.on('focusin.bs.modal', $.proxy(function (e) {
|
||||
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
|
||||
if (document !== e.target &&
|
||||
this.$element[0] !== e.target &&
|
||||
!this.$element.has(e.target).length) {
|
||||
this.$element.trigger('focus')
|
||||
}
|
||||
}, this))
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: popover.js v3.3.5
|
||||
* Bootstrap: popover.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#popovers
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
|
||||
|
||||
Popover.VERSION = '3.3.5'
|
||||
Popover.VERSION = '3.3.7'
|
||||
|
||||
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
|
||||
placement: 'right',
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: scrollspy.js v3.3.5
|
||||
* Bootstrap: scrollspy.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#scrollspy
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
this.process()
|
||||
}
|
||||
|
||||
ScrollSpy.VERSION = '3.3.5'
|
||||
ScrollSpy.VERSION = '3.3.7'
|
||||
|
||||
ScrollSpy.DEFAULTS = {
|
||||
offset: 10
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: tab.js v3.3.5
|
||||
* Bootstrap: tab.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#tabs
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
// jscs:enable requireDollarBeforejQueryAssignment
|
||||
}
|
||||
|
||||
Tab.VERSION = '3.3.5'
|
||||
Tab.VERSION = '3.3.7'
|
||||
|
||||
Tab.TRANSITION_DURATION = 150
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: tooltip.js v3.3.5
|
||||
* Bootstrap: tooltip.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#tooltip
|
||||
* Inspired by the original jQuery.tipsy by Jason Frame
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
this.init('tooltip', element, options)
|
||||
}
|
||||
|
||||
Tooltip.VERSION = '3.3.5'
|
||||
Tooltip.VERSION = '3.3.7'
|
||||
|
||||
Tooltip.TRANSITION_DURATION = 150
|
||||
|
||||
@@ -317,9 +317,11 @@
|
||||
|
||||
function complete() {
|
||||
if (that.hoverState != 'in') $tip.detach()
|
||||
that.$element
|
||||
.removeAttr('aria-describedby')
|
||||
.trigger('hidden.bs.' + that.type)
|
||||
if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
|
||||
that.$element
|
||||
.removeAttr('aria-describedby')
|
||||
.trigger('hidden.bs.' + that.type)
|
||||
}
|
||||
callback && callback()
|
||||
}
|
||||
|
||||
@@ -362,7 +364,10 @@
|
||||
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
|
||||
elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
|
||||
}
|
||||
var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
|
||||
var isSvg = window.SVGElement && el instanceof window.SVGElement
|
||||
// Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
|
||||
// See https://github.com/twbs/bootstrap/issues/20280
|
||||
var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
|
||||
var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
|
||||
var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
|
||||
|
||||
@@ -478,6 +483,7 @@
|
||||
that.$tip = null
|
||||
that.$arrow = null
|
||||
that.$viewport = null
|
||||
that.$element = null
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: transition.js v3.3.5
|
||||
* Bootstrap: transition.js v3.3.7
|
||||
* http://getbootstrap.com/javascript/#transitions
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*!
|
||||
* Bootstrap v3.3.5 (http://getbootstrap.com)
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
.border-right-radius(0);
|
||||
}
|
||||
}
|
||||
// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
|
||||
// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it
|
||||
.btn-group > .btn:last-child:not(:first-child),
|
||||
.btn-group > .dropdown-toggle:not(:first-child) {
|
||||
.border-left-radius(0);
|
||||
@@ -173,12 +173,12 @@
|
||||
border-radius: 0;
|
||||
}
|
||||
&:first-child:not(:last-child) {
|
||||
border-top-right-radius: @btn-border-radius-base;
|
||||
.border-top-radius(@btn-border-radius-base);
|
||||
.border-bottom-radius(0);
|
||||
}
|
||||
&:last-child:not(:first-child) {
|
||||
border-bottom-left-radius: @btn-border-radius-base;
|
||||
.border-top-radius(0);
|
||||
.border-bottom-radius(@btn-border-radius-base);
|
||||
}
|
||||
}
|
||||
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
|
||||
|
||||
@@ -101,6 +101,7 @@
|
||||
color: @carousel-control-color;
|
||||
text-align: center;
|
||||
text-shadow: @carousel-text-shadow;
|
||||
background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug
|
||||
// We can't have this transition here because WebKit cancels the carousel
|
||||
// animation if you trip this while in the middle of another animation.
|
||||
|
||||
@@ -240,18 +241,18 @@
|
||||
.glyphicon-chevron-right,
|
||||
.icon-prev,
|
||||
.icon-next {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
margin-top: -15px;
|
||||
font-size: 30px;
|
||||
width: (@carousel-control-font-size * 1.5);
|
||||
height: (@carousel-control-font-size * 1.5);
|
||||
margin-top: (@carousel-control-font-size / -2);
|
||||
font-size: (@carousel-control-font-size * 1.5);
|
||||
}
|
||||
.glyphicon-chevron-left,
|
||||
.icon-prev {
|
||||
margin-left: -15px;
|
||||
margin-left: (@carousel-control-font-size / -2);
|
||||
}
|
||||
.glyphicon-chevron-right,
|
||||
.icon-next {
|
||||
margin-right: -15px;
|
||||
margin-right: (@carousel-control-font-size / -2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -132,6 +132,12 @@ output {
|
||||
// Placeholder
|
||||
.placeholder();
|
||||
|
||||
// Unstyle the caret on `<select>`s in IE10+.
|
||||
&::-ms-expand {
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
// Disabled and read-only inputs
|
||||
//
|
||||
// HTML5 says that controls under a fieldset > legend:first-child won't be
|
||||
@@ -175,7 +181,7 @@ input[type="search"] {
|
||||
// set a pixel line-height that matches the given height of the input, but only
|
||||
// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848
|
||||
//
|
||||
// Note that as of 8.3, iOS doesn't support `datetime` or `week`.
|
||||
// Note that as of 9.3, iOS doesn't support `week`.
|
||||
|
||||
@media screen and (-webkit-min-device-pixel-ratio: 0) {
|
||||
input[type="date"],
|
||||
@@ -433,10 +439,10 @@ input[type="checkbox"] {
|
||||
.has-feedback label {
|
||||
|
||||
& ~ .form-control-feedback {
|
||||
top: (@line-height-computed + 5); // Height of the `label` and its margin
|
||||
top: (@line-height-computed + 5); // Height of the `label` and its margin
|
||||
}
|
||||
&.sr-only ~ .form-control-feedback {
|
||||
top: 0;
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -591,7 +597,7 @@ input[type="checkbox"] {
|
||||
.form-group-lg {
|
||||
@media (min-width: @screen-sm-min) {
|
||||
.control-label {
|
||||
padding-top: ((@padding-large-vertical * @line-height-large) + 1);
|
||||
padding-top: (@padding-large-vertical + 1);
|
||||
font-size: @font-size-large;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
}
|
||||
|
||||
// Individual icons
|
||||
.glyphicon-asterisk { &:before { content: "\2a"; } }
|
||||
.glyphicon-plus { &:before { content: "\2b"; } }
|
||||
.glyphicon-asterisk { &:before { content: "\002a"; } }
|
||||
.glyphicon-plus { &:before { content: "\002b"; } }
|
||||
.glyphicon-euro,
|
||||
.glyphicon-eur { &:before { content: "\20ac"; } }
|
||||
.glyphicon-minus { &:before { content: "\2212"; } }
|
||||
|
||||
@@ -29,6 +29,10 @@
|
||||
|
||||
width: 100%;
|
||||
margin-bottom: 0;
|
||||
|
||||
&:focus {
|
||||
z-index: 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,18 +83,18 @@
|
||||
text-align: center;
|
||||
background-color: @input-group-addon-bg;
|
||||
border: 1px solid @input-group-addon-border-color;
|
||||
border-radius: @border-radius-base;
|
||||
border-radius: @input-border-radius;
|
||||
|
||||
// Sizing
|
||||
&.input-sm {
|
||||
padding: @padding-small-vertical @padding-small-horizontal;
|
||||
font-size: @font-size-small;
|
||||
border-radius: @border-radius-small;
|
||||
border-radius: @input-border-radius-small;
|
||||
}
|
||||
&.input-lg {
|
||||
padding: @padding-large-vertical @padding-large-horizontal;
|
||||
font-size: @font-size-large;
|
||||
border-radius: @border-radius-large;
|
||||
border-radius: @input-border-radius-large;
|
||||
}
|
||||
|
||||
// Nuke default margins from checkboxes and radios to vertically center within.
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
.container &,
|
||||
.container-fluid & {
|
||||
border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
|
||||
padding-left: (@grid-gutter-width / 2);
|
||||
padding-right: (@grid-gutter-width / 2);
|
||||
}
|
||||
|
||||
.container {
|
||||
|
||||
@@ -42,12 +42,9 @@
|
||||
&.disabled,
|
||||
&[disabled],
|
||||
fieldset[disabled] & {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus,
|
||||
&.focus,
|
||||
&:active,
|
||||
&.active {
|
||||
&.focus {
|
||||
background-color: @background;
|
||||
border-color: @border;
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
.container-fixed(@gutter: @grid-gutter-width) {
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
padding-left: (@gutter / 2);
|
||||
padding-right: (@gutter / 2);
|
||||
padding-left: floor((@gutter / 2));
|
||||
padding-right: ceil((@gutter / 2));
|
||||
&:extend(.clearfix all);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
//
|
||||
// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
|
||||
|
||||
// Deprecated as of v3.0.1 (will be removed in v4)
|
||||
// Deprecated as of v3.0.1 (has been removed in v4)
|
||||
.hide-text() {
|
||||
font: ~"0/0" a;
|
||||
color: transparent;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// WebKit-style focus
|
||||
|
||||
.tab-focus() {
|
||||
// Default
|
||||
outline: thin dotted;
|
||||
// WebKit
|
||||
// WebKit-specific. Other browsers will keep their default outline style.
|
||||
// (Initially tried to also force default via `outline: initial`,
|
||||
// but that seems to erroneously remove the outline in Firefox altogether.)
|
||||
outline: 5px auto -webkit-focus-ring-color;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Vendor Prefixes
|
||||
//
|
||||
// All vendor mixins are deprecated as of v3.2.0 due to the introduction of
|
||||
// Autoprefixer in our Gruntfile. They will be removed in v4.
|
||||
// Autoprefixer in our Gruntfile. They have been removed in v4.
|
||||
|
||||
// - Animations
|
||||
// - Backface visibility
|
||||
@@ -54,7 +54,7 @@
|
||||
// Prevent browsers from flickering when using CSS 3D transforms.
|
||||
// Default value is `visible`, but can be changed to `hidden`
|
||||
|
||||
.backface-visibility(@visibility){
|
||||
.backface-visibility(@visibility) {
|
||||
-webkit-backface-visibility: @visibility;
|
||||
-moz-backface-visibility: @visibility;
|
||||
backface-visibility: @visibility;
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
.modal-header {
|
||||
padding: @modal-title-padding;
|
||||
border-bottom: 1px solid @modal-header-border-color;
|
||||
min-height: (@modal-title-padding + @modal-title-line-height);
|
||||
&:extend(.clearfix all);
|
||||
}
|
||||
// Close icon
|
||||
.modal-header .close {
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
> li > span {
|
||||
&:hover,
|
||||
&:focus {
|
||||
z-index: 3;
|
||||
z-index: 2;
|
||||
color: @pagination-hover-color;
|
||||
background-color: @pagination-hover-bg;
|
||||
border-color: @pagination-hover-border;
|
||||
@@ -52,7 +52,7 @@
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
z-index: 2;
|
||||
z-index: 3;
|
||||
color: @pagination-active-color;
|
||||
background-color: @pagination-active-bg;
|
||||
border-color: @pagination-active-border;
|
||||
|
||||
@@ -214,7 +214,7 @@
|
||||
}
|
||||
|
||||
|
||||
// Collapsable panels (aka, accordion)
|
||||
// Collapsible panels (aka, accordion)
|
||||
//
|
||||
// Wrap a series of panels in `.panel-group` to turn them into an accordion with
|
||||
// the help of our collapse JavaScript plugin.
|
||||
|
||||
@@ -120,7 +120,7 @@ hr {
|
||||
|
||||
// Only display content to screen readers
|
||||
//
|
||||
// See: http://a11yproject.com/posts/how-to-hide-content/
|
||||
// See: http://a11yproject.com/posts/how-to-hide-content
|
||||
|
||||
.sr-only {
|
||||
position: absolute;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*!
|
||||
* Bootstrap v3.3.5 (http://getbootstrap.com)
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@ dd {
|
||||
&:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present
|
||||
}
|
||||
|
||||
@media (min-width: @grid-float-breakpoint) {
|
||||
@media (min-width: @dl-horizontal-breakpoint) {
|
||||
dt {
|
||||
float: left;
|
||||
width: (@dl-horizontal-offset - 20);
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
//** Global background color for active items (e.g., navs or dropdowns).
|
||||
@component-active-bg: @brand-primary;
|
||||
|
||||
//** Width of the `border` for generating carets that indicator dropdowns.
|
||||
//** Width of the `border` for generating carets that indicate dropdowns.
|
||||
@caret-width-base: 4px;
|
||||
//** Carets increase slightly in size for larger components.
|
||||
@caret-width-large: 5px;
|
||||
@@ -863,5 +863,7 @@
|
||||
@page-header-border-color: @gray-lighter;
|
||||
//** Width of horizontal description list titles
|
||||
@dl-horizontal-offset: @component-offset-horizontal;
|
||||
//** Point at which .dl-horizontal becomes horizontal
|
||||
@dl-horizontal-breakpoint: @grid-float-breakpoint;
|
||||
//** Horizontal line color.
|
||||
@hr-border: @gray-lighter;
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
$nuget = $env:NuGet
|
||||
|
||||
# parse the version number out of package.json
|
||||
$bsversion = ((Get-Content $env:SourcesPath\package.json) -join "`n" | ConvertFrom-Json).version
|
||||
|
||||
# create packages
|
||||
& $nuget pack "nuget\bootstrap.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion
|
||||
& $nuget pack "nuget\bootstrap.less.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion
|
||||
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>bootstrap.less</id>
|
||||
<version>3.3.7</version>
|
||||
<title>Bootstrap Less</title>
|
||||
<authors>Twitter, Inc.</authors>
|
||||
<owners>bootstrap</owners>
|
||||
<description>The most popular front-end framework for developing responsive, mobile first projects on the web.</description>
|
||||
<releaseNotes>http://blog.getbootstrap.com</releaseNotes>
|
||||
<summary>Bootstrap framework in Less. Includes fonts and JavaScript</summary>
|
||||
<language>en-us</language>
|
||||
<projectUrl>http://getbootstrap.com</projectUrl>
|
||||
<iconUrl>http://getbootstrap.com/apple-touch-icon.png</iconUrl>
|
||||
<licenseUrl>https://github.com/twbs/bootstrap/blob/master/LICENSE</licenseUrl>
|
||||
<copyright>Copyright 2016</copyright>
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||
<dependencies>
|
||||
<dependency id="jQuery" version="[1.9.1,4)" />
|
||||
</dependencies>
|
||||
<tags>css js less mobile-first responsive front-end framework web</tags>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="less\**\*.less" target="content\Content\bootstrap" />
|
||||
<file src="fonts\*.*" target="content\Content\fonts" />
|
||||
<file src="dist\js\bootstrap*.js" target="content\Scripts" />
|
||||
</files>
|
||||
</package>
|
||||
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>bootstrap</id>
|
||||
<version>3.3.7</version>
|
||||
<title>Bootstrap CSS</title>
|
||||
<authors>Twitter, Inc.</authors>
|
||||
<owners>bootstrap</owners>
|
||||
<description>The most popular front-end framework for developing responsive, mobile first projects on the web.</description>
|
||||
<releaseNotes>http://blog.getbootstrap.com</releaseNotes>
|
||||
<summary>Bootstrap framework in CSS. Includes fonts and JavaScript</summary>
|
||||
<language>en-us</language>
|
||||
<projectUrl>http://getbootstrap.com</projectUrl>
|
||||
<iconUrl>http://getbootstrap.com/apple-touch-icon.png</iconUrl>
|
||||
<licenseUrl>https://github.com/twbs/bootstrap/blob/master/LICENSE</licenseUrl>
|
||||
<copyright>Copyright 2016</copyright>
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||
<dependencies>
|
||||
<dependency id="jQuery" version="[1.9.1,4)" />
|
||||
</dependencies>
|
||||
<tags>css js less mobile-first responsive front-end framework web</tags>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="dist\css\*.*" target="content\Content" />
|
||||
<file src="dist\fonts\*.*" target="content\fonts" />
|
||||
<file src="dist\js\bootstrap*.js" target="content\Scripts" />
|
||||
</files>
|
||||
</package>
|
||||
@@ -6,19 +6,26 @@
|
||||
Package.describe({
|
||||
name: 'twbs:bootstrap', // http://atmospherejs.com/twbs/bootstrap
|
||||
summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.',
|
||||
version: '3.3.5',
|
||||
version: '3.3.7',
|
||||
git: 'https://github.com/twbs/bootstrap.git'
|
||||
});
|
||||
|
||||
Package.onUse(function (api) {
|
||||
api.versionsFrom('METEOR@1.0');
|
||||
api.use('jquery', 'client');
|
||||
api.addFiles([
|
||||
var assets = [
|
||||
'dist/fonts/glyphicons-halflings-regular.eot',
|
||||
'dist/fonts/glyphicons-halflings-regular.svg',
|
||||
'dist/fonts/glyphicons-halflings-regular.ttf',
|
||||
'dist/fonts/glyphicons-halflings-regular.woff',
|
||||
'dist/fonts/glyphicons-halflings-regular.woff2',
|
||||
'dist/fonts/glyphicons-halflings-regular.woff2'
|
||||
];
|
||||
if (api.addAssets) {
|
||||
api.addAssets(assets, 'client');
|
||||
} else {
|
||||
api.addFiles(assets, 'client', { isAsset: true });
|
||||
}
|
||||
api.addFiles([
|
||||
'dist/css/bootstrap.css',
|
||||
'dist/js/bootstrap.js'
|
||||
], 'client');
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "bootstrap",
|
||||
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
|
||||
"version": "3.3.5",
|
||||
"version": "3.3.7",
|
||||
"keywords": [
|
||||
"css",
|
||||
"less",
|
||||
@@ -14,6 +14,8 @@
|
||||
"homepage": "http://getbootstrap.com",
|
||||
"author": "Twitter, Inc.",
|
||||
"scripts": {
|
||||
"change-version": "node grunt/change-version.js",
|
||||
"update-shrinkwrap": "npm shrinkwrap --dev && shx mv ./npm-shrinkwrap.json ./grunt/npm-shrinkwrap.json",
|
||||
"test": "grunt test"
|
||||
},
|
||||
"style": "dist/css/bootstrap.css",
|
||||
@@ -29,34 +31,34 @@
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"btoa": "~1.1.2",
|
||||
"glob": "~5.0.5",
|
||||
"grunt": "~0.4.5",
|
||||
"grunt-autoprefixer": "~3.0.0",
|
||||
"grunt-contrib-clean": "~0.6.0",
|
||||
"grunt-contrib-compress": "~0.13.0",
|
||||
"grunt-contrib-concat": "~0.5.1",
|
||||
"grunt-contrib-connect": "~0.10.1",
|
||||
"grunt-contrib-copy": "~0.8.0",
|
||||
"grunt-contrib-csslint": "~0.4.0",
|
||||
"grunt-contrib-cssmin": "~0.12.3",
|
||||
"grunt-contrib-htmlmin": "~0.4.0",
|
||||
"grunt-contrib-jade": "~0.14.1",
|
||||
"grunt-contrib-jshint": "~0.11.2",
|
||||
"grunt-contrib-less": "~1.0.1",
|
||||
"glob": "~7.0.3",
|
||||
"grunt": "~1.0.1",
|
||||
"grunt-autoprefixer": "~3.0.4",
|
||||
"grunt-contrib-clean": "~1.0.0",
|
||||
"grunt-contrib-compress": "~1.3.0",
|
||||
"grunt-contrib-concat": "~1.0.0",
|
||||
"grunt-contrib-connect": "~1.0.0",
|
||||
"grunt-contrib-copy": "~1.0.0",
|
||||
"grunt-contrib-csslint": "~1.0.0",
|
||||
"grunt-contrib-cssmin": "~1.0.0",
|
||||
"grunt-contrib-htmlmin": "~1.5.0",
|
||||
"grunt-contrib-jshint": "~1.0.0",
|
||||
"grunt-contrib-less": "~1.3.0",
|
||||
"grunt-contrib-pug": "~1.0.0",
|
||||
"grunt-contrib-qunit": "~0.7.0",
|
||||
"grunt-contrib-uglify": "~0.9.1",
|
||||
"grunt-contrib-watch": "~0.6.1",
|
||||
"grunt-csscomb": "~3.0.0",
|
||||
"grunt-exec": "~0.4.6",
|
||||
"grunt-html": "~4.0.3",
|
||||
"grunt-jekyll": "~0.4.2",
|
||||
"grunt-jscs": "~1.8.0",
|
||||
"grunt-saucelabs": "~8.6.1",
|
||||
"grunt-sed": "twbs/grunt-sed#v0.2.0",
|
||||
"load-grunt-tasks": "~3.2.0",
|
||||
"markdown-it": "^4.2.1",
|
||||
"npm-shrinkwrap": "^200.4.0",
|
||||
"time-grunt": "^1.2.0"
|
||||
"grunt-contrib-uglify": "~1.0.0",
|
||||
"grunt-contrib-watch": "~1.0.0",
|
||||
"grunt-csscomb": "~3.1.0",
|
||||
"grunt-exec": "~1.0.0",
|
||||
"grunt-html": "~8.0.1",
|
||||
"grunt-jekyll": "~0.4.4",
|
||||
"grunt-jscs": "~3.0.1",
|
||||
"grunt-saucelabs": "~9.0.0",
|
||||
"load-grunt-tasks": "~3.5.0",
|
||||
"markdown-it": "^7.0.0",
|
||||
"shelljs": "^0.7.0",
|
||||
"shx": "^0.1.2",
|
||||
"time-grunt": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.1"
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
{
|
||||
"name": "eonasdan-bootstrap-datetimepicker",
|
||||
"version": "3.1.3",
|
||||
"version": "4.17.47",
|
||||
"main": [
|
||||
"build/css/bootstrap-datetimepicker.min.css",
|
||||
"build/js/bootstrap-datetimepicker.min.js"
|
||||
],
|
||||
"dependencies": {
|
||||
"jquery": ">=1.8.3",
|
||||
"bootstrap": ">= 3.0",
|
||||
"moment": ">=2.8.0"
|
||||
"moment": ">=2.10.5"
|
||||
},
|
||||
"homepage": "https://github.com/Eonasdan/bootstrap-datetimepicker",
|
||||
"authors": [
|
||||
@@ -32,14 +31,14 @@
|
||||
"test",
|
||||
"tests"
|
||||
],
|
||||
"_release": "3.1.3",
|
||||
"_release": "4.17.47",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v3.1.3",
|
||||
"commit": "a597288db638f7c959e78d29ea53db7b6b2a9149"
|
||||
"tag": "4.17.47",
|
||||
"commit": "25c11d79e614bc6463a87c3dd9cbf8280422e006"
|
||||
},
|
||||
"_source": "git://github.com/Eonasdan/bootstrap-datetimepicker.git",
|
||||
"_target": "3.1.3",
|
||||
"_source": "https://github.com/Eonasdan/bootstrap-datetimepicker.git",
|
||||
"_target": "4.17.47",
|
||||
"_originalSource": "eonasdan-bootstrap-datetimepicker",
|
||||
"_direct": true
|
||||
}
|
||||
@@ -1,7 +1,9 @@
|
||||
Submitting Issues
|
||||
=================
|
||||
|
||||
If you are submitting a bug, please test and/or fork [this jsfiddle](http://jsfiddle.net/kmbo576p/) demonstrating the issue. Code issues and fringe case bugs that do not include a jsfiddle (or similar) will be closed.
|
||||
If you are submitting a bug, please test and/or fork [this jsfiddle](http://jsfiddle.net/Eonasdan/0Ltv25o8/) demonstrating the issue. Code issues and fringe case bugs that do not include a jsfiddle (or similar) will be closed.
|
||||
|
||||
Issues that are submitted without a description (title only) will be closed with no further explanation.
|
||||
|
||||
Contributing code
|
||||
=================
|
||||
@@ -22,6 +24,9 @@ Very important notes
|
||||
|
||||
* **Pull requests to the `master` branch will be closed.** Please submit all pull requests to the `development` branch.
|
||||
* **Do not include the minified files in your pull request.** Don't worry, we'll build them when we cut a release.
|
||||
* Pull requests that do not include a description (title only) and the following will be closed:
|
||||
* What the change does
|
||||
* A use case (for new features or enhancements)
|
||||
|
||||
Grunt tasks
|
||||
===========
|
||||
@@ -30,3 +35,4 @@ We use Grunt for managing the build. Here are some useful Grunt tasks:
|
||||
|
||||
* `grunt` The default task lints the code and runs the tests. You should make sure you do this before submitting a PR.
|
||||
* `grunt build` Compiles the less stylesheet and minifies the javascript source in build directory.
|
||||
* `grunt build:travis` Compliles and runs the jasmine/travis tests. **All PR's MUST pass tests in place**
|
||||
@@ -2,11 +2,10 @@ module.exports = function (grunt) {
|
||||
'use strict';
|
||||
grunt.initConfig({
|
||||
pkg: grunt.file.readJSON('package.json'),
|
||||
|
||||
uglify : {
|
||||
uglify: {
|
||||
target: {
|
||||
files: {
|
||||
'build/js/bootstrap-datetimepicker.min.js' : 'src/js/bootstrap-datetimepicker.js'
|
||||
'build/js/bootstrap-datetimepicker.min.js': 'src/js/bootstrap-datetimepicker.js'
|
||||
}
|
||||
},
|
||||
options: {
|
||||
@@ -21,135 +20,176 @@ module.exports = function (grunt) {
|
||||
preserveComments: 'some'
|
||||
}
|
||||
},
|
||||
|
||||
jshint: {
|
||||
all: [
|
||||
'Gruntfile.js', 'src/js/*.js'
|
||||
'Gruntfile.js', 'src/js/*.js', 'test/*.js'
|
||||
],
|
||||
options: {
|
||||
'browser' : true,
|
||||
'node' : true,
|
||||
'boss' : false,
|
||||
'curly' : true,
|
||||
'debug' : false,
|
||||
'devel' : false,
|
||||
'eqeqeq' : true,
|
||||
'bitwise' : true,
|
||||
'eqnull' : true,
|
||||
'evil' : false,
|
||||
'forin' : true,
|
||||
'immed' : false,
|
||||
'laxbreak' : false,
|
||||
'newcap' : true,
|
||||
'noarg' : true,
|
||||
'noempty' : false,
|
||||
'nonew' : false,
|
||||
'onevar' : true,
|
||||
'plusplus' : false,
|
||||
'regexp' : false,
|
||||
'undef' : true,
|
||||
'sub' : true,
|
||||
'strict' : true,
|
||||
'unused' : true,
|
||||
'white' : true,
|
||||
'es3' : true,
|
||||
'camelcase' : true,
|
||||
'quotmark' : 'single',
|
||||
'browser': true,
|
||||
'node': true,
|
||||
'jquery': true,
|
||||
'boss': false,
|
||||
'curly': true,
|
||||
'debug': false,
|
||||
'devel': false,
|
||||
'eqeqeq': true,
|
||||
'bitwise': true,
|
||||
'eqnull': true,
|
||||
'evil': false,
|
||||
'forin': true,
|
||||
'immed': false,
|
||||
'laxbreak': false,
|
||||
'newcap': true,
|
||||
'noarg': true,
|
||||
'noempty': false,
|
||||
'nonew': false,
|
||||
'onevar': true,
|
||||
'plusplus': false,
|
||||
'regexp': false,
|
||||
'undef': true,
|
||||
'sub': true,
|
||||
'strict': true,
|
||||
'unused': true,
|
||||
'white': true,
|
||||
'es3': true,
|
||||
'camelcase': true,
|
||||
'quotmark': 'single',
|
||||
'globals': {
|
||||
'define': false,
|
||||
'jQuery': false,
|
||||
'moment': false
|
||||
'moment': false,
|
||||
// Jasmine
|
||||
'jasmine': false,
|
||||
'describe': false,
|
||||
'xdescribe': false,
|
||||
'expect': false,
|
||||
'it': false,
|
||||
'xit': false,
|
||||
'spyOn': false,
|
||||
'beforeEach': false,
|
||||
'afterEach': false
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
jscs: {
|
||||
all: [
|
||||
'Gruntfile.js', 'src/js/*.js'
|
||||
'Gruntfile.js', 'src/js/*.js', 'test/*.js'
|
||||
],
|
||||
options: {
|
||||
config: '.jscs.json'
|
||||
}
|
||||
},
|
||||
|
||||
less: {
|
||||
production: {
|
||||
options: {
|
||||
cleancss: true
|
||||
cleancss: true,
|
||||
compress: true,
|
||||
paths: 'node_modules'
|
||||
},
|
||||
files: {
|
||||
'build/css/bootstrap-datetimepicker.min.css': 'src/less/bootstrap-datetimepicker-build.less'
|
||||
}
|
||||
},
|
||||
development: {
|
||||
options: {
|
||||
paths: 'node_modules'
|
||||
},
|
||||
files: {
|
||||
'build/css/bootstrap-datetimepicker.css': 'src/less/bootstrap-datetimepicker-build.less'
|
||||
}
|
||||
}
|
||||
},
|
||||
env: {
|
||||
paris: {
|
||||
TZ: 'Europe/Paris' // sets env for phantomJS https://github.com/ariya/phantomjs/issues/10379#issuecomment-36058589
|
||||
}
|
||||
},
|
||||
connect: {
|
||||
server: {
|
||||
options: {
|
||||
port: 8099
|
||||
}
|
||||
}
|
||||
},
|
||||
jasmine: {
|
||||
customTemplate: {
|
||||
src: 'src/js/*.js',
|
||||
options: {
|
||||
specs: 'test/*Spec.js',
|
||||
helpers: 'test/*Helper.js',
|
||||
host: 'http://127.0.0.1:8099',
|
||||
styles: [
|
||||
'node_modules/bootstrap/dist/css/bootstrap.min.css',
|
||||
'build/css/bootstrap-datetimepicker.min.css'
|
||||
],
|
||||
vendor: [
|
||||
'node_modules/jquery/dist/jquery.min.js',
|
||||
'node_modules/moment/min/moment-with-locales.min.js',
|
||||
'node_modules/moment-timezone/moment-timezone.js',
|
||||
'node_modules/bootstrap/dist/js/bootstrap.min.js'
|
||||
],
|
||||
display: 'none',
|
||||
summary: 'true'
|
||||
}
|
||||
}
|
||||
},
|
||||
nugetpack: {
|
||||
less: {
|
||||
src: 'src/nuget/Bootstrap.v3.Datetimepicker.nuspec',
|
||||
dest: 'build/nuget',
|
||||
options: {
|
||||
version: '<%= pkg.version %>'
|
||||
}
|
||||
},
|
||||
css: {
|
||||
src: 'src/nuget/Bootstrap.v3.Datetimepicker.CSS.nuspec',
|
||||
dest: 'build/nuget',
|
||||
options: {
|
||||
version: '<%= pkg.version %>'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
grunt.loadTasks('tasks');
|
||||
|
||||
// These plugins provide necessary tasks.
|
||||
grunt.loadNpmTasks('grunt-env');
|
||||
grunt.loadNpmTasks('grunt-contrib-connect');
|
||||
grunt.loadNpmTasks('grunt-contrib-jasmine');
|
||||
grunt.loadNpmTasks('grunt-nuget');
|
||||
|
||||
require('load-grunt-tasks')(grunt);
|
||||
|
||||
// Default task.
|
||||
grunt.registerTask('default', ['jshint', 'jscs']);
|
||||
|
||||
// travis build task
|
||||
grunt.registerTask('default', ['jshint', 'jscs', 'less', 'env:paris', 'connect', 'jasmine']);
|
||||
grunt.registerTask('build:travis', [
|
||||
// code style
|
||||
'jshint', 'jscs'
|
||||
'jshint', 'jscs',
|
||||
// build
|
||||
'uglify', 'less',
|
||||
// tests
|
||||
'env:paris', 'connect', 'jasmine'
|
||||
]);
|
||||
|
||||
// Task to be run when building
|
||||
grunt.registerTask('build', [
|
||||
'jshint', 'jscs', 'uglify', 'less'
|
||||
]);
|
||||
grunt.registerTask('build', ['jshint', 'jscs', 'uglify', 'less']);
|
||||
|
||||
grunt.registerTask('nuget', 'Create a nuget package', function () {
|
||||
var target = grunt.option('target') || 'less', done = this.async();
|
||||
if (target === 'less') {
|
||||
grunt.util.spawn({
|
||||
cmd: 'src/nuget/nuget.exe',
|
||||
args: [
|
||||
'pack',
|
||||
'src/nuget/Bootstrap.v3.Datetimepicker.nuspec',
|
||||
'-OutputDirectory',
|
||||
'build/nuget',
|
||||
'-Version',
|
||||
grunt.config.get('pkg').version
|
||||
]
|
||||
}, function (error, result) {
|
||||
if (error) {
|
||||
grunt.log.error(error);
|
||||
} else {
|
||||
grunt.log.write(result);
|
||||
}
|
||||
done();
|
||||
});
|
||||
}
|
||||
else {
|
||||
grunt.util.spawn({
|
||||
cmd: 'src/nuget/nuget.exe',
|
||||
args: [
|
||||
'pack',
|
||||
'src/nuget/Bootstrap.v3.Datetimepicker.CSS.nuspec',
|
||||
'-OutputDirectory',
|
||||
'build/nuget',
|
||||
'-Version',
|
||||
grunt.config.get('pkg').version
|
||||
]
|
||||
}, function (error, result) {
|
||||
if (error) {
|
||||
grunt.log.error(error);
|
||||
} else {
|
||||
grunt.log.write(result);
|
||||
}
|
||||
done();
|
||||
});
|
||||
grunt.registerTask('test', ['jshint', 'jscs', 'uglify', 'less', 'env:paris', 'connect', 'jasmine']);
|
||||
|
||||
grunt.registerTask('docs', 'Generate docs', function () {
|
||||
grunt.util.spawn({
|
||||
cmd: 'mkdocs',
|
||||
args: ['build', '--clean']
|
||||
});
|
||||
});
|
||||
|
||||
grunt.registerTask('release', function (version) {
|
||||
if (!version || version.split('.').length !== 3) {
|
||||
grunt.fail.fatal('malformed version. Use grunt release:1.2.3');
|
||||
}
|
||||
|
||||
grunt.task.run([
|
||||
'bump_version:' + version,
|
||||
'build:travis',
|
||||
'docs',
|
||||
'nugetpack'
|
||||
]);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) {{{year}}} {{{fullname}}}
|
||||
Copyright (c) 2015 Jonathan Peterson (@Eonasdan)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,17 +1,20 @@
|
||||
# Bootstrap v3 datetimepicker widget  
|
||||
# Bootstrap 3 Date/Time Picker
|
||||
 
|
||||
|
||||

|
||||
|
||||
## [View the manual and demos](http://eonasdan.github.io/bootstrap-datetimepicker/)
|
||||
|
||||
## Submitting Issues
|
||||
Please test and/or fork [this jsfiddle](http://jsfiddle.net/kmbo576p/) with an example of your issue before you post an issue here.
|
||||
## [Installation instructions](http://eonasdan.github.io/bootstrap-datetimepicker/Installing/)
|
||||
|
||||
## Where do you use this?
|
||||
I'd love to know if your public site is using this plugin and list your logo on the documentation site. Please email me `eonasdan at outlook dot com`. Do not submit issue/feature request to this email, they will be ignored.
|
||||
## [Change Log](http://eonasdan.github.io/bootstrap-datetimepicker/Changelog/)
|
||||
|
||||
### This issue tracker is no longer actively monitored.
|
||||
|
||||
# Version 5
|
||||
|
||||
Version 5 is being completely rewritten in ES6 and modularized as Tempus Dominus.
|
||||
|
||||
v5 is [in alpha](https://github.com/tempusdominus/bootstrap-3).
|
||||
|
||||
## [Installation instructions](https://github.com/Eonasdan/bootstrap-datetimepicker/wiki/Installation)
|
||||
Installation instructions has been moved to the wiki
|
||||
|
||||
## [Change Log](https://github.com/Eonasdan/bootstrap-datetimepicker/wiki/Change-Log)
|
||||
The change log has moved to the wiki
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
{
|
||||
"name": "eonasdan-bootstrap-datetimepicker",
|
||||
"version": "3.1.3",
|
||||
"version": "4.17.47",
|
||||
"main": [
|
||||
"build/css/bootstrap-datetimepicker.min.css",
|
||||
"build/js/bootstrap-datetimepicker.min.js"
|
||||
],
|
||||
"dependencies": {
|
||||
"jquery": ">=1.8.3",
|
||||
"bootstrap": ">= 3.0",
|
||||
"moment": ">=2.8.0"
|
||||
"moment": ">=2.10.5"
|
||||
},
|
||||
"homepage": "https://github.com/Eonasdan/bootstrap-datetimepicker",
|
||||
"authors": [
|
||||
|
||||
@@ -1,75 +1,77 @@
|
||||
/*!
|
||||
* Datetimepicker for Bootstrap v3
|
||||
//! version : 3.1.3
|
||||
* Datetimepicker for Bootstrap 3
|
||||
* version : 4.17.47
|
||||
* https://github.com/Eonasdan/bootstrap-datetimepicker/
|
||||
*/
|
||||
.bootstrap-datetimepicker-widget {
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 250px;
|
||||
list-style: none;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget.dropdown-menu {
|
||||
display: block;
|
||||
margin: 2px 0;
|
||||
padding: 4px;
|
||||
margin-top: 1px;
|
||||
z-index: 99999 !important;
|
||||
border-radius: 4px;
|
||||
width: 19em;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget.timepicker-sbs {
|
||||
width: 600px;
|
||||
@media (min-width: 768px) {
|
||||
.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
|
||||
width: 38em;
|
||||
}
|
||||
}
|
||||
.bootstrap-datetimepicker-widget.bottom:before {
|
||||
@media (min-width: 992px) {
|
||||
.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
|
||||
width: 38em;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
|
||||
width: 38em;
|
||||
}
|
||||
}
|
||||
.bootstrap-datetimepicker-widget.dropdown-menu:before,
|
||||
.bootstrap-datetimepicker-widget.dropdown-menu:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before {
|
||||
border-left: 7px solid transparent;
|
||||
border-right: 7px solid transparent;
|
||||
border-bottom: 7px solid #ccc;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
position: absolute;
|
||||
top: -7px;
|
||||
left: 7px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget.bottom:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after {
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid white;
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
left: 8px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget.top:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
.bootstrap-datetimepicker-widget.dropdown-menu.top:before {
|
||||
border-left: 7px solid transparent;
|
||||
border-right: 7px solid transparent;
|
||||
border-top: 7px solid #ccc;
|
||||
border-top-color: rgba(0, 0, 0, 0.2);
|
||||
position: absolute;
|
||||
bottom: -7px;
|
||||
left: 6px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget.top:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
.bootstrap-datetimepicker-widget.dropdown-menu.top:after {
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-top: 6px solid white;
|
||||
position: absolute;
|
||||
bottom: -6px;
|
||||
left: 7px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget .dow {
|
||||
width: 14.2857%;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget.pull-right:before {
|
||||
.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before {
|
||||
left: auto;
|
||||
right: 6px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget.pull-right:after {
|
||||
.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after {
|
||||
left: auto;
|
||||
right: 7px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget > ul {
|
||||
list-style-type: none;
|
||||
.bootstrap-datetimepicker-widget .list-unstyled {
|
||||
margin: 0;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget a[data-action] {
|
||||
@@ -89,82 +91,239 @@
|
||||
.bootstrap-datetimepicker-widget button[data-action] {
|
||||
padding: 6px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget table[data-hour-format="12"] .separator {
|
||||
width: 4px;
|
||||
.bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
content: "Increment Hours";
|
||||
}
|
||||
.bootstrap-datetimepicker-widget .datepicker > div {
|
||||
display: none;
|
||||
.bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
content: "Increment Minutes";
|
||||
}
|
||||
.bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
content: "Decrement Hours";
|
||||
}
|
||||
.bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
content: "Decrement Minutes";
|
||||
}
|
||||
.bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
content: "Show Hours";
|
||||
}
|
||||
.bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
content: "Show Minutes";
|
||||
}
|
||||
.bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
content: "Toggle AM/PM";
|
||||
}
|
||||
.bootstrap-datetimepicker-widget .btn[data-action="clear"]::after {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
content: "Clear the picker";
|
||||
}
|
||||
.bootstrap-datetimepicker-widget .btn[data-action="today"]::after {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
content: "Set the date to today";
|
||||
}
|
||||
.bootstrap-datetimepicker-widget .picker-switch {
|
||||
text-align: center;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget .picker-switch::after {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
content: "Toggle Date and Time Screens";
|
||||
}
|
||||
.bootstrap-datetimepicker-widget .picker-switch td {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
height: auto;
|
||||
width: auto;
|
||||
line-height: inherit;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget .picker-switch td span {
|
||||
line-height: 2.5;
|
||||
height: 2.5em;
|
||||
width: 100%;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget table {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td,
|
||||
.bootstrap-datetimepicker-widget th {
|
||||
.bootstrap-datetimepicker-widget table td,
|
||||
.bootstrap-datetimepicker-widget table th {
|
||||
text-align: center;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td {
|
||||
height: 54px;
|
||||
line-height: 54px;
|
||||
width: 54px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td.cw {
|
||||
font-size: 10px;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
color: #777777;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td.day {
|
||||
.bootstrap-datetimepicker-widget table th {
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
width: 20px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td.day:hover,
|
||||
.bootstrap-datetimepicker-widget td.hour:hover,
|
||||
.bootstrap-datetimepicker-widget td.minute:hover,
|
||||
.bootstrap-datetimepicker-widget td.second:hover {
|
||||
.bootstrap-datetimepicker-widget table th.picker-switch {
|
||||
width: 145px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget table th.disabled,
|
||||
.bootstrap-datetimepicker-widget table th.disabled:hover {
|
||||
background: none;
|
||||
color: #777777;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget table th.prev::after {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
content: "Previous Month";
|
||||
}
|
||||
.bootstrap-datetimepicker-widget table th.next::after {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
content: "Next Month";
|
||||
}
|
||||
.bootstrap-datetimepicker-widget table thead tr:first-child th {
|
||||
cursor: pointer;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget table thead tr:first-child th:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget table td {
|
||||
height: 54px;
|
||||
line-height: 54px;
|
||||
width: 54px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget table td.cw {
|
||||
font-size: .8em;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
color: #777777;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget table td.day {
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
width: 20px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget table td.day:hover,
|
||||
.bootstrap-datetimepicker-widget table td.hour:hover,
|
||||
.bootstrap-datetimepicker-widget table td.minute:hover,
|
||||
.bootstrap-datetimepicker-widget table td.second:hover {
|
||||
background: #eeeeee;
|
||||
cursor: pointer;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td.old,
|
||||
.bootstrap-datetimepicker-widget td.new {
|
||||
.bootstrap-datetimepicker-widget table td.old,
|
||||
.bootstrap-datetimepicker-widget table td.new {
|
||||
color: #777777;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td.today {
|
||||
.bootstrap-datetimepicker-widget table td.today {
|
||||
position: relative;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td.today:before {
|
||||
.bootstrap-datetimepicker-widget table td.today:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 7px solid transparent;
|
||||
border-bottom: 7px solid #428bca;
|
||||
border: solid transparent;
|
||||
border-width: 0 0 7px 7px;
|
||||
border-bottom-color: #337ab7;
|
||||
border-top-color: rgba(0, 0, 0, 0.2);
|
||||
position: absolute;
|
||||
bottom: 4px;
|
||||
right: 4px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td.active,
|
||||
.bootstrap-datetimepicker-widget td.active:hover {
|
||||
background-color: #428bca;
|
||||
color: #ffffff;
|
||||
.bootstrap-datetimepicker-widget table td.active,
|
||||
.bootstrap-datetimepicker-widget table td.active:hover {
|
||||
background-color: #337ab7;
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td.active.today:before {
|
||||
.bootstrap-datetimepicker-widget table td.active.today:before {
|
||||
border-bottom-color: #fff;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td.disabled,
|
||||
.bootstrap-datetimepicker-widget td.disabled:hover {
|
||||
.bootstrap-datetimepicker-widget table td.disabled,
|
||||
.bootstrap-datetimepicker-widget table td.disabled:hover {
|
||||
background: none;
|
||||
color: #777777;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td span {
|
||||
.bootstrap-datetimepicker-widget table td span {
|
||||
display: inline-block;
|
||||
width: 54px;
|
||||
height: 54px;
|
||||
@@ -173,66 +332,43 @@
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td span:hover {
|
||||
.bootstrap-datetimepicker-widget table td span:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td span.active {
|
||||
background-color: #428bca;
|
||||
color: #ffffff;
|
||||
.bootstrap-datetimepicker-widget table td span.active {
|
||||
background-color: #337ab7;
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td span.old {
|
||||
.bootstrap-datetimepicker-widget table td span.old {
|
||||
color: #777777;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget td span.disabled,
|
||||
.bootstrap-datetimepicker-widget td span.disabled:hover {
|
||||
.bootstrap-datetimepicker-widget table td span.disabled,
|
||||
.bootstrap-datetimepicker-widget table td span.disabled:hover {
|
||||
background: none;
|
||||
color: #777777;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget th {
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
width: 20px;
|
||||
.bootstrap-datetimepicker-widget.usetwentyfour td.hour {
|
||||
height: 27px;
|
||||
line-height: 27px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget th.picker-switch {
|
||||
width: 145px;
|
||||
.bootstrap-datetimepicker-widget.wider {
|
||||
width: 21em;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget th.next,
|
||||
.bootstrap-datetimepicker-widget th.prev {
|
||||
font-size: 21px;
|
||||
.bootstrap-datetimepicker-widget .datepicker-decades .decade {
|
||||
line-height: 1.8em !important;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget th.disabled,
|
||||
.bootstrap-datetimepicker-widget th.disabled:hover {
|
||||
background: none;
|
||||
color: #777777;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget thead tr:first-child th {
|
||||
.input-group.date .input-group-addon {
|
||||
cursor: pointer;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget thead tr:first-child th:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
.input-group.date .input-group-addon span {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget.left-oriented:before {
|
||||
left: auto;
|
||||
right: 6px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget.left-oriented:after {
|
||||
left: auto;
|
||||
right: 7px;
|
||||
}
|
||||
.bootstrap-datetimepicker-widget ul.list-unstyled li div.timepicker div.timepicker-picker table.table-condensed tbody > tr > td {
|
||||
padding: 0px !important;
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.bootstrap-datetimepicker-widget.timepicker-sbs {
|
||||
width: 283px;
|
||||
}
|
||||
.sr-only {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
}
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
{
|
||||
"name": "bootstrap-datetimepicker",
|
||||
"version": "3.1.3",
|
||||
"version": "4.17.47",
|
||||
"main": ["build/css/bootstrap-datetimepicker.min.css","build/js/bootstrap-datetimepicker.min.js"],
|
||||
"dependencies": {
|
||||
"jquery" : ">=1.8.3",
|
||||
"bootstrap" : ">=3.0",
|
||||
"moment": ">=2.8.0"
|
||||
"moment": ">=2.10.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "eonasdan/bootstrap-datetimepicker",
|
||||
"type": "component",
|
||||
"version": "3.1.3",
|
||||
"version": "4.17.47",
|
||||
"description": "Date/time picker widget based on twitter bootstrap",
|
||||
"keywords": [
|
||||
"bootstrap",
|
||||
@@ -12,8 +12,7 @@
|
||||
"require": {
|
||||
"robloach/component-installer": "*",
|
||||
"components/jquery": ">=1.9.1",
|
||||
"components/bootstrap": "3.*",
|
||||
"moment/moment": ">=2.8"
|
||||
"moment/moment": ">=2.10.5"
|
||||
},
|
||||
"extra": {
|
||||
"component": {
|
||||
@@ -22,7 +21,6 @@
|
||||
],
|
||||
"files": [
|
||||
"build/js/bootstrap-datetimepicker.min.js",
|
||||
"build/css/bootstrap-datetimepicker.css",
|
||||
"build/css/bootstrap-datetimepicker.min.css"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,237 @@
|
||||
# Version 4
|
||||
|
||||
## 4.17.42
|
||||
|
||||
### Bug Squashing
|
||||
|
||||
* fixed moment dependencies to all be the same
|
||||
* defaulted `option.timeZone` to `''` instead of UTC. This way it will default to the local timezone if it's not set.
|
||||
* fixed #959
|
||||
* fixed #1311 internal `getMoment` function no longer sets `startOf('d')`
|
||||
* fixed #935
|
||||
|
||||
### Other
|
||||
|
||||
* moved some (will move the rest soon) inline docs to JSDoc now that ReSharper supports it.
|
||||
* moved getter/setter functions to options page instead. #1313
|
||||
|
||||
## 4.17.37
|
||||
|
||||
### New Features
|
||||
|
||||
* Momentjs TZ intergration #1242 thanks @bodrick
|
||||
* Independent CSS file, in case you don't want bootstrap for some reason
|
||||
|
||||
### Bug Squashing
|
||||
|
||||
* Slight changes decade view
|
||||
* Moved all tooltip text to `tooltips`
|
||||
* fixed #1212
|
||||
|
||||
## 4.15.35
|
||||
|
||||
### New Features
|
||||
|
||||
`tooltips` allows custom, localized text to be included for icon tooltips
|
||||
|
||||
### Bug Squashing
|
||||
|
||||
fixed #1066
|
||||
|
||||
fixed #1087 `sideBySide` properly supports `toolbarPlacement [top, bottom]`
|
||||
|
||||
fixed #1119
|
||||
|
||||
fixed #1069 added input.blur()
|
||||
|
||||
fixed #1049 fixed doc example
|
||||
|
||||
fixed #999 picker now looks for an element with `.input-group-addon`
|
||||
|
||||
|
||||
## 4.14.30
|
||||
|
||||
### New Features
|
||||
|
||||
`disabledTimeIntervals` #644
|
||||
|
||||
`allowInputToggle` #929
|
||||
|
||||
`focusOnShow` #884
|
||||
|
||||
public `viewDate` function #872
|
||||
|
||||
`enabledHours` and `disabledHours`.
|
||||
|
||||
`dp.update` fires when `viewDate` is changed (in most cases) #937
|
||||
|
||||
`viewMode` now supports a decades view.
|
||||
|
||||
**Note**: because the year picker shows 12 years at a time, I've elected to make this view show blocks of 12 years
|
||||
|
||||
**Note**: when selecting a decade the `viewDate` will change to the **center** of the selected years
|
||||
|
||||
`parseInputDate` #1095
|
||||
|
||||
### Bug Squashing
|
||||
|
||||
fixed #815 by adding `.wider` when using both seconds and am/pm.
|
||||
|
||||
fixed #816 changed both min/max date to move the selected date inside.
|
||||
|
||||
fixed #855 #881 `fillDate`, `fillMonths`, `fillDow` uses `startOf('day')`, which will hopefully fix the DST issues.
|
||||
|
||||
fixed #885 `daysOfWeekDisabled` will move the date to a valid date if `useCurrent` is `true`. Today button will check if the DoW is disabled.
|
||||
|
||||
fixed #906
|
||||
|
||||
fixed #912 if `useCurrent:false` month and year view will no longer have the current month/year selected.
|
||||
|
||||
fixed #914 `use24hours` will ignore anything in side of `[]` in the format string.
|
||||
|
||||
fixed #916 added titles to all icons. At some point the text should be moved to the icon's array, but this would probably be a breaking change.
|
||||
|
||||
fixed #940 added -1 tab index to am/pm selector
|
||||
|
||||
### Other Changes
|
||||
|
||||
changed in/decrement behavior to check if the new date is valid at that granularity (hours, minutes, seconds). will also validate as before
|
||||
|
||||
## 4.7.14
|
||||
|
||||
Added several in new features:
|
||||
|
||||
`keybinds`, `inline`, `debug`, `clear()`, `showClose`, `ingoreReadOnly`, `datepickerInput` and `keepInvalid`.
|
||||
|
||||
Bug squashing
|
||||
|
||||
## 4.0.0
|
||||
|
||||
#### Changes for using the component
|
||||
|
||||
* Defined a [Public API](https://github.com/Eonasdan/bootstrap-datetimepicker/wiki/Version-4-Public-API) and hidden rest of functions, variables so that all configuration options can be changed dynamically.
|
||||
|
||||
* `set/getDate()` is now replaced with an overloaded `date()` function. Use it without a parameter to get the currently set date or with a parameter to set the date.
|
||||
|
||||
* `hide()`, `show()`, `toggle()`, `enable()`, `disable()` and the rest of setter functions now support chaining. ie `$('#id').data('DateTimePicker').format('DD-MM-YYYY').minDate(moment()).defaultDate(moment()).show()` works
|
||||
|
||||
* Replaced previous - next buttons in Date subviews with configurable icons
|
||||
|
||||
* Changed `language` option name to `locale` to be inline with moment naming
|
||||
|
||||
* Implemented #402 all data-date-* variables are more readable and also match with the ones in the configuration object
|
||||
|
||||
* `options.direction` and `options.orientation` were merged into a single object `options.widgetPositioning` with `vertical` and `horizontal` keys that take a string value of `'auto', 'top', 'bottom'` and `'auto', 'left', 'right'` respectively. Note that the `'up'` option was renamed to `'top'`
|
||||
|
||||
#### Added functionality
|
||||
|
||||
* added a second way to define options as data attributes. Instead of adding distinct `data-date-*` config options you can now also pass a `data-date-options` attribute containing an object just the same as the options object that `element.datetimepicker` constructor call takes
|
||||
|
||||
* also added a `options()` public api function to get/set that takes an option object and applies it to the component in one call
|
||||
|
||||
* Implemented [#130](https://github.com/Eonasdan/bootstrap-datetimepicker/issues/130) by introducing a boolean `options.calendarWeeks` and `calendarWeeks()` api function
|
||||
|
||||
* Implemented [#328](https://github.com/Eonasdan/bootstrap-datetimepicker/issues/328), [#426](https://github.com/Eonasdan/bootstrap-datetimepicker/issues/426)
|
||||
|
||||
* Implemented [#432](https://github.com/Eonasdan/bootstrap-datetimepicker/issues/432). Widget DOM element is now lazily added only when shown and removed from the document when hidden.
|
||||
|
||||
* Implemented [#141](https://github.com/Eonasdan/bootstrap-datetimepicker/issues/141) and [#283](https://github.com/Eonasdan/bootstrap-datetimepicker/issues/283)
|
||||
|
||||
|
||||
#### Contributors related internal code changes
|
||||
|
||||
* Refactor all UI click functions and put them as functions in the actions array private variable
|
||||
|
||||
* Refactor template building process to seperate functions according to what they do
|
||||
|
||||
* Remove some styles that where hardcoded in the javascript code
|
||||
|
||||
* Refactor all code that changes the picker.date to change it through the setValue function to allow one place for validation logic (min/max/weekdaysenabled etc) and also one place for emmiting dp.change events
|
||||
|
||||
* The v4beta branch code includes all fixes up to v.3.1.2
|
||||
|
||||
* Added `toggle()` to the public API which toggles the visibility of the DateTimePicker
|
||||
|
||||
* Refactored set function to be included in the setValue function
|
||||
|
||||
* Added a testing framework using jasmine and phantom.js
|
||||
|
||||
# Version 3
|
||||
|
||||
## 3.0.0
|
||||
|
||||
|
||||
* Fix for #170, #179, #183: Changed event to `dp.-`. This should fix the double change event firing.
|
||||
* Fix for #192: `setDate` now fires `dp.change`
|
||||
* Fix for #182: Picker will **not** set the default date if the input field has a value
|
||||
* Fix for #169: Seconds doesn't get reset when changing the date (Thanks to PR #174)
|
||||
* Fix for #168 z-index fix for BS modal
|
||||
* Fix for #155 Picker properly displays the active year and month
|
||||
* Fix for #154 CSS update to fix the collapse jump
|
||||
* Fix for #150 and #75 `minViewMode` and `viewMode` work properly
|
||||
* Fix for #147 AM/PM won't toggle when selecting a value from the hours grid
|
||||
* Fix for #44 Finally! It's here!! Thanks to @ruiwei and his code on #210 picker will adjust the positioning of the widget.
|
||||
|
||||
#### Manually merged PR
|
||||
|
||||
* PR #178 When using `minuteStepping` the minute select grid will only show available steppings
|
||||
* PR #195, #197 Using the `data-OPTION` has been changed to `data-date-OPTION`. These options are expected to be on the `input-group` if you're using the `input-group` **or** the a bare input field if you're not using the `input-group`
|
||||
* PR #184 The option `sideBySide` change be used to display both the d and the timepicker side by side
|
||||
* PR #143 Added option `daysOfWeekDisabled: []`. For example, use `daysOfWeekDisabled: [0,6]` to disable Sunday and Saturday
|
||||
|
||||
#### **Other Changes**
|
||||
* Changed picker width to 300px if using seconds and am/pm
|
||||
* Added option `useCurrent`, thanks to @ruiwei. When true, picker will set the value to the current date/time (respects picker's format)
|
||||
* Added option `showToday`, thanks to @ruiwei. When true, picker will display a small arrow to indicate today's date.
|
||||
* Changed `startDate` to `minDate` and `endDate` to `maxDate` to make it more clear what these options do.
|
||||
|
||||
# Version 2
|
||||
|
||||
#### 2.1.32 (Hotfix)
|
||||
|
||||
* Fix for #151: When a bad date value or the picker is cleared, the plugin will not longer attempt to reset it back to the previous date
|
||||
* Fix for #140: `setDate` can be given `null` to force clear the picker
|
||||
|
||||
#### 2.1.30
|
||||
##### Important! `build.less` file name has been been changed to `bootstrap-datetimepicker-build.less` to prevent collisions
|
||||
|
||||
* Fix for #135: `setStartDate` and `setEndDate` should now properly set.
|
||||
* Fix for #133: Typed in date now respects en/disabled dates
|
||||
* Fix for #132: En/disable picker function works again
|
||||
* Fix for #117, #119, #128, #121: double event `change` event issues should be fixed
|
||||
* Fix for #112: `change` function no longer sets the input to a blank value if the passed in date is invalid
|
||||
|
||||
* Enhancement for #103: Increated the `z-index` of the widget
|
||||
|
||||
#### 2.1.20
|
||||
* Fix for #83: Changes to the picker should fire native `change` event for knockout and the like as well as `change.dp` which contains the old date and the new date
|
||||
* Fix for #78: Script has been update for breaking changes in Moment 2.4.0
|
||||
* Fix for #73: IE8 should be working now
|
||||
|
||||
* Enhancement for #79: `minuteStepping` option takes a number (default is 1). Changing the minutes in the time picker will step by this number.
|
||||
* Enhancement for #74 and #65: `useMinutes` and `useSeconds` are now options. Disabling seconds will hide the seconds spinner. Disabling minutes will display `00` and hide the arrows
|
||||
* Enhancement for #67: Picker will now attempt to convert all `data-OPTION` into its appropriate option
|
||||
|
||||
#### 2.1.11
|
||||
* Fix for #51, #60
|
||||
* Fix for #52: Picker has its own `moment` object since moment 2.4.0 has removed global reference
|
||||
* Fix for #57: New option for `useStrict`. When validating dates in `update` and `change`, the picker can use a stricter formatting validation
|
||||
* Fix for #61: Picker should now properly take formatted date. Should also have correct start of the week for locales.
|
||||
* Fix for #62: Default format will properly validate time picker only.
|
||||
|
||||
#### 2.1.5
|
||||
* Custom icons, such as Font Awesome, are now supported. (#49)
|
||||
* If more then one `input-group-addon` is present use `datepickerbutton` to identify where the picker should popup from. (#48)
|
||||
* New Event: `error.dp`. Fires when Moment cannot parse the date or when the timepicker cannot change because of a `disabledDates` setting. Returns a Moment date object. The specific error can be found be using `invalidAt()`. For more information see [Moment's docs](http://momentjs.com/docs/#/parsing/is-valid/)
|
||||
* Fix for #42, plugin will now check for `A` or `a` in the format string to determine if the AM/PM selector should display.
|
||||
* Fix for #45, fixed null/empty and invalid dates
|
||||
* Fix for #46, fixed active date highlighting
|
||||
* Fix for #47, `change.dp` event to also include the previous date.
|
||||
|
||||
####2.0.1
|
||||
* New event `error.dp` fires when plugin cannot parse date or when increase/descreasing hours/minutes to a disabled date.
|
||||
* Minor fixes
|
||||
|
||||
####2.0.0
|
||||
* `disabledDates` is now an option to set the disabled dates. It accepts date objects like `new Date("November 12, 2013 00:00:00")` and `12/25/2013' and `moment` date objects
|
||||
* Events are easier to use
|
||||
@@ -0,0 +1,126 @@
|
||||
This guide is aimed to contributors wishing to understand the internals of the code in order to change/evolve the component.
|
||||
|
||||
**Note:** this guide refers to **version 4** which is currently in beta and will be updated as we progress
|
||||
|
||||
## Introduction
|
||||
This component consists actually of 2 subcomponent UI widgets one for the date and one for the time selection process. The developers can configure which of those are needed and also the granularity that the component will allow the users to select a date/time. Developers also choose the format that the selected datetime will be displayed in the input field.
|
||||
The component uses on `jQuery`, `moment.js` and `bootstrap` libraries.
|
||||
|
||||
## Code
|
||||
### Private variables
|
||||
|
||||
* `element` - Holds the DOM element this instance is attached to
|
||||
|
||||
* `options` - Holds an object with the curently set options for the specific instance of the component. Don't directly change the properties of that object use the public API methods instead. DO NOT expose this object or its properties outside of the component.
|
||||
|
||||
* `picker` - Reference variable to the created instance `(this)`
|
||||
|
||||
* `date` - Holds the moment object for the model value of the component. **DON'T** directly change this variable unless you **REALLY** know what you are doing. Use `setValue()` function to set it. It handles all component logic for updating the model value and emitting all the appropriate events
|
||||
|
||||
* `viewDate` - Holds the currently selected value that the user has selected through the widget. This is not the model value this is the view value. Changing this usually requires a subsequent call to `update()` function
|
||||
|
||||
* `unset` - A `boolean` variable that holds wheather the components model value is set or not. Model's value starts as `unset = true` and if is either set by the user or programmatically through the api to a valid value then it is set to `false`. If subsequent events lead to an invalid value then this variable is set to `true` again. Setting this variable usually takes place in the `setValue()` function.
|
||||
|
||||
* `input` - Hold the DOM input element this instance is attached to
|
||||
|
||||
* `component` - Holds a reference to the .input-group DOM element that the widget is attached or false if it is attached directly on an input field
|
||||
|
||||
* `widget` - Holds a reference to the DOM element containing the widget or `false` if the widget is hidden
|
||||
|
||||
* `use24hours` - Holds whether the component uses 24 hours format or not. This is initialized on the `format()` function
|
||||
|
||||
* `minViewModeNumber` - Holds the Numeric equivelant of the options.minViewMode parameter
|
||||
|
||||
* `format` - Holds the current format string that is used for formating the date model value. Note this is not the same thing as the `options.format` as the second could be set to `false` in which case the first takes the locale's `L` or `LT` value
|
||||
|
||||
* `currentViewMode` - Hold the state of the current viewMode for the DatePicker subcomponent
|
||||
|
||||
* `actions` - An object containing all the functions that can be called when the users clicks on the widget
|
||||
|
||||
* `datePickerModes` - An array of objects with configuration parameters for the different views of the DatePicker subcomponent
|
||||
|
||||
* `viewModes` - An array of strings containing all the possible strings that `options.viewMode` can take through `viewMode()` public api function
|
||||
|
||||
* `directionModes` - An array of strings containing all the possible strings that `options.direction` can take through `direction()` public api function
|
||||
|
||||
* `orientationModes` - An array of strings containing all the possible strings that `options.orientation` can take through `orientation()` public api function
|
||||
|
||||
### Private functions
|
||||
|
||||
#### Widget related
|
||||
|
||||
* `getDatePickerTemplate()` - returns a string containing the html code for the date picker subcomponent
|
||||
|
||||
* `getTimePickerTemplate()` - returns a string containing the html code for the time picker subcomponent
|
||||
|
||||
* `getTemplate()` - returns a string with containing the html code for all the DateTimePicker component
|
||||
|
||||
* `place()` - handles the placement of the widget's dropdown
|
||||
|
||||
* `updateMonths()` - updates the html subpage related to the months for Date picker view
|
||||
|
||||
* `updateYears()` - updates the html subpage related to the years for Date picker view
|
||||
|
||||
* `fillDate()` - updates the html subpage related to the days for Date picker view
|
||||
|
||||
* `fillHours()` - Creates the hours spans for the hours subview of the Time subcomponent
|
||||
|
||||
* `fillMinutes()` - Creates the minutes spans for the hours subview of the Time subcomponent
|
||||
|
||||
* `fillSeconds()` - Creates the seconds spans for the hours subview of the Time subcomponent
|
||||
|
||||
* `fillTime()` - Creates the main subview of the Time subcomponent
|
||||
|
||||
* `update()` - updates the UI of part of the widget
|
||||
|
||||
* `fillDow()` - Creates the day names in the days subview on the Date subcomponent
|
||||
|
||||
* `fillMonths()` - Creates the month spans for the months subview of the Date subcomponent
|
||||
|
||||
* `createWidget()` - creates the UI widget end attaches widget event listeners
|
||||
|
||||
* `destroyWidget()` - destroys the UI widget DOM element and detaches widget event listeners
|
||||
|
||||
* `showMode(dir)` - toggles between the various subpage related views of the DateTimePicker
|
||||
|
||||
#### Events related
|
||||
|
||||
* `notifyEvent(e)` - Use this function when you want to send en event to listener this could be used as a filter later
|
||||
|
||||
* `stopEvent(e)` - Shortcut for stopping propagation of events
|
||||
|
||||
* `doAction(e)` - Proxy function to call all the UI related click events
|
||||
|
||||
* `keydown(e)` - Function to trap
|
||||
|
||||
* `change(e)` - Listener function to track change events occuring on the `input` dom element the component is attached to
|
||||
|
||||
* `attachDatePickerElementEvents()` - Attaches listeners to the existing DOM elements the component is attached to. Called upon construction of each datetimepicker instance
|
||||
|
||||
* `detachDatePickerElementEvents()` - Detaches listeners from the DOM element the component is attached to. Called on `destroy()`
|
||||
|
||||
* `attachDatePickerWidgetEvents()` - Attaches listeners on the components widget. Called on `show()`
|
||||
|
||||
* `detachDatePickerWidgetEvents()` - Detaches listeners on the components widget. Called on `hide()`
|
||||
|
||||
#### Model related
|
||||
|
||||
* `setValue(targetMoment)` - Sets the model value of the component takes a moment object. An `error` event will be emmited if the `targetMoment` does not pass the configured validations. Otherwise the `date` variable will be set and the relevant events will be fired.
|
||||
|
||||
* `isValid(targetMoment, granularity)` - returns `true` if the `targetMoment` moment object is valid according to the components set validation rules (`min/maxDates`, `disabled/enabledDates` and `daysOfWeekDisabled`). You may pass a second variable to check only up the the specific granularity `year, month, day, hour, minute, second`
|
||||
|
||||
#### Utilities
|
||||
|
||||
* `indexGivenDates (givenDatesArray)` - Function that takes the array from `enabledDates()` and `disabledDates()` public functions and stores them as object keys to enable quick lookup
|
||||
|
||||
* `isInEnableDates(date)` - Checks whether if the given moment object exists in the `options.enabledDates` object
|
||||
|
||||
* `isInDisableDates(date)` - Checks whether if the given moment object exists in the `options.disabledDates` array
|
||||
|
||||
* `dataToOptions()` - Parses `data-date-*` options set on the input dom element the component is attached to and returns an object with them
|
||||
|
||||
* `isInFixed()` - Checks if the dom element or its parents has a fixed position css rule.
|
||||
|
||||
* `parseInputDate(date)` - Parses a date parameter with moment using the component's `options.format` and `options.useStrict`. It returns a `moment` object or false if `parsedMoment#isValid()` returns `false`. Use this to parse date inputs from outside the component (public API calls).
|
||||
|
||||
* `init()` - Initializes the component. Called when the component instance is created
|
||||
@@ -0,0 +1,97 @@
|
||||
## Events
|
||||
|
||||
### dp.hide
|
||||
|
||||
Fired when the widget is hidden.
|
||||
|
||||
Parameters:
|
||||
|
||||
```
|
||||
e = {
|
||||
date //the currently set date. Type: moment object (clone)
|
||||
}
|
||||
```
|
||||
|
||||
Emitted from:
|
||||
|
||||
* toggle()
|
||||
* hide()
|
||||
* disable()
|
||||
|
||||
----------------------
|
||||
|
||||
### dp.show
|
||||
|
||||
Fired when the widget is shown.
|
||||
|
||||
Parameters:
|
||||
|
||||
No parameters are include, listen to `dp.change` instead
|
||||
|
||||
Emitted from:
|
||||
|
||||
* toggle()
|
||||
* show()
|
||||
|
||||
----------------------
|
||||
|
||||
### dp.change
|
||||
|
||||
Fired when the date is changed, including when changed to a non-date (e.g. When keepInvalid=true).
|
||||
|
||||
Parameters:
|
||||
|
||||
```
|
||||
e = {
|
||||
date, //date the picker changed to. Type: moment object (clone)
|
||||
oldDate //previous date. Type: moment object (clone) or false in the event of a null
|
||||
}
|
||||
```
|
||||
|
||||
Emitted from:
|
||||
|
||||
* toggle() **Note**: Only fired when using `useCurrent`
|
||||
* show() **Note**: Only fired when using `useCurrent` or when or the date is changed to comply with date rules (min/max etc)
|
||||
* date(newDate)
|
||||
* minDate(minDate)
|
||||
* maxDate(maxDate)
|
||||
* daysOfWeekDisabled()
|
||||
|
||||
----------------------
|
||||
|
||||
### dp.error
|
||||
|
||||
Fired when a selected date fails to pass validation.
|
||||
|
||||
Parameters:
|
||||
|
||||
```
|
||||
e = {
|
||||
date //the invalid date. Type: moment object (clone)
|
||||
oldDate //previous date. Type: moment object (clone) or false in the event of a null
|
||||
}
|
||||
```
|
||||
|
||||
Emmited from:
|
||||
|
||||
* minDate(minDate)
|
||||
* maxDate(maxDate)
|
||||
* daysOfWeekDisabled()
|
||||
* setValue() *private function*
|
||||
|
||||
----------------------
|
||||
|
||||
### dp.update
|
||||
|
||||
<small>4.14.30</small>
|
||||
|
||||
Fired (in most cases) when the `viewDate` changes. E.g. Next and Previous buttons, selecting a year.
|
||||
|
||||
Parameters:
|
||||
|
||||
```
|
||||
e = {
|
||||
change, //Change type as a momentjs format token. Type: string e.g. yyyy on year change
|
||||
viewDate //new viewDate. Type: moment object
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,95 @@
|
||||
# Extras
|
||||
|
||||
Guides for making the picker work better with rails, IE, etc
|
||||
|
||||
## Rails 3
|
||||
|
||||
by [dhulihan](https://github.com/dhulihan)
|
||||
|
||||
You can easily override the default rails form helpers (`date_select` and `datetime_select`) with bootstrap-datetimepicker for a much nicer experience.
|
||||
|
||||
```rb
|
||||
# Add to config/initializers/form.rb or the end of app/helpers/application_helper.rb
|
||||
module ActionView
|
||||
module Helpers
|
||||
class FormBuilder
|
||||
def date_select(method, options = {}, html_options = {})
|
||||
existing_date = @object.send(method)
|
||||
formatted_date = existing_date.to_date.strftime("%F") if existing_date.present?
|
||||
@template.content_tag(:div, :class => "input-group") do
|
||||
text_field(method, :value => formatted_date, :class => "form-control datepicker", :"data-date-format" => "YYYY-MM-DD") +
|
||||
@template.content_tag(:span, @template.content_tag(:span, "", :class => "glyphicon glyphicon-calendar") ,:class => "input-group-addon")
|
||||
end
|
||||
end
|
||||
|
||||
def datetime_select(method, options = {}, html_options = {})
|
||||
existing_time = @object.send(method)
|
||||
formatted_time = existing_time.to_time.strftime("%F %I:%M %p") if existing_time.present?
|
||||
@template.content_tag(:div, :class => "input-group") do
|
||||
text_field(method, :value => formatted_time, :class => "form-control datetimepicker", :"data-date-format" => "YYYY-MM-DD hh:mm A") +
|
||||
@template.content_tag(:span, @template.content_tag(:span, "", :class => "glyphicon glyphicon-calendar") ,:class => "input-group-addon")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
The time format used here is ActiveRecord-friendly, which means it will be parsed correctly when passed in through `params` to your record.
|
||||
|
||||
That's all there is to it! Now all of your forms that use `datetime_select` or `date_select` will be automatically updated:
|
||||
|
||||
```erb
|
||||
<% form_for @post do |f| %>
|
||||
<div class="form-group">
|
||||
<label>Published At</label>
|
||||
<%= f.datetime_select :published_at %>
|
||||
</div>
|
||||
<% end %>
|
||||
```
|
||||
|
||||
## IE 7
|
||||
|
||||
by [EquilibriumCST](https://github.com/EquilibriumCST)
|
||||
|
||||
I succeed to run this widget under IE7.
|
||||
Here is what I did.
|
||||
|
||||
1. gliphicons are not working under IE7 so add [this css file](https://github.com/coliff/bootstrap-ie7). And this enables the icons.
|
||||
|
||||
2. Z-index problem with IE 7. I added position: relative and `z-index: 10` to the parent container. Otherwise popup is shown under the next elements.
|
||||
|
||||
3. JS events were not working well.
|
||||
|
||||
If you open the datetimepicker widget and click on some button or date inside it, widget is automatically closed.
|
||||
So I added `debug: true` as an option when initializing the widget. Why I did this? I saw on line 1121 from bootsrap-datetimepicker.js the code `'blur': options.debug ? '' : hide`.
|
||||
And now widget window is not closed on every click inside it, but now you can't close it anyway :)
|
||||
And closing should be done manually. I've added this document click handler. If you click something outside the widget, now closing works.
|
||||
|
||||
```
|
||||
$(document).click(function(e){
|
||||
var target = $(e.target);
|
||||
if(target.parents('.bootstrap-datetimepicker-widget').length < 1 && !target.hasClass('datetimepickerInput') && !target.hasClass('datepickerIcon') && !target.hasClass('clockpickerIcon')){
|
||||
if($('.bootstrap-datetimepicker-widget').length > 0){
|
||||
$('#startDate').data('DateTimePicker').hide();
|
||||
$('#startTime').data('DateTimePicker').hide();
|
||||
$('.datetimepickerInput').blur();
|
||||
}
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
But if you have more than one widget on the page like I did, clicking on one widget does'n close the other. Added below lines and now all works fine.
|
||||
|
||||
```
|
||||
$('#widget1').on("dp.show",function (e) {
|
||||
$('#widget2).data('DateTimePicker').hide();
|
||||
});
|
||||
|
||||
$('#widget2').on("dp.show",function (e) {
|
||||
$('#widget1).data('DateTimePicker').hide();
|
||||
});
|
||||
```
|
||||
|
||||
I hope this will help to the others who are fighting with the old IE versions :)
|
||||
@@ -0,0 +1,22 @@
|
||||
# FAQs
|
||||
|
||||
# How do I disable the date or time element
|
||||
<small>How do I format ...; How do I add seconds; etc.</small>
|
||||
|
||||
The picker uses the `format` option to decide what components to show. Set `format` to `LT`, `LTS` or another valid [MomentJs format string](http://momentjs.com/docs/#/displaying/format/) to display certain components
|
||||
|
||||
# How do I change the language/locale
|
||||
|
||||
The picker uses MomentJs to determine the language string. You can use `moment-with-locales` or you can include whatever local file you need. Set the picker's `locale` option to `de` or whatever the locale string is.
|
||||
|
||||
# How do I change the styles? The picker closes.
|
||||
|
||||
Set `debug:true` which will force the picker to stay open, even `onBlur`. You can hide the picker manually by calling `hide()`
|
||||
|
||||
# How do I change the start of the week?
|
||||
|
||||
Start of the week is based on the [`locale` provided](Options.md#locale). This is defined by moment's locales. If you want to change it, create your own locale file or override. [See moment's docs](http://momentjs.com/docs/#/i18n/).
|
||||
|
||||
# How I use the picker as birthday picker?
|
||||
|
||||
Use the [`viewMode`](Options.md#viewmode) option to `'years'`
|
||||
@@ -0,0 +1,82 @@
|
||||
## Functions
|
||||
|
||||
<div class="alert alert-info">
|
||||
<strong>Note</strong>
|
||||
All functions are accessed via the <code>data</code> attribute e.g. <code>$('#datetimepicker').data("DateTimePicker").FUNCTION()</code>
|
||||
</div>
|
||||
|
||||
###destroy()
|
||||
|
||||
Destroys the widget and removes all attached event listeners
|
||||
|
||||
----------------------
|
||||
|
||||
### toggle()
|
||||
|
||||
Shows or hides the widget
|
||||
|
||||
#### Emits
|
||||
|
||||
* `dp.hide` - if the widget is hidden after the toggle call
|
||||
|
||||
* `dp.show` - if the widget is show after the toggle call
|
||||
|
||||
* `dp.change` - if the widget is opened for the first time and the input element is empty and `options.useCurrent != false`
|
||||
|
||||
----------------------
|
||||
|
||||
### show()
|
||||
|
||||
Shows the widget
|
||||
|
||||
#### Emits
|
||||
|
||||
* `dp.show` - if the widget was hidden before that call
|
||||
|
||||
* `dp.change` - if the widget is opened for the first time and the useCurrent is set to true or to a granularity value and the input element the component is attached to has an empty value
|
||||
|
||||
----------------------
|
||||
|
||||
### hide()
|
||||
|
||||
Hides the widget
|
||||
|
||||
#### Emits
|
||||
|
||||
* `dp.hide` - if the widget was visible before that call
|
||||
|
||||
----------------------
|
||||
|
||||
### disable()
|
||||
|
||||
Disables the input element, the component is attached to, by adding a `disabled="true"` attribute to it. If the widget was visible before that call it is hidden.
|
||||
|
||||
#### Emits
|
||||
|
||||
* `dp.hide` - if the widget was visible before that call
|
||||
|
||||
----------------------
|
||||
|
||||
### enable()
|
||||
|
||||
Enables the input element, the component is attached to, by removing `disabled` attribute from it.
|
||||
|
||||
----------------------
|
||||
|
||||
### clear()
|
||||
|
||||
Clears the datepicker by setting the value to `null`
|
||||
|
||||
### viewDate
|
||||
|
||||
<small>4.14.30</small> Issue #872
|
||||
|
||||
#### viewDate()
|
||||
|
||||
Returns a `moment` variable with the currently set `options.viewDate` option.
|
||||
|
||||
#### viewDate(viewDate)
|
||||
|
||||
Takes a `string, moment or Date` value.
|
||||
|
||||
This will change the `viewDate` without changing or setting the selected date.
|
||||
@@ -0,0 +1,161 @@
|
||||
# Minimal Requirements
|
||||
|
||||
1. jQuery
|
||||
2. Moment.js
|
||||
3. Bootstrap.js (transition and collapse are required if you're not using the full Bootstrap)
|
||||
4. Bootstrap Datepicker script
|
||||
5. Bootstrap CSS
|
||||
6. Bootstrap Datepicker CSS
|
||||
7. Locales: Moment's locale files are [here](https://github.com/moment/moment/tree/master/locale)
|
||||
|
||||
# Installation Guides
|
||||
* [Bower](#bower-)
|
||||
* [Nuget](#nuget)
|
||||
* [Rails](#rails-)
|
||||
* [Angular](#angular-wrapper)
|
||||
* [Meteor.js](#meteorjs)
|
||||
* [Manual](#manual)
|
||||
|
||||
## [bower](http://bower.io) 
|
||||
|
||||
Run the following command:
|
||||
```
|
||||
bower install eonasdan-bootstrap-datetimepicker#latest --save
|
||||
```
|
||||
|
||||
Include necessary scripts and styles:
|
||||
```html
|
||||
<head>
|
||||
<!-- ... -->
|
||||
<script type="text/javascript" src="/bower_components/jquery/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="/bower_components/moment/min/moment.min.js"></script>
|
||||
<script type="text/javascript" src="/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
|
||||
<script type="text/javascript" src="/bower_components/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js"></script>
|
||||
<link rel="stylesheet" href="/bower_components/bootstrap/dist/css/bootstrap.min.css" />
|
||||
<link rel="stylesheet" href="/bower_components/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css" />
|
||||
</head>
|
||||
```
|
||||
## Nuget
|
||||
### [LESS](https://www.nuget.org/packages/Bootstrap.v3.Datetimepicker/): 
|
||||
```
|
||||
PM> Install-Package Bootstrap.v3.Datetimepicker
|
||||
```
|
||||
|
||||
### [CSS](https://www.nuget.org/packages/Bootstrap.v3.Datetimepicker.CSS/): 
|
||||
```
|
||||
PM> Install-Package Bootstrap.v3.Datetimepicker.CSS
|
||||
```
|
||||
|
||||
```html
|
||||
<head>
|
||||
<script type="text/javascript" src="/scripts/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="/scripts/moment.min.js"></script>
|
||||
<script type="text/javascript" src="/scripts/bootstrap.min.js"></script>
|
||||
<script type="text/javascript" src="/scripts/bootstrap-datetimepicker.*js"></script>
|
||||
<!-- include your less or built css files -->
|
||||
<!--
|
||||
bootstrap-datetimepicker-build.less will pull in "../bootstrap/variables.less" and "bootstrap-datetimepicker.less";
|
||||
or
|
||||
<link rel="stylesheet" href="/Content/bootstrap-datetimepicker.css" />
|
||||
-->
|
||||
</head>
|
||||
```
|
||||
|
||||
## [Rails](http://rubygems.org/gems/bootstrap3-datetimepicker-rails) 
|
||||
|
||||
Add the following to your `Gemfile`:
|
||||
```ruby
|
||||
gem 'momentjs-rails', '>= 2.9.0'
|
||||
gem 'bootstrap3-datetimepicker-rails', '~> 4.14.30'
|
||||
```
|
||||
Note: You may need to change the version number above to the version number on the badge above.
|
||||
Read the rest of the install instructions @
|
||||
[TrevorS/bootstrap3-datetimepicker-rails](https://github.com/TrevorS/bootstrap3-datetimepicker-rails)
|
||||
|
||||
|
||||
## Angular Wrapper
|
||||
Follow the link [here](https://gist.github.com/eugenekgn/f00c4d764430642dca4b)
|
||||
|
||||
## Meteor.js
|
||||
|
||||
This widget has been package for the [Meteor.js](http://www.meteor.com/) platform, to install it use meteorite as follows:
|
||||
|
||||
`$ mrt add tsega:bootstrap3-datetimepicker`
|
||||
|
||||
For more detail see the package page on [Atmosphere](http://atmospherejs.com/package/bootstrap3-datetimepicker)
|
||||
|
||||
## Manual
|
||||
|
||||
### Acquire [jQuery](http://jquery.com)
|
||||
### Acquire [Moment.js](https://github.com/moment/moment)
|
||||
### Bootstrap 3 collapse and transition plugins
|
||||
Make sure to include *.JS files for plugins [collapse](http://getbootstrap.com/javascript/#collapse) and [transitions](http://getbootstrap.com/javascript/#transitions). They are included with [bootstrap in js/ directory](https://github.com/twbs/bootstrap/tree/master/js)
|
||||
Alternatively you could include the whole bundle of bootstrap plugins from [bootstrap.js](https://github.com/twbs/bootstrap/tree/master/dist/js)
|
||||
|
||||
```html
|
||||
<script type="text/javascript" src="/path/to/jquery.js"></script>
|
||||
<script type="text/javascript" src="/path/to/moment.js"></script>
|
||||
<script type="text/javascript" src="/path/to/bootstrap/js/transition.js"></script>
|
||||
<script type="text/javascript" src="/path/to/bootstrap/js/collapse.js"></script>
|
||||
<script type="text/javascript" src="/path/to/bootstrap/dist/bootstrap.min.js"></script>
|
||||
<script type="text/javascript" src="/path/to/bootstrap-datetimepicker.min.js"></script>
|
||||
```
|
||||
|
||||
## Knockout
|
||||
|
||||
```
|
||||
ko.bindingHandlers.dateTimePicker = {
|
||||
init: function (element, valueAccessor, allBindingsAccessor) {
|
||||
//initialize datepicker with some optional options
|
||||
var options = allBindingsAccessor().dateTimePickerOptions || {};
|
||||
$(element).datetimepicker(options);
|
||||
|
||||
//when a user changes the date, update the view model
|
||||
ko.utils.registerEventHandler(element, "dp.change", function (event) {
|
||||
var value = valueAccessor();
|
||||
if (ko.isObservable(value)) {
|
||||
if (event.date != null && !(event.date instanceof Date)) {
|
||||
value(event.date.toDate());
|
||||
} else {
|
||||
value(event.date);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
|
||||
var picker = $(element).data("DateTimePicker");
|
||||
if (picker) {
|
||||
picker.destroy();
|
||||
}
|
||||
});
|
||||
},
|
||||
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
|
||||
|
||||
var picker = $(element).data("DateTimePicker");
|
||||
//when the view model is updated, update the widget
|
||||
if (picker) {
|
||||
var koDate = ko.utils.unwrapObservable(valueAccessor());
|
||||
|
||||
//in case return from server datetime i am get in this form for example /Date(93989393)/ then fomat this
|
||||
koDate = (typeof (koDate) !== 'object') ? new Date(parseFloat(koDate.replace(/[^0-9]/g, ''))) : koDate;
|
||||
|
||||
picker.date(koDate);
|
||||
}
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
### CSS styles
|
||||
|
||||
#### Using LESS
|
||||
```css
|
||||
@import "/path/to/bootstrap/less/variables";
|
||||
@import "/path/to/bootstrap-datetimepicker/src/less/bootstrap-datetimepicker-build.less";
|
||||
|
||||
// [...] your custom styles and variables
|
||||
```
|
||||
|
||||
Using CSS (default color palette)
|
||||
```html
|
||||
<link rel="stylesheet" href="/path/to/bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css" />
|
||||
```
|
||||
@@ -0,0 +1,909 @@
|
||||
## Options
|
||||
|
||||
<div class="alert alert-info">
|
||||
<strong>Note</strong>
|
||||
All options are accessed via the <code>data</code> attribute e.g. <code>$('#datetimepicker').data("DateTimePicker").OPTION()</code>
|
||||
</div>
|
||||
|
||||
### options()
|
||||
|
||||
Returns the components current options object. Note that the changing the values of the returned object does not change the components actual configuration. Use `options(options)` to set the components options massively or the other methods for setting config options individually.
|
||||
|
||||
|
||||
### options([options])
|
||||
|
||||
Takes an object variable with option key:value properties and configures the component. Use this to update multiple options on the component.
|
||||
|
||||
----------------------
|
||||
|
||||
### date
|
||||
|
||||
Returns the component's model current date, a `moment` object or `null` if not set.
|
||||
|
||||
####date([newDate])
|
||||
|
||||
Takes `string, Date, moment, null` parameter and sets the components model current moment to it. Passing a `null` value unsets the components model current moment. Parsing of the newDate parameter is made using moment library with the `options.format` and `options.useStrict` components configuration.
|
||||
|
||||
##### Throws
|
||||
|
||||
* `TypeError` - in case the `newDate` cannot be parsed
|
||||
|
||||
##### Emits
|
||||
|
||||
* `dp.change` - In case `newDate` is different from current moment
|
||||
|
||||
----------------------
|
||||
|
||||
### format
|
||||
|
||||
Default: false
|
||||
|
||||
See [momentjs' docs](http://momentjs.com/docs/#/displaying/format/) for valid formats. Format also dictates what components are shown, e.g. `MM/dd/YYYY` will not display the time picker.
|
||||
|
||||
#### format()
|
||||
|
||||
Returns the component's `options.format` `string`
|
||||
|
||||
#### format(format)
|
||||
|
||||
Takes a [moment.js](http://momentjs.com/docs/#/displaying/format/) format `string` and sets the components `options.format`. This is used for displaying and also for parsing input strings either from the input element the component is attached to or the `date()` function.
|
||||
The parameter can also be a `boolean:false` in which case the format is set to the locale's `L LT`.
|
||||
|
||||
**Note:** this is also used to determine if the TimePicker sub component will display the hours in 12 or 24 format. (if 'a' or 'h' exists in the passed `string` then a 12 hour mode is set)
|
||||
|
||||
----------------------
|
||||
|
||||
### dayViewHeaderFormat
|
||||
|
||||
Default: 'MMMM YYYY'
|
||||
|
||||
Changes the heading of the datepicker when in "days" view.
|
||||
|
||||

|
||||
|
||||
#### dayViewHeaderFormat()
|
||||
|
||||
Returns a `string` variable with the currently set `options.dayViewHeaderFormat` option.
|
||||
|
||||
#### dayViewHeaderFormat(string)
|
||||
|
||||
Takes a `string` value.
|
||||
|
||||
Used to customize the header of the day view.
|
||||
|
||||
----------------------
|
||||
|
||||
### extraFormats
|
||||
|
||||
Default: false
|
||||
|
||||
Allows for several input formats to be valid. See [this PR](https://github.com/Eonasdan/bootstrap-datetimepicker/pull/666).
|
||||
|
||||
#### extraFormats()
|
||||
|
||||
Returns a `boolean` or array with the `options.extraFormats` option configuration
|
||||
|
||||
#### extraFormats(formats)
|
||||
|
||||
Takes an array of valid input moment format options.
|
||||
|
||||
----------------------
|
||||
|
||||
|
||||
### stepping
|
||||
|
||||
Default: 1
|
||||
|
||||
Number of minutes the up/down arrow's will move the minutes value in the time picker
|
||||
|
||||
#### stepping()
|
||||
|
||||
Returns a `number` with the `options.stepping` option configuration
|
||||
|
||||
|
||||
#### stepping(number)
|
||||
|
||||
Takes a `number`. This be the amount the up/down arrows move the minute value with a time picker.
|
||||
|
||||
----------------------
|
||||
|
||||
|
||||
### min/maxDate
|
||||
|
||||
Default: false
|
||||
Accepts: date, moment, string
|
||||
|
||||
Prevents date/time selections before this date. Will override `defaultDate` and `useCurrent` if either of these settings are the same day since both options are invalid according to the rules you've selected.
|
||||
|
||||
#### minDate()
|
||||
|
||||
Returns the currently set moment of the `options.minDate` or `false` if not set
|
||||
|
||||
#### minDate(minDate)
|
||||
|
||||
Takes a minDate `string, Date, moment, boolean:false` parameter and disallows the user to select a moment that is before that moment. If a `boolean:false` value is passed the `options.minDate` parameter is cleared and there is no restriction to the miminum moment the user can select.
|
||||
|
||||
**Note:** If the minDate parameter is after the currently selected moment the currently selected moment changes to minDate parameter
|
||||
|
||||
##### Throws
|
||||
|
||||
* `TypeError` - if minDate parameter cannot be parsed using the `options.format` and `options.useStrict` configuration settings
|
||||
|
||||
* `TypeError` - if minDate parameter is after `options.maxDate`
|
||||
|
||||
##### Emits
|
||||
|
||||
* `dp.change` - if the new minDate is after currently selected moment (waiting for #472 to close in order to finalize this part)
|
||||
|
||||
* `dp.error` - if the new minDate is after currently selected moment (waiting for #472 to close in order to finalize this part)
|
||||
|
||||
----------------------
|
||||
|
||||
#### maxDate()
|
||||
|
||||
Returns the currently set moment of the `options.maxDate` or `false` if not set
|
||||
|
||||
|
||||
#### maxDate(maxDate)
|
||||
|
||||
Takes a maxDate `string, Date, moment, boolean:false` parameter and disallows the user to select a moment that is after that moment. If a `boolean:false` value is passed `options.maxDate` is cleared and there is no restriction to the maximum moment the user can select.
|
||||
|
||||
**Note:** If maxDate is before the currently selected moment the currently selected moment changes to maxDate
|
||||
|
||||
##### Throws
|
||||
|
||||
* `TypeError` - if maxDate parameter cannot be parsed using the `options.format` and `options.useStrict` configuration settings
|
||||
|
||||
* `TypeError` - if maxDate parameter is before `options.minDate`
|
||||
|
||||
##### Emits
|
||||
|
||||
* `dp.change` - if the new maxDate is after currently selected moment (waiting for #472 to close in order to finalize this part)
|
||||
|
||||
* `dp.error` - if the new maxDate is after currently selected moment (waiting for #472 to close in order to finalize this part)
|
||||
|
||||
----------------------
|
||||
|
||||
### useCurrent
|
||||
|
||||
Default: true
|
||||
|
||||
On `show`, will set the picker to the current date/time.
|
||||
|
||||
#### useCurrent()
|
||||
|
||||
Returns a `boolean` or `string` with the `options.useCurrent` option configuration
|
||||
|
||||
#### useCurrent(boolean or string)
|
||||
|
||||
Takes a `boolean` or `string`. If a `boolean` true is passed and the components model moment is not set (either through `setDate` or through a valid value on the input element the component is attached to) then the first time the user opens the datetimepicker widget the value is initialized to the current moment of the action. If a false `boolean` is passed then no initialization happens on the input element. You can select the granularity on the initialized moment by passing one of the following strings (`'year', 'month', 'day', 'hour', 'minute'`) in the variable.
|
||||
|
||||
If for example you pass `'day'` to the `setUseCurrent` function and the input field is empty the first time the user opens the datetimepicker widget the input text will be initialized to the current datetime with day granularity (ie if currentTime = `2014-08-10 13:32:33` the input value will be initialized to `2014-08-10 00:00:00`)
|
||||
|
||||
**Note:** If the `options.defaultDate` is set or the input element the component is attached to has already a value that takes precedence and the functionality of `useCurrent` is not triggered!
|
||||
|
||||
----------------------
|
||||
|
||||
|
||||
### collapse
|
||||
|
||||
Default: true
|
||||
|
||||
Using a Bootstraps collapse to switch between date/time pickers.
|
||||
|
||||
#### collapse()
|
||||
|
||||
Returns a `boolean` of the `options.sideBySide`.
|
||||
|
||||
|
||||
#### collapse(collapse)
|
||||
|
||||
Takes a `boolean`. If set to `false` the picker will display similar to `sideBySide` except vertical.
|
||||
|
||||
----------------------
|
||||
|
||||
|
||||
### locale
|
||||
|
||||
Default: moment.locale()
|
||||
Accepts: string, moment.locale('locale')
|
||||
|
||||
See [momentjs](https://github.com/moment/moment/tree/develop/locale) for valid locales.
|
||||
|
||||
You must include `moment-with-locales.js` or a local js file.
|
||||
|
||||
#### locale()
|
||||
|
||||
Returns the currently set locale of the `options.locale`
|
||||
|
||||
#### locale(newLocale)
|
||||
|
||||
Takes a `string` of any valid [moment locale](https://github.com/moment/moment/tree/develop/locale) e.g. `de` for German.
|
||||
|
||||
##### Throws
|
||||
|
||||
* `TypeError` - if the locale is not loaded via a separate script or `moment-with-locales`
|
||||
|
||||
----------------------
|
||||
|
||||
|
||||
### defaultDate
|
||||
|
||||
Default: false
|
||||
Accepts: date, moment, string
|
||||
|
||||
Sets the picker default date/time. Overrides `useCurrent`
|
||||
|
||||
#### defaultDate()
|
||||
|
||||
Returns a `moment` with the `options.defaultDate` option configuration or `false` if not set
|
||||
|
||||
#### defaultDate(defaultDate)
|
||||
|
||||
Takes a `string, Date, moment, boolean:false`. Will set the picker's inital date. If a `boolean:false` value is passed the `options.defaultDate` parameter is cleared.
|
||||
|
||||
* `TypeError` - if the provided date pass validation, including `disabledDates`, `enabledDates`, `minDate`, `maxDate`, and `daysOfWeekDisabled`
|
||||
|
||||
* `TypeError` - if the provided date cannot be parsed by momentjs
|
||||
|
||||
----------------------
|
||||
|
||||
### en/disabledDates
|
||||
|
||||
Default: false
|
||||
Accepts: array of [date, moment, string]
|
||||
|
||||
#### disabledDates()
|
||||
|
||||
Returns an array with the currently set disabled dates on the component.
|
||||
|
||||
#### disabledDates(dates)
|
||||
|
||||
Takes an `[` `string` or `Date` or `moment` `]` of values and disallows the user to select those days. Setting this takes precedence over `options.minDate`, `options.maxDate` configuration. Also calling this function removes the configuration of options.enabledDates if such exist.
|
||||
|
||||
**Note:** These values are matched with `Day` granularity.
|
||||
|
||||
----------------------
|
||||
|
||||
#### enabledDates()
|
||||
|
||||
Returns an array with the currently set enabled dates on the component.
|
||||
|
||||
|
||||
#### enabledDates(dates)
|
||||
|
||||
Takes an `[` `string` or `Date` or `moment` `]` of values and allows the user to select only from those days. Setting this takes precedence over `options.minDate`, `options.maxDate` configuration. Also calling this function removes the configuration of options.disabledDates if such exist.
|
||||
|
||||
**Note:** These values are matched with `Day` granularity.
|
||||
|
||||
----------------------
|
||||
|
||||
### icons
|
||||
|
||||
Default: {
|
||||
time: 'glyphicon glyphicon-time',
|
||||
date: 'glyphicon glyphicon-calendar',
|
||||
up: 'glyphicon glyphicon-chevron-up',
|
||||
down: 'glyphicon glyphicon-chevron-down',
|
||||
previous: 'glyphicon glyphicon-chevron-left',
|
||||
next: 'glyphicon glyphicon-chevron-right',
|
||||
today: 'glyphicon glyphicon-screenshot',
|
||||
clear: 'glyphicon glyphicon-trash',
|
||||
close: 'glyphicon glyphicon-remove'
|
||||
}
|
||||
Accepts: object with all or some of the parameters above
|
||||
|
||||
Change the default icons for the pickers functions.
|
||||
|
||||
#### icons()
|
||||
|
||||
Returns an `Ojbect` of `options.icons`
|
||||
|
||||
#### icons(icons)
|
||||
|
||||
Takes an `Ojbect` of `strings`.
|
||||
|
||||
##### Throws
|
||||
|
||||
* `TypeError` - if icons parameter is not an `Ojbect`
|
||||
|
||||
----------------------
|
||||
|
||||
### useStrict
|
||||
|
||||
Default: false
|
||||
|
||||
Defines if moment should use strict date parsing when considering a date to be valid.
|
||||
|
||||
#### useStrict()
|
||||
|
||||
Returns a `boolean` of the `options.useStrict`
|
||||
|
||||
#### useStrict(useStrict)
|
||||
|
||||
Takes a `boolean`. If `useStrict` is `true`, momentjs parsing rules will be stricter when determining if a date is valid or not.
|
||||
|
||||
----------------------
|
||||
|
||||
|
||||
### sideBySide
|
||||
|
||||
Default: false
|
||||
|
||||
Shows the picker side by side when using the time and date together.
|
||||
|
||||

|
||||
|
||||
#### sideBySide()
|
||||
|
||||
Returns a `boolean` of the `options.sideBySide`.
|
||||
|
||||
#### sideBySide(sideBySide)
|
||||
|
||||
Takes a `boolean`. If `sideBySide` is `true` and the time picker is used, both components will display side by side instead of collapsing.
|
||||
|
||||
----------------------
|
||||
|
||||
|
||||
### daysOfWeekDisabled
|
||||
|
||||
Default: []
|
||||
Accepts: array of numbers from 0-6
|
||||
|
||||
Disables the section of days of the week, e.g. weekends.
|
||||
|
||||
#### daysOfWeekDisabled()
|
||||
|
||||
Returns an array with the `options.daysOfWeekDisabled` configuration setting of the component.
|
||||
|
||||
#### daysOfWeekDisabled(daysOfWeek)
|
||||
|
||||
Takes an `[` `Number`:`0` to `6` `]` and disallow the user to select weekdays that exist in this array. This has lower priority over the `options.minDate`, `options.maxDate`, `options.disabledDates` and `options.enabledDates` configuration settings.
|
||||
|
||||
##### Emits
|
||||
|
||||
* `dp.change` - if the currently selected moment falls in the values passed on the daysOfWeek parameter. (waiting for #472 to close in order to finalize this part)
|
||||
|
||||
* `dp.error` - if the currently selected moment falls in the values passed on the daysOfWeek parameter. (waiting for #472 to close in order to finalize this part)
|
||||
|
||||
----------------------
|
||||
|
||||
### calendarWeeks
|
||||
|
||||
Default: false
|
||||
|
||||
Shows the week of the year to the left of first day of the week.
|
||||
|
||||

|
||||
|
||||
#### calendarWeeks()
|
||||
|
||||
Returns a `boolean` with the current `options.calendarWeeks` option configuration
|
||||
|
||||
#### calendarWeeks(boolean)
|
||||
|
||||
Takes a `boolean` variable to set if the week numbers will appear to the left on the days view
|
||||
|
||||
----------------------
|
||||
|
||||
### viewMode
|
||||
|
||||
Default: 'days'
|
||||
Accepts: 'decades','years','months','days'
|
||||
|
||||
The default view to display when the picker is shown.
|
||||
|
||||
**Note**: To limit the picker to selecting, for instance the year and month, use `format: MM/YYYY`.
|
||||
|
||||
#### viewMode()
|
||||
|
||||
Returns a `string` of the `options.viewMode`.
|
||||
|
||||
#### viewMode(newViewMode)
|
||||
|
||||
Takes a `string`. Valid values are `'days'`, `'months'`, `'years'` and `'decades'`
|
||||
|
||||
##### Throws
|
||||
|
||||
* `TypeError` - if `newViewMode` parameter is not an a `string` or if `newViewMode` is not a valid value.
|
||||
|
||||
----------------------
|
||||
|
||||
### toolbarPlacement
|
||||
|
||||
Default: 'default'
|
||||
Accepts: 'default', 'top', 'bottom'
|
||||
|
||||
Changes the placement of the icon toolbar.
|
||||
|
||||

|
||||
|
||||
#### toolbarplacement()
|
||||
|
||||
Returns a `string` variable with the currently set `options.toolbarplacement` option.
|
||||
|
||||
#### toolbarplacement(string)
|
||||
|
||||
Takes a `string` value. Valid values are `'default'`, `'top'` and `'bottom'`.
|
||||
|
||||
Changes the placement of the toolbar where the today, clear, component switch icon are located.
|
||||
|
||||
----------------------
|
||||
|
||||
### showTodayButton
|
||||
|
||||
Default: false
|
||||
|
||||
Show the "Today" button in the icon toolbar.
|
||||
|
||||
Clicking the "Today" button will set the calendar view and set the date to `now`.
|
||||
|
||||
#### showTodayButton()
|
||||
|
||||
Returns a `boolean` variable with the currently set `options.showTodayButton` option.
|
||||
|
||||
#### showTodayButton(boolean)
|
||||
|
||||
Takes a `boolean` variable to set if the Today button will appear on the widget
|
||||
|
||||
----------------------
|
||||
|
||||
### showClear
|
||||
|
||||
Default: false
|
||||
|
||||
Show the "Clear" button in the icon toolbar.
|
||||
|
||||
Clicking the "Clear" button will set the calendar to null.
|
||||
|
||||
#### showClear()
|
||||
|
||||
Returns a `boolean` variable with the currently set `options.showClear` option.
|
||||
|
||||
#### showClear(boolean)
|
||||
|
||||
Takes a `boolean` variable to set if the clear date button will appear on the widget
|
||||
|
||||
----------------------
|
||||
|
||||
### showClose
|
||||
|
||||
Default: false
|
||||
|
||||
Show the "Close" button in the icon toolbar.
|
||||
|
||||
Clicking the "Close" button will call `hide()`
|
||||
|
||||
#### showClose()
|
||||
|
||||
Returns a `boolean` variable with the currently set `options.showClose` option.
|
||||
|
||||
#### showClose(boolean)
|
||||
|
||||
Takes a `boolean` value.
|
||||
|
||||
If `true`, an icon will be displayed on the toolbar that will hide the picker
|
||||
|
||||
----------------------
|
||||
|
||||
### widgetPositioning
|
||||
|
||||
Default: {
|
||||
horizontal: 'auto'
|
||||
vertical: 'auto'
|
||||
}
|
||||
Accepts: object with the all or one of the parameters above
|
||||
horizontal: 'auto', 'left', 'right'
|
||||
vertical: 'auto', 'top', 'bottom'
|
||||
|
||||
#### widgetPositioning()
|
||||
|
||||
Returns the currently set `options.widgetPositioning` object containing two keys `horizontal` and `vertical`
|
||||
|
||||
#### widgetPositioning(positioningObject)
|
||||
|
||||
Takes an object parameter that can contain two keys `vertical` and `horizontal` each having a value of `'auto', 'top', 'bottom'` for `vertical` and `'auto', 'left', 'right'` for `horizontal` which defines where the dropdown with the widget will appear relative to the input element the component is attached to.
|
||||
|
||||
`'auto'` is the default value for both `horizontal` and `vertical` keys and it tries to automatically place the dropdown in a position that is visible to the user. Usually you should not override those options unless you have a special need in your layout.
|
||||
|
||||
----------------------
|
||||
|
||||
### widgetParent
|
||||
|
||||
Default: null
|
||||
Accepts: string or jQuery object
|
||||
|
||||
On picker show, places the widget at the identifier (string) or jQuery object **if** the element has css `position: 'relative'`
|
||||
|
||||
#### widgetParent()
|
||||
|
||||
Returns a `$(element)` variable with the currently set `options.widgetParent` option.
|
||||
|
||||
#### widgetParent(widgetParent)
|
||||
|
||||
Takes a `string` or `$(element)` value.
|
||||
|
||||
----------------------
|
||||
|
||||
### keepOpen
|
||||
|
||||
Default: false
|
||||
|
||||
Will cause the date picker to stay open after selecting a date.
|
||||
|
||||
#### keepOpen()
|
||||
|
||||
Returns a `boolean` variable with the currently set `options.keepOpen` option.
|
||||
|
||||
#### keepOpen(boolean)
|
||||
|
||||
Takes a `boolean` value.
|
||||
|
||||
----------------------
|
||||
|
||||
### inline
|
||||
|
||||
Default: false
|
||||
|
||||
Will display the picker inline without the need of a input field. This will also hide borders and shadows.
|
||||
|
||||
#### inline()
|
||||
|
||||
Returns a `boolean` variable with the currently set `options.inline` option.
|
||||
|
||||
#### inline(boolean)
|
||||
|
||||
Takes a `boolean` value.
|
||||
|
||||
----------------------
|
||||
|
||||
### keepInvalid
|
||||
|
||||
<small>4.7.14</small>
|
||||
|
||||
Default: false
|
||||
|
||||
Will cause the date picker to **not** revert or overwrite invalid dates.
|
||||
|
||||
#### keepInvalid()
|
||||
|
||||
Returns a `string` variable with the currently set `options.keepInvalid` option.
|
||||
|
||||
#### keepInvalid(boolean)
|
||||
|
||||
Takes a `boolean` value.
|
||||
|
||||
If `true`, invalid dates will not be reverted to a previous selection or changed.
|
||||
|
||||
----------------------
|
||||
|
||||
### keyBinds
|
||||
|
||||
Default: up: function (widget) {
|
||||
if (widget.find('.datepicker').is(':visible')) {
|
||||
this.date(this.date().clone().subtract(7, 'd'));
|
||||
} else {
|
||||
this.date(this.date().clone().add(1, 'm'));
|
||||
}
|
||||
},
|
||||
down: function (widget) {
|
||||
if (!widget) {
|
||||
this.show();
|
||||
}
|
||||
else if (widget.find('.datepicker').is(':visible')) {
|
||||
this.date(this.date().clone().add(7, 'd'));
|
||||
} else {
|
||||
this.date(this.date().clone().subtract(1, 'm'));
|
||||
}
|
||||
},
|
||||
'control up': function (widget) {
|
||||
if (widget.find('.datepicker').is(':visible')) {
|
||||
this.date(this.date().clone().subtract(1, 'y'));
|
||||
} else {
|
||||
this.date(this.date().clone().add(1, 'h'));
|
||||
}
|
||||
},
|
||||
'control down': function (widget) {
|
||||
if (widget.find('.datepicker').is(':visible')) {
|
||||
this.date(this.date().clone().add(1, 'y'));
|
||||
} else {
|
||||
this.date(this.date().clone().subtract(1, 'h'));
|
||||
}
|
||||
},
|
||||
left: function (widget) {
|
||||
if (widget.find('.datepicker').is(':visible')) {
|
||||
this.date(this.date().clone().subtract(1, 'd'));
|
||||
}
|
||||
},
|
||||
right: function (widget) {
|
||||
if (widget.find('.datepicker').is(':visible')) {
|
||||
this.date(this.date().clone().add(1, 'd'));
|
||||
}
|
||||
},
|
||||
pageUp: function (widget) {
|
||||
if (widget.find('.datepicker').is(':visible')) {
|
||||
this.date(this.date().clone().subtract(1, 'M'));
|
||||
}
|
||||
},
|
||||
pageDown: function (widget) {
|
||||
if (widget.find('.datepicker').is(':visible')) {
|
||||
this.date(this.date().clone().add(1, 'M'));
|
||||
}
|
||||
},
|
||||
enter: function () {
|
||||
this.hide();
|
||||
},
|
||||
escape: function () {
|
||||
this.hide();
|
||||
},
|
||||
'control space': function (widget) {
|
||||
if (widget.find('.timepicker').is(':visible')) {
|
||||
widget.find('.btn[data-action="togglePeriod"]').click();
|
||||
}
|
||||
},
|
||||
t: function () {
|
||||
this.date(moment());
|
||||
},
|
||||
'delete': function () {
|
||||
this.clear();
|
||||
}
|
||||
|
||||
Allows for custom events to fire on keyboard press.
|
||||
|
||||
#### keyBinds()
|
||||
|
||||
Returns a `string` variable with the currently set `options.keyBinds` option.
|
||||
|
||||
#### keyBinds(object)
|
||||
|
||||
Takes an `object` value.
|
||||
|
||||
Allows for several keyBinding functions to be specified for ease of access or accessibility. See the options page for defaults.
|
||||
|
||||
----------------------
|
||||
|
||||
|
||||
### debug
|
||||
|
||||
<small>4.7.14</small>
|
||||
|
||||
Default: false
|
||||
|
||||
Will cause the date picker to stay open after a `blur` event.
|
||||
|
||||
----------------------
|
||||
|
||||
|
||||
### ignoreReadonly
|
||||
|
||||
<small>4.7.14</small>
|
||||
|
||||
Default: false
|
||||
|
||||
Allow date picker show event to fire even when the associated input element has the `readonly="readonly"`property.
|
||||
|
||||
#### ignoreReadonly()
|
||||
|
||||
Returns a `boolean` variable with the currently set `options.ignoreReadonly` option.
|
||||
|
||||
#### ignoreReadonly(boolean)
|
||||
|
||||
Takes a `boolean` value.
|
||||
|
||||
Set this to `true` to allow the picker to be used even if the input field is `readonly`. This will **not** bypass the `disabled` property
|
||||
|
||||
----------------------
|
||||
|
||||
### disabledTimeIntervals
|
||||
|
||||
<small>4.14.30</small>
|
||||
|
||||
Default: false
|
||||
|
||||
Disables time selection between the given `moments`.
|
||||
|
||||
#### disabledTimeIntervals()
|
||||
|
||||
Returns an `array` variable with the currently set `options.disabledTimeIntervals` option.
|
||||
|
||||
#### disabledTimeIntervals(array)
|
||||
|
||||
Takes a `array` value.
|
||||
|
||||
The array **must** be in the following format `[moment(),moment()]`
|
||||
|
||||
For example:
|
||||
|
||||
disabledTimeIntervals: [[moment({ h: 0 }), moment({ h: 8 })], [moment({ h: 18 }), moment({ h: 24 })]]
|
||||
|
||||
Will disable times between 12-8am and 6-12pm today
|
||||
|
||||
----------------------
|
||||
|
||||
### allowInputToggle
|
||||
|
||||
<small>4.14.30</small>
|
||||
|
||||
Default: false
|
||||
|
||||
If `true`, the picker will show on textbox focus and icon click when used in a button group.
|
||||
|
||||
#### allowInputToggle()
|
||||
|
||||
Returns a `boolean` variable with the currently set `options.allowInputToggle` option.
|
||||
|
||||
#### allowInputToggle(boolean)
|
||||
|
||||
Takes a `boolean` value.
|
||||
|
||||
If `true`, the picker will show on textbox focus and icon click when used in a button group
|
||||
|
||||
----------------------
|
||||
|
||||
### focusOnShow
|
||||
|
||||
<small>4.14.30</small>
|
||||
|
||||
Default: true
|
||||
|
||||
If `false`, the textbox will not be given focus when the picker is shown.
|
||||
|
||||
#### focusOnShow()
|
||||
|
||||
Returns a `boolean` variable with the currently set `options.focusOnShow` option.
|
||||
|
||||
#### focusOnShow(boolean)
|
||||
|
||||
Takes a `boolean` value.
|
||||
|
||||
If `false`, the textbox will not be given focus when the picker is shown
|
||||
|
||||
----------------------
|
||||
### en/disabledHours
|
||||
|
||||
<small>4.14.30</small> Issue: #851
|
||||
|
||||
Default: false
|
||||
|
||||
#### disabledHours()
|
||||
|
||||
Returns an `array` variable with the currently set `options.en/disabledHours` option.
|
||||
|
||||
#### disabledHours(boolean)
|
||||
|
||||
Takes a `array` value.
|
||||
|
||||
Must be in 24 hour format. Will allow or disallow hour selections (much like `disabledTimeIntervals`) but will affect all days.
|
||||
|
||||
Like `en/disabledDates`, these options are mutually exclusive and will reset one of the options back to false.
|
||||
|
||||
disabledHours: [0, 1, 2, 3, 4, 5, 6, 7, 8, 18, 19, 20, 21, 22, 23, 24]
|
||||
enabledHours: [9, 10, 11, 12, 13, 14, 15, 16]
|
||||
|
||||
----------------------
|
||||
|
||||
### viewDate
|
||||
|
||||
<small>4.14.30</small>
|
||||
|
||||
Default: false
|
||||
|
||||
This will change the `viewDate` without changing or setting the selected date.
|
||||
|
||||
----------------------
|
||||
|
||||
### parseInputDate
|
||||
|
||||
<small>4.14.30</small> Issue #1095
|
||||
|
||||
#### parseInputDate()
|
||||
|
||||
Returns a `function` with the currently set `options.parseInputDate`
|
||||
|
||||
#### parseInputDate(function)
|
||||
|
||||
Takes a `function`
|
||||
|
||||
Allows custom input formatting For example: the user can enter 'yesterday' or '30 days ago'.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
var parseRelativeDate = function(relativeDate) {
|
||||
|
||||
switch (relativeDate) {
|
||||
case 'today':
|
||||
return moment()
|
||||
case 'yesterday':
|
||||
return moment().subtract(1, 'day');
|
||||
default:
|
||||
return moment()
|
||||
.subtract(Number(relativeDate.replace("days ago", "").trim()), 'days');
|
||||
}
|
||||
}
|
||||
|
||||
var parseInputDate = function(inputDate) {
|
||||
var relativeDatePattern = /today|yesterday|[0-9]+\s+(days ago)/,
|
||||
resultDate;
|
||||
|
||||
if (moment.isMoment(inputDate) || inputDate instanceof Date) {
|
||||
resultDate = moment(inputDate);
|
||||
} else {
|
||||
var relativeDate = inputDate.match(relativeDatePattern),
|
||||
parseDate = null;
|
||||
|
||||
if (relativeDate !== null)
|
||||
parseDate = this.parseRelativeDate(inputDate.match(relativeDatePattern)[0]);
|
||||
else
|
||||
parseDate = moment();
|
||||
|
||||
resultDate = moment(parseDate, "YYYY-MM-DD");
|
||||
}
|
||||
|
||||
return resultDate;
|
||||
}
|
||||
```
|
||||
|
||||
----------------------
|
||||
|
||||
### tooltips
|
||||
|
||||
<small>4.15.35</small>
|
||||
|
||||
```
|
||||
tooltips: {
|
||||
today: 'Go to today',
|
||||
clear: 'Clear selection',
|
||||
close: 'Close the picker',
|
||||
selectMonth: 'Select Month',
|
||||
prevMonth: 'Previous Month',
|
||||
nextMonth: 'Next Month',
|
||||
selectYear: 'Select Year',
|
||||
prevYear: 'Previous Year',
|
||||
nextYear: 'Next Year',
|
||||
selectDecade: 'Select Decade',
|
||||
prevDecade: 'Previous Decade',
|
||||
nextDecade: 'Next Decade',
|
||||
prevCentury: 'Previous Century',
|
||||
nextCentury: 'Next Century'
|
||||
}
|
||||
```
|
||||
|
||||
This will change the `tooltips` over each icon to a custom string.
|
||||
|
||||
#### tooltips()
|
||||
|
||||
Returns an `Ojbect` of `options.tooltips`
|
||||
|
||||
#### tooltips(tooltips)
|
||||
|
||||
Takes an `Ojbect` of `strings`.
|
||||
|
||||
##### Throws
|
||||
|
||||
* `TypeError` - if tooltips parameter is not an `Ojbect`
|
||||
|
||||
----------------------
|
||||
|
||||
|
||||
### timeZone
|
||||
|
||||
<small>4.17.37</small>
|
||||
|
||||
```
|
||||
timeZone: ''
|
||||
```
|
||||
|
||||
Allows the setting of the Time Zone. You must include [`moment-timezone.js`](http://momentjs.com/timezone/) and `moment-timzone` data. See moment timezone documentation for usage.
|
||||
|
||||
#### timeZone()
|
||||
|
||||
Returns an `string` of `options.timeZone`
|
||||
|
||||
#### timeZone(timeZone)
|
||||
|
||||
Takes an `string` of a valid timezone.
|
||||
|
||||
##### Throws
|
||||
|
||||
* `TypeError` - if tooltips parameter is not an `string`
|
||||
@@ -0,0 +1,6 @@
|
||||
<meta http-equiv="refresh" content="1; url=/Changelog/"/>
|
||||
<meta http-equiv="refresh" content="0; url=/Changelog/"/>
|
||||
<link rel="canonical" href="/Changelog/">
|
||||
|
||||
<p>The page has moved to:
|
||||
<a href="/Changelog/">this page</a></p>
|
||||
@@ -0,0 +1,6 @@
|
||||
<meta http-equiv="refresh" content="1; url=/Changelog/"/>
|
||||
<meta http-equiv="refresh" content="0; url=/ContributorsGuide/"/>
|
||||
<link rel="canonical" href="/ContributorsGuide/">
|
||||
|
||||
<p>The page has moved to:
|
||||
<a href="/ContributorsGuide/">this page</a></p>
|
||||
@@ -0,0 +1,644 @@
|
||||
#Bootstrap 3 Datepicker v4 Docs
|
||||
|
||||
<div class="alert alert-info">
|
||||
<strong>Note</strong>
|
||||
All functions are accessed via the <code>data</code> attribute e.g. <code>$('#datetimepicker').data("DateTimePicker").FUNCTION()</code>
|
||||
</div>
|
||||
|
||||
### Minimum Setup
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class='col-sm-6'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker1'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker1').datetimepicker();
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
#### Code
|
||||
|
||||
```
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class='col-sm-6'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker1'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker1').datetimepicker();
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
----------------------
|
||||
|
||||
### Using Locales
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class='col-sm-6'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker2'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker2').datetimepicker({
|
||||
locale: 'ru'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
#### Code
|
||||
|
||||
```
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class='col-sm-6'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker2'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker2').datetimepicker({
|
||||
locale: 'ru'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
----------------------
|
||||
|
||||
### Time Only
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class='col-sm-6'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker3'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-time"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker3').datetimepicker({
|
||||
format: 'LT'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
#### Code
|
||||
|
||||
```
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class='col-sm-6'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker3'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-time"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker3').datetimepicker({
|
||||
format: 'LT'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
----------------------
|
||||
|
||||
### Date Only
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class='col-sm-6'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker3'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-time"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker3').datetimepicker({
|
||||
format: 'L'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
#### Code
|
||||
|
||||
```
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class='col-sm-6'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker3'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-time"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker3').datetimepicker({
|
||||
format: 'LT'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
----------------------
|
||||
|
||||
### No Icon (input field only):
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class='col-sm-6'>
|
||||
<input type='text' class="form-control" id='datetimepicker4' />
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker4').datetimepicker();
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
#### Code
|
||||
|
||||
```
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class='col-sm-6'>
|
||||
<input type='text' class="form-control" id='datetimepicker4' />
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker4').datetimepicker();
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
----------------------
|
||||
|
||||
### Enabled/Disabled Dates
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class='col-sm-6'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker5'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker5').datetimepicker({
|
||||
defaultDate: "11/1/2013",
|
||||
disabledDates: [
|
||||
moment("12/25/2013"),
|
||||
new Date(2013, 11 - 1, 21),
|
||||
"11/22/2013 00:53"
|
||||
]
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
#### Code
|
||||
|
||||
```
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class='col-sm-6'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker5'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker5').datetimepicker({
|
||||
defaultDate: "11/1/2013",
|
||||
disabledDates: [
|
||||
moment("12/25/2013"),
|
||||
new Date(2013, 11 - 1, 21),
|
||||
"11/22/2013 00:53"
|
||||
]
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
----------------------
|
||||
|
||||
### Linked Pickers
|
||||
|
||||
<div class="container">
|
||||
<div class='col-md-5'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker6'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-md-5'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker7'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker6').datetimepicker();
|
||||
$('#datetimepicker7').datetimepicker({
|
||||
useCurrent: false
|
||||
});
|
||||
$("#datetimepicker6").on("dp.change", function (e) {
|
||||
$('#datetimepicker7').data("DateTimePicker").minDate(e.date);
|
||||
});
|
||||
$("#datetimepicker7").on("dp.change", function (e) {
|
||||
$('#datetimepicker6').data("DateTimePicker").maxDate(e.date);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
#### Code
|
||||
|
||||
```
|
||||
<div class="container">
|
||||
<div class='col-md-5'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker6'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-md-5'>
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker7'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker6').datetimepicker();
|
||||
$('#datetimepicker7').datetimepicker({
|
||||
useCurrent: false //Important! See issue #1075
|
||||
});
|
||||
$("#datetimepicker6").on("dp.change", function (e) {
|
||||
$('#datetimepicker7').data("DateTimePicker").minDate(e.date);
|
||||
});
|
||||
$("#datetimepicker7").on("dp.change", function (e) {
|
||||
$('#datetimepicker6').data("DateTimePicker").maxDate(e.date);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
```
|
||||
|
||||
----------------------
|
||||
|
||||
### Custom Icons
|
||||
|
||||
<div class="container">
|
||||
<div class="col-sm-6" style="height:130px;">
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker8'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="fa fa-calendar">
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker8').datetimepicker({
|
||||
icons: {
|
||||
time: "fa fa-clock-o",
|
||||
date: "fa fa-calendar",
|
||||
up: "fa fa-arrow-up",
|
||||
down: "fa fa-arrow-down"
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
|
||||
#### Code
|
||||
|
||||
```
|
||||
<div class="container">
|
||||
<div class="col-sm-6" style="height:130px;">
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker8'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="fa fa-calendar">
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker8').datetimepicker({
|
||||
icons: {
|
||||
time: "fa fa-clock-o",
|
||||
date: "fa fa-calendar",
|
||||
up: "fa fa-arrow-up",
|
||||
down: "fa fa-arrow-down"
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
```
|
||||
|
||||
----------------------
|
||||
|
||||
### View Mode
|
||||
|
||||
<div class="container">
|
||||
<div class="col-sm-6" style="height:130px;">
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker9'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar">
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker9').datetimepicker({
|
||||
viewMode: 'years'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
|
||||
#### Code
|
||||
|
||||
```
|
||||
<div class="container">
|
||||
<div class="col-sm-6" style="height:130px;">
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker9'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar">
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker9').datetimepicker({
|
||||
viewMode: 'years'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
```
|
||||
|
||||
----------------------
|
||||
|
||||
### Min View Mode
|
||||
|
||||
<div class="container">
|
||||
<div class="col-sm-6" style="height:130px;">
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker10'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar">
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker10').datetimepicker({
|
||||
viewMode: 'years',
|
||||
format: 'MM/YYYY'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
|
||||
#### Code
|
||||
|
||||
```
|
||||
<div class="container">
|
||||
<div class="col-sm-6" style="height:130px;">
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker10'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar">
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker10').datetimepicker({
|
||||
viewMode: 'years',
|
||||
format: 'MM/YYYY'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
|
||||
```
|
||||
|
||||
----------------------
|
||||
|
||||
### Disabled Days of the Week
|
||||
|
||||
<div class="container">
|
||||
<div class="col-sm-6" style="height:130px;">
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker11'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar">
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker11').datetimepicker({
|
||||
daysOfWeekDisabled: [0, 6]
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
|
||||
#### Code
|
||||
|
||||
```
|
||||
<div class="container">
|
||||
<div class="col-sm-6" style="height:130px;">
|
||||
<div class="form-group">
|
||||
<div class='input-group date' id='datetimepicker11'>
|
||||
<input type='text' class="form-control" />
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar">
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker11').datetimepicker({
|
||||
daysOfWeekDisabled: [0, 6]
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
```
|
||||
|
||||
----------------------
|
||||
|
||||
### Inline
|
||||
|
||||
<div style="overflow:hidden;">
|
||||
<div class="form-group">
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<div id="datetimepicker12"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker12').datetimepicker({
|
||||
inline: true,
|
||||
sideBySide: true
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
|
||||
#### Code
|
||||
|
||||
```
|
||||
<div style="overflow:hidden;">
|
||||
<div class="form-group">
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<div id="datetimepicker12"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datetimepicker12').datetimepicker({
|
||||
inline: true,
|
||||
sideBySide: true
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
```
|
||||
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 7.7 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 60 KiB |
@@ -0,0 +1,74 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
{% if page_description %}<meta name="description" content="{{ page_description }}">{% endif %}
|
||||
{% if site_author %}<meta name="author" content="{{ site_author }}">{% endif %}
|
||||
{% if canonical_url %}<link rel="canonical" href="{{ canonical_url }}">{% endif %}
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">
|
||||
<link rel="icon" type="image/png" href="/favicon-196x196.png" sizes="196x196">
|
||||
<link rel="icon" type="image/png" href="/favicon-160x160.png" sizes="160x160">
|
||||
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
|
||||
<meta name="msapplication-TileColor" content="#2b5797">
|
||||
<meta name="msapplication-TileImage" content="/mstile-144x144.png">
|
||||
|
||||
<title>{{ page_title }}</title>
|
||||
|
||||
<link rel="stylesheet" type="text/css" media="screen" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" />
|
||||
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
|
||||
<link href="{{ base_url }}/css/prettify-1.0.css" rel="stylesheet">
|
||||
<link href="{{ base_url }}/css/base.css" rel="stylesheet">
|
||||
{%- for path in extra_css %}
|
||||
<link href="{{ path }}" rel="stylesheet">
|
||||
{%- endfor %}
|
||||
|
||||
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
<script type="text/javascript" src="//code.jquery.com/jquery-2.1.1.min.js"></script>
|
||||
<script type="text/javascript" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
|
||||
{%- for path in extra_javascript %}
|
||||
<script src="{{ path }}"></script>
|
||||
{%- endfor %}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
{% include "nav.html" %}
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-3">{% include "toc.html" %}</div>
|
||||
<div class="col-md-9" role="main">{% include "content.html" %}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if include_search %}{% include "search.html" %}{% endif %}
|
||||
|
||||
<script src="{{ base_url }}/js/prettify-1.0.min.js"></script>
|
||||
<script src="{{ base_url }}/js/base.js"></script>
|
||||
<script>
|
||||
if (top != self) { top.location.replace(self.location.href); }
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||
|
||||
ga('create', 'UA-47462200-1', 'eonasdan.github.io');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square70x70logo src="/mstile-70x70.png"/>
|
||||
<square150x150logo src="/mstile-150x150.png"/>
|
||||
<square310x310logo src="/mstile-310x310.png"/>
|
||||
<wide310x150logo src="/mstile-310x150.png"/>
|
||||
<TileColor>#da532c</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
||||
@@ -0,0 +1,9 @@
|
||||
{% if meta.source %}
|
||||
<div class="source-links">
|
||||
{% for filename in meta.source %}
|
||||
<span class="label label-primary">{{ filename }}</span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{{ content }}
|
||||
@@ -0,0 +1,107 @@
|
||||
body {
|
||||
padding-top: 70px;
|
||||
}
|
||||
|
||||
ul.nav li.main {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.col-md-3 {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
div.source-links {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/*
|
||||
* Side navigation
|
||||
*
|
||||
* Scrollspy and affixed enhanced navigation to highlight sections and secondary
|
||||
* sections of docs content.
|
||||
*/
|
||||
|
||||
/* By default it's not affixed in mobile views, so undo that */
|
||||
.bs-sidebar {
|
||||
overflow-y: scroll;
|
||||
max-height: 86%;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.bs-sidebar.affix {
|
||||
position: static;
|
||||
}
|
||||
|
||||
.bs-sidebar.well {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* First level of nav */
|
||||
.bs-sidenav {
|
||||
margin-top: 30px;
|
||||
margin-bottom: 30px;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
/* All levels of nav */
|
||||
.bs-sidebar .nav > li > a {
|
||||
display: block;
|
||||
padding: 5px 20px;
|
||||
}
|
||||
.bs-sidebar .nav > li > a:hover,
|
||||
.bs-sidebar .nav > li > a:focus {
|
||||
text-decoration: none;
|
||||
border-right: 1px solid;
|
||||
}
|
||||
.bs-sidebar .nav > .active > a,
|
||||
.bs-sidebar .nav > .active:hover > a,
|
||||
.bs-sidebar .nav > .active:focus > a {
|
||||
font-weight: bold;
|
||||
background-color: transparent;
|
||||
border-right: 1px solid;
|
||||
}
|
||||
|
||||
/* Nav: second level (shown on .active) */
|
||||
.bs-sidebar .nav .nav {
|
||||
display: none; /* Hide by default, but at >768px, show it */
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.bs-sidebar .nav .nav > li > a {
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
padding-left: 30px;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
/* Show and affix the side nav when space allows it */
|
||||
@media (min-width: 992px) {
|
||||
.bs-sidebar .nav > .active > ul {
|
||||
display: block;
|
||||
}
|
||||
/* Widen the fixed sidebar */
|
||||
.bs-sidebar.affix,
|
||||
.bs-sidebar.affix-bottom {
|
||||
width: 213px;
|
||||
}
|
||||
.bs-sidebar.affix {
|
||||
position: fixed; /* Undo the static from mobile first approach */
|
||||
top: 80px;
|
||||
}
|
||||
.bs-sidebar.affix-bottom {
|
||||
position: absolute; /* Undo the static from mobile first approach */
|
||||
}
|
||||
.bs-sidebar.affix-bottom .bs-sidenav,
|
||||
.bs-sidebar.affix .bs-sidenav {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
/* Widen the fixed sidebar again */
|
||||
.bs-sidebar.affix-bottom,
|
||||
.bs-sidebar.affix {
|
||||
width: 263px;
|
||||
}
|
||||
}
|
||||