I’m having a bit of trouble wrapping my head around how to implement an autolinking feature in my Phoenix application. Something like rails_autolink
from rails (https://github.com/tenderlove/rails_autolink)
The idea is that I want to scan some user-content and replace all urls with link-tags.
Now, I could technically just make a regular expression and just use it with String.replace
to replace the urls, but since I will be using this in combination with text_to_html
to also split the text into paragraphs it becomes a little more complex, since text_to_html
returns a {:safe, string}
tuple. Furthermore when I start replacing the urls by using the Phoenix.HTML.Link.link
it becomes a bit of a mess, since I end up with something like:
["<p>This is a test:\r<br>\n", {:safe, [60, "a", [[32, "class", 61, 34, "embed", 34], [32, "href", 61, 34, "https://www.youtube.com/watch?v=CmAI_MwdASw", 34]], 62, "https://www.youtube.com/watch?v=CmAI_MwdASw", 60, 47, "a", 62]} | "</p>\n"]
Which Phoenix seems to choke on:
ArgumentError at GET /forums/4/forum_topics/16
argument error
nofile
No code available.
:erlang.iolist_to_binary/1
Called with 1 arguments
["<p>This is a test:\r<br>\n", {:safe, [60, "a", [[32, "class", 61, 34, "embed", 34], [32, "href", 61, 34, "https://www.youtube.com/watch?v=CmAI_MwdASw", 34]], 62, "https://www.youtube.com/watch?v=CmAI_MwdASw", 60, 47, "a", 62]} | "</p>\n"]
I think I’m missing something here. What would be the “correct” way to accomplish this?