packages feed

darcsden-1.1: src/DarcsDen/Pages/User.hs

{-# OPTIONS_GHC -F -pgmF trhsx #-}
module DarcsDen.Pages.User where

import HSP

import Data.Maybe (fromMaybe, isJust)

import DarcsDen.Pages.Base
import DarcsDen.Pages.HSPage ( HSPage )
import DarcsDen.Pages.Util ( repoForkSourceDescription )
import DarcsDen.State.Repository
import DarcsDen.State.User
import DarcsDen.State.Session
import DarcsDen.Settings


user :: User -> [Repository] -> HSPage
user u repos sess = base
    (uName u)
    True
    <span><% uName u %></span>
    <ul class="links">
        <% if sUser sess == Just (uName u) then <% createlink %> else <% "" %> %>
    </ul>
    <div class="user">
        <h2><% uName u %>'s repositories</h2>
        <% repositories repos %>
    </div>
    sess
    where
        createlink = <li class="create"><a href=(baseUrl ++ "init")>new repo</a></li>
        repositories :: [Repository] -> HSP XML
        repositories [] = <p class="blurb">nothing to see here, move along!</p>
        repositories rs = <ul class="user-repos"><% map repo rs %></ul>

repo :: Repository -> HSP XML
repo r =
    <li>
        <a href=(baseUrl ++ rOwner r ++ "/" ++ rName r) class=(if rIsPrivate r then "private-repo" else "public-repo")><% rName r %></a>
        <%
            if rDescription r /= ""
            then <% <span class="repo-description"><% cdata " &mdash; " %><% rDescription r %></span> %>
            else <% "" %>
        %>
        <% repoForkSourceDescription r %>
        <%
            if rWebsite r /= ""
            then <% <span class="repo-website"> (<a href=(rWebsite r) rel="nofollow"><% rWebsite r %></a>)</span> %>
            else <% "" %>
        %>
    </li>

register :: [(String, String)] -> HSPage
register is = base
    "register"
    False
    <span>register</span>
    <div></div>
    <div class="register">
        <h2>sign up</h2>
        <table>
        <tr><td><form class="big" action=(baseUrl ++ "register") method="post">
            <fieldset>
                <% field (input'' is "name") "username" "" %>
                <% field (input'' is "email") "email" "" %>
                <% field (password'' is "password1") "password" (convert is "oauth" "optional" "") %>
                <% field (password'' is "password2") "password, again" "" %>
                <% field (textarea' is 10 "keys") "ssh public key(s) (required for push)" "" %>
                <% field (security is "security_question") (convert is "oauth" "" "what RCS is hosted here ? (anti-spam)") "" %>
                <% submit "sign me up" %>
            </fieldset>
        </form></td></tr>
        <tr><td><form class="buttonform" action=(baseUrl++"register/github") method="get"><% submit "Sign up with Github" %></form></td></tr>
        <tr><td><form class="buttonform" action=(baseUrl++"register/google") method="get"><% submit "Sign up with Google" %></form></td></tr>
        </table>
    </div>
  where
    convert js i f nf = fromMaybe nf (fmap (const f) (lookup i js))
    input'' js n = inputWith' js n [("autocomplete","off")]
    security js n = <input type=(convert js "oauth" "hidden" "text") name=n id=n /> 
    password'' js n = passwordWith' js n [("autocomplete","off")]

login :: [(String, String)] -> HSPage
login is = base
    "login"
    False
    <span>login</span>
    <div></div>
    <div class="login">
        <h2>log in</h2>
        <table>
        <tr><td><form action=(baseUrl++"login") method="post">
            <fieldset>
                <% field (input' is "name") "name" "" %>
                <% field (password' is "password") "password" "" %>
                <% submit "log me in" %>
            </fieldset>
        </form></td></tr>
        <tr><td><form class="buttonform" action=(baseUrl++"login/github") method="get"><% submit "Sign in using Github" %></form></td></tr>
        <tr><td><form class="buttonform" action=(baseUrl++"login/google") method="get"><% submit "Sign in using Google" %></form></td></tr>
        <tr><td><a style="float:right" href=(baseUrl++"forgotpassword")> Forgot Password? </a></td></tr>
        </table>
    </div>

settings :: User -> HSPage
settings u = base
    "settings"
    False
    <span>settings</span>
    <div></div>
    <div class="settings">
        <h2>account settings</h2>
        <table>
        <tr><td><form class="big" action=(baseUrl ++ "settings") method="post">
            <fieldset>
                <% field (input "full_name" (uFullName u)) "full name" "" %>
                <% field (input "website" (uWebsite u)) "website" "" %>

                <h3>change password?</h3>
                <% if isJust (uPaS u) then field (password' [] "password") "current password" "" else <div></div> %>
                <% field (password' [] "password1") "new password" "" %>
                <% field (password' [] "password2") "(again)" "" %>

                <br />

                <% field (textarea 10 "keys" (unlines (uKeys u))) "pubkeys" "" %>

                <% submit "update settings" %>
            </fieldset>
        </form></td></tr>
        <tr><td><form class="buttonform" action=(baseUrl++"sync/github") method="get"><% submit "Link with Github" %></form></td></tr>
        <tr><td><form class="buttonform" action=(baseUrl++"sync/google") method="get"><% submit "Link with Google" %></form></td></tr>
        </table>
    </div>

forgotPassword :: [(String, String)] -> HSPage
forgotPassword is = base
   "forgot password"
   False
   <span>forgot password</span>
   <div></div>
   <div class="forgot-password">
      <h2>forgot password</h2>
      <form action=(baseUrl ++ "forgotpassword") method="post">
         <fieldset>
             <% field (input' is "username") "username" "" %>
             <% submit "submit" %>
         </fieldset>
      </form>
   </div>

resetPassword :: [(String, String)] -> HSPage
resetPassword _ = base
   "reset password"
   False
   <span>reset password</span>
   <div></div>
   <div class="reset-password">
      <h2>reset password</h2>
      <form action=(baseUrl ++ "recovery") method="post">
         <fieldset>
             <% field (password' [] "password1") "new password" "" %>
             <% field (password' [] "password2") "(again)" "" %>
             <% submit "submit" %>
         </fieldset>
      </form>
   </div>