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 @@
</p>
</div>
<div id="openassessment_ai_editor_selector_and_editor">
<div id="openassessment_ai_selector_wrapper">
<div id="openassessment_ai_selector_header">
<div id="openassessment_ai_editor_menu_and_editor">
<div id="openassessment_ai_menu_wrapper">
<div id="openassessment_ai_menu_header">
<div id="openassessment_ai_editor_upload_buttons">
<div id="openassessment_ai_editor_upload_csv" class="openassessment_ai_editor_upload_button">
Upload CSV
......@@ -22,21 +20,16 @@
Upload XML
</div>
</div>
<div id="openassessment_ai_selector_title">
<div id="openassessment_ai_menu_title">
<h2>Examples</h2>
</div>
</div>
<ol id="openassessment_ai_example_selector">
<ol id="openassessment_ai_example_menu">
{% for example in assessments.ai.examples %}
<li class="openassessment_ai_example_selector_item" data-example="{{ example.name }}">
<h2 class="openassessment_ai_example_selector_name">{{ example.label }}</h2>
<div class="openassessment_ai_example_remove_button">
<h2>Remove</h2>
</div>
</li>
{% include 'openassessmentblock/edit/ai/oa_edit_ai_example_menu_item.html' with example=example %}
{% endfor %}
</ol>
<div id="openassessment_ai_selector_add_example">
<div id="openassessment_ai_menu_add_example">
Add Example
</div>
</div>
......@@ -44,85 +37,22 @@
<div id="openassessment_ai_example_editor">
<ol id="openassessment_ai_examples">
{% for example in assessments.ai.examples %}
<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>
{% include 'openassessmentblock/edit/ai/oa_edit_ai_example.html' with example=example %}
{% endfor %}
</ol>
</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">
{% with example as 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 %}
{% include 'openassessmentblock/edit/ai/oa_edit_ai_example.html' with example=assessments.ai.template %}
</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_sub_modal_header">
......@@ -145,6 +75,7 @@
</div>
</div>
</div>
-->
</div>
{% endspaceless %}
......@@ -32,7 +32,7 @@
{% 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">
......
This source diff could not be displayed because it is too large. You can view the blob instead.
OpenAssessment.EditAIView = function(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(
OpenAssessment.AIExample, {
containerElement: $("#openassessment_ai_examples", 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",
containerItemClass: "openassessment_ai_example"
}
......@@ -16,11 +16,11 @@ OpenAssessment.EditAIView = function(element) {
this.exampleMenuContainer = new OpenAssessment.Container(
OpenAssessment.AIExampleMenuItem, {
containerElement: $("#openassessment_ai_example_selector", this.element).get(0),
templateElement: $("#openassessment_ai_example_selector_item_template", this.element).get(0),
addButtonElement: $("#openassessment_ai_selector_add_example", this.element).get(0),
containerElement: $("#openassessment_ai_example_menu", this.element).get(0),
templateElement: $("#openassessment_ai_example_menu_item_template", this.element).get(0),
addButtonElement: $("#openassessment_ai_menu_add_example", this.element).get(0),
removeButtonClass: "openassessment_ai_example_remove_button",
containerItemClass: "openassessment_ai_example_selector_item"
containerItemClass: "openassessment_ai_example_menu_item"
}
);
this.exampleMenuContainer.addEventListeners();
......
......@@ -1213,25 +1213,25 @@
}
}
#openassessment_ai_editor_selector_and_editor{
#openassessment_ai_editor_menu_and_editor{
height: calc(100% - 67px);
overflow: hidden;
position: relative;
}
#openassessment_ai_selector_wrapper{
#openassessment_ai_menu_wrapper{
width: 250px;
border-right: 1px solid #838486;
height: 100%;
display: inline-block;
position: absolute;
#openassessment_ai_selector_header{
height: 75px;
#openassessment_ai_menu_header{
height: 77px;
width: 100%;
background-color: white;
#openassessment_ai_selector_title{
#openassessment_ai_menu_title{
text-transform: uppercase;
color: #838486;
font-size: 80%;
......@@ -1244,7 +1244,7 @@
}
}
#openassessment_ai_example_selector{
#openassessment_ai_example_menu{
width:100%;
overflow-y: scroll;
height: Calc(100% - 115px);
......@@ -1252,7 +1252,7 @@
border-bottom: 1px solid $edx-gray-l3;
}
#openassessment_ai_selector_add_example{
#openassessment_ai_menu_add_example{
height: 30px;
padding: 3px;
border: 1px solid;
......@@ -1265,26 +1265,26 @@
font-size: 95%;
}
#openassessment_ai_selector_add_example:before{
#openassessment_ai_menu_add_example:before{
font-family: FontAwesome;
content: "\f067";
display: inline-block;
font-size: 90%;
}
#openassessment_ai_selector_add_example:hover {
#openassessment_ai_menu_add_example:hover {
background-color: #009FE6;
color: white;
}
.openassessment_ai_example_selector_item{
.openassessment_ai_example_menu_item{
padding: 0 5px;
width: 100%;
overflow-y: hidden;
overflow-x: scroll;
border-bottom: 1px solid $edx-gray-l3;
.openassessment_ai_example_selector_name {
.openassessment_ai_example_menu_item_name {
display: inline-block;
text-transform: uppercase;
float: left;
......@@ -1324,7 +1324,7 @@
}
}
.openassessment_ai_example_selector_item:hover{
.openassessment_ai_example_menu_item:hover{
background-color: $edx-gray-l5;
cursor: pointer;
}
......@@ -1408,6 +1408,7 @@
border-radius: 3px;
border: 1px solid #B2B2B2;
text-overflow: ellipsis;
float: right;
}
}
}
......
......@@ -264,46 +264,53 @@ class StudioMixin(object):
student_training_template['criteria'] = criteria_list
if student_training_module:
example_list = []
# 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,
})
example_list = self._construct_scored_rubrics_for_examples(student_training_module['examples'])
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:
ai_examples = copy.deepcopy(example_list)
if example_based_module:
ai_examples = self._construct_scored_rubrics_for_examples(example_based_module['examples'])
count = 1
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
count += 1
assessments['ai'] = {'examples': ai_examples, '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_assessment = self.get_assessment_module('example-based-assessment')
if example_based_assessment:
assessments['ai'] = {'examples': ai_examples, 'template': example_based_template}
assessments['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
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):
"""
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