Setup a GMail style loading message.
This method may be deprecated at some point in the future because its implementation has a number of limitations:
It is suggested that you use the source on this page as a template and customize it for your own purposes.
You must call this method after the page has loaded (i.e. not before the onload() event has fired) because it creates a hidden div to contain the loading message.
The easiest way to achieve this is to call dwr.util.useLoadingMessage from the onload event like this:
<head>
<script>
function init() {
dwr.util.useLoadingMessage();
}
</script>
...
</head>
<body onload="init();">
...
There may well be times when you are not able to easily edit the headers or the body tag (this is common when using a CMS) in which case you can use the following:
<script>
function init() {
dwr.util.useLoadingMessage();
}
if (window.addEventListener) {
window.addEventListener("load", init, false);
}
else if (window.attachEvent) {
window.attachEvent("onload", init);
}
else {
window.onload = init;
}
</script>
The source to this function is also a useful starting point for implementing your own loading message. The majority of this function dynamically creates a div (with id="disabledZone") which contains the message. The important code that makes it appear and disappear whenever Ajax activity is going on looks like this:
dwr.engine.setPreHook(function() {
$('disabledZone').style.visibility = 'visible';
});
dwr.engine.setPostHook(function() {
$('disabledZone').style.visibility = 'hidden';
});
This is fairly simple and makes it quite easy to implement your own "loading" message.
function useLoadingMessage(message) {
var loadingMessage;
if (message) loadingMessage = message;
else loadingMessage = "Loading";
dwr.engine.setPreHook(function() {
var disabledZone = $('disabledZone');
if (!disabledZone) {
disabledZone = document.createElement('div');
disabledZone.setAttribute('id', 'disabledZone');
disabledZone.style.position = "absolute";
disabledZone.style.zIndex = "1000";
disabledZone.style.left = "0px";
disabledZone.style.top = "0px";
disabledZone.style.width = "100%";
disabledZone.style.height = "100%";
document.body.appendChild(disabledZone);
var messageZone = document.createElement('div');
messageZone.setAttribute('id', 'messageZone');
messageZone.style.position = "absolute";
messageZone.style.top = "0px";
messageZone.style.right = "0px";
messageZone.style.background = "red";
messageZone.style.color = "white";
messageZone.style.fontFamily = "Arial,Helvetica,sans-serif";
messageZone.style.padding = "4px";
disabledZone.appendChild(messageZone);
var text = document.createTextNode(loadingMessage);
messageZone.appendChild(text);
}
else {
$('messageZone').innerHTML = loadingMessage;
disabledZone.style.visibility = 'visible';
}
});
dwr.engine.setPostHook(function() {
$('disabledZone').style.visibility = 'hidden';
});
}
This can be simply adapted to allow use of a loading images as follows:
function useLoadingImage(imageSrc) {
var loadingImage;
if (imageSrc) loadingImage = imageSrc;
else loadingImage = "ajax-loader.gif";
dwr.engine.setPreHook(function() {
var disabledImageZone = $('disabledImageZone');
if (!disabledImageZone) {
disabledImageZone = document.createElement('div');
disabledImageZone.setAttribute('id', 'disabledImageZone');
disabledImageZone.style.position = "absolute";
disabledImageZone.style.zIndex = "1000";
disabledImageZone.style.left = "0px";
disabledImageZone.style.top = "0px";
disabledImageZone.style.width = "100%";
disabledImageZone.style.height = "100%";
var imageZone = document.createElement('img');
imageZone.setAttribute('id','imageZone');
imageZone.setAttribute('src',imageSrc);
imageZone.style.position = "absolute";
imageZone.style.top = "0px";
imageZone.style.right = "0px";
disabledImageZone.appendChild(imageZone);
document.body.appendChild(disabledImageZone);
}
else {
$('imageZone').src = imageSrc;
disabledImageZone.style.visibility = 'visible';
}
});
dwr.engine.setPostHook(function() {
$('disabledImageZone').style.visibility = 'hidden';
});
}
You then use this example like this: useLoadingImage("images/loader.gif");