Comments (8)
I'm on board with this; seems useful enough and can't think of a reason to render the value undefined
like ever
from nanohtml.
I don't think we have much control over what happens within the expression of a template literal.
Although I think we should just make it smarter about interpreting booleans for attributes:
html`<input type="checkbox" name="reviewed" checked=${data.reviewed} />`
Would render if true
:
<input type="checkbox" name="reviewed" checked="checked" />
and if false
:
<input type="checkbox" name="reviewed" />
from nanohtml.
I agree with this issue, it is actually implemented with Babel/JSX.
Those falsy values should be forgotten (not numbers):
- false
- null
- undefined
- empty string
Let's compare:
❌ html`<input value="${data.value ? data.value : ''}" />`
✅ html`<input value="${data.value}" />`
Declarative conditional
❌ html`<div>${data.alert ? html`<x-alert />` : ''}</div>`
✅ html`<div>${data.alert && html`<x-alert />}</div>`
Declarative switch case with three ternary operators
❌ html`<div>${data.option === 1 ? html`<x-option1 />` : (data.option === 2 ? html`<x-option2 />` : html`<x-option3 />`)}</div>`
✅ html`<div>
${data.option === 1 && html`<x-option1 />}
${data.option === 2 && html`<x-option2 />}
${data.option === 3 && html`<x-option3 />}
</div>`
The idea is to keep it declarative (no if/else/swtich) and lisible as possible.
What do you think?
from nanohtml.
I’m on board with this idea
from nanohtml.
Are there any advancements on this ? It seems that it is "supported" syntaxwise but a false value is rendered as the string "false".
I think that it would be best to suppress falsey outputs from the expressions - the only issue being rendering "false" from ${false}, but I think this is much less useful than the simpler conditional rendering ^^.
Thoughts ? Should be an easy fix.
from nanohtml.
I'm going to be diving back into the Choo ecosystem in a big way over the coming months. This is something I would like to see land as well.
from nanohtml.
The type tests in hyperx show that the following values will render empty:
- null
- undefined
- empty string (test is not written, but I wrote a test and will submit a PR)
0
does not render empty thankfully.
I see only two problems making this change.
- Change
false
to render empty would be a breaking change - I have no idea where in the code to make that change because the code is rather dense. So I could use a hand with that (@goto-bus-stop ?)
from nanohtml.
@mjstahl yeah, hyperx is not an easy codebase. i'd have to go in with some console.logs myself to be sure, but I think the places to look at would be the places that call strfn
and concat
. Those functions are used to stringify text and attribute values and to concatenate them if there is a ${templatePart}
inside.
from nanohtml.
Related Issues (20)
- `default` alias not defined on server.js HOT 4
- onclick Event Handlers with nanohtml/raw HOT 1
- Support custom elements V1 extension of built-in elements
- Cannot find module 'estraverse' HOT 5
- browserify transform sourcemaps only working partially HOT 1
- SyntaxError: Octal escape sequences are not allowed in template strings
- The qualified name provided ('clipPath"') contains the invalid character '"'. HOT 1
- Support array for multiple roots?
- Svgs elements not created properly HOT 2
- Browserify transform does not work for code transpiled from Typescript HOT 1
- Custom DOM library support on Node.js (e.g. JSDOM) HOT 3
- Text node as a root ignores the following element
- Way to keep whitespaces intact? HOT 2
- Valueless attributes gets unexpected default value
- Unclosed tags insert unexpected text node
- Support for conditional attributes? HOT 6
- bundle.min.js in npm package doesn't add html to window object HOT 1
- autofocus on input HOT 2
- babel + rollup import error HOT 4
- Question on upgrading from [email protected] HOT 2
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 nanohtml.