Giter Club home page Giter Club logo

Comments (8)

kylekatarnls avatar kylekatarnls commented on May 24, 2024 1

I started to get my hands dirty with expressions handle, and it need to be entirely refactored.

Also, such JS to PHP syntax conversion are yet used by different template engines and framework and is not specific to Pug. So I will try to implement an existing library if I find a good one. Else I will create a separate engine.

from pug.

hax avatar hax commented on May 24, 2024

Ooops, unary operators (!, -, ~) also have the same problem.

from pug.

kylekatarnls avatar kylekatarnls commented on May 24, 2024

You expect + compile to $a + $b, but some people who take templates from a JS environment would expect $a . $b. The operators remain a big problem and touch them is a big risk of regressions for some users. This example is simple but imagine:

p(a=(a+=b + c(d, '+', e + f))= g(h + i) + j("= a + b", a + b)

That can become very tricky. We detect variables and append missing $ after , and (, but this is just to help to migrate from pug-js.

If you want the exact native pug-js behaviour, you can use a wrapper, but you won't be able to call PHP functions/methods or to use instance of your classes in the templates.

That's why I do not plan right now to touch operators and I encourage you to explicitly write PHP code:

p= $a + $b

That's pug-php, the goal is to be able use PHP stuff in pug templates, so this is not a priority.

Thanks anyway.

from pug.

hax avatar hax commented on May 24, 2024

Well, I think wether + should be treat as number add operator or string concat operator is a separate issue. Let me use * as example. What I argue here is a * b be compiled to $a * b is weird and error-prone (it's runtime error and very hard to locate the source in complex case).

From the old jade-php there are many effort to allow both js-like expression or php-like expression. But I had to say it's an unachievable goal and introduce many issues. I totally agree that just write php expression (eg. $a * $b) is a more clear and stable way in pug-php.

In fact the code style of my team require writing php expression in jade-php. But we still meet many syntax problems because there is no option which just stick on php expression and report all syntax error (with template line/col info).

The ideal way I can imagine is:

Add a new option expressionLanguage which could be php, js-like, you-guess.

If php, a * b is compiled to a * b (just treat them as const, though we'd better warn the user for it's not follow UPPER_CASE const name convension)

If js-like, a * b is compiled to $a * $b

If you-guess, a * b is compiled to $a * b 😁

from pug.

kylekatarnls avatar kylekatarnls commented on May 24, 2024

It's a good idea, I like this approach and I will study possibilities. If you want to submit a pull-request for this, please let me know.

from pug.

kylekatarnls avatar kylekatarnls commented on May 24, 2024

Hi, now on the branch js-phpize (use dev-js-phpize version in composer) with the option 'expressionLanguage' => 'js', you can handle some basic JS syntaxes:

p=a + b
p=a * (b - foo.bar)

For the moment, it's available in attributes and tag contents, it wil be introduced step by step in other locations.

And this first step will be merged with the next version.

Thanks,

from pug.

kylekatarnls avatar kylekatarnls commented on May 24, 2024

Available now in Version 2.4.0.

from pug.

kylekatarnls avatar kylekatarnls commented on May 24, 2024

Complex calculs with js variable syntaxes are now possible in expressionLanguage js mode.

from pug.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.