Current section

86 Versions

Jump to

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,