Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
d189a49e
Commit
d189a49e
authored
Aug 20, 2012
by
Rocky Duan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
continue working on backbone & got vote migrated and working
parent
0b3e9909
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
472 additions
and
45 deletions
+472
-45
lms/djangoapps/django_comment_client/helpers.py
+18
-1
lms/static/coffee/src/backbone_discussion/content.coffee
+126
-5
lms/static/coffee/src/backbone_discussion/discussion.coffee
+36
-31
lms/static/coffee/src/backbone_discussion/main.coffee
+9
-0
lms/static/coffee/src/backbone_discussion/utils.coffee
+255
-0
lms/templates/courseware/courseware.html
+2
-1
lms/templates/discussion/_content.mustache
+2
-2
lms/templates/discussion/_content_renderer.html
+1
-1
lms/templates/discussion/_js_body_dependencies.html
+4
-0
lms/templates/discussion/_js_dependencies.html
+0
-3
lms/templates/discussion/_js_head_dependencies.html
+17
-0
lms/templates/discussion/index.html
+2
-1
No files found.
lms/djangoapps/django_comment_client/helpers.py
View file @
d189a49e
from
django.core.urlresolvers
import
reverse
from
django.template.defaultfilters
import
escapejs
from
django.conf
import
settings
from
mitxmako.shortcuts
import
render_to_string
from
utils
import
*
from
mustache_helpers
import
mustache_helpers
from
functools
import
partial
from
utils
import
*
import
pystache_custom
as
pystache
import
urllib
import
os
def
pluralize
(
singular_term
,
count
):
if
int
(
count
)
>=
2
:
...
...
@@ -18,6 +22,19 @@ def show_if(text, condition):
else
:
return
''
# TODO there should be a better way to handle this
def
include_mustache_templates
():
mustache_dir
=
settings
.
PROJECT_ROOT
/
'templates'
/
'discussion'
valid_file_name
=
lambda
file_name
:
file_name
.
endswith
(
'.mustache'
)
read_file
=
lambda
file_name
:
(
file_name
,
open
(
mustache_dir
/
file_name
,
"r"
)
.
read
())
strip_file_name
=
lambda
x
:
(
x
[
0
]
.
rpartition
(
'.'
)[
0
],
x
[
1
])
wrap_in_tag
=
lambda
x
:
"<script type='text/template' id='{0}'>{1}</script>"
.
format
(
x
[
0
],
escapejs
(
x
[
1
]))
file_contents
=
map
(
read_file
,
filter
(
valid_file_name
,
os
.
listdir
(
mustache_dir
)))
return
'
\n
'
.
join
(
map
(
wrap_in_tag
,
map
(
strip_file_name
,
file_contents
)))
def
render_content
(
content
,
additional_context
=
{}):
content_info
=
{
'displayed_title'
:
content
.
get
(
'highlighted_title'
)
or
content
.
get
(
'title'
,
''
),
...
...
lms/static/coffee/src/backbone_discussion/content.coffee
View file @
d189a49e
$
->
class
Content
extends
Backbone
.
Model
class
@
Content
extends
Backbone
.
Model
class
Thread
extends
Content
template
:
->
DiscussionUtil
.
getTemplate
(
'_content'
)
window
.
Content
=
Content
window
.
Thread
=
Thread
actions
:
editable
:
'.admin-edit'
can_reply
:
'.discussion-reply'
can_endorse
:
'.admin-endorse'
can_delete
:
'.admin-delete'
can_openclose
:
'.admin-openclose'
isUpvoted
:
->
DiscussionUtil
.
isUpvoted
@
id
isDownvoted
:
->
DiscussionUtil
.
isDownvoted
@
id
can
:
(
action
)
->
DiscussionUtil
.
getContentInfo
@
id
,
action
class
@
ContentView
extends
Backbone
.
View
$
:
(
selector
)
->
@
$local
.
find
(
selector
)
showSingleThread
:
(
event
)
->
unvote
:
(
event
)
->
url
=
DiscussionUtil
.
urlFor
(
"undo_vote_for_
#{
@
model
.
get
(
'type'
)
}
"
,
@
model
.
id
)
DiscussionUtil
.
safeAjax
$elem
:
@
$
(
".discussion-vote"
)
url
:
url
type
:
"POST"
dataType
:
"json"
success
:
(
response
,
textStatus
)
=>
if
textStatus
==
"success"
@
$
(
".discussion-vote"
).
removeClass
(
"voted"
)
@
$
(
".discussion-votes-point"
).
html
response
.
votes
.
point
vote
:
(
event
)
->
$elem
=
$
(
event
.
target
)
if
$elem
.
hasClass
(
"voted"
)
@
unvote
(
event
)
else
value
=
$elem
.
attr
(
"value"
)
url
=
Discussion
.
urlFor
(
"
#{
value
}
vote_
#{
@
model
.
get
(
'type'
)
}
"
,
@
model
.
id
)
DiscussionUtil
.
safeAjax
$elem
:
@
$
(
".discussion-vote"
)
url
:
url
type
:
"POST"
dataType
:
"json"
success
:
(
response
,
textStatus
)
=>
if
textStatus
==
"success"
@
$
(
".discussion-vote"
).
removeClass
(
"voted"
)
@
$
(
".discussion-vote-
#{
value
}
"
).
addClass
(
"voted"
)
@
$
(
".discussion-votes-point"
).
html
response
.
votes
.
point
hideSingleThread
:
->
reply
:
->
cancelReply
:
->
endorse
:
->
close
:
->
edit
:
->
delete
:
->
events
:
"click .thread-title"
:
"showSingleThread"
"click .discussion-show-comments"
:
"showSingleThread"
"click .discussion-hide-comments"
:
"hideSingleThread"
"click .discussion-reply-thread"
:
"reply"
"click .discussion-reply-comment"
:
"reply"
"click .discussion-cancel-reply"
:
"cancelReply"
"click .discussion-vote-up"
:
"vote"
"click .discussion-vote-down"
:
"vote"
"click .admin-endorse"
:
"endorse"
"click .admin-openclose"
:
"close"
"click .admin-edit"
:
"edit"
"click .admin-delete"
:
"delete"
initLocal
:
->
@
$local
=
@
$el
.
children
(
".local"
)
initFollowThread
:
->
$el
.
children
(
".discussion-content"
)
.
find
(
".follow-wrapper"
)
.
append
(
DiscussionUtil
.
subscriptionLink
(
'thread'
,
id
))
initVote
:
->
if
@
model
.
isUpvoted
()
@
$
(
".discussion-vote-up"
).
addClass
(
"voted"
)
else
if
@
model
.
isDownvoted
()
@
$
(
".discussion-vote-down"
).
addClass
(
"voted"
)
initBody
:
->
$contentBody
=
@
$
(
".content-body"
)
$contentBody
.
html
DiscussionUtil
.
postMathJaxProcessor
DiscussionUtil
.
markdownWithHighlight
$contentBody
.
html
()
MathJax
.
Hub
.
Queue
[
"Typeset"
,
MathJax
.
Hub
,
$contentBody
.
attr
(
"id"
)]
initActions
:
->
for
action
,
elemSelector
of
@
model
.
actions
if
not
@
model
.
can
action
@
$
(
elemSelector
).
remove
()
initTimeago
:
->
@
$
(
"span.timeago"
).
timeago
()
initialize
:
->
@
model
.
view
=
@
@
initLocal
()
@
initVote
()
@
initTimeago
()
@
initBody
()
@
initActions
()
class
@
Thread
extends
@
Content
class
@
ThreadView
extends
@
ContentView
class
@
Comment
extends
@
Content
class
@
Comments
extends
Backbone
.
Collection
model
:
Comment
lms/static/coffee/src/backbone_discussion/discussion.coffee
View file @
d189a49e
$
->
class
Discussion
extends
Backbone
.
Collection
model
:
Thread
initialize
:
->
this
.
bind
"add"
,
(
item
)
=>
item
.
collection
=
this
class
DiscussionModuleView
extends
Backbone
.
View
class
DiscussionView
extends
Backbone
.
View
$
:
(
selector
)
->
@
$local
.
find
(
selector
)
initialize
:
->
@
$local
=
@
$el
.
children
(
".local"
)
events
:
"submit .search-wrapper>.discussion-search-form"
:
"search"
"click .discussion-search-link"
:
"search"
"click .discussion-sort-link"
:
"sort"
"click .discussion-paginator>.discussion-page-link"
:
"page"
$
(
".discussion-module"
).
each
(
index
,
elem
)
->
view
=
new
DiscussionModuleView
(
el
:
elem
)
$
(
"section.discussion"
).
each
(
index
,
elem
)
->
discussionData
=
DiscussionUtil
.
getDiscussionData
(
elem
)
discussion
=
new
Discussion
(
discussionData
)
view
=
new
DiscussionView
(
el
:
elem
,
model
:
discussion
)
class
@
Discussion
extends
Backbone
.
Collection
model
:
Thread
initialize
:
->
this
.
bind
"add"
,
(
item
)
=>
item
.
collection
=
this
find
:
(
id
)
->
_
.
first
@
where
(
id
:
id
)
class
@
DiscussionModuleView
extends
Backbone
.
View
class
@
DiscussionView
extends
Backbone
.
View
$
:
(
selector
)
->
@
$local
.
find
(
selector
)
initLocal
:
->
@
$local
=
@
$el
.
children
(
".local"
)
initialize
:
->
@
initLocal
()
@
model
.
view
=
@
@
$el
.
children
(
".threads"
).
children
(
".thread"
).
each
(
index
,
elem
)
=>
threadView
=
new
ThreadView
el
:
elem
,
model
:
@
model
.
find
$
(
elem
).
attr
(
"_id"
)
search
:
->
sort
:
->
page
:
->
events
:
"submit .search-wrapper>.discussion-search-form"
:
"search"
"click .discussion-search-link"
:
"search"
"click .discussion-sort-link"
:
"sort"
"click .discussion-paginator>.discussion-page-link"
:
"page"
lms/static/coffee/src/backbone_discussion/main.coffee
View file @
d189a49e
$
->
$
(
".discussion-module"
).
each
(
index
,
elem
)
->
view
=
new
DiscussionModuleView
(
el
:
elem
)
$
(
"section.discussion"
).
each
(
index
,
elem
)
->
discussionData
=
DiscussionUtil
.
getDiscussionData
(
elem
)
discussion
=
new
Discussion
(
discussionData
)
view
=
new
DiscussionView
(
el
:
elem
,
model
:
discussion
)
lms/static/coffee/src/backbone_discussion/utils.coffee
View file @
d189a49e
This diff is collapsed.
Click to expand it.
lms/templates/courseware/courseware.html
View file @
d189a49e
...
...
@@ -5,6 +5,7 @@
<
%
block
name=
"headextra"
>
<
%
static:css
group=
'course'
/>
<
%
include
file=
"discussion/_js_head_dependencies.html"
/>
</
%
block>
<
%
block
name=
"js_extra"
>
...
...
@@ -21,7 +22,7 @@
<
%
static:js
group=
'courseware'
/>
<
%
include
file=
"discussion/_js_dependencies.html"
/>
<
%
include
file=
"discussion/_js_
body_
dependencies.html"
/>
<!-- TODO: http://docs.jquery.com/Plugins/Validation -->
...
...
lms/templates/discussion/_content.mustache
View file @
d189a49e
<div
class=
"discussion-content"
>
<div
class=
"discussion-content-wrapper"
>
<div
class=
"discussion-votes"
>
<a
class=
"discussion-vote discussion-vote-up"
href=
"javascript:void(0)"
>
▲
</a>
<a
class=
"discussion-vote discussion-vote-up"
href=
"javascript:void(0)"
value=
"up"
>
▲
</a>
<div
class=
"discussion-votes-point"
>
{{
content
.
votes
.
point
}}
</div>
<a
class=
"discussion-vote discussion-vote-down"
href=
"javascript:void(0)"
>
▼
</a>
<a
class=
"discussion-vote discussion-vote-down"
href=
"javascript:void(0)"
value=
"down"
>
▼
</a>
</div>
<div
class=
"discussion-right-wrapper"
>
<ul
class=
"admin-actions"
>
...
...
lms/templates/discussion/_content_renderer.html
View file @
d189a49e
...
...
@@ -6,7 +6,7 @@
<
%
def
name=
"render_content_with_comments(content)"
>
<div
class=
"${content['type']}"
_id=
"${content['id']}"
_discussion_id=
"${content.get('commentable_id')}"
_author_id=
"${helpers.show_if(content['user_id'], content.get('anonymous'))}"
>
${render_content(content)}
<div
class=
"local"
>
${render_content(content)}
</div>
% if content.get('children') is not None:
${render_comments(content['children'])}
% endif
...
...
lms/templates/discussion/_js_body_dependencies.html
0 → 100644
View file @
d189a49e
<
%!
from
django_comment_client
.
helpers
import
include_mustache_templates
%
>
<
%
include
file=
"/mathjax_include.html"
/>
${include_mustache_templates()}
lms/templates/discussion/_js_dependencies.html
View file @
d189a49e
<
%
namespace
name=
'static'
file=
'../static_content.html'
/>
<
%
include
file=
"/mathjax_include.html"
/>
<script
type=
"text/javascript"
src=
"${static.url('js/split.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/jquery.ajaxfileupload.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/Markdown.Converter.js')}"
></script>
...
...
@@ -17,4 +15,3 @@
<link
href=
"${static.url('css/vendor/jquery.tagsinput.css')}"
rel=
"stylesheet"
type=
"text/css"
>
<link
href=
"${static.url('css/vendor/jquery.autocomplete.css')}"
rel=
"stylesheet"
type=
"text/css"
>
<script
type=
"text/template"
id=
"content-template"
src=
"${static.url('templates/_content.mustache')}"
></script>
lms/templates/discussion/_js_head_dependencies.html
0 → 100644
View file @
d189a49e
<
%
namespace
name=
'static'
file=
'../static_content.html'
/>
<script
type=
"text/javascript"
src=
"${static.url('js/split.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/jquery.ajaxfileupload.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/Markdown.Converter.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/Markdown.Sanitizer.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/Markdown.Editor.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/jquery.autocomplete.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/jquery.timeago.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/jquery.tagsinput.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/mustache.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/URI.min.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/vendor/underscore-min.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/vendor/backbone-min.js')}"
></script>
<link
href=
"${static.url('css/vendor/jquery.tagsinput.css')}"
rel=
"stylesheet"
type=
"text/css"
>
<link
href=
"${static.url('css/vendor/jquery.autocomplete.css')}"
rel=
"stylesheet"
type=
"text/css"
>
lms/templates/discussion/index.html
View file @
d189a49e
...
...
@@ -5,10 +5,11 @@
<
%
block
name=
"headextra"
>
<
%
static:css
group=
'course'
/>
<
%
include
file=
"_js_head_dependencies.html"
/>
</
%
block>
<
%
block
name=
"js_extra"
>
<
%
include
file=
"_js_dependencies.html"
/>
<
%
include
file=
"_js_
body_
dependencies.html"
/>
</
%
block>
<
%
include
file=
"../courseware/course_navigation.html"
args=
"active_page='discussion'"
/>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment