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 12:22 | Bezpečnostní upozornění

    Další lokální zranitelností Linuxu je ssh-keysign-pwn. Uživatel si může přečíst obsah souborů, ke kterým má právo ke čtení pouze root, například soubory s SSH klíči nebo /etc/shadow. V upstreamu již opraveno [oss-security mailing list].

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

    Singularity (YouTube) je nejnovější otevřený film od Blender Studia. Jedná se o jejich první 4K HDR film.

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

    Vyšla hra Život Není Krásný: Poslední Exekuce (Steam, ProtonDB). Kreslená point & click adventura ze staré školy plná černého humoru a nekorektního násilí. Vžijte se do role zpustlého exekutora Vladimíra Brehowského a projděte s ním jeho poslední pracovní den. Hra volně navazuje na sérii Život Není Krásný.

    Ladislav Hagara | Komentářů: 15
    včera 14:00 | Zajímavý projekt

    Společnost Red Hat představila Fedora Hummingbird, tj. linuxovou distribuci s nativním kontejnerovým designem určenou pro vývojáře využívající AI agenty.

    Pinhead | Komentářů: 6
    včera 02:22 | Zajímavý software

    Hru The Legend of Zelda: Twilight Princess od společnosti Nintendo si lze nově díky projektu Dusklight (původně Dusk) a reverznímu inženýrství zahrát i na počítačích a mobilních zařízeních. Vyžadována je kopie původní hry (textury, modely, hudba, zvukové efekty, …). Ukázka na YouTube. Projekt byl zahájen v srpnu 2020.

    Ladislav Hagara | Komentářů: 0
    včera 01:11 | Nová verze

    Byla vydána nová major verze 29.0 programovacího jazyka Erlang (Wikipedie) a související platformy OTP (Open Telecom Platform, Wikipedie). Detailní přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 0
    13.5. 21:22 | Bezpečnostní upozornění

    Po zranitelnostech Copy Fail a Dirty Frag přichází zranitelnost Fragnesia. Další lokální eskalace práv na Linuxu. Zatím v upstreamu neopravena. Přiřazeno ji bylo CVE-2026-46300.

    Ladislav Hagara | Komentářů: 1
    13.5. 14:00 | Komunita

    Sovereign Tech Agency (Wikipedie) prostřednictvím svého fondu Sovereign Tech Fund podpoří KDE částkou 1 285 200 eur.

    Ladislav Hagara | Komentářů: 8
    13.5. 12:55 | IT novinky

    Google na včerejší akci The Android Show | I/O Edition 2026 (YouTube) představil celou řadu novinek: Gemini Intelligence, notebooky Googlebook, novou generaci Android Auto, …

    Ladislav Hagara | Komentářů: 0
    13.5. 12:33 | IT novinky

    Evropská komise by do léta mohla předložit návrh normy omezující používání sociálních sítí dětmi v zájmu jejich bezpečí na internetu. Prohlásila to včera předsedkyně EK Ursula von der Leyenová, podle níž řada zemí Evropské unie volá po zavedení věkové hranice pro sociální sítě. EU částečně řeší bezpečnost dětí v digitálním prostředí v již platném nařízení o digitálních službách (DSA), podle německé političky to však není dostatečné a

    … více »
    Ladislav Hagara | Komentářů: 51
    Které desktopové prostředí na Linuxu používáte?
     (13%)
     (8%)
     (2%)
     (14%)
     (31%)
     (4%)
     (6%)
     (3%)
     (16%)
     (26%)
    Celkem 1625 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

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

    11.3.2007 21:49 | Přečteno: 2372× | 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áknoNahoru

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