Commit c958bc54 by Tim Krones Committed by GitHub

Merge pull request #88 from open-craft/mtyaka/studio-help

Clean up studio edit template
parents 7b5bc7d5 f0c1f02a
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
""" Drag and Drop v2 XBlock """ """ Drag and Drop v2 XBlock """
# Imports ########################################################### # Imports ###########################################################
import copy import copy
...@@ -93,7 +94,7 @@ class DragAndDropBlock(XBlock, XBlockWithSettingsMixin, ThemableXBlockMixin): ...@@ -93,7 +94,7 @@ class DragAndDropBlock(XBlock, XBlockWithSettingsMixin, ThemableXBlockMixin):
question_text = String( question_text = String(
display_name=_("Problem text"), display_name=_("Problem text"),
help=_("The description of the problem or instructions shown to the learner"), help=_("The description of the problem or instructions shown to the learner."),
scope=Scope.settings, scope=Scope.settings,
default="", default="",
) )
...@@ -106,22 +107,22 @@ class DragAndDropBlock(XBlock, XBlockWithSettingsMixin, ThemableXBlockMixin): ...@@ -106,22 +107,22 @@ class DragAndDropBlock(XBlock, XBlockWithSettingsMixin, ThemableXBlockMixin):
) )
weight = Float( weight = Float(
display_name=_("Weight"), display_name=_("Maximum score"),
help=_("The maximum score the learner can receive for the problem"), help=_("The maximum score the learner can receive for the problem."),
scope=Scope.settings, scope=Scope.settings,
default=1, default=1,
) )
item_background_color = String( item_background_color = String(
display_name=_("Item background color"), display_name=_("Item background color"),
help=_("The background color of draggable items in the problem."), help=_("The background color of draggable items in the problem (example: 'blue' or '#0000ff')."),
scope=Scope.settings, scope=Scope.settings,
default="", default="",
) )
item_text_color = String( item_text_color = String(
display_name=_("Item text color"), display_name=_("Item text color"),
help=_("Text color to use for draggable items."), help=_("Text color to use for draggable items (example: 'white' or '#ffffff')."),
scope=Scope.settings, scope=Scope.settings,
default="", default="",
) )
...@@ -247,18 +248,17 @@ class DragAndDropBlock(XBlock, XBlockWithSettingsMixin, ThemableXBlockMixin): ...@@ -247,18 +248,17 @@ class DragAndDropBlock(XBlock, XBlockWithSettingsMixin, ThemableXBlockMixin):
""" """
js_templates = loader.load_unicode('/templates/html/js_templates.html') js_templates = loader.load_unicode('/templates/html/js_templates.html')
help_texts = { # Get a 'html_id' string that is unique for this block.
field_name: self.ugettext(field.help) # We append it to HTML element ID attributes to ensure multiple instances of the DnDv2 block
for field_name, field in self.fields.viewitems() if hasattr(field, "help") # on the same page don't share the same ID value.
} # We avoid using ID attributes in preference to classes, but sometimes we still need IDs to
field_values = { # connect 'for' and 'aria-describedby' attributes to the associated elements.
field_name: field.values id_suffix = self.location.html_id() # pylint: disable=no-member
for field_name, field in self.fields.viewitems() if hasattr(field, "values") js_templates = js_templates.replace('{{id_suffix}}', id_suffix)
}
context = { context = {
'js_templates': js_templates, 'js_templates': js_templates,
'help_texts': help_texts, 'id_suffix': id_suffix,
'field_values': field_values, 'fields': self.fields,
'self': self, 'self': self,
'data': urllib.quote(json.dumps(self.data)), 'data': urllib.quote(json.dumps(self.data)),
} }
......
...@@ -61,52 +61,78 @@ ...@@ -61,52 +61,78 @@
position: relative; position: relative;
} }
.xblock--drag-and-drop--editor .tab::after, .xblock--drag-and-drop--editor .tab::after {
.xblock--drag-and-drop--editor .tab-footer::after {
content: ""; content: "";
display: table; display: table;
clear: both; clear: both;
} }
.xblock--drag-and-drop--editor .tab h3, .xblock--drag-and-drop--editor .tab h3 {
.xblock--drag-and-drop--editor .tab .h3 { font-size: 18px;
margin: 20px 0 8px 0;
} }
.xblock--drag-and-drop--editor .tab .h3 { .xblock--drag-and-drop--editor .tab h4,
.xblock--drag-and-drop--editor .tab .h4 {
display: block; display: block;
font: inherit; font-size: 16px;
font-size: 100%; margin: 20px 0 8px 0;
} }
.xblock--drag-and-drop--editor .tab .nested-input { .xblock--drag-and-drop--editor .tab .items-form .item .row:first-of-type .h4 {
display: block; margin-top: 0;
margin-top: 8px;
} }
.xblock--drag-and-drop--editor .tab-header, .xblock--drag-and-drop--editor .tab-header,
.xblock--drag-and-drop--editor .tab-content, .xblock--drag-and-drop--editor .tab-content {
.xblock--drag-and-drop--editor .tab-footer {
width: 96%; width: 96%;
margin: 2%; margin: 2%;
} }
.xblock--drag-and-drop--editor .tab-footer {
height: 25px;
position: relative;
display: block;
float: left;
}
.xblock--drag-and-drop--editor .items { .xblock--drag-and-drop--editor .items {
width: calc(100% - 515px); width: calc(100% - 515px);
margin: 10px 0 0 0; margin: 10px 0 0 0;
} }
.xblock--drag-and-drop--editor .target-image-form input, .xblock--drag-and-drop--editor .target-image-form input {
.xblock--drag-and-drop--editor .target-image-form textarea {
width: 50%; width: 50%;
} }
.xblock--drag-and-drop--editor .target-image-form textarea {
width: 97%;
}
.xblock--drag-and-drop--editor .target-image-form textarea {
display: block;
}
.xblock--drag-and-drop--editor input,
.xblock--drag-and-drop--editor textarea {
box-sizing: border-box;
font-size: 14px;
background: #fff;
box-shadow: none;
padding: 6px 8px;
border: 1px solid #b2b2b2;
color: #4c4c4c;
}
.xblock--drag-and-drop--editor label > span {
display: inline-block;
margin-bottom: 0.25em;
}
.xblock--drag-and-drop--editor label.checkbox-label {
font-size: 14px;
}
/* Main Tab */
.xblock--drag-and-drop--editor .feedback-tab input,
.xblock--drag-and-drop--editor .feedback-tab select {
display: block;
}
.xblock--drag-and-drop--editor .feedback-tab input[type=checkbox] {
display: inline-block;
}
/* Zones Tab */ /* Zones Tab */
.xblock--drag-and-drop--editor .zones-tab .zone-editor { .xblock--drag-and-drop--editor .zones-tab .zone-editor {
...@@ -122,7 +148,6 @@ ...@@ -122,7 +148,6 @@
width: 40%; width: 40%;
max-width: 50%; max-width: 50%;
min-width: 330px; min-width: 330px;
margin-right: 15px;
} }
.xblock--drag-and-drop--editor .zones-tab .tab-content .target { .xblock--drag-and-drop--editor .zones-tab .tab-content .target {
...@@ -137,39 +162,57 @@ ...@@ -137,39 +162,57 @@
max-width: 100%; max-width: 100%;
} }
.xblock--drag-and-drop--editor .zones-form .zone-row {
background-color: #b1d9f1;
padding: 1rem;
margin-bottom: 2rem;
}
.xblock--drag-and-drop--editor .zones-form .zone-row label { .xblock--drag-and-drop--editor .zones-form .zone-row label {
display: block;
}
.xblock--drag-and-drop--editor .zones-form .zone-row label > span {
display: inline-block; display: inline-block;
width: 18%; font-size: 14px;
min-width: 8rem;
} }
.xblock--drag-and-drop--editor .zones-form .zone-row > input { .xblock--drag-and-drop--editor .zones-form .zone-row label > input {
width: 60%; width: 63%;
margin: 0 0 5px; margin: 0 0 5px;
line-height: 2.664rem; /* .title gets line-height from a Studio rule that does not apply to .description; line-height: 2.664rem; /* .title gets line-height from a Studio rule that does not apply to .description;
here we make sure that both input fields get the same value for line-height */ here we make sure that both input fields get the same value for line-height */
} }
.xblock--drag-and-drop--editor .zones-form .zone-row .alignment { .xblock--drag-and-drop--editor .zones-form .zone-row .layout {
margin-bottom: 15px; margin: 2rem 0;
} }
.xblock--drag-and-drop--editor .zones-form .zone-row .layout label {
display: inline-block;
width: 45%;
}
.xblock--drag-and-drop--editor .zones-form .zone-row .layout .zone-size,
.xblock--drag-and-drop--editor .zones-form .zone-row .layout .zone-coord {
width: 35%;
line-height: inherit;
}
.xblock--drag-and-drop--editor .zones-form .zone-row .layout .size, .xblock--drag-and-drop--editor .zones-form .zone-row .alignment {
.xblock--drag-and-drop--editor .zones-form .zone-row .layout .coord { margin-bottom: 15px;
width: 15%;
margin: 0 19px 5px 0;
} }
.xblock--drag-and-drop--editor .feedback-form textarea { .xblock--drag-and-drop--editor .feedback-form textarea {
width: 99%; width: 99%;
height: 128px; height: 128px;
} }
.xblock--drag-and-drop--editor .zones-form .zones-form-help, .xblock--drag-and-drop--editor .form-help {
.xblock--drag-and-drop--editor .target-image-form .target-image-form-help, margin: 0.5rem 0 1rem;
.xblock--drag-and-drop--editor .item-styles-form .item-styles-form-help { font-size: 12px;
margin-top: 5px;
font-size: small;
} }
.xblock--drag-and-drop--editor .item-styles-form, .xblock--drag-and-drop--editor .item-styles-form,
...@@ -178,14 +221,9 @@ ...@@ -178,14 +221,9 @@
} }
.xblock--drag-and-drop--editor .items-form .item { .xblock--drag-and-drop--editor .items-form .item {
background-color: #8fcaec; background-color: #b1d9f1;
padding: 10px 0 1px; padding: 2rem;
margin: 15px 0; margin-bottom: 2rem;
}
.xblock--drag-and-drop--editor .items-form label,
.xblock--drag-and-drop--editor .items-form .h3 {
margin: 0 1%;
} }
.xblock--drag-and-drop--editor .items-form select { .xblock--drag-and-drop--editor .items-form select {
...@@ -199,7 +237,6 @@ ...@@ -199,7 +237,6 @@
.xblock--drag-and-drop--editor .items-form .item-text, .xblock--drag-and-drop--editor .items-form .item-text,
.xblock--drag-and-drop--editor .items-form .item-image-url { .xblock--drag-and-drop--editor .items-form .item-image-url {
width: 50%; width: 50%;
margin: 0 1%;
} }
.xblock--drag-and-drop--editor .items-form .item-width { .xblock--drag-and-drop--editor .items-form .item-width {
...@@ -208,23 +245,30 @@ ...@@ -208,23 +245,30 @@
.xblock--drag-and-drop--editor .items-form textarea { .xblock--drag-and-drop--editor .items-form textarea {
width: 97%; width: 97%;
margin: 0 1%;
} }
.xblock--drag-and-drop--editor .items-form .zone-checkbox-label {
text-align: left;
}
.xblock--drag-and-drop--editor .items-form .row {
margin-bottom: 20px;
}
.xblock--drag-and-drop--editor .items-form .row.advanced { .xblock--drag-and-drop--editor .items-form .row.advanced {
display: none; display: none;
} }
.xblock--drag-and-drop--editor .items-form .row.advanced-link { .xblock--drag-and-drop--editor .items-form .row.advanced-link {
padding-left: 1em; font-size: 12px;
font-size: 80%; margin-top: 2em;
}
.xblock--drag-and-drop--editor .items-form .row.advanced-link button {
background: none;
border: none;
color: #4c4c4c;
}
.xblock--drag-and-drop--editor .items-form .row.advanced-link button:before {
content: '\25B6';
margin-right: 0.5em;
} }
.rtl .xblock--drag-and-drop--editor .items-form .row.advanced-link button:before {
content: '\25C0';
margin-left: 0.5em;
margin-right: 0;
}
.xblock--drag-and-drop-editor .items-form .zone-checkbox-row { .xblock--drag-and-drop-editor .items-form .zone-checkbox-row {
margin-bottom: 0px; margin-bottom: 0px;
} }
...@@ -238,48 +282,33 @@ ...@@ -238,48 +282,33 @@
padding: 5px 10px; padding: 5px 10px;
} }
.xblock--drag-and-drop--editor .btn:hover { .xblock--drag-and-drop--editor .btn:hover,
opacity: 0.8;
cursor: pointer;
}
.xblock--drag-and-drop--editor .btn:focus { .xblock--drag-and-drop--editor .btn:focus {
outline: none; background-color: #296ba5;
opacity: 0.5; box-shadow: 0 1px 1px rgba(0,0,0,0.5);
}
.xblock--drag-and-drop--editor .add-element {
text-decoration: none;
color: #1d5280;
}
.xblock--drag-and-drop--editor .remove-zone {
float: right;
margin-top: 2px;
margin-right: 16px;
} }
.xblock--drag-and-drop--editor .remove-zone,
.xblock--drag-and-drop--editor .remove-item { .xblock--drag-and-drop--editor .remove-item {
float: right; float: right;
display: inline-block; padding: 3px;
margin-right: 16px; border-radius: 12px;
}
.rtl .xblock--drag-and-drop--editor .remove-zone,
.rtl .xblock--drag-and-drop--editor .remove-item {
float: left;
} }
.xblock--drag-and-drop--editor .icon { .xblock--drag-and-drop--editor .icon {
width: 14px; width: 14px;
height: 14px; height: 14px;
border-radius: 7px; border-radius: 7px;
background-color: #1d5280; display: inline-block;
position: relative;
float: left;
margin: 0 5px 0 0;
} }
.xblock--drag-and-drop--editor .add-zone:hover, .xblock--drag-and-drop--editor .remove-zone .icon,
.xblock--drag-and-drop--editor .add-zone:hover .icon, .xblock--drag-and-drop--editor .remove-item .icon {
.xblock--drag-and-drop--editor .remove-zone:hover, display: block;
.xblock--drag-and-drop--editor .remove-zone:hover .icon {
opacity: 0.7;
} }
.xblock--drag-and-drop--editor .tab .field-error { .xblock--drag-and-drop--editor .tab .field-error {
...@@ -342,12 +371,3 @@ ...@@ -342,12 +371,3 @@
-ms-transform: rotate(45deg); -ms-transform: rotate(45deg);
transform: rotate(45deg); transform: rotate(45deg);
} }
.xblock--drag-and-drop--editor .remove-item .icon.remove {
background-color: #fff;
color: #0072a7; /* Override default color from Studio to ensure contrast is large enough */
}
.xblock--drag-and-drop--editor .remove-item .icon.remove:before,
.xblock--drag-and-drop--editor .remove-item .icon.remove:after {
background-color: #1d5280;
}
...@@ -29,10 +29,10 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -29,10 +29,10 @@ function DragAndDropEditBlock(runtime, element, params) {
tpl: { tpl: {
init: function() { init: function() {
_fn.tpl = { _fn.tpl = {
zoneInput: Handlebars.compile($("#zone-input-tpl", element).html()), zoneInput: Handlebars.compile($(".zone-input-tpl", element).html()),
zoneElement: Handlebars.compile($("#zone-element-tpl", element).html()), zoneElement: Handlebars.compile($(".zone-element-tpl", element).html()),
zoneCheckbox: Handlebars.compile($("#zone-checkbox-tpl", element).html()), zoneCheckbox: Handlebars.compile($(".zone-checkbox-tpl", element).html()),
itemInput: Handlebars.compile($("#item-input-tpl", element).html()), itemInput: Handlebars.compile($(".item-input-tpl", element).html()),
}; };
} }
}, },
...@@ -66,7 +66,10 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -66,7 +66,10 @@ function DragAndDropEditBlock(runtime, element, params) {
_fn.build.clickHandlers(); _fn.build.clickHandlers();
// Hide settings that are specific to assessment mode // Hide settings that are specific to assessment mode
_fn.build.$el.feedback.form.find('#problem-mode').trigger('change'); _fn.build.$el.feedback.form.find('.problem-mode').trigger('change');
// Set focus on first input field.
$element.find('input:first').select();
}, },
validate: function() { validate: function() {
...@@ -120,8 +123,8 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -120,8 +123,8 @@ function DragAndDropEditBlock(runtime, element, params) {
} }
// Set the target image and bind its event handler: // Set the target image and bind its event handler:
$('.target-image-form #background-url', element).val(_fn.data.targetImg); $('.target-image-form .background-url', element).val(_fn.data.targetImg);
$('.target-image-form #background-description', element).val(_fn.data.targetImgDescription); $('.target-image-form .background-description', element).val(_fn.data.targetImgDescription);
_fn.build.$el.targetImage.load(_fn.build.form.zone.imageLoaded); _fn.build.$el.targetImage.load(_fn.build.form.zone.imageLoaded);
_fn.build.$el.targetImage.attr('src', params.target_img_expanded_url); _fn.build.$el.targetImage.attr('src', params.target_img_expanded_url);
_fn.build.$el.targetImage.attr('alt', _fn.data.targetImgDescription); _fn.build.$el.targetImage.attr('alt', _fn.data.targetImgDescription);
...@@ -137,6 +140,7 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -137,6 +140,7 @@ function DragAndDropEditBlock(runtime, element, params) {
$fbkTab.addClass('hidden'); $fbkTab.addClass('hidden');
$zoneTab.removeClass('hidden'); $zoneTab.removeClass('hidden');
self.scrollToTop(); self.scrollToTop();
$zoneTab.find('input:first').select();
$(this).one('click', function loadThirdTab(e) { $(this).one('click', function loadThirdTab(e) {
// $zoneTab -> $itemTab // $zoneTab -> $itemTab
...@@ -157,6 +161,7 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -157,6 +161,7 @@ function DragAndDropEditBlock(runtime, element, params) {
$zoneTab.addClass('hidden'); $zoneTab.addClass('hidden');
$itemTab.removeClass('hidden'); $itemTab.removeClass('hidden');
self.scrollToTop(); self.scrollToTop();
$itemTab.find('input:first').select();
$(this).addClass('hidden'); $(this).addClass('hidden');
$('.save-button', element).parent() $('.save-button', element).parent()
...@@ -175,20 +180,19 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -175,20 +180,19 @@ function DragAndDropEditBlock(runtime, element, params) {
}); });
$fbkTab $fbkTab
.on('change', '#problem-mode', _fn.build.form.problem.toggleAssessmentSettings); .on('change', '.problem-mode', _fn.build.form.problem.toggleAssessmentSettings);
$zoneTab $zoneTab
.on('click', '.add-zone', function(e) { .on('click', '.add-zone', function(e) {
e.preventDefault();
_fn.build.form.zone.add(); _fn.build.form.zone.add();
// Set focus to first field of the new zone.
$('.zones-form .zone-row:last input[type=text]:first', element).select();
}) })
.on('click', '.remove-zone', _fn.build.form.zone.remove) .on('click', '.remove-zone', _fn.build.form.zone.remove)
.on('input', '.zone-row input', _fn.build.form.zone.changedInputHandler) .on('input', '.zone-row input', _fn.build.form.zone.changedInputHandler)
.on('change', '.align-select', _fn.build.form.zone.changedInputHandler) .on('change', '.align-select', _fn.build.form.zone.changedInputHandler)
.on('click', '.target-image-form button', function(e) { .on('click', '.target-image-form button', function(e) {
e.preventDefault(); var new_img_url = $.trim($('.target-image-form .background-url', element).val());
var new_img_url = $.trim($('.target-image-form #background-url', element).val());
if (new_img_url) { if (new_img_url) {
// We may need to 'expand' the URL before it will be valid. // We may need to 'expand' the URL before it will be valid.
// e.g. '/static/blah.png' becomes '/asset-v1:course+id/blah.png' // e.g. '/static/blah.png' becomes '/asset-v1:course+id/blah.png'
...@@ -202,9 +206,9 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -202,9 +206,9 @@ function DragAndDropEditBlock(runtime, element, params) {
} }
_fn.data.targetImg = new_img_url; _fn.data.targetImg = new_img_url;
}) })
.on('input', '.target-image-form #background-description', function(e) { .on('input', '.target-image-form .background-description', function(e) {
var new_description = $.trim( var new_description = $.trim(
$('.target-image-form #background-description', element).val() $('.target-image-form .background-description', element).val()
); );
_fn.build.$el.targetImage.attr('alt', new_description); _fn.build.$el.targetImage.attr('alt', new_description);
_fn.data.targetImgDescription = new_description; _fn.data.targetImgDescription = new_description;
...@@ -218,11 +222,12 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -218,11 +222,12 @@ function DragAndDropEditBlock(runtime, element, params) {
$itemTab $itemTab
.on('click', '.add-item', function(e) { .on('click', '.add-item', function(e) {
e.preventDefault();
_fn.build.form.item.add(); _fn.build.form.item.add();
// Set focus to first field of the new item.
$('.items-form .item:last input[type=text]:first', element).select();
}) })
.on('click', '.remove-item', _fn.build.form.item.remove) .on('click', '.remove-item', _fn.build.form.item.remove)
.on('click', '.advanced-link a', _fn.build.form.item.showAdvancedSettings) .on('click', '.advanced-link button', _fn.build.form.item.showAdvancedSettings)
.on('input', '.item-image-url', _fn.build.form.item.imageURLChanged); .on('input', '.item-image-url', _fn.build.form.item.imageURLChanged);
}, },
form: { form: {
...@@ -230,8 +235,8 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -230,8 +235,8 @@ function DragAndDropEditBlock(runtime, element, params) {
toggleAssessmentSettings: function(e) { toggleAssessmentSettings: function(e) {
e.preventDefault(); e.preventDefault();
var $modeSetting = $(e.currentTarget), var $modeSetting = $(e.currentTarget),
$problemForm = $modeSetting.parent('form'), $problemForm = $modeSetting.closest('form'),
$assessmentSettings = $problemForm.find('.setting.assessment'); $assessmentSettings = $problemForm.find('.assessment-setting');
if ($modeSetting.val() === 'assessment') { if ($modeSetting.val() === 'assessment') {
$assessmentSettings.show(); $assessmentSettings.show();
} else { } else {
...@@ -299,7 +304,6 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -299,7 +304,6 @@ function DragAndDropEditBlock(runtime, element, params) {
uid = String($el.data('uid')), // cast to string since UID must be string but .data() converts data-uid="5" to 5 uid = String($el.data('uid')), // cast to string since UID must be string but .data() converts data-uid="5" to 5
array_index; array_index;
e.preventDefault();
$el.detach(); $el.detach();
// Find the uid of the zone in the array and remove it. // Find the uid of the zone in the array and remove it.
...@@ -354,19 +358,19 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -354,19 +358,19 @@ function DragAndDropEditBlock(runtime, element, params) {
var $changedInput = $(ev.currentTarget); var $changedInput = $(ev.currentTarget);
var $row = $changedInput.closest('.zone-row'); var $row = $changedInput.closest('.zone-row');
var record = _fn.build.form.zone.getZoneObjByUID(String($row.data('uid'))); var record = _fn.build.form.zone.getZoneObjByUID(String($row.data('uid')));
if ($changedInput.hasClass('title')) { if ($changedInput.hasClass('zone-title')) {
record.title = $changedInput.val(); record.title = $changedInput.val();
} else if ($changedInput.hasClass('width')) { } else if ($changedInput.hasClass('zone-width')) {
record.width = $changedInput.val(); record.width = $changedInput.val();
} else if ($changedInput.hasClass('description')) { } else if ($changedInput.hasClass('zone-description')) {
record.description = $changedInput.val(); record.description = $changedInput.val();
} else if ($changedInput.hasClass('height')) { } else if ($changedInput.hasClass('zone-height')) {
record.height = $changedInput.val(); record.height = $changedInput.val();
} else if ($changedInput.hasClass('x')) { } else if ($changedInput.hasClass('zone-x')) {
record.x = $changedInput.val(); record.x = $changedInput.val();
} else if ($changedInput.hasClass('y')) { } else if ($changedInput.hasClass('zone-y')) {
record.y = $changedInput.val(); record.y = $changedInput.val();
} else if ($changedInput.hasClass('align-select')) { } else if ($changedInput.hasClass('zone-align-select')) {
record.align = $changedInput.val(); record.align = $changedInput.val();
} }
_fn.build.form.zone.renderZonesPreview(); _fn.build.form.zone.renderZonesPreview();
...@@ -394,8 +398,8 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -394,8 +398,8 @@ function DragAndDropEditBlock(runtime, element, params) {
}, },
feedback: function($form) { feedback: function($form) {
_fn.data.feedback = { _fn.data.feedback = {
start: $form.find('#intro-feedback').val(), start: $form.find('.intro-feedback').val(),
finish: $form.find('#final-feedback').val() finish: $form.find('.final-feedback').val()
}; };
}, },
item: { item: {
...@@ -430,7 +434,7 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -430,7 +434,7 @@ function DragAndDropEditBlock(runtime, element, params) {
} }
ctx.checkboxes = _fn.build.form.createCheckboxes(ctx.zones); ctx.checkboxes = _fn.build.form.createCheckboxes(ctx.zones);
_fn.build.form.item.count++; ctx.index = _fn.build.form.item.count++;
$form.append(tpl(ctx)); $form.append(tpl(ctx));
_fn.build.form.item.enableDelete(); _fn.build.form.item.enableDelete();
...@@ -438,7 +442,6 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -438,7 +442,6 @@ function DragAndDropEditBlock(runtime, element, params) {
remove: function(e) { remove: function(e) {
var $el = $(e.currentTarget).closest('.item'); var $el = $(e.currentTarget).closest('.item');
e.preventDefault();
$el.detach(); $el.detach();
_fn.build.form.item.count--; _fn.build.form.item.count--;
...@@ -462,7 +465,6 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -462,7 +465,6 @@ function DragAndDropEditBlock(runtime, element, params) {
} }
}, },
showAdvancedSettings: function(e) { showAdvancedSettings: function(e) {
e.preventDefault();
var $el = $(e.currentTarget).closest('.item'); var $el = $(e.currentTarget).closest('.item');
$el.find('.row.advanced').show(); $el.find('.row.advanced').show();
$el.find('.row.advanced-link').hide(); $el.find('.row.advanced-link').hide();
...@@ -505,15 +507,15 @@ function DragAndDropEditBlock(runtime, element, params) { ...@@ -505,15 +507,15 @@ function DragAndDropEditBlock(runtime, element, params) {
_fn.data.zones = _fn.build.form.zone.zoneObjects; _fn.data.zones = _fn.build.form.zone.zoneObjects;
var data = { var data = {
'display_name': $element.find('#display-name').val(), 'display_name': $element.find('.display-name').val(),
'mode': $element.find("#problem-mode").val(), 'mode': $element.find(".problem-mode").val(),
'max_attempts': $element.find(".max-attempts").val(), 'max_attempts': $element.find(".max-attempts").val(),
'show_title': $element.find('.show-title').is(':checked'), 'show_title': $element.find('.show-title').is(':checked'),
'weight': $element.find('#weight').val(), 'weight': $element.find('.weight').val(),
'problem_text': $element.find('#problem-text').val(), 'problem_text': $element.find('.problem-text').val(),
'show_problem_header': $element.find('.show-problem-header').is(':checked'), 'show_problem_header': $element.find('.show-problem-header').is(':checked'),
'item_background_color': $element.find('#item-background-color').val(), 'item_background_color': $element.find('.item-background-color').val(),
'item_text_color': $element.find('#item-text-color').val(), 'item_text_color': $element.find('.item-text-color').val(),
'data': _fn.data, 'data': _fn.data,
}; };
......
...@@ -12,51 +12,73 @@ ...@@ -12,51 +12,73 @@
<section class="tab-content"> <section class="tab-content">
<form class="feedback-form"> <form class="feedback-form">
<label class="h3" for="display-name">{% trans "Problem title" %}</label> <label class="h4">
<input id="display-name" value="{{ self.display_name }}" /> <span>{% trans fields.display_name.display_name %}</span>
<label title="{{ help_texts.show_title }}"> <input class="display-name" value="{{ self.display_name }}" />
</label>
<label class="checkbox-label" title="{% trans fields.show_title.help %}">
<input class="show-title" type="checkbox" <input class="show-title" type="checkbox"
{% if self.show_title %}checked="checked"{% endif %}> {% if self.show_title %}checked="checked"{% endif %}>
{% trans "Show title" %} {% trans fields.show_title.display_name %}
<span class="sr">{{ help_texts.show_title }}</span> <span class="sr">{% trans fields.show_title.help %}</span>
</label> </label>
<label class="h3" for="problem-mode" title="{{ help_texts.mode }}">{% trans "Problem mode" %}</label> <label class="h4">
<select id="problem-mode"> <span>{% trans fields.mode.display_name %}</span>
{% for field_value in field_values.mode %} <select class="problem-mode" aria-describedby="problem-mode-description-{{id_suffix}}">
<option value="{{ field_value.value }}" {% if self.mode == field_value.value %}selected{% endif %}> {% for field_value in fields.mode.values %}
{{ field_value.display_name }} <option value="{{ field_value.value }}" {% if self.mode == field_value.value %}selected{% endif %}>
</option> {% trans field_value.display_name %}
{% endfor %} </option>
</select> {% endfor %}
<span class="sr">{{ help_texts.mode }}</span> </select>
</label>
<div id="problem-mode-description-{{id_suffix}}" class="form-help">
{% trans fields.mode.help %}
</div>
<label class="h3 setting assessment" title="{{ help_texts.max_attempts }}"> <label class="h4 assessment-setting">
{% trans "Maximum attempts" %} <span>{% trans fields.max_attempts.display_name %}</span>
<input class="nested-input max-attempts" <input class="max-attempts"
type="number" type="number"
min="1" min="1"
step="1" step="1"
aria-describedby="max-attempts-description-{{id_suffix}}"
{% if self.max_attempts %}value="{{ self.max_attempts }}"{% endif %} /> {% if self.max_attempts %}value="{{ self.max_attempts }}"{% endif %} />
</label> </label>
<div id="max-attempts-description-{{id_suffix}}" class="assessment-setting form-help">
{% trans fields.max_attempts.help %}
</div>
<label class="h3" for="weight">{% trans "Maximum score" %}</label> <label class="h4">
<input id="weight" type="number" step="0.1" value="{{ self.weight|unlocalize }}" /> <span>{% trans fields.weight.display_name %}</span>
<input class="weight" type="number" step="0.1" value="{{ self.weight|unlocalize }}" />
</label>
<label class="h3" for="problem-text">{% trans "Problem text" %}</label> <label class="h4">
<textarea id="problem-text">{{ self.question_text }}</textarea> <span>{% trans fields.question_text.display_name %}</span>
<label title="{{ help_texts.show_question_header }}"> <textarea class="problem-text">{{ self.question_text }}</textarea>
<input class="show-problem-header" type="checkbox" </label>
<label class="checkbox-label">
<input class="show-problem-header"
type="checkbox"
aria-describedby="show-problem-header-description-{{id_suffix}}"
{% if self.show_question_header %}checked="checked"{% endif %}> {% if self.show_question_header %}checked="checked"{% endif %}>
{% trans 'Show "Problem" heading' %} {% trans fields.show_question_header.display_name %}
<span class="sr">{{ help_texts.show_question_header }}</span>
</label> </label>
<div id="show-problem-header-description-{{id_suffix}}" class="form-help">
{% trans fields.show_question_header.help %}
</div>
<label class="h3" for="intro-feedback">{% trans "Introductory Feedback" %}</label> <label class="h4">
<textarea id="intro-feedback">{{ self.data.feedback.start }}</textarea> <span>{% trans "Introductory Feedback" %}</span>
<textarea class="intro-feedback">{{ self.data.feedback.start }}</textarea>
</label>
<label class="h3" for="final-feedback">{% trans "Final Feedback" %}</label> <label class="h4">
<textarea id="final-feedback">{{ self.data.feedback.finish }}</textarea> <span>{% trans "Final Feedback" %}</span>
<textarea class="final-feedback">{{ self.data.feedback.finish }}</textarea>
</label>
</form> </form>
</section> </section>
</div> </div>
...@@ -67,15 +89,24 @@ ...@@ -67,15 +89,24 @@
</header> </header>
<section class="tab-content"> <section class="tab-content">
<form class="target-image-form"> <form class="target-image-form">
<label class="h3" for="background-url">{% trans "Background URL" %}</label> <label class="h4" for="background-url-{{id_suffix}}">
<input id="background-url" <span>{% trans "Background URL" %}</span>
</label>
<input class="background-url"
id="background-url-{{id_suffix}}"
type="text" type="text"
placeholder="{% trans 'For example, http://example.com/background.png or /static/background.png' %}"> aria-describedby="background-url-{{id_suffix}}" />
</label>
<button class="btn">{% trans "Change background" %}</button> <button class="btn">{% trans "Change background" %}</button>
<label class="h3" for="background-description">{% trans "Background description" %}</label> <div id="background-url-description-{{id_suffix}}" class="form-help">
<textarea required id="background-description" {% trans "For example, 'http://example.com/background.png' or '/static/background.png'." %}
aria-describedby="background-description-description"></textarea> </div>
<div id="background-description-description" class="target-image-form-help"> <label class="h4">
<span>{% trans "Background description" %}</span>
<textarea required class="background-description"
aria-describedby="background-description-description-{{id_suffix}}"></textarea>
</label>
<div id="background-description-description-{{id_suffix}}" class="form-help">
{% blocktrans %} {% blocktrans %}
Please provide a description of the image for non-visual users. Please provide a description of the image for non-visual users.
The description should provide sufficient information to allow anyone The description should provide sufficient information to allow anyone
...@@ -86,21 +117,29 @@ ...@@ -86,21 +117,29 @@
</section> </section>
<section class="tab-content"> <section class="tab-content">
<form class="display-labels-form"> <form class="display-labels-form">
<h3>{% trans "Zone labels" %}</h3> <h4>{% trans "Zone labels" %}</h4>
<label for="display-labels">{% trans "Display label names on the image" %}:</label> <label class="checkbox-label">
<input name="display-labels" id="display-labels" type="checkbox" /> <input name="display-labels" class="display-labels" type="checkbox" />
<span>{% trans "Display label names on the image" %}</span>
</label>
</form> </form>
<form class="display-borders-form"> <form class="display-borders-form">
<h3>{% trans "Zone borders" %}</h3> <h4>{% trans "Zone borders" %}</h4>
<label for="display-borders">{% trans "Display zone borders on the image" %}:</label> <label class="checkbox-label">
<input name="display-borders" id="display-borders" type="checkbox" /> <input name="display-borders" class="display-borders" type="checkbox" />
<span>{% trans "Display zone borders on the image" %}</span>
</label>
</form> </form>
</section> </section>
<section class="tab-content"> <section class="tab-content">
<h4>{% trans "Zone definitions" %}</h4>
<div class="zone-editor"> <div class="zone-editor">
<div class="controls"> <div class="controls">
<form class="zones-form"></form> <form class="zones-form"></form>
<a href="#" class="add-zone add-element"><div class="icon add"></div>{% trans "Add a zone" %}</a> <button class="btn add-zone add-element">
<span class="icon add" aria-hidden="true"></span>
{% trans "Add a zone" %}
</button>
</div> </div>
<div class="target"> <div class="target">
<img class="target-img"> <img class="target-img">
...@@ -117,30 +156,34 @@ ...@@ -117,30 +156,34 @@
</header> </header>
<section class="tab-content"> <section class="tab-content">
<form class="item-styles-form"> <form class="item-styles-form">
<label class="h3" for="item-background-color">{% trans "Background color" %}</label> <label class="h4">
<input id="item-background-color" <span>{% trans fields.item_background_color.display_name %}</span>
placeholder="e.g. blue or #0000ff" <input class="item-background-color"
value="{{ self.item_background_color}}" value="{{ self.item_background_color }}"
aria-describedby="item-background-color-description"> aria-describedby="item-background-color-description-{{id_suffix}}">
<div id="item-background-color-description" class="item-styles-form-help"> </label>
{{ help_texts.item_background_color }} <div id="item-background-color-description-{{id_suffix}}" class="form-help">
{% trans fields.item_background_color.help %}
</div> </div>
<label class="h3" for="item-text-color">{% trans "Text color" %}</label> <label class="h4">
<input id="item-text-color" <span>{% trans fields.item_text_color.display_name %}</span>
placeholder="e.g. white or #ffffff" <input class="item-text-color"
value="{{ self.item_text_color}}" value="{{ self.item_text_color}}"
aria-describedby="item-text-color-description"> aria-describedby="item-text-color-description-{{id_suffix}}">
<div id="item-text-color-description" class="item-styles-form-help"> </label>
{{ help_texts.item_text_color }} <div id="item-text-color-description-{{id_suffix}}" class="form-help">
{% trans fields.item_text_color.help %}
</div> </div>
</form> </form>
</section> </section>
<section class="tab-content"> <section class="tab-content">
<h4>{% trans "Item definitions" %}</h4>
<form class="items-form"></form> <form class="items-form"></form>
<button class="btn add-item add-element">
<span class="icon add" aria-hidden="true"></span>
{% trans "Add an item" %}
</button>
</section> </section>
<footer class="tab-footer">
<a href="#" class="add-item add-element"><div class="icon add"></div>{% trans "Add an item" %}</a>
</footer>
</div> </div>
</section> </section>
......
<script id="zone-element-tpl" type="text/html"> <script class="zone-element-tpl" type="text/html">
<div class="zone" data-zone="{{ uid }}" style=" <div class="zone" data-zone="{{ uid }}" style="
top:{{ y_percent }}%; top:{{ y_percent }}%;
left:{{ x_percent }}%; left:{{ x_percent }}%;
...@@ -9,82 +9,89 @@ ...@@ -9,82 +9,89 @@
</div> </div>
</script> </script>
<script id="zone-input-tpl" type="text/html"> <script class="zone-input-tpl" type="text/html">
<div class="zone-row" data-uid="{{zone.uid}}"> <fieldset class="zone-row" data-uid="{{zone.uid}}">
<!-- uid values from old versions of the block may contain spaces and other characters, so we use 'index' as an alternate unique ID here. --> <button type="button" class="btn remove-zone hidden" title="{{i18n 'Remove zone'}}">
<label for="zone-{{index}}-title">{{i18n "Text"}}</label> <span class="icon remove" aria-hidden="true"></span>
<input type="text" </button>
id="zone-{{index}}-title" <label>
class="title" <span>{{i18n "Title"}}</span>
value="{{ zone.title }}"
required />
<a href="#" class="remove-zone hidden">
<div class="icon remove"></div>
</a>
<label for="zone-{{index}}-description">{{i18n "Description"}}</label>
<input type="text"
id="zone-{{index}}-description"
class="description"
value="{{ zone.description }}"
placeholder="{{i18n 'Describe this zone to non-visual users'}}"
required />
<div class="layout">
<label for="zone-{{index}}-width">{{i18n "width"}}</label>
<input type="text" <input type="text"
id="zone-{{index}}-width" class="zone-title"
class="size width" value="{{ zone.title }}"
value="{{ zone.width }}" /> required />
<label for="zone-{{index}}-height">{{i18n "height"}}</label> </label>
<label>
<span>{{i18n "Description"}}</span>
<input type="text" <input type="text"
id="zone-{{index}}-height" class="zone-description"
class="size height" value="{{ zone.description }}"
value="{{ zone.height }}" /> aria-describedby="zone-description-description-{{zone.uid}}-{{id_suffix}}"
required />
<div id="zone-description-description-{{zone.uid}}-{{id_suffix}}" class="form-help">
{{i18n "Describe this zone to non-visual users."}}
</div>
</label>
<div class="layout">
<label>
<span>{{i18n "width"}}</span>
<input type="text"
class="zone-size zone-width"
value="{{ zone.width }}" />
</label>
<label>
<span>{{i18n "height"}}</span>
<input type="text"
class="zone-size zone-height"
value="{{ zone.height }}" />
</label>
<br /> <br />
<label for="zone-{{index}}-x">x</label> <label>
<input type="text" <span>x</span>
id="zone-{{index}}-x" <input type="text"
class="coord x" class="zone-coord zone-x"
value="{{ zone.x }}" /> value="{{ zone.x }}" />
<label for="zone-{{index}}-y">y</label> </label>
<input type="text" <label>
id="zone-{{index}}-y" <span>y</span>
class="coord y" <input type="text"
value="{{ zone.y }}" /> class="zone-coord zone-y"
value="{{ zone.y }}" />
</label>
</div> </div>
<div class="alignment"> <div class="alignment">
<label for="zone-{{index}}-align"> <label>
{{i18n "Alignment"}} <span>{{i18n "Alignment"}}</span>
<select class="zone-align-select"
aria-describedby="zone-align-description-{{zone.uid}}-{{id_suffix}}">
<option value=""
{{#ifeq zone.align ""}}selected{{/ifeq}}>
{{i18n "none"}}
</option>
<option value="left"
{{#ifeq zone.align "left"}}selected{{/ifeq}}>
{{i18n "left"}}
</option>
<option value="center"
{{#ifeq zone.align "center"}}selected{{/ifeq}}>
{{i18n "center"}}
</option>
<option value="right"
{{#ifeq zone.align "right"}}selected{{/ifeq}}>
{{i18n "right"}}
</option>
</select>
</label> </label>
<select id="zone-{{index}}-align" <div id="zone-align-description-{{zone.uid}}-{{id_suffix}}" class="form-help">
class="align-select"
aria-describedby="zone-align-description">
<option value=""
{{#ifeq zone.align ""}}selected{{/ifeq}}>
{{i18n "none"}}
</option>
<option value="left"
{{#ifeq zone.align "left"}}selected{{/ifeq}}>
{{i18n "left"}}
</option>
<option value="center"
{{#ifeq zone.align "center"}}selected{{/ifeq}}>
{{i18n "center"}}
</option>
<option value="right"
{{#ifeq zone.align "right"}}selected{{/ifeq}}>
{{i18n "right"}}
</option>
</select>
<div id="zone-align-description" class="zones-form-help">
{{i18n "Align dropped items to the left, center, or right. Default is no alignment (items stay exactly where the user drops them)."}} {{i18n "Align dropped items to the left, center, or right. Default is no alignment (items stay exactly where the user drops them)."}}
</div> </div>
</div> </div>
</div> </fieldset>
</script> </script>
<script id="zone-checkbox-tpl" type="text/html"> <script class="zone-checkbox-tpl" type="text/html">
<div class="zone-checkbox-row"> <div class="zone-checkbox-row">
<label> <label class="checkbox-label">
<input type="checkbox" <input type="checkbox"
value="{{ zoneUid }}" value="{{ zoneUid }}"
class="zone-checkbox" class="zone-checkbox"
...@@ -94,64 +101,78 @@ ...@@ -94,64 +101,78 @@
</div> </div>
</script> </script>
<script id="item-input-tpl" type="text/html"> <script class="item-input-tpl" type="text/html">
<div class="item"> <fieldset class="item">
<button type="button" class="btn remove-item hidden" title="{{i18n 'Remove item'}}">
<span class="icon remove" aria-hidden="true"></span>
</button>
<div class="row"> <div class="row">
<label class="h3"> <label class="h4">
{{i18n "Text"}} {{i18n "Text"}}
<input type="text" <input type="text"
placeholder="{{i18n 'Use text that is clear and descriptive of the item to be placed'}}" aria-describedby="item-text-description-{{index}}-{{id_suffix}}"
class="item-text" class="item-text"
value="{{ displayName }}" /> value="{{ displayName }}" />
</label> </label>
<a href="#" class="remove-item hidden"> <div id="item-text-description-{{index}}-{{id_suffix}}" class="form-help">
<div class="icon remove"></div> {{i18n "Use text that is clear and descriptive of the item to be placed."}}
</a> </div>
</div> </div>
<div class="row"> <div class="row">
<fieldset> <fieldset>
<legend class="h3"> <legend class="h4">
{{ i18n "Zones" }} {{ i18n "Zones" }}
</legend> </legend>
{{ checkboxes }} {{ checkboxes }}
</fieldset> </fieldset>
</div> </div>
<div class="row"> <div class="row">
<label class="h3"> <label class="h4">
{{i18n "Image URL (alternative to the text)"}} {{i18n "Image URL (alternative to the text)"}}
<input type="text" <input type="text"
placeholder="{{i18n 'For example, http://example.com/image.png or /static/image.png'}}" aria-describedby="item-image-url-description-{{index}}-{{id_suffix}}"
class="item-image-url" class="item-image-url"
value="{{ imageURL }}" /> value="{{ imageURL }}" />
</label> </label>
<div id="item-image-url-description-{{index}}-{{id_suffix}}" class="form-help">
{{i18n "For example, 'http://example.com/image.png' or '/static/image.png'."}}
</div>
</div> </div>
<div class="row"> <div class="row">
<label class="h3" for="item-{{id}}-image-description">{{i18n "Image description (should provide sufficient information to place the item even if the image did not load)"}}</label> <label class="h4">
<textarea id="item-{{id}}-image-description" {{#if imageURL}}required{{/if}} <span>{{i18n "Image description (should provide sufficient information to place the item even if the image did not load)"}}</span>
class="item-image-description">{{ imageDescription }}</textarea> <textarea {{#if imageURL}}required{{/if}} class="item-image-description">{{ imageDescription }}</textarea>
</label>
</div> </div>
<div class="row"> <div class="row">
<label class="h3" for="item-{{id}}-success-feedback">{{i18n "Success Feedback"}}</label> <label class="h4">
<textarea id="item-{{id}}-success-feedback" <span>{{i18n "Success Feedback"}}</span>
class="success-feedback">{{ feedback.correct }}</textarea> <textarea class="success-feedback">{{ feedback.correct }}</textarea>
</label>
</div> </div>
<div class="row"> <div class="row">
<label class="h3" for="item-{{id}}-error-feedback">{{i18n "Error Feedback"}}</label> <label class="h4">
<textarea id="item-{{id}}-error-feedback" <span>{{i18n "Error Feedback"}}</span>
class="error-feedback">{{ feedback.incorrect }}</textarea> <textarea class="error-feedback">{{ feedback.incorrect }}</textarea>
</label>
</div> </div>
<div class="row advanced-link"> <div class="row advanced-link">
<a href="#">{{i18n "Show advanced settings" }}</a> <button type="button">{{i18n "Show advanced settings" }}</button>
</div> </div>
<div class="row advanced"> <div class="row advanced">
<label> <label class="h4">
{{i18n "Preferred width as a percentage of the background image width (or blank for automatic width):"}} <span>{{i18n "Preferred width"}}</span>
<input type="number" <input type="number"
class="item-width" class="item-width"
value="{{ singleDecimalFloat widthPercent }}" value="{{ singleDecimalFloat widthPercent }}"
aria-describedby="item-width-description-{{index}}-{{id_suffix}}"
step="0.1" step="0.1"
min="1" min="1"
max="99" />% max="99" />%
</label>
<div id="item-width-description-{{index}}-{{id_suffix}}" class="form-help">
{{i18n "Specify preferred width as percentage of the background image width. Leave blank for automatic width."}}
</div>
</div> </div>
</div> </fieldset>
</script> </script>
...@@ -90,6 +90,7 @@ msgid "I don't belong anywhere" ...@@ -90,6 +90,7 @@ msgid "I don't belong anywhere"
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
#: templates/html/js_templates.html
msgid "Title" msgid "Title"
msgstr "" msgstr ""
...@@ -121,7 +122,6 @@ msgid "Assessment" ...@@ -121,7 +122,6 @@ msgid "Assessment"
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
#: templates/html/drag_and_drop_edit.html
msgid "Maximum attempts" msgid "Maximum attempts"
msgstr "" msgstr ""
...@@ -132,7 +132,6 @@ msgid "" ...@@ -132,7 +132,6 @@ msgid ""
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
#: templates/html/drag_and_drop_edit.html
msgid "Show title" msgid "Show title"
msgstr "" msgstr ""
...@@ -141,16 +140,14 @@ msgid "Display the title to the learner?" ...@@ -141,16 +140,14 @@ msgid "Display the title to the learner?"
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
#: templates/html/drag_and_drop_edit.html
msgid "Problem text" msgid "Problem text"
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "The description of the problem or instructions shown to the learner" msgid "The description of the problem or instructions shown to the learner."
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
#: templates/html/drag_and_drop_edit.html
msgid "Show \"Problem\" heading" msgid "Show \"Problem\" heading"
msgstr "" msgstr ""
...@@ -159,11 +156,11 @@ msgid "Display the heading \"Problem\" above the problem text?" ...@@ -159,11 +156,11 @@ msgid "Display the heading \"Problem\" above the problem text?"
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "Weight" msgid "Maximum score"
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "The maximum score the learner can receive for the problem" msgid "The maximum score the learner can receive for the problem."
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
...@@ -171,7 +168,7 @@ msgid "Item background color" ...@@ -171,7 +168,7 @@ msgid "Item background color"
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "The background color of draggable items in the problem." msgid "The background color of draggable items in the problem (example: 'blue' or '#0000ff')."
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
...@@ -179,7 +176,7 @@ msgid "Item text color" ...@@ -179,7 +176,7 @@ msgid "Item text color"
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "Text color to use for draggable items." msgid "Text color to use for draggable items (example: 'white' or '#ffffff')."
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
...@@ -200,9 +197,33 @@ msgid "" ...@@ -200,9 +197,33 @@ msgid ""
msgstr "" msgstr ""
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "Number of attempts learner used"
msgstr ""
#: drag_and_drop_v2.py
msgid "Indicates whether a learner has completed the problem at least once" msgid "Indicates whether a learner has completed the problem at least once"
msgstr "" msgstr ""
#: drag_and_drop_v2.py
msgid "Keeps maximum achieved score by student"
msgstr ""
#: drag_and_drop_v2.py
msgid "do_attempt handler should only be called for assessment mode"
msgstr ""
#: drag_and_drop_v2.py
msgid "Max number of attempts reached"
msgstr ""
#: drag_and_drop_v2.py
msgid "Unknown DnDv2 mode {mode} - course is misconfigured"
msgstr ""
#: templates/html/js_templates.html
msgid "Remove zone"
msgstr ""
#: templates/html/js_templates.html #: templates/html/js_templates.html
msgid "Text" msgid "Text"
msgstr "" msgstr ""
...@@ -212,7 +233,7 @@ msgid "Description" ...@@ -212,7 +233,7 @@ msgid "Description"
msgstr "" msgstr ""
#: templates/html/js_templates.html #: templates/html/js_templates.html
msgid "Describe this zone to non-visual users" msgid "Describe this zone to non-visual users."
msgstr "" msgstr ""
#: templates/html/js_templates.html #: templates/html/js_templates.html
...@@ -250,6 +271,10 @@ msgid "" ...@@ -250,6 +271,10 @@ msgid ""
msgstr "" msgstr ""
#: templates/html/js_templates.html #: templates/html/js_templates.html
msgid "Remove item"
msgstr ""
#: templates/html/js_templates.html
msgid "Zone" msgid "Zone"
msgstr "" msgstr ""
...@@ -258,7 +283,7 @@ msgid "Image URL (alternative to the text)" ...@@ -258,7 +283,7 @@ msgid "Image URL (alternative to the text)"
msgstr "" msgstr ""
#: templates/html/js_templates.html #: templates/html/js_templates.html
msgid "For example, http://example.com/image.png or /static/image.png" msgid "For example, 'http://example.com/image.png' or '/static/image.png'."
msgstr "" msgstr ""
#: templates/html/js_templates.html #: templates/html/js_templates.html
...@@ -280,13 +305,17 @@ msgid "Show advanced settings" ...@@ -280,13 +305,17 @@ msgid "Show advanced settings"
msgstr "" msgstr ""
#: templates/html/js_templates.html #: templates/html/js_templates.html
msgid "Preferred width"
msgstr ""
#: templates/html/js_templates.html
msgid "" msgid ""
"Preferred width as a percentage of the background image width (or blank for " "Specify preferred width as percentage of the background image width. "
"automatic width):" "Leave blank for automatic width."
msgstr "" msgstr ""
#: templates/html/js_templates.html #: templates/html/js_templates.html
msgid "Use text that is clear and descriptive of the item to be placed" msgid "Use text that is clear and descriptive of the item to be placed."
msgstr "" msgstr ""
#: templates/html/drag_and_drop.html #: templates/html/drag_and_drop.html
...@@ -300,18 +329,6 @@ msgid "" ...@@ -300,18 +329,6 @@ msgid ""
msgstr "" msgstr ""
#: templates/html/drag_and_drop_edit.html #: templates/html/drag_and_drop_edit.html
msgid "Problem title"
msgstr ""
#: templates/html/drag_and_drop_edit.html
msgid "Problem mode"
msgstr ""
#: templates/html/drag_and_drop_edit.html
msgid "Maximum score"
msgstr ""
#: templates/html/drag_and_drop_edit.html
msgid "Introductory Feedback" msgid "Introductory Feedback"
msgstr "" msgstr ""
...@@ -319,8 +336,8 @@ msgstr "" ...@@ -319,8 +336,8 @@ msgstr ""
msgid "Final Feedback" msgid "Final Feedback"
msgstr "" msgstr ""
#: templates/html/js_templates.html
#: templates/html/drag_and_drop_edit.html #: templates/html/drag_and_drop_edit.html
#: templates/html/js_templates.html
msgid "Zones" msgid "Zones"
msgstr "" msgstr ""
...@@ -330,7 +347,7 @@ msgstr "" ...@@ -330,7 +347,7 @@ msgstr ""
#: templates/html/drag_and_drop_edit.html #: templates/html/drag_and_drop_edit.html
msgid "" msgid ""
"For example, http://example.com/background.png or /static/background.png" "For example, 'http://example.com/background.png' or '/static/background.png'."
msgstr "" msgstr ""
#: templates/html/drag_and_drop_edit.html #: templates/html/drag_and_drop_edit.html
...@@ -354,6 +371,10 @@ msgid "" ...@@ -354,6 +371,10 @@ msgid ""
msgstr "" msgstr ""
#: templates/html/drag_and_drop_edit.html #: templates/html/drag_and_drop_edit.html
msgid "Zone definitions"
msgstr ""
#: templates/html/drag_and_drop_edit.html
msgid "Zone labels" msgid "Zone labels"
msgstr "" msgstr ""
...@@ -378,14 +399,6 @@ msgid "Items" ...@@ -378,14 +399,6 @@ msgid "Items"
msgstr "" msgstr ""
#: templates/html/drag_and_drop_edit.html #: templates/html/drag_and_drop_edit.html
msgid "Background color"
msgstr ""
#: templates/html/drag_and_drop_edit.html
msgid "Text color"
msgstr ""
#: templates/html/drag_and_drop_edit.html
msgid "Add an item" msgid "Add an item"
msgstr "" msgstr ""
...@@ -421,6 +434,7 @@ msgstr "" ...@@ -421,6 +434,7 @@ msgstr ""
msgid "Reset" msgid "Reset"
msgstr "" msgstr ""
#: public/js/drag_and_drop.js
msgid "Submit" msgid "Submit"
msgstr "" msgstr ""
...@@ -470,6 +484,10 @@ msgstr "" ...@@ -470,6 +484,10 @@ msgstr ""
msgid "An error occurred. Unable to load drag and drop problem." msgid "An error occurred. Unable to load drag and drop problem."
msgstr "" msgstr ""
#: public/js/drag_and_drop.js
msgid "You have used {used} of {total} attempts."
msgstr ""
#: public/js/drag_and_drop_edit.js #: public/js/drag_and_drop_edit.js
msgid "There was an error with your form." msgid "There was an error with your form."
msgstr "" msgstr ""
......
...@@ -113,6 +113,7 @@ msgid "Goes anywhere" ...@@ -113,6 +113,7 @@ msgid "Goes anywhere"
msgstr "Göés änýwhéré Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#" msgstr "Göés änýwhéré Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
#: templates/html/js_templates.html
msgid "Title" msgid "Title"
msgstr "Tïtlé Ⱡ'σяєм ιρѕ#" msgstr "Tïtlé Ⱡ'σяєм ιρѕ#"
...@@ -151,7 +152,6 @@ msgid "Assessment" ...@@ -151,7 +152,6 @@ msgid "Assessment"
msgstr "Àsséssmént Ⱡ'σяєм ιρѕυм ∂σłσ#" msgstr "Àsséssmént Ⱡ'σяєм ιρѕυм ∂σłσ#"
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
#: templates/html/drag_and_drop_edit.html
msgid "Maximum attempts" msgid "Maximum attempts"
msgstr "Mäxïmüm ättémpts Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αм#" msgstr "Mäxïmüm ättémpts Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αм#"
...@@ -164,7 +164,6 @@ msgstr "" ...@@ -164,7 +164,6 @@ msgstr ""
"Ìf thé välüé ïs nöt sét, ïnfïnïté ättémpts äré ällöwéd. Ⱡ'σяєм #" "Ìf thé välüé ïs nöt sét, ïnfïnïté ättémpts äré ällöwéd. Ⱡ'σяєм #"
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
#: templates/html/drag_and_drop_edit.html
msgid "Show title" msgid "Show title"
msgstr "Shöw tïtlé Ⱡ'σяєм ιρѕυм ∂σłσ#" msgstr "Shöw tïtlé Ⱡ'σяєм ιρѕυм ∂σłσ#"
...@@ -174,14 +173,13 @@ msgstr "" ...@@ -174,14 +173,13 @@ msgstr ""
"Dïspläý thé tïtlé tö thé léärnér? Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тє#" "Dïspläý thé tïtlé tö thé léärnér? Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тє#"
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
#: templates/html/drag_and_drop_edit.html
msgid "Problem text" msgid "Problem text"
msgstr "Prößlém téxt Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#" msgstr "Prößlém téxt Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "The description of the problem or instructions shown to the learner" msgid "The description of the problem or instructions shown to the learner."
msgstr "" msgstr ""
"Thé désçrïptïön öf thé prößlém ör ïnstrüçtïöns shöwn tö thé léärnér Ⱡ'σяєм " "Thé désçrïptïön öf thé prößlém ör ïnstrüçtïöns shöwn tö thé léärnér. Ⱡ'σяєм "
"ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя #" "ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя #"
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
...@@ -195,11 +193,11 @@ msgstr "" ...@@ -195,11 +193,11 @@ msgstr ""
"ѕιт αмєт, ¢σηѕє¢тєтυя α#" "ѕιт αмєт, ¢σηѕє¢тєтυя α#"
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "Weight" msgid "Maximum score"
msgstr "Wéïght Ⱡ'σяєм ιρѕυ#" msgstr Mäxïmüm sçöré Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "The maximum score the learner can receive for the problem" msgid "The maximum score the learner can receive for the problem."
msgstr "" msgstr ""
"Thé mäxïmüm sçöré thé léärnér çän réçéïvé för thé prößlém Ⱡ'σяєм ιρѕυм ∂σłσя" "Thé mäxïmüm sçöré thé léärnér çän réçéïvé för thé prößlém Ⱡ'σяєм ιρѕυм ∂σłσя"
" ѕιт αмєт, ¢σηѕє¢тєтυя α#" " ѕιт αмєт, ¢σηѕє¢тєтυя α#"
...@@ -209,20 +207,20 @@ msgid "Item background color" ...@@ -209,20 +207,20 @@ msgid "Item background color"
msgstr "Ìtém ßäçkgröünd çölör Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, #" msgstr "Ìtém ßäçkgröünd çölör Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, #"
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "The background color of draggable items in the problem." msgid "The background color of draggable items in the problem (example: 'blue' or '#0000ff')."
msgstr "" msgstr ""
"Thé ßäçkgröünd çölör öf dräggäßlé ïtéms ïn thé prößlém. Ⱡ'σяєм ιρѕυм ∂σłσя " "Thé ßäçkgröünd çölör öf dräggäßlé ïtéms ïn thé prößlém (éxämplé: 'ßlüé' ör '#0000ff'). "
"ѕιт αмєт, ¢σηѕє¢тєтυя α#" "Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢#"
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "Item text color" msgid "Item text color"
msgstr "Ìtém téxt çölör Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт α#" msgstr "Ìtém téxt çölör Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт α#"
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "Text color to use for draggable items." msgid "Text color to use for draggable items (example: 'white' or '#ffffff')."
msgstr "" msgstr ""
"Téxt çölör tö üsé för dräggäßlé ïtéms. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, " "Téxt çölör tö üsé för dräggäßlé ïtéms (éxämplé: 'whïté' ör '#ffffff'). "
"¢σηѕє¢тєтυя#" "Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя #"
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "Problem data" msgid "Problem data"
...@@ -252,11 +250,35 @@ msgstr "" ...@@ -252,11 +250,35 @@ msgstr ""
"thé tärgét ïmägé. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢ση#" "thé tärgét ïmägé. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢ση#"
#: drag_and_drop_v2.py #: drag_and_drop_v2.py
msgid "Number of attempts learner used"
msgstr "Nümßér öf ättémpts léärnér üséd Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢т#"
#: drag_and_drop_v2.py
msgid "Indicates whether a learner has completed the problem at least once" msgid "Indicates whether a learner has completed the problem at least once"
msgstr "" msgstr ""
"Ìndïçätés whéthér ä léärnér häs çömplétéd thé prößlém ät léäst önçé Ⱡ'σяєм " "Ìndïçätés whéthér ä léärnér häs çömplétéd thé prößlém ät léäst önçé Ⱡ'σяєм "
"ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя #" "ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя #"
#: drag_and_drop_v2.py
msgid "Keeps maximum achieved score by student"
msgstr "Kééps mäxïmüm äçhïévéd sçöré ßý stüdént Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя#"
#: drag_and_drop_v2.py
msgid "do_attempt handler should only be called for assessment mode"
msgstr "dö_ättémpt händlér shöüld önlý ßé çälléd för ässéssmént mödé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя α#"
#: drag_and_drop_v2.py
msgid "Max number of attempts reached"
msgstr "Mäx nümßér öf ättémpts réäçhéd Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢т#"
#: drag_and_drop_v2.py
msgid "Unknown DnDv2 mode {mode} - course is misconfigured"
msgstr "Ûnknöwn DnDv2 mödé {mode} - çöürsé ïs mïsçönfïgüréd Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя α#"
#: templates/html/js_templates.html
msgid "Remove zone"
msgstr "Rémövé zöné Ⱡ'σяєм ιρѕυм ∂σłσя #"
#: templates/html/js_templates.html #: templates/html/js_templates.html
msgid "Text" msgid "Text"
msgstr "Téxt Ⱡ'σяєм ι#" msgstr "Téxt Ⱡ'σяєм ι#"
...@@ -266,9 +288,9 @@ msgid "Description" ...@@ -266,9 +288,9 @@ msgid "Description"
msgstr "Désçrïptïön Ⱡ'σяєм ιρѕυм ∂σłσя #" msgstr "Désçrïptïön Ⱡ'σяєм ιρѕυм ∂σłσя #"
#: templates/html/js_templates.html #: templates/html/js_templates.html
msgid "Describe this zone to non-visual users" msgid "Describe this zone to non-visual users."
msgstr "" msgstr ""
"Désçrïßé thïs zöné tö nön-vïsüäl üsérs Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, " "Désçrïßé thïs zöné tö nön-vïsüäl üsérs. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
"¢σηѕє¢тєтυя#" "¢σηѕє¢тєтυя#"
#: templates/html/js_templates.html #: templates/html/js_templates.html
...@@ -308,6 +330,10 @@ msgstr "" ...@@ -308,6 +330,10 @@ msgstr ""
"(ïtéms stäý éxäçtlý whéré thé üsér dröps thém). Ⱡ'σяєм ιρ#" "(ïtéms stäý éxäçtlý whéré thé üsér dröps thém). Ⱡ'σяєм ιρ#"
#: templates/html/js_templates.html #: templates/html/js_templates.html
msgid "Remove item"
msgstr "Rémövé ïtém Ⱡ'σяєм ιρѕυм ∂σłσя #"
#: templates/html/js_templates.html
msgid "Zone" msgid "Zone"
msgstr "Zöné Ⱡ'σяєм ι#" msgstr "Zöné Ⱡ'σяєм ι#"
...@@ -317,7 +343,7 @@ msgstr "" ...@@ -317,7 +343,7 @@ msgstr ""
"Ìmägé ÛRL (ältérnätïvé tö thé téxt) Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєт#" "Ìmägé ÛRL (ältérnätïvé tö thé téxt) Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєт#"
#: templates/html/js_templates.html #: templates/html/js_templates.html
msgid "For example, http://example.com/image.png or /static/image.png" msgid "For example, 'http://example.com/image.png' or '/static/image.png'."
msgstr "" msgstr ""
"För éxämplé, http://éxämplé.çöm/ïmägé.png ör /stätïç/ïmägé.png Ⱡ'σяєм ιρѕυм " "För éxämplé, http://éxämplé.çöm/ïmägé.png ör /stätïç/ïmägé.png Ⱡ'σяєм ιρѕυм "
"∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя α#" "∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя α#"
...@@ -343,12 +369,16 @@ msgid "Show advanced settings" ...@@ -343,12 +369,16 @@ msgid "Show advanced settings"
msgstr "Shöw ädvänçéd séttïngs Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢#" msgstr "Shöw ädvänçéd séttïngs Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢#"
#: templates/html/js_templates.html #: templates/html/js_templates.html
msgid "Preferred width"
msgstr "Préférréd wïdth Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт α#"
#: templates/html/js_templates.html
msgid "" msgid ""
"Preferred width as a percentage of the background image width (or blank for " "Specify preferred width as percentage of the background image width. "
"automatic width):" "Leave blank for automatic width."
msgstr "" msgstr ""
"Préférréd wïdth äs ä pérçéntägé öf thé ßäçkgröünd ïmägé wïdth (ör ßlänk för " "Spéçïfý préférréd wïdth äs pérçéntägé öf thé ßäçkgröünd ïmägé wïdth. "
"äütömätïç wïdth): Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σ#" "Léävé ßlänk för äütömätïç wïdth. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмє#"
#: templates/html/js_templates.html #: templates/html/js_templates.html
#: templates/html/drag_and_drop_edit.html #: templates/html/drag_and_drop_edit.html
...@@ -356,9 +386,9 @@ msgid "Zones" ...@@ -356,9 +386,9 @@ msgid "Zones"
msgstr "Zönés Ⱡ'σяєм ιρѕ#" msgstr "Zönés Ⱡ'σяєм ιρѕ#"
#: templates/html/js_templates.html #: templates/html/js_templates.html
msgid "Use text that is clear and descriptive of the item to be placed" msgid "Use text that is clear and descriptive of the item to be placed."
msgstr "" msgstr ""
"Ûsé téxt thät ïs çléär änd désçrïptïvé öf thé ïtém tö ßé pläçéd Ⱡ'σяєм " "Ûsé téxt thät ïs çléär änd désçrïptïvé öf thé ïtém tö ßé pläçéd. Ⱡ'σяєм "
"ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя α#" "ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя α#"
#: templates/html/drag_and_drop.html #: templates/html/drag_and_drop.html
...@@ -374,18 +404,6 @@ msgstr "" ...@@ -374,18 +404,6 @@ msgstr ""
"thé prößlém änd çréäté ä néw öné. Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#" "thé prößlém änd çréäté ä néw öné. Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
#: templates/html/drag_and_drop_edit.html #: templates/html/drag_and_drop_edit.html
msgid "Problem title"
msgstr "Prößlém tïtlé Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
#: templates/html/drag_and_drop_edit.html
msgid "Problem mode"
msgstr "Prößlém mödé Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
#: templates/html/drag_and_drop_edit.html
msgid "Maximum score"
msgstr "Mäxïmüm sçöré Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
#: templates/html/drag_and_drop_edit.html
msgid "Introductory Feedback" msgid "Introductory Feedback"
msgstr "Ìntrödüçtörý Féédßäçk Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, #" msgstr "Ìntrödüçtörý Féédßäçk Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, #"
...@@ -399,9 +417,9 @@ msgstr "Bäçkgröünd ÛRL Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#" ...@@ -399,9 +417,9 @@ msgstr "Bäçkgröünd ÛRL Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#"
#: templates/html/drag_and_drop_edit.html #: templates/html/drag_and_drop_edit.html
msgid "" msgid ""
"For example, http://example.com/background.png or /static/background.png" "For example, 'http://example.com/background.png' or '/static/background.png'."
msgstr "" msgstr ""
"För éxämplé, http://éxämplé.çöm/ßäçkgröünd.png ör /stätïç/ßäçkgröünd.png " "För éxämplé, 'http://éxämplé.çöm/ßäçkgröünd.png' ör '/stätïç/ßäçkgröünd.png'. "
"Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя#" "Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя#"
#: templates/html/drag_and_drop_edit.html #: templates/html/drag_and_drop_edit.html
...@@ -427,6 +445,10 @@ msgstr "" ...@@ -427,6 +445,10 @@ msgstr ""
" Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя α∂ιριѕι¢ιηg єłιт, ѕє∂ ∂σ єιυѕмσ∂ тємρσя ιη¢ι∂ι∂υηт υт łαвσяє єт ∂σłσяє мαgηα αłιqυα. υт єηιм α∂ мιηιм νєηιαм, qυιѕ ησѕтяυ∂ єχєя¢ιтαтιση υłłαм¢#" " Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя α∂ιριѕι¢ιηg єłιт, ѕє∂ ∂σ єιυѕмσ∂ тємρσя ιη¢ι∂ι∂υηт υт łαвσяє єт ∂σłσяє мαgηα αłιqυα. υт єηιм α∂ мιηιм νєηιαм, qυιѕ ησѕтяυ∂ єχєя¢ιтαтιση υłłαм¢#"
#: templates/html/drag_and_drop_edit.html #: templates/html/drag_and_drop_edit.html
msgid "Zone definitions"
msgstr "Zöné défïnïtïöns Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αм#"
#: templates/html/drag_and_drop_edit.html
msgid "Zone labels" msgid "Zone labels"
msgstr "Zöné läßéls Ⱡ'σяєм ιρѕυм ∂σłσя #" msgstr "Zöné läßéls Ⱡ'σяєм ιρѕυм ∂σłσя #"
...@@ -453,14 +475,6 @@ msgid "Items" ...@@ -453,14 +475,6 @@ msgid "Items"
msgstr "Ìtéms Ⱡ'σяєм ιρѕ#" msgstr "Ìtéms Ⱡ'σяєм ιρѕ#"
#: templates/html/drag_and_drop_edit.html #: templates/html/drag_and_drop_edit.html
msgid "Background color"
msgstr "Bäçkgröünd çölör Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αм#"
#: templates/html/drag_and_drop_edit.html
msgid "Text color"
msgstr "Téxt çölör Ⱡ'σяєм ιρѕυм ∂σłσ#"
#: templates/html/drag_and_drop_edit.html
msgid "Add an item" msgid "Add an item"
msgstr "Àdd än ïtém Ⱡ'σяєм ιρѕυм ∂σłσя #" msgstr "Àdd än ïtém Ⱡ'σяєм ιρѕυм ∂σłσя #"
...@@ -496,6 +510,7 @@ msgstr "Çörréçtlý pläçéd ïn: {zone_title} Ⱡ'σяєм ιρѕυм ∂σ ...@@ -496,6 +510,7 @@ msgstr "Çörréçtlý pläçéd ïn: {zone_title} Ⱡ'σяєм ιρѕυм ∂σ
msgid "Reset" msgid "Reset"
msgstr "Rését Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#" msgstr "Rését Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
#: public/js/drag_and_drop.js
msgid "Submit" msgid "Submit"
msgstr "Süßmït Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#" msgstr "Süßmït Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
...@@ -557,6 +572,10 @@ msgstr "" ...@@ -557,6 +572,10 @@ msgstr ""
"Àn érrör öççürréd. Ûnäßlé tö löäd dräg änd dröp prößlém. Ⱡ'σяєм ιρѕυм ∂σłσя " "Àn érrör öççürréd. Ûnäßlé tö löäd dräg änd dröp prößlém. Ⱡ'σяєм ιρѕυм ∂σłσя "
"ѕιт αмєт, ¢σηѕє¢тєтυя α#" "ѕιт αмєт, ¢σηѕє¢тєтυя α#"
#: public/js/drag_and_drop.js
msgid "You have used {used} of {total} attempts."
msgstr "Ýöü hävé üséd {used} öf {total} ättémpts. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєт#"
#: public/js/drag_and_drop_edit.js #: public/js/drag_and_drop_edit.js
msgid "There was an error with your form." msgid "There was an error with your form."
msgstr "" msgstr ""
...@@ -600,4 +619,4 @@ msgstr[1] "" ...@@ -600,4 +619,4 @@ msgstr[1] ""
msgid "Dïd nöt pläçé {missing_count} réqüïréd ïtém. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢#" msgid "Dïd nöt pläçé {missing_count} réqüïréd ïtém. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢#"
msgid_plural "Dïd nöt pläçé {missing_count} réqüïréd ïtéms. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢т#" msgid_plural "Dïd nöt pläçé {missing_count} réqüïréd ïtéms. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢т#"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
\ No newline at end of file
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