Elixir library to do pipeable transformations on html strings (with CSS selectors)
A library to do pipeable transformations on html strings with CSS selectors, e.g. find(), prepend(), append(), replace() etc.
Elixir/Erlang bindings for lexborisov's Modest
Modest is a fast HTML renderer implemented as a pure C99 library with no outside dependencies.
All Modest-related features are implemented in C
using my wrapper library modest_html.
The binding is implemented as a C-Node following the excellent example in Overbryd's package nodex. If you want to learn how to set up bindings to C/C++, you should definitely check it out.
C-Nodes are external os-processes that communicate with the Erlang VM through erlang messaging. That way you can implement native code and call into it from Elixir in a safe predictable way. The Erlang VM stays unaffected by crashes of the external process.
For news and updates please check out the forum discussion.
Total 16 features implemented. See complete feature list.
Build transformation pipelines...
test "build up a complete DOM" do
result = ""
|> ModestEx.serialize()
|> ModestEx.append("body", "<div>")
|> ModestEx.set_attribute("div", "class", "col-md-12")
|> ModestEx.append("div", "<div>")
|> ModestEx.set_attribute("div.col-md-12 div", "class", "col-md-6")
|> ModestEx.append("div.col-md-12 div", "<a></a>")
|> ModestEx.set_text("a", "Hello")
copy = ModestEx.find(result, "div.col-md-12 div")
|> ModestEx.set_text("a", "World")
result = ModestEx.insert_after(result, "div.col-md-12 div", copy)
|> ModestEx.set_attribute("div.col-md-6:first-of-type a", "href", "https://elixir-lang.org")
|> ModestEx.set_attribute("div.col-md-6:last-of-type a", "href", "https://google.de")
assert result == "<div class=\"col-md-12\"><div class=\"col-md-6\"><a href=\"https://elixir-lang.org\">Hello</a></div><div class=\"col-md-6\"><a href=\"https://google.de\">World</a></div></div>"
end
All common CSS Selectors are supported. Total 38 selector patterns implemented. See complete list of supported CSS selectors.
Available on hex.
def deps do
[
{:modest_ex, "~> 1.0.4"}
]
end
cmake 3.x
erlang-dev
erlang-xmerl
erlang-parsetools
mix deps.get
mix compile
mix test
git clone [email protected]:f34nk/modest_ex.git
cd modest_ex
All binding targets are added as submodules in the target/
folder.
git submodule update --init --recursive --remote
mix deps.get
mix compile
mix test
mix test.target
Cleanup
mix clean
See CHANGELOG.
:contains(text)
implemented in Modest
ModestEx is under LGPL license. Check the LICENSE file for more details.
humble by Eliricon from the Noun Project