 - [x] (0:45?) (0:20)  counter for each page heading (num students, num assignments)
 - [x] (2:00?) (0:59) links to grade each student; buttons to assign to one student, collect from one, etc.
 - [x] (1:30?) (1:03) display info about each student when they are clicked on (in students page) -- ugly but nicely refactored
-- [ ] (1:00?) assignment collect; don't allow until after assigned, etc. -- FLOW
-- [ ] (0:30?) when adding assignments filter out folders contained in existing assignment folders
-- [ ] (0:30?) when searching show how many things are not being shown.
-- [ ] (0:45?) delete student; show deleted students; permanently delete students
-- [ ] (0:45?) delete assignment; show deleted assignments; permanently delete assignment
-- [ ] (1:00?) show deleted assignments (and purge)
-- [ ] (1:00?) help page -- integrate info
-- [ ] (1:00?) changing title/description needs to change it for all projects
-- [ ] (1:00?) clean up after flux/react when closing the editor
-- [ ] (1:30?) cache stuff/optimize
-- [ ] (2:00?) make everything look pretty
-        - triangles for show/hide assignment info like for students
-        - error messages in assignment page -- make hidable and truncate-able
-- [ ] (3:00?) bug searching / testing / debugging
-- [ ] (1:00?) (0:19+) fix bugs in opening directories in different projects using actions -- completely busted right now due to refactor of directory listing stuff....
+
 ###
 
 # standard non-SMC libraries

                v.push(<a key='open' href='' onClick={(e)=>e.preventDefault();open()}>(open)</a>)
            if obj.error
                v.push(<span key='error' style={color:'red'}>{obj.error}</span>)
            v.push(<a key="copy" href='' onClick={(e)=>e.preventDefault();copy()}>(re-copy)</a>)
        else
            v.push(<a key="copy" href='' onClick={(e)=>e.preventDefault();copy()}>(copy)</a>)
        return v

    render: ->
        info = @props.flux.getStore(@props.name).student_assignment_info(@props.student, @props.assignment)
        <Row >
            <Col md=4 key='last_assignment'>
                {@render_last('Assigned', info.last_assignment, 'assigned', info)}
            </Col>
            <Col md=4 key='collect'>
                {@render_last('Collected', info.last_collect, 'collected', info)}
            </Col>
            <Col md=4 key='return_graded'>
                {@render_last('Returned', info.last_return_graded, 'graded', info)}
            </Col>
        </Row>


            student = @get_student(student)
            student_id = student.get('student_id')
            info =
                last_assignment    : assignment.get('last_assignment')?.get(student_id)?.toJS()   # important to be undefined if no info -- assumed in code
                last_collect       : assignment.get('last_collect')?.get(student_id)?.toJS()
                last_return_graded : assignment.get('last_return_graded')?.get(student_id)?.toJS()
                grade              : assignment.get('grades')?.get(student_id)
                student_id         : student_id
                assignment_id      : assignment.get('assignment_id')
