api ready
This commit is contained in:
parent
67d88bd31b
commit
c4b57d7a29
20 changed files with 440 additions and 568 deletions
|
|
@ -1,11 +1,10 @@
|
|||
<!-- Page Contents -->
|
||||
<div .container>
|
||||
$maybe msg <- mmsg
|
||||
<div>#{msg}
|
||||
|
||||
^{widget}
|
||||
$maybe msg <- mmsg
|
||||
<div>#{msg}
|
||||
^{widget}
|
||||
|
||||
<!-- Footer -->
|
||||
<footer>
|
||||
<p>
|
||||
#{appCopyright $ appSettings master}
|
||||
<p>
|
||||
#{appCopyright $ appSettings master}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<form action=@{DeleteGroupR} method="POST">
|
||||
<ul>
|
||||
$forall group <- groups
|
||||
<li>
|
||||
<input type="checkbox" name="ids" value="#{a group}">
|
||||
<a href="">#{(groupGroup . entityVal) group}
|
||||
<button type=submit>Delete selected
|
||||
<a href=@{GroupR}>Back
|
||||
<ul>
|
||||
$forall group <- groups
|
||||
<li>
|
||||
<input type="checkbox" name="ids" value="#{a group}">
|
||||
<a href="">#{(groupGroup . entityVal) group}
|
||||
<button type=submit>Delete selected
|
||||
<a href=@{GroupR}>Back
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<form action=@{EditTodolistItemsR groupId todolistId} method=POST>
|
||||
<label for="edit text area">Edit todolist
|
||||
<br>
|
||||
<textarea id="edit text area" name=text rows=30 cols=50 placeholder="[x] wake up1 [x] eat [ ] sleep [ ] repeat">#{text}
|
||||
<br>
|
||||
<button type="submit">edit
|
||||
<label for="edit text area">Edit todolist
|
||||
<br>
|
||||
<textarea id="edit text area" name=text rows=30 cols=50 placeholder="[x] wake up1 [x] eat [ ] sleep [ ] repeat">#{text}
|
||||
<br>
|
||||
<button type="submit">edit
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<form action=@{DeleteTodolistR groupId} method="POST">
|
||||
<ul>
|
||||
$forall list <- lists
|
||||
<li>
|
||||
<input type="checkbox" name="ids" value="#{keyToText list}">
|
||||
<a href="">#{(todolistTitle . entityVal) list}
|
||||
<button type=submit>Delete selected
|
||||
<a href=@{TodolistR groupId}>Back
|
||||
<ul>
|
||||
$forall list <- lists
|
||||
<li>
|
||||
<input type="checkbox" name="ids" value="#{keyToText list}">
|
||||
<a href="">#{(todolistTitle . entityVal) list}
|
||||
<button type=submit>Delete selected
|
||||
<a href=@{TodolistR groupId}>Back
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
<a href=@{GroupR}>Home
|
||||
<ul>
|
||||
$forall group <- groups
|
||||
<li>
|
||||
<a href=@{TodolistR $ entityKey group}>#{(groupGroup . entityVal) group}
|
||||
<form action=@{AddGroupR} method="post">
|
||||
<input type="text" name="group" placeholder="new group">
|
||||
<button type="submit">add
|
||||
<a href=@{EditGroupR}>Edit
|
||||
<ul>
|
||||
$forall group <- groups
|
||||
<li>
|
||||
<a href=@{TodolistR $ entityKey group}>#{(groupGroup . entityVal) group}
|
||||
<form action=@{AddGroupR} method="post">
|
||||
<input type="text" name="group" placeholder="new group">
|
||||
<button type="submit">add
|
||||
<a href=@{EditGroupR}>Edit
|
||||
|
|
|
|||
|
|
@ -1,141 +0,0 @@
|
|||
<div .masthead>
|
||||
<div .container>
|
||||
<div .row>
|
||||
<h1 .header>
|
||||
Yesod—a modern framework for blazing fast websites
|
||||
<h2>
|
||||
Fast, stable & spiced with great community
|
||||
<a href="http://www.yesodweb.com/book/" .btn.btn-info.btn-lg>
|
||||
Read the Book
|
||||
|
||||
<div .container>
|
||||
<!-- Starting
|
||||
================================================== -->
|
||||
<div .bs-docs-section>
|
||||
<div .row>
|
||||
<div .col-lg-12>
|
||||
<div .page-header>
|
||||
<h1 #start>Starting
|
||||
|
||||
<p>
|
||||
Now that you have a working project you should use the
|
||||
<a href=http://www.yesodweb.com/book/>Yesod book</a> to learn more.
|
||||
<p>
|
||||
You can also use this scaffolded site to explore some concepts, and best practices.
|
||||
|
||||
<ul .list-group>
|
||||
|
||||
<li .list-group-item>
|
||||
This page was generated by the <tt>#{handlerName}</tt> handler in
|
||||
<tt>Handler/Home.hs</tt>.
|
||||
|
||||
<li .list-group-item>
|
||||
The <tt>#{handlerName}</tt> handler is set to generate your
|
||||
site's home screen in the Routes file
|
||||
<tt>config/routes.yesodroutes
|
||||
|
||||
<li .list-group-item>
|
||||
We can link to other handlers, like the <a href="@{ProfileR}">Profile</a>.
|
||||
Try it out as an anonymous user and see the access denied.
|
||||
Then, try to <a href="@{AuthR LoginR}">login</a> with the dummy authentication added
|
||||
while in development.
|
||||
|
||||
<li .list-group-item>
|
||||
The HTML you are seeing now is actually composed by a number of <em>widgets</em>, #
|
||||
most of them are brought together by the <tt>defaultLayout</tt> function which #
|
||||
is defined in the <tt>Foundation.hs</tt> module, and used by <tt>#{handlerName}</tt>. #
|
||||
All the files for templates and widgets are in <tt>templates</tt>.
|
||||
|
||||
<li .list-group-item>
|
||||
A Widget's Html, Css and Javascript are separated in three files with the
|
||||
<tt>.hamlet</tt>, <tt>.lucius</tt> and <tt>.julius</tt> extensions.
|
||||
|
||||
<li .list-group-item ##{aDomId}>
|
||||
If you had javascript enabled then you wouldn't be seeing this.
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- Forms
|
||||
================================================== -->
|
||||
<div .bs-docs-section>
|
||||
<div .row>
|
||||
<div .col-lg-12>
|
||||
<div .page-header>
|
||||
<h1 #forms>Forms
|
||||
|
||||
<p>
|
||||
This is an example of a form. Read the
|
||||
<a href="http://www.yesodweb.com/book/forms">Forms chapter</a> #
|
||||
in the yesod book to learn more about them.
|
||||
|
||||
<div .row>
|
||||
<div .col-lg-6>
|
||||
<div .bs-callout bs-callout-info well>
|
||||
<form .form-horizontal method=post action=@{HomeR}#forms enctype=#{formEnctype}>
|
||||
^{formWidget}
|
||||
|
||||
<button .btn.btn-primary type="submit">
|
||||
Upload it!
|
||||
|
||||
|
||||
<div .col-lg-4.col-lg-offset-1>
|
||||
<div .bs-callout.bs-callout-info.upload-response>
|
||||
|
||||
$maybe (FileForm info con) <- submission
|
||||
Your file type is <em>#{fileContentType info}</em>. You say it has: <em>#{con}</em>
|
||||
|
||||
$nothing
|
||||
File upload result will be here...
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- JSON
|
||||
================================================== -->
|
||||
<div .bs-docs-section>
|
||||
<div .row>
|
||||
<div .col-lg-12>
|
||||
<div .page-header>
|
||||
<h1 #json>JSON
|
||||
|
||||
<p>
|
||||
Yesod has JSON support baked-in.
|
||||
The form below makes an AJAX request with Javascript,
|
||||
then updates the page with your submission.
|
||||
(see <tt>Handler/Comment.hs</tt>, <tt>templates/homepage.julius</tt>,
|
||||
and <tt>Handler/Home.hs</tt> for the implementation).
|
||||
|
||||
<div .row>
|
||||
<div .col-lg-6>
|
||||
<div .bs-callout.bs-callout-info.well>
|
||||
<form .form-horizontal ##{commentFormId}>
|
||||
<div .field>
|
||||
<textarea rows="2" ##{commentTextareaId} placeholder="Your comment here..." required></textarea>
|
||||
|
||||
<button .btn.btn-primary type=submit>
|
||||
Create comment
|
||||
|
||||
<div .col-lg-4.col-lg-offset-1>
|
||||
<div .bs-callout.bs-callout-info>
|
||||
<small>
|
||||
Your comments will appear here. You can also open the
|
||||
console log to see the raw response from the server.
|
||||
<ul ##{commentListId}>
|
||||
$forall comment <- allComments
|
||||
<li>#{commentMessage $ entityVal comment}
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- Testing
|
||||
================================================== -->
|
||||
<div .bs-docs-section>
|
||||
<div .row>
|
||||
<div .col-lg-12>
|
||||
<div .page-header>
|
||||
<h1 #test>Testing
|
||||
|
||||
<p>
|
||||
And last but not least, Testing. In <tt>test/Spec.hs</tt> you will find a #
|
||||
test suite that performs tests on this page.
|
||||
<p>
|
||||
You can run your tests by doing: <code>stack test</code>
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
document.getElementById(#{toJSON aDomId}).innerHTML = "This text was added by the Javascript part of the homepage widget.";
|
||||
|
||||
$(function() {
|
||||
$("##{rawJS commentFormId}").submit(function(event) {
|
||||
event.preventDefault();
|
||||
|
||||
var message = $("##{rawJS commentTextareaId}").val();
|
||||
// (Browsers that enforce the "required" attribute on the textarea won't see this alert)
|
||||
if (!message) {
|
||||
alert("Please fill out the comment form first.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Make an AJAX request to the server to create a new comment
|
||||
$.ajax({
|
||||
url: '@{CommentR}',
|
||||
type: 'POST',
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({
|
||||
message: message,
|
||||
}),
|
||||
success: function (data) {
|
||||
var newNode = $("<li></li>");
|
||||
newNode.text(data.message);
|
||||
console.log(data);
|
||||
$("##{rawJS commentListId}").append(newNode);
|
||||
},
|
||||
error: function (data) {
|
||||
console.log("Error creating comment: " + data);
|
||||
},
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
h2##{aDomId} {
|
||||
color: #990
|
||||
}
|
||||
|
||||
li {
|
||||
line-height: 2em;
|
||||
font-size: 16px
|
||||
}
|
||||
|
||||
##{commentTextareaId} {
|
||||
width: 400px;
|
||||
height: 100px;
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
<div .ui.container>
|
||||
|
||||
<h1>
|
||||
Access granted!
|
||||
|
||||
<p>
|
||||
This page is protected and access is allowed only for authenticated users.
|
||||
|
||||
<p>
|
||||
Your data is protected with us <strong><span class="username">#{userIdent user}</span></strong>!
|
||||
|
|
@ -1,17 +1,17 @@
|
|||
<a href=@{GroupR}>Home
|
||||
|
||||
<a href=@{TodolistR groupId}>Lists
|
||||
<ul>
|
||||
$forall item <- items
|
||||
<li>
|
||||
<form action=@{CheckTodolistItemR groupId todolistId (entityKey item)} method="POST">
|
||||
<button type="submit">#{getText item}
|
||||
<form action=@{AddTodolistItemR groupId todolistId} method="post">
|
||||
<form action=@{AddTodolistItemR groupId todolistId} method="post">
|
||||
<input type="text" name="item" placeholder="new item">
|
||||
<button type="submit">add
|
||||
<form action=@{TrimTodolistItemsR groupId todolistId} method="post">
|
||||
<button type="submit">trim
|
||||
<form action=@{SortTodolistItemsR groupId todolistId} method="post">
|
||||
<button type="submit">sort
|
||||
<a href=@{EditTodolistItemsR groupId todolistId}>Edit
|
||||
|
||||
<a href=@{TodolistR groupId}>Lists
|
||||
<ul>
|
||||
$forall item <- items
|
||||
<li>
|
||||
<form action=@{CheckTodolistItemR groupId todolistId (entityKey item)} method="POST">
|
||||
<button type="submit">#{getText item}
|
||||
<form action=@{AddTodolistItemR groupId todolistId} method="post">
|
||||
<form action=@{AddTodolistItemR groupId todolistId} method="post">
|
||||
<input type="text" name="item" placeholder="new item">
|
||||
<button type="submit">add
|
||||
<form action=@{TrimTodolistItemsR groupId todolistId} method="post">
|
||||
<button type="submit">trim
|
||||
<form action=@{SortTodolistItemsR groupId todolistId} method="post">
|
||||
<button type="submit">sort
|
||||
<a href=@{EditTodolistItemsR groupId todolistId}>Edit
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<a href=@{GroupR}>Home
|
||||
<ul>
|
||||
$forall list <- lists
|
||||
<li>
|
||||
<a href=@{TodolistItemsR groupId (entityKey list)}>#{getTitle list}
|
||||
<form action=@{AddTodolistR groupId} method="post">
|
||||
<input type="text" name="list" placeholder="new list">
|
||||
<button type="submit">add
|
||||
<form action=@{AddUserR groupId} method="post">
|
||||
<input type="text" name="user" placeholder="new user">
|
||||
<button type="submit">share
|
||||
<a href=@{EditTodolistR groupId}>Edit
|
||||
<ul>
|
||||
$forall list <- lists
|
||||
<li>
|
||||
<a href=@{TodolistItemsR groupId (entityKey list)}>#{getTitle list}
|
||||
<form action=@{AddTodolistR groupId} method="post">
|
||||
<input type="text" name="list" placeholder="new list">
|
||||
<button type="submit">add
|
||||
<form action=@{AddUserR groupId} method="post">
|
||||
<input type="text" name="user" placeholder="new user">
|
||||
<button type="submit">share
|
||||
<a href=@{EditTodolistR groupId}>Edit
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue