<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Nuked-Klan Mercurial Update</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
function MsgDebug (msg)
{
$('#ajax-action').text(msg);
$('#ajax-history').html(msg + '<br />' + $('#ajax-history').html());
}
var directory =
{
files : new Array(),
maxDirs : 0,
current : 0,
thread : 0,
Progress : function(max)
{
var rate = directory.current * 100 / max;
$('#ajax-progress-percent').text(
rate.toPrecision(4) + '% ('
+ directory.current + ' / '
+ max + ')'
);
$('#ajax-progress-bar').css('width', rate.toPrecision(4) + '%');
$('#ajax-thread').text(directory.thread);
},
NextFile : function()
{
if (directory.files.length > 0)
{
var file = directory.files.pop();
directory.thread += 1;
$('#ajax-action').text('Téléchargement : ' + file);
$.ajax({
url: 'ajax.php?action=update&file=' + encodeURI (file),
success: directory.GettingFile,
error: directory.AjaxError,
dataType: 'text'
});
}
else if (directory.thread == 0)
{
$('#ajax-action').text('Installation terminé !');
}
},
GettingFile : function(data, text, ajax)
{
MsgDebug(data);
directory.current += 1;
directory.thread -= 1;
directory.Progress(directory.maxDirs);
if (directory.maxDirs != directory.current)
directory.NextFile();
},
GetDir : function(dir)
{
$('#ajax-action').text ('Chargement du dossier : ' + dir);
directory.maxDirs += 1;
directory.thread += 1;
$.ajax({
url: 'ajax.php?action=list&dir=' + encodeURI (dir),
success: directory.GettingDir,
error: directory.AjaxError,
dataType: 'xml'
});
},
GettingDir : function(data, text, ajax)
{
var loc = data.firstChild.getAttribute('name');
MsgDebug ('Ouverture de : ' + loc);
directory.thread -= 1;
var entries = data.getElementsByTagName('dir');
for (var i = 0; i < entries.length; i++)
{
directory.GetDir(loc + entries[i].firstChild.data);
//$('#ajax-action').append(loc + entries[i].firstChild.data + ' ');
}
var entries = data.getElementsByTagName('file');
for (var i = 0; i < entries.length; i++)
{
directory.files.push(loc + entries[i].firstChild.data);
//$('#ajax-action').append(loc + entries[i].firstChild.data + ' ');
}
directory.current += 1;
directory.Progress(directory.maxDirs);
if (directory.maxDirs == directory.current)
{
$('#ajax-history').html('');
MsgDebug('Start file downloading ...');
if (directory.thread < directory.files.length)
directory.thread = directory.files.length;
directory.current = 0;
directory.thread = 0;
directory.maxDirs = directory.files.length;
for (var i = 0; i <= 100; i++)
{
directory.NextFile();
}
}
},
AjaxError : function(ajax, settings, error) {
directory.thread -= 1;
directory.Progress(directory.maxDirs);
if (ajax.status != 0)
{
directory.current += 1;
MsgDebug('Erreur : ' + ajax.responseText);
}
}
}
window.onload = function()
{
$('#ajax-action').text('Chargement ...');
directory.GetDir('/');
}
</script>
<style type="text/css">
#contener {
border: solid 1px black;
width: 700px;
margin:auto;
background-color: #FFFFCC;
}
.title-info {
font-weight: bolder;
margin: 20px 10px 0px;
}
#ajax-history {
height: 200px;
overflow: scroll;
margin: 10px;
background-color: white;
border: solid 1px #CCCC99;
}
#ajax-progress-percent, #progress-content {
position: relative;
top: 0px;
left: 0px;
overfow: hidden;
}
#progress-content, #ajax-progress-percent, #ajax-progress-bar {
height: 30px;
}
#ajax-progress-percent {
width: 100%;
padding-top: 5px;
font-size: 20px;
text-align: center;
}
#ajax-progress-bar {
background-color: #33FF33;
width: 0px;
float: left;
}
#progress-content {
background-color: #CC0033;
border: solid 2px #CCCC99;
margin: 0px 10px;
}
#ajax-action {
border: solid 1px #CCCC99;
margin: 0px 10px;
width: auto;
}
</style>
</head>
<body>
<div id="contener">
<div class="title-info">Action en cours :</div>
<div id="ajax-action">Le code javascript ne s'est pas encore activé.</div>
<div class="title-info">Avancement :</div>
<div id="progress">
<div id="ajax-progress-percent"></div>
<div id="progress-content">
<div id="ajax-progress-bar"></div>
</div>
</div>
<div class="title-info">Historique :</div>
<div id="ajax-history"></div>
</div>
thread : <span id="ajax-thread"></span>
</body>
</html>