2017-05-02 02:27:01 -04:00
|
|
|
module View.Formatter exposing (formatContent)
|
2017-04-22 04:16:14 -04:00
|
|
|
|
|
|
|
import Html exposing (..)
|
|
|
|
import Html.Attributes exposing (..)
|
|
|
|
import HtmlParser
|
2017-04-27 10:34:27 -04:00
|
|
|
import String.Extra exposing (replace)
|
2017-04-30 06:15:33 -04:00
|
|
|
import Mastodon.Model exposing (..)
|
2017-04-29 12:05:06 -04:00
|
|
|
import Types exposing (..)
|
2017-05-02 02:27:01 -04:00
|
|
|
import View.Events exposing (..)
|
2017-04-22 04:16:14 -04:00
|
|
|
|
|
|
|
|
|
|
|
-- Custom Events
|
|
|
|
-- Views
|
|
|
|
|
|
|
|
|
2017-04-30 06:15:33 -04:00
|
|
|
formatContent : String -> List Mention -> List (Html Msg)
|
2017-04-22 04:16:14 -04:00
|
|
|
formatContent content mentions =
|
|
|
|
content
|
2017-05-03 02:25:47 -04:00
|
|
|
|> replace " ?" " ?"
|
|
|
|
|> replace " !" " !"
|
|
|
|
|> replace " :" " :"
|
2017-04-22 04:16:14 -04:00
|
|
|
|> HtmlParser.parse
|
|
|
|
|> toVirtualDom mentions
|
|
|
|
|
|
|
|
|
|
|
|
{-| Converts nodes to virtual dom nodes.
|
|
|
|
-}
|
2017-04-30 06:15:33 -04:00
|
|
|
toVirtualDom : List Mention -> List HtmlParser.Node -> List (Html Msg)
|
2017-04-22 04:16:14 -04:00
|
|
|
toVirtualDom mentions nodes =
|
|
|
|
List.map (toVirtualDomEach mentions) nodes
|
|
|
|
|
|
|
|
|
2017-04-30 06:15:33 -04:00
|
|
|
createLinkNode : List ( String, String ) -> List HtmlParser.Node -> List Mention -> Html Msg
|
2017-04-22 04:16:14 -04:00
|
|
|
createLinkNode attrs children mentions =
|
|
|
|
let
|
|
|
|
maybeMention =
|
|
|
|
getMentionForLink attrs mentions
|
|
|
|
in
|
|
|
|
case maybeMention of
|
|
|
|
Just mention ->
|
|
|
|
Html.node "a"
|
|
|
|
((List.map toAttribute attrs)
|
2017-04-27 16:01:51 -04:00
|
|
|
++ [ onClickWithPreventAndStop (LoadAccount mention.id) ]
|
2017-04-22 04:16:14 -04:00
|
|
|
)
|
|
|
|
(toVirtualDom mentions children)
|
|
|
|
|
|
|
|
Nothing ->
|
2017-04-28 03:41:11 -04:00
|
|
|
Html.node "a"
|
|
|
|
((List.map toAttribute attrs)
|
2017-04-29 12:05:06 -04:00
|
|
|
++ [ onClickWithStop NoOp, target "_blank" ]
|
2017-04-28 03:41:11 -04:00
|
|
|
)
|
|
|
|
(toVirtualDom mentions children)
|
2017-04-22 04:16:14 -04:00
|
|
|
|
|
|
|
|
|
|
|
getHrefLink : List ( String, String ) -> Maybe String
|
|
|
|
getHrefLink attrs =
|
|
|
|
attrs
|
2017-04-29 12:05:06 -04:00
|
|
|
|> List.filter (\( name, value ) -> (name == "href"))
|
|
|
|
|> List.map (\( name, value ) -> value)
|
2017-04-22 04:16:14 -04:00
|
|
|
|> List.head
|
|
|
|
|
|
|
|
|
2017-04-30 06:15:33 -04:00
|
|
|
getMentionForLink : List ( String, String ) -> List Mention -> Maybe Mention
|
2017-04-22 04:16:14 -04:00
|
|
|
getMentionForLink attrs mentions =
|
|
|
|
case getHrefLink attrs of
|
|
|
|
Just href ->
|
|
|
|
mentions
|
|
|
|
|> List.filter (\m -> m.url == href)
|
|
|
|
|> List.head
|
|
|
|
|
|
|
|
Nothing ->
|
|
|
|
Nothing
|
|
|
|
|
|
|
|
|
2017-04-30 06:15:33 -04:00
|
|
|
toVirtualDomEach : List Mention -> HtmlParser.Node -> Html Msg
|
2017-04-22 04:16:14 -04:00
|
|
|
toVirtualDomEach mentions node =
|
|
|
|
case node of
|
|
|
|
HtmlParser.Element "a" attrs children ->
|
|
|
|
createLinkNode attrs children mentions
|
|
|
|
|
|
|
|
HtmlParser.Element name attrs children ->
|
|
|
|
Html.node name (List.map toAttribute attrs) (toVirtualDom mentions children)
|
|
|
|
|
|
|
|
HtmlParser.Text s ->
|
|
|
|
text s
|
|
|
|
|
|
|
|
HtmlParser.Comment _ ->
|
|
|
|
text ""
|
|
|
|
|
|
|
|
|
|
|
|
toAttribute : ( String, String ) -> Attribute msg
|
|
|
|
toAttribute ( name, value ) =
|
|
|
|
attribute name value
|