<%page expression_filter="h"/> <%! from django.utils.translation import ugettext as _ from openedx.core.djangolib.markup import HTML from openedx.core.djangolib.js_utils import ( dump_js_escaped_json, js_escaped_string ) %> <%inherit file="main.html" /> <%namespace name='static' file='static_content.html'/> <%block name="pagetitle">${_('{course_number} Textbook').format(course_number=course.display_number_with_default)}</%block> <%block name="headextra"> <%static:css group='style-course-vendor'/> <%static:css group='style-course'/> <%static:js group='courseware'/> </%block> <%block name="js_extra"> <script type="text/javascript" src="${static.url('js/vendor/tinymce/js/tinymce/tinymce.full.min.js')}"></script> <script type="text/javascript" src="${static.url('js/vendor/tinymce/js/tinymce/jquery.tinymce.min.js')}"></script> <script type="text/javascript"> (function($) { $.fn.myHTMLViewer = function(options) { var urlToLoad = null; if (options.url) { urlToLoad = options.url; } var chapterUrls = null; if (options.chapters) { chapterUrls = options.chapters; } var chapterToLoad = 1; if (options.chapterNum) { // TODO: this should only be specified if there are // chapters, and it should be in-bounds. chapterToLoad = options.chapterNum; } var onComplete = function() {}; if(options.notesEnabled) { onComplete = function(url) { return function() { $('#viewerContainer').trigger('notes:init', [url, "${storage | n, js_escaped_string}", "${token | n, js_escaped_string}"]); } }; } loadUrl = function htmlViewLoadUrl(url) { // clear out previous load, if any: parentElement = document.getElementById('bookpage'); while (parentElement.hasChildNodes()) parentElement.removeChild(parentElement.lastChild); // load new URL in: $('#bookpage').load(url, null, onComplete(url)); }; loadChapterUrl = function htmlViewLoadChapterUrl(chapterNum) { if (chapterNum < 1 || chapterNum > chapterUrls.length) { return; } var chapterUrl = chapterUrls[chapterNum-1]; loadUrl(chapterUrl); }; // define navigation links for chapters: if (chapterUrls != null) { var loadChapterUrlHelper = function(i) { return function(event) { // when opening a new chapter, always open to the top: loadChapterUrl(i); }; }; for (var index = 1; index <= chapterUrls.length; index += 1) { $("#htmlchapter-" + index).click(loadChapterUrlHelper(index)); } } // finally, load the appropriate url/page if (urlToLoad != null) { loadUrl(urlToLoad); } else { loadChapterUrl(chapterToLoad); } } })(jQuery); $(document).ready(function() { var options = {}; %if 'url' in textbook: options.url = "${textbook['url'] | n, js_escaped_string}"; %endif %if 'chapters' in textbook: var chptrs = []; %for chap in textbook['chapters']: chptrs.push("${chap['url'] | n, js_escaped_string}"); %endfor options.chapters = chptrs; %endif %if chapter is not None: options.chapterNum = ${int(chapter) | n, dump_js_escaped_json}; %endif options.notesEnabled = false; %if notes_enabled is not UNDEFINED and notes_enabled: options.notesEnabled = true; %endif $('#outerContainer').myHTMLViewer(options); }); </script> </%block> <%include file="/courseware/course_navigation.html" args="active_page='htmltextbook/{0}'.format(book_index)" /> <div id="outerContainer"> <main id="main" aria-label="${_('Content')}" tabindex="-1"> <div id="mainContainer" class="book-wrapper"> %if 'chapters' in textbook: <section aria-label="${_('Textbook Navigation')}" class="book-sidebar"> <ul id="booknav" class="treeview-booknav"> <%def name="print_entry(entry, index_value)"> <li id="htmlchapter-${index_value}"> <a href="#bookpage" class="chapter"> ${entry.get('title')} </a> </li> </%def> %for (index, entry) in enumerate(textbook['chapters']): ${HTML(print_entry(entry, index+1))} % endfor </ul> </section> %endif <section id="viewerContainer" class="book"> <section class="page"> <div id="bookpage" /> </section> </section> <span class="idU" style="display:none">${student.id}</span> <span class="idDU" style="display:none">${student.username}</span> </div> </main> </div>