From 8b111b8fbde45e9d909c3cec3a90d58d55cd0672 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sat, 12 Sep 2020 09:58:20 +0200 Subject: [PATCH] Use tempusdominus and Popper for date time picker issue9455 review327751002 --- CHANGELOG | 1 + Gruntfile.js | 2 +- bower.json | 5 +-- index.html | 3 +- src/sao.js | 33 ++++++++++++++++++ src/sao.less | 6 +++- src/screen.js | 35 ++++++++----------- src/view/form.js | 89 ++++++++++++++++++++---------------------------- src/view/tree.js | 5 +++ 9 files changed, 101 insertions(+), 78 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index e19b322907..9065299a38 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Use tempusdominus and Popper for date time picker * Support PYSON comparison of date and datetime * Customize bootstrap default style * Set field's name as input's name attribute diff --git a/Gruntfile.js b/Gruntfile.js index d530bd03fb..567a68a2b5 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -106,7 +106,7 @@ module.exports = function(grunt) { 'bower_components/bootstrap', 'bower_components/bootstrap/less', 'bower_components/bootstrap-rtl-ondemand/less', - 'bower_components/eonasdan-bootstrap-datetimepicker/src/less', + 'bower_components/tempusdominus-bootstrap-3/src/less/', ] }, files: { diff --git a/bower.json b/bower.json index 0ca7f94609..13e2212414 100644 --- a/bower.json +++ b/bower.json @@ -18,14 +18,15 @@ "jquery": "^3", "bootstrap": "^3.3.7", "moment": "^2.10", - "eonasdan-bootstrap-datetimepicker": "^4.17", "gettext.js": "^0.7", "c3": "^0.7", "papaparse": "^5.0", "fullcalendar": "^3.10.2", "mousetrap": "^1.6", "bootstrap-rtl-ondemand": "^3.3.4-ondemand", - "Sortable": "sortablejs#^1.8.4" + "Sortable": "sortablejs#^1.8.4", + "tempusdominus-bootstrap-3": "bootstrap-datetimepicker-v5-alpha#^5.0.0-alpha8", + "popper.js": "https://unpkg.com/popper.js" }, "devDependencies": { "qunit": "^1.18" diff --git a/index.html b/index.html index ef61807acd..3955621373 100644 --- a/index.html +++ b/index.html @@ -13,7 +13,8 @@ this repository contains the full copyright notices and license terms. --> - + + diff --git a/src/sao.js b/src/sao.js index e44f56bbd7..888c671efd 100644 --- a/src/sao.js +++ b/src/sao.js @@ -1146,4 +1146,37 @@ var Sao = {}; jQuery('.modal.in:visible:last').focus() .next('.modal-backdrop.in').removeClass('hidden'); } + + // XXX: use Popper to place popup + // cherry picked from tempusdominus-core.js + $.fn.datetimepicker.prototype.constructor.Constructor.prototype._place = function _place(e) { + var self = (e && e.data && e.data.picker) || this; + if (self._options.sideBySide) { + self._element.append(self.widget); + return; + } + if (self._options.widgetParent) { + self._options.widgetParent.append(self.widget); + } else if (self._element.is('input')) { + self._element.after(self.widget).parent(); + } else { + self._element.children().first().after(self.widget); + } + + var reference = self.component[0]; + + if (!reference) { + reference = self._element; + } + + // ReSharper disable once ConstructorCallNotUsed + new Popper(reference, self.widget[0], { + placement: 'bottom-start' + }); + }; + + // XXX: Ensure to always return a date + $.fn.datetimepicker.prototype.constructor.Constructor.prototype._getLastPickedDate = function _getLastPickedDate() { + return this._dates[this._getLastPickedDateIndex()] || this.getMoment(); + }; }()); diff --git a/src/sao.less b/src/sao.less index c5458ebb2d..df4de73712 100644 --- a/src/sao.less +++ b/src/sao.less @@ -2,7 +2,7 @@ this repository contains the full copyright notices and license terms. */ @import "bootstrap"; @import "bootstrap-rtl"; -@import "bootstrap-datetimepicker-build"; +@import "_tempusdominus-bootstrap-3"; @import "sao-variables"; html[theme="default"] { @import "theme"; @@ -681,6 +681,10 @@ input.column-boolean { } } +.bootstrap-datetimepicker-widget.dropdown-menu { + z-index: 2000; +} + @media screen and (max-width: @screen-xs-max) { .treeview { height: calc(100vh - 370px); diff --git a/src/screen.js b/src/screen.js index a9078326f4..a44fadcfc4 100644 --- a/src/screen.js +++ b/src/screen.js @@ -636,56 +636,51 @@ Sao.ScreenContainer.BetweenDates, { build_entry: function(placeholder, el) { var entry = jQuery('
', { - 'class': 'input-group input-group-sm' + 'class': 'input-group input-group-sm', + 'data-target-input': 'nearest', }).appendTo(el); + entry.uniqueId(); jQuery('', { 'class': 'input-group-btn' }).append(jQuery('