packages feed

webpage (empty) → 0.0.1

raw patch · 6 files changed

+186/−0 lines, 6 filesdep +basedep +blaze-htmldep +lucidsetup-changed

Dependencies added: base, blaze-html, lucid, text

Files

+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2014, Athan Clark++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above+      copyright notice, this list of conditions and the following+      disclaimer in the documentation and/or other materials provided+      with the distribution.++    * Neither the name of Athan Clark nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ src/Web/Page/Blaze.hs view
@@ -0,0 +1,30 @@+{-# LANGUAGE OverloadedStrings #-}++module Web.Page.Blaze+    ( module Web.Page.Types+    , template ) where++import Web.Page.Types++import qualified Text.Blaze.Html5 as H+import qualified Text.Blaze.Html5.Attributes as A++import qualified Data.Text as T++-- | You should really be using Lucid...+template :: WebPage H.Html T.Text+         -> H.Html+         -> H.Html+template page content = do+  H.docTypeHtml $ do+    (H.head $ do+      initScripts page+      (H.title $ H.toHtml $ pageTitle page)+      metaVars page+      H.link H.! (A.rel "icon") H.! (A.href $ H.toValue (favicon page))+      beforeStylesScripts page+      styles page+      afterStylesScripts page)+    H.body $ do+      content+      bodyScripts page
+ src/Web/Page/Lucid.hs view
@@ -0,0 +1,39 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ExtendedDefaultRules #-}+{-# LANGUAGE BangPatterns #-}++module Web.Page.Lucid+    ( module Web.Page.Types+    , template ) where++import Web.Page.Types++import Lucid+import Lucid.Base++import qualified Data.Text as T++import Data.Monoid++-- | Generic page template implemented in Lucid.+template :: Monad m =>+            WebPage (HtmlT m ()) T.Text -- ^ Page information+         -> HtmlT m () -- ^ Content to insert in @\<body\>@+         -> HtmlT m () +template page content = doctypehtml_ $ mconcat $+  [ head_ [] $ mconcat $+      [ initScripts page+      , title_ $ toHtmlRaw $ pageTitle page+      , metaVars page+      , link_ [ rel_ "icon"+              , href_ $ favicon page+              ]+      , beforeStylesScripts page+      , styles page+      , afterStylesScripts page+      ]+  , body_ [] $ mconcat $+      [ content+      , bodyScripts page+      ]+  ]
+ src/Web/Page/Types.hs view
@@ -0,0 +1,28 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ExtendedDefaultRules #-}+{-# LANGUAGE BangPatterns #-}++module Web.Page.Types where+++import Data.Monoid++-- | Generic layout for a web page. We keep the data type purely parametric to +-- allow for record-syntax overloading / reassignment, like this:+-- .+-- > page :: WebPage (Html ()) T.Text+-- >+-- > page' = page {pageTitle = "foo!"}+data WebPage markup attr = WebPage {           pageTitle :: attr -- ^ Page title+                                   ,             favicon :: attr -- ^ Favicon url+                                   ,            metaVars :: markup -- ^ @\<meta\>@ tags+                                   ,         initScripts :: markup -- ^ JavaScript to include at the top of the page+                                   , beforeStylesScripts :: markup -- ^ JavaScript to include before @\<style\>@ tags+                                   ,              styles :: markup -- ^ Styles+                                   ,  afterStylesScripts :: markup -- ^ JavaScript to include after @\<style\>@ tags - ie: <http://modernizr.com Modernizr>+                                   ,         bodyScripts :: markup -- ^ JavaScript to include at the base of @\<body\>@+                                   }++instance (Monoid m, Monoid a) => Monoid (WebPage m a) where+  mempty = WebPage mempty mempty mempty mempty mempty mempty mempty mempty+  mappend x _ = x -- Some people just want to watch the world burn.
+ webpage.cabal view
@@ -0,0 +1,57 @@+Name:                   webpage+Version:                0.0.1+Author:                 Athan Clark <athan.clark@gmail.com>+Maintainer:             Athan Clark <athan.clark@gmail.com>+License:                MIT+License-File:           LICENSE+Synopsis:               Organized and simple web page scaffold for blaze and lucid+Description:+  This is a general organization scheme for web pages, implemented for Lucid, +  and adapted for Blaze-html.+  .+  It's as easy as 1-2-3:+  .+  >  import Web.Page.Lucid+  >+  >  λ> renderText $ template mempty "some content"+  >+  >  ↪ "<!DOCTYPE HTML><html><head><title></title><link href +  >    rel="icon"></head><body>some content</body></html>"+  .+  overload the particular areas with record syntax and stuff:+  .+  >  λ> let page = WebPage+  >                  "foo"+  >                  mempty+  >                  mempty+  >                  mempty+  >                  mempty+  >                  mempty+  >                  mempty+  >                  (script_ [src_ "jquery.js"] "")+  >+  >+  >  λ> template page "some content"+  >+  >  ↪ "<!DOCTYPE HTML><html><head><title>foo</title><link href +  >    rel=\"icon\"></head><body>some content<script +  >    src=\"jquery.js\"></script></body></html>"+  .+Cabal-Version:          >= 1.10+Build-Type:             Simple++Library+  Default-Language:     Haskell2010+  HS-Source-Dirs:       src+  GHC-Options:          -Wall+  Exposed-Modules:      Web.Page.Types+                        Web.Page.Lucid+                        Web.Page.Blaze+  Build-Depends:        base >= 4 && < 5+                      , lucid >= 2.5+                      , blaze-html+                      , text++Source-Repository head+  Type:                 git+  Location:             https://github.com/athanclark/webpage.git