Revert "removing depricated jade templates"
authorSeth Woodworth <seth@sethish.com>
Thu, 19 Jan 2012 02:23:04 +0000 (21:23 -0500)
committerSeth Woodworth <seth@sethish.com>
Thu, 19 Jan 2012 02:23:04 +0000 (21:23 -0500)
This reverts commit a6b2a896859987bb7c2e04a14e899155224b5d2b.

38 files changed:
views/activate.jade [new file with mode: 0644]
views/archive/courses.jade [new file with mode: 0644]
views/archive/index.jade [new file with mode: 0644]
views/archive/learn.jade [new file with mode: 0644]
views/archive/note.jade [new file with mode: 0644]
views/archive/notes.jade [new file with mode: 0644]
views/archive/notesLayout.jade [new file with mode: 0644]
views/course/form.jade [new file with mode: 0644]
views/course/index.jade [new file with mode: 0644]
views/course/new.jade [new file with mode: 0644]
views/footer.jade [new file with mode: 0644]
views/index.jade [new file with mode: 0644]
views/layout.jade [new file with mode: 0644]
views/lecture/form.jade [new file with mode: 0644]
views/lecture/index.jade [new file with mode: 0644]
views/lecture/new.jade [new file with mode: 0644]
views/login.jade [new file with mode: 0644]
views/masthead.jade [new file with mode: 0644]
views/notes/dropdown.jade [new file with mode: 0644]
views/notes/form.jade [new file with mode: 0644]
views/notes/index.jade [new file with mode: 0644]
views/notes/layout.jade [new file with mode: 0644]
views/notes/masthead.jade [new symlink]
views/notes/new.jade [new file with mode: 0644]
views/notes/noteLayout.jade [new file with mode: 0644]
views/notes/public.jade [new file with mode: 0644]
views/profile/index.jade [new file with mode: 0644]
views/register.jade [new file with mode: 0644]
views/resetpw-error.jade [new file with mode: 0644]
views/resetpw-success.jade [new file with mode: 0644]
views/resetpw.jade [new file with mode: 0644]
views/schools.jade [new file with mode: 0644]
views/static/about.jade [new file with mode: 0644]
views/static/conduct.jade [new file with mode: 0644]
views/static/contact.jade [new file with mode: 0644]
views/static/legal.jade [new file with mode: 0644]
views/static/press.jade [new file with mode: 0644]
views/static/privacy.jade [new file with mode: 0644]

diff --git a/views/activate.jade b/views/activate.jade
new file mode 100644 (file)
index 0000000..23aafc5
--- /dev/null
@@ -0,0 +1,28 @@
+div.header Activate
+div.content
+       div.container1
+               form#credentials( action = '/activate', method = 'POST' )
+                       div( class = 'row')
+                               div( class = 'label')
+                                       label( for = 'code' ) Activation Code
+                               div( class = 'field')
+                                       input( type = 'text', name = 'code', value = code)
+
+                       - if ( user.affil === 'Instructor' )
+                               div( class = 'row')
+                                       div( class = 'label')
+                                               label( for = 'password' ) New Password
+                                       div( class = 'field')
+                                               input( type = 'password', name = 'password' )
+
+                               div( class = 'row')
+                                       div( class = 'label')
+                                               label( for = 'name' ) Name
+                                       div( class = 'field')
+                                               input( type = 'text', name = 'name' )
+
+                       div( class = 'row')
+                               div( class = 'label')
+                                       &nbsp;
+                               div( class = 'field')
+                                       button Submit
diff --git a/views/archive/courses.jade b/views/archive/courses.jade
new file mode 100644 (file)
index 0000000..c95b1d1
--- /dev/null
@@ -0,0 +1,11 @@
+div.content
+       div.container1
+               h1 Archived Courses : #{ subject.name }
+               ul
+                       - if ( courses.length > 0 )
+                               - each course in courses
+                                       li
+                                               - course.section = course.section.replace(/\)/, '')
+                                               a( href = '/archive/course/#{ course.id }' ) #{ course.section + ' - ' + course.name }
+                       - else
+                               li No courses found.
diff --git a/views/archive/index.jade b/views/archive/index.jade
new file mode 100644 (file)
index 0000000..8afe90d
--- /dev/null
@@ -0,0 +1,14 @@
+div.content
+       div.container1
+               h1 Archived Subjects
+               p
+                       | Please browse our archive of past courses covered at Harvard from 2008 through 2010.
+
+               ul
+                       - if ( subjects.length > 0 )
+                               - each subject in subjects
+                                       li
+                                               a( href = '/archive/subject/#{ subject.id }' ) #{ subject.name }
+                       - else
+                               li No subjects found.
+
diff --git a/views/archive/learn.jade b/views/archive/learn.jade
new file mode 100644 (file)
index 0000000..5cc26f9
--- /dev/null
@@ -0,0 +1,10 @@
+div.content
+       div.container1
+               h1 Featured Courses 
+               ul
+                       - if ( courses.length > 0 )
+                               - each course in courses
+                                       li
+                                               a( href = '/archive/course/#{ course.id }' ) #{ course.name }
+                       - else
+                               li No courses found.
diff --git a/views/archive/note.jade b/views/archive/note.jade
new file mode 100644 (file)
index 0000000..8394d18
--- /dev/null
@@ -0,0 +1,11 @@
+div.content
+       div.container1
+               - course.section = course.section.replace(/\)/, '')
+               h1 !{ course.section + " &mdash; " + course.name}
+               h2 Note: #{ note.topic || note.id }
+
+               div.staticNote
+                       !{ note.text || 'This note is empty.' }
+
+               div( style = 'clear: both; height: 1px;' )
+
diff --git a/views/archive/notes.jade b/views/archive/notes.jade
new file mode 100644 (file)
index 0000000..fc83cdd
--- /dev/null
@@ -0,0 +1,15 @@
+div.content
+       div.container1
+               - course.section = course.section.replace(/\)/, '')
+               h1 #{ course.section + ' - ' + course.name }
+               p
+                       | Instructor: #{ course.instructor }
+               p
+                       #{ course.description }
+               ul
+                       - if ( notes.length > 0 )
+                               - each note in notes
+                                       li
+                                               a( href = '/archive/note/#{ note.id }' ) #{ note.topic || note.id }
+                       - else
+                               li No notes found.
diff --git a/views/archive/notesLayout.jade b/views/archive/notesLayout.jade
new file mode 100644 (file)
index 0000000..c0edd2e
--- /dev/null
@@ -0,0 +1,26 @@
+!!!
+html
+  head
+    title FinalsClub.org
+    link(rel='stylesheet', href='/stylesheets/fc2.css')
+
+    script(type='text/javascript', src='https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js')
+    script(type='text/javascript', src='/javascripts/es5-shim.min.js')
+
+    - if ( 'undefined' !== typeof stylesheets )
+        - each stylesheet in stylesheets
+            link( rel = 'stylesheet', href = '/stylesheets/#{ stylesheet }' )
+
+    - if ( 'undefined' !== typeof javascripts )
+        - each javascript in javascripts
+          script( type = 'text/javascript', src = '/javascripts/#{ javascript }' )
+
+    meta(name="viewport", content="width=device-width,user-scalable=no,minimum-scale=1.0,maximum-scale=1.0,initial-scale=1.0")
+    meta(name="apple-touch-icon", href="")
+    meta(name="icon", href="")
+
+  body
+    include ../masthead
+    != messages()
+    != body
+    include ../footer
diff --git a/views/course/form.jade b/views/course/form.jade
new file mode 100644 (file)
index 0000000..ca1ead8
--- /dev/null
@@ -0,0 +1,76 @@
+div.content
+       div.container1
+               form( method = 'POST' )
+                       - var course = course || false;
+                       - if (course)
+                               h1 Edit Course
+                               p
+                                       | Use this form to edit a course.
+
+                               div.row
+                                       div.label Course number
+                                       div.field
+                                               input( type = 'text', name = 'number', value = course.number )
+
+                               div.row
+                                       div.label Course name
+                                       div.field
+                                               input( type = 'text', name = 'name', value = course.name )
+                               div.row
+                                       div.label Course subject
+                                       div.field
+                                               input( type = 'text', name = 'subject', value = course.subject )
+                               div.row
+                                       div.label Course department
+                                       div.field
+                                               input( type = 'text', name = 'department', value = course.department )
+                               //
+                                       div.row
+                                               div.label Instructor's Name
+                                               div.field
+                                                       input( type = 'text', name = 'instructorName' )
+                                       div.row
+                                               div.label Instructor's Email
+                                               div.field
+                                                       input( type = 'text', name = 'email' )
+                               div.row
+                                       div( class = 'label')
+                                               &nbsp;
+                                       div( class = 'field')
+                                               button Save Course
+                       - else
+                               h1 Create New Course
+                               p
+                                       | Use this form to create a new course.
+                                       | After creating the course, you can create a lecture with in it.
+
+                               div.row
+                                       div.label Course number
+                                       div.field
+                                               input( type = 'text', name = 'number' )
+
+                               div.row
+                                       div.label Course name
+                                       div.field
+                                               input( type = 'text', name = 'name' )
+                               div.row
+                                       div.label Course subject
+                                       div.field
+                                               input( type = 'text', name = 'subject' )
+                               div.row
+                                       div.label Course department
+                                       div.field
+                                               input( type = 'text', name = 'department' )
+                               div.row
+                                       div.label Instructor's Name
+                                       div.field
+                                               input( type = 'text', name = 'instructorName' )
+                               div.row
+                                       div.label Instructor's Email
+                                       div.field
+                                               input( type = 'text', name = 'email' )
+                               div.row
+                                       div( class = 'label')
+                                               &nbsp;
+                                       div( class = 'field')
+                                               button Create Course
diff --git a/views/course/index.jade b/views/course/index.jade
new file mode 100644 (file)
index 0000000..068e86c
--- /dev/null
@@ -0,0 +1,36 @@
+div.content
+       div.container1
+
+               h1 #{ course.displayName }
+               - if ( course.authorized )
+                       p Instructor: 
+                               a( href = 'mailto:#{ instructor.email }' ) #{ instructor.name }
+               - else
+                       p Instructor: #{ instructor.name }
+
+               hr
+
+               h2 Existing Lectures 
+
+               ul
+                       - if ( lectures.length > 0 )
+                               - each lecture in lectures
+                                       li
+                                               a( href = '/lecture/#{ lecture._id }' ) #{ lecture.name }
+                       - else
+                               p No lectures have been created for this course yet.
+
+               hr
+
+               - if ( course.authorized )
+                       div
+                               span(class='sub_menu')
+                                       a( href = '/course/#{ course._id }/lecture/new' ) New Lecture
+               - if ( user.admin )
+                       div
+                               span(class='sub_menu')
+                                       a( href = '/course/#{ course._id }/edit' ) Edit Course
+                       div
+                               span(class='sub_menu')
+                                       a( href = '/course/#{ course._id }/delete' ) Delete Course
+
diff --git a/views/course/new.jade b/views/course/new.jade
new file mode 100644 (file)
index 0000000..9364629
--- /dev/null
@@ -0,0 +1 @@
+!=partial( 'form' )
diff --git a/views/footer.jade b/views/footer.jade
new file mode 100644 (file)
index 0000000..dfc359e
--- /dev/null
@@ -0,0 +1,24 @@
+div.footer
+       table
+               tr
+                       td.col1
+                               div.logo
+                                       img.lilogo(src="/images/finals-club-wht.png", title="FinalsClub.org")
+                               div Copyright 2011
+                               div All Rights Reserved
+                       td.col2
+                               a(href="/conduct") Code of Conduct
+                               a(href="http://blog.finalsclub.org/about.html") About
+                               a(href="http://blog.finalsclub.org/contact.html") Contact
+                               a(href="http://blog.finalsclub.org/legal.html") Legal
+                               a(href="http://blog.finalsclub.org/team.html") Team
+
+div.footerer
+       p
+               | This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 United States License
+       p
+               a(rel="license",href="http://creativecommons.org/licenses/by-sa/3.0/us/")
+                       img(alt="Creative Commons License",style="border-width:0",src="http://i.creativecommons.org/l/by-sa/3.0/us/88x31.png")
+
+
+
diff --git a/views/index.jade b/views/index.jade
new file mode 100644 (file)
index 0000000..d4a9658
--- /dev/null
@@ -0,0 +1,14 @@
+div.contenthome
+       div.tagline
+               p
+                       | Welcome to FinalsClub.org, a 501(c)(3) non-profit open education project dedicated to helping college students collaborate, learn, and share their knowledge freely online.
+               p
+                       | Please create an account with your school email address to try our tools or browse our course archive to learn something new.  Thank you for helping us improve access to education, one lecture at a time.
+               p
+                       div.button.green#learnsomething Learn something >> 
+               iframe(src="http://player.vimeo.com/video/30647271?title=0&amp;byline=0&amp;portrait=0", width="350", height="250", frameborder="0", webkitAllowFullScreen, allowFullScreen)
+
+script.
+       $("#learnsomething").click(function() {
+               document.location = "/learn/random";
+       });
diff --git a/views/layout.jade b/views/layout.jade
new file mode 100644 (file)
index 0000000..3af06f7
--- /dev/null
@@ -0,0 +1,27 @@
+!!!
+html
+  head
+    title FinalsClub.org
+
+    link(rel='stylesheet', href='/stylesheets/fc2.css')
+    script(type='text/javascript', src='https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js')
+    script(type='text/javascript', src='/javascripts/es5-shim.min.js')
+    script(type='text/javascript', src='/socket.io/socket.io.js')
+
+    - if ( 'undefined' !== typeof stylesheets )
+        - each stylesheet in stylesheets
+            link( rel = 'stylesheet', href = '/stylesheets/#{ stylesheet }' )
+
+    - if ( 'undefined' !== typeof javascripts )
+        - each javascript in javascripts
+            script( type = 'text/javascript', src = '/javascripts/#{ javascript }' )
+
+    meta(name="viewport", content="width=device-width,user-scalable=no,minimum-scale=1.0,maximum-scale=1.0,initial-scale=1.0")
+    meta(name="apple-touch-icon", href="")
+    meta(name="icon", href="")
+
+  body
+    include masthead
+    != messages()
+    != body
+    include footer
diff --git a/views/lecture/form.jade b/views/lecture/form.jade
new file mode 100644 (file)
index 0000000..5e8d94e
--- /dev/null
@@ -0,0 +1,19 @@
+div.content
+       div.container1
+               h1 New Lecture
+               p
+                       | Use this form to create a new lecture.
+                       | After creating the lecture, you can then create a notes-taking session within it.
+
+               form( method = 'POST' )
+                       div.zarea
+                               div.row
+                                       div.label
+                                               label( for = 'name' ) New lecture name
+                                       div.field
+                                               input( type = 'text', name = 'name' )
+                               div.row
+                                       div.label
+                                               &nbsp;
+                                       div.field
+                                               button Create Lecture
diff --git a/views/lecture/index.jade b/views/lecture/index.jade
new file mode 100644 (file)
index 0000000..47c17b3
--- /dev/null
@@ -0,0 +1,39 @@
+script
+       var lectureID = '#{lecture._id}';
+
+div.content
+       div.container1
+
+               h1 #{ lecture.name }
+               p Course: #{ course.name }
+               - if ( lecture.authorized )
+                       p Instructor: 
+                               a( href = 'mailto:#{ instructor.email }' ) #{ instructor.name }
+               - else
+                       p Instructor: #{ instructor.name }
+
+               hr
+
+               h2 Existing Note Pads
+
+               ul
+                       - if ( notes.length > 0 )
+                               ul
+                               - each note in notes
+                                       li
+                                               a( href = '/note/#{ note._id }' ) #{ note.name }
+                                               - if (note.public) 
+                                                       |  (Public)
+                                               - else
+                                                       |  (Private)
+                                               span( note-id = note._id ).count= counts[ note._id ]
+                                               span  Visits: #{ note.visits || 0 }
+                       - else
+                               p No note pads have been created for this lecture yet.
+
+               hr
+
+               - if ( lecture.authorized )
+                       div
+                               span(class='sub_menu')
+                                       a( href = '/lecture/#{ lecture._id }/notes/new' ) New Note Pad
diff --git a/views/lecture/new.jade b/views/lecture/new.jade
new file mode 100644 (file)
index 0000000..9364629
--- /dev/null
@@ -0,0 +1 @@
+!=partial( 'form' )
diff --git a/views/login.jade b/views/login.jade
new file mode 100644 (file)
index 0000000..12aed6d
--- /dev/null
@@ -0,0 +1,39 @@
+div.content
+       div.container1
+               h1 Login
+               form#credentials( action = '/login', method = 'POST' )
+                       div.zarea 
+                               div( class = 'row')
+                                       div( class = 'label')
+                                               label( for = 'email' ) Email
+                                       div( class = 'field')
+                                               input( type = 'text', name = 'email', size='15', value = session.email )
+
+                               div( class = 'row')
+                                       div( class = 'label')
+                                               label( for = 'password' ) Password
+                                       div( class = 'field')
+                                               input( type = 'password', name = 'password', size='15')
+
+                               div( class = 'row')
+                                       div( class = 'label')
+                                               &nbsp;
+                                       div( class = 'field')
+                                               button.major Login
+                                               span.reglink
+                                                       a( href = '/resetpw' ) Forgot password?
+                               div( class = 'row')
+                                       div( class = 'label')
+                                               &nbsp;
+                                       div( class = 'field')
+                                               span.reglink
+                                                       a( href = '/register' ) Create an Account
+
+script
+       $( document ).ready( function() {
+               if( $( 'input[name=email]' ).val() ) {
+                       $( 'input[name=password]' ).focus();
+               } else {
+                       $( 'input[name=email]' ).focus();
+               }
+       });
diff --git a/views/masthead.jade b/views/masthead.jade
new file mode 100644 (file)
index 0000000..5e47e3e
--- /dev/null
@@ -0,0 +1,31 @@
+div.masthead 
+       div.logbar
+               div.loginstatus
+                       - if( user && user.loggedIn )
+                               | Currently logged in as 
+                               span.username
+                                       | !{ user.displayName || user.name }
+                       - else
+                               | &nbsp;
+       div.navbar
+               table
+                       tr
+                               td
+                                       a(href="/")
+                                               img.logo(src="/images/finals-club-wht.png")
+                               td.menu
+                                       a(href="/schools") Courses
+                                       a(href="http://blog.finalsclub.org") Blog
+                                       a(href="/archive") Archive
+                                       a(href="/press") Press
+
+                                       - if( user && user.loggedIn )
+                                               a(href="/profile") Profile
+                                               //span(class='sub_menu')
+                                               a.special( href='/logout' ) Logout
+                                       - else
+                                               a(href="/register") Create an Account
+                                               // span(class='sub_menu')
+                                               a.special(href="/login") Login
+       div.logbar
+               &nbsp;
diff --git a/views/notes/dropdown.jade b/views/notes/dropdown.jade
new file mode 100644 (file)
index 0000000..a70571f
--- /dev/null
@@ -0,0 +1,15 @@
+ul.dropdown
+       li
+               | #{ note.name }
+
+               ul
+                       - each otherNote in otherNotes
+                               li
+                                       div( note-id = otherNote._id )
+                                               a( href = '/note/#{ otherNote._id }' ) #{ otherNote.name }
+                                               span.count( note-id = otherNote._id )
+
+                                               div.clear
+                       li
+                               div
+                                       a( href = '/lecture/#{ lecture._id }/notes/new' ) + New Note
diff --git a/views/notes/form.jade b/views/notes/form.jade
new file mode 100644 (file)
index 0000000..f81c330
--- /dev/null
@@ -0,0 +1,20 @@
+div.content
+       div.container1
+               h1 New Notes Session
+               form( method = 'POST' )
+                       div.zarea
+                               div.row
+                                       div.label
+                                               label( for = 'name' ) Name of new note pad
+                                       div.field
+                                               input( type = 'text', name = 'name' )
+                               div.row
+                                       div.label
+                                               label( for = 'private' ) Private
+                                       div.field
+                                               input( type = 'checkbox', name = 'private', value='true' )
+                               div.row
+                                       div.label
+                                               &nbsp;
+                                       div.field
+                                               button Create
diff --git a/views/notes/index.jade b/views/notes/index.jade
new file mode 100644 (file)
index 0000000..b1aca6a
--- /dev/null
@@ -0,0 +1,97 @@
+script
+       var lectureID = '#{lecture._id}';
+       var noteID    = '#{note._id}';
+       var userName  = '#{user.displayName}';
+       var userID    = '#{user._id}';
+       var userAffil = '#{user.affil}';
+       var public    = false;
+       var RO        = #{RO};
+       var rourl     = 'http://#{ host }:9001/ro/#{ roID }';
+       var roID      = '#{roID}';
+
+div#wrapper
+       div#header
+               div.fleft
+                       a(href="/")
+                               img.lilogo(src="/images/finals-club-wht.png")
+               div.fleft
+                       div
+                               b Lecture: 
+                               a( href = '/lecture/#{lecture._id}' )= lecture.name
+                       div
+                               !=partial( 'dropdown' )
+               div.fright.rcol
+                       // a( href = '/note/#{note._id}', class = 'readonlylink') Read-Only Version
+                       button#toggleBC Discussion
+                       button#togglePad Notes
+               div.clear
+
+       div#sidebar
+               div.container
+                       div.userBox
+                               h3 Post Your Own Question
+                               div#enterPost
+                                       form#enterPostForm
+                                               input#hostMeetingId( type = 'hidden', name = 'data[Post][meeting_id]', value='926' )
+
+                                               textarea#enterPostTextarea( name = 'data[Post][body]', rows='3' )
+
+                                               input#submitPost( type = 'button', name = 'submitPost', value = 'Submit Post' )
+                                               input( type = 'checkbox', name = 'anonymous' )
+                                               span(class='anonpost') Anonymously
+                                               input( type = 'checkbox', name = 'private' )
+                                               span(class='anonpost') Private
+
+                       div#posts
+                               div#postsHeader
+                                       h1 Posts
+                                               select#sortPosts
+                                                       option( value = 'votes' ) Sort by votes
+                                                       option( value = 'created' ) Sort by time
+
+                                       //
+                                               | show:
+
+                                               select#amountPosts
+                                                       option( value = '10' ) 10
+                                                       option( value = '15' ) 15
+                                                       option( value = '20' ) 20
+
+               script#postTemplate( type = 'text/x-jQuery-tmpl', src = '/javascripts/templates/post.js' )
+                       div.postContainer( id = 'post-${_id}' )
+                               div.postVoteContainer( data-postid = '${_id}' )
+                                       div.vote-tally-rect.vote-up ${ votes.length }
+                                       div.voteFlag FLAG
+                                       div.privacy
+                               div.postDisplayContainer
+                                       div.postBody ${ body }
+                                       div.postFooter
+                                               span.userName ${ userName }
+                                               &mdash;
+                                               span.userAffil ${ userAffil }
+                                               div
+                                                               a( href='#', id='post-${_id}' ).comments
+                                                                       span.commentAmt ${ comments.length } 
+                                                                       | Comments
+
+                               div.commentContainer.hidden
+
+                               form.commentForm.hidden
+                                       input( type = 'hidden', name = 'postid', value = '${_id}' )
+                                       textarea#commentText( name = 'commentText', disabled = 'disabled' )
+                                       input( type = 'submit', value = 'Submit Comment', disabled = 'disabled' )
+                                       input( type = 'checkbox', name = 'anonymous' )
+                                       span(class='anonpost') Anonymously
+
+               script#commentTemplate( type = 'text/x-jQuery-tmpl', src = '/javascripts/templates/comment.js' )
+                       div.commentBody ${ body }
+
+                       div.commentFooter
+                               span.userName ${ userName }
+                               &mdash;
+                               span.userAffil ${ userAffil }
+
+       div#editor
+               iframe( id = 'epliframe', src = 'http://#{ host }:9001/p/#{ note._id }?userName=#{ user.name }', width = '100%', height = '100%', style = 'border: none;' )
+
+       div( style = 'clear: both; height: 1px;' )
diff --git a/views/notes/layout.jade b/views/notes/layout.jade
new file mode 100644 (file)
index 0000000..0c177a0
--- /dev/null
@@ -0,0 +1,23 @@
+!!!
+html
+  head
+    title FinalsClub.org
+    link(rel='stylesheet', href='/stylesheets/fc2.css')
+
+    script(type='text/javascript', src='https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js')
+    //script(type='text/javascript', src='/javascripts/fc.js')
+
+    script(type='text/javascript', src='/socket.io/socket.io.js')
+
+    - if ( 'undefined' !== typeof stylesheets )
+        - each stylesheet in stylesheets
+            link( rel = 'stylesheet', href = '/stylesheets/#{ stylesheet }' )
+
+    - if ( 'undefined' !== typeof javascripts )
+        - each javascript in javascripts
+            script( type = 'text/javascript', src = '/javascripts/#{ javascript }' )
+
+  body
+    include masthead
+    != messages()
+    != body
diff --git a/views/notes/masthead.jade b/views/notes/masthead.jade
new file mode 120000 (symlink)
index 0000000..a6d0be3
--- /dev/null
@@ -0,0 +1 @@
+../masthead.jade
\ No newline at end of file
diff --git a/views/notes/new.jade b/views/notes/new.jade
new file mode 100644 (file)
index 0000000..9364629
--- /dev/null
@@ -0,0 +1 @@
+!=partial( 'form' )
diff --git a/views/notes/noteLayout.jade b/views/notes/noteLayout.jade
new file mode 100644 (file)
index 0000000..1436401
--- /dev/null
@@ -0,0 +1,28 @@
+!!!
+html
+  head
+    title FinalsClub.org
+    //link(rel='stylesheet', href='/stylesheets/style.css')
+
+    script(type='text/javascript', src='https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js')
+    script(type='text/javascript', src='/javascripts/es5-shim.min.js')
+    script(type='text/javascript', src='/javascripts/fc.js')
+
+    script(type='text/javascript', src='/socket.io/socket.io.js')
+
+    - if ( 'undefined' !== typeof stylesheets )
+        - each stylesheet in stylesheets
+            link( rel = 'stylesheet', href = '/stylesheets/#{ stylesheet }' )
+
+    - if ( 'undefined' !== typeof javascripts )
+        - each javascript in javascripts
+          script( type = 'text/javascript', src = '/javascripts/#{ javascript }' )
+
+    meta(name="viewport", content="width=device-width,user-scalable=no,minimum-scale=1.0,maximum-scale=1.0,initial-scale=1.0")
+    meta(name="apple-touch-icon", href="")
+    meta(name="icon", href="")
+
+  body
+    != messages()
+
+    != body
diff --git a/views/notes/public.jade b/views/notes/public.jade
new file mode 100644 (file)
index 0000000..7b23fed
--- /dev/null
@@ -0,0 +1,83 @@
+script
+       var lectureID = '#{lecture._id}';
+       var public    = true;
+       var userID    = false;
+       var rourl     = 'http://#{ host }:9001/ro/#{ roID }';
+       var roID      = '#{roID}';
+
+div#wrapper
+       div#header
+               div.fleft
+                       a(href="/")
+                               img.lilogo(src="/images/finals-club-wht.png")
+               div.fleft
+                       div
+                               b Lecture: 
+                               | &nbsp;
+                               a( href = '/lecture/#{lecture._id}' )= lecture.name
+                       div
+                               b Notes:
+                               | &nbsp;
+                               #{note.name}
+               div.fright.rcol
+                       // a( href = '/note/#{note._id}', class = 'readonlylink') Read-Only Version
+                       button#toggleBC Discussion
+                       button#togglePad Notes
+               div.clear
+
+
+       div#sidebar
+               div.container
+
+                       div#posts
+                               div#postsHeader
+                                       h1 Posts
+                                               select#sortPosts
+                                                       option( value = 'votes' ) Sort by votes
+                                                       option( value = 'created' ) Sort by time
+
+                                       //
+                                               | show:
+
+                                               select#amountPosts
+                                                       option( value = '10' ) 10
+                                                       option( value = '15' ) 15
+                                                       option( value = '20' ) 20
+
+               script#postTemplate( type = 'text/x-jQuery-tmpl', src = '/javascripts/templates/post.js' )
+                       div.postContainer( id = 'post-${_id}' )
+                               div.postVoteContainer( data-postid = '${_id}' )
+                                       div.vote-tally-rect.vote-up ${ votes.length }
+                                       div.voteFlag FLAG
+                               div.postDisplayContainer
+                                       div.postBody ${ body }
+                                       div.postFooter
+                                               span.userName ${ userName }
+                                               &mdash;
+                                               span.userAffil ${ userAffil }
+                                               div
+                                                               a( href='#', id='post-${_id}' ).comments
+                                                                       span.commentAmt ${ comments.length } 
+                                                                       | Comments
+
+                               div.commentContainer.hidden
+
+                               form.commentForm.hidden
+                                       input( type = 'hidden', name = 'postid', value = '${_id}' )
+                                       textarea#commentText( name = 'commentText', disabled = 'disabled' )
+                                       input( type = 'submit', value = 'Submit Comment', disabled = 'disabled' )
+                                       input( type = 'checkbox', name = 'anonymous' )
+                                       span(class='anonpost') Anonymously
+
+               script#commentTemplate( type = 'text/x-jQuery-tmpl', src = '/javascripts/templates/comment.js' )
+                       div.commentBody ${ body }
+
+                       div.commentFooter
+                               span.userName ${ userName }
+                               &mdash;
+                               span.userAffil ${ userAffil }
+
+       div#editor
+               div.readonly
+
+       div( style = 'clear: both; height: 1px;' )
diff --git a/views/profile/index.jade b/views/profile/index.jade
new file mode 100644 (file)
index 0000000..cddf375
--- /dev/null
@@ -0,0 +1,91 @@
+div.content
+       div.container1
+               h1 User Profile
+
+               form#profile( action = '/profile', method = 'POST' )
+                       h2 Account Information
+
+                       div.area 
+                               div.row
+                                       div.label
+                                               span Email
+                                       div.field
+                                               span #{ user.email }
+
+                               div.row
+                                       div.label
+                                               label( for = 'affiliation' ) Affiliation
+                                       div.field
+                                               - if ( user.affil != 'Instructor' )
+                                                       select( id = 'affiliation', name = 'affiliation' )
+                                                               - if ( user.affil == 'Student' )
+                                                                       option( value = 'Student', selected = true ) Student
+                                                               - else
+                                                                       option( value = 'Student' ) Student
+
+                                                               - if ( user.affil == 'Teachers Assistant' )
+                                                                       option( value = 'Teachers Assistant', selected = true ) Teachers Assistant
+                                                               - else
+                                                                       option( value = 'Teachers Assistant' ) Teachers Assistant
+                                               - else
+                                                       span #{ user.affil }
+
+                       h2 Profile Information
+
+                       div.area
+                               div.row
+                                       div.label
+                                               label( for = 'name' ) User Name
+                                       div.field
+                                               input( id = 'name', type = 'text', name = 'name', value = user.name )
+
+                               div.row
+                                       div.label
+                                               label &nbsp;
+                                       div.field
+                                               - if ( user.showName )
+                                                       input( style = 'width: auto;', id = 'showName', type = 'checkbox', name = 'showName' , checked )
+                                               - else
+                                                       input( style = 'width: auto;', id = 'showName', type = 'checkbox', name = 'showName' )
+                                               | Display your real name in contributions
+
+                               - if ( user.affil != 'Instructor' )
+                                       div.row
+                                               div.label
+                                                       label( for = 'major' ) Major
+                                               div.field
+                                                       input( id = 'major', type = 'text', name = 'major', value = user.major )
+
+                               div.row
+                                       div.label
+                                               label( for = 'bio' ) Bio
+                                       div.field
+                                               input( id = 'bio', type = 'text', name = 'bio', value = user.bio )
+
+                       h2 Change Password
+
+                       div.area
+                               - if ( user.hashed )
+                                       div.row
+                                               div.label
+                                                       label( for = 'existingPassword' ) Old Password
+                                               div.field
+                                                       input( id = 'existingPassword', type = 'password', name = 'existingPassword' )
+
+                               div.row
+                                       div.label
+                                               label( for = 'newPassword' ) New Password
+                                       div.field
+                                               input( id = 'newPassword', type = 'password', name = 'newPassword' )
+
+                               div.row
+                                       div.label
+                                               label( for = 'newPasswordConfirm' ) Confirm Password
+                                       div.field
+                                               input( id = 'newPasswordConfirm', type = 'password', name = 'newPasswordConfirm' )
+
+                       div.row
+                               div.label
+                                       &nbsp;
+                               div.field
+                                       button Submit
diff --git a/views/register.jade b/views/register.jade
new file mode 100644 (file)
index 0000000..fe931eb
--- /dev/null
@@ -0,0 +1,56 @@
+script.
+       $(function() {
+               $( '[name=school]' ).change(function() {
+                       if ( $(this).val() === 'Other' ) {
+                               $(this).parent().append('<div class="field" id="otherSchool"><input type="text" name="otherSchool"></div>');
+                       } else {
+                               if ( $( '#otherSchool' ) ) $( '#otherSchool' ).remove();
+                       }
+               })
+       });
+div.content
+       div.container1
+               h1 Create an Account
+               form#credentials( action = '/register', method = 'POST' )
+                       div.zarea 
+                               div( class = 'row')
+                                       div( class = 'label')
+                                               label( for = 'email' ) Email
+                                       div( class = 'field')
+                                               input( type = 'text', name = 'email' )
+
+                               div( class = 'row')
+                                       div( class = 'label')
+                                               label( for = 'password' ) Password
+                                       div( class = 'field')
+                                               input( type = 'password', name = 'password' )
+
+                               - if ( schools.length > 0 )
+                                       div( class = 'row')
+                                               div( class = 'label')
+                                                       label( for = 'school' ) School
+                                               div( class = 'field')
+                                                       select( name = 'school' )
+                                                               - each school in schools
+                                                                       option( value = '#{school.name}' ) #{ school.name }
+                                                               option( value = 'Other' ) Other
+
+                               div( class = 'row')
+                                       div( class = 'label')
+                                               label( for = 'name' ) Name
+                                       div( class = 'field')
+                                               input( type = 'text', name = 'name' )
+
+                               div( class = 'row')
+                                       div( class = 'label')
+                                               label( for = 'affil' ) Affiliation
+                                       div( class = 'field')
+                                               select( name = 'affil' )
+                                                       option( value = 'Student' ) Student
+                                                       option( value = 'Teachers Assistant' ) Teachers Assistant
+
+                               div( class = 'row')
+                                       div( class = 'label')
+                                               &nbsp;
+                                       div( class = 'field')
+                                               button Register
diff --git a/views/resetpw-error.jade b/views/resetpw-error.jade
new file mode 100644 (file)
index 0000000..fd73e48
--- /dev/null
@@ -0,0 +1,6 @@
+div.content
+       div.container1
+               h1 Password Reset Failed
+               - if ( true )
+                       p We were unable to reset the password using that email address.  Please try again.
+
diff --git a/views/resetpw-success.jade b/views/resetpw-success.jade
new file mode 100644 (file)
index 0000000..d704e49
--- /dev/null
@@ -0,0 +1,8 @@
+div.content
+       div.container1
+               h1 Password Reset
+               - if ( typeof(verify) != 'undefined' && verify )        
+                       P Your password has been reset.  You can login using your new password now.
+               - else 
+                       P Your password has been reset.  An email has been sent to #{ email }.
+
diff --git a/views/resetpw.jade b/views/resetpw.jade
new file mode 100644 (file)
index 0000000..f8f4567
--- /dev/null
@@ -0,0 +1,48 @@
+div.content
+       div.container1
+               h1 Password Reset
+               - url = "/resetpw";
+               - if ( typeof(verify) != 'undefined' && verify ) { url += "/" + resetPassCode; }
+
+
+               form#resetpw( action = '#{ url }', method = 'POST' )
+                       div.zarea 
+                               span.text
+                               - if ( typeof(verify) != 'undefined' && verify )        
+                                       P To verify and reset your password, type the full email address and your new password twice, then click submit. 
+                               - else 
+                                       P To reset your password, enter your email address click "Reset". An email will be sent to you with the new password.
+
+                               div( class = 'row')
+                                       div( class = 'label')
+                                               label( for = 'email' ) Email
+                                       div( class = 'field')
+                                               input( type = 'text', name = 'email', size='15', value = session.email )
+
+                               - if ( typeof(verify) != 'undefined' && verify )        
+                                       div( class = 'row')
+                                               div( class = 'label')
+                                                       label( for = 'pass1' ) New Password
+                                               div( class = 'field')
+                                                       input( type = 'password', name = 'pass1', size='15' )
+                                       div( class = 'row')
+                                               div( class = 'label')
+                                                       label( for = 'pass2' ) Repeat Password
+                                               div( class = 'field')
+                                                       input( type = 'password', name = 'pass2', size='15' )
+
+                               div( class = 'row')
+                                       div( class = 'label')
+                                               &nbsp;
+                                       div( class = 'field', style = 'min-width: 200px' )
+                                               button Reset
+                               
+
+script
+       $( document ).ready( function() {
+               if( $( 'input[name=email]' ).val() ) {
+                       $( 'input[name=password]' ).focus();
+               } else {
+                       $( 'input[name=email]' ).focus();
+               }
+       });
diff --git a/views/schools.jade b/views/schools.jade
new file mode 100644 (file)
index 0000000..0e3b42c
--- /dev/null
@@ -0,0 +1,32 @@
+div.content
+       div.container1
+               h1 Universities
+               p
+                       | Please pardon our appearance as we actively develop this free and open source project to help students learn better.  This is where you can create courses or lectures and begin to take notes together for the following schools.  If you don't see your school here and would like to help raise the requisite interest to get started at your campus, please
+                       a(href="/contact") contact us.
+                       
+               
+       
+               - if ( schools.length > 0 )
+                       - each school in schools
+                               div(class='school')
+                                       - if ( school.url )
+                                               h2
+                                                       a( href = school.url, target = '_blank' )= school.name
+                                       - else
+                                               h2= school.name
+                                       ul
+                                               - if ( school.courses.length > 0 )
+                                                       - each course in school.courses
+                                                               li
+                                                                       a( href = 'course/#{ course._id }' ) #{ course.displayName }
+
+                                               - else
+                                                       li No courses found.
+                                       - if ( school.authorized )
+                                               div
+                                                       span(class='sub_menu')
+                                                               a( href = '/#{ school._id }/course/new' ) New Course
+               - else
+                       p
+                               | You do not belong to any school networks.
diff --git a/views/static/about.jade b/views/static/about.jade
new file mode 100644 (file)
index 0000000..6911733
--- /dev/null
@@ -0,0 +1,10 @@
+div.content
+       div.container1
+               h1 About FinalsClub.org
+
+               p The Internet has facilitated unprecedented levels of communication, collaboration, and access to knowledge. Open Courseware (OCW) has expanded access to high quality educational resources. Wikipedia has coalesced the effort of millions to create a worldwide database of common knowledge. Social networks have helped us form vibrant online communities. While new forms of online engagement have revolutionized music, journalism, elections, advertising, and encyclopedias, they have yet to transform the classroom... until now. FinalsClub.org, a 501c(3) non-profit organization with funding from the Hewlett Foundation and National Science Foundation (pending), is striving to change the academic status quo.
+               p Though there is a growing interest in shared educational resources, no single platform currently serves young scholars seeking to collaborate and share knowledge freely. Either existing tools (such as Google Docs) must be tweaked for educational use or students must participate in environments where others seek to own and profit from their intellectual property. With initial success to craft content and share twenty-seven Harvard courses (2008-10) online, FinalsClub.org is now developing tools specifically for college student to collaborate, learn, and share knowledge freely.
+               p Pilot tests of two existing projects, Etherpad and Backchan.nl, have led to the development of a real-time workspace for college student collaboration. Focus groups have unanimously reported that collaborative note-taking tools along with a forum to ask, rate, and respond to each other?s questions ?would be awesome? and ?a game-changer? for the classroom. Since initial tests have involved separate open source projects, FinalsClub aims to reconcile those tools into an integrated environment for the specific needs and interests of college students.
+               p Given that most college students bring a computer to class (and often participate in side chats on Facebook or GChat), there is an opportunity for FinalsClub to network their collaborative capacity to create superior notes alongside an engaging live discussion forum. In the virtual environment currently under development at FinalsClub, students will have an unprecedented ability to share knowledge within and without the classroom.
+               p With a full launch planned for Fall 2011, FinalsClub will open its collaborative platform for a private beta at four schools: Harvard, Yale, Brown, and Columbia. We will open our code as a free and open source software project for use in education and industry environments. With early support from the Hewlett Foundation and National Science Foundation, FinalsClub will seek additional funding to scale its project to other campuses in 2012 and beyond.
+               p Given the innovative nature of these tools, we plan to undertake an agile development process based on constant feedback from student users to create an optimal and scalable environment for students. As they organize on FinalsClub, students will not only create valuable content but also establish best practices for online social learning. Based on quantitative and qualitative feedback from high-achieving early adopters, FinalsClub will strive to improve the student experience and abolish the privileged boundaries of the ivory tower for the benefit of curious learners everywhere.
diff --git a/views/static/conduct.jade b/views/static/conduct.jade
new file mode 100644 (file)
index 0000000..cec24f3
--- /dev/null
@@ -0,0 +1,14 @@
+div.content
+       div.container1
+
+               div.conduct
+
+                       h1 Code of Conduct
+
+                       p.academic
+                               img(src="/images/keep-it-academic.png", alt="Keep it academic.")
+
+                       p.vague.
+                               This directive is deliberately vague to accommodate creative humor, insight, and exploration.<br>
+                               Disruptive or irrelevant material, however, will be subject to removal.<br>
+                               Just keep it academic, and we'll all be better off.<br>
diff --git a/views/static/contact.jade b/views/static/contact.jade
new file mode 100644 (file)
index 0000000..19b7dbd
--- /dev/null
@@ -0,0 +1,22 @@
+div.content
+       div.container1
+
+               h1 Contact FinalsClub.org
+
+               p
+                       | Please feel free to contact us regarding any question you may have.
+
+               table.contact
+                       tr
+                               td Email:
+                               td 
+                                       a(href="mailto:info@finalsclub.org") info@finalsclub.org
+                       tr
+                               td Mail Address:
+                               td FinalsClub.org<br>1132 Massachusetts Avenue<br> Cambridge, MA 02138
+
+               p
+                       | For more information about FinalsClub.org,
+                       | please email Andrew ~at~ FinalsClub d0t org
+                       | with any press inquiries or to help set up a chapter of FinalsClub.org at your campus.
+
diff --git a/views/static/legal.jade b/views/static/legal.jade
new file mode 100644 (file)
index 0000000..d0eb1ff
--- /dev/null
@@ -0,0 +1,336 @@
+div.content
+       div.container1
+               div.
+                       <h1 id="page-title" class="asset-name">Legal</h1>
+                       
+                                                                                                       <h2><span class="Apple-style-span" style="font-size: 13px; ">Last updated: February 13, 2011</span></h2>
+
+                       <p>These Terms of Service ("Terms") govern your access to and use of the services, websites, and
+                       applications offered by FinalsClub (the "Service"). Your access to and use of the Service is
+                       conditioned on your acceptance of and compliance with these Terms. By accessing or using the
+                       Service you agree to be bound by these Terms.</p>
+
+                       <h2>Use of the Service</h2>
+                       <p>You may use the Service only if you can form a binding contract with FinalsClub, and only in
+                       compliance with these Terms and all applicable local, state, national, and international laws,
+                       rules and regulations. You must provide us accurate information, including your real name, when
+                       you create your account on FinalsClub.</p>
+
+                       <p>We may, without prior notice, change the Service; stop providing the Service or features of the
+                       Service, to you or to users generally; or create usage limits for the Service.
+                       You are responsible for safeguarding the password that you use to access the Service and for
+                       any activities or actions under your password. We encourage you to use "strong" passwords
+                       (that use a combination of upper and lower case letters, numbers and symbols) with your
+                       account. FinalsClub will not be liable for any loss or damage arising from your failure to comply
+                       with these requirements.</p>
+
+                       <h2>User Content</h2>
+
+                       <p>"Content" means any information, text, graphics, or other materials uploaded, downloaded or
+                       appearing on the Service. You retain ownership of all Content you submit, post, display, or
+                       otherwise make available on the Service. </p>
+
+                       <h2>Your License to FinalsClub</h2>
+
+                       <p>By submitting, posting or displaying Content on or through the 
+                       Service, you grant us permission
+                       to share all content under a Creative Commons Attribution-Share Alike 
+                       3.0 Unported (CC BY-SA
+                       3.0) license.  For more information, see 
+                       http://creativecommons.org/licenses/by-sa/3.0.  Note
+                       that exceptions can be made upon request.  Or, if you would like more 
+                       information, please feel
+                       free to contact us (link to the contact page). 
+                       You agree that this license includes the right for other users of the 
+                       Service to modify your
+                       Content, and for FinalsClub to make your Content available to others for
+                       the publication,
+                       distribution, syndication, or broadcast of such Content on other media 
+                       and services, subject to
+                       our terms and conditions for such Content use. Such additional uses by 
+                       FinalsClub or others
+                       may be made with no compensation paid to you with respect to the Content
+                       that you submit,
+                       post, transmit or otherwise make available through the Service.We may 
+                       modify or adapt your Content in order to transmit, display or distribute
+                       it over computer
+                       networks and in various media and/or make changes to your Content as are
+                       necessary to
+                       conform and adapt that Content to any requirements or limitations of any
+                       networks, devices,
+                       services or media.</p>
+
+                       <h2>FinalsClub's Licenses to You</h2>
+
+                       <p>Subject to these Terms, FinalsClub gives you a worldwide, 
+                       royalty-free, non-assignable and nonexclusive license to re-post any of 
+                       the Content on FinalsClub anywhere on the rest of the web
+                       provided that the Content was added to the Service after April 22, 2008,
+                       and provided that the
+                       user who created the content has not explicitly marked the content as 
+                       not for reproduction, and
+                       provided that you: (a) do not modify the Content; (b) attribute 
+                       FinalsClub with a human and
+                       machine-followable link (an A tag) linking back to the page displaying 
+                       the original source of the
+                       content on FinalsClub.org (c) upon request, either by FinalsClub or a 
+                       user, remove the user's
+                       name from Content which the user has subsequently made anonymous; (d) 
+                       upon request, either
+                       by FinalsClub or by a user who contributed to the Content, make a 
+                       reasonable effort to update a
+                       particular piece of Content to the latest version on FinalsClub.org; and
+                       (e) upon request, either
+                       by FinalsClub or by a user who contributed to the Content, make a 
+                       reasonable attempt to delete
+                       Content that has been deleted on FinalsClub.org.
+                       Your Content will be viewable by other users of the Service and through 
+                       third party services and
+                       websites. You should only provide Content that you are comfortable 
+                       sharing with others under
+                       these Terms.
+                       All Content, whether publicly posted or privately transmitted, is the 
+                       sole responsibility of the
+                       person who originated such Content. We may not monitor or control the 
+                       Content posted via the
+                       Service. Any use of or reliance on any Content or materials posted via 
+                       the Service or obtained by
+                       you through the Service is at your own risk. We do not endorse, support,
+                       represent or guarantee
+                       the completeness, truthfulness, accuracy, or reliability of any Content 
+                       or communications posted
+                       via the Service or endorse any opinions expressed via the Service. You 
+                       understand that by using
+                       the Service, you may be exposed to Content that might be offensive, 
+                       harmful, inaccurate or
+                       otherwise inappropriate. Under no circumstances will FinalsClub be 
+                       liable in any way for any
+                       Content, including, but not limited to, any errors or omissions in any 
+                       Content, or any loss or
+                       damage of any kind incurred as a result of the use of any Content made 
+                       available via the Service
+                       or broadcast elsewhere.
+                       </p><p>You are responsible for your use of the Service, for any Content 
+                       you provide, and for any
+                       consequences thereof, including the use of your Content by other users 
+                       and third parties
+                       partners. You understand that your Content may be republished and if you
+                       do not have the right
+                       to submit Content for such use, it may subject you to liability. 
+                       FinalsClub will not be responsible
+                       or liable for any use of your Content by FinalsClub in accordance with 
+                       these Terms. You
+                       represent and warrant that you have all the rights, power and authority 
+                       necessary to grant the
+                       rights granted herein to any Content that you submit.We reserve the 
+                       right at all times (but will not have an obligation) to remove or refuse
+                       to distribute
+                       any Content on the Service and to terminate users or reclaim usernames. 
+                       We also reserve the
+                       right to access, read, preserve, and disclose any information as we 
+                       reasonably believe is
+                       necessary to (i) satisfy any applicable law, regulation, legal process 
+                       or governmental request, (ii)
+                       enforce the Terms, including investigation of potential violations 
+                       hereof, (iii) detect, prevent, or
+                       otherwise address fraud, security or technical issues, (iv) respond to 
+                       user support requests, or (v)
+                       protect the rights, property or safety of FinalsClub, its users and the 
+                       public.
+                       Rules
+                       You must not do any of the following while accessing or using the 
+                       Service: (i) use the Service for
+                       any unlawful purposes or for promotion of illegal activities; (ii) post 
+                       any Content (as defined
+                       below) or use the Service in violation of any applicable law (including 
+                       intellectual property laws,
+                       right of privacy or publicity laws, and any laws of a non-U.S. 
+                       jurisdiction applicable to you), or
+                       any contractual or other legal obligation; (iii) post Content that is 
+                       hateful, abusive, threatening,
+                       profane, or otherwise objectionable; (iv) post Content or use the 
+                       Service to create an impression
+                       that you know is incorrect, misleading, or deceptive, including by 
+                       impersonating others or
+                       otherwise misrepresenting your affiliation with a person or entity; (v) 
+                       publish or post other
+                       people's private or personally identifiable information without their 
+                       express authorization and
+                       permission; (vi) use the Service for the purpose of spamming anyone; 
+                       (vii) publish or link to
+                       malicious content intended to damage or disrupt another user's browser 
+                       or computer or to
+                       compromise a user's privacy; (viii) access or tamper with non-public 
+                       areas of the Service,
+                       FinalsClub's computer systems, or the technical delivery systems of 
+                       FinalsClub's providers; (ix)
+                       probe, scan, or test the vulnerability of any system or network or 
+                       breach or circumvent any
+                       security or authentication measures; (x) access or search or attempt to 
+                       access or search the
+                       Service by any means (automated or otherwise) other than through the 
+                       currently available,
+                       published interfaces that are provided by FinalsClub (and only pursuant 
+                       to those terms and
+                       conditions), unless you have been specifically allowed to do so in a 
+                       separate agreement with
+                       FinalsClub (crawling the Service is permissible in accordance with these
+                       Terms, but scraping the
+                       Service without the prior consent of FinalsClub except as permitted by 
+                       these Terms is expressly
+                       prohibited); (xi) forge any TCP/IP packet header or any part of the 
+                       header information in any
+                       email or posting, or in any way use the Service to send altered, 
+                       deceptive or false sourceidentifying information; or (xii) interfere 
+                       with or disrupt (or attempt to do so) the access of any
+                       user, host or network, including, without limitation, sending a virus, 
+                       overloading, flooding,
+                       spamming, mail-bombing the Service, or by scripting the creation of 
+                       Content in such a manner
+                       as to interfere with or create an undue burden on the Service.</p>
+
+                       <h2>Proprietary Rights</h2>
+
+                       <p>All right, title, and interest in and to the Service (excluding 
+                       Content provided by users) are and
+                       will remain the exclusive property of FinalsClub and its licensors. The 
+                       Service is protected by
+                       copyright, trademark, and other laws of both the United States and 
+                       foreign countries. Except asexpressly provided herein, nothing in the 
+                       Terms gives you a right to use the FinalsClub name or
+                       any of the FinalsClub trademarks, logos, domain names, and other 
+                       distinctive brand features.
+                       Any feedback, comments, or suggestions you may provide regarding the 
+                       Service is entirely
+                       voluntary and we will be free to use such feedback, comments or 
+                       suggestions as we see fit and
+                       without any obligation to you. </p>
+
+                       <h2>Copyright Policy</h2>
+
+                       <p>FinalsClub respects the intellectual property rights of others and expects users of the Service to
+                       do the same. We will respond to notices of alleged copyright infringement that comply with
+                       applicable law and are properly provided to us. If you believe that your Content has been copied
+                       in a way that constitutes copyright infringement, please provide our copyright agent with the
+                       following information in accordance with the Digital Millennium Copyright Act: (i) a physical or
+                       electronic signature of the copyright owner or a person authorized to act on their behalf; (ii)
+                       identification of the copyrighted work claimed to have been infringed; (iii) identification of the
+                       material that is claimed to be infringing or to be the subject of infringing activity and that is to be
+                       removed or access to which is to be disabled, and information reasonably sufficient to permit us
+                       to locate the material; (iv) your contact information, including your address, telephone number,
+                       and an email address; (v) a statement by you that you have a good faith belief that use of the
+                       material in the manner complained of is not authorized by the copyright owner, its agent, or the
+                       law; and (vi) a statement that the information in the notification is accurate, and, under penalty of
+                       perjury, that you are authorized to act on behalf of the copyright owner.
+                       Our designated copyright agent for notice of alleged copyright infringement or other legal
+                       notices regarding Content appearing on the Service is:
+                       FinalsClub, Inc.
+                       Attn: Copyright Agent
+                       1132 Massachusetts Avenue
+                       Cambridge, MA 02138
+                       Email: copyright@FinalsClub.org
+                       Please note that in addition to being forwarded to the person who provided the allegedly illegal
+                       content, we may send a copy of your notice (with your personal information removed) to Chilling
+                       Effects (www.chillingeffects.org) for publication and/or annotation. You can see an example of
+                       such a publication athttp://www.chillingeffects.org/fairuse/notice.cgi?NoticeID=16887. A link to
+                       your published notice will be displayed on FinalsClub in place of the removed content.
+                       We reserve the right to remove Content alleged to be infringing or otherwise illegal without prior
+                       notice and at our sole discretion. In appropriate circumstances, FinalsClub will also terminate a
+                       user's account if the user is determined to be a repeat infringer.
+                       PrivacyFinalsClub values your privacy.  We will never sell any personal user information stored on
+                       FinalsClub.org with any third-party corporations or organizations without your express consent.
+                       By using the Service you consent to the transfer of your information to the United States and/or
+                       other countries for storage, processing and use by FinalsClub.  Note that user information stored
+                       with any of our affiliate services, such as PBworks.com, is subject to the terms of service of
+                       those service-providers.  Please consult the respective Terms of Service for any affiliate services
+                       for specific details.</p>
+
+                       <h2>Links</h2>
+
+                       <p>The Service may contain links to third-party websites or resources. You acknowledge and agree
+                       that we are not responsible or liable for: (i) the availability or accuracy of such websites or
+                       resources; or (ii) the content, products, or services on or available from such websites or
+                       resources. Links to such websites or resources do not imply any endorsement by FinalsClub of
+                       such websites or resources or the content, products, or services available from such websites or
+                       resources. You acknowledge sole responsibility for and assume all risk arising from your use of
+                       any such websites or resources.
+
+                       </p><h2>Disclaimers; Indemnity</h2>
+
+                       <p>Your access to and use of the Service or any Content is at your own risk. You understand and
+                       agree that the Service is provided to you on an "AS IS" and "AS AVAILABLE" basis. Without
+                       limiting the foregoing, FINALSCLUB AND ITS PARTNERS DISCLAIM ANY WARRANTIES,
+                       EXPRESS OR IMPLIED, OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+                       NON-INFRINGEMENT. We make no warranty and disclaim all responsibility and liability for the
+                       completeness, accuracy, availability, timeliness, security or reliability of the Service or any
+                       content thereon. FinalsClub will not be responsible or liable for any harm to your computer
+                       system, loss of data, or other harm that results from your access to or use of the Service, or any
+                       Content. You also agree that FinalsClub has no responsibility or liability for the deletion of, or the
+                       failure to store or to transmit, any Content and other communications maintained by the Service.
+                       We make no warranty that the Service will meet your requirements or be available on an
+                       uninterrupted, secure, or error-free basis. No advice or information, whether oral or written,
+                       obtained from FinalsClub or through the Service, will create any warranty not expressly made
+                       herein.</p>
+                       <p>TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, FINALSCLUB AND ITS
+                       AFFILIATES, OFFICERS, EMPLOYEES, AGENTS, PARTNERS AND LICENSORS WILL NOT
+                       BE
+                       LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR 
+                       PUNITIVE
+                       DAMAGES, INCLUDING WITHOUT LIMITATION, LOSS OF PROFITS, DATA, USE, 
+                       GOOD-WILL,
+                       OR OTHER INTANGIBLE LOSSES, RESULTING FROM (i) YOUR ACCESS TO OR USE OF 
+                       OR
+                       INABILITY TO ACCESS OR USE THE SERVICE; (ii) ANY CONDUCT OR CONTENT OF 
+                       ANY
+                       THIRD PARTY ON THE SERVICE, INCLUDING WITHOUT LIMITATION, ANY 
+                       DEFAMATORY,
+                       OFFENSIVE OR ILLEGAL CONDUCT OF OTHER USERS OR THIRD PARTIES; (iii) ANY
+                       CONTENT OBTAINED FROM THE SERVICE; AND (iv) UNAUTHORIZED ACCESS, USE 
+                       ORALTERATION OF YOUR TRANSMISSIONS OR CONTENT, WHETHER BASED ON 
+                       WARRANTY,
+                       CONTRACT, TORT (INCLUDING NEGLIGENCE) OR ANY OTHER LEGAL THEORY, WHETHER
+                       OR NOT FINALSCLUB HAS BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGE, 
+                       AND
+                       EVEN IF A REMEDY SET FORTH HEREIN IS FOUND TO HAVE FAILED OF ITS 
+                       ESSENTIAL
+                       PURPOSE.</p>
+                       <p>Some jurisdictions do not allow the exclusion of certain warranties or the exclusion or limitation
+                       of liability for consequential or incidental damages, so the limitations above may not apply to
+                       you.
+                       If anyone brings a claim against us related to your actions or Content on the Service, or actions
+                       or Content by or from someone using your account, you will indemnify and hold us harmless
+                       from and against all damages, losses, and expenses of any kind (including reasonable legal fees
+                       and costs) related to such claim.</p>
+                       <h2>General Terms</h2>
+                       <p>These Terms and any action related thereto will be governed by the laws of the State of
+                       California without regard to or application of its conflict of law provisions or your state or country
+                       of residence. Unless submitted to arbitration as set forth in the following paragraph, all claims,
+                       legal proceedings or litigation arising in connection with the Service will be brought solely in
+                       Santa Clara County, California, and you consent to the jurisdiction of and venue in such courts
+                       and waive any objection as to inconvenient forum.
+                       For any claim (excluding claims for injunctive or other equitable relief) under these Terms where
+                       the total amount of the award sought is less than $10,000, the party requesting relief may elect
+                       to resolve the dispute through binding non-appearance-based arbitration. The party electing
+                       such arbitration shall initiate the arbitration through an established alternative dispute resolution
+                       ("ADR") provider mutually agreed upon by the parties. The ADR provider and the parties must
+                       comply with the following rules: a) the arbitration shall be conducted by telephone, online and/or
+                       be solely based on written submissions, as selected by the party initiating the arbitration; b) the
+                       arbitration shall not involve any personal appearance by the parties or witnesses unless
+                       otherwise mutually agreed by the parties; and c) any judgment on the award rendered by the
+                       arbitrator may be entered in any court of competent jurisdiction.
+                       These Terms are the entire and exclusive agreement between FinalsClub and you regarding the
+                       Service (excluding any services for which you have a separate agreement with FinalsClub that is
+                       explicitly in addition or in place of these Terms), and these Terms supersede and replace any
+                       prior agreements between FinalsClub and you regarding the Service.
+                       The failure of FinalsClub to enforce any right or provision of these Terms will not be deemed a
+                       waiver of such right or provision. In the event that any provision of these Terms is held to be
+                       invalid or unenforceable, the remaining provisions of these Terms will remain in full force and
+                       effect.We may revise these Terms from time to time. The most current version will always be on this
+                       page (or such other page as the Service may indicate). If the revision, in our sole discretion, is
+                       material we will notify you via posting to our website or e-mail to the email associated with your
+                       account. By continuing to access or use the Service after those revisions become effective, you
+                       agree to be bound by the revised Terms.</p>
+
+                       <p>The Service is operated and provided by FinalsClub, Inc., 1132 Massachusetts Avenue
+                       Cambridge, MA 02138. If you have questions about these Terms, please contact Andrew ~at~
+                       FinalsClub d0t org</p>
diff --git a/views/static/press.jade b/views/static/press.jade
new file mode 100644 (file)
index 0000000..0ed1387
--- /dev/null
@@ -0,0 +1,40 @@
+div.content
+       div.container1
+
+               h1 FinalsClub in the Press
+
+               div.press
+                       // h2 Boston Globe Article
+                       img.press(src="/images/boston.com.png")
+                       p.date December 13, 2009
+                       p Plenty of Harvard graduates have traded on the fame and prestige of their alma mater, but few have done so the way Andrew Magliozzi has. The year he graduated, 2005, he started a tutoring company located steps from Harvard Yard, with a name, Veritas, that is the motto of his storied alma mater.
+                       p Then, two years ago, Magliozzi started up a side project called Finalsclub.org.
+
+                       // p This December 2009 article details FinalsClub's aim to access and share the academic content of elite university courses with the world at large.  Although intellectual property issues are not unique to the convergence of university education and online communication, they have been given increasing visibility as organizations like FinalsClub begin to raise copyright questions for universities similarly to those faced by the music, movie, and publishing industries. Advocates of open education initiatives, such as former Harvard Dean Harry Lewis, respond to copyright concerns by invoking the higher purpose of higher education.  Meanwhile, Mr. Magliozzi highlights the potential for improving educational opportunities within and without the classroom on FinalsClub.org
+                       p.readmore
+                               a(href="http://www.boston.com/bostonglobe/ideas/articles/2009/12/13/freeharvardeducationcom") Read more ...
+
+               hr
+
+               div.press
+                       // h2 Harvard Crimson Article
+                       img.press(src="/images/harvard-crimson.jpg")
+                       p.date Wednesday, February 18, 2009
+                       p A rapidly growing course preparatory Web site, FinalsClub.org, is moving forward with a plan to expand its site in spite of controversy over the legality of the venture. 
+
+                       p The Web site, which allows students to share notes, create study groups, and blog about lectures and sections, recently hired 10 Harvard College students to serve as BETA testers for the site. 
+
+                       // p The Harvard Crimson's February 2009 article details FinalsClub's relationship with Harvard University along with the project's plans for future development. After encountering initial resistance, in 2008, from one Harvard professor whose lectures served as material for FinalsClub content, FinalsClub founder Andrew Magliozzi added an opt-out option for professors. Efforts to advance the relationship with Harvard's administration stalled even as new relationships with the student body were developed through campus beta testing. 
+                       p.readmore
+                               a(href="http://www.thecrimson.com/article/2009/2/18/finalscluborg-passes-punch-span-stylefont-weight-boldcorrection") Read more ...
+               
+               hr
+
+               div.press
+                       // h2 Bits Blog Post
+                       img.press(src="/images/blown-to-bits.png")
+                       p.date September 27th, 2009
+                       p Computer Science professor and former Dean of Harvard, Harry Lewis, embraces FinalsClub's work and its guiding principle of open education.  Even as Harvard University has not been wholly sympathetic to the FinalsClub mission, invoking the Copyright Act of 1976, assuming a similar position to other major institutions such as University of Texas, Lewis supports working towards the proverbial "temple of the free exchange of ideas."  A course he taught in the Harvard Extension School was also shared freely online.  
+                       p.readmore
+                               a(href="http://www.bitsbook.com/2009/09/a-harvard-skirmish-in-the-copyright-wars") Read more ...
+
diff --git a/views/static/privacy.jade b/views/static/privacy.jade
new file mode 100644 (file)
index 0000000..fda4cc2
--- /dev/null
@@ -0,0 +1,8 @@
+div.content
+       div.container1
+               h1 Privacy Policy
+               p
+                       Xxx xxx xxxxxxx xx xxxxxx xxxx xxxxxx-xxxx xxxx xxxx xxx x xxxxxx xxxxxxxx
+                       xxxx. Xxx xxx xxxx xx xxxx xxxx xxxxxx-xxxx x xxxx xxx x xxxxxx.
+                       Xxx xxx xxxxxxx xx xxxxxx xxxx xxxxxx xxx xxxx xxxx xxx x xxxxxx xxxxxxxx
+                       xxxx.