Current section

86 Versions

Jump to

Compare versions

7 files changed
+36 additions
-14 deletions
  @@ -100,7 +100,7 @@ Add Floki in your `mix.exs`, as a dependency:
100 100 ```elixir
101 101 defp deps do
102 102 [
103 - {:floki, "~> 0.10.1"}
103 + {:floki, "~> 0.11.0"}
104 104 ]
105 105 end
106 106 ```
  @@ -18,8 +18,8 @@
18 18 {<<"maintainers">>,[<<"Philip Sampaio Silva">>]}.
19 19 {<<"name">>,<<"floki">>}.
20 20 {<<"requirements">>,
21 - [[{<<"app">>,<<"mochiweb_html">>},
22 - {<<"name">>,<<"mochiweb_html">>},
21 + [[{<<"app">>,<<"mochiweb">>},
22 + {<<"name">>,<<"mochiweb">>},
23 23 {<<"optional">>,false},
24 24 {<<"requirement">>,<<"~> 2.15">>}]]}.
25 - {<<"version">>,<<"0.10.1">>}.
25 + {<<"version">>,<<"0.11.0">>}.
  @@ -74,7 +74,7 @@ defmodule Floki do
74 74 Parser.parse(html)
75 75 end
76 76
77 - @self_closing_tags ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "mete", "param", "source", "track", "wbr"]
77 + @self_closing_tags ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"]
78 78
79 79 @doc """
80 80 Converts HTML tree to raw HTML.
  @@ -149,6 +149,16 @@ defmodule Floki do
149 149 Finder.find(html_tree, selector)
150 150 end
151 151
152 + def transform(html_tree_list, transformation) when is_list(html_tree_list) do
153 + html_tree_list |> Enum.map(fn
154 + html_tree ->
155 + Finder.apply_transformation(html_tree, transformation)
156 + end)
157 + end
158 + def transform(html_tree, transformation) do
159 + Finder.apply_transformation(html_tree, transformation)
160 + end
161 +
152 162 @doc """
153 163 Returns the text nodes from a HTML tree.
154 164 By default, it will perform a deep search through the HTML tree.
  @@ -30,6 +30,18 @@ defmodule Floki.Finder do
30 30 find_selectors(html_tree, [selector])
31 31 end
32 32
33 + def apply_transformation({name, attrs, rest}, transformation) do
34 + {new_name, new_attrs} = transformation.({name, attrs})
35 +
36 + new_rest = Enum.map(rest, fn(html_tree) ->
37 + apply_transformation(html_tree, transformation)
38 + end)
39 +
40 + {new_name, new_attrs, new_rest}
41 + end
42 +
43 + def apply_transformation(other, _transformation), do: other
44 +
33 45 defp find_selectors(html_tree, selectors) do
34 46 html_tree
35 47 |> traverse([], selectors, [])
  @@ -1,4 +1,6 @@
1 1 defmodule Floki.SelectorParser do
2 + require Logger
3 +
2 4 @moduledoc """
3 5 Parses a list of tokens returned from `SelectorTokenizer` and transfor into a `Selector`.
4 6 """
  @@ -59,8 +61,7 @@ defmodule Floki.SelectorParser do
59 61 do_parse(t, %{selector | combinator: combinator})
60 62 end
61 63 defp do_parse([{:unknown, _, unknown}|t], selector) do
62 - # TODO: find a better way to notify unknown tokens
63 - IO.puts("Unknown token #{inspect unknown}. Ignoring.")
64 + Logger.warn("Unknown token #{inspect unknown}. Ignoring.")
64 65
65 66 do_parse(t, selector)
66 67 end
  @@ -84,8 +85,7 @@ defmodule Floki.SelectorParser do
84 85 consume_attribute(:done, t, attr_selector)
85 86 end
86 87 defp consume_attribute(:consuming, [unknown|t], attr_selector) do
87 - # TODO: find a better way to notify unknown tokens
88 - IO.puts("Unknown token #{inspect unknown}. Ignoring.")
88 + Logger.warn("Unknown token #{inspect unknown}. Ignoring.")
89 89 consume_attribute(:consuming, t, attr_selector)
90 90 end
Loading more files…