Commit a4834094 by E. Kolpakov Committed by Jonathan Piacenti

Disabled starting discussion course apps (DiscussionApp and DiscussionProfileApp) on DOM ready:

* Added scripts to XModule templates to start the apps..
* Added explicit call in XBlock to start required app.

Added concept of local urls - required to substitute absolute links for user profiles for relative in Apros
parent 92b1ef7d
...@@ -8,9 +8,8 @@ from .utils import ( ...@@ -8,9 +8,8 @@ from .utils import (
render_template, render_template,
render_mako_template, render_mako_template,
render_mustache_templates, render_mustache_templates,
get_js_urls, get_css_urls, asset_to_static_url,
asset_to_static_url add_resources_to_fragment)
)
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
...@@ -76,10 +75,7 @@ class DiscussionXBlock(XBlock): ...@@ -76,10 +75,7 @@ class DiscussionXBlock(XBlock):
fragment.add_content(render_mako_template('discussion/_discussion_inline.html', context)) fragment.add_content(render_mako_template('discussion/_discussion_inline.html', context))
for url in get_js_urls(): add_resources_to_fragment(fragment)
fragment.add_javascript_url(url)
for url in get_css_urls():
fragment.add_css_url(url)
fragment.add_javascript(render_template('static/js/discussion_inline.js', {'course_id': self.course_id})) fragment.add_javascript(render_template('static/js/discussion_inline.js', {'course_id': self.course_id}))
fragment.add_content(render_mustache_templates()) fragment.add_content(render_mustache_templates())
...@@ -167,11 +163,7 @@ class DiscussionCourseXBlock(XBlock): ...@@ -167,11 +163,7 @@ class DiscussionCourseXBlock(XBlock):
context = discussion_service.get_course_template_context() context = discussion_service.get_course_template_context()
context['enable_new_post_btn'] = True context['enable_new_post_btn'] = True
for url in get_js_urls(): add_resources_to_fragment(fragment)
fragment.add_javascript_url(url)
for url in get_css_urls():
fragment.add_css_url(url)
fragment.add_content(render_mako_template('discussion/_discussion_course.html', context)) fragment.add_content(render_mako_template('discussion/_discussion_course.html', context))
......
var $$course_id = "{{course_id}}"; var $$course_id = "{{course_id}}";
function DiscussionCourseBlock(runtime, element) { function DiscussionCourseBlock(runtime, element) {
var el = $(element).find('section.discussion'); var el = $(element).find('section.discussion'),
el.data('pushState', 'false'); pushState = true;
var testUrl = runtime.handlerUrl(element, 'test'); var testUrl = runtime.handlerUrl(element, 'test');
if (testUrl.match(/^(http|https):\/\//)) { if (testUrl.match(/^(http|https):\/\//)) {
var hostname = testUrl.match(/^(.*:\/\/[a-z\-.]+)\//)[1]; var hostname = testUrl.match(/^(.*:\/\/[a-z\-.]+)\//)[1];
DiscussionUtil.setBaseUrl(hostname); DiscussionUtil.setBaseUrl(hostname);
DiscussionUtil.localUrls.push('user_profile');
pushState = false
} }
DiscussionApp.start(el, pushState);
} }
...@@ -137,6 +137,15 @@ def get_css_urls(): ...@@ -137,6 +137,15 @@ def get_css_urls():
return [asset_to_static_url(path) for path in CSS_URLS] return [asset_to_static_url(path) for path in CSS_URLS]
def add_resources_to_fragment(fragment):
# order is important : code in discussion_thread_list_view -> updateSidebar depends on the
# fact that html is properly styled as it does height calculations.
for url in CSS_URLS:
fragment.add_css_url(asset_to_static_url(url))
for url in JS_URLS + discussion_js:
fragment.add_javascript_url(asset_to_static_url(url))
def asset_to_static_url(asset_path): def asset_to_static_url(asset_path):
""" """
:param str asset_path: path to asset :param str asset_path: path to asset
......
if Backbone? if Backbone?
DiscussionApp = @DiscussionApp =
start: (elem, pushState = true)-> start: (elem, pushState = true)->
# TODO: Perhaps eliminate usage of global variables when possible # TODO: Perhaps eliminate usage of global variables when possible
DiscussionUtil.loadRolesFromContainer() DiscussionUtil.loadRolesFromContainer()
...@@ -18,7 +18,7 @@ if Backbone? ...@@ -18,7 +18,7 @@ if Backbone?
course_settings = new DiscussionCourseSettings(element.data("course-settings")) course_settings = new DiscussionCourseSettings(element.data("course-settings"))
new DiscussionRouter({discussion: discussion, course_settings: course_settings}) new DiscussionRouter({discussion: discussion, course_settings: course_settings})
Backbone.history.start({pushState: pushState, root: "/courses/#{$$course_id}/discussion/forum/"}) Backbone.history.start({pushState: pushState, root: "/courses/#{$$course_id}/discussion/forum/"})
DiscussionProfileApp = @DiscussionProfileApp =
start: (elem) -> start: (elem) ->
# Roles are not included in user profile page, but they are not used for anything # Roles are not included in user profile page, but they are not used for anything
DiscussionUtil.loadRoles({"Moderator": [], "Administrator": [], "Community TA": []}) DiscussionUtil.loadRoles({"Moderator": [], "Administrator": [], "Community TA": []})
...@@ -30,9 +30,3 @@ if Backbone? ...@@ -30,9 +30,3 @@ if Backbone?
page = element.data("page") page = element.data("page")
numPages = element.data("num-pages") numPages = element.data("num-pages")
new DiscussionUserProfileView(el: element, collection: threads, page: page, numPages: numPages) new DiscussionUserProfileView(el: element, collection: threads, page: page, numPages: numPages)
$ ->
$("section.discussion").each (index, elem) ->
pushState = $(elem).data('pushState') != 'false'
DiscussionApp.start(elem, pushState)
$("section.discussion-user-threads").each (index, elem) ->
DiscussionProfileApp.start(elem)
...@@ -13,9 +13,11 @@ $ -> ...@@ -13,9 +13,11 @@ $ ->
class @DiscussionUtil class @DiscussionUtil
@baseUrl = ''; @baseUrl = ''
@wmdEditors: {} @wmdEditors: {}
@localUrls: []
@getTemplate: (id) -> @getTemplate: (id) ->
$("script##{id}").html() $("script##{id}").html()
...@@ -58,7 +60,9 @@ class @DiscussionUtil ...@@ -58,7 +60,9 @@ class @DiscussionUtil
.click -> handler(this) .click -> handler(this)
@urlFor: (name, param, param1, param2) -> @urlFor: (name, param, param1, param2) ->
@baseUrl + { prefix = if name not in @localUrls then @baseUrl else ""
prefix + {
follow_discussion : "/courses/#{$$course_id}/discussion/#{param}/follow" follow_discussion : "/courses/#{$$course_id}/discussion/#{param}/follow"
unfollow_discussion : "/courses/#{$$course_id}/discussion/#{param}/unfollow" unfollow_discussion : "/courses/#{$$course_id}/discussion/#{param}/unfollow"
create_thread : "/courses/#{$$course_id}/discussion/#{param}/threads/create" create_thread : "/courses/#{$$course_id}/discussion/#{param}/threads/create"
......
...@@ -19,6 +19,13 @@ ...@@ -19,6 +19,13 @@
<%block name="js_extra"> <%block name="js_extra">
<%include file="_js_body_dependencies.html" /> <%include file="_js_body_dependencies.html" />
<%static:js group='discussion'/> <%static:js group='discussion'/>
<script language="javascript">
$(function () {
$("section.discussion").each(function (index, elem) {
DiscussionApp.start(elem, true);
});
});
</script>
</%block> </%block>
<%include file="_discussion_course_navigation.html" args="active_page='discussion'" /> <%include file="_discussion_course_navigation.html" args="active_page='discussion'" />
......
...@@ -18,6 +18,13 @@ from django.template.defaultfilters import escapejs ...@@ -18,6 +18,13 @@ from django.template.defaultfilters import escapejs
<%block name="js_extra"> <%block name="js_extra">
<%include file="_js_body_dependencies.html" /> <%include file="_js_body_dependencies.html" />
<%static:js group='discussion'/> <%static:js group='discussion'/>
<script language="javascript">
$(function () {
$("section.discussion-user-threads").each(function (index, elem) {
DiscussionProfileApp.start(elem);
});
});
</script>
</%block> </%block>
<%include file="../courseware/course_navigation.html" args="active_page='discussion'" /> <%include file="../courseware/course_navigation.html" args="active_page='discussion'" />
......
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