diff --git a/package.json b/package.json index 3a7ff119..902c5d8d 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "bootstrap-sass": "^3.3.6", "chart.js": "^2.7.0", "cross-env": "^5.1", - "eonasdan-bootstrap-datetimepicker": "^4.17", "es5-shim": "^4.5.9", + "flatpickr": "^4.5.0", "github-markdown-css": "^2.3.0", "gulp": "^3.9.1", "ionicons": "~2.0", diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js index 99f14562..9a3dec94 100644 --- a/resources/assets/js/app.js +++ b/resources/assets/js/app.js @@ -20,6 +20,11 @@ window.axios.defaults.headers.common = { 'X-Requested-With': 'XMLHttpRequest' }; +/** + * Flatpickr. + */ +const Flatpickr = require('flatpickr'); + ((win, doc) => { /** * Next, we will create a fresh Vue application instance and attach it to @@ -43,6 +48,13 @@ window.axios.defaults.headers.common = { } } }, + mounted () { + Flatpickr('.flatpickr'); + + Flatpickr('.flatpickr-time', { + enableTime: true + }); + }, components: { 'setup': require('./components/Setup'), 'dashboard': require('./components/dashboard/Dashboard'), diff --git a/resources/assets/js/cachet.js b/resources/assets/js/cachet.js index 2444940a..98c4fab4 100644 --- a/resources/assets/js/cachet.js +++ b/resources/assets/js/cachet.js @@ -133,52 +133,6 @@ $(function () { } }); - // Date picker. - $('input[rel=datepicker]').datetimepicker({ - format: "DD/MM/YYYY HH:mm", - minDate: new Date(), // Don't allow dates before today. - sideBySide: true, - icons: { - time: 'ion-clock', - date: 'ion-android-calendar', - up: 'ion-ios-arrow-up', - down: 'ion-ios-arrow-down', - previous: 'ion-ios-arrow-left', - next: 'ion-ios-arrow-right', - today: 'ion-android-home', - clear: 'ion-trash-a', - } - }); - - $('input[rel=datepicker-any]').datetimepicker({ - format: "DD/MM/YYYY HH:mm", - sideBySide: true, - icons: { - time: 'ion-clock', - date: 'ion-android-calendar', - up: 'ion-ios-arrow-up', - down: 'ion-ios-arrow-down', - previous: 'ion-ios-arrow-left', - next: 'ion-ios-arrow-right', - today: 'ion-android-home', - clear: 'ion-trash-a', - } - }); - - $('input[rel=datepicker-custom]').datetimepicker({ - sideBySide: true, - icons: { - time: 'ion-clock', - date: 'ion-android-calendar', - up: 'ion-ios-arrow-up', - down: 'ion-ios-arrow-down', - previous: 'ion-ios-arrow-left', - next: 'ion-ios-arrow-right', - today: 'ion-android-home', - clear: 'ion-trash-a', - } - }); - // Sortable models. var orderableLists = document.querySelectorAll('[data-orderable-list]'); diff --git a/resources/assets/sass/_vendors.scss b/resources/assets/sass/_vendors.scss index 43c6abd7..220f7a18 100644 --- a/resources/assets/sass/_vendors.scss +++ b/resources/assets/sass/_vendors.scss @@ -4,6 +4,7 @@ $ionicons-font-path: "../../../fonts" !default; @import "./node_modules/ionicons/scss/ionicons"; @import "modules/bootstrap"; +@import "plugins/flatpickr"; html { position: relative; diff --git a/resources/assets/sass/dashboard.scss b/resources/assets/sass/dashboard.scss index 4b98accf..32af8a24 100644 --- a/resources/assets/sass/dashboard.scss +++ b/resources/assets/sass/dashboard.scss @@ -19,6 +19,5 @@ @import "plugins/sweetalert"; @import "plugins/messenger"; @import "plugins/animate"; -@import "plugins/bootstrap-datetimepicker/bootstrap-datetimepicker"; @import "plugins/password-strength"; @import "plugins/sortable"; diff --git a/resources/assets/sass/plugins/_flatpickr.scss b/resources/assets/sass/plugins/_flatpickr.scss new file mode 100644 index 00000000..aab191fc --- /dev/null +++ b/resources/assets/sass/plugins/_flatpickr.scss @@ -0,0 +1,61 @@ +@import "./node_modules/flatpickr/dist/flatpickr"; + +.flatpickr-calendar { + width: auto; + min-width: 293.75px; + padding: rem-calc(10); + &.open { + z-index: 4 !important; + } + .flatpickr-month { + min-height: 30px; + } + .flatpickr-prev-month, + .flatpickr-current-month, + .flatpickr-next-month { + padding: 0; + display: flex !important; + justify-content: center; + align-items: center; + height: 100%; + } + .flatpickr-prev-month, + .flatpickr-next-month { + border-radius: 1rem; + padding: 0.5rem; + &:hover { + background-color: $cachet-gray-light; + svg { + color: rgba(0, 0, 0, 0.9); + fill: rgba(0, 0, 0, 0.9); + } + } + } + .flatpickr-current-month { + .cur-month { + margin-left: 1rem; + &:hover { + background: transparent; + } + } + } + .flatpickr-day { + line-height: 36px; + &:hover { + background-color: $cachet-gray-light; + border-color: $cachet-gray-light; + } + } + .numInputWrapper { + width: 4rem; + margin-left: 0.5rem; + .numInput { + padding: 0; + box-shadow: none; + } + } +} + +.flatpickr-time { + text-align: left; +} diff --git a/resources/assets/sass/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.scss b/resources/assets/sass/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.scss deleted file mode 100644 index 177df94b..00000000 --- a/resources/assets/sass/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.scss +++ /dev/null @@ -1,342 +0,0 @@ -// Import boostrap variables including default color palette and fonts -@import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_variables"; - -$bs-datetimepicker-timepicker-font-size: 1.2em !default; -$bs-datetimepicker-active-bg: $cachet-green !default; -$bs-datetimepicker-active-color: $btn-primary-color !default; -$bs-datetimepicker-border-radius: $border-radius-base !default; -$bs-datetimepicker-btn-hover-bg: $cachet-gray-light !default; -$bs-datetimepicker-disabled-color: $cachet-gray !default; -$bs-datetimepicker-alternate-color: $cachet-gray !default; -$bs-datetimepicker-secondary-border-color: #ccc !default; -$bs-datetimepicker-secondary-border-color-rgba: rgba(0, 0, 0, 0.2) !default; -$bs-datetimepicker-primary-border-color: white !default; -$bs-datetimepicker-text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25) !default; - -.bootstrap-datetimepicker-widget { - list-style: none; - - &.dropdown-menu { - margin: 2px 0; - padding: 4px; - width: 19em; - - &.timepicker-sbs { - @media (min-width: $screen-sm-min) { - width: 38em; - } - - @media (min-width: $screen-md-min) { - width: 38em; - } - - @media (min-width: $screen-lg-min) { - width: 38em; - } - } - - &:before, &:after { - content: ''; - display: inline-block; - position: absolute; - } - - &.bottom { - &:before { - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid $bs-datetimepicker-secondary-border-color; - border-bottom-color: $bs-datetimepicker-secondary-border-color-rgba; - top: -7px; - left: 7px; - } - - &:after { - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid $bs-datetimepicker-primary-border-color; - top: -6px; - left: 8px; - } - } - - &.top { - &:before { - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-top: 7px solid $bs-datetimepicker-secondary-border-color; - border-top-color: $bs-datetimepicker-secondary-border-color-rgba; - bottom: -7px; - left: 6px; - } - - &:after { - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid $bs-datetimepicker-primary-border-color; - bottom: -6px; - left: 7px; - } - } - - &.pull-right { - &:before { - left: auto; - right: 6px; - } - - &:after { - left: auto; - right: 7px; - } - } - } - - .list-unstyled { - margin: 0; - } - - a[data-action] { - padding: 6px 0; - } - - a[data-action]:active { - box-shadow: none; - } - - .timepicker-hour, .timepicker-minute, .timepicker-second { - width: 54px; - font-weight: bold; - font-size: $bs-datetimepicker-timepicker-font-size; - margin: 0; - } - - button[data-action] { - padding: 6px; - } - - .btn[data-action="incrementHours"]::after { - @extend .sr-only; - content: "Increment Hours"; - } - - .btn[data-action="incrementMinutes"]::after { - @extend .sr-only; - content: "Increment Minutes"; - } - - .btn[data-action="decrementHours"]::after { - @extend .sr-only; - content: "Decrement Hours"; - } - - .btn[data-action="decrementMinutes"]::after { - @extend .sr-only; - content: "Decrement Minutes"; - } - - .btn[data-action="showHours"]::after { - @extend .sr-only; - content: "Show Hours"; - } - - .btn[data-action="showMinutes"]::after { - @extend .sr-only; - content: "Show Minutes"; - } - - .btn[data-action="togglePeriod"]::after { - @extend .sr-only; - content: "Toggle AM/PM"; - } - - .btn[data-action="clear"]::after { - @extend .sr-only; - content: "Clear the picker"; - } - - .btn[data-action="today"]::after { - @extend .sr-only; - content: "Set the date to today"; - } - - .picker-switch { - text-align: center; - - &::after { - @extend .sr-only; - content: "Toggle Date and Time Screens"; - } - - td { - padding: 0; - margin: 0; - height: auto; - width: auto; - line-height: inherit; - - span { - line-height: 2.5; - height: 2.5em; - width: 100%; - } - } - } - - table { - width: 100%; - margin: 0; - - - & td, - & th { - text-align: center; - border-radius: $bs-datetimepicker-border-radius; - } - - & th { - height: 20px; - line-height: 20px; - width: 20px; - - &.picker-switch { - width: 145px; - } - - &.disabled, - &.disabled:hover { - background: none; - color: $bs-datetimepicker-disabled-color; - cursor: not-allowed; - } - - &.prev::after { - @extend .sr-only; - content: "Previous Month"; - } - - &.next::after { - @extend .sr-only; - content: "Next Month"; - } - } - - & thead tr:first-child th { - cursor: pointer; - - &:hover { - background: $bs-datetimepicker-btn-hover-bg; - } - } - - & td { - height: 54px; - line-height: 54px; - width: 54px; - - &.cw { - font-size: .8em; - height: 20px; - line-height: 20px; - color: $bs-datetimepicker-alternate-color; - } - - &.day { - height: 20px; - line-height: 20px; - width: 20px; - } - - &.day:hover, - &.hour:hover, - &.minute:hover, - &.second:hover { - background: $bs-datetimepicker-btn-hover-bg; - cursor: pointer; - } - - &.old, - &.new { - color: $bs-datetimepicker-alternate-color; - } - - &.today { - position: relative; - - &:before { - content: ''; - display: inline-block; - border: solid transparent; - border-width: 0 0 7px 7px; - border-bottom-color: $bs-datetimepicker-active-bg; - border-top-color: $bs-datetimepicker-secondary-border-color-rgba; - position: absolute; - bottom: 4px; - right: 4px; - } - } - - &.active, - &.active:hover { - background-color: $bs-datetimepicker-active-bg; - color: $bs-datetimepicker-active-color; - text-shadow: $bs-datetimepicker-text-shadow; - } - - &.active.today:before { - border-bottom-color: #fff; - } - - &.disabled, - &.disabled:hover { - background: none; - color: $bs-datetimepicker-disabled-color; - cursor: not-allowed; - } - - span { - display: inline-block; - width: 54px; - height: 54px; - line-height: 54px; - margin: 2px 1.5px; - cursor: pointer; - border-radius: $bs-datetimepicker-border-radius; - - &:hover { - background: $bs-datetimepicker-btn-hover-bg; - } - - &.active { - background-color: $bs-datetimepicker-active-bg; - color: $bs-datetimepicker-active-color; - text-shadow: $bs-datetimepicker-text-shadow; - } - - &.old { - color: $bs-datetimepicker-alternate-color; - } - - &.disabled, - &.disabled:hover { - background: none; - color: $bs-datetimepicker-disabled-color; - cursor: not-allowed; - } - } - } - } - - &.usetwentyfour { - td.hour { - height: 27px; - line-height: 27px; - } - } -} - -.input-group.date { - & .input-group-addon { - cursor: pointer; - } -} diff --git a/resources/views/dashboard/incidents/add.blade.php b/resources/views/dashboard/incidents/add.blade.php index d12fd25c..85a7222a 100644 --- a/resources/views/dashboard/incidents/add.blade.php +++ b/resources/views/dashboard/incidents/add.blade.php @@ -118,7 +118,7 @@