Latte vs css – vložení hotového kódu do style tagu

Gappa
Nette Blogger | 208
+
0
-

Ahoj,

buď mi to nemyslí, nebo to nejde? :)

Jde mi o toto:

{var $test = 'body {background: lime;}'}
<style>
	{$test}
</style>

Jenže výsledek je:

<style>
	body \{background\: lime\;\}
</style>

Tedy se to špatně escapuje, resp. latte nepochopí (resp. nevím, jak mu říct), že do <style> chci vypsat opravdu už hotové CSS.

Zdrojové CSS mi chodí z presenteru/komponenty a v šabloně chci mít přístup k style tagu – třeba přidat n:nonce nebo n:cache atp.

Něco podobného chci dělat i s JS, tam se zdroják vloží jako jako řetězec – což také dává ale smysl:

{var $test = 'console.log("foo");'}
<script>
	{$test}
</script>
<script>
	"console.log(\"foo\");"
</script>

Jde to nějak? Nebo to nelze a musím si posílat hotový Nette\Utils\Html objekt?

Edit: noescape je možnost, ale…
Edit2: Dělám to špatně, nebo nefunguje code highlighter?

Editoval Gappa (21. 6. 2022 8:01)

Kamil Valenta
Člen | 815
+
+1
-

A co jiného by escapování mělo escapovat?

Gappa
Nette Blogger | 208
+
+1
-

Něco jiného je tohle:

<style>
	body {
		background: url($imageUrl); // tady je escapování naprosto ok a dává mi smysl
	}
</style>

A tohle:

<style>
	{$uzCeleHotoveCss} // tady je to diskutabilní, ale každopádně výsledek je nefunkční css
</style>

Existuje tohle:

Jenže to je pro celou šablonu, ne pro proměnnou.

Možná prostě chci jen blbost, pak stačí napsat, že to nejde :)

dakur
Člen | 493
+
+4
-

Není náhodou jádrem escapování, že se řetězec na vstupu ošetří, tj. escapuje? Pokud se ti to nehodí, přesně proto existuje |noescape, přijde mi tedy naprosto validní ho použít – pokud si zajistíš, že vstup (tedy v tvém případě CSS string) bude safe. noescape není ultimate evil, jen ho člověk musí používat k tomu, k čemu byl myšlen. 🙂

Editoval dakur (21. 6. 2022 9:12)

Kamil Valenta
Člen | 815
+
+3
-
<style>
	body {
		background: url($imageUrl);
	}
</style>
<style>
	body {
		background: $imgUrl;
	}
</style>
<style>
	body {
		$property;
	}
</style>
<style>
	body $properties;
</style>
<style>
	$element;
    table {
    }
</style>
<style>
	$celeCss;
</style>

Jak chceš určit, kdy to je diskutabilní a kdy to dává smysl? A myslíš, že ta diskuze bude krátká a bude mít jeden závěr? A že bude přínosné, aby každý nosil v hlavě kdy a za jakých podmínek se escapuje a kdy ne? A nesplete to někdo dřív nebo později a nezanese do frontendu díru?

Proměnná se prostě escapuje. Podle kontextu různým způsobem, ale escapuje. Pokud to nechceš a víš, že si to můžeš dovolit, tak ji neescapuj.

Gappa
Nette Blogger | 208
+
0
-

Čím víc nad tím přemýšlím, tím víc to vypadá jako snaha o hranatý kolo.

Od toho existuje noescape, díky :)