miniA4kuser
Lounge-Member
Es geht um ein JavaScript, welches ich HTMLView benannt habe und mir bei folgendem Problem helfen soll:
Man generiert HTML Code via JavaScript und fügt diesen in das DOM ein.
Dabei habe ich festgestellt das je nach Situation der so erstellte HTML Code nicht korrekt validiert werdenkann, weil die HTML Ansicht im Browser nicht aktualisiert wurde oder der verwendete HTML Validator diesen nicht findet.
Nun Kann man sich den generierten HTML Code über ein alert ausgeben lassen und mit Copy & Paste arbeiten was aber auch nicht so komfortabel ist.
Inspiriert von diesem Beispiel habe ich mal angefangen etwas zu schreiben und so ist eben HTMLView entstanden. Dieses empfängt Daten von einem JavaScript (generiert) oder man übergibt einfach eine Elementreferenz von dem HTML tag von dem man den HTML Code dargestellt bekommen möchte.
In der momentanen globalen Variable functionHTML ist ein generierter HTML Code gespeichert, welcher von einem Kalenderscript ausgegeben wird. Dieser Kalender HTML Code ist auch im HTML Dokument vorhanden und wird auch entsprechend vom Browser angezeigt.
Der HTML Code wird for der Ausgabe formatiert (lower case characters) und eingerückt um ordentlich lesbar zu sein.
Die Projektseite ist hier zu finden: HTMLView Projektseite
Hier die Hauptfunktion um die es geht
Aktuell ist die Version 0.03 - Anregungen und Verbesserungsvorschlägen bitte posten.
Ich weis daas der Code momentan noch Verbesserungen benötigt, aber wo ich nun etwas Unterstützung benötige, ist bei den regulären Ausdrücken.
Sind diese soweit korrekt definiert?
Kann man diese noch verbessern?
Kann man gewisse Sachen kombinieren?
Man generiert HTML Code via JavaScript und fügt diesen in das DOM ein.
Dabei habe ich festgestellt das je nach Situation der so erstellte HTML Code nicht korrekt validiert werdenkann, weil die HTML Ansicht im Browser nicht aktualisiert wurde oder der verwendete HTML Validator diesen nicht findet.
Nun Kann man sich den generierten HTML Code über ein alert ausgeben lassen und mit Copy & Paste arbeiten was aber auch nicht so komfortabel ist.
Inspiriert von diesem Beispiel habe ich mal angefangen etwas zu schreiben und so ist eben HTMLView entstanden. Dieses empfängt Daten von einem JavaScript (generiert) oder man übergibt einfach eine Elementreferenz von dem HTML tag von dem man den HTML Code dargestellt bekommen möchte.
In der momentanen globalen Variable functionHTML ist ein generierter HTML Code gespeichert, welcher von einem Kalenderscript ausgegeben wird. Dieser Kalender HTML Code ist auch im HTML Dokument vorhanden und wird auch entsprechend vom Browser angezeigt.
Der HTML Code wird for der Ausgabe formatiert (lower case characters) und eingerückt um ordentlich lesbar zu sein.
Die Projektseite ist hier zu finden: HTMLView Projektseite
Hier die Hauptfunktion um die es geht
Code:
function showGeneratedHTML(output) {
var element = document.getElementById("source"),
arrLevel = [],
arrProcess = [],
arrTemp,
arrTempPrevious = false,
arrTempSingle = false,
search = /(<.+?>)/g,
level = -1,
pos = 0,
string,
strPre,
strPost,
i_end,
i;
output = output.replace(/\r\n|\n|\r/g, '\n');
output = output.replace(/(<.+?>)/g, function (m) {
var space = /\s/,
htmlComment = /<!--/;
if (space.test(m)) {
m = m.replace(/(<.+?\s)/g, function (m) {
return m.toLowerCase();
});
} else {
m = m.toLowerCase();
}
return m;
});
if (output.indexOf('<body>') !== -1) {
strPre = output.slice(0, output.indexOf('<body>'));
strPre = strPre.slice(0, strPre.lastIndexOf('>') + 1) + '\n';
output = output.slice(output.indexOf('<body>'));
}
output = output.replace(/(>)\s+?(<)/g, '$1$2');
arrTemp = search.exec(output);
while (arrTemp) {
if (arrTemp[0].search(/\//g) !== -1) {
if (arrTempPrevious === true) {
arrLevel.push(level);
arrProcess.push([arrTemp.index]);
}
level -= 1;
arrTempPrevious = true;
} else {
if (arrTempSingle === false) {
level += 1;
}
if (arrTemp[0].search(/br/) !== -1) {
arrTempSingle = true;
} else {
arrTempSingle = false;
}
arrLevel.push(level);
arrProcess.push([arrTemp.index]);
arrTempPrevious = false;
}
arrTemp = search.exec(output);
}
for (i = arrLevel.length - 1, i_end = 0; i > i_end; i -= 1) {
string = '\n';
if (arrLevel[i] > 0) {
for (pos = 0; pos < arrLevel[i]; pos += 1) {
string += '\t';
}
}
arrProcess[i].push(string);
}
for (i = arrProcess.length - 1, i_end = 0; i > i_end; i -= 1) {
output = output.insert(arrProcess[i][0], arrProcess[i][1]);
}
if (strPre) {
element.appendChild(document.createTextNode(strPre + output));
} else {
element.appendChild(document.createTextNode(output));
}
}
Ich weis daas der Code momentan noch Verbesserungen benötigt, aber wo ich nun etwas Unterstützung benötige, ist bei den regulären Ausdrücken.
Sind diese soweit korrekt definiert?
Kann man diese noch verbessern?
Kann man gewisse Sachen kombinieren?