Skip to content

Commit

Permalink
Site updated at 2012-01-01 22:32:13 UTC
Browse files Browse the repository at this point in the history
  • Loading branch information
norm2782 committed Jan 1, 2012
1 parent ebfd708 commit 7e4fc9d
Show file tree
Hide file tree
Showing 7 changed files with 258 additions and 168 deletions.
65 changes: 38 additions & 27 deletions atom.xml
Expand Up @@ -4,7 +4,7 @@
<title><![CDATA[Norm 2782]]></title>
<link href="http://norm2782.github.com/atom.xml" rel="self"/>
<link href="http://norm2782.github.com/"/>
<updated>2012-01-01T23:20:17+01:00</updated>
<updated>2012-01-01T23:32:11+01:00</updated>
<id>http://norm2782.github.com/</id>
<author>
<name><![CDATA[Jurriën Stutterheim]]></name>
Expand Down Expand Up @@ -63,6 +63,7 @@ first some imports:</p>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
</pre></td><td class='code'><pre><code class='haskell'><span class='line'><span class="cm">{-# LANGUAGE OverloadedStrings, TemplateHaskell #-}</span>
</span><span class='line'>
</span><span class='line'><span class="kr">module</span> <span class="nn">Site</span>
Expand All @@ -79,14 +80,15 @@ first some imports:</p>
</span><span class='line'><span class="kr">import</span> <span class="nn">Snap.Snaplet</span>
</span><span class='line'><span class="kr">import</span> <span class="nn">Snap.Snaplet.Heist</span>
</span><span class='line'><span class="kr">import</span> <span class="nn">Text.Blaze</span>
</span><span class='line'><span class="kr">import</span> <span class="nn">Text.Digestive</span>
</span><span class='line'><span class="kr">import</span> <span class="nn">Text.Digestive.Forms.Snap</span>
</span><span class='line'><span class="kr">import</span> <span class="nn">Text.Blaze.Renderer.XmlHtml</span>
</span><span class='line'><span class="kr">import</span> <span class="nn">Text.Templating.Heist</span>
</span><span class='line'><span class="kr">import</span> <span class="k">qualified</span> <span class="nn">Text.Blaze.Html5</span> <span class="k">as</span> <span class="n">H</span>
</span><span class='line'><span class="kr">import</span> <span class="k">qualified</span> <span class="nn">Text.Blaze.Html5.Attributes</span> <span class="k">as</span> <span class="n">A</span>
</span><span class='line'><span class="kr">import</span> <span class="nn">Text.Blaze.Internal</span> <span class="p">(</span><span class="kt">HtmlM</span><span class="p">(</span><span class="o">..</span><span class="p">))</span>
</span><span class='line'><span class="kr">import</span> <span class="nn">Text.Blaze.Renderer.XmlHtml</span>
</span><span class='line'><span class="kr">import</span> <span class="nn">Text.Digestive</span>
</span><span class='line'><span class="kr">import</span> <span class="nn">Text.Digestive.Forms.Snap</span>
</span><span class='line'><span class="kr">import</span> <span class="nn">Text.Digestive.Blaze.Html5</span>
</span><span class='line'><span class="kr">import</span> <span class="k">qualified</span> <span class="nn">Text.Email.Validate</span> <span class="k">as</span> <span class="n">E</span>
</span><span class='line'><span class="kr">import</span> <span class="nn">Text.Templating.Heist</span>
</span></code></pre></td></tr></table></div></figure>
Expand Down Expand Up @@ -140,7 +142,10 @@ datatype:</p>
</span></code></pre></td></tr></table></div></figure>
<p>Defining the form is straight-forward if you are used to working with digestive-functors.
The form is wrapped in divs for better styling options and we attach validators to make
sure that we get a valid email address and a long enough password. The isValid function
comes from the email-validate library.</p>
<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
Expand All @@ -164,23 +169,8 @@ datatype:</p>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
</pre></td><td class='code'><pre><code class='haskell'><span class='line'><span class="nf">loginForm</span> <span class="ow">::</span> <span class="kt">Form</span> <span class="kt">AppHandler</span> <span class="kt">SnapInput</span> <span class="kt">Html</span> <span class="p">(</span><span class="kt">FormHtml</span> <span class="kt">Html</span><span class="p">)</span> <span class="kt">LoginData</span>
</span><span class='line'><span class="nf">loginForm</span> <span class="ow">=</span> <span class="nf">\</span><span class="n">e</span> <span class="n">p</span> <span class="n">r</span> <span class="kr">_</span> <span class="ow">-&gt;</span> <span class="kt">LoginData</span> <span class="n">e</span> <span class="n">p</span> <span class="n">r</span>
</span><span class='line'><span class="nf">loginForm</span> <span class="ow">=</span> <span class="p">(</span><span class="nf">\</span><span class="n">e</span> <span class="n">p</span> <span class="n">r</span> <span class="kr">_</span> <span class="ow">-&gt;</span> <span class="kt">LoginData</span> <span class="n">e</span> <span class="n">p</span> <span class="n">r</span><span class="p">)</span>
</span><span class='line'> <span class="o">&lt;$&gt;</span> <span class="n">mapViewHtml</span> <span class="kt">H</span><span class="o">.</span><span class="n">div</span> <span class="p">(</span>
</span><span class='line'> <span class="n">label</span> <span class="s">&quot;Email address: &quot;</span>
</span><span class='line'> <span class="o">++&gt;</span> <span class="n">inputText</span> <span class="kt">Nothing</span> <span class="p">`</span><span class="n">validate</span><span class="p">`</span> <span class="n">isEmail</span>
Expand All @@ -196,19 +186,40 @@ datatype:</p>
</span><span class='line'> <span class="n">submit</span> <span class="s">&quot;Login&quot;</span><span class="p">)</span>
</span><span class='line'>
</span><span class='line'><span class="nf">isEmail</span> <span class="ow">::</span> <span class="kt">Validator</span> <span class="kt">AppHandler</span> <span class="kt">Html</span> <span class="kt">Text</span>
</span><span class='line'><span class="nf">isEmail</span> <span class="ow">=</span> <span class="n">check</span> <span class="s">&quot;Invalid email address&quot;</span> <span class="p">(</span><span class="kt">T</span><span class="o">.</span><span class="n">singleton</span> <span class="sc">&#39;@&#39;</span> <span class="p">`</span><span class="kt">T</span><span class="o">.</span><span class="n">isInfixOf</span><span class="p">`)</span>
</span><span class='line'><span class="nf">isEmail</span> <span class="ow">=</span> <span class="n">check</span> <span class="s">&quot;Invalid email address&quot;</span> <span class="p">(</span><span class="kt">E</span><span class="o">.</span><span class="n">isValid</span> <span class="o">.</span> <span class="kt">T</span><span class="o">.</span><span class="n">unpack</span><span class="p">)</span>
</span><span class='line'>
</span><span class='line'><span class="nf">longPwd</span> <span class="ow">::</span> <span class="kt">Validator</span> <span class="kt">AppHandler</span> <span class="kt">Html</span> <span class="kt">Text</span>
</span><span class='line'><span class="nf">longPwd</span> <span class="ow">=</span> <span class="n">check</span> <span class="s">&quot;Password needs to be at least six characters long&quot;</span>
</span><span class='line'> <span class="o">$</span> <span class="nf">\</span><span class="n">xs</span> <span class="ow">-&gt;</span> <span class="kt">T</span><span class="o">.</span><span class="n">length</span> <span class="n">xs</span> <span class="o">&gt;=</span> <span class="mi">6</span>
</span><span class='line'>
</span><span class='line'><span class="nf">showForm</span> <span class="ow">::</span> <span class="kt">AttributeValue</span> <span class="ow">-&gt;</span> <span class="kt">FormHtml</span> <span class="p">(</span><span class="kt">HtmlM</span> <span class="n">a</span><span class="p">)</span> <span class="ow">-&gt;</span> <span class="kt">Html</span>
</span></code></pre></td></tr></table></div></figure>
<p>So far we have not seen anything new yet.</p>
<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='haskell'><span class='line'><span class="nf">showForm</span> <span class="ow">::</span> <span class="kt">AttributeValue</span> <span class="ow">-&gt;</span> <span class="kt">FormHtml</span> <span class="p">(</span><span class="kt">HtmlM</span> <span class="n">a</span><span class="p">)</span> <span class="ow">-&gt;</span> <span class="kt">Html</span>
</span><span class='line'><span class="nf">showForm</span> <span class="n">act</span> <span class="n">frm</span> <span class="ow">=</span>
</span><span class='line'> <span class="kr">let</span> <span class="p">(</span><span class="n">formHtml&#39;</span><span class="p">,</span> <span class="n">enctype</span><span class="p">)</span> <span class="ow">=</span> <span class="n">renderFormHtml</span> <span class="n">frm</span>
</span><span class='line'> <span class="kr">in</span> <span class="kt">H</span><span class="o">.</span><span class="n">form</span> <span class="o">!</span> <span class="kt">A</span><span class="o">.</span><span class="n">enctype</span> <span class="p">(</span><span class="kt">H</span><span class="o">.</span><span class="n">toValue</span> <span class="o">$</span> <span class="n">show</span> <span class="n">enctype</span><span class="p">)</span> <span class="o">!</span> <span class="kt">A</span><span class="o">.</span><span class="n">method</span> <span class="s">&quot;post&quot;</span>
</span><span class='line'> <span class="o">!</span> <span class="kt">A</span><span class="o">.</span><span class="n">action</span> <span class="n">act</span> <span class="o">$</span> <span class="n">formHtml&#39;</span> <span class="o">&gt;&gt;</span> <span class="n">return</span> <span class="nb">()</span>
</span><span class='line'>
</span><span class='line'><span class="nf">formHandler</span> <span class="ow">::</span> <span class="kt">AppHandler</span> <span class="nb">()</span>
</span></code></pre></td></tr></table></div></figure>
<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='haskell'><span class='line'><span class="nf">formHandler</span> <span class="ow">::</span> <span class="kt">AppHandler</span> <span class="nb">()</span>
</span><span class='line'><span class="nf">formHandler</span> <span class="ow">=</span> <span class="kr">do</span>
</span><span class='line'> <span class="n">res</span> <span class="ow">&lt;-</span> <span class="n">eitherSnapForm</span> <span class="n">loginForm</span> <span class="s">&quot;login-form&quot;</span>
</span><span class='line'> <span class="kr">case</span> <span class="n">res</span> <span class="kr">of</span>
Expand Down

0 comments on commit 7e4fc9d

Please sign in to comment.