We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
Post 24
Blog Site 02 - Loading Tags/Text Wrap
Published on: 2025-05-06
Tags:
elixir, Blog, Side Project, Ecto, Html/CSS
I wanted to do a quick update to the code for the blog website. I noticed that whenever I wanted to edit a post I would lose all the tags and have to reset them. To start I already had a function that would set the tags (select-able) for a post that had a atom, value pair for selected. defp tag_options(selected_ids \\ []) do list_tags() |> Enum.map(fn tag -> [key: tag.name, value: tag.id, selected: tag.id in selected_ids] end) end As you can see there is the selected: tag.id in selected_ids With that I just need to send in the tags that are part of that post with every time I edit. Ill just put the entire edit function here: def edit(conn, %{"id" => id}) do post = Posts.get_post!(id) |> Repo.preload([:tags]) # preloaded all the needed info changeset = Posts.change_post(post) # need to take the list of tags and grab only the tag.id selected_tags = Enum.map(post.tags, fn tag -> tag.id end) render(conn, :edit, post: post, changeset: changeset, tags: tag_options(selected_tags) ) end It was really as simple as that. Now let's work on a bounding box for the content in a post. When dealing with the text box no dealing with the newlines I had to add this line to the content line: <:item title="Content"> <pre><%= @post.content %></pre> </:item> This made sure that: Preserve all white space (including tabs and line breaks). Use monospaced fonts (by default). Disable wrapping, meaning if a line is too long, it will overflow the container or cause horizontal scrolling. Which created an issue with the long lines that don't have a new line will overflow, but still solved the issue with new-lines being seen. To deal with the new issue I added this to the <pre> class="whitespace-pre-wrap break-words" This is a tailwind version of a CSS that does: <%!-- CSS version --%> white-space: pre-wrap; <%!-- Tailwind --%> whitespace-pre-wrap <%!-- CSS version %> overflow-wrap: break-word; <%!-- Tailwind --%> break-words Now that we see the difference between the 2 we can see what is happening: pre does the same before but adding in the pre-wrap makes sure that the content wraps. break-word This makes sure that any long on-space word will be broken up.
