summaryrefslogtreecommitdiff
path: root/standalone/android/haskell-patches/yesod-form_1.2.1.3_0001-avoid-TH-hack-job.patch
blob: c4ab44c3023726a00b5b83432afae6adf11eac6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
From c47d263779fba34629130398f1b08be1b8e468f7 Mon Sep 17 00:00:00 2001
From: Joey Hess <joey@kitenet.net>
Date: Thu, 28 Feb 2013 23:40:05 -0400
Subject: [PATCH] avoid TH (hack job)

---
 Yesod/Form/Fields.hs    |   93 ++++++++++++++++++++++++++++---------
 Yesod/Form/Functions.hs |  118 ++++++++++++++++++++++++++++++++---------------
 Yesod/Form/Jquery.hs    |   13 ++++--
 Yesod/Form/MassInput.hs |   18 ++++++--
 yesod-form.cabal        |    1 -
 5 files changed, 173 insertions(+), 70 deletions(-)

diff --git a/Yesod/Form/Fields.hs b/Yesod/Form/Fields.hs
index adc59de..353c8d0 100644
--- a/Yesod/Form/Fields.hs
+++ b/Yesod/Form/Fields.hs
@@ -50,7 +50,7 @@ import Yesod.Form.Types
 import Yesod.Form.I18n.English
 import Yesod.Form.Functions (parseHelper)
 import Yesod.Handler (getMessageRender)
-import Yesod.Widget (toWidget, whamlet, GWidget)
+import Yesod.Widget (toWidget, GWidget)
 import Yesod.Message (RenderMessage (renderMessage), SomeMessage (..))
 import Text.Hamlet
 import Text.Blaze (ToMarkup (toMarkup), preEscapedToMarkup, unsafeByteString)
@@ -108,10 +108,12 @@ intField = Field
             Right (a, "") -> Right a
             _ -> Left $ MsgInvalidInteger s
 
-    , fieldView = \theId name attrs val isReq -> toWidget [hamlet|
+    , fieldView = \theId name attrs val isReq -> error "intField TH TODO"
+{- toWidget [hamlet|
 $newline never
 <input id="#{theId}" name="#{name}" *{attrs} type="number" :isReq:required="" value="#{showVal val}">
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
   where
@@ -125,32 +127,40 @@ doubleField = Field
             Right (a, "") -> Right a
             _ -> Left $ MsgInvalidNumber s
 
-    , fieldView = \theId name attrs val isReq -> toWidget [hamlet|
+    , fieldView = \theId name attrs val isReq -> error "doubleField TH TODO"
+{- 
+ - toWidget [hamlet|
 $newline never
 <input id="#{theId}" name="#{name}" *{attrs} type="text" :isReq:required="" value="#{showVal val}">
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
-  where showVal = either id (pack . show)
+{-
+  where showVal = either id (pack . show)-}
 
 dayField :: RenderMessage master FormMessage => Field sub master Day
 dayField = Field
     { fieldParse = parseHelper $ parseDate . unpack
-    , fieldView = \theId name attrs val isReq -> toWidget [hamlet|
+    , fieldView = \theId name attrs val isReq -> error "dayfield TH TODO"
+{- toWidget [hamlet|
 $newline never
 <input id="#{theId}" name="#{name}" *{attrs} type="date" :isReq:required="" value="#{showVal val}">
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
-  where showVal = either id (pack . show)
+{-  where showVal = either id (pack . show) -}
 
 timeField :: RenderMessage master FormMessage => Field sub master TimeOfDay
 timeField = Field
     { fieldParse = parseHelper parseTime
-    , fieldView = \theId name attrs val isReq -> toWidget [hamlet|
+    , fieldView = \theId name attrs val isReq -> error "timefield TH TODO"
+{- toWidget [hamlet|
 $newline never
 <input id="#{theId}" name="#{name}" *{attrs} :isReq:required="" value="#{showVal val}">
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
   where
@@ -163,10 +173,12 @@ $newline never
 htmlField :: RenderMessage master FormMessage => Field sub master Html
 htmlField = Field
     { fieldParse = parseHelper $ Right . preEscapedText . sanitizeBalance
-    , fieldView = \theId name attrs val _isReq -> toWidget [hamlet|
+    , fieldView = \theId name attrs val _isReq -> error "htmlField TH TODO"
+{- toWidget [hamlet|
 $newline never
 <textarea id="#{theId}" name="#{name}" *{attrs}>#{showVal val}
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
   where showVal = either id (pack . renderHtml)
@@ -192,10 +204,12 @@ instance ToHtml Textarea where
 textareaField :: RenderMessage master FormMessage => Field sub master Textarea
 textareaField = Field
     { fieldParse = parseHelper $ Right . Textarea
-    , fieldView = \theId name attrs val _isReq -> toWidget [hamlet|
+    , fieldView = \theId name attrs val _isReq -> error "textAreafield TH TODO"
+{- toWidget [hamlet|
 $newline never
 <textarea id="#{theId}" name="#{name}" *{attrs}>#{either id unTextarea val}
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
 
@@ -203,31 +217,37 @@ hiddenField :: (PathPiece p, RenderMessage master FormMessage)
             => Field sub master p
 hiddenField = Field
     { fieldParse = parseHelper $ maybe (Left MsgValueRequired) Right . fromPathPiece
-    , fieldView = \theId name attrs val _isReq -> toWidget [hamlet|
+    , fieldView = \theId name attrs val _isReq -> error "hiddenfield TH TODO"
+{- toWidget [hamlet|
 $newline never
 <input type="hidden" id="#{theId}" name="#{name}" *{attrs} value="#{either id toPathPiece val}">
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
 
 textField :: RenderMessage master FormMessage => Field sub master Text
 textField = Field
     { fieldParse = parseHelper $ Right
-    , fieldView = \theId name attrs val isReq ->
+    , fieldView = \theId name attrs val isReq -> error "textField TH TODO"
+{-
         [whamlet|
 $newline never
 <input id="#{theId}" name="#{name}" *{attrs} type="text" :isReq:required value="#{either id id val}">
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
 
 passwordField :: RenderMessage master FormMessage => Field sub master Text
 passwordField = Field
     { fieldParse = parseHelper $ Right
-    , fieldView = \theId name attrs val isReq -> toWidget [hamlet|
+    , fieldView = \theId name attrs val isReq -> error "passwordfield TH TODO"
+{- toWidget [hamlet|
 $newline never
 <input id="#{theId}" name="#{name}" *{attrs} type="password" :isReq:required="" value="#{either id id val}">
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
 
@@ -305,10 +325,13 @@ emailField = Field
                 then Right s
                 else Left $ MsgInvalidEmail s
 #endif
-    , fieldView = \theId name attrs val isReq -> toWidget [hamlet|
+    , fieldView = \theId name attrs val isReq -> error "emailField TH TODO"
+{- 
+toWidget [hamlet|
 $newline never
 <input id="#{theId}" name="#{name}" *{attrs} type="email" :isReq:required="" value="#{either id id val}">
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
 
@@ -316,7 +339,8 @@ type AutoFocus = Bool
 searchField :: RenderMessage master FormMessage => AutoFocus -> Field sub master Text
 searchField autoFocus = Field
     { fieldParse = parseHelper Right
-    , fieldView = \theId name attrs val isReq -> do
+    , fieldView = \theId name attrs val isReq -> error "searchfield TH TODO"
+{-
         [whamlet|\
 $newline never
 <input id="#{theId}" name="#{name}" *{attrs} type="search" :isReq:required="" :autoFocus:autofocus="" value="#{either id id val}">
@@ -331,6 +355,7 @@ $newline never
             ##{theId}
               -webkit-appearance: textfield
             |]
+-}
     , fieldEnctype = UrlEncoded
     }
 
@@ -340,11 +365,13 @@ urlField = Field
         case parseURI $ unpack s of
             Nothing -> Left $ MsgInvalidUrl s
             Just _ -> Right s
-    , fieldView = \theId name attrs val isReq ->
+    , fieldView = \theId name attrs val isReq -> error "urlField TH TODO"
+{-
         [whamlet|
 $newline never
 <input ##{theId} name=#{name} *{attrs} type=url :isReq:required value=#{either id id val}>
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
 
@@ -352,6 +379,8 @@ selectFieldList :: (Eq a, RenderMessage master FormMessage, RenderMessage master
 selectFieldList = selectField . optionsPairs
 
 selectField :: (Eq a, RenderMessage master FormMessage) => GHandler sub master (OptionList a) -> Field sub master a
+selectField = error "selectfield TH TODO"
+{-
 selectField = selectFieldHelper
     (\theId name attrs inside -> [whamlet|
 $newline never
@@ -365,6 +394,7 @@ $newline never
 $newline never
 <option value=#{value} :isSel:selected>#{text}
 |]) -- inside
+-}
 
 multiSelectFieldList :: (Eq a, RenderMessage master FormMessage, RenderMessage master msg) => [(msg, a)] -> Field sub master [a]
 multiSelectFieldList = multiSelectField . optionsPairs
@@ -382,7 +412,8 @@ multiSelectField ioptlist =
              Nothing -> return $ Left "Error parsing values"
              Just res -> return $ Right $ Just res
 
-    view theId name attrs val isReq = do
+    view theId name attrs val isReq = error "multiSelectField TH TODO"
+{-
         opts <- fmap olOptions $ lift ioptlist
         let selOpts = map (id &&& (optselected val)) opts
         [whamlet|
@@ -394,12 +425,15 @@ $newline never
         where
             optselected (Left _) _ = False
             optselected (Right vals) opt = (optionInternalValue opt) `elem` vals
+-}
 
 radioFieldList :: (Eq a, RenderMessage master FormMessage, RenderMessage master msg) => [(msg, a)] -> Field sub master a
 radioFieldList = radioField . optionsPairs
 
 radioField :: (Eq a, RenderMessage master FormMessage) => GHandler sub master (OptionList a) -> Field sub master a
-radioField = selectFieldHelper
+radioField = error "radioField TH TODO"
+{- 
+  selectFieldHelper
     (\theId _name _attrs inside -> [whamlet|
 $newline never
 <div ##{theId}>^{inside}
@@ -418,11 +452,14 @@ $newline never
         <input id=#{theId}-#{value} type=radio name=#{name} value=#{value} :isSel:checked *{attrs}>
         \#{text}
 |])
+-}
 
 boolField :: RenderMessage master FormMessage => Field sub master Bool
 boolField = Field
       { fieldParse = \e _ -> return $ boolParser e
-      , fieldView = \theId name attrs val isReq -> [whamlet|
+      , fieldView = \theId name attrs val isReq -> error "boolField TH TODO"
+{-
+[whamlet|
 $newline never
   $if not isReq
       <input id=#{theId}-none *{attrs} type=radio name=#{name} value=none checked>
@@ -435,6 +472,7 @@ $newline never
 <input id=#{theId}-no *{attrs} type=radio name=#{name} value=no :showVal not val:checked>
 <label for=#{theId}-no>_{MsgBoolNo}
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
   where
@@ -458,10 +496,13 @@ $newline never
 checkBoxField :: RenderMessage m FormMessage => Field s m Bool
 checkBoxField = Field
     { fieldParse = \e _ -> return $ checkBoxParser e
-    , fieldView  = \theId name attrs val _ -> [whamlet|
+    , fieldView  = \theId name attrs val _ -> error "checkBoxField TH TODO"
+{-
+  [whamlet|
 $newline never
 <input id=#{theId} *{attrs} type=checkbox name=#{name} value=yes :showVal id val:checked>
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
 
@@ -566,9 +607,11 @@ fileField = Field
         case files of
             [] -> Right Nothing
             file:_ -> Right $ Just file
-    , fieldView = \id' name attrs _ isReq -> toWidget [hamlet|
+    , fieldView = \id' name attrs _ isReq -> error "fieldField TODO"
+{- toWidget [hamlet|
             <input id=#{id'} name=#{name} *{attrs} type=file :isReq:required>
         |]
+-}
     , fieldEnctype = Multipart
     }
 
@@ -594,10 +637,13 @@ fileAFormReq fs = AForm $ \(master, langs) menvs ints -> do
             { fvLabel = toHtml $ renderMessage master langs $ fsLabel fs
             , fvTooltip = fmap (toHtml . renderMessage master langs) $ fsTooltip fs
             , fvId = id'
-            , fvInput = [whamlet|
+            , fvInput = error "fileAFormReq TH TODO"
+{-
+[whamlet|
 $newline never
 <input type=file name=#{name} ##{id'} *{fsAttrs fs}>
 |]
+-}
             , fvErrors = errs
             , fvRequired = True
             }
@@ -623,10 +669,13 @@ fileAFormOpt fs = AForm $ \(master, langs) menvs ints -> do
             { fvLabel = toHtml $ renderMessage master langs $ fsLabel fs
             , fvTooltip = fmap (toHtml . renderMessage master langs) $ fsTooltip fs
             , fvId = id'
-            , fvInput = [whamlet|
+            , fvInput = error "fileAFormOpt TH TODO"
+{-
+[whamlet|
 $newline never
 <input type=file name=#{name} ##{id'} *{fsAttrs fs}>
 |]
+-}
             , fvErrors = errs
             , fvRequired = False
             }
diff --git a/Yesod/Form/Functions.hs b/Yesod/Form/Functions.hs
index db3e493..a51e132 100644
--- a/Yesod/Form/Functions.hs
+++ b/Yesod/Form/Functions.hs
@@ -44,20 +44,21 @@ module Yesod.Form.Functions
 
 import Yesod.Form.Types
 import Data.Text (Text, pack)
+import Data.Foldable
 import Control.Arrow (second)
 import Control.Monad.Trans.RWS (ask, get, put, runRWST, tell, evalRWST)
 import Control.Monad.Trans.Class (lift)
 import Control.Monad (liftM, join)
 import Crypto.Classes (constTimeEq)
 import Text.Blaze (Markup, toMarkup)
+import qualified Text.Blaze.Internal
 #define Html Markup
 #define toHtml toMarkup
 import Yesod.Handler (GHandler, getRequest, runRequestBody, newIdent, getYesod)
 import Yesod.Core (RenderMessage, SomeMessage (..))
-import Yesod.Widget (GWidget, whamlet)
+import Yesod.Widget (GWidget, toWidget)
 import Yesod.Request (reqToken, reqWaiRequest, reqGetParams, languages)
 import Network.Wai (requestMethod)
-import Text.Hamlet (shamlet)
 import Data.Monoid (mempty)
 import Data.Maybe (listToMaybe, fromMaybe)
 import Yesod.Message (RenderMessage (..))
@@ -66,6 +67,7 @@ import qualified Data.Text.Encoding as TE
 import Control.Applicative ((<$>))
 import Control.Arrow (first)
 import Yesod.Request (FileInfo)
+import Text.Hamlet (condH, maybeH)
 
 -- | Get a unique identifier.
 newFormIdent :: MForm sub master Text
@@ -189,26 +191,7 @@ postHelper  :: RenderMessage master FormMessage
 postHelper form env = do
     req <- getRequest
     let tokenKey = "_token"
-    let token =
-            case reqToken req of
-                Nothing -> mempty
-                Just n -> [shamlet|
-$newline never
-<input type=hidden name=#{tokenKey} value=#{n}>
-|]
-    m <- getYesod
-    langs <- languages
-    ((res, xml), enctype) <- runFormGeneric (form token) m langs env
-    let res' =
-            case (res, env) of
-                (FormSuccess{}, Just (params, _))
-                    | not (Map.lookup tokenKey params === reqToken req) ->
-                        FormFailure [renderMessage m langs MsgCsrfWarning]
-                _ -> res
-            where (Just [t1]) === (Just t2) = TE.encodeUtf8 t1 `constTimeEq` TE.encodeUtf8 t2
-                  Nothing     === Nothing   = True   -- It's important to use constTimeEq
-                  _           === _         = False  -- in order to avoid timing attacks.
-    return ((res', xml), enctype)
+    error "yesod-form postHelper needs TH, disabled"
 
 -- | Similar to 'runFormPost', except it always ignore the currently available
 -- environment. This is necessary in cases like a wizard UI, where a single
@@ -253,7 +236,8 @@ getKey :: Text
 getKey = "_hasdata"
 
 getHelper :: (Html -> MForm sub master a) -> Maybe (Env, FileEnv) -> GHandler sub master (a, Enctype)
-getHelper form env = do
+getHelper form env = error "yesod-form getHelper needs TH, disabled"
+{-
     let fragment = [shamlet|
 $newline never
 <input type=hidden name=#{getKey}>
@@ -261,6 +245,7 @@ $newline never
     langs <- languages
     m <- getYesod
     runFormGeneric (form fragment) m langs env
+-}
 
 type FormRender sub master a =
        AForm sub master a
@@ -271,6 +256,7 @@ renderTable, renderDivs, renderDivsNoLabels :: FormRender sub master a
 renderTable aform fragment = do
     (res, views') <- aFormToForm aform
     let views = views' []
+{-
     let widget = [whamlet|
 $newline never
 \#{fragment}
@@ -285,6 +271,8 @@ $forall view <- views
             <td .errors>#{err}
 |]
     return (res, widget)
+-}
+    error "yesod-form renderTable, needs TN, not implemented"
 
 -- | render a field inside a div
 renderDivs = renderDivsMaybeLabels True
@@ -293,7 +281,8 @@ renderDivs = renderDivsMaybeLabels True
 renderDivsNoLabels = renderDivsMaybeLabels False
 
 renderDivsMaybeLabels :: Bool -> FormRender sub master a
-renderDivsMaybeLabels withLabels aform fragment = do
+renderDivsMaybeLabels withLabels aform fragment = error "yesod-form renderDivsMaybeLabels needs TH, not implemented"
+{-
     (res, views') <- aFormToForm aform
     let views = views' []
     let widget = [whamlet|
@@ -310,6 +299,7 @@ $forall view <- views
             <div .errors>#{err}
 |]
     return (res, widget)
+-}
 
 -- | Render a form using Bootstrap-friendly shamlet syntax.
 --
@@ -332,19 +322,73 @@ renderBootstrap aform fragment = do
     let views = views' []
         has (Just _) = True
         has Nothing  = False
-    let widget = [whamlet|
-$newline never
-\#{fragment}
-$forall view <- views
-    <div .control-group .clearfix :fvRequired view:.required :not $ fvRequired view:.optional :has $ fvErrors view:.error>
-        <label .control-label for=#{fvId view}>#{fvLabel view}
-        <div .controls .input>
-            ^{fvInput view}
-            $maybe tt <- fvTooltip view
-                <span .help-block>#{tt}
-            $maybe err <- fvErrors view
-                <span .help-block>#{err}
-|]
+    let widget =     do { Yesod.Widget.toWidget
+           (Text.Blaze.toHtml fragment);
+         Data.Foldable.mapM_
+           (\ view_a55Y
+              -> do { Yesod.Widget.toWidget
+                        ((Text.Blaze.Internal.preEscapedText . pack)
+                           "<div class=\"control-group clearfix ");
+                      Text.Hamlet.condH
+                        [(fvRequired view_a55Y, 
+                          Yesod.Widget.toWidget
+                            ((Text.Blaze.Internal.preEscapedText . pack)
+                               "required "))]
+                        Nothing;
+                      Text.Hamlet.condH
+                        [(not (fvRequired view_a55Y), 
+                          Yesod.Widget.toWidget
+                            ((Text.Blaze.Internal.preEscapedText . pack)
+                               "optional "))]
+                        Nothing;
+                      Text.Hamlet.condH
+                        [(has (fvErrors view_a55Y), 
+                          Yesod.Widget.toWidget
+                            ((Text.Blaze.Internal.preEscapedText . pack)
+                               "error"))]
+                        Nothing;
+                      Yesod.Widget.toWidget
+                        ((Text.Blaze.Internal.preEscapedText . pack)
+                           "\"><label class=\"control-label\" for=\"");
+                      Yesod.Widget.toWidget
+                        (Text.Blaze.toHtml (fvId view_a55Y));
+                      Yesod.Widget.toWidget
+                        ((Text.Blaze.Internal.preEscapedText . pack)
+                           "\">");
+                      Yesod.Widget.toWidget
+                        (Text.Blaze.toHtml (fvLabel view_a55Y));
+                      Yesod.Widget.toWidget
+                        ((Text.Blaze.Internal.preEscapedText . pack)
+                           "</label><div class=\"controls input\">");
+                      Yesod.Widget.toWidget (fvInput view_a55Y);
+                      Text.Hamlet.maybeH
+                        (fvTooltip view_a55Y)
+                        (\ tt_a55Z
+                           -> do { Yesod.Widget.toWidget
+                                     ((Text.Blaze.Internal.preEscapedText . pack)
+                                        "<span class=\"help-block\">");
+                                   Yesod.Widget.toWidget
+                                     (Text.Blaze.toHtml tt_a55Z);
+                                   Yesod.Widget.toWidget
+                                     ((Text.Blaze.Internal.preEscapedText . pack)
+                                        "</span>") })
+                        Nothing;
+                      Text.Hamlet.maybeH
+                        (fvErrors view_a55Y)
+                        (\ err_a560
+                           -> do { Yesod.Widget.toWidget
+                                     ((Text.Blaze.Internal.preEscapedText . pack)
+                                        "<span class=\"help-block\">");
+                                   Yesod.Widget.toWidget
+                                     (Text.Blaze.toHtml err_a560);
+                                   Yesod.Widget.toWidget
+                                     ((Text.Blaze.Internal.preEscapedText . pack)
+                                        "</span>") })
+                        Nothing;
+                      Yesod.Widget.toWidget
+                        ((Text.Blaze.Internal.preEscapedText . pack)
+                           "</div></div>") })
+           views }
     return (res, widget)
 
 check :: RenderMessage master msg
diff --git a/Yesod/Form/Jquery.hs b/Yesod/Form/Jquery.hs
index 85a0c76..656a8e0 100644
--- a/Yesod/Form/Jquery.hs
+++ b/Yesod/Form/Jquery.hs
@@ -18,8 +18,7 @@ import Yesod.Form
 import Yesod.Widget
 import Data.Time (Day)
 import Data.Default
-import Text.Hamlet (shamlet)
-import Text.Julius (julius, rawJS)
+import Text.Julius (rawJS)
 import Data.Text (Text, pack, unpack)
 import Data.Monoid (mconcat)
 import Yesod.Core (RenderMessage)
@@ -63,7 +62,8 @@ jqueryDayField jds = Field
                   Right
               . readMay
               . unpack
-    , fieldView = \theId name attrs val isReq -> do
+    , fieldView = \theId name attrs val isReq -> error "jqueryDayField TH TODO"
+{- 
         toWidget [shamlet|
 $newline never
 <input id="#{theId}" name="#{name}" *{attrs} type="date" :isReq:required="" value="#{showVal val}">
@@ -85,10 +85,11 @@ $(function(){
     }
 });
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
   where
-    showVal = either id (pack . show)
+{-    showVal = either id (pack . show) -}
     jsBool True = toJSON True
     jsBool False = toJSON False
     mos (Left i) = show i
@@ -104,7 +105,8 @@ jqueryAutocompleteField :: (RenderMessage master FormMessage, YesodJquery master
                         => Route master -> Field sub master Text
 jqueryAutocompleteField src = Field
     { fieldParse = parseHelper $ Right
-    , fieldView = \theId name attrs val isReq -> do
+    , fieldView = \theId name attrs val isReq -> error "jqueryAutocompleteField TH TODO"
+{-
         toWidget [shamlet|
 $newline never
 <input id="#{theId}" name="#{name}" *{attrs} type="text" :isReq:required="" value="#{either id id val}" .autocomplete>
@@ -115,6 +117,7 @@ $newline never
         toWidget [julius|
 $(function(){$("##{rawJS theId}").autocomplete({source:"@{src}",minLength:2})});
 |]
+-}
     , fieldEnctype = UrlEncoded
     }
 
diff --git a/Yesod/Form/MassInput.hs b/Yesod/Form/MassInput.hs
index 62e89d6..14a4125 100644
--- a/Yesod/Form/MassInput.hs
+++ b/Yesod/Form/MassInput.hs
@@ -12,7 +12,7 @@ module Yesod.Form.MassInput
 import Yesod.Form.Types
 import Yesod.Form.Functions
 import Yesod.Form.Fields (boolField)
-import Yesod.Widget (GWidget, whamlet)
+import Yesod.Widget (GWidget)
 import Yesod.Message (RenderMessage)
 import Yesod.Handler (newIdent, GHandler)
 import Text.Blaze.Html (Html)
@@ -75,7 +75,8 @@ inputList label fixXml single mdef = formToAForm $ do
         { fvLabel = label
         , fvTooltip = Nothing
         , fvId = theId
-        , fvInput = [whamlet|
+        , fvInput = error "inputList TH TODO" 
+{-[whamlet|
 $newline never
 ^{fixXml views}
 <p>
@@ -85,6 +86,7 @@ $newline never
     <input type=checkbox name=#{addName}>
     Add another row
 |]
+-}
         , fvErrors = Nothing
         , fvRequired = False
         }])
@@ -97,10 +99,12 @@ withDelete af = do
     deleteName <- newFormIdent
     (menv, _, _) <- ask
     res <- case menv >>= Map.lookup deleteName . fst of
-        Just ("yes":_) -> return $ Left [whamlet|
+        Just ("yes":_) -> return $ Left $ error "withDelete TH TODO"
+{- [whamlet|
 $newline never
 <input type=hidden name=#{deleteName} value=yes>
 |]
+-}
         _ -> do
             (_, xml2) <- aFormToForm $ areq boolField FieldSettings
                 { fsLabel = SomeMessage MsgDelete
@@ -126,7 +130,8 @@ fixme eithers =
 massDivs, massTable
          :: [[FieldView sub master]]
          -> GWidget sub master ()
-massDivs viewss = [whamlet|
+massDivs viewss = error "massDivs TODO" 
+{-[whamlet|
 $newline never
 $forall views <- viewss
     <fieldset>
@@ -139,8 +144,10 @@ $forall views <- viewss
                 $maybe err <- fvErrors view
                     <div .errors>#{err}
 |]
+-}
 
-massTable viewss = [whamlet|
+massTable viewss = error "massTable TH TODO"
+{- [whamlet|
 $newline never
 $forall views <- viewss
     <fieldset>
@@ -155,3 +162,4 @@ $forall views <- viewss
                     $maybe err <- fvErrors view
                         <td .errors>#{err}
 |]
+-}
diff --git a/yesod-form.cabal b/yesod-form.cabal
index b0ac64e..249de69 100644
--- a/yesod-form.cabal
+++ b/yesod-form.cabal
@@ -45,7 +45,6 @@ library
                      Yesod.Form.Input
                      Yesod.Form.Fields
                      Yesod.Form.Jquery
-                     Yesod.Form.Nic
                      Yesod.Form.MassInput
                      Yesod.Form.I18n.English
                      Yesod.Form.I18n.Portuguese
-- 
1.7.10.4