abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 11:55 | Pozvánky

    Dnes startuje desátý ročník oblíbené kyberbezpečnostní soutěže The Catch organizované Forenzní laboratoří CESNETu. Letos zavede soutěžící do světa národních výzkumných a vzdělávacích sítí (NREN). Čekají na vás tematické úlohy založené na principu Capture the Flag (CTF), hledání ukrytých flagů i zajímavé ceny. Otestujte své schopnosti a vyrazte na lov flagů.

    Ladislav Hagara | Komentářů: 0
    včera 20:22 | Komunita

    Byly zpracovány a na YouTube zveřejněny videozáznamy z konference LinuxDays 2026.

    Ladislav Hagara | Komentářů: 0
    včera 18:44 | Zajímavý software

    Německý startup Aleph Alpha k příležitosti výročí sjednocení Německa zveřejnil open-weight jazykový model Kolibri, vyvíjený s ohledem na unijní pojetí autorského práva, ochranu osobních údajů GDPR a nařízení EU o umělé inteligenci, jehož 'Kodexu správné praxe' je Aleph Alpha signatářem. Výsledkem tohoto přístupu je transparentnější technologie, kterou například budou moci využívat evropské veřejné instituce, ovšem za cenu

    … více »
    AfD 💙 | Komentářů: 1
    včera 18:33 | IT novinky

    Nvidia zveřejnila návrh nové bezpečnostní platformy pro nasazování AI agentů. Jedná se o nasazení AI za použití OpenShell a Sentry, dvou oddělených bezpečnostních vrstev, v nichž může Sentry monitorovat a vyhodnocovat chování AI v OpenShellu tak, že ho v krajním případě až vypne. Mělo by to zabránit dalším únikům AI ze sandboxu.

    vencour | Komentářů: 1
    3.10. 11:33 | Komunita

    Přímý přenos (YouTube) z konference LinuxDays 2026, jež probíhá tento víkend v Praze v prostorách FIT ČVUT. Na programu je spousta zajímavých přednášek.

    Ladislav Hagara | Komentářů: 2
    3.10. 02:44 | Nová verze

    Byla vydána nová verze 0.17.0 programovacího jazyka Zig (Codeberg, Wikipedie). Přispělo 206 vývojářů. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    2.10. 21:00 | Zajímavý projekt

    Open-source projekt OpenDLSS-NR je 'bitově přesná reimplementace' neuronové rendrovací sítě DLSS 5 od společnosti NVIDIA, jenže pro grafické API Vulkan (DLSS slouží k vylepšování klasickým způsobem vyrendrovaných snímků pomocí lokálních modelů umělé inteligence, a to v reálném čase). Projekt není nijak spojen se společností NVIDIA, je pouze pro OS Windows a natrénované váhy modelu si uživatelé musí obstarat sami. Zdrojový kód je k dispozici na GitHubu, pod licencí MIT s výjimkou pro komponenty třetích stran.

    AfD 💙 | Komentářů: 0
    2.10. 20:55 | Zajímavý software

    Společnost Cloudflare představila Clef a Clef-Flash, open-source rozhodovací modely určené pro rychlou a konzistentní klasifikaci vstupů. Na rozdíl od klasických LLM vracejí tyto modely deterministické striktně typované strukturované odpovědi s exaktními pravděpodobnostmi, tedy odpovědi ve stylu přelomového modelu Jev.

    … více »
    AfD 💙 | Komentářů: 1
    2.10. 04:44 | Nová verze

    Byla vydána beta verze Ubuntu 26.10 s kódovým názvem Stonking Stingray. Přehled novinek v poznámkách k vydání. Dle plánu by Ubuntu 26.10 mělo vyjít 15. října 2026.

    Ladislav Hagara | Komentářů: 0
    1.10. 22:22 | Nová verze

    Byla vydána verze 1.99.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 6
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2796 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník
    Štítky: není přiřazen žádný štítek

    Užitečné skripty 3: automaticky generovaný obsah v HTML

    11.3.2007 21:49 | Přečteno: 2573× | Linux

    Dnešní téma nebude úplně linuxové, i když zkušený demagog by jistě zdůvodnil, že do linuxu patří. Podíváme se, jak udělat v HTML souboru obsah (table of content, abych předešel nedorozumnění), který se generuje úplně sám. Samozřejmě s pomocí Javascriptu.

    Abstrakt

    Určitě jste už někdy potřebovali napsat kratší návod nebo krátký technický dokument. Technická dokumentace by měla mít na začátku obsah (TOC). Musíme tedy najít takový formát, který umí obsah (TOC) vygenerovat sám, protože udržovat dokument i s obsahem (TOC) je mírně řečeno nešikovné.

    Popíšeme si tedy kousek Javascriptu, který umí vygenerovat a zobrazit klikací obsah v HTML. Někdy je totiž použití TeXu nevhodné (čtenář neocení krásné slitky fi, fl, ffi, ffl, vyrovnané mezery ve slově PLAVAT atd. Nehledě k tomu, že na Windows je GSView vzácnost. Stručně řečeno házíme perly sviním). Word nebo Swriter je je trošku jiná kategorie, hodně lidí s nimi nechce mít nic společného a navíc se moc nedá čekat, že příjemce uvidí dokument stejně jako my. (U HTML se to už vůbec nedá čekat, ale s tím se tak nějak počítá).

    Samotný skript

    Skript jsem nevymyslel sám, většinu jsem přebral z [2], ale poskládal jsem ho celý do stavu, ve kterém se dá hned použít. Zde je tedy prázdný dokument, který se bude sám udržovat obsah (TOC), stačí do něj jenom doplnit vlastní text.
    
    
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    2. <html>
    3. <head>
    4. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
    5. <META NAME="AUTHOR" CONTENT="Tomas Penicka">
    6. <!-- Based on http://www.quirksmode.org/dom/toc.html, but some changes were made-->
    7. <script type="text/javascript">
    8. function getElementsByTagNames(list,obj) {
    9. if (!obj) var obj = document;
    10. var tagNames = list.split(',');
    11. var resultArray = new Array();
    12. for (var i=0;i<tagNames.length;i++) {
    13. var tags = obj.getElementsByTagName(tagNames[i]);
    14. for (var j=0;j<tags.length;j++) {
    15. resultArray.push(tags[j]);
    16. }
    17. }
    18. var testNode = resultArray[0];
    19. if (!testNode) return [];
    20. if (testNode.sourceIndex) {
    21. resultArray.sort(function (a,b) {
    22. return a.sourceIndex - b.sourceIndex;
    23. });
    24. }
    25. else if (testNode.compareDocumentPosition) {
    26. resultArray.sort(function (a,b) {
    27. return 3 - (a.compareDocumentPosition(b) & 6);
    28. });
    29. }
    30. return resultArray;
    31. }
    32. function createTOC() {
    33. var y = document.createElement('div');
    34. y.id = 'innertoc';
    35. var a = y.appendChild(document.createElement('span'));
    36. a.onclick = showhideTOC;
    37. a.id = 'contentheader';
    38. a.innerHTML = 'hide page contents';
    39. var z = y.appendChild(document.createElement('div'));
    40. var toBeTOCced = getElementsByTagNames('h2,h3,h4,h5,h6');
    41. if (toBeTOCced.length < 2) return false;
    42. for (var i=0;i<toBeTOCced.length;i++) {
    43. var tmp = document.createElement('a');
    44. tmp.innerHTML = toBeTOCced[i].innerHTML;
    45. z.appendChild(tmp);
    46. tmp.className = 'indent' + toBeTOCced[i].nodeName.substring(1);
    47. var headerId = toBeTOCced[i].id || 'link' + i;
    48. tmp.href = '#' + headerId;
    49. toBeTOCced[i].id = headerId;
    50. }
    51. return y;
    52. }
    53. var TOCstate = 'block';
    54. function showhideTOC() {
    55. TOCstate = (TOCstate == 'none') ? 'block' : 'none';
    56. var newText = (TOCstate == 'none') ? 'show page contents' : 'hide page contents';
    57. document.getElementById('contentheader').innerHTML = newText;
    58. document.getElementById('contentheader').onclick = showhideTOC;
    59. document.getElementById('innertoc').lastChild.style.display = TOCstate;
    60. alert();
    61. }
    62. </script>
    63. <style type="text/css">
    64. #toc a {display: block; margin-top: 2pt; background-color: #EEEEEE;}
    65. #toc a:hover {background-color: #CCCCFF;}
    66. .indent2 {margin-left: 0em;}
    67. .indent3 {margin-left: 2em;}
    68. .indent4 {margin-left: 4em;}
    69. .indent5 {margin-left: 6em;}
    70. .indent6 {margin-left: 8em;}
    71. </style>
    72. <title></title>
    73. </head>
    74. <body onLoad="document.getElementById('toc').appendChild(createTOC());">
    75. <!-- The following DIV is exactly the place, where to TOC will be located, don't remove this -->
    76. <div id="toc"></div>
    77. </body>
    78. </html>
    Lehké vysvětlení: Skript jsem testoval ve Firefoxu (Linux i Windows) a IE6. V obojím funguje.

    Chtěl jsem ještě přidat odkaz na příklad, ale zápisek už jsem uložil. (To byl vtip, ve skutečnosti jsem chtěl přidat k zápisku přílohu dostal jsem chybovou hlášku "přístup odmítnout")

    Odkazy

    1. http://www.quirksmode.org/dom/getElementsByTagNames.html
    2. http://www.quirksmode.org/dom/toc.html

    Místa k vylepšení, otázky

    1. Odkazy v obsahu mají nepříjemnou vlastnost--aktivní je celý řádek, ne jenom text. Dá se to nějak snadno zlepšit?
    2. Uměl by někdo přidat automatické číslování?
    3. Nadpisy v HTML se dost špatně opticky odlišují. Šlo by zařídit, aby i text dokumentu byl odražený od levého kraje podobně jako položky obsahu?
           

    Hodnocení: 100 %

            špatné • dobré        

    Anketa

    Shledali jste skript užitečným? (V případě záporného hodnocení napište důvody v diskusi)
     (15 %)
     (23 %)
     (15 %)
     (46 %)
    Celkem 13 hlasů

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    11.3.2007 22:49 anicka | blog: ze_zivota
    Rozbalit Rozbalit vše Re: Užitečné skripty 3: automaticky generovaný obsah v HTML
    Pokud jde o TeX, Windows a perly svinim: cspdftex mi vzdycky chodil docela pekne a psat v TeXu da IMHO min prace nez psat v cemkoliv jinem. Ale proti gustu... :-)
    ^D
    12.3.2007 09:40 botanicus | blog: Botanicusovi povzdechy | Prachatice
    Rozbalit Rozbalit vše Re: Užitečné skripty 3: automaticky generovaný obsah v HTML
    +1
    ... mam chut na jablicka ;)
    12.3.2007 11:55 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
    Rozbalit Rozbalit vše Re: Užitečné skripty 3: automaticky generovaný obsah v HTML
    Spát v plaintextu je ještě méně práce, jinak taky LaTeX. :-)
    12.3.2007 13:22 Tomáš | skóre: 31 | blog: Tomik
    Rozbalit Rozbalit vše Re: Užitečné skripty 3: automaticky generovaný obsah v HTML
    Spát rozhodně. :-)

    TeX samozřejmě používám raději, mám plno svých maker pro plain (LaTeX moc nemusím). Někdy je ale lepší sáhnout po tom, co umí i kolegové, aby mohli opravovat chyby apod.

    11.3.2007 23:44 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
    Rozbalit Rozbalit vše Re: Užitečné skripty 3: automaticky generovaný obsah v HTML
    Používat innerHTML je poněkud nečisté, co takhle zkusit metody cloneNode a replaceData?

    Ideální řešení by stavělo na DOM objektu NodeIterator. Bohužel jeho implementace v prohlížečích je problematická.

    Odpovědi na otázky

    1. Protože jste element a učinil blokovým elementem. Čisté řešení je použití zanořených seznamů a element a ponechat řádkovým.
    2. Elegantní řešení je obsaženo v předešlé odpovědi.
    3. Řešení spočívá v přiřazení záporného levého okraje nadpisům a kladného levého okraje předku všech textů.
    12.3.2007 08:56 Tomáš | skóre: 31 | blog: Tomik
    Rozbalit Rozbalit vše Re: Užitečné skripty 3: automaticky generovaný obsah v HTML
    Díky za odpovědi, ještě mám pár komentářů.
    1. Jak moc by to zkomplikovalo kód? Přeci jenom jsem se snažil o co nejjednodušší řešení
    2. A co číslování v textu?
    3. To je dobý hack. Až budu mít čas, tak si to přepíšu.
    12.3.2007 09:40 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
    Rozbalit Rozbalit vše Re: Užitečné skripty 3: automaticky generovaný obsah v HTML
    1. Záleží, jak elegantně byste to napsal. ;-) Lze to napsat jako cyklus odhadem s 15–20 řádky kódu.
    2. Ideálně CSS 2.1 kapitola 12.4, v prohlížečích bohužel příliš nepodporováno. Jinak javascript na 10 řádků.
    12.3.2007 08:09 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
    Rozbalit Rozbalit vše Re: Užitečné skripty 3: automaticky generovaný obsah v HTML
    Nemám rád zbytečný javascript. Ah, to není pravda, nenávidím ho! Proč při psaní dokumentu prostě nezvolit vhodný způsob, který ho vygeneruje automaticky? Používám Docbook, generuje číslování, toc a vše co potřebuju. Proti javascriptu má tu velkou výhodu, že funguje i v lynxu.
    -- Nezdar není hanbou, hanbou je strach z pokusu.
    12.3.2007 08:51 Tomáš | skóre: 31 | blog: Tomik
    Rozbalit Rozbalit vše Re: Užitečné skripty 3: automaticky generovaný obsah v HTML
    Plně souhlasím s námitkou (javascript taky moc nemusím), ale někdy prostě nemůžu použít pořádné řešení. První důvod je ten, že Docbook nemumím používat. Druhý důvod je, že dokument musí být univerzálně přenositelný a musí jít opravit odkudkoliv (ne všechny počítače mají nainstalovaný patřičný software). Třetí důvod je, si nemůžu vybírat programové prostředí. Prostě si na počítač nesmím instalovat všechno, na co si vzpomenu.
    Josef Kufner avatar 26.1.2012 18:45 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Užitečné skripty 3: automaticky generovaný obsah v HTML

    Založit nové vlákno • Nahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.