From fd52980a2d19902a532057a251791adddd542705 Mon Sep 17 00:00:00 2001 From: cahrens Date: Fri, 10 May 2013 16:02:22 -0400 Subject: [PATCH 1/2] Option view, changes getting persisted. --- .../metadata_option_entry.html | 12 +++++++ .../metadata_string_entry.html | 5 ++- cms/static/js/views/metadata_editor_view.js | 17 ++++++---- cms/static/js/views/metadata_option_view.js | 32 +++++++++++++++++++ cms/static/js/views/metadata_string_view.js | 9 +++--- common/lib/xmodule/xmodule/capa_module.py | 3 +- common/lib/xmodule/xmodule/x_module.py | 5 +++ 7 files changed, 69 insertions(+), 14 deletions(-) diff --git a/cms/static/client_templates/metadata_option_entry.html b/cms/static/client_templates/metadata_option_entry.html index e69de29bb2..3a1cd30337 100644 --- a/cms/static/client_templates/metadata_option_entry.html +++ b/cms/static/client_templates/metadata_option_entry.html @@ -0,0 +1,12 @@ +
+ + + +
+<%= model.get('help') %> diff --git a/cms/static/client_templates/metadata_string_entry.html b/cms/static/client_templates/metadata_string_entry.html index 494a4ff97a..af49dc0291 100644 --- a/cms/static/client_templates/metadata_string_entry.html +++ b/cms/static/client_templates/metadata_string_entry.html @@ -1,7 +1,6 @@
- - - + + diff --git a/cms/static/js/views/metadata_editor_view.js b/cms/static/js/views/metadata_editor_view.js index 6c1665d294..9665b456dd 100644 --- a/cms/static/js/views/metadata_editor_view.js +++ b/cms/static/js/views/metadata_editor_view.js @@ -19,12 +19,17 @@ CMS.Views.Metadata.Editor = Backbone.View.extend({ var counter = 0; _.each(self.model.attributes, function(item, key) { - self.views[key] = new CMS.Views.Metadata.Generic({ - el: self.$el.find('.metadata_entry')[counter], - model: new CMS.Models.Metadata(item) - } - ); - counter+=1; + var data = { + el: self.$el.find('.metadata_entry')[counter++], + model: new CMS.Models.Metadata(item) + }; + if (item.options.length > 0) { + self.views[key] = new CMS.Views.Metadata.Option(data); + } + else { + self.views[key] = new CMS.Views.Metadata.String(data); + } + }); } ); diff --git a/cms/static/js/views/metadata_option_view.js b/cms/static/js/views/metadata_option_view.js index e69de29bb2..b619747282 100644 --- a/cms/static/js/views/metadata_option_view.js +++ b/cms/static/js/views/metadata_option_view.js @@ -0,0 +1,32 @@ +if (!CMS.Views['Metadata']) CMS.Views.Metadata = {}; + +CMS.Views.Metadata.Option = Backbone.View.extend({ + + // Model class ... + events : { + }, + + initialize : function() { + var self = this; + this.uniqueId = _.uniqueId('metadata_option_entry_'); + // instantiates an editor template for each update in the collection + window.templateLoader.loadRemoteTemplate("metadata_option_entry", + "/static/client_templates/metadata_option_entry.html", + function (raw_template) { + self.template = _.template(raw_template); + self.$el.append(self.template({model: self.model, uniqueId: self.uniqueId})); + $('#' + self.uniqueId + " option").filter(function() { + return $(this).text() === self.model.get('value'); + }).prop('selected', true); + } + ); + }, + + modified: function () { + return this.getValue() !== this.model.getOriginalValue(); + }, + + getValue: function() { + return this.$el.find('#' + this.uniqueId).find(":selected").text(); + } +}); diff --git a/cms/static/js/views/metadata_string_view.js b/cms/static/js/views/metadata_string_view.js index 53937f3a47..2cb5c04e1b 100644 --- a/cms/static/js/views/metadata_string_view.js +++ b/cms/static/js/views/metadata_string_view.js @@ -1,6 +1,6 @@ if (!CMS.Views['Metadata']) CMS.Views.Metadata = {}; -CMS.Views.Metadata.Generic = Backbone.View.extend({ +CMS.Views.Metadata.String = Backbone.View.extend({ // Model class ... events : { @@ -8,12 +8,13 @@ CMS.Views.Metadata.Generic = Backbone.View.extend({ initialize : function() { var self = this; + this.uniqueId = _.uniqueId('metadata_string_entry_'); // instantiates an editor template for each update in the collection - window.templateLoader.loadRemoteTemplate("metadata_entry", + window.templateLoader.loadRemoteTemplate("metadata_string_entry", "/static/client_templates/metadata_string_entry.html", function (raw_template) { self.template = _.template(raw_template); - self.$el.append(self.template({model: self.model})); + self.$el.append(self.template({model: self.model, uniqueId: self.uniqueId})); } ); }, @@ -23,6 +24,6 @@ CMS.Views.Metadata.Generic = Backbone.View.extend({ }, getValue: function() { - return this.$el.find('.editor').val(); + return this.$el.find('#' + this.uniqueId).val(); } }); diff --git a/common/lib/xmodule/xmodule/capa_module.py b/common/lib/xmodule/xmodule/capa_module.py index 479cd5a759..004411e509 100644 --- a/common/lib/xmodule/xmodule/capa_module.py +++ b/common/lib/xmodule/xmodule/capa_module.py @@ -68,7 +68,8 @@ class CapaFields(object): showanswer = String(help="When to show the problem answer to the student", scope=Scope.settings, default="closed", values=["answered", "always", "attempted", "closed", "never"]) force_save_button = Boolean(help="Whether to force the save button to appear on the page", scope=Scope.settings, default=False) - rerandomize = Randomization(help="When to rerandomize the problem", default="always", scope=Scope.settings) + rerandomize = Randomization(help="When to rerandomize the problem", default="always", scope=Scope.settings, + values=["always", "onreset", "never", "per_student"]) data = String(help="XML data for the problem", scope=Scope.content) correct_map = Object(help="Dictionary with the correctness of current student answers", scope=Scope.user_state, default={}) input_state = Object(help="Dictionary for maintaining the state of inputtypes", scope=Scope.user_state) diff --git a/common/lib/xmodule/xmodule/x_module.py b/common/lib/xmodule/xmodule/x_module.py index 8b5ae3e63f..f3b249adff 100644 --- a/common/lib/xmodule/xmodule/x_module.py +++ b/common/lib/xmodule/xmodule/x_module.py @@ -648,8 +648,13 @@ class XModuleDescriptor(XModuleFields, HTMLSnippet, ResourceTemplates, XBlock): 'inheritable': inheritable, 'explicitly_set': explicitly_set} + values = [] if field.values is None else field.values + for index, choice in enumerate(values): + values[index] = field.to_json(choice) + simple_metadata[field.name] = {'value': field.to_json(value), 'display_name' : field.display_name, + 'options' : values, 'default_value': field.to_json(default_value), 'inheritable': inheritable, 'explicitly_set': explicitly_set, From f4b06b2e966ac2a34a2c28d94ef4959a673caa22 Mon Sep 17 00:00:00 2001 From: cahrens Date: Fri, 10 May 2013 16:41:07 -0400 Subject: [PATCH 2/2] Beginnings of is-set work. --- cms/static/client_templates/metadata_editor.html | 3 +-- .../client_templates/metadata_string_entry.html | 2 +- cms/static/js/views/metadata_editor_view.js | 2 ++ cms/static/js/views/metadata_number_view.js | 14 ++++++++++++++ cms/static/js/views/metadata_option_view.js | 5 +++++ cms/static/js/views/metadata_string_view.js | 4 ++++ cms/templates/base.html | 1 + 7 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 cms/static/js/views/metadata_number_view.js diff --git a/cms/static/client_templates/metadata_editor.html b/cms/static/client_templates/metadata_editor.html index bf618bd6f1..6780c4f1da 100644 --- a/cms/static/client_templates/metadata_editor.html +++ b/cms/static/client_templates/metadata_editor.html @@ -1,7 +1,6 @@
    <% _.each(metadata_entries, function(entry) { %> -
  • -
  • <% }) %>
\ No newline at end of file diff --git a/cms/static/client_templates/metadata_string_entry.html b/cms/static/client_templates/metadata_string_entry.html index af49dc0291..647e48400a 100644 --- a/cms/static/client_templates/metadata_string_entry.html +++ b/cms/static/client_templates/metadata_string_entry.html @@ -5,4 +5,4 @@
-<%= model.get('help') %> \ No newline at end of file +<%= model.get('help') %> diff --git a/cms/static/js/views/metadata_editor_view.js b/cms/static/js/views/metadata_editor_view.js index 9665b456dd..4e35deba9f 100644 --- a/cms/static/js/views/metadata_editor_view.js +++ b/cms/static/js/views/metadata_editor_view.js @@ -24,6 +24,8 @@ CMS.Views.Metadata.Editor = Backbone.View.extend({ model: new CMS.Models.Metadata(item) }; if (item.options.length > 0) { + // Right now, all our option types only hold strings. Should really support + // any type though. self.views[key] = new CMS.Views.Metadata.Option(data); } else { diff --git a/cms/static/js/views/metadata_number_view.js b/cms/static/js/views/metadata_number_view.js new file mode 100644 index 0000000000..a1be53eafa --- /dev/null +++ b/cms/static/js/views/metadata_number_view.js @@ -0,0 +1,14 @@ +if (!CMS.Views['Metadata']) CMS.Views.Metadata = {}; + +CMS.Views.Metadata.Number = CMS.Views.Metadata.String.extend({ + + getValue: function() { + var stringVal = this.$el.find('#' + this.uniqueId).val(); + if (this.isInteger) { + return parseInt(stringVal) + } + else { + return parseFloat(stringVal) + } + } +}); \ No newline at end of file diff --git a/cms/static/js/views/metadata_option_view.js b/cms/static/js/views/metadata_option_view.js index b619747282..28c49fb3d4 100644 --- a/cms/static/js/views/metadata_option_view.js +++ b/cms/static/js/views/metadata_option_view.js @@ -18,6 +18,11 @@ CMS.Views.Metadata.Option = Backbone.View.extend({ $('#' + self.uniqueId + " option").filter(function() { return $(this).text() === self.model.get('value'); }).prop('selected', true); + if (self.model.get('explicitly_set')) { + self.$el.addClass('is-set'); + self.$el.find('#'+self.uniqueId + " .setting-clear").addClass('active'); + } + } ); }, diff --git a/cms/static/js/views/metadata_string_view.js b/cms/static/js/views/metadata_string_view.js index 2cb5c04e1b..465b75ba8b 100644 --- a/cms/static/js/views/metadata_string_view.js +++ b/cms/static/js/views/metadata_string_view.js @@ -15,6 +15,10 @@ CMS.Views.Metadata.String = Backbone.View.extend({ function (raw_template) { self.template = _.template(raw_template); self.$el.append(self.template({model: self.model, uniqueId: self.uniqueId})); + if (self.model.get('explicitly_set')) { + self.$el.addClass('is-set'); + self.$el.find('#'+self.uniqueId + " .setting-clear").addClass('active'); + } } ); }, diff --git a/cms/templates/base.html b/cms/templates/base.html index 5825cdb1b9..6649affefb 100644 --- a/cms/templates/base.html +++ b/cms/templates/base.html @@ -53,6 +53,7 @@ +