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
6a3360ce
Commit
6a3360ce
authored
Jun 11, 2013
by
David Baumgold
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Full front-end/back-end connection via Backbone.sync. No data validation whatsoever.
parent
22a7735a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
56 additions
and
23 deletions
+56
-23
cms/djangoapps/contentstore/views/course.py
+11
-10
cms/templates/textbooks.html
+45
-13
No files found.
cms/djangoapps/contentstore/views/course.py
View file @
6a3360ce
...
...
@@ -427,19 +427,21 @@ def textbook_index(request, org, course, name):
org, course, name: Attributes of the Location for the item to edit
"""
course_reference
=
StaticContent
.
compute_location
(
org
,
course
,
name
)
store
=
contentstore
()
assets_db_objs
=
store
.
get_all_content_for_course
(
course_reference
)
assets_json_objs
=
assets_to_json_dict
(
assets_db_objs
)
assets_pdfs
=
[
asset
for
asset
in
assets_json_objs
if
asset
[
"path"
]
.
endswith
(
".pdf"
)]
location
=
get_location_and_verify_access
(
request
,
org
,
course
,
name
)
course_module
=
modulestore
()
.
get_item
(
location
,
depth
=
3
)
store
=
modulestore
()
course_module
=
store
.
get_item
(
location
,
depth
=
3
)
if
request
.
is_ajax
():
if
request
.
method
==
'GET'
:
return
HttpResponse
(
json
.
dumps
(
course_module
.
pdf_textbooks
),
content_type
=
"application/json"
)
elif
request
.
method
==
'POST'
:
store
.
update_metadata
(
course
.
location
,
own_metadata
(
request
.
POST
))
try
:
obj
=
json
.
loads
(
request
.
raw_post_data
)
except
ValueError
:
msg
=
{
"error"
:
"invalid JSON"
}
return
HttpResponseBadRequest
(
json
.
dumps
(
msg
),
content_type
=
"application/json"
)
course_module
.
pdf_textbooks
=
obj
store
.
update_metadata
(
course_module
.
location
,
own_metadata
(
course_module
))
return
HttpResponse
(
''
,
content_type
=
"application/json"
,
status
=
201
)
else
:
upload_asset_callback_url
=
reverse
(
'upload_asset'
,
kwargs
=
{
...
...
@@ -447,7 +449,7 @@ def textbook_index(request, org, course, name):
'course'
:
course
,
'coursename'
:
name
,
})
asset_index_url
=
reverse
(
'asset
_index'
,
kwargs
=
{
textbook_url
=
reverse
(
'textbook
_index'
,
kwargs
=
{
'org'
:
org
,
'course'
:
course
,
'name'
:
name
,
...
...
@@ -455,7 +457,6 @@ def textbook_index(request, org, course, name):
return
render_to_response
(
'textbooks.html'
,
{
'context_course'
:
course_module
,
'course'
:
course_module
,
'assets'
:
assets_pdfs
,
'upload_asset_callback_url'
:
upload_asset_callback_url
,
'
asset_index_url'
:
asset_index
_url
,
'
textbook_url'
:
textbook
_url
,
})
cms/templates/textbooks.html
View file @
6a3360ce
...
...
@@ -27,7 +27,7 @@
<script
type=
"text/javascript"
src=
"${static.url('js/vendor/backbone-associations-min.js')}"
></script>
<script
type=
"text/javascript"
>
window
.
UPLOAD_ASSET_CALLBACK_URL
=
"${upload_asset_callback_url}"
window
.
ASSET_INDEX_URL
=
"${asset_index
_url}"
window
.
TEXTBOOK_URL
=
"${textbook
_url}"
CMS
.
Models
.
Textbook
=
Backbone
.
AssociatedModel
.
extend
({
defaults
:
function
()
{
...
...
@@ -56,6 +56,12 @@ CMS.Models.Textbook = Backbone.AssociatedModel.extend({
delete
response
.
url
;
}
return
response
;
},
toJSON
:
function
()
{
return
{
tab_title
:
this
.
get
(
'name'
),
chapters
:
this
.
get
(
'chapters'
).
toJSON
()
}
}
})
CMS
.
Views
.
TextbookShow
=
Backbone
.
View
.
extend
({
...
...
@@ -70,9 +76,7 @@ CMS.Views.TextbookShow = Backbone.View.extend({
"click .hide-chapters"
:
"hideChapters"
},
render
:
function
()
{
var
attrs
=
$
.
extend
({},
this
.
model
.
attributes
);
attrs
.
chapters
=
this
.
model
.
chapters
;
this
.
$el
.
html
(
this
.
template
(
attrs
));
this
.
$el
.
html
(
this
.
template
(
this
.
model
.
attributes
));
return
this
;
},
editTextbook
:
function
(
e
)
{
...
...
@@ -95,9 +99,10 @@ CMS.Views.TextbookShow = Backbone.View.extend({
CMS
.
Views
.
TextbookEdit
=
Backbone
.
View
.
extend
({
initialize
:
function
()
{
this
.
template
=
_
.
template
(
$
(
"#new-textbook-tpl"
).
text
());
this
.
listenTo
(
this
.
model
.
chapters
,
"add"
,
this
.
addOne
);
this
.
listenTo
(
this
.
model
.
chapters
,
"reset"
,
this
.
addAll
);
this
.
listenTo
(
this
.
model
.
chapters
,
"all"
,
this
.
render
);
var
chapters
=
this
.
model
.
get
(
'chapters'
);
this
.
listenTo
(
chapters
,
"add"
,
this
.
addOne
);
this
.
listenTo
(
chapters
,
"reset"
,
this
.
addAll
);
this
.
listenTo
(
chapters
,
"all"
,
this
.
render
);
this
.
listenTo
(
this
.
model
.
collection
,
"editOne"
,
this
.
remove
);
},
tagName
:
"form"
,
...
...
@@ -122,19 +127,19 @@ CMS.Views.TextbookEdit = Backbone.View.extend({
return
this
;
},
addAll
:
function
()
{
this
.
model
.
chapters
.
each
(
this
.
addOne
,
this
);
this
.
model
.
get
(
'chapters'
)
.
each
(
this
.
addOne
,
this
);
},
createChapter
:
function
(
e
)
{
if
(
e
&&
e
.
preventDefault
)
{
e
.
preventDefault
();
}
this
.
save
();
this
.
model
.
chapters
.
add
([{}])
this
.
model
.
get
(
'chapters'
).
add
([{}]);
},
save
:
function
()
{
var
name
=
this
.
$
(
"#textbook-name-input"
).
val
();
var
textbook
=
this
.
model
;
textbook
.
set
(
"name"
,
name
);
_
.
each
(
this
.
$
(
"li"
),
function
(
li
,
i
)
{
var
chapter
=
textbook
.
chapters
.
at
(
i
);
var
chapter
=
textbook
.
get
(
'chapters'
)
.
at
(
i
);
chapter
.
set
({
"name"
:
$
(
".chapter-name"
,
li
).
val
(),
"asset_path"
:
$
(
".chapter-asset-path"
,
li
).
val
()
...
...
@@ -144,7 +149,25 @@ CMS.Views.TextbookEdit = Backbone.View.extend({
},
saveAndClose
:
function
(
e
)
{
if
(
e
&&
e
.
preventDefault
)
{
e
.
preventDefault
();
}
return
this
.
save
().
close
();
this
.
save
();
msg
=
new
CMS
.
Models
.
SystemFeedback
({
intent
:
"saving"
,
title
:
gettext
(
"Saving…"
)
});
notif
=
new
CMS
.
Views
.
Notification
({
model
:
msg
,
closeIcon
:
false
,
minShown
:
1250
});
var
that
=
this
;
this
.
model
.
collection
.
save
({
success
:
function
()
{
that
.
close
();
},
complete
:
function
()
{
notif
.
hide
();
}
})
},
cancel
:
function
(
e
)
{
if
(
e
&&
e
.
preventDefault
)
{
e
.
preventDefault
();
}
...
...
@@ -164,12 +187,15 @@ CMS.Views.TextbookEdit = Backbone.View.extend({
})
CMS
.
Collections
.
TextbookSet
=
Backbone
.
Collection
.
extend
({
model
:
CMS
.
Models
.
Textbook
,
url
:
ASSET_INDEX
_URL
,
url
:
TEXTBOOK
_URL
,
initialize
:
function
()
{
this
.
listenTo
(
this
,
"editOne"
,
this
.
editOne
);
},
editOne
:
function
(
textbook
)
{
this
.
editing
=
textbook
;
},
save
:
function
(
options
)
{
return
this
.
sync
(
'update'
,
this
,
options
);
}
})
CMS
.
Views
.
ListTextbooks
=
Backbone
.
View
.
extend
({
...
...
@@ -229,6 +255,12 @@ CMS.Models.Chapter = Backbone.AssociatedModel.extend({
delete
response
.
url
;
}
return
response
;
},
toJSON
:
function
()
{
return
{
title
:
this
.
get
(
'name'
),
url
:
this
.
get
(
'asset_path'
)
}
}
})
CMS
.
Collections
.
ChapterSet
=
Backbone
.
Collection
.
extend
({
...
...
@@ -391,7 +423,7 @@ var section = new CMS.Models.Section({
id
:
"${course.id}"
,
name
:
"${course.display_name_with_default | h}"
});
var
textbooks
=
new
CMS
.
Collections
.
TextbookSet
(
$
{
json
.
dumps
(
assets
)
});
var
textbooks
=
new
CMS
.
Collections
.
TextbookSet
(
$
{
json
.
dumps
(
course
.
pdf_textbooks
)},
{
parse
:
true
});
var
tbView
=
new
CMS
.
Views
.
ListTextbooks
({
collection
:
textbooks
});
$
(
function
()
{
...
...
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