X-Git-Url: https://git.openstreetmap.org./nominatim-ui.git/blobdiff_plain/76e3136f32e35ded2caf989b0bf699de64798921..0aa28e47e87fc78e152de7f1750e97ccf260c595:/src/lib/stores.js diff --git a/src/lib/stores.js b/src/lib/stores.js index e618db2..35344ce 100644 --- a/src/lib/stores.js +++ b/src/lib/stores.js @@ -2,19 +2,59 @@ import { writable } from 'svelte/store'; export const map_store = writable(); export const results_store = writable(); -export const current_result_store = writable(); -export const current_request_latlon = writable(); -export const last_updated_store = writable(); -export const page = writable({count: 0}); +export const last_api_request_url_store = writable(); +export const error_store = writable(); +export const page = writable(); -export function refresh_page() { - let pagename = window.location.pathname.replace('.html', '').replace(/^.*\//, ''); +/** + * Update the global page state. + * + * When called without a parameter, then the current window.location is + * parsed and the page state is set accordingly. Otherwise the page state + * is set from the parameters. 'pagename' is the overall subpage (without + * .html extension). 'params' must be an URLSearchParams object and contain + * the requested query parameters. It may also be omitted completely for a + * link without query parameters. + */ +const default_pagename = Nominatim_Config.Reverse_Only ? 'reverse' : 'search'; +const pagenames = [ + default_pagename, + 'reverse', + 'details', + 'deletable', + 'polygons', + 'status', + 'about' +]; - if (['search', 'reverse', 'details', 'deletable', 'polygons'].indexOf(pagename) == -1) { - pagename = 'search'; +export function refresh_page(pagename, params) { + if (typeof pagename === 'undefined') { + pagename = window.location.pathname.replace('.html', '').replace(/^.*\//, ''); + + if (!pagenames.includes(pagename)) pagename = default_pagename; + + params = new URLSearchParams(window.location.search); + } else { + if (!pagenames.includes(pagename)) pagename = default_pagename; + + if (typeof params === 'undefined') { + params = new URLSearchParams(); + } + + let param_str = params.toString(); + if (param_str) { + param_str = '?' + param_str; + } + let new_url = pagename + '.html' + param_str; + + if (window.location.protocol.match(/^http/)) { + window.history.pushState([], '', new_url); + } else { + window.location.href = new_url; } + } - // Add a counter here to make sure the store change is triggered - // everytime we refresh, not just when the page changes. - page.update(function(v) { return {tab: pagename, count: v.count + 1}}); + page.set({ tab: pagename, params: params }); + last_api_request_url_store.set(null); + error_store.set(null); }