Escapování proměnné v JavaScriptu

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

Ahoj,
Snažím se uvnitř JavaScriptu vypsat neescapovanou proměnnou, ale nedaří se mi to, nevíte kde by mohla být chyba?

{$test} // vypíše escapované
{$test|noescape} //nevypíše nic

Používám Nette 2.4

iNviNho
Člen | 352
+
0
-

Ja celý život v JS vypisujem takto (ak to už nefunguje na 2.4, tak sa ospravedlňujem)

<?php
{!$test}
?>

Editoval iNviNho (10. 8. 2016 16:18)

GEpic
Člen | 566
+
0
-

iNviNho napsal(a):

Ja celý život v JS vypisujem takto (ak to už nefunguje na 2.4, tak sa ospravedlňujem)

<?php
{!$test}
?>

To je deprecated

Editoval GEpic (10. 8. 2016 16:19)

Ages
Člen | 128
+
0
-

iNviNho napsal(a):

Ja celý život v JS vypisujem takto (ak to už nefunguje na 2.4, tak sa ospravedlňujem)

<?php
{!$test}
?>

Ano, je to deprecated, ale i když se použije tak je výsledek stejný → nevypíše nic

Editoval Ages (10. 8. 2016 17:22)

Spectator
Člen | 48
+
0
-

Hmm,

taktéž používám:

<script type="text/javascript">
	{$js|noescape}
</script>
Jak vypadá zdrojový text?
Ages
Člen | 128
+
0
-

Tady je kompetní kód:

{var $flashData}
	{foreach $flashes as $flash}
	{var $flashData = $flashData.'<span class="'.$flash->type.'">'.$flash->message.'</span>'}
{/foreach}
<script>
r(function(){
	var snackbarContainer = document.querySelector('.mdl-js-snackbar');
    var data = {
    message: {$flashData} , <!-- {$flashData|noescape} → nevypíše nic  -->
    timeout: 6000 };
    snackbarContainer.MaterialSnackbar.showSnackbar(data);
    });
function r(f){ /in/.test(document.readyState)?setTimeout('r('+f+')',9):f()}
</script>

Editoval Ages (10. 8. 2016 17:39)

CZechBoY
Člen | 3608
+
0
-

Proč to vlastně potřebuješ neescapovat?

GEpic
Člen | 566
+
0
-

Podle toho o co se snažíš, tak se to dá celé vyřešit pomocí CSS3.

Navíc podle toho kódu, ty si předpřipravíš všechny flashMessages do jedné proměnné, a tu potom vypíšeš v jednom „snackbaru“?

Editoval GEpic (10. 8. 2016 17:57)

Ages
Člen | 128
+
0
-

@CZechBoY
Protože v současné době to vypíše např:
<span class="success">Tag: <strong>O společnosti</strong> byl upraven.</span>
místo: Tag: O společnosti byl upraven.

@GEpic
Ano, je to tak "snackbary ":https://getmdl.io/…s/index.html#… se vypisují přes sebe, což mi nevyhovuje, tak je chci zobrazit v jednom.

Ještě pokud použiji:

document.write({$flashData});

tak vše proběhne v pořádku a nic není potřeba escapovat.

Editoval Ages (10. 8. 2016 21:06)

CZechBoY
Člen | 3608
+
+1
-

Neescapuje ti to třeba ta JS knihovna?
V JS ti Nette vyescapuje HTML? Tak zkus vytvořit tu proměnnou přes Nette\Utils\Html.

Editoval CZechBoY (10. 8. 2016 21:19)

Ages
Člen | 128
+
0
-

CZechBoY napsal(a):

Neescapuje ti to třeba ta JS knihovna?
V JS ti Nette vyescapuje HTML? Tak zkus vytvořit tu proměnnou přes Nette\Utils\Html.

Díky, to mě vůbec nenapadlo!!!
Celou dobu jsem hledal problém v Nette a ono je to v JS.