File tree Expand file tree Collapse file tree 2 files changed +68
-0
lines changed
apps/components_guide_web
lib/components_guide_web/views
test/collected_live_web/views Expand file tree Collapse file tree 2 files changed +68
-0
lines changed Original file line number Diff line number Diff line change
1
+ defmodule ComponentsGuideWeb.DownView do
2
+ use ComponentsGuideWeb , :view
3
+
4
+ defmodule ParserState do
5
+ defstruct bold: false , italics: false , html: [ ]
6
+
7
+ @ spec parse ( binary ) ::
8
+ { :safe ,
9
+ binary
10
+ | maybe_improper_list (
11
+ binary | maybe_improper_list ( any , binary | [ ] ) | byte ,
12
+ binary | [ ]
13
+ ) }
14
+ def parse ( input ) when is_binary ( input ) do
15
+ next ( % __MODULE__ { } , input )
16
+ end
17
+
18
+ defp next ( state = % __MODULE__ { italics: true } , << "_" :: utf8 >> <> rest ) do
19
+ % __MODULE__ { state | html: [ state . html ] , italics: false }
20
+ |> next ( rest )
21
+ end
22
+
23
+ defp next ( state = % __MODULE__ { italics: false } , << "_" :: utf8 >> <> rest ) do
24
+ % __MODULE__ { state | html: [ "<em1>" | state . html ] , italics: true }
25
+ |> next ( rest )
26
+ end
27
+
28
+ defp next ( state = % __MODULE__ { } , << char :: utf8 >> <> rest ) do
29
+ % __MODULE__ { state | html: [ << char :: utf8 >> | state . html ] }
30
+ |> next ( rest )
31
+ end
32
+
33
+ defp next ( state = % __MODULE__ { italics: italics } , "" ) do
34
+ html = Enum . reverse ( state . html ) |> Enum . join ( )
35
+
36
+ html =
37
+ case italics do
38
+ true ->
39
+ html <> "</em>"
40
+
41
+ false ->
42
+ html
43
+ end
44
+
45
+ Phoenix.HTML . raw ( html )
46
+ end
47
+ end
48
+
49
+ def down ( input ) when is_binary ( input ) do
50
+ ParserState . parse ( input )
51
+ end
52
+ end
Original file line number Diff line number Diff line change
1
+ defmodule ComponentsGuideWeb.DownViewTest do
2
+ use ComponentsGuideWeb.ConnCase , async: true
3
+
4
+ alias ComponentsGuideWeb.DownView , as: Subject
5
+ use Phoenix.HTML
6
+
7
+ describe "humanize_bytes/1" do
8
+ test "plain text" do
9
+ assert Subject . down ( "plain text" ) == raw ( "plain text" )
10
+ end
11
+
12
+ test "italics" do
13
+ assert Subject . down ( "plain _text_" ) == raw ( "plain <em>text</em>" )
14
+ end
15
+ end
16
+ end
You can’t perform that action at this time.
0 commit comments