Current section

86 Versions

Jump to

Compare versions

4 files changed
+34 additions
-35 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.9.0"}
103 + {:floki, "~> 0.10.1"}
104 104 ]
105 105 end
106 106 ```
  @@ -22,4 +22,4 @@
22 22 {<<"name">>,<<"mochiweb_html">>},
23 23 {<<"optional">>,false},
24 24 {<<"requirement">>,<<"~> 2.15">>}]]}.
25 - {<<"version">>,<<"0.10.0">>}.
25 + {<<"version">>,<<"0.10.1">>}.
  @@ -62,19 +62,18 @@ defmodule Floki.Finder do
62 62 traverse(html_node, sibling_nodes, tail_selectors, acc)
63 63 end
64 64 defp traverse({_, _, children_nodes} = html_node, sibling_nodes, selector, acc) do
65 - acc =
66 - if Selector.match?(html_node, selector) do
67 - combinator = selector.combinator
68 - case combinator do
69 - nil -> [html_node|acc]
70 - _ ->
71 - traverse_using(combinator, children_nodes, sibling_nodes, acc)
72 - end
73 - else
74 - acc
75 - end
65 + if Selector.match?(html_node, selector) do
66 + combinator = selector.combinator
76 67
77 - traverse(children_nodes, sibling_nodes, selector, acc)
68 + case combinator do
69 + nil ->
70 + traverse(children_nodes, sibling_nodes, selector, [html_node|acc])
71 + _ ->
72 + traverse_using(combinator, children_nodes, sibling_nodes, acc)
73 + end
74 + else
75 + traverse(children_nodes, sibling_nodes, selector, acc)
76 + end
78 77 end
79 78
80 79 defp traverse_using(combinator, children_nodes, sibling_nodes, acc) do
  @@ -82,36 +81,36 @@ defmodule Floki.Finder do
82 81
83 82 case combinator.match_type do
84 83 :descendant ->
85 - traverse(children_nodes, sibling_nodes, selector, acc)
84 + traverse(children_nodes, [], selector, acc)
86 85 :child ->
87 - traverse_child(children_nodes, sibling_nodes, selector, acc)
86 + traverse_child(children_nodes, selector, acc)
88 87 :sibling ->
89 - traverse_sibling(children_nodes, sibling_nodes, selector, acc)
88 + traverse_sibling(sibling_nodes, selector, acc)
90 89 :general_sibling ->
91 - traverse_general_sibling(children_nodes, sibling_nodes, selector, acc)
90 + traverse_general_sibling(sibling_nodes, selector, acc)
92 91 other ->
93 92 raise "Combinator of type \"#{other}\" not implemented"
94 93 end
95 94 end
96 95
97 - defp traverse_child(nodes, sibling_nodes, selector, acc) do
98 - Enum.reduce(nodes, acc, fn(n, res_acc) ->
99 - if Selector.match?(n, selector) do
100 - combinator = selector.combinator
96 + defp traverse_child([], _selector, acc), do: acc
97 + defp traverse_child([n|sibling_nodes], selector, acc) do
98 + if Selector.match?(n, selector) do
99 + combinator = selector.combinator
101 100
102 - case combinator do
103 - nil -> [n|res_acc]
104 - _ ->
105 - {_, _, children_nodes} = n
106 - traverse_using(combinator, children_nodes, sibling_nodes, res_acc)
107 - end
108 - else
109 - res_acc
101 + case combinator do
102 + nil ->
103 + traverse_child(sibling_nodes, selector, [n|acc])
104 + _ ->
105 + {_, _, children_nodes} = n
106 + traverse_using(combinator, children_nodes, sibling_nodes, acc)
110 107 end
111 - end)
108 + else
109 + traverse_child(sibling_nodes, selector, acc)
110 + end
112 111 end
113 112
114 - defp traverse_sibling(_nodes, sibling_nodes, selector, acc) do
113 + defp traverse_sibling(sibling_nodes, selector, acc) do
115 114 sibling_nodes = Enum.drop_while(sibling_nodes, &ignore_node?/1)
116 115
117 116 sibling_node = case sibling_nodes do
  @@ -131,7 +130,7 @@ defmodule Floki.Finder do
131 130 end
132 131 end
133 132
134 - defp traverse_general_sibling(_nodes, sibling_nodes, selector, acc) do
133 + defp traverse_general_sibling(sibling_nodes, selector, acc) do
135 134 sibling_nodes = Enum.drop_while(sibling_nodes, &ignore_node?/1)
136 135
137 136 Enum.reduce(sibling_nodes, acc, fn(sibling_node, res_acc) ->
  @@ -2,7 +2,7 @@ defmodule Floki.Mixfile do
2 2 use Mix.Project
3 3
4 4 @description "Floki is a simple HTML parser that enables search for nodes using CSS selectors."
5 - @version "0.10.0"
5 + @version "0.10.1"
6 6
7 7 def project do
8 8 [app: :floki,
  @@ -33,7 +33,7 @@ defmodule Floki.Mixfile do
33 33 %{
34 34 maintainers: ["Philip Sampaio Silva"],
35 35 licenses: ["MIT"],
36 - files: ["lib", "priv", "src/*.xrl", "mix.exs", "README.md", "LICENSE"],
36 + files: ["lib", "src/*.xrl", "mix.exs", "README.md", "LICENSE"],
37 37 links: %{
38 38 "GitHub" => "https://github.com/philss/floki",
39 39 "Docs" => "http://hexdocs.pm/floki"