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 04:44 | IT novinky

    U příležitosti 30. výročí vydání počítačové hry Quake byla vydána nová epizoda s názvem Dawn of the Machine (Steam).

    Ladislav Hagara | Komentářů: 3
    včera 16:00 | Bezpečnostní upozornění

    Vládní CERT upozorňuje (𝕏) na sérii bezpečnostních záplat (CVSS 9.9) v produktech Cisco řešících kritické zranitelnosti umožňující obejití autentizace, eskalaci oprávnění, vzdálené spuštění kódu a odepření služby. Úspěšné zneužití může útočníkům umožnit získat neoprávněný přístup k dotčeným systémům, kompromitovat zařízení Cisco Catalyst SD-WAN a Cisco IOS XE, spustit libovolný kód, zpřístupnit citlivé informace nebo narušit dostupnost postižených systémů.

    Ladislav Hagara | Komentářů: 2
    včera 15:33 | IT novinky

    Soud v americkém státě Nové Mexiko ve čtvrtek nařídil internetové společnosti Meta Platforms zaplatit 567 milionů dolarů (téměř 12 miliard Kč) za újmy, které její platformy působí mladým lidem. S přihlédnutím k dřívějšímu verdiktu tak má společnost celkem zaplatit 942 milionů dolarů, což je malý zlomek jejího ročního výnosu, který loni činil 60 miliard dolarů. Čtvrteční verdikt firmě také nařizuje, aby změnila způsob, jakým její

    … více »
    Ladislav Hagara | Komentářů: 10
    včera 12:44 | Humor

    Mark Russinovich (CTO v Microsoft Azure) se na LinkedIn pochlubil svým projektem MS Paint Doom napsaným pomocí Claude. Hru Doom umožňuje hrát v programu Malování (Microsoft Paint). Malování funguje jako monitor. Herní engine (ViZDoom) běží na pozadí a každý vykreslený snímek hry vkládá automaticky přes schránku (clipboard) do Malování.

    Ladislav Hagara | Komentářů: 2
    6.8. 08:00 | IT novinky

    Platformy ChatGPT i Roblox by mohly být zařazeny na seznam mimořádně velkých on-line platforem nebo internetových vyhledávačů, na něž se vztahují zvláštní podmínky podle nařízení o digitálních službách (DSA). Vzhledem k tomu, že ChatGPT i Roblox oznámily počet uživatelů nad prahovou hodnotou DSA, je toto označení „rozhodně možné“ a mohlo by „přijít dříve či později“. On-line platformy a vyhledávače zařazené na seznamy DSA musejí

    … více »
    Ladislav Hagara | Komentářů: 11
    5.8. 17:00 | Zajímavý software

    Společnost Cloudflare představila Cloudflare OS (GitHub), tj. open source platformu navrženou pro integraci umělé inteligence (agentů) přímo do pracovních procesů organizací.

    Ladislav Hagara | Komentářů: 0
    5.8. 12:44 | Nová verze

    Byla vydána nová verze 5.13 svobodného multiplatformního softwaru pro konverzi a zpracování digitálních fotografií primárně ve formátů RAW RawTherapee (Wikipedie). Vedle zdrojových kódů je k dispozici také balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.

    Ladislav Hagara | Komentářů: 0
    4.8. 20:44 | Zajímavý článek

    Jean-Baptiste Kempf na svém blogu představil novou verzi 9.0 "Lei" kolekce svobodného softwaru umožňujícího nahrávání, konverzi a streamovaní digitálního zvuku a obrazu FFmpeg (Wikipedie).

    Ladislav Hagara | Komentářů: 0
    4.8. 20:11 | Komunita

    Richard Hughes oznámil, že službu Linux Vendor Firmware Service (LVFS) umožňující aktualizovat firmware zařízení na počítačích s Linuxem, nově sponzoruje také společnost NVIDIA.

    Ladislav Hagara | Komentářů: 0
    4.8. 12:22 | Zajímavý software

    Edvard Rejthar na blogu zaměstnanců CZ.NIC představil svou aplikaci SlideRshow (GitHub). Funguje jako prohlížeč fotek, ale i jako jejich organizér a prezentátor. Neinstaluje se, běží přímo v prohlížeči. Bez serveru. Offline.

    Ladislav Hagara | Komentářů: 11
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (18%)
     (30%)
     (6%)
     (6%)
     (2%)
     (15%)
     (23%)
    Celkem 2350 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    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: 2505× | 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.