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
cafe9c47
Commit
cafe9c47
authored
Nov 08, 2012
by
Don Mitchell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Ready to merge static_tabs and then test.
parent
e3d65a0c
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
134 additions
and
2 deletions
+134
-2
cms/djangoapps/contentstore/views.py
+30
-0
cms/static/coffee/src/views/course_info_edit.coffee
+64
-0
cms/templates/course_info.html
+34
-0
cms/templates/widgets/header.html
+1
-0
cms/urls.py
+5
-2
No files found.
cms/djangoapps/contentstore/views.py
View file @
cafe9c47
...
...
@@ -883,6 +883,36 @@ def server_error(request):
@login_required
@ensure_csrf_cookie
def
course_info
(
request
,
org
,
course
,
name
):
"""
Display an editable asset library
org, course, name: Attributes of the Location for the item to edit
"""
location
=
[
'i4x'
,
org
,
course
,
'course'
,
name
]
# check that logged in user has permissions to this item
if
not
has_access
(
request
.
user
,
location
):
raise
PermissionDenied
()
course_module
=
modulestore
()
.
get_item
(
location
)
# safe but slower would be to chk that course_info exists and, if not, add it
location
=
[
'i4x'
,
org
,
course
,
'course_info'
,
"updates"
]
# TODO chagne to get_items when we store each update as a separate entry, then no need to force creation
try
:
course_updates
=
modulestore
()
.
get_item
(
location
)
except
ItemNotFoundError
:
template
=
Location
([
'i4x'
,
org
,
"templates"
,
'course_info'
,
"Empty"
])
_modulestore
(
template
)
.
clone_item
(
template
,
location
)
return
render_to_response
(
'course_info.html'
,
{
'active_tab'
:
'courseinfo-tab'
,
'context_course'
:
course_module
,
'updates'
:
course_updates
})
@login_required
@ensure_csrf_cookie
def
asset_index
(
request
,
org
,
course
,
name
):
"""
Display an editable asset library
...
...
cms/static/coffee/src/views/course_info_edit.coffee
0 → 100644
View file @
cafe9c47
## Derived from and should inherit from a common ancestor w/ ModuleEdit
class
CMS
.
Views
.
CourseInfoEdit
extends
Backbone
.
View
tagName
:
'div'
className
:
'component'
events
:
"click .component-editor .cancel-button"
:
'clickCancelButton'
"click .component-editor .save-button"
:
'clickSaveButton'
"click .component-actions .edit-button"
:
'clickEditButton'
"click .component-actions .delete-button"
:
'onDelete'
initialize
:
->
@
render
()
$component_editor
:
=>
@
$el
.
find
(
'.component-editor'
)
loadDisplay
:
->
XModule
.
loadModule
(
@
$el
.
find
(
'.xmodule_display'
))
loadEdit
:
->
if
not
@
module
@
module
=
XModule
.
loadModule
(
@
$el
.
find
(
'.xmodule_edit'
))
# don't show metadata (deprecated for course_info)
render
:
->
if
@
model
.
id
@
$el
.
load
(
"/preview_component/
#{
@
model
.
id
}
"
,
=>
@
loadDisplay
()
@
delegateEvents
()
)
clickSaveButton
:
(
event
)
=>
event
.
preventDefault
()
data
=
@
module
.
save
()
@
model
.
save
(
data
).
done
(
=>
# # showToastMessage("Your changes have been saved.", null, 3)
@
module
=
null
@
render
()
@
$el
.
removeClass
(
'editing'
)
).
fail
(
->
showToastMessage
(
"There was an error saving your changes. Please try again."
,
null
,
3
)
)
clickCancelButton
:
(
event
)
->
event
.
preventDefault
()
@
$el
.
removeClass
(
'editing'
)
@
$component_editor
().
slideUp
(
150
)
clickEditButton
:
(
event
)
->
event
.
preventDefault
()
@
$el
.
addClass
(
'editing'
)
@
$component_editor
().
slideDown
(
150
)
@
loadEdit
()
onDelete
:
(
event
)
->
# clear contents, don't delete
@
model
.
definition
.
data
=
"<ol></ol>"
# TODO change label to 'clear'
onNew
:
(
event
)
->
ele
=
$
(
@
model
.
definition
.
data
).
find
(
"ol"
)
if
(
ele
)
ele
=
$
(
ele
).
first
().
prepend
(
"<li><h2>"
+
$
.
datepicker
.
formatDate
(
'MM d'
,
new
Date
())
+
"</h2>/n</li>"
);
\ No newline at end of file
cms/templates/course_info.html
0 → 100644
View file @
cafe9c47
<
%
inherit
file=
"base.html"
/>
<!-- TODO decode course # from context_course into title -->
<
%
block
name=
"title"
>
Course Info
</
%
block>
<
%
block
name=
"jsextra"
>
<script
type=
"text/javascript"
charset=
"utf-8"
>
$
(
document
).
ready
(
function
(){
editor
=
new
CMS
.
Views
.
CourseInfoEdit
({
el
:
$
(
'.course-updates'
),
model
:
new
CMS
.
Models
.
Module
({
id
:
'${course_updates.location.url()}'
})
});
$
(
".new-update-button"
).
bind
(
'click'
,
editor
.
onNew
);
});
</script>
</
%
block>
<
%
block
name=
"content"
>
<div
class=
"main-wrapper"
>
<div
class=
"inner-wrapper"
>
<h1>
Course Info
</h1>
<div
class=
"main-column"
>
<div
class=
"window"
>
<h2>
Updates
</h2>
<a
href=
"#"
class=
"new-update-button"
>
New Update
</a>
<div
class=
"course-updates"
></div>
<!-- probably replace w/ a vertical where each element of the vertical is a separate update w/ a date and html field -->
</div>
</div>
<div
class=
"sidebar window"
>
</div>
</div>
</div>
</
%
block>
\ No newline at end of file
cms/templates/widgets/header.html
View file @
cafe9c47
...
...
@@ -10,6 +10,7 @@
<a
href=
"${reverse('course_index', kwargs=dict(org=ctx_loc.org, course=ctx_loc.course, name=ctx_loc.name))}"
class=
"class-name"
>
${context_course.display_name}
</a>
<ul
class=
"class-nav"
>
<li><a
href=
"${reverse('course_index', kwargs=dict(org=ctx_loc.org, course=ctx_loc.course, name=ctx_loc.name))}"
id=
'courseware-tab'
>
Courseware
</a></li>
<li><a
href=
"${reverse('course_info', kwargs=dict(org=ctx_loc.org, course=ctx_loc.course, name=ctx_loc.name))}"
id=
'courseinfo-tab'
>
Course Info
</a></li>
<li><a
href=
"${reverse('static_pages', kwargs=dict(org=ctx_loc.org, course=ctx_loc.course, coursename=ctx_loc.name))}"
id=
'pages-tab'
style=
"display:none"
>
Pages
</a></li>
<li><a
href=
"${reverse('asset_index', kwargs=dict(org=ctx_loc.org, course=ctx_loc.course, name=ctx_loc.name))}"
id=
'assets-tab'
>
Assets
</a></li>
<li><a
href=
"${reverse('manage_users', kwargs=dict(location=ctx_loc))}"
id=
'users-tab'
>
Users
</a></li>
...
...
cms/urls.py
View file @
cafe9c47
...
...
@@ -34,8 +34,11 @@ urlpatterns = ('',
'contentstore.views.remove_user'
,
name
=
'remove_user'
),
url
(
r'^(?P<org>[^/]+)/(?P<course>[^/]+)/course/(?P<name>[^/]+)/remove_user$'
,
'contentstore.views.remove_user'
,
name
=
'remove_user'
),
url
(
r'^pages/(?P<org>[^/]+)/(?P<course>[^/]+)/course/(?P<coursename>[^/]+)$'
,
'contentstore.views.static_pages'
,
name
=
'static_pages'
),
url
(
r'^edit_static/(?P<org>[^/]+)/(?P<course>[^/]+)/course/(?P<coursename>[^/]+)$'
,
'contentstore.views.edit_static'
,
name
=
'edit_static'
),
url
(
r'^pages/(?P<org>[^/]+)/(?P<course>[^/]+)/course/(?P<coursename>[^/]+)$'
,
'contentstore.views.static_pages'
,
name
=
'static_pages'
),
url
(
r'^edit_static/(?P<org>[^/]+)/(?P<course>[^/]+)/course/(?P<coursename>[^/]+)$'
,
'contentstore.views.edit_static'
,
name
=
'edit_static'
),
url
(
r'^(?P<org>[^/]+)/(?P<course>[^/]+)/info/(?P<name>[^/]+)$'
,
'contentstore.views.course_info'
,
name
=
'course_info'
),
url
(
r'^(?P<org>[^/]+)/(?P<course>[^/]+)/assets/(?P<name>[^/]+)$'
,
'contentstore.views.asset_index'
,
name
=
'asset_index'
),
# temporary landing page for a course
...
...
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