4,6 → 4,7 |
// Předěláno na jinou strukturu adresářů, doplněno poukování odkazů |
// Oprava regulárního výrazu tak, aby nekazil odkaz Nahoru v patičce |
// Změna kódování na UTF-8 |
// Doplněno automatické generování obsahu |
|
var RelPath=""; // Proměnná pro uložení relativní cesty k rootu webu |
// Všechny cesty v tomto skriptu pak mají být cestami od |
179,3 → 180,101 |
// Výstup sestaveného textu |
document.write(Content); |
} |
|
|
//============================================= |
// Automatické generování obsahu |
// |
// Ke každé značce s class="PutTocHere x" vygeneruje obsah |
// s hloubkou x nadpisů (defaultně 2 úrovně) |
|
|
function tocGetText(obj) |
// Vrať řetězec s obsahem elementu |
{ |
var str="" |
for (var i=0;i < obj.childNodes.length;i++) |
{ |
if (obj.childNodes[i].nodeType==1) // ELEMENT_NODE |
str += tocGetText(obj.childNodes[i]) |
else if (obj.childNodes[i].nodeType==3) // TEXT_NODE |
str += obj.childNodes[i].data |
} |
return str |
} |
|
var tocGlobalContext=0 // pro unikátní kotvy ve značce <a> |
|
function tocHeaders(el,obj,depth) |
// Proleze hierarchickou strukturu a najde vsechny nadpisy |
// do zadané úrovně včetně. |
{ |
var tagList = "H1;H2;H3;H4;H5;H6;H7;" |
if (tagList.indexOf(obj.tagName+";")>=0) // je to nadpis |
if (obj.tagName.charAt(1)<=depth) // úroveň nadpisu |
{ |
// Vytvoř položku seznamu |
var eLI = document.createElement("li") // položka seznamu |
var eA = document.createElement("a") // uvnitř link |
var eLIText = document.createTextNode(tocGetText(obj)) // uvnitř text |
eLI.className="Toc" + obj.tagName // úroveň nadpisu do class |
eA.href="#_Toc_"+tocGlobalContext // cíl odkazu |
eA.appendChild(eLIText) // vlož text do odkazu |
eLI.appendChild(eA) // vlož odkaz do položky seznamu |
el.appendChild(eLI) // vlož položku seznamu do seznamu |
|
// Přidej k nadpisu kotvu (znackou <a>) |
var anchor=document.createElement("a") |
anchor.id="_Toc_"+tocGlobalContext++ // unikátní jména kotev |
obj.appendChild(anchor) // přidej kotvu k nadpisu |
} |
for (var i=0;i < obj.childNodes.length;i++) // rekurze |
if (obj.childNodes[i].nodeType==1) |
tocHeaders(el,obj.childNodes[i],depth) |
} |
|
|
function tocPutToc(objToc) |
// Rekurzivně projdi strom dokumentu a na všechna místa kam patří |
// vlož seznam. Místo je ozačeno značkou s id="PutTocHere". |
// Volitelně může být uveden parametr Class="x", kde x udává hloubku |
// zpracovávaných nadpisů. |
{ |
var cl=objToc.className.split(" ") // vezmi class a rozděl ho na slova |
if (cl[0].toUpperCase()=="PutTocHere".toUpperCase()) |
{ |
var depth=2 // default hodnota hloubky |
for (var i=1;i<cl.length;i++) |
{ |
if (cl[i]!="") // preskoč prázdné položky (IE6) |
{ |
depth=cl[i] // byla zadána i druhá hodnota |
break |
} |
} |
|
var toc = document.createElement("ul") // Toc je nečíslovaný seznam |
toc.className="Toc" // s Class="Toc" |
|
var objHx = document.getElementsByTagName("body")[0] // Odtud začínáme |
tocHeaders(toc,objHx,depth) // projdi všechny nadpisy |
objToc.appendChild(toc) // přidej Toc jako jeho dítě |
} |
// Rekurzivní procházení dětí |
for (var i=0;i < objToc.childNodes.length;i++) |
if (objToc.childNodes[i].nodeType==1) // ELEMENT_NODE |
(tocPutToc(objToc.childNodes[i])) |
} |
|
|
function doLoad() |
// Tato funkce se spustí při načtení celé stránky. |
{ |
// Najdi všechna místa pro seznam |
var objToc = document.getElementsByTagName("body")[0] // Odtud začínáme |
tocPutToc(objToc) |
} |
|
|
// Zaregistruj výkonný skript po načtení celé stránky |
window.onload = doLoad |