├── .gitattributes
├── .gitignore
├── .npmignore
├── .prettierignore
├── CONTRIBUTING.md
├── Gruntfile.js
├── ISSUE_TEMPLATE
├── LICENSE
├── PULL_REQUEST_TEMPLATE
├── README.md
├── build
├── css
│ ├── tempusdominus-bootstrap-4.css
│ └── tempusdominus-bootstrap-4.min.css
└── js
│ ├── tempusdominus-bootstrap-4.js
│ └── tempusdominus-bootstrap-4.min.js
├── composer.json
├── docs
├── ContributorsGuide
│ └── index.html
├── Events
│ └── index.html
├── Extras
│ └── index.html
├── FAQ
│ └── index.html
├── Functions
│ └── index.html
├── Installing
│ └── index.html
├── Options
│ └── index.html
├── Usage
│ └── index.html
├── android-chrome-192x192.png
├── android-chrome-256x256.png
├── apple-touch-icon.png
├── browserconfig.xml
├── css
│ ├── base.css
│ ├── tempusdominus-bootstrap-4.css
│ └── tempusdominus-bootstrap.css
├── favicon-16x16.png
├── favicon-32x32.png
├── favicon.ico
├── img
│ ├── calendarWeeks.png
│ ├── dpheader.png
│ ├── sideBySide.png
│ └── toolbarPlacement.png
├── index.html
├── js
│ ├── base.js
│ ├── tempusdominus-bootstrap-4.js
│ └── tempusdominus-bootstrap.js
├── manifest.json
├── mstile-150x150.png
├── safari-pinned-tab.svg
├── search
│ ├── lunr.js
│ ├── main.js
│ ├── search_index.json
│ └── worker.js
├── sitemap.xml
├── sitemap.xml.gz
└── theme
│ ├── 404.html
│ ├── android-chrome-192x192.png
│ ├── android-chrome-256x256.png
│ ├── apple-touch-icon.png
│ ├── base.html
│ ├── browserconfig.xml
│ ├── content.html
│ ├── css
│ ├── base.css
│ ├── tempusdominus-bootstrap-4.css
│ └── tempusdominus-bootstrap.css
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon.ico
│ ├── js
│ ├── base.js
│ ├── tempusdominus-bootstrap-4.js
│ └── tempusdominus-bootstrap.js
│ ├── main.html
│ ├── manifest.json
│ ├── mstile-150x150.png
│ ├── nav.html
│ ├── safari-pinned-tab.svg
│ ├── search-modal.html
│ └── toc.html
├── eslintrc.json
├── mkdocs.yml
├── package-lock.json
├── package.json
├── src
├── docs
│ ├── ContributorsGuide.md
│ ├── Events.md
│ ├── Extras.md
│ ├── FAQ.md
│ ├── Functions.md
│ ├── Installing.md
│ ├── Options.md
│ ├── Usage.md
│ ├── img
│ │ ├── calendarWeeks.png
│ │ ├── dpheader.png
│ │ ├── sideBySide.png
│ │ └── toolbarPlacement.png
│ ├── index.md
│ └── theme
│ │ ├── 404.html
│ │ ├── android-chrome-192x192.png
│ │ ├── android-chrome-256x256.png
│ │ ├── apple-touch-icon.png
│ │ ├── base.html
│ │ ├── browserconfig.xml
│ │ ├── content.html
│ │ ├── css
│ │ ├── base.css
│ │ ├── tempusdominus-bootstrap-4.css
│ │ └── tempusdominus-bootstrap.css
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── favicon.ico
│ │ ├── js
│ │ ├── base.js
│ │ ├── tempusdominus-bootstrap-4.js
│ │ └── tempusdominus-bootstrap.js
│ │ ├── main.html
│ │ ├── manifest.json
│ │ ├── mstile-150x150.png
│ │ ├── nav.html
│ │ ├── safari-pinned-tab.svg
│ │ ├── search-modal.html
│ │ └── toc.html
├── js
│ └── tempusdominus-bootstrap-4.js
└── sass
│ ├── _tempusdominus-bootstrap-4.scss
│ └── tempusdominus-bootstrap-4-build.scss
└── tasks
└── bump_version.js
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | bower_components
2 | node_modules
3 | .idea
4 | .vs
5 | obj
6 | bin
7 | site
8 | *.user
9 | *.csproj
10 | *.sln
11 | *.nupkg
12 | /index.html
13 | /test.html
14 | /npm-debug.log
15 | private_local_dir/**
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | /assets
2 | /_includes
3 | /_layouts
4 | /.gitignore
5 | /node_modules
6 | /Makefile
7 | /test
8 | *.log
9 | *.swp
10 | *~
11 | *.tgz
12 | /site
13 | *.user
14 | *.csproj
15 | *.sln
16 | *.nupkg
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | **
2 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | Submitting Issues
2 | =================
3 |
4 | If you are submitting a bug, please test and/or fork [this JSFiddle](https://jsfiddle.net/nmocbjLf/1/) demonstrating the issue.
5 | In your Pull Request (PR), describe the use case and provide a link to your forked JSFiddle and possibly provide a code example in the PR itself.
6 |
7 | Issues that are submitted without a description (title only) will be closed with no further explanation.
8 |
9 | Contributing code
10 | =================
11 |
12 | PRs are welcome.
13 |
14 | **Working on your first Pull Request?** You can learn how from this _free_ series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github).
15 |
16 | To contribute, fork the library and install dependencies. You will need [node](http://nodejs.org/).
17 | You can use [nvm](https://github.com/nvm-sh/nvm) or [nenv](https://github.com/ryuone/nenv) to install it.
18 |
19 | Then, run the following commands:
20 |
21 | ```bash
22 | git clone https://github.com/tonix-tuft/tempusdominus-bootstrap.git
23 | cd tempusdominus-bootstrap
24 | npm install -g grunt-cli
25 | npm install
26 | npm run watch
27 | ```
28 |
29 | Very important notes
30 | ====================
31 |
32 | * **Please submit your pull requests to a new branch** (you may call it like you want, just choose a name that describes your feature/bugfix).
33 | * **You don't have to include the minified files in your pull request** (by running `npm run build-all`). Don't worry, we'll build them when we bump a new version.
34 |
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | module.exports = function (grunt) {
2 | grunt.initConfig({
3 | pkg: grunt.file.readJSON('package.json'),
4 | banner: '/*!@preserve\n' +
5 | ' * Tempus Dominus Bootstrap4 v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
6 | ' * Copyright 2016-<%= grunt.template.today("yyyy") %> <%= pkg.author %> and contributors\n' +
7 | ' * Licensed under MIT (https://github.com/tempusdominus/bootstrap-3/blob/master/LICENSE)\n' +
8 | ' */\n',
9 | jqueryCheck: 'if (typeof jQuery === \'undefined\') {\n' +
10 | ' throw new Error(\'Tempus Dominus Bootstrap4\\\'s requires jQuery. jQuery must be included before Tempus Dominus Bootstrap4\\\'s JavaScript.\');\n' +
11 | '}\n',
12 | jqueryVersionCheck: '+function ($) {\n' +
13 | ' var version = $.fn.jquery.split(\' \')[0].split(\'.\');\n' +
14 | ' if ((version[0] < 2 && version[1] < 9) || (version[0] === 1 && version[1] === 9 && version[2] < 1) || (version[0] >= 4)) {\n' +
15 | ' throw new Error(\'Tempus Dominus Bootstrap4\\\'s requires at least jQuery v3.0.0 but less than v4.0.0\');\n' +
16 | ' }\n' +
17 | '}(jQuery);\n\n',
18 | momentCheck: 'if (typeof moment === \'undefined\') {\n' +
19 | ' throw new Error(\'Tempus Dominus Bootstrap4\\\'s requires moment.js. Moment.js must be included before Tempus Dominus Bootstrap4\\\'s JavaScript.\');\n' +
20 | '}\n',
21 | momentVersionCheck: 'var version = moment.version.split(\'.\')\n' +
22 | 'if ((version[0] <= 2 && version[1] < 17) || (version[0] >= 3)) {\n' +
23 | ' throw new Error(\'Tempus Dominus Bootstrap4\\\'s requires at least moment.js v2.17.0 but less than v3.0.0\');\n' +
24 | '}\n',
25 | uglify: {
26 | target: {
27 | files: {
28 | 'build/js/<%= pkg.name %>.min.js': 'build/js/<%= pkg.name %>.js'
29 | }
30 | },
31 | options: {
32 | mangle: true,
33 | compress: {
34 | dead_code: false // eslint-disable-line
35 | },
36 | output: {
37 | ascii_only: true, // eslint-disable-line
38 | comments: 'some'
39 | },
40 | report: 'min'
41 | }
42 | },
43 | eslint: {
44 | options: {
45 | configFile: 'eslintrc.json'
46 | },
47 | target: ['Gruntfile.js', 'src/js/*.js', 'test/*.js']
48 | },
49 | babel: {
50 | dev: {
51 | options: {
52 | sourceMap: false,
53 | compact: false
54 | },
55 | files: {
56 | 'build/js/<%= pkg.name %>.js': 'src/js/<%= pkg.name %>.js'
57 | }
58 | },
59 | dist: {
60 | options: {
61 | compact: false,
62 | 'presets': [
63 | [
64 | '@babel/preset-env',
65 | {
66 | 'modules': false,
67 | 'loose': true
68 | }
69 | ]
70 | ],
71 | 'plugins': [
72 | 'transform-es2015-modules-strip'
73 | ]
74 | },
75 | files: {
76 | 'build/js/<%= pkg.name %>.js': 'build/js/<%= pkg.name %>.js'
77 | }
78 | }
79 | },
80 | concat: {
81 | options: {
82 | // Custom function to remove all export and import statements
83 | process: function (src) {
84 | return src.replace(/^(export|import).*/gm, '');
85 | }
86 | },
87 | bootstrap: {
88 | src: [
89 | 'node_modules/tempusdominus/src/js/tempusdominus.js',
90 | 'src/js/<%= pkg.name %>.js'
91 | ],
92 | dest: 'build/js/<%= pkg.name %>.js'
93 | }
94 | },
95 | 'dart-sass': {
96 | production: {
97 | options: {
98 | outputStyle: 'compressed'
99 | },
100 | files: {
101 | 'build/css/<%= pkg.name %>.min.css': 'src/sass/<%= pkg.name %>-build.scss'
102 | }
103 | },
104 | development: {
105 | options: {
106 |
107 | },
108 | files: {
109 | 'build/css/<%= pkg.name %>.css': 'src/sass/<%= pkg.name %>-build.scss'
110 | }
111 | }
112 | },
113 | stamp: {
114 | bootstrap: {
115 | options: {
116 | banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>\n<%= momentCheck %>\n<%= momentVersionCheck %>\n+function () {\n',
117 | footer: '\n}();'
118 | },
119 | files: {
120 | src: '<%= concat.bootstrap.dest %>'
121 | }
122 | },
123 | css: {
124 | options: {
125 | banner: '<%= banner %>'
126 | },
127 | files: {
128 | src: 'build/css/*.css'
129 | }
130 | }
131 | },
132 | watch: {
133 | src: {
134 | files: '<%= concat.bootstrap.src %>',
135 | tasks: ['default']
136 | }
137 | },
138 | mkdocs: {
139 | dist: {
140 | src: '.',
141 | options: {
142 | clean: true
143 | }
144 | }
145 | },
146 | postcss: {
147 | options: {
148 | map: false,
149 | processors: [
150 | require('autoprefixer')({
151 | // grid: true
152 | })
153 | ]
154 | },
155 | dist: {
156 | src: 'build/css/<%= pkg.name %>.css'
157 | }
158 | },
159 | cssmin: {
160 | options: {
161 | specialComments: 'all'
162 | },
163 | target: {
164 | files: [{
165 | expand: true,
166 | cwd: 'build/css',
167 | src: ['*.css', '!*.min.css'],
168 | dest: 'build/css',
169 | ext: '.min.css'
170 | }]
171 | }
172 | }
173 | });
174 |
175 | grunt.loadTasks('tasks');
176 | grunt.loadNpmTasks('grunt-mkdocs');
177 | grunt.loadNpmTasks('grunt-dart-sass');
178 | grunt.loadNpmTasks('grunt-postcss')
179 | grunt.loadNpmTasks('grunt-contrib-cssmin')
180 | grunt.loadNpmTasks('grunt-contrib-uglify')
181 | grunt.loadNpmTasks('grunt-contrib-watch')
182 |
183 | require('load-grunt-tasks')(grunt);
184 | grunt.registerTask('default', 'build:js');
185 | grunt.registerTask('build:travis', [
186 | 'build:js', 'build:style'//,
187 | // tests
188 | //'env:paris', 'connect', 'jasmine'
189 | ]);
190 |
191 | // Task to be run when building
192 | grunt.registerTask('build', ['build:js', 'build:style']);
193 |
194 | grunt.registerTask('build:js', ['babel:dev', 'concat', 'eslint', 'babel:dist', 'stamp:bootstrap', 'uglify', 'copy']);
195 |
196 | grunt.registerTask('build:style', ['dart-sass', 'stamp:css', 'postcss', 'cssmin', 'copy']);
197 |
198 | grunt.registerTask('copy', 'Generate docs', function () {
199 | grunt.file.copy('build/js/tempusdominus-bootstrap-4.js', 'src/docs/theme/js/tempusdominus-bootstrap-4.js');
200 | grunt.file.copy('build/css/tempusdominus-bootstrap-4.css', 'src/docs/theme/css/tempusdominus-bootstrap-4.css');
201 | });
202 |
203 | grunt.registerTask('docs', ['copy', 'mkdocs']);
204 |
205 | grunt.registerTask('release', function (version) {
206 | if (!version || version.split('.').length !== 3) {
207 | grunt.fail.fatal('malformed version. Use grunt release:1.2.3');
208 | }
209 |
210 | grunt.task.run([
211 | 'bump_version:' + version,
212 | 'build:travis',
213 | 'docs'
214 | ]);
215 | });
216 | };
217 |
--------------------------------------------------------------------------------
/ISSUE_TEMPLATE:
--------------------------------------------------------------------------------
1 | Please read this [blog post](https://eonasdan.com/state-of-my-picker)
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 Tempus Dominus
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/PULL_REQUEST_TEMPLATE:
--------------------------------------------------------------------------------
1 | Please read this [blog post](https://eonasdan.com/state-of-my-picker)
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Tempus Dominus Bootstrap 4
2 |
3 | Version 5 was attempt to build a core module and build other modules like bootstrap 3/4 that handled rendering. Unfortunately, due to my health and other factors you can read about on [my blog](https://eonasdan.com/posts/state-of-my-picker.html) I was unable to maintain 3 extra projects. V6 is a work in progress and is come back under the [orginial repo which as been renamed as tempus-dominus](https://github.com/Eonasdan/tempus-dominus).
4 |
--------------------------------------------------------------------------------
/build/css/tempusdominus-bootstrap-4.min.css:
--------------------------------------------------------------------------------
1 | /*!@preserve
2 | * Tempus Dominus Bootstrap4 v5.39.0 (https://tempusdominus.github.io/bootstrap-4/)
3 | * Copyright 2016-2020 Jonathan Peterson and contributors
4 | * Licensed under MIT (https://github.com/tempusdominus/bootstrap-3/blob/master/LICENSE)
5 | */.bootstrap-datetimepicker-widget .btn[data-action=clear]::after,.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=today]::after,.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after,.bootstrap-datetimepicker-widget .picker-switch::after,.bootstrap-datetimepicker-widget table th.next::after,.bootstrap-datetimepicker-widget table th.prev::after,.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}body.tempusdominus-bootstrap-datetimepicker-widget-day-click,body.tempusdominus-bootstrap-datetimepicker-widget-day-click *{cursor:pointer!important}body.tempusdominus-bootstrap-datetimepicker-widget-day-click{position:relative!important}.tempusdominus-bootstrap-datetimepicker-widget-day-click-glass-panel{position:absolute;z-index:999999999999;top:0;left:0;right:0;bottom:0;cursor:pointer!important}.bootstrap-datetimepicker-widget .datepicker-days tbody td{cursor:pointer}.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{display:block;margin:2px 0;padding:4px;width:14rem}.bootstrap-datetimepicker-widget.dropdown-menu.tempusdominus-bootstrap-datetimepicker-widget-with-feather-icons{width:16rem}.bootstrap-datetimepicker-widget.dropdown-menu.tempusdominus-bootstrap-datetimepicker-widget-with-calendar-weeks{width:16rem}.bootstrap-datetimepicker-widget.dropdown-menu.tempusdominus-bootstrap-datetimepicker-widget-with-calendar-weeks.tempusdominus-bootstrap-datetimepicker-widget-with-feather-icons{width:17rem}@media (min-width:576px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:after,.bootstrap-datetimepicker-widget.dropdown-menu:before{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,.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;top:-6px;left:8px}.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,.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.float-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.float-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget.dropdown-menu.wider{width:16rem}.bootstrap-datetimepicker-widget .list-unstyled{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]{text-align:center;font-family:Arial,sans-serif,-apple-system,system-ui,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";width:38px;height:38px}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after{content:"Increment Hours"}.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after{content:"Increment Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after{content:"Decrement Hours"}.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after{content:"Decrement Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after{content:"Show Hours"}.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after{content:"Show Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after{content:"Toggle AM/PM"}.bootstrap-datetimepicker-widget .btn[data-action=clear]::after{content:"Clear the picker"}.bootstrap-datetimepicker-widget .btn[data-action=today]::after{content:"Set the date to today"}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget .picker-switch::after{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 .picker-switch.picker-switch-with-feathers-icons td span{line-height:2.8;height:2.8em}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:.25rem}.bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:0 0;color:#6c757d;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev::after{content:"Previous Month"}.bootstrap-datetimepicker-widget table th.next::after{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:#e9ecef}.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:#6c757d;cursor:default}.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:#e9ecef;cursor:pointer}.bootstrap-datetimepicker-widget table td.new,.bootstrap-datetimepicker-widget table td.old{color:#6c757d}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:"";display:inline-block;border:solid transparent;border-width:0 0 7px 7px;border-bottom-color:#007bff;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#007bff;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:0 0;color:#6c757d;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin-top:2px;margin-bottom:2px;cursor:pointer;border-radius:.25rem}.bootstrap-datetimepicker-widget table td span:hover{background:#e9ecef}.bootstrap-datetimepicker-widget table td span.active{background-color:#007bff;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td span.old{color:#6c757d}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:0 0;color:#6c757d;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.bootstrap-datetimepicker-widget .timepicker .timepicker-picker a.btn{color:#007bff;color:var(--blue,#007bff)}.bootstrap-datetimepicker-widget .timepicker .timepicker-picker a.btn:hover{color:#0056b3}.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=decrementHours],.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=decrementMinutes],.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=decrementSeconds],.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=incrementHours],.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=incrementMinutes],.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=incrementSeconds],.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=showHours],.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=showMinutes],.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=showSeconds],.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=togglePeriod],.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td.day,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td.hour,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td.minute,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td.second{pointer-events:none;cursor:default}.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=decrementHours]:hover,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=decrementMinutes]:hover,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=decrementSeconds]:hover,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=incrementHours]:hover,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=incrementMinutes]:hover,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=incrementSeconds]:hover,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=showHours]:hover,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=showMinutes]:hover,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=showSeconds]:hover,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td [data-action=togglePeriod]:hover,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td.day:hover,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td.hour:hover,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td.minute:hover,.bootstrap-datetimepicker-widget.bootstrap-datetimepicker-widget-readonly table td.second:hover{background:0 0}.input-group [data-toggle=datetimepicker]{cursor:pointer}
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tempusdominus/bootstrap-4",
3 | "type": "component",
4 | "description": "A date/time picker component designed to work with Bootstrap 4 and Momentjs.",
5 | "version": "5.38.0",
6 | "keywords": [
7 | "bootstrap",
8 | "datepicker",
9 | "datetimepicker",
10 | "timepicker",
11 | "moment"
12 | ],
13 | "homepage": "https://github.com/tempusdominus/bootstrap-4",
14 | "license": "MIT",
15 | "require": {
16 | "robloach/component-installer": "*",
17 | "components/jquery": ">=3.0.0",
18 | "moment/moment": ">=2.10.5",
19 | "tempusdominus/core": "5.0.*"
20 | },
21 | "extra": {
22 | "component": {
23 | "scripts": [
24 | "src/js/tempusdominus-bootstrap-4.js"
25 | ],
26 | "files": [
27 | "build/js/tempusdominus-bootstrap-4.min.js",
28 | "build/css/tempusdominus-bootstrap-4.min.css"
29 | ]
30 | }
31 | }
32 | }
--------------------------------------------------------------------------------
/docs/Events/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Events - Tempus Dominus - Bootstrap 4
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
105 |
106 |
113 |
114 |
115 |
Important!
116 | Please read this
blog post .
117 | The Tempus Dominus projects are getting rolled back into the
orginal repo . TD Bootsrap 3/4 are no longer supported.
118 |
119 |
120 |
121 |
122 |
123 |
135 |
136 |
Events
137 |
138 |
139 |
hide.datetimepicker
140 |
Fired when the widget is hidden.
141 |
Parameters:
142 |
e = {
143 | date //the currently set date. Type: moment object (clone)
144 | }
145 |
146 |
147 |
Emitted from:
148 |
149 | toggle()
150 | hide()
151 | disable()
152 |
153 |
154 |
show.datetimepicker
155 |
Fired when the widget is shown.
156 |
Parameters:
157 |
No parameters are include, listen to change.datetimepicker
instead
158 |
Emitted from:
159 |
160 | toggle()
161 | show()
162 |
163 |
164 |
change.datetimepicker
165 |
Fired when the date is changed, including when changed to a non-date (e.g. When keepInvalid=true).
166 |
Parameters:
167 |
e = {
168 | date, //date the picker changed to. Type: moment object (clone)
169 | oldDate //previous date. Type: moment object (clone) or false in the event of a null
170 | }
171 |
172 |
173 |
Emitted from:
174 |
175 | toggle() Note : Only fired when using useCurrent
176 | show() Note : Only fired when using useCurrent
or when or the date is changed to comply with date rules (min/max etc)
177 | date(newDate)
178 | minDate(minDate)
179 | maxDate(maxDate)
180 | daysOfWeekDisabled()
181 |
182 |
183 |
error.datetimepicker
184 |
Fired when a selected date fails to pass validation.
185 |
Parameters:
186 |
e = {
187 | date //the invalid date. Type: moment object (clone)
188 | oldDate //previous date. Type: moment object (clone) or false in the event of a null
189 | }
190 |
191 |
192 |
Emmited from:
193 |
194 | minDate(minDate)
195 | maxDate(maxDate)
196 | daysOfWeekDisabled()
197 | setValue() private function
198 |
199 |
200 |
update.datetimepicker
201 |
Fired (in most cases) when the viewDate
changes. E.g. Next and Previous buttons, selecting a year.
202 |
Parameters:
203 |
e = {
204 | change, //Change type as a momentjs format token. Type: string e.g. yyyy on year change
205 | viewDate //new viewDate. Type: moment object
206 | }
207 |
208 |
209 |
210 |
211 |
212 |
213 |
233 |
234 |
--------------------------------------------------------------------------------
/docs/Extras/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Extras - Tempus Dominus - Bootstrap 4
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
105 |
106 |
113 |
114 |
115 |
Important!
116 | Please read this
blog post .
117 | The Tempus Dominus projects are getting rolled back into the
orginal repo . TD Bootsrap 3/4 are no longer supported.
118 |
119 |
120 |
121 |
122 |
123 |
131 |
132 |
Extras
133 |
134 |
135 |
Guides for making the picker work better with rails, IE, etc. Note: I have no idea if these guides still apply for v5 or not.
136 |
Rails 3
137 |
by dhulihan
138 |
You can easily override the default rails form helpers (date_select
and datetime_select
) with bootstrap-datetimepicker for a much nicer experience.
139 |
# Add to config/initializers/form.rb or the end of app/helpers/application_helper.rb
140 | module ActionView
141 | module Helpers
142 | class FormBuilder
143 | def date_select(method, options = {}, html_options = {})
144 | existing_date = @object.send(method)
145 | formatted_date = existing_date.to_date.strftime("%F") if existing_date.present?
146 | @template.content_tag(:div, :class => "input-group") do
147 | text_field(method, :value => formatted_date, :class => "form-control datepicker", :"data-date-format" => "YYYY-MM-DD") +
148 | @template.content_tag(:span, @template.content_tag(:span, "", :class => "glyphicon glyphicon-calendar") ,:class => "input-group-addon")
149 | end
150 | end
151 |
152 | def datetime_select(method, options = {}, html_options = {})
153 | existing_time = @object.send(method)
154 | formatted_time = existing_time.to_time.strftime("%F %I:%M %p") if existing_time.present?
155 | @template.content_tag(:div, :class => "input-group") do
156 | text_field(method, :value => formatted_time, :class => "form-control datetimepicker", :"data-date-format" => "YYYY-MM-DD hh:mm A") +
157 | @template.content_tag(:span, @template.content_tag(:span, "", :class => "glyphicon glyphicon-calendar") ,:class => "input-group-addon")
158 | end
159 | end
160 | end
161 | end
162 | end
163 |
164 |
165 |
The time format used here is ActiveRecord-friendly, which means it will be parsed correctly when passed in through params
to your record.
166 |
That's all there is to it! Now all of your forms that use datetime_select
or date_select
will be automatically updated:
167 |
<% form_for @post do |f| %>
168 | <div class="form-group">
169 | <label>Published At</label>
170 | <%= f.datetime_select :published_at %>
171 | </div>
172 | <% end %>
173 |
174 |
175 |
176 |
177 |
178 |
179 |
199 |
200 |
--------------------------------------------------------------------------------
/docs/FAQ/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | FAQs - Tempus Dominus - Bootstrap 4
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
105 |
106 |
113 |
114 |
115 |
Important!
116 | Please read this
blog post .
117 | The Tempus Dominus projects are getting rolled back into the
orginal repo . TD Bootsrap 3/4 are no longer supported.
118 |
119 |
120 |
121 |
122 |
123 |
135 |
136 |
FAQs
137 |
138 |
139 |
How do I disable the date or time element
140 |
How do I format ...; How do I add seconds; etc.
141 |
The picker uses the format
option to decide what components to show. Set format
to LT
, LTS
or another valid MomentJs format string to display certain components
142 |
How do I change the language/locale
143 |
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.
144 |
How do I change the styles? The picker closes.
145 |
Set debug:true
which will force the picker to stay open, even onBlur
. You can hide the picker manually by calling hide()
146 |
How do I change the start of the week?
147 |
Start of the week is based on the locale
provided . This is defined by moment's locales. If you want to change it, create your own locale file or override. See moment's docs .
148 |
How I use the picker as birthday picker?
149 |
Use the viewMode
option to 'years'
150 |
151 |
152 |
153 |
154 |
155 |
175 |
176 |
--------------------------------------------------------------------------------
/docs/Functions/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Functions - Tempus Dominus - Bootstrap 4
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
105 |
106 |
113 |
114 |
115 |
Important!
116 | Please read this
blog post .
117 | The Tempus Dominus projects are getting rolled back into the
orginal repo . TD Bootsrap 3/4 are no longer supported.
118 |
119 |
120 |
121 |
122 |
123 |
144 |
145 |
Functions
146 |
147 |
148 |
149 | Note
150 | All functions are accessed via the data
attribute e.g. $('#datetimepicker').datetimepicker(FUNCTION)
151 |
152 |
153 |
destroy
154 |
Destroys the widget and removes all attached event listeners
155 |
156 |
toggle
157 |
Shows or hides the widget
158 |
Emits
159 |
160 |
161 | hide.datetimepicker
- if the widget is hidden after the toggle call
162 |
163 |
164 | show.datetimepicker
- if the widget is show after the toggle call
165 |
166 |
167 | change.datetimepicker
- if the widget is opened for the first time and the input element is empty and options.useCurrent != false
168 |
169 |
170 |
171 |
show
172 |
Shows the widget
173 |
Emits
174 |
175 |
176 | show.datetimepicker
- if the widget was hidden before that call
177 |
178 |
179 | change.datetimepicker
- 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
180 |
181 |
182 |
183 |
hide
184 |
Hides the widget
185 |
Emits
186 |
187 | hide.datetimepicker
- if the widget was visible before that call
188 |
189 |
190 |
disable
191 |
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.
192 |
Emits
193 |
194 | hide.datetimepicker
- if the widget was visible before that call
195 |
196 |
197 |
enable
198 |
Enables the input element, the component is attached to, by removing disabled
attribute from it.
199 |
200 |
clear
201 |
Clears the date picker by setting the value to null
202 |
203 |
viewDate
204 |
viewDate
205 |
Returns a moment
variable with the currently set options.viewDate
option.
206 |
viewDate(viewDate)
207 |
Takes a string, moment or Date
value.
208 |
This will change the viewDate
without changing or setting the selected date.
209 |
210 |
211 |
212 |
213 |
214 |
234 |
235 |
--------------------------------------------------------------------------------
/docs/Installing/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Installing - Tempus Dominus - Bootstrap 4
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
105 |
106 |
113 |
114 |
115 |
Important!
116 | Please read this
blog post .
117 | The Tempus Dominus projects are getting rolled back into the
orginal repo . TD Bootsrap 3/4 are no longer supported.
118 |
119 |
120 |
121 |
122 |
123 |
135 |
136 |
Installing
137 |
138 |
139 |
Minimal Requirements
140 |
141 | jQuery
142 | Moment.js
143 | Locales: Moment's locale files are here
144 |
145 |
Installation Guides
146 |
153 |
CDN
154 |
<head>
155 | <script src="https://cdnjs.cloudflare.com/ajax/libs/tempusdominus-bootstrap-4/5.38.0/js/tempusdominus-bootstrap-4.min.js" crossorigin="anonymous"></script>
156 | <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tempusdominus-bootstrap-4/5.38.0/css/tempusdominus-bootstrap-4.min.css" crossorigin="anonymous" />
157 | </head>
158 |
159 |
160 |
Package Managers
161 |
Rails
162 |
Rails 5.1 Support - Bootstrap 4 Datetime Picker Rails
163 |
164 | Add gem 'bootstrap4-datetime-picker-rails'
to your Gemfile
165 | Execute bundle
166 | Add //= require tempusdominus-bootstrap-4.js
to your application.js
167 | Add @import "tempusdominus-bootstrap-4.css"
to your application.scss
168 |
169 |
Django
170 |
Python package for Django: Django Tempus Dominus
171 |
172 | Install via pip: pip install django-tempus-dominus
173 | Widgets are provided for Date, DateTime, and Time.
174 | Full examples are available with Django Forms, Widgets, and Templates .
175 |
176 |
Angular Wrapper
177 |
Follow instructions at ngx-tempusdominus-bootstrap
178 |
Manual
179 |
180 | Acquire jQuery
181 | Acquire Moment.js
182 | Acquire
183 |
184 |
<script type="text/javascript" src="/path/to/jquery.js"></script>
185 | <script type="text/javascript" src="/path/to/moment.js"></script>
186 | <script type="text/javascript" src="/path/to/tempusdominus-bootstrap-4.min.js"></script>
187 | <link rel="stylesheet" href="/path/to/tempusdominus-bootstrap-4.min.css"/>
188 |
189 |
190 |
191 |
192 |
193 |
194 |
214 |
215 |
--------------------------------------------------------------------------------
/docs/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/android-chrome-192x192.png
--------------------------------------------------------------------------------
/docs/android-chrome-256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/android-chrome-256x256.png
--------------------------------------------------------------------------------
/docs/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/apple-touch-icon.png
--------------------------------------------------------------------------------
/docs/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #2b5797
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/css/tempusdominus-bootstrap.css:
--------------------------------------------------------------------------------
1 | /*@preserve
2 | * Tempus Dominus Bootstrap4 v5.1.4 (https://tempusdominus.github.io/bootstrap-4/)
3 | * Copyright 2016-2020 Jonathan Peterson
4 | * Licensed under MIT (https://github.com/tempusdominus/bootstrap-3/blob/master/LICENSE)
5 | */
6 |
7 | .sr-only, .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after, .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after, .bootstrap-datetimepicker-widget .btn[data-action="today"]::after, .bootstrap-datetimepicker-widget .picker-switch::after, .bootstrap-datetimepicker-widget table th.prev::after, .bootstrap-datetimepicker-widget table th.next::after {
8 | position: absolute;
9 | width: 1px;
10 | height: 1px;
11 | margin: -1px;
12 | padding: 0;
13 | overflow: hidden;
14 | clip: rect(0, 0, 0, 0);
15 | border: 0; }
16 |
17 | .bootstrap-datetimepicker-widget {
18 | list-style: none; }
19 | .bootstrap-datetimepicker-widget.dropdown-menu {
20 | display: block;
21 | margin: 2px 0;
22 | padding: 4px;
23 | width: 14rem; }
24 | @media (min-width: 576px) {
25 | .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
26 | width: 38em; } }
27 | @media (min-width: 768px) {
28 | .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
29 | width: 38em; } }
30 | @media (min-width: 992px) {
31 | .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
32 | width: 38em; } }
33 | .bootstrap-datetimepicker-widget.dropdown-menu:before, .bootstrap-datetimepicker-widget.dropdown-menu:after {
34 | content: '';
35 | display: inline-block;
36 | position: absolute; }
37 | .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before {
38 | border-left: 7px solid transparent;
39 | border-right: 7px solid transparent;
40 | border-bottom: 7px solid #ccc;
41 | border-bottom-color: rgba(0, 0, 0, 0.2);
42 | top: -7px;
43 | left: 7px; }
44 | .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after {
45 | border-left: 6px solid transparent;
46 | border-right: 6px solid transparent;
47 | border-bottom: 6px solid white;
48 | top: -6px;
49 | left: 8px; }
50 | .bootstrap-datetimepicker-widget.dropdown-menu.top:before {
51 | border-left: 7px solid transparent;
52 | border-right: 7px solid transparent;
53 | border-top: 7px solid #ccc;
54 | border-top-color: rgba(0, 0, 0, 0.2);
55 | bottom: -7px;
56 | left: 6px; }
57 | .bootstrap-datetimepicker-widget.dropdown-menu.top:after {
58 | border-left: 6px solid transparent;
59 | border-right: 6px solid transparent;
60 | border-top: 6px solid white;
61 | bottom: -6px;
62 | left: 7px; }
63 | .bootstrap-datetimepicker-widget.dropdown-menu.float-right:before {
64 | left: auto;
65 | right: 6px; }
66 | .bootstrap-datetimepicker-widget.dropdown-menu.float-right:after {
67 | left: auto;
68 | right: 7px; }
69 | .bootstrap-datetimepicker-widget.dropdown-menu.wider {
70 | width: 16rem; }
71 | .bootstrap-datetimepicker-widget .list-unstyled {
72 | margin: 0; }
73 | .bootstrap-datetimepicker-widget a[data-action] {
74 | padding: 6px 0; }
75 | .bootstrap-datetimepicker-widget a[data-action]:active {
76 | box-shadow: none; }
77 | .bootstrap-datetimepicker-widget .timepicker-hour, .bootstrap-datetimepicker-widget .timepicker-minute, .bootstrap-datetimepicker-widget .timepicker-second {
78 | width: 54px;
79 | font-weight: bold;
80 | font-size: 1.2em;
81 | margin: 0; }
82 | .bootstrap-datetimepicker-widget button[data-action] {
83 | padding: 6px; }
84 | .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after {
85 | content: "Increment Hours"; }
86 | .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after {
87 | content: "Increment Minutes"; }
88 | .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after {
89 | content: "Decrement Hours"; }
90 | .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after {
91 | content: "Decrement Minutes"; }
92 | .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after {
93 | content: "Show Hours"; }
94 | .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after {
95 | content: "Show Minutes"; }
96 | .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after {
97 | content: "Toggle AM/PM"; }
98 | .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after {
99 | content: "Clear the picker"; }
100 | .bootstrap-datetimepicker-widget .btn[data-action="today"]::after {
101 | content: "Set the date to today"; }
102 | .bootstrap-datetimepicker-widget .picker-switch {
103 | text-align: center; }
104 | .bootstrap-datetimepicker-widget .picker-switch::after {
105 | content: "Toggle Date and Time Screens"; }
106 | .bootstrap-datetimepicker-widget .picker-switch td {
107 | padding: 0;
108 | margin: 0;
109 | height: auto;
110 | width: auto;
111 | line-height: inherit; }
112 | .bootstrap-datetimepicker-widget .picker-switch td span {
113 | line-height: 2.5;
114 | height: 2.5em;
115 | width: 100%; }
116 | .bootstrap-datetimepicker-widget table {
117 | width: 100%;
118 | margin: 0; }
119 | .bootstrap-datetimepicker-widget table td,
120 | .bootstrap-datetimepicker-widget table th {
121 | text-align: center;
122 | border-radius: 0.25rem; }
123 | .bootstrap-datetimepicker-widget table th {
124 | height: 20px;
125 | line-height: 20px;
126 | width: 20px; }
127 | .bootstrap-datetimepicker-widget table th.picker-switch {
128 | width: 145px; }
129 | .bootstrap-datetimepicker-widget table th.disabled, .bootstrap-datetimepicker-widget table th.disabled:hover {
130 | background: none;
131 | color: #6c757d;
132 | cursor: not-allowed; }
133 | .bootstrap-datetimepicker-widget table th.prev::after {
134 | content: "Previous Month"; }
135 | .bootstrap-datetimepicker-widget table th.next::after {
136 | content: "Next Month"; }
137 | .bootstrap-datetimepicker-widget table thead tr:first-child th {
138 | cursor: pointer; }
139 | .bootstrap-datetimepicker-widget table thead tr:first-child th:hover {
140 | background: #e9ecef; }
141 | .bootstrap-datetimepicker-widget table td {
142 | height: 54px;
143 | line-height: 54px;
144 | width: 54px; }
145 | .bootstrap-datetimepicker-widget table td.cw {
146 | font-size: .8em;
147 | height: 20px;
148 | line-height: 20px;
149 | color: #6c757d; }
150 | .bootstrap-datetimepicker-widget table td.day {
151 | height: 20px;
152 | line-height: 20px;
153 | width: 20px; }
154 | .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 {
155 | background: #e9ecef;
156 | cursor: pointer; }
157 | .bootstrap-datetimepicker-widget table td.old, .bootstrap-datetimepicker-widget table td.new {
158 | color: #6c757d; }
159 | .bootstrap-datetimepicker-widget table td.today {
160 | position: relative; }
161 | .bootstrap-datetimepicker-widget table td.today:before {
162 | content: '';
163 | display: inline-block;
164 | border: solid transparent;
165 | border-width: 0 0 7px 7px;
166 | border-bottom-color: #007bff;
167 | border-top-color: rgba(0, 0, 0, 0.2);
168 | position: absolute;
169 | bottom: 4px;
170 | right: 4px; }
171 | .bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover {
172 | background-color: #007bff;
173 | color: #fff;
174 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
175 | .bootstrap-datetimepicker-widget table td.active.today:before {
176 | border-bottom-color: #fff; }
177 | .bootstrap-datetimepicker-widget table td.disabled, .bootstrap-datetimepicker-widget table td.disabled:hover {
178 | background: none;
179 | color: #6c757d;
180 | cursor: not-allowed; }
181 | .bootstrap-datetimepicker-widget table td span {
182 | display: inline-block;
183 | width: 54px;
184 | height: 54px;
185 | line-height: 54px;
186 | margin: 2px 1.5px;
187 | cursor: pointer;
188 | border-radius: 0.25rem; }
189 | .bootstrap-datetimepicker-widget table td span:hover {
190 | background: #e9ecef; }
191 | .bootstrap-datetimepicker-widget table td span.active {
192 | background-color: #007bff;
193 | color: #fff;
194 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
195 | .bootstrap-datetimepicker-widget table td span.old {
196 | color: #6c757d; }
197 | .bootstrap-datetimepicker-widget table td span.disabled, .bootstrap-datetimepicker-widget table td span.disabled:hover {
198 | background: none;
199 | color: #6c757d;
200 | cursor: not-allowed; }
201 | .bootstrap-datetimepicker-widget.usetwentyfour td.hour {
202 | height: 27px;
203 | line-height: 27px; }
204 |
205 | .input-group [data-toggle="datetimepicker"] {
206 | cursor: pointer; }
207 |
--------------------------------------------------------------------------------
/docs/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/favicon-16x16.png
--------------------------------------------------------------------------------
/docs/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/favicon-32x32.png
--------------------------------------------------------------------------------
/docs/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/favicon.ico
--------------------------------------------------------------------------------
/docs/img/calendarWeeks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/img/calendarWeeks.png
--------------------------------------------------------------------------------
/docs/img/dpheader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/img/dpheader.png
--------------------------------------------------------------------------------
/docs/img/sideBySide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/img/sideBySide.png
--------------------------------------------------------------------------------
/docs/img/toolbarPlacement.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/img/toolbarPlacement.png
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | Tempus Dominus - Bootstrap 4
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
106 |
107 |
114 |
115 |
116 |
Important!
117 | Please read this
blog post .
118 | The Tempus Dominus projects are getting rolled back into the
orginal repo . TD Bootsrap 3/4 are no longer supported.
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
Tempus Dominus
131 |
132 | Tempus Dominus is the successor to the very popular Eonasdan/bootstrap-datetimepicker.
133 | The plugin provide a robust date and time picker designed to integrate into your Bootstrap project.
134 |
135 |
139 |
140 | Currently v5.1.3
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
Get awesome Dashboard Templates
151 |
Looking for a template with the datepicker ready to go? Then get check out these templates from our partners.
152 |
153 |
154 |
155 |
Creative Tim
156 |
157 |
163 |
169 |
175 |
176 |
177 |
178 |
Flatlogic
179 |
180 |
186 |
192 |
198 |
199 |
200 |
201 |
202 |
231 |
232 |
233 |
253 |
254 |
--------------------------------------------------------------------------------
/docs/js/base.js:
--------------------------------------------------------------------------------
1 | function getSearchTerm()
2 | {
3 | var sPageURL = window.location.search.substring(1);
4 | var sURLVariables = sPageURL.split('&');
5 | for (var i = 0; i < sURLVariables.length; i++)
6 | {
7 | var sParameterName = sURLVariables[i].split('=');
8 | if (sParameterName[0] == 'q')
9 | {
10 | return sParameterName[1];
11 | }
12 | }
13 | }
14 |
15 | $(function() {
16 |
17 | var search_term = getSearchTerm(),
18 | $search_modal = $('#mkdocs_search_modal');
19 |
20 | if(search_term){
21 | $search_modal.modal();
22 | }
23 |
24 | // make sure search input gets autofocus everytime modal opens.
25 | $search_modal.on('shown.bs.modal', function () {
26 | $search_modal.find('#mkdocs-search-query').focus();
27 | });
28 |
29 | // Highlight.js
30 | $('pre code').each(function (i, block) {
31 | hljs.highlightBlock(block);
32 | });
33 | $('table').addClass('table table-striped table-hover');
34 |
35 | // Improve the scrollspy behaviour when users click on a TOC item.
36 | $(".bs-sidenav a").on("click", function() {
37 | var clicked = this;
38 | setTimeout(function() {
39 | var active = $('.nav li.active a');
40 | active = active[active.length - 1];
41 | if (clicked !== active) {
42 | $(active).parent().removeClass("active");
43 | $(clicked).parent().addClass("active");
44 | }
45 | }, 50);
46 | });
47 |
48 | $('body').scrollspy({
49 | target: '.bs-sidebar',
50 | });
51 |
52 | /* Toggle the `clicky` class on the body when clicking links to let us
53 | retrigger CSS animations. See ../css/base.css for more details. */
54 | $('a').click(function (e) {
55 | $('body').toggleClass('clicky');
56 | });
57 |
58 | /* Prevent disabled links from causing a page reload */
59 | $("li.disabled a").click(function () {
60 | event.preventDefault();
61 | });
62 | });
--------------------------------------------------------------------------------
/docs/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "",
3 | "icons": [
4 | {
5 | "src": "/android-chrome-192x192.png",
6 | "sizes": "192x192",
7 | "type": "image/png"
8 | },
9 | {
10 | "src": "/android-chrome-256x256.png",
11 | "sizes": "256x256",
12 | "type": "image/png"
13 | }
14 | ],
15 | "theme_color": "#ffffff",
16 | "background_color": "#ffffff",
17 | "display": "standalone"
18 | }
--------------------------------------------------------------------------------
/docs/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/mstile-150x150.png
--------------------------------------------------------------------------------
/docs/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 | Created by potrace 1.11, written by Peter Selinger 2001-2013
9 |
10 |
12 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/docs/search/main.js:
--------------------------------------------------------------------------------
1 | function getSearchTermFromLocation() {
2 | var sPageURL = window.location.search.substring(1);
3 | var sURLVariables = sPageURL.split('&');
4 | for (var i = 0; i < sURLVariables.length; i++) {
5 | var sParameterName = sURLVariables[i].split('=');
6 | if (sParameterName[0] == 'q') {
7 | return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20'));
8 | }
9 | }
10 | }
11 |
12 | function joinUrl (base, path) {
13 | if (path.substring(0, 1) === "/") {
14 | // path starts with `/`. Thus it is absolute.
15 | return path;
16 | }
17 | if (base.substring(base.length-1) === "/") {
18 | // base ends with `/`
19 | return base + path;
20 | }
21 | return base + "/" + path;
22 | }
23 |
24 | function formatResult (location, title, summary) {
25 | return '' + summary +'
';
26 | }
27 |
28 | function displayResults (results) {
29 | var search_results = document.getElementById("mkdocs-search-results");
30 | while (search_results.firstChild) {
31 | search_results.removeChild(search_results.firstChild);
32 | }
33 | if (results.length > 0){
34 | for (var i=0; i < results.length; i++){
35 | var result = results[i];
36 | var html = formatResult(result.location, result.title, result.summary);
37 | search_results.insertAdjacentHTML('beforeend', html);
38 | }
39 | } else {
40 | search_results.insertAdjacentHTML('beforeend', "No results found
");
41 | }
42 | }
43 |
44 | function doSearch () {
45 | var query = document.getElementById('mkdocs-search-query').value;
46 | if (query.length > min_search_length) {
47 | if (!window.Worker) {
48 | displayResults(search(query));
49 | } else {
50 | searchWorker.postMessage({query: query});
51 | }
52 | } else {
53 | // Clear results for short queries
54 | displayResults([]);
55 | }
56 | }
57 |
58 | function initSearch () {
59 | var search_input = document.getElementById('mkdocs-search-query');
60 | if (search_input) {
61 | search_input.addEventListener("keyup", doSearch);
62 | }
63 | var term = getSearchTermFromLocation();
64 | if (term) {
65 | search_input.value = term;
66 | doSearch();
67 | }
68 | }
69 |
70 | function onWorkerMessage (e) {
71 | if (e.data.allowSearch) {
72 | initSearch();
73 | } else if (e.data.results) {
74 | var results = e.data.results;
75 | displayResults(results);
76 | } else if (e.data.config) {
77 | min_search_length = e.data.config.min_search_length-1;
78 | }
79 | }
80 |
81 | if (!window.Worker) {
82 | console.log('Web Worker API not supported');
83 | // load index in main thread
84 | $.getScript(joinUrl(base_url, "search/worker.js")).done(function () {
85 | console.log('Loaded worker');
86 | init();
87 | window.postMessage = function (msg) {
88 | onWorkerMessage({data: msg});
89 | };
90 | }).fail(function (jqxhr, settings, exception) {
91 | console.error('Could not load worker.js');
92 | });
93 | } else {
94 | // Wrap search in a web worker
95 | var searchWorker = new Worker(joinUrl(base_url, "search/worker.js"));
96 | searchWorker.postMessage({init: true});
97 | searchWorker.onmessage = onWorkerMessage;
98 | }
99 |
--------------------------------------------------------------------------------
/docs/search/worker.js:
--------------------------------------------------------------------------------
1 | var base_path = 'function' === typeof importScripts ? '.' : '/search/';
2 | var allowSearch = false;
3 | var index;
4 | var documents = {};
5 | var lang = ['en'];
6 | var data;
7 |
8 | function getScript(script, callback) {
9 | console.log('Loading script: ' + script);
10 | $.getScript(base_path + script).done(function () {
11 | callback();
12 | }).fail(function (jqxhr, settings, exception) {
13 | console.log('Error: ' + exception);
14 | });
15 | }
16 |
17 | function getScriptsInOrder(scripts, callback) {
18 | if (scripts.length === 0) {
19 | callback();
20 | return;
21 | }
22 | getScript(scripts[0], function() {
23 | getScriptsInOrder(scripts.slice(1), callback);
24 | });
25 | }
26 |
27 | function loadScripts(urls, callback) {
28 | if( 'function' === typeof importScripts ) {
29 | importScripts.apply(null, urls);
30 | callback();
31 | } else {
32 | getScriptsInOrder(urls, callback);
33 | }
34 | }
35 |
36 | function onJSONLoaded () {
37 | data = JSON.parse(this.responseText);
38 | var scriptsToLoad = ['lunr.js'];
39 | if (data.config && data.config.lang && data.config.lang.length) {
40 | lang = data.config.lang;
41 | }
42 | if (lang.length > 1 || lang[0] !== "en") {
43 | scriptsToLoad.push('lunr.stemmer.support.js');
44 | if (lang.length > 1) {
45 | scriptsToLoad.push('lunr.multi.js');
46 | }
47 | for (var i=0; i < lang.length; i++) {
48 | if (lang[i] != 'en') {
49 | scriptsToLoad.push(['lunr', lang[i], 'js'].join('.'));
50 | }
51 | }
52 | }
53 | loadScripts(scriptsToLoad, onScriptsLoaded);
54 | }
55 |
56 | function onScriptsLoaded () {
57 | console.log('All search scripts loaded, building Lunr index...');
58 | if (data.config && data.config.separator && data.config.separator.length) {
59 | lunr.tokenizer.separator = new RegExp(data.config.separator);
60 | }
61 |
62 | if (data.index) {
63 | index = lunr.Index.load(data.index);
64 | data.docs.forEach(function (doc) {
65 | documents[doc.location] = doc;
66 | });
67 | console.log('Lunr pre-built index loaded, search ready');
68 | } else {
69 | index = lunr(function () {
70 | if (lang.length === 1 && lang[0] !== "en" && lunr[lang[0]]) {
71 | this.use(lunr[lang[0]]);
72 | } else if (lang.length > 1) {
73 | this.use(lunr.multiLanguage.apply(null, lang)); // spread operator not supported in all browsers: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility
74 | }
75 | this.field('title');
76 | this.field('text');
77 | this.ref('location');
78 |
79 | for (var i=0; i < data.docs.length; i++) {
80 | var doc = data.docs[i];
81 | this.add(doc);
82 | documents[doc.location] = doc;
83 | }
84 | });
85 | console.log('Lunr index built, search ready');
86 | }
87 | allowSearch = true;
88 | postMessage({config: data.config});
89 | postMessage({allowSearch: allowSearch});
90 | }
91 |
92 | function init () {
93 | var oReq = new XMLHttpRequest();
94 | oReq.addEventListener("load", onJSONLoaded);
95 | var index_path = base_path + '/search_index.json';
96 | if( 'function' === typeof importScripts ){
97 | index_path = 'search_index.json';
98 | }
99 | oReq.open("GET", index_path);
100 | oReq.send();
101 | }
102 |
103 | function search (query) {
104 | if (!allowSearch) {
105 | console.error('Assets for search still loading');
106 | return;
107 | }
108 |
109 | var resultDocuments = [];
110 | var results = index.search(query);
111 | for (var i=0; i < results.length; i++){
112 | var result = results[i];
113 | doc = documents[result.ref];
114 | doc.summary = doc.text.substring(0, 200);
115 | resultDocuments.push(doc);
116 | }
117 | return resultDocuments;
118 | }
119 |
120 | if( 'function' === typeof importScripts ) {
121 | onmessage = function (e) {
122 | if (e.data.init) {
123 | init();
124 | } else if (e.data.query) {
125 | postMessage({ results: search(e.data.query) });
126 | } else {
127 | console.error("Worker - Unrecognized message: " + e);
128 | }
129 | };
130 | }
131 |
--------------------------------------------------------------------------------
/docs/sitemap.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | None
4 | 2020-11-14
5 | daily
6 |
7 | None
8 | 2020-11-14
9 | daily
10 |
11 | None
12 | 2020-11-14
13 | daily
14 |
15 | None
16 | 2020-11-14
17 | daily
18 |
19 | None
20 | 2020-11-14
21 | daily
22 |
23 | None
24 | 2020-11-14
25 | daily
26 |
27 | None
28 | 2020-11-14
29 | daily
30 |
31 | None
32 | 2020-11-14
33 | daily
34 |
35 | None
36 | 2020-11-14
37 | daily
38 |
39 |
--------------------------------------------------------------------------------
/docs/sitemap.xml.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/sitemap.xml.gz
--------------------------------------------------------------------------------
/docs/theme/404.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block content %}
4 |
5 |
6 |
7 |
404
8 |
Page not found
9 |
10 |
11 |
12 | {% endblock %}
13 |
--------------------------------------------------------------------------------
/docs/theme/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/theme/android-chrome-192x192.png
--------------------------------------------------------------------------------
/docs/theme/android-chrome-256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/theme/android-chrome-256x256.png
--------------------------------------------------------------------------------
/docs/theme/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/theme/apple-touch-icon.png
--------------------------------------------------------------------------------
/docs/theme/base.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {%- block site_meta %}
5 |
6 |
7 |
8 | {% if page and page.is_homepage %}
9 | {% endif %}
10 | {% if config.site_author %}
11 | {% endif %}
12 | {% if page and page.canonical_url %}
13 | {% endif %}
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | {%- endblock %}
22 |
23 | {%- block htmltitle %}
24 | {% if page and page.title and not page.is_homepage %}{{ page.title }} - {% endif %}{{ config.site_name }}
25 | {%- endblock %}
26 |
27 | {%- block styles %}
28 |
29 |
30 | {%- for path in extra_css %}
31 |
32 | {%- endfor %}
33 | {%- endblock %}
34 |
35 | {%- block libs %}
36 |
37 |
38 |
39 |
40 |
41 | {%- endblock %}
42 | {%- block scripts %}
43 |
44 | {%- for path in extra_javascript %}
45 | {% if 'search' in path %}
46 | {% else %}
47 |
48 | {% endif %}
49 | {%- endfor %}
50 | {%- endblock %}
51 |
52 | {%- block extrahead %} {% endblock %}
53 |
54 |
55 |
56 | {% include "nav.html" %}
57 |
58 |
Important!
59 | Please read this
blog post .
60 | The Tempus Dominus projects are getting rolled back into the
orginal repo . TD Bootsrap 3/4 are no longer supported.
61 |
62 |
63 | {% if not page.is_homepage %}
64 |
65 |
66 | {%- block content %}
67 |
68 |
69 |
{{page.title}}
70 | {% if page and page.meta.lead %}
71 |
72 | {{page.meta.lead[0]}}
73 |
74 | {% endif %}
75 | {% include "content.html" %}
76 |
77 | {%- endblock %}
78 |
79 |
80 | {% else %}
81 | {% include "content.html" %}
82 | {% endif %}
83 |
84 |
104 |
105 |
106 |
--------------------------------------------------------------------------------
/docs/theme/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #2b5797
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/theme/content.html:
--------------------------------------------------------------------------------
1 | {% if page.meta.source %}
2 |
3 | {% for filename in page.meta.source %}
4 | {{ filename }}
5 | {% endfor %}
6 |
7 | {% endif %}
8 | {{ page.content }}
--------------------------------------------------------------------------------
/docs/theme/css/tempusdominus-bootstrap.css:
--------------------------------------------------------------------------------
1 | /*@preserve
2 | * Tempus Dominus Bootstrap4 v5.1.4 (https://tempusdominus.github.io/bootstrap-4/)
3 | * Copyright 2016-2020 Jonathan Peterson
4 | * Licensed under MIT (https://github.com/tempusdominus/bootstrap-3/blob/master/LICENSE)
5 | */
6 |
7 | .sr-only, .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after, .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after, .bootstrap-datetimepicker-widget .btn[data-action="today"]::after, .bootstrap-datetimepicker-widget .picker-switch::after, .bootstrap-datetimepicker-widget table th.prev::after, .bootstrap-datetimepicker-widget table th.next::after {
8 | position: absolute;
9 | width: 1px;
10 | height: 1px;
11 | margin: -1px;
12 | padding: 0;
13 | overflow: hidden;
14 | clip: rect(0, 0, 0, 0);
15 | border: 0; }
16 |
17 | .bootstrap-datetimepicker-widget {
18 | list-style: none; }
19 | .bootstrap-datetimepicker-widget.dropdown-menu {
20 | display: block;
21 | margin: 2px 0;
22 | padding: 4px;
23 | width: 14rem; }
24 | @media (min-width: 576px) {
25 | .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
26 | width: 38em; } }
27 | @media (min-width: 768px) {
28 | .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
29 | width: 38em; } }
30 | @media (min-width: 992px) {
31 | .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
32 | width: 38em; } }
33 | .bootstrap-datetimepicker-widget.dropdown-menu:before, .bootstrap-datetimepicker-widget.dropdown-menu:after {
34 | content: '';
35 | display: inline-block;
36 | position: absolute; }
37 | .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before {
38 | border-left: 7px solid transparent;
39 | border-right: 7px solid transparent;
40 | border-bottom: 7px solid #ccc;
41 | border-bottom-color: rgba(0, 0, 0, 0.2);
42 | top: -7px;
43 | left: 7px; }
44 | .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after {
45 | border-left: 6px solid transparent;
46 | border-right: 6px solid transparent;
47 | border-bottom: 6px solid white;
48 | top: -6px;
49 | left: 8px; }
50 | .bootstrap-datetimepicker-widget.dropdown-menu.top:before {
51 | border-left: 7px solid transparent;
52 | border-right: 7px solid transparent;
53 | border-top: 7px solid #ccc;
54 | border-top-color: rgba(0, 0, 0, 0.2);
55 | bottom: -7px;
56 | left: 6px; }
57 | .bootstrap-datetimepicker-widget.dropdown-menu.top:after {
58 | border-left: 6px solid transparent;
59 | border-right: 6px solid transparent;
60 | border-top: 6px solid white;
61 | bottom: -6px;
62 | left: 7px; }
63 | .bootstrap-datetimepicker-widget.dropdown-menu.float-right:before {
64 | left: auto;
65 | right: 6px; }
66 | .bootstrap-datetimepicker-widget.dropdown-menu.float-right:after {
67 | left: auto;
68 | right: 7px; }
69 | .bootstrap-datetimepicker-widget.dropdown-menu.wider {
70 | width: 16rem; }
71 | .bootstrap-datetimepicker-widget .list-unstyled {
72 | margin: 0; }
73 | .bootstrap-datetimepicker-widget a[data-action] {
74 | padding: 6px 0; }
75 | .bootstrap-datetimepicker-widget a[data-action]:active {
76 | box-shadow: none; }
77 | .bootstrap-datetimepicker-widget .timepicker-hour, .bootstrap-datetimepicker-widget .timepicker-minute, .bootstrap-datetimepicker-widget .timepicker-second {
78 | width: 54px;
79 | font-weight: bold;
80 | font-size: 1.2em;
81 | margin: 0; }
82 | .bootstrap-datetimepicker-widget button[data-action] {
83 | padding: 6px; }
84 | .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after {
85 | content: "Increment Hours"; }
86 | .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after {
87 | content: "Increment Minutes"; }
88 | .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after {
89 | content: "Decrement Hours"; }
90 | .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after {
91 | content: "Decrement Minutes"; }
92 | .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after {
93 | content: "Show Hours"; }
94 | .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after {
95 | content: "Show Minutes"; }
96 | .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after {
97 | content: "Toggle AM/PM"; }
98 | .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after {
99 | content: "Clear the picker"; }
100 | .bootstrap-datetimepicker-widget .btn[data-action="today"]::after {
101 | content: "Set the date to today"; }
102 | .bootstrap-datetimepicker-widget .picker-switch {
103 | text-align: center; }
104 | .bootstrap-datetimepicker-widget .picker-switch::after {
105 | content: "Toggle Date and Time Screens"; }
106 | .bootstrap-datetimepicker-widget .picker-switch td {
107 | padding: 0;
108 | margin: 0;
109 | height: auto;
110 | width: auto;
111 | line-height: inherit; }
112 | .bootstrap-datetimepicker-widget .picker-switch td span {
113 | line-height: 2.5;
114 | height: 2.5em;
115 | width: 100%; }
116 | .bootstrap-datetimepicker-widget table {
117 | width: 100%;
118 | margin: 0; }
119 | .bootstrap-datetimepicker-widget table td,
120 | .bootstrap-datetimepicker-widget table th {
121 | text-align: center;
122 | border-radius: 0.25rem; }
123 | .bootstrap-datetimepicker-widget table th {
124 | height: 20px;
125 | line-height: 20px;
126 | width: 20px; }
127 | .bootstrap-datetimepicker-widget table th.picker-switch {
128 | width: 145px; }
129 | .bootstrap-datetimepicker-widget table th.disabled, .bootstrap-datetimepicker-widget table th.disabled:hover {
130 | background: none;
131 | color: #6c757d;
132 | cursor: not-allowed; }
133 | .bootstrap-datetimepicker-widget table th.prev::after {
134 | content: "Previous Month"; }
135 | .bootstrap-datetimepicker-widget table th.next::after {
136 | content: "Next Month"; }
137 | .bootstrap-datetimepicker-widget table thead tr:first-child th {
138 | cursor: pointer; }
139 | .bootstrap-datetimepicker-widget table thead tr:first-child th:hover {
140 | background: #e9ecef; }
141 | .bootstrap-datetimepicker-widget table td {
142 | height: 54px;
143 | line-height: 54px;
144 | width: 54px; }
145 | .bootstrap-datetimepicker-widget table td.cw {
146 | font-size: .8em;
147 | height: 20px;
148 | line-height: 20px;
149 | color: #6c757d; }
150 | .bootstrap-datetimepicker-widget table td.day {
151 | height: 20px;
152 | line-height: 20px;
153 | width: 20px; }
154 | .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 {
155 | background: #e9ecef;
156 | cursor: pointer; }
157 | .bootstrap-datetimepicker-widget table td.old, .bootstrap-datetimepicker-widget table td.new {
158 | color: #6c757d; }
159 | .bootstrap-datetimepicker-widget table td.today {
160 | position: relative; }
161 | .bootstrap-datetimepicker-widget table td.today:before {
162 | content: '';
163 | display: inline-block;
164 | border: solid transparent;
165 | border-width: 0 0 7px 7px;
166 | border-bottom-color: #007bff;
167 | border-top-color: rgba(0, 0, 0, 0.2);
168 | position: absolute;
169 | bottom: 4px;
170 | right: 4px; }
171 | .bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover {
172 | background-color: #007bff;
173 | color: #fff;
174 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
175 | .bootstrap-datetimepicker-widget table td.active.today:before {
176 | border-bottom-color: #fff; }
177 | .bootstrap-datetimepicker-widget table td.disabled, .bootstrap-datetimepicker-widget table td.disabled:hover {
178 | background: none;
179 | color: #6c757d;
180 | cursor: not-allowed; }
181 | .bootstrap-datetimepicker-widget table td span {
182 | display: inline-block;
183 | width: 54px;
184 | height: 54px;
185 | line-height: 54px;
186 | margin: 2px 1.5px;
187 | cursor: pointer;
188 | border-radius: 0.25rem; }
189 | .bootstrap-datetimepicker-widget table td span:hover {
190 | background: #e9ecef; }
191 | .bootstrap-datetimepicker-widget table td span.active {
192 | background-color: #007bff;
193 | color: #fff;
194 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
195 | .bootstrap-datetimepicker-widget table td span.old {
196 | color: #6c757d; }
197 | .bootstrap-datetimepicker-widget table td span.disabled, .bootstrap-datetimepicker-widget table td span.disabled:hover {
198 | background: none;
199 | color: #6c757d;
200 | cursor: not-allowed; }
201 | .bootstrap-datetimepicker-widget.usetwentyfour td.hour {
202 | height: 27px;
203 | line-height: 27px; }
204 |
205 | .input-group [data-toggle="datetimepicker"] {
206 | cursor: pointer; }
207 |
--------------------------------------------------------------------------------
/docs/theme/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/theme/favicon-16x16.png
--------------------------------------------------------------------------------
/docs/theme/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/theme/favicon-32x32.png
--------------------------------------------------------------------------------
/docs/theme/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/theme/favicon.ico
--------------------------------------------------------------------------------
/docs/theme/js/base.js:
--------------------------------------------------------------------------------
1 | function getSearchTerm()
2 | {
3 | var sPageURL = window.location.search.substring(1);
4 | var sURLVariables = sPageURL.split('&');
5 | for (var i = 0; i < sURLVariables.length; i++)
6 | {
7 | var sParameterName = sURLVariables[i].split('=');
8 | if (sParameterName[0] == 'q')
9 | {
10 | return sParameterName[1];
11 | }
12 | }
13 | }
14 |
15 | $(function() {
16 |
17 | var search_term = getSearchTerm(),
18 | $search_modal = $('#mkdocs_search_modal');
19 |
20 | if(search_term){
21 | $search_modal.modal();
22 | }
23 |
24 | // make sure search input gets autofocus everytime modal opens.
25 | $search_modal.on('shown.bs.modal', function () {
26 | $search_modal.find('#mkdocs-search-query').focus();
27 | });
28 |
29 | // Highlight.js
30 | $('pre code').each(function (i, block) {
31 | hljs.highlightBlock(block);
32 | });
33 | $('table').addClass('table table-striped table-hover');
34 |
35 | // Improve the scrollspy behaviour when users click on a TOC item.
36 | $(".bs-sidenav a").on("click", function() {
37 | var clicked = this;
38 | setTimeout(function() {
39 | var active = $('.nav li.active a');
40 | active = active[active.length - 1];
41 | if (clicked !== active) {
42 | $(active).parent().removeClass("active");
43 | $(clicked).parent().addClass("active");
44 | }
45 | }, 50);
46 | });
47 |
48 | $('body').scrollspy({
49 | target: '.bs-sidebar',
50 | });
51 |
52 | /* Toggle the `clicky` class on the body when clicking links to let us
53 | retrigger CSS animations. See ../css/base.css for more details. */
54 | $('a').click(function (e) {
55 | $('body').toggleClass('clicky');
56 | });
57 |
58 | /* Prevent disabled links from causing a page reload */
59 | $("li.disabled a").click(function () {
60 | event.preventDefault();
61 | });
62 | });
--------------------------------------------------------------------------------
/docs/theme/main.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
--------------------------------------------------------------------------------
/docs/theme/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "",
3 | "icons": [
4 | {
5 | "src": "/android-chrome-192x192.png",
6 | "sizes": "192x192",
7 | "type": "image/png"
8 | },
9 | {
10 | "src": "/android-chrome-256x256.png",
11 | "sizes": "256x256",
12 | "type": "image/png"
13 | }
14 | ],
15 | "theme_color": "#ffffff",
16 | "background_color": "#ffffff",
17 | "display": "standalone"
18 | }
--------------------------------------------------------------------------------
/docs/theme/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/docs/theme/mstile-150x150.png
--------------------------------------------------------------------------------
/docs/theme/nav.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
24 |
25 |
32 |
--------------------------------------------------------------------------------
/docs/theme/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 | Created by potrace 1.11, written by Peter Selinger 2001-2013
9 |
10 |
12 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/docs/theme/search-modal.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 | From here you can search these documents. Enter
11 | your search terms below.
12 |
13 |
18 |
19 |
20 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/docs/theme/toc.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "parserOptions": {
3 | "ecmaVersion": 6,
4 | "sourceType": "module"
5 | },
6 | "env": {
7 | "browser": true,
8 | "jquery": true,
9 | "node": true
10 | },
11 | "globals": {
12 | "define": false,
13 | "moment": false,
14 | "jasmine": false,
15 | "describe": false,
16 | "xdescribe": false,
17 | "expect": false,
18 | "it": false,
19 | "xit": false,
20 | "spyOn": false,
21 | "beforeEach": false,
22 | "afterEach": false
23 | },
24 | "rules": {
25 | "no-cond-assign": 0,
26 | "curly": [
27 | 2,
28 | "all"
29 | ],
30 | "no-debugger": 0,
31 | "eqeqeq": 2,
32 | "no-bitwise": 2,
33 | "no-eq-null": 2,
34 | "no-eval": 0,
35 | "guard-for-in": 2,
36 | "wrap-iife": 2,
37 | "linebreak-style": 0,
38 | "new-cap": 2,
39 | "no-caller": 2,
40 | "no-empty": [
41 | 2,
42 | {
43 | "allowEmptyCatch": true
44 | }
45 | ],
46 | "no-new": 0,
47 | "no-plusplus": 0,
48 | "no-undef": 2,
49 | "dot-notation": 0,
50 | "strict": [
51 | 2,
52 | "function"
53 | ],
54 | "no-unused-vars": 2,
55 | "camelcase": [
56 | 2,
57 | {
58 | "properties": "always"
59 | }
60 | ],
61 | "quotes": [
62 | 2,
63 | "single"
64 | ],
65 | "keyword-spacing": [
66 | 2,
67 | {}
68 | ],
69 | "space-before-blocks": [
70 | 2,
71 | "always"
72 | ],
73 | "space-before-function-paren": [
74 | 2,
75 | {
76 | "anonymous": "ignore",
77 | "named": "never"
78 | }
79 | ],
80 | "one-var": [
81 | 2,
82 | "always"
83 | ],
84 | "padded-blocks": [
85 | 2,
86 | "never"
87 | ],
88 | "array-bracket-spacing": [
89 | 2,
90 | "never",
91 | {}
92 | ],
93 | "space-in-parens": [
94 | 2,
95 | "never"
96 | ],
97 | "comma-style": [
98 | 2,
99 | "last"
100 | ],
101 | "space-unary-ops": [
102 | 2,
103 | {
104 | "words": false,
105 | "nonwords": false
106 | }
107 | ],
108 | "space-infix-ops": 2,
109 | "no-with": 2,
110 | "no-multi-str": 2,
111 | "indent": "off",
112 | "no-trailing-spaces": 2,
113 | "comma-dangle": [
114 | 2,
115 | "never"
116 | ],
117 | "eol-last": 2
118 | }
119 | }
--------------------------------------------------------------------------------
/mkdocs.yml:
--------------------------------------------------------------------------------
1 | site_name: Tempus Dominus - Bootstrap 4
2 | repo_url: https://github.com/tempusdominus/bootstrap-4-datetimepicker
3 | edit_uri: edit/master/src/docs/
4 | extra_javascript: ['theme\js\base.js','//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/highlight.min.js','theme\js\tempusdominus-bootstrap-4.js']
5 | extra_css: ['theme\css\base.css','//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/styles/github.min.css','theme\css\tempusdominus-bootstrap-4.css']
6 | docs_dir: src/docs
7 | site_dir: docs
8 | theme:
9 | name: null
10 | custom_dir: src/docs/theme
11 | nav:
12 | - Tempus Dominus Bootstrap 4: 'index.md'
13 | - Usage: 'Usage.md'
14 | - Installing: 'Installing.md'
15 | - Functions: 'Functions.md'
16 | - Options: 'Options.md'
17 | - Events: 'Events.md'
18 | - Dev Guide: 'ContributorsGuide.md'
19 | - Extras: 'Extras.md'
20 | - FAQs: 'FAQ.md'
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "license": "MIT",
3 | "main": "build/js/tempusdominus-bootstrap-4.js",
4 | "name": "tempusdominus-bootstrap-4",
5 | "author": "Jonathan Peterson",
6 | "contributors": [
7 | "Anton Bagdatyev (Tonix)"
8 | ],
9 | "bugs": {
10 | "url": "https://github.com/tempusdominus/bootstrap-4/issues"
11 | },
12 | "dependencies": {
13 | "bootstrap": "^4.6.1",
14 | "jquery": "^3.6.0",
15 | "moment": "^2.29.2",
16 | "moment-timezone": "^0.5.34",
17 | "popper.js": "^1.16.1"
18 | },
19 | "peerDependencies": {
20 | "bootstrap": ">=4.5.2",
21 | "jquery": "^3.5.1",
22 | "popper.js": "^1.16.1",
23 | "moment": "^2.29.0",
24 | "moment-timezone": "^0.5.31",
25 | "tempusdominus-core": "5.19.3"
26 | },
27 | "scripts": {
28 | "change-version": "node grunt/change-version.js",
29 | "clean-css": "cleancss --skip-advanced --source-map --output dist/css/bootstrap.min.css dist/css/bootstrap.css && cleancss --skip-advanced --source-map --output dist/css/bootstrap-grid.min.css dist/css/bootstrap-grid.css && cleancss --skip-advanced --source-map --output dist/css/bootstrap-reboot.min.css dist/css/bootstrap-reboot.css",
30 | "clean-css-docs": "cleancss --skip-advanced --source-map --output docs/assets/css/docs.min.css docs/assets/css/docs.min.css",
31 | "eslint": "eslint --ignore-path .eslintignore js && eslint --config js/tests/.eslintrc.json --env node grunt Gruntfile.js && eslint --config js/tests/.eslintrc.json docs/assets/js/src docs/assets/js/ie-emulation-modes-warning.js docs/assets/js/ie10-viewport-bug-workaround.js",
32 | "htmlhint": "htmlhint --config docs/.htmlhintrc _gh_pages/",
33 | "postcss": "postcss --config grunt/postcss.js --replace dist/css/*.css",
34 | "postcss-docs": "postcss --config grunt/postcss.js --no-map --replace docs/assets/css/docs.min.css && postcss --config grunt/postcss.js --no-map --replace docs/examples/**/*.css",
35 | "scss-lint": "bundle exec scss-lint --config scss/.scss-lint.yml --exclude scss/_normalize.scss scss/*.scss",
36 | "scss-lint-docs": "bundle exec scss-lint --config scss/.scss-lint.yml --exclude docs/assets/scss/docs.scss docs/assets/scss/*.scss",
37 | "uglify": "uglifyjs --compress warnings=false --mangle --output build/js/tempusdominus-bootstrap-3.min.js build/js/tempusdominus-bootstrap-3.js",
38 | "uglify-docs": "uglifyjs --compress warnings=false --mangle --comments '/^!/' --output docs/assets/js/docs.min.js docs/assets/js/vendor/*.js docs/assets/js/src/application.js",
39 | "update-shrinkwrap": "npm shrinkwrap --dev && shx mv ./npm-shrinkwrap.json ./grunt/npm-shrinkwrap.json",
40 | "test": "npm run eslint && grunt test",
41 | "watch": "./node_modules/.bin/onchange './src/js/**' './src/sass/**' -- npm run build",
42 | "build": "grunt build:travis",
43 | "build-all": "npm run build",
44 | "git-add-cm": "git add . && git commit -am",
45 | "publish-patch": "npm version patch && npm run build && ((npm run git-add-cm -- \"Next patch version\" 2>/dev/null) || echo) && npm publish && git push && git push --tags",
46 | "publish-minor": "npm version minor && npm run build && ((npm run git-add-cm -- \"Next minor version\" 2>/dev/null) || echo) && npm publish && git push && git push --tags",
47 | "publish-major": "npm version major && npm run build && ((npm run git-add-cm -- \"Next major version\" 2>/dev/null) || echo) && npm publish && git push && git push --tags"
48 | },
49 | "description": "A date/time picker component designed to work with Bootstrap 4 and Momentjs.",
50 | "devDependencies": {
51 | "@babel/core": "^7.17.9",
52 | "@babel/preset-env": "^7.16.11",
53 | "autoprefixer": "^9.8.8",
54 | "babel-plugin-transform-es2015-modules-strip": "^0.1.2",
55 | "grunt": "^1.5.0",
56 | "grunt-babel": "^8.0.0",
57 | "grunt-contrib-concat": "^1.0.1",
58 | "grunt-contrib-cssmin": "^3.0.0",
59 | "grunt-contrib-uglify": "^4.0.1",
60 | "grunt-contrib-watch": "^1.1.0",
61 | "grunt-dart-sass": "^1.1.3",
62 | "grunt-eslint": "^22.0.0",
63 | "grunt-mkdocs": "^1.0.1",
64 | "grunt-postcss": "^0.9.0",
65 | "grunt-stamp": "^0.3.0",
66 | "grunt-string-replace": "^1.3.1",
67 | "load-grunt-tasks": "^5.1.0",
68 | "moment-timezone": "^0.5.34",
69 | "onchange": "^7.1.0",
70 | "tempusdominus": "^5.16.0",
71 | "uglify-js": "^3.15.4"
72 | },
73 | "homepage": "https://tempusdominus.github.io/bootstrap-4/",
74 | "keywords": [
75 | "bootstrap",
76 | "datepicker",
77 | "datetimepicker",
78 | "timepicker",
79 | "moment"
80 | ],
81 | "repository": {
82 | "type": "git",
83 | "url": "https://github.com/tempusdominus/bootstrap-4.git"
84 | },
85 | "version": "5.39.2",
86 | "files": [
87 | "build",
88 | "src/js/**/*.js",
89 | "src/sass/**/*.scss",
90 | "Gruntfile.js"
91 | ],
92 | "browserslist": [
93 | "> .05%"
94 | ]
95 | }
96 |
--------------------------------------------------------------------------------
/src/docs/ContributorsGuide.md:
--------------------------------------------------------------------------------
1 | This guide is aimed to contributors wishing to understand the internals of the code in order to change/evolve the component.
2 |
3 | **Note:** this guide refers to **version 5** which is currently in alpha and will be updated as we progress
4 |
5 | ## Introduction
6 | 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 date/time will be displayed in the input field.
7 | The component uses on `jQuery`, `moment.js` libraries.
8 |
9 | ## Code
10 | ### Private variables
11 |
12 | * `element` - Holds the DOM element this instance is attached to
13 |
14 | * `options` - Holds an object with the currently 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.
15 |
16 | * `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
17 |
18 | * `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
19 |
20 | * `unset` - A `boolean` variable that holds whether 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.
21 |
22 | * `input` - Hold the DOM input element this instance is attached to
23 |
24 | * `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
25 |
26 | * `widget` - Holds a reference to the DOM element containing the widget or `false` if the widget is hidden
27 |
28 | * `use24hours` - Holds whether the component uses 24 hours format or not. This is initialized on the `format()` function
29 |
30 | * `minViewModeNumber` - Holds the Numeric equivalent of the options.minViewMode parameter
31 |
32 | * `format` - Holds the current format string that is used for formatting 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
33 |
34 | * `currentViewMode` - Hold the state of the current viewMode for the DatePicker subcomponent
35 |
36 | * `datePickerModes` - An array of objects with configuration parameters for the different views of the DatePicker subcomponent
37 |
38 | * `viewModes` - An array of strings containing all the possible strings that `options.viewMode` can take through `viewMode()` public api function
39 |
40 | * `directionModes` - An array of strings containing all the possible strings that `options.direction` can take through `direction()` public api function
41 |
42 | * `orientationModes` - An array of strings containing all the possible strings that `options.orientation` can take through `orientation()` public api function
43 |
44 | ### Private functions
45 |
46 |
47 | #### Events related
48 |
49 | * `notifyEvent(e)` - Use this function when you want to send en event to listener this could be used as a filter later
50 |
51 | * `stopEvent(e)` - Shortcut for stopping propagation of events
52 |
53 | * `keydown(e)` - Function to trap
54 |
55 | * `change(e)` - Listener function to track change events occurring on the `input` dom element the component is attached to
56 |
57 | * `attachDatePickerElementEvents()` - Attaches listeners to the existing DOM elements the component is attached to. Called upon construction of each datetimepicker instance
58 |
59 | * `detachDatePickerElementEvents()` - Detaches listeners from the DOM element the component is attached to. Called on `destroy()`
60 |
61 | * `attachDatePickerWidgetEvents()` - Attaches listeners on the components widget. Called on `show()`
62 |
63 | * `detachDatePickerWidgetEvents()` - Detaches listeners on the components widget. Called on `hide()`
64 |
65 | #### Model related
66 |
67 | * `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.
68 |
69 | * `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`
70 |
71 | #### Utilities
72 |
73 | * `indexGivenDates (givenDatesArray)` - Function that takes the array from `enabledDates()` and `disabledDates()` public functions and stores them as object keys to enable quick lookup
74 |
75 | * `isInEnableDates(date)` - Checks whether if the given moment object exists in the `options.enabledDates` object
76 |
77 | * `isInDisableDates(date)` - Checks whether if the given moment object exists in the `options.disabledDates` array
78 |
79 | * `dataToOptions()` - Parses `data-date-*` options set on the input dom element the component is attached to and returns an object with them
80 |
81 | * `isInFixed()` - Checks if the dom element or its parents has a fixed position css rule.
82 |
83 | * `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).
84 |
85 | * `init()` - Initializes the component. Called when the component instance is created
86 |
--------------------------------------------------------------------------------
/src/docs/Events.md:
--------------------------------------------------------------------------------
1 | ### hide.datetimepicker
2 |
3 | Fired when the widget is hidden.
4 |
5 | Parameters:
6 |
7 | ```
8 | e = {
9 | date //the currently set date. Type: moment object (clone)
10 | }
11 | ```
12 |
13 | Emitted from:
14 |
15 | * toggle()
16 | * hide()
17 | * disable()
18 |
19 | ----------------------
20 |
21 | ### show.datetimepicker
22 |
23 | Fired when the widget is shown.
24 |
25 | Parameters:
26 |
27 | No parameters are include, listen to `change.datetimepicker` instead
28 |
29 | Emitted from:
30 |
31 | * toggle()
32 | * show()
33 |
34 | ----------------------
35 |
36 | ### change.datetimepicker
37 |
38 | Fired when the date is changed, including when changed to a non-date (e.g. When keepInvalid=true).
39 |
40 | Parameters:
41 |
42 | ```
43 | e = {
44 | date, //date the picker changed to. Type: moment object (clone)
45 | oldDate //previous date. Type: moment object (clone) or false in the event of a null
46 | }
47 | ```
48 |
49 | Emitted from:
50 |
51 | * toggle() **Note**: Only fired when using `useCurrent`
52 | * show() **Note**: Only fired when using `useCurrent` or when or the date is changed to comply with date rules (min/max etc)
53 | * date(newDate)
54 | * minDate(minDate)
55 | * maxDate(maxDate)
56 | * daysOfWeekDisabled()
57 |
58 | ----------------------
59 |
60 | ### error.datetimepicker
61 |
62 | Fired when a selected date fails to pass validation.
63 |
64 | Parameters:
65 |
66 | ```
67 | e = {
68 | date //the invalid date. Type: moment object (clone)
69 | oldDate //previous date. Type: moment object (clone) or false in the event of a null
70 | }
71 | ```
72 |
73 | Emmited from:
74 |
75 | * minDate(minDate)
76 | * maxDate(maxDate)
77 | * daysOfWeekDisabled()
78 | * setValue() *private function*
79 |
80 | ----------------------
81 |
82 | ### update.datetimepicker
83 |
84 | Fired (in most cases) when the `viewDate` changes. E.g. Next and Previous buttons, selecting a year.
85 |
86 | Parameters:
87 |
88 | ```
89 | e = {
90 | change, //Change type as a momentjs format token. Type: string e.g. yyyy on year change
91 | viewDate //new viewDate. Type: moment object
92 | }
93 | ```
--------------------------------------------------------------------------------
/src/docs/Extras.md:
--------------------------------------------------------------------------------
1 | Guides for making the picker work better with rails, IE, etc. **Note:** I have no idea if these guides still apply for v5 or not.
2 |
3 | ## Rails 3
4 |
5 | by [dhulihan](https://github.com/dhulihan)
6 |
7 | You can easily override the default rails form helpers (`date_select` and `datetime_select`) with bootstrap-datetimepicker for a much nicer experience.
8 |
9 | ```rb
10 | # Add to config/initializers/form.rb or the end of app/helpers/application_helper.rb
11 | module ActionView
12 | module Helpers
13 | class FormBuilder
14 | def date_select(method, options = {}, html_options = {})
15 | existing_date = @object.send(method)
16 | formatted_date = existing_date.to_date.strftime("%F") if existing_date.present?
17 | @template.content_tag(:div, :class => "input-group") do
18 | text_field(method, :value => formatted_date, :class => "form-control datepicker", :"data-date-format" => "YYYY-MM-DD") +
19 | @template.content_tag(:span, @template.content_tag(:span, "", :class => "glyphicon glyphicon-calendar") ,:class => "input-group-addon")
20 | end
21 | end
22 |
23 | def datetime_select(method, options = {}, html_options = {})
24 | existing_time = @object.send(method)
25 | formatted_time = existing_time.to_time.strftime("%F %I:%M %p") if existing_time.present?
26 | @template.content_tag(:div, :class => "input-group") do
27 | text_field(method, :value => formatted_time, :class => "form-control datetimepicker", :"data-date-format" => "YYYY-MM-DD hh:mm A") +
28 | @template.content_tag(:span, @template.content_tag(:span, "", :class => "glyphicon glyphicon-calendar") ,:class => "input-group-addon")
29 | end
30 | end
31 | end
32 | end
33 | end
34 | ```
35 |
36 | The time format used here is ActiveRecord-friendly, which means it will be parsed correctly when passed in through `params` to your record.
37 |
38 | That's all there is to it! Now all of your forms that use `datetime_select` or `date_select` will be automatically updated:
39 |
40 | ```erb
41 | <% form_for @post do |f| %>
42 |
43 | Published At
44 | <%= f.datetime_select :published_at %>
45 |
46 | <% end %>
47 | ```
--------------------------------------------------------------------------------
/src/docs/FAQ.md:
--------------------------------------------------------------------------------
1 | # How do I disable the date or time element
2 | How do I format ...; How do I add seconds; etc.
3 |
4 | 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
5 |
6 | # How do I change the language/locale
7 |
8 | 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.
9 |
10 | # How do I change the styles? The picker closes.
11 |
12 | Set `debug:true` which will force the picker to stay open, even `onBlur`. You can hide the picker manually by calling `hide()`
13 |
14 | # How do I change the start of the week?
15 |
16 | 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/).
17 |
18 | # How I use the picker as birthday picker?
19 |
20 | Use the [`viewMode`](Options.md#viewmode) option to `'years'`
--------------------------------------------------------------------------------
/src/docs/Functions.md:
--------------------------------------------------------------------------------
1 |
2 | Note
3 | All functions are accessed via the data
attribute e.g. $('#datetimepicker').datetimepicker(FUNCTION)
4 |
5 |
6 | ### destroy
7 |
8 | Destroys the widget and removes all attached event listeners
9 |
10 | ----------------------
11 |
12 | ### toggle
13 |
14 | Shows or hides the widget
15 |
16 | #### Emits
17 |
18 | * `hide.datetimepicker` - if the widget is hidden after the toggle call
19 |
20 | * `show.datetimepicker` - if the widget is show after the toggle call
21 |
22 | * `change.datetimepicker` - if the widget is opened for the first time and the input element is empty and `options.useCurrent != false`
23 |
24 | ----------------------
25 |
26 | ### show
27 |
28 | Shows the widget
29 |
30 | #### Emits
31 |
32 | * `show.datetimepicker` - if the widget was hidden before that call
33 |
34 | * `change.datetimepicker` - 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
35 |
36 | ----------------------
37 |
38 | ### hide
39 |
40 | Hides the widget
41 |
42 | #### Emits
43 |
44 | * `hide.datetimepicker` - if the widget was visible before that call
45 |
46 | ----------------------
47 |
48 | ### disable
49 |
50 | 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.
51 |
52 | #### Emits
53 |
54 | * `hide.datetimepicker` - if the widget was visible before that call
55 |
56 | ----------------------
57 |
58 | ### enable
59 |
60 | Enables the input element, the component is attached to, by removing `disabled` attribute from it.
61 |
62 | ----------------------
63 |
64 | ### clear
65 |
66 | Clears the date picker by setting the value to `null`
67 |
68 | ----------------------
69 |
70 | ### viewDate
71 |
72 | #### viewDate
73 |
74 | Returns a `moment` variable with the currently set `options.viewDate` option.
75 |
76 | #### viewDate(viewDate)
77 |
78 | Takes a `string, moment or Date` value.
79 |
80 | This will change the `viewDate` without changing or setting the selected date.
--------------------------------------------------------------------------------
/src/docs/Installing.md:
--------------------------------------------------------------------------------
1 | # Minimal Requirements
2 |
3 | 1. jQuery
4 | 2. Moment.js
5 | 3. Locales: Moment's locale files are [here](https://github.com/moment/moment/tree/master/locale)
6 |
7 | # Installation Guides
8 | * [CDN](#cdn)
9 | * [Rails](#rails)
10 | * [Django](#django)
11 | * [Angular](#angular-wrapper)
12 | * [Manual](#manual)
13 |
14 | ## CDN
15 | ```html
16 |
17 |
18 |
19 |
20 | ```
21 |
22 | ## Package Managers
23 |
24 | ### Rails
25 |
26 | Rails 5.1 Support - [Bootstrap 4 Datetime Picker Rails](https://github.com/Bialogs/bootstrap4-datetime-picker-rails)
27 |
28 | 1. Add `gem 'bootstrap4-datetime-picker-rails'` to your `Gemfile`
29 | 2. Execute `bundle`
30 | 3. Add `//= require tempusdominus-bootstrap-4.js` to your `application.js`
31 | 4. Add `@import "tempusdominus-bootstrap-4.css"` to your `application.scss`
32 |
33 | ### Django
34 |
35 | Python package for Django: [Django Tempus Dominus](https://pypi.org/project/django-tempus-dominus/)
36 |
37 | 1. Install via pip: `pip install django-tempus-dominus`
38 | 2. Widgets are provided for Date, DateTime, and Time.
39 | 3. [Full examples are available with Django Forms, Widgets, and Templates](https://pypi.org/project/django-tempus-dominus/).
40 |
41 | ### Angular Wrapper
42 |
43 | Follow instructions at [ngx-tempusdominus-bootstrap](https://github.com/fetrarij/ngx-tempusdominus-bootstrap)
44 |
45 | ## Manual
46 |
47 | 1. Acquire [jQuery](https://jquery.com)
48 | 2. Acquire [Moment.js](https://github.com/moment/moment)
49 | 3. Acquire [Tempus Dominus - Bootstrap 4](https://github.com/tempusdominus/bootstrap-4)
50 | ```html
51 |
52 |
53 |
54 |
55 | ```
--------------------------------------------------------------------------------
/src/docs/img/calendarWeeks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/src/docs/img/calendarWeeks.png
--------------------------------------------------------------------------------
/src/docs/img/dpheader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/src/docs/img/dpheader.png
--------------------------------------------------------------------------------
/src/docs/img/sideBySide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/src/docs/img/sideBySide.png
--------------------------------------------------------------------------------
/src/docs/img/toolbarPlacement.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/src/docs/img/toolbarPlacement.png
--------------------------------------------------------------------------------
/src/docs/index.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Tempus Dominus
9 |
10 | Tempus Dominus is the successor to the very popular Eonasdan/bootstrap-datetimepicker.
11 | The plugin provide a robust date and time picker designed to integrate into your Bootstrap project.
12 |
13 |
17 |
18 | Currently v5.1.3
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
Get awesome Dashboard Templates
28 |
Looking for a template with the datepicker ready to go? Then get check out these templates from our partners.
29 |
30 |
31 |
32 |
Creative Tim
33 |
34 |
40 |
46 |
52 |
53 |
54 |
55 |
Flatlogic
56 |
57 |
63 |
69 |
75 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/src/docs/theme/404.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block content %}
4 |
5 |
6 |
7 |
404
8 |
Page not found
9 |
10 |
11 |
12 | {% endblock %}
13 |
--------------------------------------------------------------------------------
/src/docs/theme/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/src/docs/theme/android-chrome-192x192.png
--------------------------------------------------------------------------------
/src/docs/theme/android-chrome-256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/src/docs/theme/android-chrome-256x256.png
--------------------------------------------------------------------------------
/src/docs/theme/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/src/docs/theme/apple-touch-icon.png
--------------------------------------------------------------------------------
/src/docs/theme/base.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {%- block site_meta %}
5 |
6 |
7 |
8 | {% if page and page.is_homepage %}
9 | {% endif %}
10 | {% if config.site_author %}
11 | {% endif %}
12 | {% if page and page.canonical_url %}
13 | {% endif %}
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | {%- endblock %}
22 |
23 | {%- block htmltitle %}
24 | {% if page and page.title and not page.is_homepage %}{{ page.title }} - {% endif %}{{ config.site_name }}
25 | {%- endblock %}
26 |
27 | {%- block styles %}
28 |
29 |
30 | {%- for path in extra_css %}
31 |
32 | {%- endfor %}
33 | {%- endblock %}
34 |
35 | {%- block libs %}
36 |
37 |
38 |
39 |
40 |
41 | {%- endblock %}
42 | {%- block scripts %}
43 |
44 | {%- for path in extra_javascript %}
45 | {% if 'search' in path %}
46 | {% else %}
47 |
48 | {% endif %}
49 | {%- endfor %}
50 | {%- endblock %}
51 |
52 | {%- block extrahead %} {% endblock %}
53 |
54 |
55 |
56 | {% include "nav.html" %}
57 |
58 |
Important!
59 | Please read this
blog post .
60 | The Tempus Dominus projects are getting rolled back into the
orginal repo . TD Bootsrap 3/4 are no longer supported.
61 |
62 |
63 | {% if not page.is_homepage %}
64 |
65 |
66 | {%- block content %}
67 |
68 |
69 |
{{page.title}}
70 | {% if page and page.meta.lead %}
71 |
72 | {{page.meta.lead[0]}}
73 |
74 | {% endif %}
75 | {% include "content.html" %}
76 |
77 | {%- endblock %}
78 |
79 |
80 | {% else %}
81 | {% include "content.html" %}
82 | {% endif %}
83 |
84 |
104 |
105 |
106 |
--------------------------------------------------------------------------------
/src/docs/theme/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #2b5797
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/docs/theme/content.html:
--------------------------------------------------------------------------------
1 | {% if page.meta.source %}
2 |
3 | {% for filename in page.meta.source %}
4 | {{ filename }}
5 | {% endfor %}
6 |
7 | {% endif %}
8 | {{ page.content }}
--------------------------------------------------------------------------------
/src/docs/theme/css/tempusdominus-bootstrap.css:
--------------------------------------------------------------------------------
1 | /*@preserve
2 | * Tempus Dominus Bootstrap4 v5.1.4 (https://tempusdominus.github.io/bootstrap-4/)
3 | * Copyright 2016-2020 Jonathan Peterson
4 | * Licensed under MIT (https://github.com/tempusdominus/bootstrap-3/blob/master/LICENSE)
5 | */
6 |
7 | .sr-only, .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after, .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after, .bootstrap-datetimepicker-widget .btn[data-action="today"]::after, .bootstrap-datetimepicker-widget .picker-switch::after, .bootstrap-datetimepicker-widget table th.prev::after, .bootstrap-datetimepicker-widget table th.next::after {
8 | position: absolute;
9 | width: 1px;
10 | height: 1px;
11 | margin: -1px;
12 | padding: 0;
13 | overflow: hidden;
14 | clip: rect(0, 0, 0, 0);
15 | border: 0; }
16 |
17 | .bootstrap-datetimepicker-widget {
18 | list-style: none; }
19 | .bootstrap-datetimepicker-widget.dropdown-menu {
20 | display: block;
21 | margin: 2px 0;
22 | padding: 4px;
23 | width: 14rem; }
24 | @media (min-width: 576px) {
25 | .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
26 | width: 38em; } }
27 | @media (min-width: 768px) {
28 | .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
29 | width: 38em; } }
30 | @media (min-width: 992px) {
31 | .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
32 | width: 38em; } }
33 | .bootstrap-datetimepicker-widget.dropdown-menu:before, .bootstrap-datetimepicker-widget.dropdown-menu:after {
34 | content: '';
35 | display: inline-block;
36 | position: absolute; }
37 | .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before {
38 | border-left: 7px solid transparent;
39 | border-right: 7px solid transparent;
40 | border-bottom: 7px solid #ccc;
41 | border-bottom-color: rgba(0, 0, 0, 0.2);
42 | top: -7px;
43 | left: 7px; }
44 | .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after {
45 | border-left: 6px solid transparent;
46 | border-right: 6px solid transparent;
47 | border-bottom: 6px solid white;
48 | top: -6px;
49 | left: 8px; }
50 | .bootstrap-datetimepicker-widget.dropdown-menu.top:before {
51 | border-left: 7px solid transparent;
52 | border-right: 7px solid transparent;
53 | border-top: 7px solid #ccc;
54 | border-top-color: rgba(0, 0, 0, 0.2);
55 | bottom: -7px;
56 | left: 6px; }
57 | .bootstrap-datetimepicker-widget.dropdown-menu.top:after {
58 | border-left: 6px solid transparent;
59 | border-right: 6px solid transparent;
60 | border-top: 6px solid white;
61 | bottom: -6px;
62 | left: 7px; }
63 | .bootstrap-datetimepicker-widget.dropdown-menu.float-right:before {
64 | left: auto;
65 | right: 6px; }
66 | .bootstrap-datetimepicker-widget.dropdown-menu.float-right:after {
67 | left: auto;
68 | right: 7px; }
69 | .bootstrap-datetimepicker-widget.dropdown-menu.wider {
70 | width: 16rem; }
71 | .bootstrap-datetimepicker-widget .list-unstyled {
72 | margin: 0; }
73 | .bootstrap-datetimepicker-widget a[data-action] {
74 | padding: 6px 0; }
75 | .bootstrap-datetimepicker-widget a[data-action]:active {
76 | box-shadow: none; }
77 | .bootstrap-datetimepicker-widget .timepicker-hour, .bootstrap-datetimepicker-widget .timepicker-minute, .bootstrap-datetimepicker-widget .timepicker-second {
78 | width: 54px;
79 | font-weight: bold;
80 | font-size: 1.2em;
81 | margin: 0; }
82 | .bootstrap-datetimepicker-widget button[data-action] {
83 | padding: 6px; }
84 | .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after {
85 | content: "Increment Hours"; }
86 | .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after {
87 | content: "Increment Minutes"; }
88 | .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after {
89 | content: "Decrement Hours"; }
90 | .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after {
91 | content: "Decrement Minutes"; }
92 | .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after {
93 | content: "Show Hours"; }
94 | .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after {
95 | content: "Show Minutes"; }
96 | .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after {
97 | content: "Toggle AM/PM"; }
98 | .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after {
99 | content: "Clear the picker"; }
100 | .bootstrap-datetimepicker-widget .btn[data-action="today"]::after {
101 | content: "Set the date to today"; }
102 | .bootstrap-datetimepicker-widget .picker-switch {
103 | text-align: center; }
104 | .bootstrap-datetimepicker-widget .picker-switch::after {
105 | content: "Toggle Date and Time Screens"; }
106 | .bootstrap-datetimepicker-widget .picker-switch td {
107 | padding: 0;
108 | margin: 0;
109 | height: auto;
110 | width: auto;
111 | line-height: inherit; }
112 | .bootstrap-datetimepicker-widget .picker-switch td span {
113 | line-height: 2.5;
114 | height: 2.5em;
115 | width: 100%; }
116 | .bootstrap-datetimepicker-widget table {
117 | width: 100%;
118 | margin: 0; }
119 | .bootstrap-datetimepicker-widget table td,
120 | .bootstrap-datetimepicker-widget table th {
121 | text-align: center;
122 | border-radius: 0.25rem; }
123 | .bootstrap-datetimepicker-widget table th {
124 | height: 20px;
125 | line-height: 20px;
126 | width: 20px; }
127 | .bootstrap-datetimepicker-widget table th.picker-switch {
128 | width: 145px; }
129 | .bootstrap-datetimepicker-widget table th.disabled, .bootstrap-datetimepicker-widget table th.disabled:hover {
130 | background: none;
131 | color: #6c757d;
132 | cursor: not-allowed; }
133 | .bootstrap-datetimepicker-widget table th.prev::after {
134 | content: "Previous Month"; }
135 | .bootstrap-datetimepicker-widget table th.next::after {
136 | content: "Next Month"; }
137 | .bootstrap-datetimepicker-widget table thead tr:first-child th {
138 | cursor: pointer; }
139 | .bootstrap-datetimepicker-widget table thead tr:first-child th:hover {
140 | background: #e9ecef; }
141 | .bootstrap-datetimepicker-widget table td {
142 | height: 54px;
143 | line-height: 54px;
144 | width: 54px; }
145 | .bootstrap-datetimepicker-widget table td.cw {
146 | font-size: .8em;
147 | height: 20px;
148 | line-height: 20px;
149 | color: #6c757d; }
150 | .bootstrap-datetimepicker-widget table td.day {
151 | height: 20px;
152 | line-height: 20px;
153 | width: 20px; }
154 | .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 {
155 | background: #e9ecef;
156 | cursor: pointer; }
157 | .bootstrap-datetimepicker-widget table td.old, .bootstrap-datetimepicker-widget table td.new {
158 | color: #6c757d; }
159 | .bootstrap-datetimepicker-widget table td.today {
160 | position: relative; }
161 | .bootstrap-datetimepicker-widget table td.today:before {
162 | content: '';
163 | display: inline-block;
164 | border: solid transparent;
165 | border-width: 0 0 7px 7px;
166 | border-bottom-color: #007bff;
167 | border-top-color: rgba(0, 0, 0, 0.2);
168 | position: absolute;
169 | bottom: 4px;
170 | right: 4px; }
171 | .bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover {
172 | background-color: #007bff;
173 | color: #fff;
174 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
175 | .bootstrap-datetimepicker-widget table td.active.today:before {
176 | border-bottom-color: #fff; }
177 | .bootstrap-datetimepicker-widget table td.disabled, .bootstrap-datetimepicker-widget table td.disabled:hover {
178 | background: none;
179 | color: #6c757d;
180 | cursor: not-allowed; }
181 | .bootstrap-datetimepicker-widget table td span {
182 | display: inline-block;
183 | width: 54px;
184 | height: 54px;
185 | line-height: 54px;
186 | margin: 2px 1.5px;
187 | cursor: pointer;
188 | border-radius: 0.25rem; }
189 | .bootstrap-datetimepicker-widget table td span:hover {
190 | background: #e9ecef; }
191 | .bootstrap-datetimepicker-widget table td span.active {
192 | background-color: #007bff;
193 | color: #fff;
194 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
195 | .bootstrap-datetimepicker-widget table td span.old {
196 | color: #6c757d; }
197 | .bootstrap-datetimepicker-widget table td span.disabled, .bootstrap-datetimepicker-widget table td span.disabled:hover {
198 | background: none;
199 | color: #6c757d;
200 | cursor: not-allowed; }
201 | .bootstrap-datetimepicker-widget.usetwentyfour td.hour {
202 | height: 27px;
203 | line-height: 27px; }
204 |
205 | .input-group [data-toggle="datetimepicker"] {
206 | cursor: pointer; }
207 |
--------------------------------------------------------------------------------
/src/docs/theme/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/src/docs/theme/favicon-16x16.png
--------------------------------------------------------------------------------
/src/docs/theme/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/src/docs/theme/favicon-32x32.png
--------------------------------------------------------------------------------
/src/docs/theme/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/src/docs/theme/favicon.ico
--------------------------------------------------------------------------------
/src/docs/theme/js/base.js:
--------------------------------------------------------------------------------
1 | function getSearchTerm()
2 | {
3 | var sPageURL = window.location.search.substring(1);
4 | var sURLVariables = sPageURL.split('&');
5 | for (var i = 0; i < sURLVariables.length; i++)
6 | {
7 | var sParameterName = sURLVariables[i].split('=');
8 | if (sParameterName[0] == 'q')
9 | {
10 | return sParameterName[1];
11 | }
12 | }
13 | }
14 |
15 | $(function() {
16 |
17 | var search_term = getSearchTerm(),
18 | $search_modal = $('#mkdocs_search_modal');
19 |
20 | if(search_term){
21 | $search_modal.modal();
22 | }
23 |
24 | // make sure search input gets autofocus everytime modal opens.
25 | $search_modal.on('shown.bs.modal', function () {
26 | $search_modal.find('#mkdocs-search-query').focus();
27 | });
28 |
29 | // Highlight.js
30 | $('pre code').each(function (i, block) {
31 | hljs.highlightBlock(block);
32 | });
33 | $('table').addClass('table table-striped table-hover');
34 |
35 | // Improve the scrollspy behaviour when users click on a TOC item.
36 | $(".bs-sidenav a").on("click", function() {
37 | var clicked = this;
38 | setTimeout(function() {
39 | var active = $('.nav li.active a');
40 | active = active[active.length - 1];
41 | if (clicked !== active) {
42 | $(active).parent().removeClass("active");
43 | $(clicked).parent().addClass("active");
44 | }
45 | }, 50);
46 | });
47 |
48 | $('body').scrollspy({
49 | target: '.bs-sidebar',
50 | });
51 |
52 | /* Toggle the `clicky` class on the body when clicking links to let us
53 | retrigger CSS animations. See ../css/base.css for more details. */
54 | $('a').click(function (e) {
55 | $('body').toggleClass('clicky');
56 | });
57 |
58 | /* Prevent disabled links from causing a page reload */
59 | $("li.disabled a").click(function () {
60 | event.preventDefault();
61 | });
62 | });
--------------------------------------------------------------------------------
/src/docs/theme/main.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
--------------------------------------------------------------------------------
/src/docs/theme/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "",
3 | "icons": [
4 | {
5 | "src": "/android-chrome-192x192.png",
6 | "sizes": "192x192",
7 | "type": "image/png"
8 | },
9 | {
10 | "src": "/android-chrome-256x256.png",
11 | "sizes": "256x256",
12 | "type": "image/png"
13 | }
14 | ],
15 | "theme_color": "#ffffff",
16 | "background_color": "#ffffff",
17 | "display": "standalone"
18 | }
--------------------------------------------------------------------------------
/src/docs/theme/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tempusdominus/bootstrap-4/a5384ddddd65857efde2aff47a4a1e017fcf81ed/src/docs/theme/mstile-150x150.png
--------------------------------------------------------------------------------
/src/docs/theme/nav.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
24 |
25 |
32 |
--------------------------------------------------------------------------------
/src/docs/theme/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 | Created by potrace 1.11, written by Peter Selinger 2001-2013
9 |
10 |
12 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/docs/theme/search-modal.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 | From here you can search these documents. Enter
11 | your search terms below.
12 |
13 |
18 |
19 |
20 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/docs/theme/toc.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/src/sass/_tempusdominus-bootstrap-4.scss:
--------------------------------------------------------------------------------
1 | $bs-datetimepicker-timepicker-font-size: 1.2em !default;
2 | $bs-datetimepicker-active-bg: $blue !default;
3 | $bs-datetimepicker-active-color: $white !default;
4 | $bs-datetimepicker-border-radius: $border-radius !default;
5 | $bs-datetimepicker-btn-hover-bg: $gray-200 !default;
6 | $bs-datetimepicker-disabled-color: $gray-600 !default;
7 | $bs-datetimepicker-alternate-color: $gray-600 !default;
8 | $bs-datetimepicker-secondary-border-color: #ccc !default;
9 | $bs-datetimepicker-secondary-border-color-rgba: rgba(0, 0, 0, 0.2) !default;
10 | $bs-datetimepicker-primary-border-color: white !default;
11 | $bs-datetimepicker-text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25) !default;
12 | $bs-datetimepicker-buttons-color: #007bff;
13 | $bs-datetimepicker-buttons-color-dark: #0056b3;
14 |
15 | body.tempusdominus-bootstrap-datetimepicker-widget-day-click,
16 | body.tempusdominus-bootstrap-datetimepicker-widget-day-click * {
17 | cursor: pointer !important;
18 | }
19 |
20 | body.tempusdominus-bootstrap-datetimepicker-widget-day-click {
21 | position: relative !important;
22 | }
23 |
24 | .tempusdominus-bootstrap-datetimepicker-widget-day-click-glass-panel {
25 | position: absolute;
26 | z-index: 999999999999;
27 | top: 0;
28 | left: 0;
29 | right: 0;
30 | bottom: 0;
31 | cursor: pointer !important;
32 | }
33 |
34 | .bootstrap-datetimepicker-widget .datepicker-days {
35 | tbody td {
36 | cursor: pointer;
37 | }
38 | }
39 |
40 | .bootstrap-datetimepicker-widget {
41 | list-style: none;
42 |
43 | &.dropdown-menu {
44 | display: block;
45 | margin: 2px 0;
46 | padding: 4px;
47 | width: 14rem;
48 |
49 | &.tempusdominus-bootstrap-datetimepicker-widget-with-feather-icons {
50 | width: 16rem;
51 | }
52 |
53 | &.tempusdominus-bootstrap-datetimepicker-widget-with-calendar-weeks {
54 | width: 16rem;
55 |
56 | &.tempusdominus-bootstrap-datetimepicker-widget-with-feather-icons {
57 | width: 17rem;
58 | }
59 | }
60 |
61 | &.timepicker-sbs {
62 | @media (min-width: map-get($grid-breakpoints, 'sm')) {
63 | width: 38em;
64 | }
65 |
66 | @media (min-width: map-get($grid-breakpoints, 'md')) {
67 | width: 38em;
68 | }
69 |
70 | @media (min-width: map-get($grid-breakpoints, 'lg')) {
71 | width: 38em;
72 | }
73 | }
74 |
75 | &:before, &:after {
76 | content: '';
77 | display: inline-block;
78 | position: absolute;
79 | }
80 |
81 | &.bottom {
82 | &:before {
83 | border-left: 7px solid transparent;
84 | border-right: 7px solid transparent;
85 | border-bottom: 7px solid $bs-datetimepicker-secondary-border-color;
86 | border-bottom-color: $bs-datetimepicker-secondary-border-color-rgba;
87 | top: -7px;
88 | left: 7px;
89 | }
90 |
91 | &:after {
92 | border-left: 6px solid transparent;
93 | border-right: 6px solid transparent;
94 | border-bottom: 6px solid $bs-datetimepicker-primary-border-color;
95 | top: -6px;
96 | left: 8px;
97 | }
98 | }
99 |
100 | &.top {
101 | &:before {
102 | border-left: 7px solid transparent;
103 | border-right: 7px solid transparent;
104 | border-top: 7px solid $bs-datetimepicker-secondary-border-color;
105 | border-top-color: $bs-datetimepicker-secondary-border-color-rgba;
106 | bottom: -7px;
107 | left: 6px;
108 | }
109 |
110 | &:after {
111 | border-left: 6px solid transparent;
112 | border-right: 6px solid transparent;
113 | border-top: 6px solid $bs-datetimepicker-primary-border-color;
114 | bottom: -6px;
115 | left: 7px;
116 | }
117 | }
118 |
119 | &.float-right {
120 | &:before {
121 | left: auto;
122 | right: 6px;
123 | }
124 |
125 | &:after {
126 | left: auto;
127 | right: 7px;
128 | }
129 | }
130 |
131 | &.wider {
132 | width: 16rem;
133 | }
134 | }
135 |
136 | .list-unstyled {
137 | margin: 0;
138 | }
139 |
140 | a[data-action] {
141 | padding: 6px 0;
142 | }
143 |
144 | a[data-action]:active {
145 | box-shadow: none;
146 | }
147 |
148 | .timepicker-hour, .timepicker-minute, .timepicker-second {
149 | width: 54px;
150 | font-weight: bold;
151 | font-size: $bs-datetimepicker-timepicker-font-size;
152 | margin: 0;
153 | }
154 |
155 | button[data-action] {
156 | padding: 6px;
157 | }
158 |
159 | .btn[data-action="togglePeriod"] {
160 | text-align: center;
161 | font-family: Arial, sans-serif, -apple-system, system-ui, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
162 | width: 38px;
163 | height: 38px;
164 | }
165 |
166 | .btn[data-action="incrementHours"]::after {
167 | @extend .sr-only;
168 | content: "Increment Hours";
169 | }
170 |
171 | .btn[data-action="incrementMinutes"]::after {
172 | @extend .sr-only;
173 | content: "Increment Minutes";
174 | }
175 |
176 | .btn[data-action="decrementHours"]::after {
177 | @extend .sr-only;
178 | content: "Decrement Hours";
179 | }
180 |
181 | .btn[data-action="decrementMinutes"]::after {
182 | @extend .sr-only;
183 | content: "Decrement Minutes";
184 | }
185 |
186 | .btn[data-action="showHours"]::after {
187 | @extend .sr-only;
188 | content: "Show Hours";
189 | }
190 |
191 | .btn[data-action="showMinutes"]::after {
192 | @extend .sr-only;
193 | content: "Show Minutes";
194 | }
195 |
196 | .btn[data-action="togglePeriod"]::after {
197 | @extend .sr-only;
198 | content: "Toggle AM/PM";
199 | }
200 |
201 | .btn[data-action="clear"]::after {
202 | @extend .sr-only;
203 | content: "Clear the picker";
204 | }
205 |
206 | .btn[data-action="today"]::after {
207 | @extend .sr-only;
208 | content: "Set the date to today";
209 | }
210 |
211 | .picker-switch {
212 | text-align: center;
213 |
214 | &::after {
215 | @extend .sr-only;
216 | content: "Toggle Date and Time Screens";
217 | }
218 |
219 | td {
220 | padding: 0;
221 | margin: 0;
222 | height: auto;
223 | width: auto;
224 | line-height: inherit;
225 |
226 | span {
227 | line-height: 2.5;
228 | height: 2.5em;
229 | width: 100%;
230 | }
231 | }
232 |
233 | &.picker-switch-with-feathers-icons {
234 | td {
235 | span {
236 | line-height: 2.8;
237 | height: 2.8em;
238 | }
239 | }
240 | }
241 | }
242 |
243 | table {
244 | width: 100%;
245 | margin: 0;
246 |
247 |
248 | & td,
249 | & th {
250 | text-align: center;
251 | border-radius: $bs-datetimepicker-border-radius;
252 | }
253 |
254 | & th {
255 | height: 20px;
256 | line-height: 20px;
257 | width: 20px;
258 |
259 | &.picker-switch {
260 | width: 145px;
261 | }
262 |
263 | &.disabled,
264 | &.disabled:hover {
265 | background: none;
266 | color: $bs-datetimepicker-disabled-color;
267 | cursor: not-allowed;
268 | }
269 |
270 | &.prev::after {
271 | @extend .sr-only;
272 | content: "Previous Month";
273 | }
274 |
275 | &.next::after {
276 | @extend .sr-only;
277 | content: "Next Month";
278 | }
279 | }
280 |
281 | & thead tr:first-child th {
282 | cursor: pointer;
283 |
284 | &:hover {
285 | background: $bs-datetimepicker-btn-hover-bg;
286 | }
287 | }
288 |
289 | & td {
290 | height: 54px;
291 | line-height: 54px;
292 | width: 54px;
293 |
294 | &.cw {
295 | font-size: .8em;
296 | height: 20px;
297 | line-height: 20px;
298 | color: $bs-datetimepicker-alternate-color;
299 | cursor: default;
300 | }
301 |
302 | &.day {
303 | height: 20px;
304 | line-height: 20px;
305 | width: 20px;
306 | }
307 |
308 | &.day:hover,
309 | &.hour:hover,
310 | &.minute:hover,
311 | &.second:hover {
312 | background: $bs-datetimepicker-btn-hover-bg;
313 | cursor: pointer;
314 | }
315 |
316 | &.old,
317 | &.new {
318 | color: $bs-datetimepicker-alternate-color;
319 | }
320 |
321 | &.today {
322 | position: relative;
323 |
324 | &:before {
325 | content: '';
326 | display: inline-block;
327 | border: solid transparent;
328 | border-width: 0 0 7px 7px;
329 | border-bottom-color: $bs-datetimepicker-active-bg;
330 | border-top-color: $bs-datetimepicker-secondary-border-color-rgba;
331 | position: absolute;
332 | bottom: 4px;
333 | right: 4px;
334 | }
335 | }
336 |
337 | &.active,
338 | &.active:hover {
339 | background-color: $bs-datetimepicker-active-bg;
340 | color: $bs-datetimepicker-active-color;
341 | text-shadow: $bs-datetimepicker-text-shadow;
342 | }
343 |
344 | &.active.today:before {
345 | border-bottom-color: #fff;
346 | }
347 |
348 | &.disabled,
349 | &.disabled:hover {
350 | background: none;
351 | color: $bs-datetimepicker-disabled-color;
352 | cursor: not-allowed;
353 | }
354 |
355 | span {
356 | display: inline-block;
357 | width: 54px;
358 | height: 54px;
359 | line-height: 54px;
360 | margin-top: 2px;
361 | margin-bottom: 2px;
362 | cursor: pointer;
363 | border-radius: $bs-datetimepicker-border-radius;
364 |
365 | &:hover {
366 | background: $bs-datetimepicker-btn-hover-bg;
367 | }
368 |
369 | &.active {
370 | background-color: $bs-datetimepicker-active-bg;
371 | color: $bs-datetimepicker-active-color;
372 | text-shadow: $bs-datetimepicker-text-shadow;
373 | }
374 |
375 | &.old {
376 | color: $bs-datetimepicker-alternate-color;
377 | }
378 |
379 | &.disabled,
380 | &.disabled:hover {
381 | background: none;
382 | color: $bs-datetimepicker-disabled-color;
383 | cursor: not-allowed;
384 | }
385 | }
386 | }
387 | }
388 |
389 | &.usetwentyfour {
390 | td.hour {
391 | height: 27px;
392 | line-height: 27px;
393 | }
394 | }
395 |
396 | .timepicker .timepicker-picker a.btn {
397 | color: $bs-datetimepicker-buttons-color;
398 | color: var(--blue, #{$bs-datetimepicker-buttons-color});
399 | }
400 | .timepicker .timepicker-picker a.btn:hover {
401 | color: $bs-datetimepicker-buttons-color-dark;
402 | }
403 |
404 | &.bootstrap-datetimepicker-widget-readonly {
405 | table td.day, table td.hour, table td.minute, table td.second,
406 | table td [data-action="incrementHours"], table td [data-action="incrementMinutes"], table td [data-action="incrementSeconds"],
407 | table td [data-action="decrementHours"], table td [data-action="decrementMinutes"], table td [data-action="decrementSeconds"],
408 | table td [data-action="showHours"], table td [data-action="showMinutes"], table td [data-action="showSeconds"],
409 | table td [data-action="togglePeriod"] {
410 | pointer-events: none;
411 | cursor: default;
412 |
413 | &:hover {
414 | background: none;
415 | }
416 | }
417 | }
418 | }
419 |
420 | .input-group [data-toggle="datetimepicker"] {
421 | cursor: pointer;
422 | }
--------------------------------------------------------------------------------
/src/sass/tempusdominus-bootstrap-4-build.scss:
--------------------------------------------------------------------------------
1 | // Import bootstrap variables including default color palette and fonts
2 | @import "../../node_modules/bootstrap/scss/_functions.scss";
3 | @import "../../node_modules/bootstrap/scss/_variables.scss";
4 |
5 | .sr-only {
6 | position: absolute;
7 | width: 1px;
8 | height: 1px;
9 | margin: -1px;
10 | padding: 0;
11 | overflow: hidden;
12 | clip: rect(0,0,0,0);
13 | border: 0;
14 | }
15 |
16 | // Import datepicker component
17 | @import "_tempusdominus-bootstrap-4";
18 |
--------------------------------------------------------------------------------
/tasks/bump_version.js:
--------------------------------------------------------------------------------
1 | module.exports = function (grunt) {
2 | grunt.registerTask('bump_version', function (version) {
3 | if (!version || version.split('.').length !== 3) {
4 | grunt.fail.fatal('malformed version. Use\n\n grunt bump_version:1.2.3');
5 | }
6 |
7 | grunt.config('string-replace.package-json', {
8 | files: { 'package.json': 'package.json' },
9 | options: {
10 | replacements: [
11 | {
12 | pattern: /"version": .*/,
13 | replacement: '"version": "' + version + '",'
14 | }
15 | ]
16 | }
17 | });
18 |
19 | grunt.config('string-replace.package-json-lock', {
20 | files: { 'package-lock.json': 'package-lock.json' },
21 | options: {
22 | replacements: [
23 | {
24 | pattern: /"version": .*/,
25 | replacement: '"version": "' + version + '",'
26 | }
27 | ]
28 | }
29 | });
30 |
31 |
32 | grunt.config('string-replace.bower-json', {
33 | files: { 'bower.json': 'bower.json' },
34 | options: {
35 | replacements: [
36 | {
37 | pattern: /"version": .*/,
38 | replacement: '"version": "' + version + '",'
39 | }
40 | ]
41 | }
42 | });
43 |
44 | grunt.config('string-replace.component-json', {
45 | files: { 'component.json': 'component.json' },
46 | options: {
47 | replacements: [
48 | {
49 | pattern: /"version": .*/,
50 | replacement: '"version": "' + version + '",'
51 | }
52 | ]
53 | }
54 | });
55 |
56 | grunt.config('string-replace.composer-json', {
57 | files: { 'composer.json': 'composer.json' },
58 | options: {
59 | replacements: [
60 | {
61 | pattern: /"version": .*/,
62 | replacement: '"version": "' + version + '",'
63 | }
64 | ]
65 | }
66 | });
67 |
68 | grunt.task.run([
69 | 'string-replace:package-json',
70 | 'string-replace:bower-json',
71 | 'string-replace:component-json',
72 | 'string-replace:composer-json'
73 | ]);
74 | });
75 | };
76 |
--------------------------------------------------------------------------------