New Release! Now uses lexbor_erl

CIModestEx versionHex.pm

humble by Eliricon from the Noun Project

ModestEx

A library to do pipeable transformations on html strings with CSS selectors, e.g. find(), prepend(), append(), replace() etc.

Elixir wrapper for lexborisov’s ModestLexbor C Library.

Lexbor browser engine crafted entirely in C (there’s no school like the old school)

All Lexbor-related features are implemented as a port binding through the Erlang lexbor_erl library.

For news and updates please check out the forum discussion.

Example

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

Breaking Changes

Please note, after migrating to lexbor_erl not all features are supported. See CHANGELOG

Supported CSS Selectors

All common CSS Selectors are supported. Total 38 selector patterns implemented. See complete list of supported CSS selectors.

Installation

Available on hex.

def deps do
  [
    {:modest_ex, "~> 2.0.0"}
  ]
end

Target dependencies

macOS:

brew install lexbor

Ubuntu/Debian:

sudo apt-get install liblexbor-dev

From source:

git clone https://github.com/lexbor/lexbor.git
cd lexbor && mkdir build && cd build
cmake .. && make && sudo make install

Compile and test

mix deps.get
mix compile
mix test

Roadmap

See CHANGELOG.

License

ModestEx is under LGPL license. Check the LICENSE file for more details.

Icon Credit

humble by Eliricon from the Noun Project