generic-lucid-scaffold (empty) → 0.0.1
raw patch · 4 files changed
+135/−0 lines, 4 filesdep +basedep +luciddep +textsetup-changed
Dependencies added: base, lucid, text
Files
- LICENSE +30/−0
- Setup.hs +2/−0
- generic-lucid-scaffold.cabal +51/−0
- src/Lucid/Scaffold.hs +52/−0
+ 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
+ generic-lucid-scaffold.cabal view
@@ -0,0 +1,51 @@+Name: generic-lucid-scaffold+Version: 0.0.1+Author: Athan Clark <athan.clark@gmail.com>+Maintainer: Athan Clark <athan.clark@gmail.com>+License: MIT+License-File: LICENSE+Synopsis: General-purpose web page scaffold for Lucid.+Description:+ This is a general organization scheme for web pages, implemented for Lucid.+ .+ It's as easy as 1-2-3:+ .+ > λ> 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: Lucid.Scaffold+ Build-Depends: base >= 4 && < 5+ , lucid >= 2.5+ , text++Source-Repository head+ Type: git+ Location: https://github.com/athanclark/generic-lucid-scaffold.git
+ src/Lucid/Scaffold.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE GADTs #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ExtendedDefaultRules #-}+{-# LANGUAGE BangPatterns #-}++module Lucid.Scaffold where+++import Lucid+import Lucid.Base++import qualified Data.Text as T++import Data.Monoid++data WebPage m = WebPage { pageTitle :: T.Text -- ^ Page title+ , favicon :: T.Text -- ^ Favicon url+ , metaVars :: (HtmlT m ()) -- ^ @\<meta\>@ tags+ , initScripts :: (HtmlT m ()) -- ^ JavaScript to include at the top of the page+ , beforeStylesScripts :: (HtmlT m ()) -- ^ JavaScript to include before @\<style\>@ tags+ , styles :: (HtmlT m ()) -- ^ Styles+ , afterStylesScripts :: (HtmlT m ()) -- ^ JavaScript to include after @\<style\>@ tags - ie: <http://modernizr.com Modernizr>+ , bodyScripts :: (HtmlT m ()) -- ^ JavaScript to include at the base of @\<body\>@+ }+++instance Monad m => Monoid (WebPage m) where+ mempty = WebPage "" "" mempty mempty mempty mempty mempty mempty+ mappend x _ = x -- Some people just want to watch the world burn.++template :: Monad m =>+ WebPage m -- ^ 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+ ]+ ]+