Latte vs css – vložení hotového kódu do style tagu
- Gappa
- Nette Blogger | 208
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)
- Gappa
- Nette Blogger | 208
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
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
<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.