diff of cdae79034ce2af1ee72edd0443a8d59578f57159
cdae79034ce2af1ee72edd0443a8d59578f57159
diff --git a/elm-frontti/src/FeedView.elm b/elm-frontti/src/FeedView.elm
index ca46bce..469adb0 100644
--- a/elm-frontti/src/FeedView.elm
+++ b/elm-frontti/src/FeedView.elm
@@ -2,6 +2,7 @@ module FeedView exposing (..)
import DateFormat as Df
import Feeds exposing (NewFeed)
+import Dict
import Time
import Message exposing (..)
import Html exposing (..)
@@ -10,6 +11,7 @@ import Html.Events exposing (onInput, onClick)
import Button exposing (murja_button)
import UUID
import Article_view exposing (formatDateTime)
+import Tab exposing (tabs)
import Random
@@ -46,17 +48,17 @@ perFeedView settings zone fs new_feed_state =
, value new_feed_state.url
, type_ "text"] []
, murja_button [ onClick (AddFeed new_feed_state)] [ text "Add a feed"]]]
+
+readerState_str state =
+ case state of
+ PerFeed -> "PerFeed"
+ SingleFeed -> "SingleFeed"
+
feeds feedReaderState settings zone fs new_feed =
let new_feed_state = Maybe.withDefault (NewFeed "" "") new_feed
in
- div []
- [ span [] [ input [ id "feed_state_per_feed"
- , type_ "checkbox"
- , onClick SetPerFeedView
- , checked <| feedReaderState == PerFeed] []
- , label [ for "feed_state_per_feed"] [ text "Show rss per feed?"] ]
-
-
- , case feedReaderState of
- PerFeed -> perFeedView settings zone fs new_feed_state
- SingleFeed -> div [] [ text "NotImplemented" ]]
+ tabs "rss-feed-tab" (readerState_str feedReaderState)
+ (Dict.fromList [ ("PerFeed", "Group by feed")
+ , ("SingleFeed", "Show all in a feed")])
+ (Dict.fromList [ ("PerFeed", perFeedView settings zone fs new_feed_state)
+ , ("SingleFeed", div [] [ text "NotImplemented" ])])
diff --git a/elm-frontti/src/Main.elm b/elm-frontti/src/Main.elm
index 1aa945d..dfb1530 100644
--- a/elm-frontti/src/Main.elm
+++ b/elm-frontti/src/Main.elm
@@ -609,6 +609,19 @@ update msg model =
PerFeed -> SingleFeed
SingleFeed -> PerFeed}
, Cmd.none)
+ SelectTab tab_id selected_tab ->
+ case tab_id of
+ "rss-feed-tab" ->
+ case (str_to_readerState selected_tab) of
+ Just readerstate ->
+ ({ model
+ | feedReaderState = readerstate}
+ , Cmd.none)
+ Nothing ->
+ ( model
+ , alert <| "Unknown selected tab " ++ selected_tab)
+ _ -> ( model
+ , alert <| "Unknown tab " ++ tab_id)
doGoHome_ model other_cmds =
diff --git a/elm-frontti/src/Message.elm b/elm-frontti/src/Message.elm
index 689f07c..ec3cc0c 100644
--- a/elm-frontti/src/Message.elm
+++ b/elm-frontti/src/Message.elm
@@ -66,7 +66,13 @@ type alias PostEditorSettings =
type FeedReaderState
= PerFeed
| SingleFeed
-
+
+str_to_readerState str =
+ case str of
+ "PerFeed" -> Just PerFeed
+ "SingleFeed" -> Just SingleFeed
+ _ -> Nothing
+
type alias Model =
{ view_state : ViewState
, settings : Maybe Settings.Settings
@@ -156,6 +162,7 @@ type Msg
| AddFeed Feeds.NewFeed
| FeedAdded (Result Http.Error ())
| SetPerFeedView
+ | SelectTab String String
-- ports
port reallySetupAce : String -> Cmd msg
diff --git a/elm-frontti/src/Tab.elm b/elm-frontti/src/Tab.elm
new file mode 100644
index 0000000..695a9e5
--- /dev/null
+++ b/elm-frontti/src/Tab.elm
@@ -0,0 +1,21 @@
+module Tab exposing (..)
+
+import Dict exposing (Dict)
+import Html exposing (..)
+import Html.Attributes exposing (..)
+import Html.Events exposing (..)
+import Message exposing (..)
+
+-- tabs: String -> comparable -> Dict comparable String -> Dict comparable (Html msg) -> Html msg
+tabs tab_id selected_tab_key titles tabkey_to_page =
+ div [ class "tabs"
+ , id tab_id]
+ [ ul [ class "tab-headers" ]
+ ( titles
+ |> Dict.map
+ (\k -> \title -> li [ class <| if selected_tab_key == k then "tab-header tab-selected" else "tab-header"
+ , onClick (SelectTab tab_id k)] [ text title])
+ |> Dict.values)
+ , ( Dict.get selected_tab_key tabkey_to_page
+ |> Maybe.withDefault (div [] [ text <| "Invalid selected tab key " ++ (Debug.toString selected_tab_key)]))]
+
diff --git a/resources/css/murja.css b/resources/css/murja.css
index 43237f5..5f1d7bc 100644
--- a/resources/css/murja.css
+++ b/resources/css/murja.css
@@ -316,6 +316,25 @@ header {
margin-left: 2em;
}
+.tabs {
+ width: 100%;
+}
+
+.tab-headers {
+ display: flex;
+ justify-content: space-evenly;
+ list-style: none;
+ flex-direction: row;
+}
+
+.tab-header {
+ border-bottom: 2px solid;
+}
+
+.tab-selected {
+ border-bottom: 2px solid #00F;
+}
+
@media only screen and (max-device-width:480px)
{
body {