diff --git a/addons/website_portal/static/src/js/website_portal.js b/addons/website_portal/static/src/js/website_portal.js index d63ef067294..f2c2ff01545 100644 --- a/addons/website_portal/static/src/js/website_portal.js +++ b/addons/website_portal/static/src/js/website_portal.js @@ -3,17 +3,45 @@ odoo.define('website_portal', function(require) { 'use strict'; require('website.website'); - if(!$('.o_website_portal_details').length) { - return $.Deferred().reject("DOM doesn't contain '.o_website_portal_details'"); + if(!$('.o_website_portal').length) { + return $.Deferred().reject("DOM doesn't contain '.o_website_portal'"); } - var state_options = $("select[name='state_id']:enabled option:not(:first)"); - $('.o_website_portal_details').on('change', "select[name='country_id']", function () { - var select = $("select[name='state_id']"); - state_options.detach(); - var displayed_state = state_options.filter("[data-country_id="+($(this).val() || 0)+"]"); - var nb = displayed_state.appendTo(select).show().size(); - select.parent().toggle(nb>=1); - }); - $('.o_website_portal_details').find("select[name='country_id']").change(); + if ($('.o_website_portal_details').length) { + var state_options = $("select[name='state_id']:enabled option:not(:first)"); + $('.o_website_portal_details').on('change', "select[name='country_id']", function () { + var select = $("select[name='state_id']"); + state_options.detach(); + var displayed_state = state_options.filter("[data-country_id="+($(this).val() || 0)+"]"); + var nb = displayed_state.appendTo(select).show().size(); + select.parent().toggle(nb>=1); + }); + $('.o_website_portal_details').find("select[name='country_id']").change(); + } + + if ($('.o_portal_search_panel').length) { + $('.o_portal_search_panel .search-submit').click(function() { + var search = $.deparam(window.location.search.substring(1)); + search.search_in = $(".o_portal_search_panel li.active a").attr("href").replace("#",""); + search.search = $(".o_portal_search_panel input[name='search']").val(); + window.location.search = $.param(search); + }); + + $('.o_portal_search_panel .dropdown-menu').find('a').click(function(e) { + e.preventDefault(); + $(this).parents('.dropdown-menu').find('li').removeClass('active'); + $(this).parent('li').addClass('active'); + var label = $(this).clone(); + label.find('span.nolabel').remove(); + $(".o_portal_search_panel span#search_label").text(label.text()); + }); + // init search label + $('.o_portal_search_panel .dropdown-menu').find('li.active a').trigger('click'); + + $(".o_portal_search_panel input[name='search']").on('keyup', function (e) { + if (e.keyCode === 13) { + $('.o_portal_search_panel .search-submit').trigger('click'); + } + }); + } }); diff --git a/addons/website_portal/views/website_portal_templates.xml b/addons/website_portal/views/website_portal_templates.xml index 850d3d2430c..8f677d40eae 100644 --- a/addons/website_portal/views/website_portal_templates.xml +++ b/addons/website_portal/views/website_portal_templates.xml @@ -32,6 +32,9 @@ criteria will keep the number of page, query params, ... Changing the 'filterby' param will redirect the user to the beginning of document list, keeping query parameters. + These 2 buttons can be prepended by a advanced search input, to activate it, search_input need + to be initialized at 'True' and the content of the t-call is the list of li elements searchable. + :param dict searchbar_sortings : containing the sort criteria like {'date': {'label': _('Newest'), 'order': 'create_date desc'}} :param string sortby : name of the sort criteria @@ -39,8 +42,30 @@ {'open': {'label': _('In Progress'), 'domain': [('state', '=', 'open')]}} :param string filterby : name of the filter criteria :param default_url : the base url of the pages (like '/my/orders') + :param boolean o_portal_search_panel : set to True to active the input search + :param html $0 : content of the t-call,