import { get_config_value } from './config_reader.js';
-import { last_updated_store } from './stores.js';
+import { last_api_request_url_store } from './stores.js';
+function api_request_progress(status) {
+ var loading_el = document.getElementById('loading');
+ if (!loading_el) return; // might not be on page yet
+
+ loading_el.style.display = (status === 'start') ? 'block' : 'none';
+}
export async function fetch_from_api(endpoint_name, params, callback) {
var api_url = generate_nominatim_api_url(endpoint_name, params);
- document.getElementById('loading').style.display = 'block';
+ api_request_progress('start');
+
await fetch(api_url)
.then(response => response.json())
.then(data => {
callback(data);
- document.getElementById('loading').style.display = 'none';
+ api_request_progress('finish');
});
-
- fetch(generate_nominatim_api_url('status', {format: 'json'}))
- .then(response => response.json())
- .then(data => {
- let last_updated = {
- api_request_url: api_url,
- api_request_url_debug: api_url + '&debug=1',
- date: data.data_updated
- };
- last_updated_store.set(last_updated)
- });
+ if (endpoint_name !== 'status') last_api_request_url_store.set(api_url);
}
function generate_nominatim_api_url(endpoint_name, params) {
return get_config_value('Nominatim_API_Endpoint') + endpoint_name + '.php?'
- + Object.keys(clean_up_parameters(params)).map( (k) => {
- return encodeURIComponent(k) + '=' + encodeURIComponent(params[k])
+ + Object.keys(clean_up_parameters(params)).map((k) => {
+ return encodeURIComponent(k) + '=' + encodeURIComponent(params[k]);
}).join('&');
}
export function serialize_form(form) {
var arr = [];
Array.prototype.slice.call(form.elements).forEach(function (field) {
- if (!field.name || field.disabled || ['file', 'reset', 'submit', 'button'].indexOf(field.type) > -1) return;
+ if (!field.name || field.disabled || ['submit', 'button'].indexOf(field.type) > -1) return;
// if (field.type === 'select-multiple') {
// Array.prototype.slice.call(field.options).forEach(function (option) {
// if (!option.selected) return;
// });
// return;
// }
- if (['checkbox', 'radio'].indexOf(field.type) >-1 && !field.checked) return;
- if (typeof(field.value) === 'undefined') return;
+ if (['checkbox', 'radio'].indexOf(field.type) > -1 && !field.checked) return;
+ if (typeof field.value === 'undefined') return;
arr.push(encodeURIComponent(field.name) + '=' + encodeURIComponent(field.value));
});
return arr.join('&');
-};
+}
// remove any URL paramters with empty values
export function update_html_title(title) {
document.title = [title, 'OpenStreetMap Nominatim']
- .filter( (val) => val && val.length > 1 )
- .join(' | ');
+ .filter((val) => val && val.length > 1)
+ .join(' | ');
}