From 66311179e9da5aec0b1a913cdfa3906ba48686f1 Mon Sep 17 00:00:00 2001 From: Nicolas Demonte Date: Tue, 14 Apr 2020 09:25:18 +0200 Subject: [PATCH] Store additional criterias in advanced search #32781 - text - date(s) - multiple selections --- plone/formwidget/querystring/querywidget.js | 50 +++++++++++++++++---- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/plone/formwidget/querystring/querywidget.js b/plone/formwidget/querystring/querywidget.js index ded19fc..178b440 100644 --- a/plone/formwidget/querystring/querywidget.js +++ b/plone/formwidget/querystring/querywidget.js @@ -185,16 +185,34 @@ }; $.querywidget.updateWidget = function (node) { - if (typeof(node) === "undefined") { - node = $('.querywidget'); - } - if ($().dateinput) { + if (typeof (node) === "undefined") { + node = $('.querywidget'); + } + if ($().dateinput) { jQuery.tools.dateinput.conf.format = 'dd/mm/yyyy'; - $(node).parents('.criteria').find('.date').dateinput({change: function() { $.querywidget.updateSearch();}, firstDay: 1,selectors: true, trigger: false, yearRange: [-10, 10]}).unbind('change') + $(node).parents('.criteria').find('.date').dateinput({ + change: function () { + var multi = get_history_parameter('multi', {}); + var input = this.getInput(); + var index = input.parents(".criteria").find(".queryindex option:selected").val(); + if (input.hasClass("querywidget")) { // 1 date input, .querywidget itself + multi[index].value = input.val(); + } else { // 2 date inputs, contained inside .querywidget + var dates = input.parent().children(".date"); + multi[index].value = [dates.get(0).value, dates.get(1).value]; + } + store_history_parameter('multi', multi); + $.querywidget.updateSearch(); + }, + firstDay: 1, + selectors: true, + trigger: false, + yearRange: [-10, 10] + }).unbind('change') .bind('onShow', function (event) { var trigger_offset = $(this).next().offset(); $(this).data('dateinput').getCalendar().offset( - {top: trigger_offset.top+20, left: trigger_offset.left} + {top: trigger_offset.top + 20, left: trigger_offset.left} ); }); } @@ -386,7 +404,7 @@ var querywidget = $(this).parent(".criteria").children('.querywidget'); if ((widget !== $.querywidget.getCurrentWidget(querywidget)) || (widget === 'MultipleSelectionWidget')) { querywidget.replaceWith($.querywidget.createWidget(widget, index, fname)); - $.querywidget.updateWidget($(this).parent(".criteria").children('.querywidget')); + $.querywidget.updateWidget($(this).parent(".criteria").children('.querywidget')); } $.querywidget.updateSearch(); }); @@ -395,11 +413,14 @@ var fname = $(this).closest('.QueryWidget').attr('data-fieldname'); var index = $(this).parents('.criteria').children('.queryindex').val(); var operatorvalue = $(this).children(':selected')[0].value; + var multi = get_history_parameter('multi', {}); + multi[index]["operator"] = operatorvalue; + store_history_parameter('multi', multi); var widget = $.querywidget.config.indexes[index].operators[operatorvalue].widget; var querywidget = $(this).parent().children('.querywidget'); if (widget !== $.querywidget.getCurrentWidget(querywidget)) { querywidget.replaceWith($.querywidget.createWidget(widget, index, fname)); - $.querywidget.updateWidget($(this).parent().children('.querywidget')); + $.querywidget.updateWidget($(this).parent().children('.querywidget')); } $.querywidget.updateSearch(); @@ -412,9 +433,14 @@ $('.multipleSelectionWidget input').live('change', function () { var widget = $(this).parents('.multipleSelectionWidget'); var selected_values = []; + var multi = get_history_parameter('multi', {}); + var input_values = []; widget.find('input:checked').each(function () { selected_values.push($(this).parent().children('span').html()); + input_values.push($(this).val()); }); + multi[index].value = input_values; + store_history_parameter('multi', multi); widget.find('.multipleSelectionWidgetTitle') .attr('title', selected_values.join(', ')) .html(selected_values.join(', ')); @@ -422,6 +448,10 @@ }); $('.queryvalue').live('keyup', function () { + var index = $(this).parents('.criteria').children('.queryindex').val(); + var multi = get_history_parameter('multi', {}); + multi[index].value = $(this).val(); + store_history_parameter('multi', multi); $.querywidget.updateSearch(); }); @@ -466,6 +496,10 @@ }); $('.removecriteria').live('click', function () { + var multi = get_history_parameter('multi', {}); + var index = $(this).parents(".criteria").find(".queryindex option:selected").val(); + delete multi[index]; + store_history_parameter('multi', multi); $(this).parents('.criteria').remove(); $.querywidget.updateSearch(); return false;