mathan
mathan

Reputation: 133

Conditionals within script. in jade

In Jade, is it possible to create a conditional if statement in a dynamicscript section?

For example:

doctype html
html
 head
  script.
   -if( locals.display_JS )
    console.log("Display_JS is TRUE")
   -else
    console.log("Display_JS is FALSE")

(locals.display_JS is a parameter pass to Jade in res.render.)

If display_JS is true, the desired output should look like:

<script ...>console.log("Display_JS is TRUE")</script>

However the output is:

<script>
 -if( locals.display_JS )
  console.log("Display_JS is TRUE")
 -else
  console.log("Display_JS is FALSE")
</script>

It could be that I am thinking wrong. My objective is to render different javascript functions based on parameters sent to res.render.

Upvotes: 1

Views: 2152

Answers (3)

Rudolfo de Sousa
Rudolfo de Sousa

Reputation: 1

When you use script. everything that comes after will be interpreted as plain text by jade. If you need to mix markup and plain text you can use |. For example:

script
    | function bar(){
    if(true)
      | console.log("Ran this")
    else
      | console.log("Don't run this")
    | }

Upvotes: 0

htafoya
htafoya

Reputation: 19273

It can be done the other way, use the . whenever you want to nest javascript code.

doctype html
html
 head
  script
    if( locals.display_JS )
      .
         /** Some JS code **/
         console.log("Display_JS is TRUE")
    else
      .
         console.log("Display_JS is FALSE")

Upvotes: 2

bartushk
bartushk

Reputation: 414

Jade will not mess with anything within a script block. If you really need to use jade logic inside a script block you can get a little tricky and do something like this:

Router Code:

router.get('/', function(req, res){
    res.render('index', {run_this:true});
}); 

Jade Code:

div
| <script type='text/javascript'>
if(run_this)
    | console.log("Ran this!");
else
    | console.log("Didn't run this");
| </script>

Another approach to running logic based on jade variables within a script tag is to do something like this:

script.
    if(!{run_this}){
        console.log("Ran This!");
    }

Upvotes: 0

Related Questions