diff --git a/web/recommends.html b/web/recommends.html index 5e451b6..62c1eda 100644 --- a/web/recommends.html +++ b/web/recommends.html @@ -36,21 +36,56 @@ setup_item_autocomplete("#item"); var item_name = $.QueryString["item"]; if (item_name) { - $("#item").val(item_name); - update_search(); + console.log("qs item: " + item_name); + if (history.state && history.state["item_name"]) { + item_name = history.state["item_name"]; + console.log("override qs with state item: " + item_name); + } + var normalized_name = normalize_name(item_name); + var encoded_name = encodeURIComponent(normalized_name); + display_item(normalized_name); + console.log("replaceState: " + normalized_name); + window.history.replaceState({ "item_name": normalized_name }, "", + "/recommends.html?item=" + + encoded_name ); } + $(window).on("popstate", function(e) { + var oe = e.originalEvent; + if (oe.state !== null) { + console.log("popState:" + JSON.stringify(oe.state)); + display_item(oe.state["item_name"]); + } + }); }); function update_search() { + // update the item search based on the text field, and also push + // the state to history var item_name = $.trim($("#item").val()); var normalized_name = normalize_name(item_name); + if (window.history.state["item_name"] == normalized_name) { + console.log("item not changed, skipping update"); + return; + } + var encoded_name = encodeURIComponent(normalized_name); + display_item(normalized_name); + console.log("pushState: " + normalized_name); + window.history.pushState({ "item_name": normalized_name }, "", + "/recommends.html?item=" + encoded_name ); + } + + function display_item(normalized_name) { + // display the exact item name if available; does not push state + $("#item").val(normalized_name); + var encoded_name = encodeURIComponent(normalized_name); - $.get(DATA_PATH + encode_utf8(normalized_name) + ".txt", + $.get(DATA_PATH + encoded_name + ".txt", function(data) { $("#output").text(data); }).fail( function() { - $("#output").text("Error: item '" + normalized_name + "' not found"); + $("#output").text("Error: item '" + + normalized_name + "' not found"); }); }