diff --git a/index.html b/index.html index 6757ff5..4c8aced 100644 --- a/index.html +++ b/index.html @@ -4,6 +4,7 @@ + Chandlr diff --git a/src/Common b/src/Common index 9e9d7ba..3f420d3 160000 --- a/src/Common +++ b/src/Common @@ -1 +1 @@ -Subproject commit 9e9d7babe6352b2fdf19d4ab43a557c71ca2e2ff +Subproject commit 3f420d3131eb0477b522103a582732a5ba365f19 diff --git a/src/Component/CatalogGrid.hs b/src/Component/CatalogGrid.hs index 05d5bb8..0bdac40 100644 --- a/src/Component/CatalogGrid.hs +++ b/src/Component/CatalogGrid.hs @@ -9,14 +9,15 @@ module Component.CatalogGrid , update ) where -import Data.List (intercalate) import Data.Maybe (maybeToList) -import Data.JSString (append) +import Data.Text (pack, Text) +import qualified Data.Text as T +import Data.JSString (append, JSString) import Miso ( View, div_ , class_ , img_ , href_ , a_ , src_ , title_ , strong_ , span_ - , p_ , br_ , id_ , Effect , noEff, width_ - , height_, text, rawHtml + , p_ , id_ , Effect , noEff + , text, rawHtml ) import Miso.String (toMisoString, MisoString) @@ -24,11 +25,15 @@ import Network.CatalogPostType (CatalogPost) import qualified Network.CatalogPostType as CatalogPost data Model = Model - { displayItems :: [ CatalogPost ] + { display_items :: [ CatalogPost ] + , media_root :: MisoString } deriving Eq -initialModel :: Model -initialModel = Model { displayItems = [] } +initialModel :: JSString -> Model +initialModel media_root = Model + { display_items = [] + , media_root = toMisoString media_root + } data Action = DisplayItems [ CatalogPost ] @@ -42,7 +47,7 @@ update -> Action -> Model -> Effect a Model -update _ (DisplayItems xs) m = noEff (m { displayItems = xs }) +update _ (DisplayItems xs) m = noEff (m { display_items = xs }) -- update _ _ m = noEff m view :: Interface a -> Model -> View a @@ -53,12 +58,12 @@ view iface model = [ class_ "threads" ] [ div_ [ id_ "Grid" ] - (map gridItem (displayItems model)) + (map (gridItem model) (display_items model)) ] ] -gridItem :: CatalogPost -> View a -gridItem post = +gridItem :: Model -> CatalogPost -> View a +gridItem m post = div_ [ class_ "mix" ] [ div_ @@ -67,7 +72,7 @@ gridItem post = [ href_ thread_url ] [ img_ [ class_ "thread-image" - , src_ "/a/thumb/1111111111111.png" + , src_ thumb_url , title_ ( toMisoString $ show $ CatalogPost.bump_time post ) ] ] @@ -96,9 +101,28 @@ gridItem post = post_count_str :: MisoString post_count_str = "R: " `append` (toMisoString $ CatalogPost.estimated_post_count post) `append` "+" + thumb_url :: MisoString + thumb_url = + case mthumb_path of + -- TODO: what about embeds!? + Nothing -> "/static/default_thumbnail.png" + Just thumb_path -> (media_root m) `append` (toMisoString thumb_path) + + mthumb_path :: Maybe Text + mthumb_path = do + file_name <- CatalogPost.file_name post + thumb_ext <- CatalogPost.file_thumb_extension post + + return $ + "/" <> CatalogPost.site_name post + <> "/" <> CatalogPost.pathpart post + <> "/" <> (pack $ show $ CatalogPost.board_thread_id post) + <> "/thumbnail_" <> file_name + <> "." <> thumb_ext + thread_url :: MisoString - thread_url = toMisoString $ intercalate "/" + thread_url = toMisoString $ T.intercalate "/" [ CatalogPost.site_name post , CatalogPost.pathpart post - , show $ CatalogPost.board_thread_id post + , pack $ show $ CatalogPost.board_thread_id post ] diff --git a/src/Component/ThreadView.hs b/src/Component/ThreadView.hs new file mode 100644 index 0000000..ff8e52d --- /dev/null +++ b/src/Component/ThreadView.hs @@ -0,0 +1,11 @@ +module Component.ThreadView +( Model +) where + +import Common.PostsType (Post) + +data Model = Model + { thread_id :: Integer + , thread_posts :: [ Post ] + , thread_loading :: Bool + } deriving Eq diff --git a/src/Main.hs b/src/Main.hs index a598e24..00c0a25 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -63,9 +63,10 @@ initialActionFromRoute model uri = either (const NoAction) id routing_result initialModel :: JSString -> Int + -> JSString -> Model -initialModel pgroot client_fetch_count = Model - { gridModel = Grid.initialModel +initialModel pgroot client_fetch_count media_root = Model + { gridModel = Grid.initialModel media_root , clientModel = Client.Model { Client.pgApiRoot = pgroot , Client.fetchCount = client_fetch_count @@ -99,7 +100,10 @@ main = do pg_fetch_count <- getMetadata "postgrest-fetch-count" >>= return . maybe 1000 (read . fromJSString) - let initial_model = initialModel pg_api_root pg_fetch_count + media_root <- getMetadata "media-root" >>= + return . maybe "undefined" id + + let initial_model = initialModel pg_api_root pg_fetch_count media_root startApp App { model = initial_model diff --git a/src/Network/CatalogPostType.hs b/src/Network/CatalogPostType.hs index de90a58..a28b463 100644 --- a/src/Network/CatalogPostType.hs +++ b/src/Network/CatalogPostType.hs @@ -25,12 +25,13 @@ data CatalogPost = CatalogPost , thread_id :: Int -- , post_count :: Int , estimated_post_count :: Int - , site_name :: String - , pathpart :: String + , site_name :: Text + , pathpart :: Text -- , site_id :: Int , file_mimetype :: Maybe Text , file_illegal :: Maybe Bool -- , file_resolution :: Maybe Dimension - , file_sha256_hash :: Maybe Text + , file_name :: Maybe Text , file_extension :: Maybe Text + , file_thumb_extension :: Maybe Text } deriving (Show, Generic, FromJSON, ToJSON, Eq)