diff --git a/app/assets/javascripts/repositories/index.js b/app/assets/javascripts/repositories/index.js index 354dd74ea..2c56c38c0 100644 --- a/app/assets/javascripts/repositories/index.js +++ b/app/assets/javascripts/repositories/index.js @@ -105,6 +105,7 @@ }], fnInitComplete: function(e) { initActionToolbar(); + window.actionToolbarComponent.setReloadCallback(() => initRepositoriesDataTable('#repositoriesList', archived)); window.actionToolbarComponent.setBottomOffset(68); diff --git a/app/assets/javascripts/repositories/repository_datatable.js b/app/assets/javascripts/repositories/repository_datatable.js index 6fcf35f30..61a74a3e0 100644 --- a/app/assets/javascripts/repositories/repository_datatable.js +++ b/app/assets/javascripts/repositories/repository_datatable.js @@ -791,6 +791,7 @@ var RepositoryDatatable = (function(global) { fnInitComplete: function() { window.initActionToolbar(); window.actionToolbarComponent.setBottomOffset(68); + initHeaderTooltip(); disableCheckboxToggleOnCheckboxPreview(); diff --git a/app/assets/stylesheets/shared/datetime_picker.scss b/app/assets/stylesheets/shared/datetime_picker.scss index ed858e8ce..f72562316 100644 --- a/app/assets/stylesheets/shared/datetime_picker.scss +++ b/app/assets/stylesheets/shared/datetime_picker.scss @@ -3,9 +3,10 @@ .dp--menu-wrapper { font-weight: normal; - .dp__menu { + .dp__menu, + &.dp__menu { border: 0; - box-shadow: 0px 32px 64px -12px rgba(16, 24, 40, 0.14); + box-shadow: 0px 4px 16px rgba(35, 31, 32, 0.15) } .dp__action_buttons { @@ -26,17 +27,34 @@ } .dp__month_year_row { - margin-bottom: 1rem; + margin-bottom: .5rem; } .dp__menu_inner { - border-bottom: 1px solid var(--sn-light-grey); - margin: 0 1rem 1rem; + margin: 0 1rem; padding: 1rem 0; } + .dp__time_picker_overlay_container { + padding-bottom: .5rem; + } + + .dp__button_bottom { + background-color: var(--sn-white); + margin-bottom: .5rem; + } + .dp--tp-wrap { - padding: 0 1rem 1rem; + border-top: 1px solid var(--sn-light-grey); + padding: .5rem 1rem; + + .dp__time_display { + margin: .5rem 0; + } + + .dp__button_bottom { + margin-bottom: 0; + } } .dp__action_cancel { @@ -61,19 +79,14 @@ justify-content: center; } - .dp__btn:hover { .dp__tp_inline_btn_bar { background-color: var(--sn-science-blue); } } - .dp--overlay-absolute { - padding: 1rem 1rem 0; - } - - .dp__overlay_action { - width: calc(100% - 2rem); + .dp__overlay_container { + padding-bottom: .5rem; } .dp--arrow-btn-nav { @@ -102,6 +115,16 @@ } } +.dp__main.only-time { + .dp--tp-wrap { + border-top: none; + } + + .dp__overlay_container { + padding-bottom: 0; + } +} + .dp__theme_light { --dp-background-color: var(--sn-white); @@ -148,11 +171,11 @@ --dp-cell-padding: 0rem; /*Padding in the cell*/ --dp-common-padding: 1rem; /*Common padding used*/ --dp-input-padding: .3em 2rem .3rem 1rem; /*Padding in the input*/ - --dp-menu-min-width: 342px; /*Adjust the min width of the menu*/ + --dp-menu-min-width: 276px; /*Adjust the min width of the menu*/ --dp-action-row-padding: 0 1rem 1rem; /*Adjust padding for the action row*/ --dp-action-buttons-padding: 0 .625rem; /*Adjust padding for the action buttons in action row*/ --dp-action-button-height: 1.875rem; /*Adjust height for the action buttons in action row*/ - --dp-row-margin: .25rem 0; /*Adjust the spacing between rows in the calendar*/ + --dp-row-margin: 2px 0; /*Adjust the spacing between rows in the calendar*/ --dp-calendar-header-cell-padding: .5rem; /*Adjust padding in calendar header cells*/ --dp-two-calendars-spacing: .75rem; /*Space between multiple calendars*/ --dp-overlay-col-padding: .25rem; /*Padding in the overlay column*/ @@ -163,7 +186,7 @@ /*Font sizes*/ --dp-font-size: .875rem; /*Default font-size*/ --dp-preview-font-size: .75rem; /*Font size of the date preview in the action row*/ - --dp-time-font-size: 3rem; /*Font size in the time picker*/ + --dp-time-font-size: 1.875rem; /*Font size in the time picker*/ /*Transitions*/ --dp-animation-duration: 0.1s; /*Transition duration*/ diff --git a/app/controllers/my_modules_controller.rb b/app/controllers/my_modules_controller.rb index a5007aaaa..0d14b0e3e 100644 --- a/app/controllers/my_modules_controller.rb +++ b/app/controllers/my_modules_controller.rb @@ -488,6 +488,16 @@ class MyModulesController < ApplicationController def my_module_params permitted_params = params.require(:my_module).permit(:name, :description, :started_on, :due_date, :archived) + + if permitted_params[:started_on].present? + permitted_params[:started_on] = + Time.zone.strptime(permitted_params[:started_on], '%Y/%m/%d %H:%M') + end + if permitted_params[:due_date].present? + permitted_params[:due_date] = + Time.zone.strptime(permitted_params[:due_date], '%Y/%m/%d %H:%M') + end + permitted_params end diff --git a/app/javascript/packs/vue/action_toolbar.js b/app/javascript/packs/vue/action_toolbar.js index 1a85db360..68f2a382a 100644 --- a/app/javascript/packs/vue/action_toolbar.js +++ b/app/javascript/packs/vue/action_toolbar.js @@ -5,11 +5,14 @@ import ActionToolbar from '../../vue/components/action_toolbar.vue'; import { mountWithTurbolinks } from './helpers/turbolinks.js'; window.initActionToolbar = () => { + if (window.actionToolbarComponent) return; if (notTurbolinksPreview()) { const app = createApp({}); app.component('ActionToolbar', ActionToolbar); app.config.globalProperties.i18n = window.I18n; - mountWithTurbolinks(app, '#actionToolbar'); + mountWithTurbolinks(app, '#actionToolbar', () => { + window.actionToolbarComponent = null + }); } } diff --git a/app/javascript/packs/vue/helpers/turbolinks.js b/app/javascript/packs/vue/helpers/turbolinks.js index e55491baf..259ceb4c8 100644 --- a/app/javascript/packs/vue/helpers/turbolinks.js +++ b/app/javascript/packs/vue/helpers/turbolinks.js @@ -1,9 +1,12 @@ -function mountWithTurbolinks(app, target) { +function mountWithTurbolinks(app, target, callback = null) { const originalHtml = document.querySelector(target).innerHTML; document.addEventListener('turbolinks:before-cache', () => { app.unmount(); - document.querySelector(target).innerHTML = originalHtml; + if (document.querySelector(target)) { + document.querySelector(target).innerHTML = originalHtml; + } + if (callback) callback(); }, { once: true }); return app.mount(target); diff --git a/app/javascript/packs/vue/legacy/datetime_picker.js b/app/javascript/packs/vue/legacy/datetime_picker.js index 8acdfa231..490fec4f5 100644 --- a/app/javascript/packs/vue/legacy/datetime_picker.js +++ b/app/javascript/packs/vue/legacy/datetime_picker.js @@ -18,14 +18,15 @@ window.initDateTimePickerComponent = (id) => { }, mounted() { if (this.$refs.input.dataset.default) { - const defaultDate = new Date(this.$refs.input.dataset.default.replace(/-/g, '/')); // Safari fix + const defaultDate = new Date(this.$refs.input.dataset.default.replace(/([^!\s])-/g, '$1/')); // Safari fix this.date = this.formatDate(defaultDate); + this.$refs.vueDateTime.manualUpdate = true; this.$refs.vueDateTime.datetime = defaultDate; } else if (this.date) { + this.$refs.vueDateTime.manualUpdate = true; this.$refs.vueDateTime.datetime = new Date(this.date); } - $(this.$refs.input).data('dateTimePicker', this); $(this.$el.parentElement).parent().trigger('dp:ready'); }, @@ -50,6 +51,7 @@ window.initDateTimePickerComponent = (id) => { }, setDate(date) { this.date = this.formatDate(date); + this.$refs.vueDateTime.manualUpdate = true; this.$refs.vueDateTime.datetime = date; this.$nextTick(() => { if (this.onChange) this.onChange(date); diff --git a/app/javascript/vue/shared/date_time_picker.vue b/app/javascript/vue/shared/date_time_picker.vue index bddd44800..7af5a2ce7 100644 --- a/app/javascript/vue/shared/date_time_picker.vue +++ b/app/javascript/vue/shared/date_time_picker.vue @@ -1,6 +1,9 @@