From c4221e4fb8a52790c51728fc40975a451b5c45dc Mon Sep 17 00:00:00 2001 From: Marco 'Lubber' Wienkoop Date: Fri, 18 Oct 2019 10:46:43 +0200 Subject: [PATCH] feat(calendar): support type setting as metadata & initialize without JS This PR allows to define the type setting as metadata. It then also supports to automatically instantiate the calendar module when inside a form. I also micro-optimized some small codeparts --- src/definitions/behaviors/form.js | 5 +++++ src/definitions/modules/calendar.js | 17 ++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/definitions/behaviors/form.js b/src/definitions/behaviors/form.js index 5553ce48e5..6588a16d36 100644 --- a/src/definitions/behaviors/form.js +++ b/src/definitions/behaviors/form.js @@ -991,6 +991,8 @@ $.fn.form = function(parameters) { $parent = $el.parent(), isCheckbox = ($el.filter(selector.checkbox).length > 0), isDropdown = $parent.is(selector.uiDropdown) && module.can.useElement('dropdown'), + $calendar = $el.closest(selector.uiCalendar), + isCalendar = ($calendar.length > 0 && module.can.useElement('calendar')), value = (isCheckbox) ? $el.is(':checked') : $el.val() @@ -998,6 +1000,9 @@ $.fn.form = function(parameters) { if (isDropdown) { $parent.dropdown('save defaults'); } + else if (isCalendar) { + $calendar.calendar('refresh'); + } $el.data(metadata.defaultValue, value); $el.data(metadata.isDirty, false); }); diff --git a/src/definitions/modules/calendar.js b/src/definitions/modules/calendar.js index ae2b83f93f..692c56f375 100644 --- a/src/definitions/modules/calendar.js +++ b/src/definitions/modules/calendar.js @@ -115,6 +115,7 @@ $.fn.calendar = function(parameters) { if (module.get.maxDate() !== null) { module.set.maxDate($module.data(metadata.maxDate)); } + module.setting('type', module.get.type()); }, popup: function () { if (settings.inline) { @@ -185,17 +186,15 @@ $.fn.calendar = function(parameters) { } }, date: function () { + var date; if (settings.initialDate) { - var date = parser.date(settings.initialDate, settings); - module.set.date(date, settings.formatInput, false); + date = parser.date(settings.initialDate, settings); } else if ($module.data(metadata.date) !== undefined) { - var date = parser.date($module.data(metadata.date), settings); - module.set.date(date, settings.formatInput, false); + date = parser.date($module.data(metadata.date), settings); } else if ($input.length) { - var val = $input.val(); - var date = parser.date(val, settings); - module.set.date(date, settings.formatInput, false); + date = parser.date($input.val(), settings); } + module.set.date(date, settings.formatInput, false); } }, @@ -627,6 +626,9 @@ $.fn.calendar = function(parameters) { settings.type === 'month' ? 'month' : settings.type === 'year' ? 'year' : 'day'; }, + type: function() { + return $module.data(metadata.type) || settings.type; + }, validModes: function () { var validModes = []; if (settings.type !== 'time') { @@ -1560,6 +1562,7 @@ $.fn.calendar.settings = { minDate: 'minDate', maxDate: 'maxDate', mode: 'mode', + type: 'type', monthOffset: 'monthOffset', message: 'message', class: 'class'