From 29e69db0dc1b141f5d9d97aba7038e34efd7f0b1 Mon Sep 17 00:00:00 2001 From: Prem Sichanugrist Date: Thu, 28 Jun 2012 18:10:22 -0400 Subject: [PATCH] Implement HTML module save --- cms/djangoapps/contentstore/views.py | 2 ++ cms/static/coffee/src/main.coffee | 2 ++ cms/static/coffee/src/models/module.coffee | 12 ++++++++++-- cms/static/coffee/src/views/module_edit.coffee | 9 ++++++++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/cms/djangoapps/contentstore/views.py b/cms/djangoapps/contentstore/views.py index 76a904a403..9166763c87 100644 --- a/cms/djangoapps/contentstore/views.py +++ b/cms/djangoapps/contentstore/views.py @@ -2,6 +2,7 @@ from mitxmako.shortcuts import render_to_response from xmodule.modulestore.django import modulestore from django_future.csrf import ensure_csrf_cookie from django.http import HttpResponse +from util.json_request import expect_json import json from fs.osfs import OSFS @@ -28,6 +29,7 @@ def edit_item(request): }) +@expect_json def save_item(request): item_id = request.POST['id'] data = json.loads(request.POST['data']) diff --git a/cms/static/coffee/src/main.coffee b/cms/static/coffee/src/main.coffee index ed27c8ab34..9fa5f3a392 100644 --- a/cms/static/coffee/src/main.coffee +++ b/cms/static/coffee/src/main.coffee @@ -27,6 +27,8 @@ _.extend CMS, Backbone.Events $ -> + Backbone.emulateHTTP = true + $.ajaxSetup headers : { 'X-CSRFToken': $.cookie 'csrftoken' } diff --git a/cms/static/coffee/src/models/module.coffee b/cms/static/coffee/src/models/module.coffee index c3430d3938..dbcc412d5c 100644 --- a/cms/static/coffee/src/models/module.coffee +++ b/cms/static/coffee/src/models/module.coffee @@ -1,9 +1,17 @@ class CMS.Models.Module extends Backbone.Model - initialize: -> + url: '/save_item' + defaults: + data: '{}' + + loadModule: (element) -> try - @module = new window[@get('type')](@get('id')) + @module = new window[@get('type')](element) catch TypeError console.error "Unable to load #{@get('type')}." if console editUrl: -> "/edit_item?#{$.param(id: @get('id'))}" + + save: (args...) -> + @set(data: JSON.stringify(@module.save())) if @module + super(args...) diff --git a/cms/static/coffee/src/views/module_edit.coffee b/cms/static/coffee/src/views/module_edit.coffee index d8a6acdcc3..7611d75fa4 100644 --- a/cms/static/coffee/src/views/module_edit.coffee +++ b/cms/static/coffee/src/views/module_edit.coffee @@ -5,9 +5,16 @@ class CMS.Views.ModuleEdit extends Backbone.View events: 'click .cancel': 'cancel' 'click .module-edit': 'editSubmodule' + 'click .save-update': 'save' initialize: -> - @$el.append($("""
""").load(@model.editUrl())) + @$el.load @model.editUrl(), => + @model.loadModule(@el) + + save: (event) -> + event.preventDefault() + @model.save().success -> + console.log "Saved" cancel: -> CMS.popView()