Nápověda:Neočekávaná odřádkování a mezery

(přesměrováno z Wikipedie:NOM)
Zkratka:
  • WP:NOM

Neočekávaná odřádkování a mezery se na Wikipedii nejčastěji vyskytují při kombinaci dvou šablon nebo podobných prvků (kouzelných slůvek). Skrytá chyba těchto prvků se projeví tím, že v místě jejich použití se vytvoří nežádoucí nový odstavec, případně jen mezera v textu. Při vytváření či úpravě šablon je proto potřeba možnost chyby dobře otestovat. V článcích někdy lze důsledkům zamezit umístěním obou šablon (prvků) na jeden řádek. (Psaní vícera šablon na jeden řádek je ale spíše jen ošklivý workaround, dirty hack, jako trvalé „řešení“ nevhodný. Lze ho však v editačním režimu použít pro potvrzení, že jde opravdu o tento problém, a pro zjištění, která z šablon je příčinou.)

Začlenění do šablony

editovat

Při jakémkoli rozšiřování šablon existuje nebezpečí nechtěného přidání odřádkování. Zkušenosti wikipedistů říkají, že se mezi produkty dvou následných šablon v článcích objevují neočekávaná odřádkování, ačkoli by se měly výsledky těsně dotýkat a navazovat.

  • Způsob vzniku nechtěného odřádkování, ukázka chybného příkladu:
<includeonly>
[[Kategorie:Dummy]]
</includeonly>
<noinclude>

Je vidět, že se do stránek vkládá veškerý výsledek, tedy i odřádkování v kódu šablony: ta tedy mohou vznikat před jí vygenerovaným obsahem, v něm i za ním.

  • Ukázka správného příkladu, bez vzniku nechtěného odřádkování:
<includeonly>[[Kategorie:Dummy]]</includeonly><noinclude>

Otestování nechtěných odřádkování

editovat

Zákeřnost nechtěných odřádkování spočívá ve dvou důvodech: Wiki jediné odřádkování ignoruje, to může vznikat třeba právě v šabloně, a interpretuje ho jen jako mezeru. Ovšem sejdou-li se dvě taková odřádkování za sebou, vzniká neočekávané odřádkování i v samotném článku. Takový souběh však zdaleka nemusí nastat vždy, ani ne často, a v článku se pak těžko dohledává příčina.

Druhá komplikace pro wikipedistu spočívá v nutnosti svou editaci v šabloně řádně otestovat: Například tím, že si ji zkusí použít. V úvahu připadají dva případy testů, kdy se šablona použije obklopena pokusným textem:

  • na jediném řádku, pro triviální otestování případu, kdy by šablona vkládala hned dvě odřádkování najednou
  • a i přísněji ověření případného vkládání byť i jediného přebytečného odřádkování, na hned po sobě následujících řádcích, kam už tedy jedno ze dvou odřádkování bylo vloženo úmyslně. Výsledky se sice mohou objevit nad sebou (například kvůli použití HTML prvku div uvnitř), ovšem mají se těsně dotýkat: Ani zde z použití šablony nesmí vzniknout nechtěné odřádkování.

V jednom řádku

editovat
pokusný text{{šablona-změněná}}pokusný text

s očekávaným výsledkem

pokusný textVýsledek z šablonYpokusný text

Naopak chybně by bylo obojí, jak s odřádkováním před

pokusný text
Výsledek z šablonYpokusný text

tak i za výsledkem.

pokusný textVýsledek z šablonY
pokusný text

Přes více řádků

editovat
pokusný text
{{šablona-změněná}}
pokusný text

s očekávaným výsledkem

pokusný text
Výsledek z šablonY
pokusný text

Naopak chybně by bylo obojí, jak s odřádkováním před

pokusný text
                   
Výsledek z šablonY
pokusný text

tak i za výsledkem.

pokusný text
Výsledek z šablonY
                   
pokusný text

Nechtěné mezery

editovat

V textu se mohou chybně objevovat i neočekávané mezery, například pokusný text Výsledek z šablonY pokusný text. A ačkoli ty zpravidla neznamenají takový problém, jako dohledávání nechtěných odřádkování, i ony jsou chybou k opravení, nešlo-li o úmyslné chování šablony.

Předávání hodnot přes parametry

editovat

Už samotný způsob předání hodnoty do šablony je určující, zda se předaná hodnota otrimuje, či ne: Záleží na použití pojmenovaných nebo i číslovaných parametrů místo anonymních.

  • Mezi těmito voláními šablony s výslovným určením parametru "{{příkladová|1= text }}" a "{{příkladová|1=text}}" není ve výsledku žádný rozdíl: Oba případy dají stejný výsledek "text". Použitím pojmenovaných parametrů se tedy předávaná hodnota textově trimuje, odstraňují se počáteční a koncové mezery.
  • Naproti tomu jiné dva případy se zamlčenými parametry "{{příkladová| text }}" a "{{příkladová|text}}" už budou dávat každý jiný výsledek: " text " proti "text", tedy věrnou kopii předané hodnoty! If the parameter should not be trimmed it has to be unnamed... — (anglicky) meta:Help:Template#Empty vs. undefined  

Je na rozhodnutí wikipedisty, jak má jeho šablona tyto mezery zpracovávat.

Ukázky předávání mezer

editovat
Předávání hodnot pomocí pojmenovaného parametru
kód výsledek: ignoruje vepsané mezery, z okrajů je ořezává (trimming)
abc{{Seznam/link|link= X1 }}xyz abcX1xyz
abc{{Seznam/link|link=X1}}xyz abcX1xyz
abc{{Seznam/link|1= X1 }}xyz abcX1xyz
abc{{Seznam/link|1=X1}}xyz abcX1xyz
Předávání hodnot pomocí anonymního parametru
kód výsledek: citlivý na vepsané mezery (věrné zobrazení)
abc{{Seznam/link| X1 }}xyz abc X1 xyz
abc{{Seznam/link|X1}}xyz abcX1xyz

Text ve wikitabulce zalomený na více řádků

editovat

Bohužel, je hloupým chováním wikitabulek, tabulek vytvořených wikisyntaxí, že první řádek textu zalomeného v buňce na více řádků je ve wikitabulce odsazen vertikální mezerou. Tento jev se běžně projevuje například v infoboxech, při zadávání jedné delší hodnoty zalomeně přes vícero řádků.

Dodaná vertikální mezera vlastně není celý řádek, jde jen o nějaké zvětšené okraje, asi CSS vlastností margin.

Wikitabulka s vertikální mezerou u prvního řádku

editovat
text mezera pod

pokračuje
přes
více
řádků

text mezera nad
pokračuje
přes
více
řádků

{|class="wikitable" align="right" width="120px"
|text mezera pod<br />
pokračuje<br />
přes<br />
více<br />
řádků
|}
{|class="wikitable" align="right" width="120px"
|
text mezera nad<br />
pokračuje<br />
přes<br />
více<br />
řádků
|-
|}

Wikitabulka, obejití

editovat
text
pokračuje
přes
více
řádků

Jediný způsob, jak potíž obejít, je odebrat odřádkování ze zdrojového kódu a ponechat jen HTML lámání do výsledku:

{|class="wikitable" align="right" width="120px"
|text<br />pokračuje<br />přes<br />více<br />řádků
|}

Tím sice vyloučíme vznik vertikálních mezer u řádků textu, ale zase přijdeme o přehlednost zdrojového kódu.

Wikitabulka s vertikální mezerou u prvního i posledního řádku

editovat

Potíž nepomůže obejít ani obalení celého bloku textu do jediné hodnoty pomocí značky <div>:

text vysoký
pokračuje
přes
více
řádků

text nízký

pokračuje
přes
více

řádků
{|class="wikitable" align="right" width="120px"
|<div>
text vysoký<br />
pokračuje<br />
přes<br />
více<br />
řádků
</div>
|}
{|class="wikitable" align="right" width="120px"
|<div>text nízký<br />
pokračuje<br />
přes<br />
více<br />
řádků</div>
|}

Obalením sice přehlednost zdrojového kódu zachováme, avšak neodstraníme vertikální mezery. Obalování do bloku navíc může selhat a způsobit dokonce dvě vertikální mezery... Je totiž třeba ve zdrojovém kódu odřádkovat na začátku i na konci. Obalení tedy nakonec nic nepřináší.

Wikitabulka s vertikální mezerou, závěr

editovat

Je-li záměrem mít vzhled tabulek pod kontrolou, mít je kompaktní a minimalizovat jejich výšku, nelze než zapisovat všechny jejich vstupy do jediného řádku. To se týká především navigačních šablon na spodcích článků, kde je vertikální rozměr podstatný.