it works™.

This commit is contained in:
Nicolas Perriault 2017-04-30 12:15:33 +02:00
parent 3530f3c79d
commit 5da0c77551
No known key found for this signature in database
GPG Key ID: DA5E4C83904F7A2A
5 changed files with 67 additions and 39 deletions

View File

@ -70,6 +70,7 @@ body {
.notifications-panel .btn-group-justified .btn {
border-radius: 0;
border-bottom: 0;
outline: 0;
}
.notification.reblog,

View File

@ -644,6 +644,9 @@ update msg model =
}
! []
FilterNotifications filter ->
{ model | notificationFilter = filter } ! []
ScrollColumn ScrollTop column ->
model ! [ Command.scrollColumnToTop column ]

View File

@ -62,6 +62,7 @@ type Msg
| CloseThread
| DeleteStatus Int
| DraftEvent DraftMsg
| FilterNotifications NotificationFilter
| FollowAccount Int
| LoadAccount Int
| MastodonEvent MastodonMsg

View File

@ -500,6 +500,30 @@ notificationEntryView currentUser notification =
]
notificationFilterView : NotificationFilter -> Html Msg
notificationFilterView filter =
let
filterBtn tooltip iconName event =
button
[ class <|
if filter == event then
"btn btn-primary"
else
"btn btn-default"
, title tooltip
, onClick <| FilterNotifications event
]
[ icon iconName ]
in
justifiedButtonGroup
[ filterBtn "All notifications" "asterisk" NotificationAll
, filterBtn "Mentions" "share-alt" NotificationOnlyMentions
, filterBtn "Boosts" "fire" NotificationOnlyBoosts
, filterBtn "Favorites" "star" NotificationOnlyFavourites
, filterBtn "Follows" "user" NotificationOnlyFollows
]
notificationListView : CurrentUser -> NotificationFilter -> List NotificationAggregate -> Html Msg
notificationListView currentUser filter notifications =
div [ class "col-md-3 column" ]
@ -507,40 +531,12 @@ notificationListView currentUser filter notifications =
[ a
[ href "", onClickWithPreventAndStop <| ScrollColumn ScrollTop "notifications" ]
[ div [ class "panel-heading" ] [ icon "bell", text "Notifications" ] ]
, justifiedButtonGroup
[ button
[ type_ "button"
, class "btn btn-primary"
, title "All notifications"
]
[ icon "asterisk" ]
, button
[ type_ "button"
, class "btn btn-default"
, title "Mentions"
]
[ icon "share-alt" ]
, button
[ type_ "button"
, class "btn btn-default"
, title "Boosts"
]
[ icon "fire" ]
, button
[ type_ "button"
, class "btn btn-default"
, title "Favorites"
]
[ icon "star" ]
, button
[ type_ "button"
, class "btn btn-default"
, title "Follows"
]
[ icon "user" ]
]
, notificationFilterView filter
, ul [ id "notifications", class "list-group timeline" ] <|
List.map (notificationEntryView currentUser) notifications
(notifications
|> filterNotifications filter
|> List.map (notificationEntryView currentUser)
)
]
]

View File

@ -6,6 +6,7 @@ module ViewHelper
, onClickWithPrevent
, onClickWithPreventAndStop
, toVirtualDom
, filterNotifications
)
import Html exposing (..)
@ -14,7 +15,7 @@ import Html.Events exposing (onWithOptions)
import HtmlParser
import Json.Decode as Decode
import String.Extra exposing (replace)
import Mastodon.Model
import Mastodon.Model exposing (..)
import Types exposing (..)
@ -49,7 +50,7 @@ onClickWithStop msg =
-- Views
formatContent : String -> List Mastodon.Model.Mention -> List (Html Msg)
formatContent : String -> List Mention -> List (Html Msg)
formatContent content mentions =
content
|> replace " ?" "&nbsp;?"
@ -61,12 +62,12 @@ formatContent content mentions =
{-| Converts nodes to virtual dom nodes.
-}
toVirtualDom : List Mastodon.Model.Mention -> List HtmlParser.Node -> List (Html Msg)
toVirtualDom : List Mention -> List HtmlParser.Node -> List (Html Msg)
toVirtualDom mentions nodes =
List.map (toVirtualDomEach mentions) nodes
createLinkNode : List ( String, String ) -> List HtmlParser.Node -> List Mastodon.Model.Mention -> Html Msg
createLinkNode : List ( String, String ) -> List HtmlParser.Node -> List Mention -> Html Msg
createLinkNode attrs children mentions =
let
maybeMention =
@ -96,7 +97,7 @@ getHrefLink attrs =
|> List.head
getMentionForLink : List ( String, String ) -> List Mastodon.Model.Mention -> Maybe Mastodon.Model.Mention
getMentionForLink : List ( String, String ) -> List Mention -> Maybe Mention
getMentionForLink attrs mentions =
case getHrefLink attrs of
Just href ->
@ -108,7 +109,7 @@ getMentionForLink attrs mentions =
Nothing
toVirtualDomEach : List Mastodon.Model.Mention -> HtmlParser.Node -> Html Msg
toVirtualDomEach : List Mention -> HtmlParser.Node -> Html Msg
toVirtualDomEach mentions node =
case node of
HtmlParser.Element "a" attrs children ->
@ -127,3 +128,29 @@ toVirtualDomEach mentions node =
toAttribute : ( String, String ) -> Attribute msg
toAttribute ( name, value ) =
attribute name value
filterNotifications : NotificationFilter -> List NotificationAggregate -> List NotificationAggregate
filterNotifications filter notifications =
let
applyFilter { type_ } =
case filter of
NotificationAll ->
True
NotificationOnlyMentions ->
type_ == "mention"
NotificationOnlyBoosts ->
type_ == "reblog"
NotificationOnlyFavourites ->
type_ == "favourite"
NotificationOnlyFollows ->
type_ == "follow"
in
if filter == NotificationAll then
notifications
else
List.filter applyFilter notifications