Commit 1996b2f5 by Arjun Singh

Merge branch 'master' into feature/arjun/unread_count

parents df866511 46f40e19
...@@ -21,7 +21,15 @@ class CourseDescriptor(SequenceDescriptor): ...@@ -21,7 +21,15 @@ class CourseDescriptor(SequenceDescriptor):
self.title = title self.title = title
self.book_url = book_url self.book_url = book_url
self.table_of_contents = self._get_toc_from_s3() self.table_of_contents = self._get_toc_from_s3()
self.start_page = int(self.table_of_contents[0].attrib['page'])
# The last page should be the last element in the table of contents,
# but it may be nested. So recurse all the way down the last element
last_el = self.table_of_contents[-1]
while last_el.getchildren():
last_el = last_el[-1]
self.end_page = int(last_el.attrib['page'])
@property @property
def table_of_contents(self): def table_of_contents(self):
......
...@@ -53,6 +53,18 @@ section.problem { ...@@ -53,6 +53,18 @@ section.problem {
float: left; float: left;
border-left: 1px solid #ddd; border-left: 1px solid #ddd;
padding-left: 20px; padding-left: 20px;
margin: 20px 0;
}
input[type="radio"],
input[type="checkbox"] {
float: left;
margin: 4px 8px 0 0;
}
text {
display: block;
margin-left: 25px;
} }
} }
......
...@@ -281,7 +281,7 @@ __Inherited:__ ...@@ -281,7 +281,7 @@ __Inherited:__
* `showanswer` - When to show answer. For 'attempted', will show answer after first attempt. Values: never, attempted, answered, closed. Default: closed. Optional. * `showanswer` - When to show answer. For 'attempted', will show answer after first attempt. Values: never, attempted, answered, closed. Default: closed. Optional.
* `graded` - Whether this section will count towards the students grade. "true" or "false". Defaults to "false". * `graded` - Whether this section will count towards the students grade. "true" or "false". Defaults to "false".
* `rerandomise` - Randomize question on each attempt. Values: 'always' (students see a different version of the problem after each attempt to solve it) * `rerandomise` - Randomize question on each attempt. Values: 'always' (students see a different version of the problem after each attempt to solve it)
'onreset' (students see a different version of the problem when they reset, but are not forced to reset after each check) 'onreset' (randomize question when reset button is pressed by the student)
'never' (all students see the same version of the problem) 'never' (all students see the same version of the problem)
'per_student' (individual students see the same version of the problem each time the look at it, but that version is different from what other students see) 'per_student' (individual students see the same version of the problem each time the look at it, but that version is different from what other students see)
Default: 'always'. Optional. Default: 'always'. Optional.
......
...@@ -7,7 +7,7 @@ from courseware.courses import get_course_with_access ...@@ -7,7 +7,7 @@ from courseware.courses import get_course_with_access
from lxml import etree from lxml import etree
@login_required @login_required
def index(request, course_id, book_index, page=0): def index(request, course_id, book_index, page=None):
course = get_course_with_access(request.user, course_id, 'load') course = get_course_with_access(request.user, course_id, 'load')
staff_access = has_access(request.user, course, 'staff') staff_access = has_access(request.user, course, 'staff')
...@@ -15,10 +15,15 @@ def index(request, course_id, book_index, page=0): ...@@ -15,10 +15,15 @@ def index(request, course_id, book_index, page=0):
textbook = course.textbooks[book_index] textbook = course.textbooks[book_index]
table_of_contents = textbook.table_of_contents table_of_contents = textbook.table_of_contents
if page is None:
page = textbook.start_page
return render_to_response('staticbook.html', return render_to_response('staticbook.html',
{'book_index': book_index, 'page': int(page), {'book_index': book_index, 'page': int(page),
'course': course, 'book_url': textbook.book_url, 'course': course, 'book_url': textbook.book_url,
'table_of_contents': table_of_contents, 'table_of_contents': table_of_contents,
'start_page' : textbook.start_page,
'end_page' : textbook.end_page,
'staff_access': staff_access}) 'staff_access': staff_access})
def index_shifted(request, course_id, page): def index_shifted(request, course_id, page):
......
<%inherit file="main.html" /> <%inherit file="main.html" />
<%namespace name='static' file='static_content.html'/> <%namespace name='static' file='static_content.html'/>
<%block name="title"><title>Textbook – MITx 6.002x</title></%block> <%block name="title"><title>${course.number} Textbook</title></%block>
<%block name="headextra"> <%block name="headextra">
<%static:css group='course'/> <%static:css group='course'/>
...@@ -38,14 +38,14 @@ function goto_page(n) { ...@@ -38,14 +38,14 @@ function goto_page(n) {
function prev_page() { function prev_page() {
var newpage=page-1; var newpage=page-1;
if(newpage<0) newpage=0; if(newpage< ${start_page}) newpage=${start_page};
goto_page(newpage); goto_page(newpage);
log_event("book", {"type":"prevpage","new":page}); log_event("book", {"type":"prevpage","new":page});
} }
function next_page() { function next_page() {
var newpage=page+1; var newpage=page+1;
if(newpage>1008) newpage=1008; if(newpage> ${end_page}) newpage=${end_page};
goto_page(newpage); goto_page(newpage);
log_event("book", {"type":"nextpage","new":page}); log_event("book", {"type":"nextpage","new":page});
} }
...@@ -97,6 +97,10 @@ $("#open_close_accordion a").click(function(){ ...@@ -97,6 +97,10 @@ $("#open_close_accordion a").click(function(){
% for entry in table_of_contents: % for entry in table_of_contents:
${print_entry(entry)} ${print_entry(entry)}
% endfor % endfor
## Don't delete this empty list item. Without it, Jquery.TreeView won't
## render the last list item as expandable.
<li></li>
</ul> </ul>
</section> </section>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment