Podgląd pliku: / books / inwentaryzacja / locate.js
var xml;
var ajax;
var loc = false;
function ajax() {
try {
ajax = new XMLHttpRequest();
return;
}
catch(e) {
var activex = ['Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'];
for(var i=0; i<activex.length; i++) {
try {
ajax = new ActiveXObject(activex[i]);
return;
}
catch(e) {
}
}
}
fatalError('Przeglądarka nie obsługuje XMLHttpRequest');
}
function status(msg) {
document.getElementById('result1').innerHTML = document.getElementById('result2').innerHTML
document.getElementById('result2').innerHTML = document.getElementById('result3').innerHTML;
document.getElementById('result3').innerHTML = msg;
}
function error(msg) {
status('<span class="error">'+msg+'</span>');
document.getElementById('audio').play();
}
function fatalError(msg) {
status('<span class="error">'+msg+'</span>');
throw new Exception('Błąd krytyczny: '+msg);
}
function changeLocation(element) {
while(element && element.parentNode!=document && element.tagName != 'TABLE') {
element = element.parentNode
}
if(!element || element.tagName != 'TABLE') {
error('Podana lokalizacja nie istnieje lub jest nieznana.');
return;
}
if(loc) {
loc.className = '';
}
loc = element;
loc.className = 'current';
loc.scrollIntoView();
}
function makeCaption(regal, polka, rzad) {
var caption = document.createElement('caption');
caption.appendChild(document.createTextNode('Półka: '+regal+'/'+polka+'/'+rzad));
caption.onclick = 'changeLocation(this)';
return caption;
}
function textValue(element) {
var text = '';
for(var i=0; i<element.childNodes.length; i++) {
if(element.childNodes.item(i) instanceof String) {
text += element.childNodes.item(i);
}
else if(element.childNodes.item(i) instanceof Text) {
text += element.childNodes.item(i).nodeValue;
}
else
{
text += textValue(element.childNodes.item(i));
}
}
return text;
}
function makeHeader(caption) {
var tr = document.createElement('tr');
var th = document.createElement('th');
th.appendChild(document.createTextNode('ID'));
th.appendChild(document.createElement('br'));
th.appendChild(document.createTextNode('status'));
tr.appendChild(th);
var th = document.createElement('th');
th.appendChild(document.createTextNode('Autor'));
th.appendChild(document.createElement('br'));
th.appendChild(document.createTextNode('Tytuł'));
tr.appendChild(th);
var th = document.createElement('th');
th.appendChild(document.createTextNode('Miejsce, rok'));
th.appendChild(document.createElement('br'));
th.appendChild(document.createTextNode('Wydawnictwo'));
tr.appendChild(th);
return tr;
}
function processBook(book) {
var tr = document.createElement('tr');
tr.id = book.attributes['id'].nodeValue;
tr.onclick = 'changeBook(this)';
var th = document.createElement('td');
th.appendChild(document.createTextNode(book.attributes['id'].nodeValue.substr(1)));
th.appendChild(document.createElement('br'));
if(!book.hasAttribute('status')) {
th.appendChild(document.createTextNode('Nieznany'));
}
else if(book.getAttribute('status') == 'ok') {
tr.className = 'ok';
th.appendChild(document.createTextNode('Na miejscu'));
}
else
{
tr.className = 'ok';
th.appendChild(document.createTextNode('Przeniesiona'));
}
tr.appendChild(th);
var th = document.createElement('td');
th.appendChild(document.createTextNode(textValue(book.getElementsByTagName('autor').item(0))));
th.appendChild(document.createElement('br'));
th.appendChild(document.createTextNode(textValue(book.getElementsByTagName('tytul').item(0))));
tr.appendChild(th);
var th = document.createElement('td');
th.appendChild(document.createTextNode(textValue(book.getElementsByTagName('miejsce').item(0))+' '+textValue(book.getElementsByTagName('rok').item(0))));
th.appendChild(document.createElement('br'));
th.appendChild(document.createTextNode(textValue(book.getElementsByTagName('wydawnictwo').item(0))));
tr.appendChild(th);
return tr;
}
function changeBook(book) {
if(book.parentNode == loc) {
xml.getElementById(book.id).setAttribute('status', 'ok');
book.className = 'ok';
book.childNodes[0].childNodes[2].data = 'Na miejscu';
book.scrollIntoView();
}
else
{
xml.getElementById(loc.id).appendChild(xml.getElementById(book.id));
xml.getElementById(book.id).setAttribute('status', 'moved');
var book2 = book.cloneNode(true);
book2.className = 'ok';
book2.childNodes[0].childNodes[2].data = 'Przeniesiona';
if(document.getElementById('e'+book.id)) {
document.getElementById('e'+book.id).parentNode.removeChild(document.getElementById('e'+book.id));
}
book.className = 'err';
book.id = 'e'+book.id;
book.childNodes[0].childNodes[2].data = 'Przeniesiona';
loc.appendChild(book2);
book2.scrollIntoView();
}
}
function clearInput() {
document.getElementById('i1').value = document.getElementById('i2').value = document.getElementById('i3').value = '';
document.getElementById('i1').focus();
}
function processInput() {
var reg = /^([0-9]{1,8})$/;
var i1 = document.getElementById('i1').value;
var i2 = document.getElementById('i2').value;
var i3 = document.getElementById('i3').value;
if(i2 != '' || i3 != '') {
if(!document.getElementById('m_'+i1+'_'+i2+'_'+i3)) {
error('Podane regał/półka/rząd nie istnieją!');
clearInput();
return false;
}
changeLocation(document.getElementById('m_'+i1+'_'+i2+'_'+i3));
status('Wybrano '+i1+'/'+i2+'/'+i3);
clearInput();
return true;
}
if(reg.test(i1)) {
i1 = parseInt(i1, 10);
if(!document.getElementById('k'+i1)) {
error('Wybrana książka nie istnieje!');
clearInput();
return false;
}
changeBook(document.getElementById('k'+i1));
status('OK - książka '+i1);
clearInput();
return true;
}
error('Nieznany typ (książka - 8 cyfr; regał - tekst; półka/rząd - liczby)!');
clearInput();
return false;
}
function keyEvent(e) {
if(!e) e = window.event;
if(e.keyCode == 13) {
processInput();
clearInput();
return false;
}
}
function process() {
var number = 0;
var header = makeHeader();
xml = ajax.responseXML;
if(!(xml instanceof XMLDocument)) {
fatalError('Pobrany dokument nie jest poprawnym arkuszem XML');
}
var total = xml.getElementsByTagName('ksiazka').length;
if(!xml.getElementById) {
fatalError('Przeglądarka nie wspiera XMLDocument.getElementById');
}
status('Książek do przetworzenia: '+total);
var miejsca = xml.getElementsByTagName('lokalizacja');
for(var i=0; i<miejsca.length; i++) {
var table = document.createElement('table');
if(loc == false) {
loc = table;
}
table.id = 'm_'+miejsca[i].attributes['regal'].nodeValue+'_'+miejsca[i].attributes['polka'].nodeValue+'_'+miejsca[i].attributes['rzad'].nodeValue;
table.appendChild(makeCaption(miejsca[i].attributes['regal'].nodeValue, miejsca[i].attributes['polka'].nodeValue, miejsca[i].attributes['rzad'].nodeValue));
table.appendChild(header.cloneNode(true));
for(var j=0; j<miejsca[i].childNodes.length; j++) {
if(!miejsca[i].childNodes[j].tagName) continue;
table.appendChild(processBook(miejsca[i].childNodes[j]));
if((++number % 100) == 0) {
status('Przetworzono: '+Math.floor(number*100/total)+'% ('+number+' z '+total+')');
}
}
document.getElementById('data').appendChild(table);
}
status('Przetworzono: 100% ('+total+' z '+total+')');
changeLocation(loc);
document.getElementById('input').style.display = 'block';
document.getElementById('i1').onkeydown = document.getElementById('i2').onkeydown = document.getElementById('i3').onkeydown = keyEvent;
document.getElementById('i4').onclick = processInput;
document.getElementById('i5').onclick = save;
document.getElementById('i1').focus();
status('Gotowy do pracy.');
}
function save() {
document.getElementById('input').style.display = 'none';
status('Zapisywanie. Proszę czekać...');
ajax.open('POST', 'save.php', true);
ajax.onreadystatechange = function() {
if(ajax.readyState == 3) {
status('Wysyłanie danych...');
}
else if(ajax.readyState == 4) {
if(ajax.status == 200) {
status('Dane zostały zapisane. '+ajax.status);
}
else
{
error('Zapis nie powiódł się. Błąd HTTP '+ajax.status);
}
document.getElementById('input').style.display = 'block';
}
};
ajax.send(xml);
}
function getData() {
status('Inicjowanie transferu...');
ajax();
ajax.open('GET', 'list.xml?time='+((new Date()).getTime())+'&rand='+Math.random(), true);
ajax.onreadystatechange = function() {
if(ajax.readyState == 3) {
status('Pobieranie danych...');
}
else if(ajax.readyState == 4) {
if(ajax.status == 200 || ajax.status == 304) {
status('Przetwarzanie danych...');
process();
}
else
{
fatalError('Kod HTTP '+ajax.status+'. Nie udało się pobrać danych. Spróbuj przeładować stronę.');
}
}
};
ajax.send();
}
window.onload = getData;
Browse Code © 2010 by Jacek Kowalski