simple-form 0.3 → 0.4
raw patch · 2 files changed
+118/−2 lines, 2 files
Files
- SimpleForm/Render/Bootstrap3.hs +115/−0
- simple-form.cabal +3/−2
+ SimpleForm/Render/Bootstrap3.hs view
@@ -0,0 +1,115 @@+-- | Bootstrap3 form renderer+module SimpleForm.Render.Bootstrap3 (render) where++import Data.Monoid+import Data.Char+import Data.Foldable (forM_)+import Data.Text (Text)+import qualified Data.Text as T++import Text.Blaze.XHtml5 (Html, toHtml)+import qualified Text.Blaze.XHtml5 as HTML+import qualified Text.Blaze.XHtml5.Attributes as HTML hiding (span, label)++import SimpleForm+import SimpleForm.Render++render :: Renderer+render opt@(RenderOptions {+ name = n,+ widgetHtml = Input whtml,+ errors = errors,+ options = InputOptions {+ label = lbl,+ disabled = d,+ required = r,+ wrapper_html = wattr,+ label_html = lattr+ }+ }) =+ applyAttrs (+ maybeCons (not $ null errors) (T.pack "class", T.pack "has-error") $+ maybeCons d (T.pack "class", T.pack "disabled") $+ maybeCons r (T.pack "class", T.pack "required")+ [(T.pack "class", wrapClass)]+ ) wattr $ HTML.div $ do+ whtml'+ hintAndError opt+ where+ (wrapClass, whtml') = doLabel lbl+ doLabel Nothing =(T.pack "form-group",+ whtml HTML.! HTML.class_ (HTML.toValue "form-control"))+ doLabel (Just (Label s)) = (T.pack "form-group", do+ applyAttrs [(T.pack "class", T.pack "control-label")] lattr $+ HTML.label HTML.! HTML.for (HTML.toValue $ idize n) $ toHtml s+ whtml HTML.! HTML.class_ (HTML.toValue "form-control") HTML.!+ HTML.id (HTML.toValue $ idize n))+ doLabel (Just (InlineLabel s)) = (T.pack "checkbox",+ applyAttrs [] lattr $ HTML.label $ whtml >> toHtml s)+ doLabel (Just DefaultLabel) = doLabel (Just $ Label $ humanize n)++render opt@(RenderOptions {+ widgetHtml = SelfLabelInput whtml,+ errors = errors,+ options = InputOptions {+ disabled = d,+ required = r,+ wrapper_html = wattr+ }+ }) =+ applyAttrs (+ maybeCons (not $ null errors) (T.pack "class", T.pack "has-error") $+ maybeCons d (T.pack "class", T.pack "disabled") $+ maybeCons r (T.pack "class", T.pack "required")+ [(T.pack "class", T.pack "form-group")]+ ) wattr $ HTML.div $ do+ whtml HTML.! HTML.class_ (HTML.toValue "form-control")+ hintAndError opt++render opt@(RenderOptions {+ name = n,+ widgetHtml = MultiInput whtml,+ errors = errors,+ options = InputOptions {+ label = lbl,+ disabled = d,+ required = r,+ wrapper_html = wattr,+ label_html = lattr+ }+ }) =+ applyAttrs (+ maybeCons (not $ null errors) (T.pack "class", T.pack "has-error") $+ maybeCons d (T.pack "disabled", T.pack "disabled") $+ maybeCons d (T.pack "class", T.pack "disabled") $+ maybeCons r (T.pack "class", T.pack "required")+ []+ ) wattr $ HTML.fieldset $ do+ forM_ lbl $ applyAttrs [] lattr . legend_value (humanize n)+ mconcat $ map (HTML.div HTML.! HTML.class_ (HTML.toValue "checkbox")) whtml+ hintAndError opt++hintAndError :: RenderOptions -> Html+hintAndError (RenderOptions {+ errors = errors,+ options = InputOptions {+ hint = hint,+ hint_html = hattr,+ error_html = eattr+ }+ }) = do+ forM_ errors $ applyAttrs [(T.pack "class", T.pack "help-block has-error")] eattr . HTML.span+ forM_ hint $ applyAttrs [(T.pack "class", T.pack "help-block")] hattr . HTML.span . toHtml++legend_value :: Text -> Label -> Html+legend_value _ (Label s) = HTML.legend $ toHtml s+legend_value d (InlineLabel s) = legend_value d (Label s)+legend_value d (DefaultLabel) = legend_value d (Label d)++idize :: Text -> Text+idize = T.append (T.pack "input-") . T.toLower . T.concatMap go+ where+ go c+ | isUpper c = T.pack ['-', c]+ | not (isAlphaNum c) = T.singleton '-'+ | otherwise = T.singleton c
simple-form.cabal view
@@ -1,5 +1,5 @@ name: simple-form-version: 0.3+version: 0.4 cabal-version: >= 1.8 license: OtherLicense license-file: COPYING@@ -33,7 +33,8 @@ SimpleForm.Combined, SimpleForm.Validation, SimpleForm.Render,- SimpleForm.Render.XHTML5+ SimpleForm.Render.XHTML5,+ SimpleForm.Render.Bootstrap3 other-modules: SimpleForm.Digestive.Internal