104 lines
3.3 KiB
JavaScript
104 lines
3.3 KiB
JavaScript
function combo_load_cell(elem, url) {
|
|
$.ajax({url: url + window.location.search,
|
|
xhrFields: { withCredentials: true },
|
|
async: true,
|
|
dataType: 'html',
|
|
crossDomain: true,
|
|
success: function(data) {
|
|
var parent = $(elem).parent();
|
|
$(elem).parent().parent().addClass('ajax-loaded');
|
|
$(elem).parent().nextAll().remove();
|
|
if (data == '') {
|
|
$(elem).remove();
|
|
} else {
|
|
$(elem).replaceWith(data);
|
|
}
|
|
$(document).trigger('combo:cell-loaded', parent);
|
|
},
|
|
error: function(error) {
|
|
$(elem).addClass('error-loading');
|
|
window.console && console.log(':(', error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function combo_modify_query_string(name, value) {
|
|
var search = window.location.search.substring(1);
|
|
var parts = search.split('&');
|
|
var newparts = [];
|
|
var modified = 0;
|
|
value = encodeURIComponent(value);
|
|
for (var i = 0; i < parts.length; i++) {
|
|
if (! parts[i]) {
|
|
continue;
|
|
}
|
|
var pair = parts[i].split('=');
|
|
if (pair[0] == name) {
|
|
if (value) {
|
|
newparts.push(name + '=' + value);
|
|
}
|
|
modified = 1;
|
|
} else {
|
|
newparts.push(parts[i]);
|
|
}
|
|
}
|
|
if (! modified && value) {
|
|
newparts.push(name + '=' + value);
|
|
}
|
|
if (newparts) {
|
|
search = '?' + newparts.join('&');
|
|
} else {
|
|
search = '';
|
|
}
|
|
return search;
|
|
}
|
|
|
|
$(function() {
|
|
$('[data-ajax-cell-refresh]').each(function(idx, elem) {
|
|
var $elem = $(elem);
|
|
function refresh() {
|
|
combo_load_cell($elem.find('> div'), $elem.data('ajax-cell-url'));
|
|
}
|
|
$elem.timeout_id = setInterval(refresh, $elem.data('ajax-cell-refresh')*1000);
|
|
});
|
|
$('[data-ajax-cell-must-load]').each(function(idx, elem) {
|
|
var $elem = $(elem);
|
|
combo_load_cell($elem, $elem.parents('div.cell').data('ajax-cell-url'));
|
|
});
|
|
|
|
/* utility functions and events, for themes */
|
|
$('.togglable').on('click', function() {
|
|
$(this).toggleClass('toggled');
|
|
});
|
|
/* reload cells when parameters changes */
|
|
function combo_refresh_ajax_cells() {
|
|
$('[data-ajax-cell-url]').each(function(idx, elem) {
|
|
var $elem = $(elem);
|
|
var msg = $(elem).data('ajax-cell-loading-message');
|
|
$elem.prepend('<div><div class="loading"><span class="loading-message">' + msg + '</span></div></div>');
|
|
combo_load_cell($elem.find('div.loading'), $elem.data('ajax-cell-url'));
|
|
});
|
|
}
|
|
if (window.history.pushState && $('.parameterscell').length > 0) {
|
|
/* set initial state */
|
|
window.history.replaceState("reload", "", window.location.href);
|
|
$(window).on('popstate', function (event) {
|
|
if (event.originalEvent.state == "reload") {
|
|
combo_refresh_ajax_cells();
|
|
}
|
|
});
|
|
}
|
|
$(document).on('change', '.combo-parameters-cell-form select', function (e) {
|
|
var $target = $(e.target);
|
|
var value = $target.val();
|
|
var name = $target[0].name;
|
|
var new_qs = combo_modify_query_string(name, value);
|
|
if (window.history.pushState) {
|
|
window.history.pushState("reload", "", window.location.pathname + new_qs);
|
|
combo_refresh_ajax_cells();
|
|
} else {
|
|
window.location.search = new_qs;
|
|
}
|
|
});
|
|
});
|