You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
3.3 KiB
JavaScript
161 lines
3.3 KiB
JavaScript
function serialize(form, loc='query') {
|
|
if ( !form || form.nodeName !== "FORM" ) {
|
|
return;
|
|
}
|
|
|
|
var query = loc;
|
|
var element, option, i, j, q = [];
|
|
for ( i = 0; element = form.elements[i]; i++ ) {
|
|
if ( element.name === "" || element.disabled || element.offsetParent === null ) {
|
|
continue;
|
|
}
|
|
|
|
// the queryauth input is treated separately
|
|
if ( element.name === 'queryauth' ) {
|
|
if ( element.checked ) {
|
|
query = element.value;
|
|
}
|
|
continue;
|
|
}
|
|
|
|
|
|
switch ( element.nodeName ) {
|
|
case 'INPUT':
|
|
if ( element.value == "" ) {
|
|
break;
|
|
}
|
|
|
|
switch ( element.type ) {
|
|
case 'text':
|
|
case 'number':
|
|
case 'hidden':
|
|
case 'password':
|
|
case 'button':
|
|
case 'reset':
|
|
case 'submit':
|
|
q.push(element.name + "=" + encodeURIComponent(element.value));
|
|
break;
|
|
|
|
case 'checkbox':
|
|
case 'radio':
|
|
if ( element.checked ) {
|
|
q.push(element.name + "=" + encodeURIComponent(element.value));
|
|
}
|
|
break;
|
|
|
|
case 'file':
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
case 'TEXTAREA':
|
|
if ( element.value == "" ) {
|
|
break;
|
|
}
|
|
|
|
q.push(element.name + "=" + encodeURIComponent(element.value));
|
|
break;
|
|
|
|
case 'SELECT':
|
|
switch ( element.type ) {
|
|
case 'select-one':
|
|
if ( element.value == "" ) {
|
|
break;
|
|
}
|
|
|
|
q.push(element.name + "=" + encodeURIComponent(element.value));
|
|
break;
|
|
|
|
case 'select-multiple':
|
|
values = null
|
|
for ( j = 0; option = element.options[j]; j++ ) {
|
|
if ( option.selected ) {
|
|
v = encodeURIComponent(option.value)
|
|
if ( values === null ) {
|
|
values = v;
|
|
}
|
|
else {
|
|
values += "," + v;
|
|
}
|
|
}
|
|
}
|
|
if ( values !== null ) {
|
|
q.push(element.name + "=" + values);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case 'BUTTON':
|
|
if ( element.value == "" ) {
|
|
break;
|
|
}
|
|
|
|
switch ( element.type ) {
|
|
case 'reset':
|
|
case 'submit':
|
|
case 'button':
|
|
q.push(element.name + "=" + encodeURIComponent(element.value));
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
var params = q.join("&");
|
|
return params.length === 0 ? query : query + '?' + params;
|
|
}
|
|
|
|
function fdsnwsInitQueryForm() {
|
|
return fdsnwsInitQueryFormLocation('query')
|
|
}
|
|
|
|
function fdsnwsInitQueryFormLocation(loc) {
|
|
var queryForm = document.getElementById('query-form');
|
|
var queryURL = document.getElementById('query-url');
|
|
|
|
function updateQueryURL() {
|
|
var path = window.location.pathname.split('/');
|
|
path.pop();
|
|
var url = window.location.origin + path.join('/') + '/' +
|
|
serialize(queryForm, loc)
|
|
queryURL.setAttribute('href', url);
|
|
queryURL.innerHTML = url;
|
|
}
|
|
|
|
function toggleLocation() {
|
|
for ( i = 0; radio = locRadios[i]; i++ ) {
|
|
var input = document.getElementById(radio.id + '-input');
|
|
if ( input ) {
|
|
//alert('input: ' + input.id);
|
|
input.style.display = radio.checked ? 'block' : 'none';
|
|
}
|
|
}
|
|
|
|
updateQueryURL();
|
|
}
|
|
|
|
var element, i;
|
|
var elements = queryForm.getElementsByTagName('input');
|
|
var locRadios = []
|
|
for ( i = 0; element = elements[i]; i++ ) {
|
|
if ( element.type === 'radio' && element.name === 'location' ) {
|
|
locRadios.push(element);
|
|
element.onclick = toggleLocation;
|
|
}
|
|
else {
|
|
element.oninput = updateQueryURL
|
|
element.onchange = updateQueryURL
|
|
}
|
|
}
|
|
|
|
var elements = queryForm.getElementsByTagName('select');
|
|
for ( i = 0; element = elements[i]; i++ ) {
|
|
element.onchange = updateQueryURL
|
|
}
|
|
|
|
toggleLocation();
|
|
updateQueryURL();
|
|
};
|