Comments (8)
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.
Ooops, unary operators (!, -, ~) also have the same problem.
from pug.
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.
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.
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.
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.
Available now in Version 2.4.0.
from pug.
Complex calculs with js variable syntaxes are now possible in expressionLanguage js mode.
from pug.
Related Issues (20)
- syntax error, unexpected 'idx' (T_STRING), expecting ';' HOT 1
- Support template literals HOT 1
- Undefined variable fatal error appears on quoted Vue.js variable HOT 13
- Ternary conditional operator fails with linebreak HOT 6
- read-only cache directory HOT 20
- Undefined variable when using mixin with concatenation HOT 3
- Accessing helper functions in a namespace HOT 4
- PHP 7.4 with Pug 2.7.5 minor correction HOT 3
- Compatibility problem with laracast HOT 4
- Interpolation does not support null coalescing operator HOT 4
- enable_profiler => true shows php notices (undefined index) HOT 5
- Apostrophe is escaped HOT 2
- Option to disable html minficiation HOT 1
- Bug when using combinaison of mixins with block in iteration
- Incompatibility with composer 2.0 HOT 1
- Tag Name error HOT 5
- PHP 8 support? HOT 3
- How do i convert back to HTML and keep the variable intact? HOT 1
- Deprecation warning in PHP 8.1 for null values HOT 1
- Pug 2.7.6 minor correction to avoid warning with block append usage HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pug.