diff options
| author | Jeremy Kersten <jke@odoo.com> | 2017-01-12 13:30:04 +0100 |
|---|---|---|
| committer | Jeremy Kersten <jke@odoo.com> | 2017-02-24 08:51:26 +0100 |
| commit | 561d68bafda9caef7dd9bf9dc7e1ef6456c83558 (patch) | |
| tree | 6c7527ca3223501b80eee6a7ba562cff3f738c53 /addons | |
| parent | 83bfdb0d212a99d808fa4d0dc9d3ebe3ce469a18 (diff) | |
[IMP] website_portal: allow to add search input into the searchbar
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/website_portal/static/src/js/website_portal.js | 50 | ||||
| -rw-r--r-- | addons/website_portal/views/website_portal_templates.xml | 27 |
2 files changed, 65 insertions, 12 deletions
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, <li>a</li><li>b</li> --> <template id="portal_searchbar" name="Portal Search Bar"> + <t t-if='searchbar_inputs'> + <div class='pull-right o_portal_search_panel'> + <div class="input-group"> + <div class="input-group-btn"> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> + <span id="search_label">Search</span> <span class="caret"></span> + </button> + <ul class="dropdown-menu" role="menu"> + <li t-foreach='searchbar_inputs' t-as='input' t-att-class="search_in == searchbar_inputs[input]['input'] and 'active'"> + <a t-att-href="'#' + searchbar_inputs[input]['input']"><span t-raw="searchbar_inputs[input]['label']"/></a> + </li> + </ul> + </div> + <input type="text" class="form-control" t-att-value='search' name="search"/> + <span class="input-group-btn"> + <button class="btn btn-default search-submit" type="button"><span class="fa fa-search"></span></button> + </span> + </div> + </div> + </t> <div t-if="searchbar_sortings" class="dropdown pull-right mr8"> <button id="portal_searchbar_sortby" class="btn btn-default" type="button" data-toggle="dropdown"> <span class="fa fa-sort fa-lg" /> @@ -73,7 +98,7 @@ <template id="portal_layout" name="Portal Layout"> <t t-call="website.layout"> - <div class="container mt16"> + <div class="container mt16 o_website_portal"> <div class="navbar navbar-default"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#oe-help-navbar-collapse"> |
