By | Chris Done |
At | 2011-06-08 |
Title | Lang/chan on paste page. |
Description |
Edit file src/Amelie/View/Home.hs 33188 → 33188
11 11 import Amelie.Types
12 12 import Amelie.View.Html
13 13 import Amelie.View.Layout
14 14 import Amelie.View.Paste (pasteLink)
15 15 - 16 import Control.Arrow ((&&&))
- 17 import Data.Maybe (fromMaybe)
18 16 import Data.Time.Show (showDateTime)
19 17 import Prelude hiding ((++))
20 18 import Text.Blaze.Html5 as H hiding (map)
21 19 import qualified Text.Blaze.Html5.Attributes as A
22 20 … … … … 49 47 50 48 where pastes = mapM_ $ \paste@Paste{..} -> tr $ do
51 49 td $ pasteLink paste pasteTitle
52 50 td $ toHtml pasteAuthor
53 51 td $ toHtml $ showDateTime $ pasteDate
- 54 td $ toHtml $ fromMaybe "-" (pasteLanguage >>= (`lookup` langs))
- 55 td $ toHtml $ fromMaybe "-" (pasteChannel >>= (`lookup` chans))
- 56 chans = map (channelId &&& channelName) channels
- 57 langs = map (languageId &&& languageTitle) languages
+ 52 td $ showLanguage languages pasteLanguage
+ 53 td $ showChannel channels pasteChannel
… … … … Edit file src/Amelie/View/Html.hs 33188 → 33188
9 9 ,aClasses
10 10 ,darkSection
11 11 ,lightSection
12 12 ,lightNoTitleSection
13 13 ,href
- 14 ,clear)
+ 14 ,clear
+ 15 ,showLanguage
+ 16 ,showChannel)
15 17 where
16 18 + 19 import Amelie.Types
+ 20 + 21 import Control.Arrow ((&&&))
+ 22 import Data.Maybe (fromMaybe)
17 23 import Data.Monoid.Operator ((++))
18 24 import Data.Text.Lazy (Text)
19 25 import qualified Data.Text.Lazy as T
20 26 import Prelude hiding ((++))
21 27 import Text.Blaze.Html5 as H hiding (map)
… … … … 55 61 href loc content = H.a ! A.href (toValue loc) $ toHtml content
56 62 57 63 -- | A clear:both element.
58 64 clear :: Html
59 65 clear = H.div ! aClass "clear" $ return ()
+ 66 + 67 showLanguage :: [Language] -> Maybe LanguageId -> Html
+ 68 showLanguage languages lid =
+ 69 toHtml $ fromMaybe "-" (lid >>= (`lookup` langs))
+ 70 + 71 where langs = map (languageId &&& languageTitle) languages
+ 72 + 73 showChannel :: [Channel] -> Maybe ChannelId -> Html
+ 74 showChannel channels lid =
+ 75 toHtml $ fromMaybe "-" (lid >>= (`lookup` langs))
+ 76 + 77 where langs = map (channelId &&& channelName) channels
… … … … Edit file src/Amelie/View/Paste.hs 33188 → 33188
68 68 languages = map (\Language{..} ->
69 69 (fromString $ show languageId,languageTitle))
70 70 pfLanguages
71 71 72 72 -- | Render the page page.
- 73 page :: Paste -> Html
- 74 page p@Paste{..} =
+ 73 page :: [Channel] -> [Language] -> Paste -> Html
+ 74 page chans langs p@Paste{..} =
75 75 layoutPage $ Page {
76 76 pageTitle = pasteTitle
- 77 , pageBody = viewPaste p
+ 77 , pageBody = viewPaste chans langs p
78 78 , pageName = "paste"
79 79 }
80 80 81 81 -- | View a paste's details and content.
- 82 viewPaste :: Paste -> Html
- 83 viewPaste paste@Paste{..} = do
- 84 pasteDetails paste
+ 82 viewPaste :: [Channel] -> [Language] -> Paste -> Html
+ 83 viewPaste chans langs paste@Paste{..} = do
+ 84 pasteDetails chans langs paste
85 85 pasteContent paste
- 86 + 86 87 87 -- | List the details of the page in a dark section.
- 88 pasteDetails :: Paste -> Html
- 89 pasteDetails paste@Paste{..} =
+ 88 pasteDetails :: [Channel] -> [Language] -> Paste -> Html
+ 89 pasteDetails chans langs paste@Paste{..} =
90 90 darkSection (fromStrict pasteTitle) $ do
91 91 ul ! aClass "paste-specs" $ do
92 92 detail "Paste" $ pasteLink paste $ "#" ++ show pasteId
93 93 detail "Author" $ pasteAuthor
- 94 detail "Channel" $ maybe "-" show pasteChannel
- 95 detail "Language" $ maybe "-" show pasteLanguage
+ 94 detail "Language" $ showLanguage langs pasteLanguage
+ 95 detail "Channel" $ showChannel chans pasteChannel
96 96 detail "Created" $ showDateTime pasteDate
97 97 detail "Raw" $ pasteRawLink paste $ ("View raw link" :: Text)
98 98 clear
99 99 100 100 where detail title content = do
101 101 li $ do strong (title ++ ":"); toHtml content
102 102 + 103 -- | Show the paste content with highlighting.
103 104 pasteContent :: Paste -> Html
104 105 pasteContent Paste{..} =
105 106 lightNoTitleSection $ do
106 107 case runLexer lexer (encodeUtf8 (pastePaste ++ "\n")) of
107 108 Right tokens -> format True tokens
… … … … Edit file src/Amelie/Controller/Paste.hs 33188 → 33188
12 12 import Amelie.Types
13 13 14 14 import Amelie.Controller
15 15 import Amelie.Controller.Cache (cache,resetCache)
16 16 import Amelie.Model
+ 17 import Amelie.Model.Channel (getChannels)
+ 18 import Amelie.Model.Language (getLanguages)
17 19 import Amelie.Model.Paste (createOrEdit,getPasteById)
18 20 import Amelie.Types.Cache as Key
19 21 import Amelie.View.Paste (pasteFormlet,page)
20 22 21 23 import Control.Applicative
… … … … 36 38 case pid of
37 39 Nothing -> goHome
38 40 Just (pid :: Integer) -> do
39 41 html <- cache (Key.Paste pid) $ do
40 42 paste <- model $ getPasteById (fromIntegral pid)
- 41 return $ page <$> paste
+ 43 chans <- model $ getChannels
+ 44 langs <- model $ getLanguages
+ 45 return $ page chans langs <$> paste
42 46 case html of
43 47 Just html -> outputText html
44 48 Nothing -> goHome
45 49 46 50 where goHome = redirect "/"
… … … …