Commit d329dbec by gradyward

Seperated template files and did some renaming

parent 34acaafc
{% load i18n %}
{% spaceless %}
<li class="openassessment_ai_example" data-example="{{ example.name }}">
<div class="openassessment_ai_example_settings">
<label class="openassessment_ai_example_label_field">
Example Name
<input type="text" value="{{ example.label }}">
</label>
<h2 class="openassessment_ai_example_total_score">Total Score: 26 / 30</h2>
</div>
<div class="openassessment_ai_example_essay_wrapper">
<textarea class="openassessment_ai_example_essay">{{ example.answer }}</textarea>
</div>
<div class="openassessment_ai_example_scored_rubric">
{% for criterion in example.criteria %}
<div class="openassessment_ai_example_scored_rubric_criterion">
<label> {{ criterion.label }}
<select value="{{ criterion.option_selected }}" data-criterion="{{ criterion.name }}">
{% for option in criterion.options %}
<option class="openassessment_ai_example_criterion_option" data-criterion="{{ criterion.name }}" value="{{ option.name }}"
{% if option.name == criterion.option_selected %} selected {% endif %}>
{{ option.label }} - {{ option.points }} points
</option>
{% endfor %}
</select>
</label>
</div>
{% endfor %}
</div>
</li>
{% endspaceless %}
\ No newline at end of file
{% load i18n %}
{% spaceless %}
<li class="openassessment_ai_example_menu_item" data-example="{{ example.name }}">
<h2 class="openassessment_ai_example_menu_item_name">{{ example.label }}</h2>
<div class="openassessment_ai_example_remove_button">
<h2>Remove</h2>
</div>
</li>
{% endspaceless %}
\ No newline at end of file
...@@ -9,11 +9,9 @@ ...@@ -9,11 +9,9 @@
</p> </p>
</div> </div>
<div id="openassessment_ai_editor_selector_and_editor"> <div id="openassessment_ai_editor_menu_and_editor">
<div id="openassessment_ai_menu_wrapper">
<div id="openassessment_ai_selector_wrapper"> <div id="openassessment_ai_menu_header">
<div id="openassessment_ai_selector_header">
<div id="openassessment_ai_editor_upload_buttons"> <div id="openassessment_ai_editor_upload_buttons">
<div id="openassessment_ai_editor_upload_csv" class="openassessment_ai_editor_upload_button"> <div id="openassessment_ai_editor_upload_csv" class="openassessment_ai_editor_upload_button">
Upload CSV Upload CSV
...@@ -22,21 +20,16 @@ ...@@ -22,21 +20,16 @@
Upload XML Upload XML
</div> </div>
</div> </div>
<div id="openassessment_ai_selector_title"> <div id="openassessment_ai_menu_title">
<h2>Examples</h2> <h2>Examples</h2>
</div> </div>
</div> </div>
<ol id="openassessment_ai_example_selector"> <ol id="openassessment_ai_example_menu">
{% for example in assessments.ai.examples %} {% for example in assessments.ai.examples %}
<li class="openassessment_ai_example_selector_item" data-example="{{ example.name }}"> {% include 'openassessmentblock/edit/ai/oa_edit_ai_example_menu_item.html' with example=example %}
<h2 class="openassessment_ai_example_selector_name">{{ example.label }}</h2>
<div class="openassessment_ai_example_remove_button">
<h2>Remove</h2>
</div>
</li>
{% endfor %} {% endfor %}
</ol> </ol>
<div id="openassessment_ai_selector_add_example"> <div id="openassessment_ai_menu_add_example">
Add Example Add Example
</div> </div>
</div> </div>
...@@ -44,85 +37,22 @@ ...@@ -44,85 +37,22 @@
<div id="openassessment_ai_example_editor"> <div id="openassessment_ai_example_editor">
<ol id="openassessment_ai_examples"> <ol id="openassessment_ai_examples">
{% for example in assessments.ai.examples %} {% for example in assessments.ai.examples %}
<li class="openassessment_ai_example" data-example="{{ example.name }}"> {% include 'openassessmentblock/edit/ai/oa_edit_ai_example.html' with example=example %}
<div class="openassessment_ai_example_settings">
<label class="openassessment_ai_example_label_field">
Example Name
<input type="text" value="{{ example.label }}">
</label>
<h2 class="openassessment_ai_example_total_score">Total Score: 26 / 30</h2>
</div>
<div class="openassessment_ai_example_essay_wrapper">
<textarea class="openassessment_ai_example_essay">{{ example.answer }}</textarea>
</div>
<div class="openassessment_ai_example_scored_rubric">
{% for criterion in example.criteria %}
<div class="openassessment_ai_example_scored_rubric_criterion">
<label> {{ criterion.label }}
<select value="{{ criterion.option_selected }}" data-criterion="{{ criterion.name }}">
{% for option in criterion.options %}
<option class="openassessment_ai_example_criterion_option" data-criterion="{{ criterion.name }}" value="{{ option.name }}"
{% if option.name == criterion.option_selected %} selected {% endif %}>
{{ option.label }} - {{ option.points }} points
</option>
{% endfor %}
</select>
</label>
</div>
{% endfor %}
</div>
</li>
{% endfor %} {% endfor %}
</ol> </ol>
</div> </div>
</div> </div>
</div> </div>
<ol id="openassessment_ai_example_selector_item_template" class="is--hidden">
<li class="openassessment_ai_example_selector_item" data-example="{{ example.name }}">
<h2 class="openassessment_ai_example_selector_name">--New Example--</h2>
<div class="openassessment_ai_example_remove_button">
<h2>Remove</h2>
</div>
</li>
</ol>
<ol id="openassessment_ai_example_template" class="is--hidden"> <ol id="openassessment_ai_example_template" class="is--hidden">
{% with example as assessments.ai.template %} {% include 'openassessmentblock/edit/ai/oa_edit_ai_example.html' with example=assessments.ai.template %}
<li class="openassessment_ai_example" data-example="{{ example.name }}">
<div class="openassessment_ai_example_settings">
<label class="openassessment_ai_example_label_field">
Example Name
<input type="text" value="{{ example.label }}">
</label>
<h2 class="openassessment_ai_example_total_score">Total Score: 26 / 30</h2>
</div>
<div class="openassessment_ai_example_essay_wrapper">
<textarea class="openassessment_ai_example_essay">{{ example.answer }}</textarea>
</div>
<div class="openassessment_ai_example_scored_rubric">
{% for criterion in example.criteria %}
<div class="openassessment_ai_example_scored_rubric_criterion">
<label> {{ criterion.label }}
<select value="{{ criterion.option_selected }}" data-criterion="{{ criterion.name }}">
{% for option in criterion.options %}
<option class="openassessment_ai_example_criterion_option" data-criterion="{{ criterion.name }}" value="{{ option.name }}"
{% if option.name == criterion.option_selected %} selected {% endif %}>
{{ option.label }} - {{ option.points }} points
</option>
{% endfor %}
</select>
</label>
</div>
{% endfor %}
</div>
</li>
{% endwith %}
</ol> </ol>
<ol id="openassessment_ai_example_menu_item_template" class="is--hidden">
{% include 'openassessmentblock/edit/ai/oa_edit_ai_example_menu_item.html' with example=assessments.ai.template %}
</ol>
<!--
<div id="openassessment_ai_editor_import_sub_modal" class="is--hidden"> <div id="openassessment_ai_editor_import_sub_modal" class="is--hidden">
<div id="openassessment_ai_editor_sub_modal_header"> <div id="openassessment_ai_editor_sub_modal_header">
...@@ -145,6 +75,7 @@ ...@@ -145,6 +75,7 @@
</div> </div>
</div> </div>
</div> </div>
-->
</div> </div>
{% endspaceless %} {% endspaceless %}
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
{% include "openassessmentblock/edit/oa_edit_rubric.html" %} {% include "openassessmentblock/edit/oa_edit_rubric.html" %}
{% include "openassessmentblock/edit/oa_edit_example_based_assessment_tab.html" %} {% include "openassessmentblock/edit/ai/oa_edit_example_based_assessment_tab.html" %}
<div id="oa_settings_editor_wrapper" class="oa_editor_content_wrapper wrapper-comp-settings"> <div id="oa_settings_editor_wrapper" class="oa_editor_content_wrapper wrapper-comp-settings">
......
This source diff could not be displayed because it is too large. You can view the blob instead.
OpenAssessment.EditAIView = function(element) { OpenAssessment.EditAIView = function(element) {
this.element = element; this.element = element;
this.exampleAddButton = $('#openassessment_ai_selector_add_example', this.element); this.exampleAddButton = $('#openassessment_ai_menu_add_example', this.element);
this.exampleContainer = new OpenAssessment.Container( this.exampleContainer = new OpenAssessment.Container(
OpenAssessment.AIExample, { OpenAssessment.AIExample, {
containerElement: $("#openassessment_ai_examples", this.element).get(0), containerElement: $("#openassessment_ai_examples", this.element).get(0),
templateElement: $("#openassessment_ai_example_template", this.element).get(0), templateElement: $("#openassessment_ai_example_template", this.element).get(0),
addButtonElement: $("#openassessment_ai_selector_add_example", this.element).get(0), addButtonElement: $("#openassessment_ai_menu_add_example", this.element).get(0),
removeButtonClass: "openassessment_ai_example_remove_button", removeButtonClass: "openassessment_ai_example_remove_button",
containerItemClass: "openassessment_ai_example" containerItemClass: "openassessment_ai_example"
} }
...@@ -16,11 +16,11 @@ OpenAssessment.EditAIView = function(element) { ...@@ -16,11 +16,11 @@ OpenAssessment.EditAIView = function(element) {
this.exampleMenuContainer = new OpenAssessment.Container( this.exampleMenuContainer = new OpenAssessment.Container(
OpenAssessment.AIExampleMenuItem, { OpenAssessment.AIExampleMenuItem, {
containerElement: $("#openassessment_ai_example_selector", this.element).get(0), containerElement: $("#openassessment_ai_example_menu", this.element).get(0),
templateElement: $("#openassessment_ai_example_selector_item_template", this.element).get(0), templateElement: $("#openassessment_ai_example_menu_item_template", this.element).get(0),
addButtonElement: $("#openassessment_ai_selector_add_example", this.element).get(0), addButtonElement: $("#openassessment_ai_menu_add_example", this.element).get(0),
removeButtonClass: "openassessment_ai_example_remove_button", removeButtonClass: "openassessment_ai_example_remove_button",
containerItemClass: "openassessment_ai_example_selector_item" containerItemClass: "openassessment_ai_example_menu_item"
} }
); );
this.exampleMenuContainer.addEventListeners(); this.exampleMenuContainer.addEventListeners();
......
...@@ -1213,25 +1213,25 @@ ...@@ -1213,25 +1213,25 @@
} }
} }
#openassessment_ai_editor_selector_and_editor{ #openassessment_ai_editor_menu_and_editor{
height: calc(100% - 67px); height: calc(100% - 67px);
overflow: hidden; overflow: hidden;
position: relative; position: relative;
} }
#openassessment_ai_selector_wrapper{ #openassessment_ai_menu_wrapper{
width: 250px; width: 250px;
border-right: 1px solid #838486; border-right: 1px solid #838486;
height: 100%; height: 100%;
display: inline-block; display: inline-block;
position: absolute; position: absolute;
#openassessment_ai_selector_header{ #openassessment_ai_menu_header{
height: 75px; height: 77px;
width: 100%; width: 100%;
background-color: white; background-color: white;
#openassessment_ai_selector_title{ #openassessment_ai_menu_title{
text-transform: uppercase; text-transform: uppercase;
color: #838486; color: #838486;
font-size: 80%; font-size: 80%;
...@@ -1244,7 +1244,7 @@ ...@@ -1244,7 +1244,7 @@
} }
} }
#openassessment_ai_example_selector{ #openassessment_ai_example_menu{
width:100%; width:100%;
overflow-y: scroll; overflow-y: scroll;
height: Calc(100% - 115px); height: Calc(100% - 115px);
...@@ -1252,7 +1252,7 @@ ...@@ -1252,7 +1252,7 @@
border-bottom: 1px solid $edx-gray-l3; border-bottom: 1px solid $edx-gray-l3;
} }
#openassessment_ai_selector_add_example{ #openassessment_ai_menu_add_example{
height: 30px; height: 30px;
padding: 3px; padding: 3px;
border: 1px solid; border: 1px solid;
...@@ -1265,26 +1265,26 @@ ...@@ -1265,26 +1265,26 @@
font-size: 95%; font-size: 95%;
} }
#openassessment_ai_selector_add_example:before{ #openassessment_ai_menu_add_example:before{
font-family: FontAwesome; font-family: FontAwesome;
content: "\f067"; content: "\f067";
display: inline-block; display: inline-block;
font-size: 90%; font-size: 90%;
} }
#openassessment_ai_selector_add_example:hover { #openassessment_ai_menu_add_example:hover {
background-color: #009FE6; background-color: #009FE6;
color: white; color: white;
} }
.openassessment_ai_example_selector_item{ .openassessment_ai_example_menu_item{
padding: 0 5px; padding: 0 5px;
width: 100%; width: 100%;
overflow-y: hidden; overflow-y: hidden;
overflow-x: scroll; overflow-x: scroll;
border-bottom: 1px solid $edx-gray-l3; border-bottom: 1px solid $edx-gray-l3;
.openassessment_ai_example_selector_name { .openassessment_ai_example_menu_item_name {
display: inline-block; display: inline-block;
text-transform: uppercase; text-transform: uppercase;
float: left; float: left;
...@@ -1324,7 +1324,7 @@ ...@@ -1324,7 +1324,7 @@
} }
} }
.openassessment_ai_example_selector_item:hover{ .openassessment_ai_example_menu_item:hover{
background-color: $edx-gray-l5; background-color: $edx-gray-l5;
cursor: pointer; cursor: pointer;
} }
...@@ -1408,6 +1408,7 @@ ...@@ -1408,6 +1408,7 @@
border-radius: 3px; border-radius: 3px;
border: 1px solid #B2B2B2; border: 1px solid #B2B2B2;
text-overflow: ellipsis; text-overflow: ellipsis;
float: right;
} }
} }
} }
......
...@@ -264,46 +264,53 @@ class StudioMixin(object): ...@@ -264,46 +264,53 @@ class StudioMixin(object):
student_training_template['criteria'] = criteria_list student_training_template['criteria'] = criteria_list
if student_training_module: if student_training_module:
example_list = [] example_list = self._construct_scored_rubrics_for_examples(student_training_module['examples'])
# Adds each example to a modified version of the student training module dictionary.
for example in student_training_module['examples']:
criteria_list = copy.deepcopy(self.rubric_criteria_with_labels)
# Equivalent to a Join Query, this adds the selected option to the Criterion's dictionary, so that
# it can be easily referenced in the template without searching through the selected options.
for criterion in criteria_list:
for option_selected in example['options_selected']:
if option_selected['criterion'] == criterion['name']:
criterion['option_selected'] = option_selected['option']
example_list.append({
'answer': example['answer'],
'criteria': criteria_list,
})
assessments['training'] = {'examples': example_list, 'template': student_training_template} assessments['training'] = {'examples': example_list, 'template': student_training_template}
# If we don't have student training enabled, we still need to render a single (empty, or default) example
else:
assessments['training'] = {'examples': [student_training_template], 'template': student_training_template}
example_based_module = self.get_assessment_module('example-based-assessment')
example_based_template = copy.deepcopy(student_training_template)
example_based_template['label'] = 'Unnamed Example'
# Mocking this step out to allow template rendering: if example_based_module:
ai_examples = copy.deepcopy(example_list) ai_examples = self._construct_scored_rubrics_for_examples(example_based_module['examples'])
count = 1 count = 1
for example in ai_examples: for example in ai_examples:
example['label'] = "AI Example " + str(count) if not example.get('label'):
example['label'] = "AI Example " + str(count)
example['name'] = count example['name'] = count
count += 1 count += 1
assessments['ai'] = {'examples': ai_examples, 'template': student_training_template} assessments['ai'] = {'examples': ai_examples, 'template': example_based_template}
# If we don't have student training enabled, we still need to render a single (empty, or default) example
else:
assessments['training'] = {'examples': [student_training_template], 'template': student_training_template}
example_based_assessment = self.get_assessment_module('example-based-assessment')
if example_based_assessment:
assessments['example_based_assessment'] = { assessments['example_based_assessment'] = {
'examples': serialize_examples_to_xml_str(example_based_assessment) 'examples': serialize_examples_to_xml_str(example_based_assessment)
} }
else:
assessments['ai'] = {'examples': [example_based_template], 'template': example_based_template}
return assessments return assessments
def _construct_scored_rubrics_for_examples(self, original_example_list):
"""
"""
example_list = []
for example in original_example_list:
criteria_list = copy.deepcopy(self.rubric_criteria_with_labels)
# Equivalent to a Join Query, this adds the selected option to the Criterion's dictionary, so that
# it can be easily referenced in the template without searching through the selected options.
for criterion in criteria_list:
for option_selected in example['options_selected']:
if option_selected['criterion'] == criterion['name']:
criterion['option_selected'] = option_selected['option']
example_list.append({
'answer': example['answer'],
'criteria': criteria_list,
})
return example_list
def _editor_assessments_order_context(self): def _editor_assessments_order_context(self):
""" """
Create a list of assessment names in the order Create a list of assessment names in the order
......
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