diff options
author | Max Kanat-Alexander <mkanat@bugzilla.org> | 2011-10-15 15:00:34 +0200 |
---|---|---|
committer | Frédéric Buclin <LpSolit@gmail.com> | 2011-10-15 15:00:34 +0200 |
commit | da307acd5f65c28cddce76dd4c4ae822a375914a (patch) | |
tree | a45952b9944ffb659a8f2e94ae600ce3660339d9 | |
parent | 1c7c7bbb3c2a32f2962ca2df52297f1abd7bd046 (diff) | |
download | bugzilla-da307acd5f65c28cddce76dd4c4ae822a375914a.tar.gz bugzilla-da307acd5f65c28cddce76dd4c4ae822a375914a.tar.xz |
Bug 674416: Custom searches in query.cgi are lost when clicking the "Back" button in Firefox when viewing a buglist
r=glob a=mkanat
-rw-r--r-- | js/custom-search.js | 22 | ||||
-rw-r--r-- | template/en/default/search/boolean-charts.html.tmpl | 5 |
2 files changed, 26 insertions, 1 deletions
diff --git a/js/custom-search.js b/js/custom-search.js index 800150440..394e0eb32 100644 --- a/js/custom-search.js +++ b/js/custom-search.js @@ -32,6 +32,8 @@ var ANY_ALL_SELECT_CLASS = 'any_all_select'; function custom_search_not_changed(id) { var container = document.getElementById('custom_search_not_container_' + id); YAHOO.util.Dom.removeClass(container, 'custom_search_advanced'); + + fix_query_string(container); } function custom_search_new_row() { @@ -53,6 +55,7 @@ function custom_search_new_row() { // Always make sure there's only one row with this id. row.id = null; row.parentNode.appendChild(clone); + fix_query_string(row); return clone; } @@ -100,6 +103,8 @@ function custom_search_open_paren() { var new_margin = parseInt(int_match[0]) + PAREN_INDENT_EM; YAHOO.util.Dom.setStyle(row, 'margin-left', new_margin + 'em'); YAHOO.util.Dom.removeClass('cp_container', 'bz_default_hidden'); + + fix_query_string(any_all_container); } function custom_search_close_paren() { @@ -124,6 +129,23 @@ function custom_search_close_paren() { if (new_margin == 0) { YAHOO.util.Dom.addClass('cp_container', 'bz_default_hidden'); } + + fix_query_string(new_row); +} + +// When a user goes Back in their browser after searching, some browsers +// (Chrome, as of September 2011) do not remember the DOM that was created +// by the Custom Search JS. (In other words, their whole entered Custom +// Search disappears.) The solution is to update the History object, +// using the query string, which query.cgi can read to re-create the page +// exactly as the user had it before. +function fix_query_string(form_member) { + if (!(window.history && window.history.replaceState)) + return; + + var form = YAHOO.util.Dom.getAncestorByTagName(form_member, 'form'); + var query = YAHOO.util.Connect.setForm(form); + window.history.replaceState(null, document.title, '?' + query); } diff --git a/template/en/default/search/boolean-charts.html.tmpl b/template/en/default/search/boolean-charts.html.tmpl index b90f5f1b6..b5ff90908 100644 --- a/template/en/default/search/boolean-charts.html.tmpl +++ b/template/en/default/search/boolean-charts.html.tmpl @@ -135,6 +135,7 @@ [% ELSE %] <select name="f[% cond_num FILTER html %]" title="Field" id="f[% cond_num FILTER html %]" + onchange="fix_query_string(this)" class="custom_search_form_field"> [% FOREACH field = fields %] <option value="[% field.name FILTER html %]" @@ -150,6 +151,7 @@ <input name="v[% cond_num FILTER html %]" title="Value" class="custom_search_form_field" + onchange="fix_query_string(this)" value="[% condition.v FILTER html %]"> [% END %] @@ -170,7 +172,8 @@ [% BLOCK any_all_select %] <div class="any_all_select"> - <select name="[% name FILTER html %]" id="[% name FILTER html %]"> + <select name="[% name FILTER html %]" id="[% name FILTER html %]" + onchange="fix_query_string(this)"> <option value="AND">Match ALL of the following:</option> <option value="OR" [% ' selected="selected"' IF selected == "OR" %]> Match ANY of the following:</option> |