brucepomeroy

brucepomeroy

Specifically when only a substring in an attribute’s value if dynamic. Here’s a concrete example. I’m translating some templates from .leex to .heex. I’m interested in ideas for translating this:

<div class="<%= if @published, do: "bg-green", else: "bg-red" %> text-white text-small border-grey">...</div>

This doesn’t seem to be supported, it generates a compile error:

<div class="{if @published, do: "bg-green", else: "bg-red"} text-white text-small border-grey">...</div>

I could create an additional assign called @bg_color and do this:

<div class="{@bg_color} text-white">...</div>

Or duplicate the common classes like this:

<div class={if @published, do: "bg-green text-white text-small border-grey", else: "bg-red text-white text-small border-grey"}>...</div>

Interested to hear if there are any other approaches.

Thanks!

Showing Posts 1 to 5

axelson

axelson

Scenic Core Team

One way you could write this is:
<div class={“#{if @published, do: "bg-green", else: "bg-red"} text-white text-small border-grey"}>...</div>

Although there may be a clearer way.

trisolaran

trisolaran

Another way to do this:

<div class={["text-white", "text-small", "border-grey"] ++ [(if @published, do: "bg-green", else: "bg-red")]}>...</div>

That is, using a list instead of string interpolation. This is however neither more concise nor better than @axelson’s solution, it’s just different. It may appeal to you if you prefer to use a list for your classes.

A more elegant way would be if LV allowed things like this:

<div class={%{"bg-green": @published, "bg-red": !@published, "text-small": true ...}}>...</div>

Like some front-end frameworks (e.g. Vuejs) already do. I was told that Surface supports this notation, though I haven’t tested it. I’m sure that LiveView will catch up at some point :slight_smile:

brucepomeroy

brucepomeroy OP

Great, thanks so much @axelson and @trisolaran , both approaches are big improvements. Thanks again!

emiltin

emiltin

You can join strings:

<div class={"text-white text-small border-grey " <> if @published, do: "bg-green", else: "bg-red"}>...</div>

Note the space after “border-gray”

krishandley

krishandley

Depending on your use case you could also do this…

<div data-published={@published} class="bg-gray-500 data-[published]:bg-green-500"></div>
— All posts loaded —

Where Next? Top

Trending in Questions Top

water
I’m aware of 2 such projects, are there others? git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New

Other Trending Topics Top

bartblast
Hologram v0.12.1 has been released. Bug Fixes Fix the browser painting a frame between an action and a next action it puts with no dela...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews