diff --git a/common/lib/xmodule/xmodule/annotatable_module.py b/common/lib/xmodule/xmodule/annotatable_module.py index 8d7dc5f917..5b26f4d953 100644 --- a/common/lib/xmodule/xmodule/annotatable_module.py +++ b/common/lib/xmodule/xmodule/annotatable_module.py @@ -63,15 +63,11 @@ class AnnotatableModule(XModule): def _get_discussion_html(self, discussion_id, discussion_title): """ Returns html to display the discussion thread """ - - tpl = u'
' - - return tpl.format(discussion_id, discussion_title) + context = { + 'discussion_id': discussion_id, + 'discussion_title': discussion_title + } + return self.system.render_template('annotatable_discussion.html', context) def _attach_discussion(self, span, index, xmltree): """ Attaches a discussion thread to the annotation span. """ diff --git a/common/lib/xmodule/xmodule/js/src/annotatable/display.coffee b/common/lib/xmodule/xmodule/js/src/annotatable/display.coffee index 47ba52673f..52feb686ba 100644 --- a/common/lib/xmodule/xmodule/js/src/annotatable/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/annotatable/display.coffee @@ -59,13 +59,34 @@ class @Annotatable $(@discussionSelector, @el).not(el).toggleClass('opaque', state) scrollToDiscussion: (el) -> + padding = 20 complete = @makeHighlighter(el) - top = el.offset().top - 20 # with some padding + animOpts = { + scrollTop : el.offset().top - padding + } + + if @canScrollToDiscussion(el) + $('html, body').animate(animOpts, 500, 'swing', complete) + else + complete() - $('html, body').animate({ scrollTop: top }, 750, 'swing', complete) + canScrollToDiscussion: (el) -> + scrollTop = el.offset().top + docHeight = $(document).height() + winHeight = $(window).height() + winScrollTop = window.scrollY + + viewStart = winScrollTop + viewEnd = winScrollTop + (.75 * winHeight) + inView = viewStart < scrollTop < viewEnd + + scrollable = !inView + atDocEnd = viewStart + winHeight >= docHeight + + return (if atDocEnd then false else scrollable) makeHighlighter: (el) -> - return @_once -> el.effect('highlight', {}, 750) + return @_once -> el.effect('highlight', {}, 500) _once: (fn) -> done = false diff --git a/lms/templates/annotatable_discussion.html b/lms/templates/annotatable_discussion.html new file mode 100644 index 0000000000..1525cc7b6b --- /dev/null +++ b/lms/templates/annotatable_discussion.html @@ -0,0 +1,6 @@ +