Packages
floki
0.6.1
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.1
0.37.0
0.36.3
0.36.2
0.36.1
0.36.0
0.35.4
0.35.3
0.35.2
0.35.1
0.35.0
0.34.3
0.34.2
0.34.1
0.34.0
0.33.1
0.33.0
0.32.1
0.32.0
0.31.0
0.30.1
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.1
0.23.0
0.22.0
0.21.0
0.20.4
0.20.3
0.20.2
0.20.1
0.20.0
0.19.3
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.2
0.17.1
0.17.0
0.16.0
0.15.0
0.14.0
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.0
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.1
0.1.0
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Floki is a simple HTML parser that enables search for nodes using CSS selectors.
Current section
86 Versions
Jump to
Current section
86 Versions
Compare versions
4
files changed
+16
additions
-15
deletions
| @@ -43,7 +43,7 @@ Floki.find(html, "#content") | |
| 43 43 | Floki.find(html, "p.headline") |
| 44 44 | # => [{"p", [{"class", "headline"}], ["Floki"]}] |
| 45 45 | |
| 46 | - Floki.find(html, "p.headline") |
| 46 | + Floki.find(html, "p.headline") |
| 47 47 | |> Floki.raw_html |
| 48 48 | # => <p class="headline">Floki</p> |
| 49 49 | |
| @@ -102,7 +102,7 @@ You can install Floki by adding a dependency to your mix file (mix.exs): | |
| 102 102 | ```elixir |
| 103 103 | defp deps do |
| 104 104 | [ |
| 105 | - {:floki, "~> 0.5"} |
| 105 | + {:floki, "~> 0.6"} |
| 106 106 | ] |
| 107 107 | end |
| 108 108 | ``` |
| @@ -136,7 +136,7 @@ Floki.find(html, ".example") | |
| 136 136 | To convert your node tree back to raw HTML (spaces are ignored): |
| 137 137 | |
| 138 138 | ```elixir |
| 139 | - Floki.find(html, ".example") |
| 139 | + Floki.find(html, ".example") |
| 140 140 | |> Flok.raw_html |
| 141 141 | # => <div class="example"></div> |
| 142 142 | ``` |
| @@ -22,4 +22,4 @@ | |
| 22 22 | [{<<"app">>,<<"mochiweb">>}, |
| 23 23 | {<<"optional">>,false}, |
| 24 24 | {<<"requirement">>,<<"~> 2.12.2">>}]}]}. |
| 25 | - {<<"version">>,<<"0.6.0">>}. |
| 25 | + {<<"version">>,<<"0.6.1">>}. |
| @@ -94,27 +94,28 @@ defmodule Floki do | |
| 94 94 | def raw_html(html_tree), do: raw_html(html_tree, "") |
| 95 95 | defp raw_html([], html), do: html |
| 96 96 | defp raw_html(tuple, html) when is_tuple(tuple), do: raw_html([tuple], html) |
| 97 | - defp raw_html([value|tail], html) when is_binary(value), do: raw_html(tail, html <> value) |
| 98 | - defp raw_html([{elem, attrs, value}|tail], html) do |
| 99 | - raw_html(tail, html <> tag_for(elem, attrs |> tag_attrs, value)) |
| 97 | + defp raw_html([string|tail], html) when is_binary(string), do: raw_html(tail, html <> string) |
| 98 | + defp raw_html([{:comment, comment}|tail], html), do: raw_html(tail, html <> "<!--#{comment}-->") |
| 99 | + defp raw_html([{type, attrs, children}|tail], html) do |
| 100 | + raw_html(tail, html <> tag_for(type, tag_attrs(attrs), children)) |
| 100 101 | end |
| 101 102 | |
| 102 103 | defp tag_attrs(attr_list) do |
| 103 104 | attr_list |
| 104 | - |> Enum.reduce("", fn({attr, value}, t) -> ~s(#{t} #{attr}="#{value}") end) |
| 105 | + |> Enum.reduce("", fn({attr, value}, attrs) -> ~s(#{attrs} #{attr}="#{value}") end) |
| 105 106 | |> String.strip |
| 106 107 | end |
| 107 108 | |
| 108 | - defp tag_for(elem, attrs, _value) when elem in @self_closing_tags do |
| 109 | + defp tag_for(type, attrs, _children) when type in @self_closing_tags do |
| 109 110 | case attrs do |
| 110 | - "" -> "<#{elem}/>" |
| 111 | - _ -> "<#{elem} #{attrs}/>" |
| 111 | + "" -> "<#{type}/>" |
| 112 | + _ -> "<#{type} #{attrs}/>" |
| 112 113 | end |
| 113 114 | end |
| 114 | - defp tag_for(elem, attrs, value) do |
| 115 | + defp tag_for(type, attrs, children) do |
| 115 116 | case attrs do |
| 116 | - "" -> "<#{elem}>#{raw_html(value)}</#{elem}>" |
| 117 | - _ -> "<#{elem} #{attrs}>#{raw_html(value)}</#{elem}>" |
| 117 | + "" -> "<#{type}>#{raw_html(children)}</#{type}>" |
| 118 | + _ -> "<#{type} #{attrs}>#{raw_html(children)}</#{type}>" |
| 118 119 | end |
| 119 120 | end |
| @@ -3,7 +3,7 @@ defmodule Floki.Mixfile do | |
| 3 3 | |
| 4 4 | def project do |
| 5 5 | [app: :floki, |
| 6 | - version: "0.6.0", |
| 6 | + version: "0.6.1", |
| 7 7 | name: "Floki", |
| 8 8 | elixir: ">= 1.0.0", |
| 9 9 | package: package, |