Commit 625c6b51 by cahrens

Cleanup, change how we load templates.

parent f3d4381f
......@@ -224,7 +224,7 @@ PIPELINE_JS = {
) + ['js/hesitate.js', 'js/base.js',
'js/models/feedback.js', 'js/views/feedback.js',
'js/models/section.js', 'js/views/section.js',
'js/models/metadata_model.js'],
'js/models/metadata_model.js', 'js/views/metadata_editor_view.js'],
'output_filename': 'js/cms-application.js',
'test_order': 0
},
......
beforeEach ->
# TODO: update these
setFixtures(sandbox({id: "page-alert"}))
appendSetFixtures(sandbox({id: "page-notification"}))
describe "CMS.Views.Metadata.Editor creates editors for each field", ->
beforeEach ->
@model = new Backbone.Model({
display_name: {
default_value: null,
display_name: "Display Name",
explicitly_set: true,
field_name: "display_name",
help: "Specifies the name for this component. The name appears as a tooltip in the course ribbon at the top of the page.",
inheritable: false,
options: [],
type: "Generic",
value: "Word cloud"
},
num_inputs: {
default_value: 5,
display_name: "Inputs",
explicitly_set: false,
field_name: "num_inputs",
help: "Number of text boxes for student to input words/sentences.",
inheritable: false,
options: {min: 1},
type: "Integer",
value: 5
}
})
it "renders on initalize", ->
view = new CMS.Views.Metadata.Editor({model: @model})
expect(view.models).toBeDefined()
......@@ -27,7 +27,7 @@ class CMS.Views.ModuleEdit extends Backbone.View
@metadataEditor = new CMS.Views.Metadata.Editor({
el: metadataEditor,
model: new Backbone.Model(metadataEditor.data('metadata'))
});
})
# Need to update set "active" class on data editor if there is one.
# If we are only showing settings, hide the data editor controls and update settings accordingly.
......
......@@ -5,45 +5,44 @@ CMS.Views.Metadata.Editor = Backbone.View.extend({
// Model is simply a Backbone.Model instance.
initialize : function() {
var tpl = $("#metadata-editor-tpl").text();
if(!tpl) {
console.error("Couldn't load metadata editor template");
}
this.template = _.template(tpl);
this.$el.html(this.template({metadata_entries: this.model.attributes}));
var counter = 0;
// Sort entries by display name.
var sortedObject = _.sortBy(this.model.attributes,
function (val) {
return val.display_name
});
this.models = [];
var self = this;
// instantiates an editor template for each update in the collection
window.templateLoader.loadRemoteTemplate("metadata_editor",
"/static/client_templates/metadata_editor.html",
function (raw_template) {
self.template = _.template(raw_template);
self.$el.append(self.template({metadata_entries: self.model.attributes}));
var counter = 0;
// Sort entries by display name.
var sortedObject = _.sortBy(self.model.attributes,
function (val) {
return val.display_name
});
self.models = [];
_.each(sortedObject,
function (item) {
var model = new CMS.Models.Metadata(item);
self.models.push(model);
var data = {
el: self.$el.find('.metadata_entry')[counter++],
model: model
};
if (item.type === CMS.Models.Metadata.SELECT_TYPE) {
new CMS.Views.Metadata.Option(data);
}
else if (item.type === CMS.Models.Metadata.INTEGER_TYPE ||
item.type === CMS.Models.Metadata.FLOAT_TYPE) {
new CMS.Views.Metadata.Number(data);
}
else {
// Everything else is treated as GENERIC_TYPE, which uses String editor.
new CMS.Views.Metadata.String(data);
}
});
}
);
_.each(sortedObject,
function (item) {
var model = new CMS.Models.Metadata(item);
self.models.push(model);
var data = {
el: self.$el.find('.metadata_entry')[counter++],
model: model
};
if (item.type === CMS.Models.Metadata.SELECT_TYPE) {
new CMS.Views.Metadata.Option(data);
}
else if (item.type === CMS.Models.Metadata.INTEGER_TYPE ||
item.type === CMS.Models.Metadata.FLOAT_TYPE) {
new CMS.Views.Metadata.Number(data);
}
else {
// Everything else is treated as GENERIC_TYPE, which uses String editor.
new CMS.Views.Metadata.String(data);
}
});
},
getModifiedMetadataValues: function () {
......@@ -73,14 +72,14 @@ CMS.Views.Metadata.AbstractEditor = Backbone.View.extend({
var self = this;
var templateName = this.getTemplateName();
this.uniqueId = _.uniqueId(templateName + "_");
window.templateLoader.loadRemoteTemplate(templateName,
"/static/client_templates/" + templateName + ".html",
function (raw_template) {
self.template = _.template(raw_template);
self.$el.append(self.template({model: self.model, uniqueId: self.uniqueId}));
self.render();
}
);
var tpl = $("#"+templateName).text();
if(!tpl) {
console.error("Couldn't load template: " + templateName);
}
this.template = _.template(tpl);
this.$el.append(this.template({model: this.model, uniqueId: this.uniqueId}));
this.render();
},
getTemplateName : function () {},
......@@ -136,7 +135,7 @@ CMS.Views.Metadata.String = CMS.Views.Metadata.AbstractEditor.extend({
},
getTemplateName : function () {
return "metadata_string_entry";
return "metadata-string-entry";
},
getValueFromEditor : function () {
......@@ -187,15 +186,18 @@ CMS.Views.Metadata.Number = CMS.Views.Metadata.AbstractEditor.extend({
this.$el.find('input').attr(step, stepValue);
}
// Manually runs polyfill for input number types to correct for Firefox non-support
this.$el.find('.setting-input-number').inputNumber();
// Manually runs polyfill for input number types to correct for Firefox non-support.
// inputNumber will be undefined when unit test is running.
if ($.fn.inputNumber) {
this.$el.find('.setting-input-number').inputNumber();
}
this.initialized = true;
}
},
getTemplateName : function () {
return "metadata_number_entry";
return "metadata-number-entry";
},
getValueFromEditor : function () {
......@@ -240,7 +242,6 @@ CMS.Views.Metadata.Number = CMS.Views.Metadata.AbstractEditor.extend({
});
CMS.Views.Metadata.Option = CMS.Views.Metadata.AbstractEditor.extend({
events : {
......@@ -249,7 +250,7 @@ CMS.Views.Metadata.Option = CMS.Views.Metadata.AbstractEditor.extend({
},
getTemplateName : function () {
return "metadata_option_entry";
return "metadata-option-entry";
},
getValueFromEditor : function () {
......
......@@ -3,7 +3,6 @@
<script type="text/javascript" src="${static.url('js/models/metadata_model.js')}"></script>
<script type="text/javascript" src="${static.url('js/views/metadata_editor_view.js')}"></script>
<script type="text/javascript" src="${static.url('js/template_loader.js')}"></script>
<script src="${static.url('js/vendor/html5-input-polyfills/number-polyfill.js')}"></script>
<link rel="stylesheet" type="text/css" href="${static.url('css/vendor/html5-input-polyfills/number-polyfill.css')}" />
......
<%! from django.utils.translation import ugettext as _ %>
<%namespace name='static' file='../static_content.html'/>
<%
import hashlib
......@@ -7,6 +8,23 @@
hlskey = hashlib.md5(module.location.url()).hexdigest()
%>
## js templates
<script id="metadata-editor-tpl" type="text/template">
<%static:include path="js/metadata-editor.underscore" />
</script>
<script id="metadata-number-entry" type="text/template">
<%static:include path="js/metadata-number-entry.underscore" />
</script>
<script id="metadata-string-entry" type="text/template">
<%static:include path="js/metadata-string-entry.underscore" />
</script>
<script id="metadata-option-entry" type="text/template">
<%static:include path="js/metadata-option-entry.underscore" />
</script>
<% showHighLevelSource='source_code' in editable_metadata_fields and editable_metadata_fields['source_code']['explicitly_set'] %>
<% metadata_field_copy = copy.deepcopy(editable_metadata_fields) %>
## Delete 'source_code' field (if it exists) so metadata editor view does not attempt to render it.
......
......@@ -250,6 +250,6 @@ class CombinedOpenEndedDescriptor(CombinedOpenEndedFields, RawDescriptor):
def non_editable_metadata_fields(self):
non_editable_fields = super(CombinedOpenEndedDescriptor, self).non_editable_metadata_fields
non_editable_fields.extend([CombinedOpenEndedDescriptor.due, CombinedOpenEndedDescriptor.graceperiod,
CombinedOpenEndedDescriptor.markdown])
CombinedOpenEndedDescriptor.markdown, CombinedOpenEndedDescriptor.version])
return non_editable_fields
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