// rather simple first stab at automating image rollovers - any image with
// a class of auto_hover will set its source to be the original name + _hover.png
// when rolled over, and back again when the mouse moves away.
//
// need to initialise by calling addAutoHover() after document has loaded.
//
function addAutoHover() {
$$('img.auto_hover').each(function(image) {
image.observe('mouseover', function(event) {
image.src = image.src.gsub(".png", "_hover.png");
});
image.observe('mouseout', function(event) {
image.src = image.src.gsub("_hover.png", ".png");
});
preload = new Image();
preload.src = image.src.gsub(".png", "_hover.png");
});
};
function addRefresh() {
updater1 = new Ajax.PeriodicalUpdater("alert_summary", "/_alert_summary",
{ method: 'get', frequency: 120 });
updater2 = new Ajax.PeriodicalUpdater("alert_counts", "/_alert_counts",
{ method: 'get', frequency: 120 });
}
// Pop up the big white box at the top when something goes wrong, scroll so
// user can see it.
//
function reportError(message) {
$('errors_list').insert('
'+message+'');
$('errors').show();
$('errors').scrollTo();
}
// Hide the big white box again
//
function clearErrors() { $('errors').hide(); }
// Wrapper around reportError to report an error in updating a particular
// alert.
//
function acknowledgeFailed(id, message) {
if (message)
reportError("Couldn't update alert "+id+": "+message);
else
reportError("Couldn't update alert "+id+"");
}
// Updates the page from a JSON representation of a particular alert.
//
function updateAlert(alert) {
var strip = $('alert_'+alert.id);
if (!strip) {
reportError("Alert "+id+" not rendered - bug?");
return;
}
image = strip.down(".acknowledge img");
image.src = alert.acknowledged_at ?
"/images/acknowledge_acknowledged.png" :
"/images/acknowledge_unacknowledged.png"
if (strip.down(".source"))
strip.down(".source").update(alert.source);
if (strip.down(".subject"))
strip.down(".subject").update(alert.subject);
if (strip.down(".summary") && strip.down(".summary").down())
strip.down(".summary").down().update(alert.summary);
strip.next().update(alert.detail);
if (alert.acknowledged_at)
strip.next().hide();
}
// called when user hits the acknowledge button for an alert - makes a callback
// to the server to communicate the change, and updates the button
// appropriately.
//
function toggleAcknowledge(id) {
updater = new Ajax.Request('/alert/'+id+'/acknowledge', {
method: 'post',
// ignored by server, see http://www.ruby-forum.com/topic/162976 for why
postBody: 'x',
onFailure: function(xhr) { acknowledgeFailed(id, "Failure - "+xhr.statusText); },
onException: function(xhr, ex) { acknowledgeFailed(id, Dumper(ex)); },
onSuccess: function(xhr) {
if (xhr.status == 200) {
content_type = xhr.getResponseHeader("Content-Type");
if (content_type != "application/json") {
acknowledgeFailed(id, "Got "+content_type+" not application/json from server");
} else {
updateAlert(xhr.responseText.evalJSON());
}
} else {
acknowledgeFailed(id, "Connection problem");
}
}
});
};
// Controls the showing of details on alerts.
function toggleDetailView(id) {
updater = new Ajax.Request('/alert/'+id+'/toggleDetailView', {
method: 'post',
postBody: 'x',
onFailure: function(xhr) { acknowledgeFailed(id, "Failure - "+xhr.statusText); },
onException: function(xhr, ex) { acknowledgeFailed(id, Dumper(ex)); },
onSuccess: function(xhr) {
if (xhr.status == 200) {
content_type = xhr.getResponseHeader("Content-Type");
if (content_type != "application/json") {
acknowledgeFailed(id, "Got "+content_type+" not application/json from server");
} else {
//updateAlert(xhr.responseText.evalJSON());
}
} else {
acknowledgeFailed(id, "Connection problem");
}
}
});
}
// Controls the showing of folding on alerts.
function toggleFoldingView(subject) {
updater = new Ajax.Request('/alert/fold/'+subject, {
method: 'post',
postBody: 'x',
onFailure: function(xhr) { acknowledgeFailed(subject, "Failure - "+xhr.statusText); },
onException: function(xhr, ex) { acknowledgeFailed(subject, Dumper(ex)); },
onSuccess: function(xhr) {
if (xhr.status == 200) {
content_type = xhr.getResponseHeader("Content-Type");
if (content_type != "application/json") {
acknowledgeFailed(subject, "Got "+content_type+" not application/json from server");
} else {
//updateAlert(xhr.responseText.evalJSON());
}
} else {
acknowledgeFailed(subject, "Connection problem");
}
}
});
}