Latte maže argumenty z metod a indexy polí

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Babant
Člen | 4
+
0
-

Ahoj,
narazil jsem na takovou zajímavou chybku při aplikaci Latte filtru na níže uvedený kus kódu.
Syntaxe je nastavená na ‚double‘, ale ve výsledku to nemá vliv.

Template s Latte filterem, které dám jako zdroj kód obsahující

// IE<9
args = [].slice.call( arguments, 0 ),

mi na konci vrátí

// IE<9
args = [].slice.call( arguments, ),

Kritické je to znaménko menší než.

V první řadě jsem se chtěl zeptat, jestli se s tím už někdo nesetkal. A potom, nejsem zrovna expert na vnitřní funkčnost Latte a proto bych uvítal názor někoho, kdo se trošku víc vyzná, než to budu dávat někam do issue trackeru.

(Nette 2.0; PHP 5.3.3)

Babant
Člen | 4
+
0
-

Po dalším zkoumání jsem zjistil, že kritické je nejenom to znaménko <, ale i hodnota toho mizícího parametru.

// <
args = [].slice.call( arguments, 0 ), // nula zůstane

// <#
args = [].slice.call( arguments, 0 ), // nula zůstane

// <0
args = [].slice.call( arguments, 0 ), // nula zůstane ale ten komentář '<0' zmizí

// <9 (nebo jakékoliv číslo větší než nula)
args = [].slice.call( arguments, 0 ), // nula zmizí

// <X
args = [].slice.call( arguments, 0 ), // nula zmizí

// Pokud je místo nuly parametr 1, pak není odstraněn.
// <9
args = [].slice.call( arguments, 1 ), // jednička zůstane

// <0
args = [].slice.call( arguments, 1 ), // jednička zůstane ale komentář '<0' zmizí
Filip Procházka
Moderator | 4668
+
0
-

To bude bug. Bylo by dobré, vyplnit issue na githubu, pokud neumíš anglicky, tak alespoň česky. Díky :)

David Grudl
Nette Core | 8228
+
0
-

A je ten kód korektně uzavřen do značek <script>...</script>? Pokud nejde o HTML ale o JS, je třeba nastavit content-type, například {contentType js}.

Babant
Člen | 4
+
0
-

David Grudl napsal(a):

… je třeba nastavit content-type, například {contentType js}.

Díky Davide, správný content-type ten problém řeší.

Teď jen zjistit, jak ho nastavit přímo v kódu, tzn. bez nutnosti vkládat makro na začátek každého stringu, na který chci latte aplikovat.

Pro syntaxi stačilo nastavit

$latte->parser->defaultSyntax = 'double';

Ale z nějakého důvodu

$latte->compiler->defaultContentType = 'js';

nemá stejný efekt jako {contentType js}.

David Grudl
Nette Core | 8228
+
0
-

Ale mělo by mít. Netuším, kde může být chyba.