Commit 12586f36 by David Ormsbee

Merge pull request #718 from MITx/feature/cale/cms-drag-and-drop-children

Feature/cale/cms drag and drop children
parents 09909c7e d7cbd1c8
...@@ -276,8 +276,13 @@ def save_item(request): ...@@ -276,8 +276,13 @@ def save_item(request):
if not has_access(request.user, item_location): if not has_access(request.user, item_location):
raise Http404 # TODO (vshnayder): better error raise Http404 # TODO (vshnayder): better error
data = json.loads(request.POST['data']) if request.POST['data']:
modulestore().update_item(item_location, data) data = request.POST['data']
modulestore().update_item(item_location, data)
if request.POST['children']:
children = request.POST['children']
modulestore().update_children(item_location, children)
# Export the course back to github # Export the course back to github
# This uses wildcarding to find the course, which requires handling # This uses wildcarding to find the course, which requires handling
......
...@@ -86,7 +86,12 @@ def export_to_github(course, commit_message, author_str=None): ...@@ -86,7 +86,12 @@ def export_to_github(course, commit_message, author_str=None):
If author_str is specified, uses it in the commit. If author_str is specified, uses it in the commit.
''' '''
course_dir = course.metadata.get('data_dir', course.location.course) course_dir = course.metadata.get('data_dir', course.location.course)
repo_settings = load_repo_settings(course_dir) try:
repo_settings = load_repo_settings(course_dir)
except InvalidRepo:
log.warning("Invalid repo {0}, not exporting data to xml".format(course_dir))
return
git_repo = setup_repo(repo_settings) git_repo = setup_repo(repo_settings)
fs = OSFS(git_repo.working_dir) fs = OSFS(git_repo.working_dir)
......
...@@ -2,6 +2,7 @@ class CMS.Models.Module extends Backbone.Model ...@@ -2,6 +2,7 @@ class CMS.Models.Module extends Backbone.Model
url: '/save_item' url: '/save_item'
defaults: defaults:
data: '' data: ''
children: ''
loadModule: (element) -> loadModule: (element) ->
elt = $(element).find('.xmodule_edit').first() elt = $(element).find('.xmodule_edit').first()
...@@ -11,5 +12,5 @@ class CMS.Models.Module extends Backbone.Model ...@@ -11,5 +12,5 @@ class CMS.Models.Module extends Backbone.Model
"/edit_item?#{$.param(id: @get('id'))}" "/edit_item?#{$.param(id: @get('id'))}"
save: (args...) -> save: (args...) ->
@set(data: JSON.stringify(@module.save())) if @module @set(data: @module.save()) if @module
super(args...) super(args...)
...@@ -13,18 +13,22 @@ class CMS.Views.ModuleEdit extends Backbone.View ...@@ -13,18 +13,22 @@ class CMS.Views.ModuleEdit extends Backbone.View
# Load preview modules # Load preview modules
XModule.loadModules('display') XModule.loadModules('display')
@$children = @$el.find('#sortable')
@enableDrag() @enableDrag()
enableDrag: -> enableDrag: =>
# Enable dragging things in the #sortable div (if there is one) # Enable dragging things in the #sortable div (if there is one)
if $("#sortable").length > 0 if @$children.length > 0
$("#sortable").sortable({ @$children.sortable(
placeholder: "ui-state-highlight" placeholder: "ui-state-highlight"
}) update: (event, ui) =>
$("#sortable").disableSelection(); @model.set(children: @$children.find('.module-edit').map(
(idx, el) -> $(el).data('id')
).toArray())
save: (event) -> )
@$children.disableSelection()
save: (event) =>
event.preventDefault() event.preventDefault()
@model.save().done((previews) => @model.save().done((previews) =>
alert("Your changes have been saved.") alert("Your changes have been saved.")
......
...@@ -141,11 +141,15 @@ textarea { ...@@ -141,11 +141,15 @@ textarea {
} }
} }
// .wip { .wip {
// outline: 1px solid #f00 !important; outline: 1px solid #f00 !important;
// position: relative; position: relative;
// } &:after {
content: "WIP";
.hidden { font-size: 8px;
display: none; padding: 2px;
background: #f00;
color: #fff;
@include position(absolute, 0px 0px 0 0);
}
} }
<section class="week-new">
<header>
<div>
<h1 class="editable">Week 3</h1>
<p><a href="#">+ new goal</a></p>
</div>
<section class="goals">
<ul>
<li>
<p><strong>Please add a goal for this section</strong> </p>
</li>
</ul>
</section>
</header>
<section class="content">
<section class="filters">
<ul>
<li>
<label for="">Sort by</label>
<select>
<option value="">Recently Modified</option>
</select>
</li>
<li>
<label for="">Display</label>
<select>
<option value="">All content</option>
</select>
</li>
<li>
<select>
<option value="">Internal Only</option>
</select>
</li>
<li class="advanced">
<a href="#">Advanced filters</a>
</li>
<li>
<input type="search" name="" id="" value="" />
</li>
</ul>
</section>
<div>
<section class="modules empty">
<p>This are no groups or units in this section yet</p>
<a href="#">Add a Group</a>
<a href="#">Add a Unit</a>
</section>
<section class="scratch-pad">
<ol>
<li>
<header>
<h2>Section Scratch</h2>
</header>
<ul>
<li class="empty">
<p><a href="#">There are no units in this scratch yet. Add one</a></p>
</li>
</ul>
</li>
<li>
<header>
<h2>Course Scratch</h2>
</header>
<ul>
<li>
<a href="" class="problem-edit">Problem title 11</a>
<a href="#" class="draggable">handle</a>
</li>
<li>
<a href="#" class="sequence-edit">Problem Group</a>
<a href="#" class="draggable">handle</a>
</li>
<li>
<a href="#" class="problem-edit">Problem title 14</a>
<a href="#" class="draggable">handle</a>
</li>
<li>
<a href="#" class="video-edit">Video 3</a>
<a href="#" class="draggable">handle</a>
</li>
</ul>
</li>
<li class="new-module">
<%include file="new-module.html"/>
</li>
</ol>
</section>
</div>
</section>
</section>
...@@ -21,7 +21,8 @@ class SequenceModule(XModule): ...@@ -21,7 +21,8 @@ class SequenceModule(XModule):
''' Layout module which lays out content in a temporal sequence ''' Layout module which lays out content in a temporal sequence
''' '''
js = {'coffee': [resource_string(__name__, js = {'coffee': [resource_string(__name__,
'js/src/sequence/display.coffee')]} 'js/src/sequence/display.coffee')],
'js': [resource_string(__name__, 'js/src/sequence/display/jquery.sequence.js')]}
css = {'scss': [resource_string(__name__, 'css/sequence/display.scss')]} css = {'scss': [resource_string(__name__, 'css/sequence/display.scss')]}
js_module_name = "Sequence" js_module_name = "Sequence"
......
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