diff --git a/catalogues/dictionary_de.xml b/catalogues/dictionary_de.xml index de9148e5b..78f888950 100644 --- a/catalogues/dictionary_de.xml +++ b/catalogues/dictionary_de.xml @@ -267,6 +267,7 @@ Textdichtung von Tätigkeiten Alphabetisch + von bis Chronologie undatiert diff --git a/catalogues/dictionary_en.xml b/catalogues/dictionary_en.xml index eb89c92e0..7a00a688c 100644 --- a/catalogues/dictionary_en.xml +++ b/catalogues/dictionary_en.xml @@ -265,6 +265,7 @@ Lyricists Occupations Alphabetic + from to Chronology undated diff --git a/resources/js/init.js b/resources/js/init.js index 3d3ecd6b3..248c6209f 100644 --- a/resources/js/init.js +++ b/resources/js/init.js @@ -134,20 +134,81 @@ function formatFacet (facet) { return facet; } -$.fn.rangeSlider = function () -{ +/* + * Helper functions for rangeSlider and chronology input + */ +function applyChronologyFilter (data) { + /* Get active facets to append as URL params */ + const params = active_facets(), + newFrom = moment(data.from).locale("de").format("YYYY-MM-DD"), + newTo = moment(data.to).locale("de").format("YYYY-MM-DD"); + + /* Overwrite date params with new values from the slider */ + params.sliderDates.fromDate = newFrom; + params.sliderDates.toDate = newTo; + params.sliderDates.oldFromDate = moment(data.min).locale("de").format("YYYY-MM-DD"); + params.sliderDates.oldToDate = moment(data.max).locale("de").format("YYYY-MM-DD"); + updatePage(params); +} + +function getInputDateFormat() { + const lang = getLanguage(); + return (lang === 'de') ? "DD.MM.YYYY" : "MM/DD/YYYY"; +} + +function formatInputDate(timestamp) { + return moment(timestamp).locale(getLanguage()).format(getInputDateFormat()); +} + +$('.allFilter').on('change', '.chronology-from, .chronology-to', function () { + const slider = $('.rangeSlider').data('ionRangeSlider'); + if (!slider) return; + + const val = $(this).val().trim(), + m = moment(val, getInputDateFormat(), true); + if (!m.isValid()) return; + + const timestamp = +m, + currentFrom = slider.result.from, + currentTo = slider.result.to, + min = slider.result.min, + max = slider.result.max; + if (timestamp < min || timestamp > max) return; + + const isFrom = $(this).hasClass('chronology-from'); + if (isFrom && timestamp > currentTo) return; + if (!isFrom && timestamp < currentFrom) return; + + if (isFrom) { + slider.update({ from: timestamp }); + applyChronologyFilter({ + from: timestamp, + to: currentTo, + min: min, + max: max + }); + } else { + slider.update({ to: timestamp }); + applyChronologyFilter({ + from: currentFrom, + to: timestamp, + min: min, + max: max + }); + } +}); + +$.fn.rangeSlider = function () { this.ionRangeSlider({ min: +moment($(this).attr('data-min-slider')), max: +moment($(this).attr('data-max-slider')), from: +moment($(this).attr('data-from-slider')), to: +moment($(this).attr('data-to-slider')), - grid: true, + grid: false, skin: "flat", step: 100, force_edges: true, type: "double", - //force_edges: true, - grid_num: 3, keyboard: true, prettify: function (num) { const lang = getLanguage(), @@ -157,21 +218,15 @@ $.fn.rangeSlider = function () else { format = "MMM D, YYYY" } return m.format(format); }, - onFinish: function (data) { - /* Get active facets to append as URL params */ - const params = active_facets(), - newFrom = moment(data.from).locale("de").format("YYYY-MM-DD"), - newTo = moment(data.to).locale("de").format("YYYY-MM-DD"); - - /* - * Overwrite date params with new values from the slider - */ - params.sliderDates.fromDate = newFrom; - params.sliderDates.toDate = newTo; - params.sliderDates.oldFromDate = moment(data.min).locale("de").format("YYYY-MM-DD"); - params.sliderDates.oldToDate = moment(data.max).locale("de").format("YYYY-MM-DD"); - updatePage(params); - } + onStart: function (data) { + $('.chronology-from').val(formatInputDate(data.from)); + $('.chronology-to').val(formatInputDate(data.to)); + }, + onChange: function (data) { + $('.chronology-from').val(formatInputDate(data.from)); + $('.chronology-to').val(formatInputDate(data.to)); + }, + onFinish: function (data) { applyChronologyFilter(data); } }); }; diff --git a/resources/sass/layout/_sidebar.scss b/resources/sass/layout/_sidebar.scss index be280142b..6c0914313 100644 --- a/resources/sass/layout/_sidebar.scss +++ b/resources/sass/layout/_sidebar.scss @@ -116,6 +116,10 @@ a.checkbox-only { } } + .chronology-input input { + width: 100% + } + #settings { background-color: $gray-lightest; border-left: 4px solid $gray-light; diff --git a/templates/ajax/correspondence.html b/templates/ajax/correspondence.html index b22586190..bf79f964d 100644 --- a/templates/ajax/correspondence.html +++ b/templates/ajax/correspondence.html @@ -5,6 +5,17 @@

chronology

+
+
+

chronoFrom

+ +
+
+

chronoTo

+ +
+
+
@@ -12,6 +23,7 @@

chronology

+

sender