Commit 29fe9a53 authored by beyeranq's avatar beyeranq
Browse files

backup

parent d8966ade
......@@ -80,4 +80,4 @@
"cordova-plugin-splashscreen": {}
}
}
}
}
\ No newline at end of file
<ion-header>
<ion-toolbar>
<div class="toolbar-left">
<ion-back-button icon="arrow-round-back" defaultHref="home"></ion-back-button>
<ion-title>{{ 'START_TEST' | translate }}</ion-title>
<ion-title>{{ 'TEST' | translate }}</ion-title>
</div>
<div class="toolbar-right">
<ion-spinner *ngIf="HelperService.isLoading"></ion-spinner>
......@@ -14,146 +13,228 @@
</ion-header>
<ion-content padding>
<ion-grid>
<ion-grid style="text-align:left;">
<ion-row>
<ion-col>{{ 'TEST_MODULE_GO_TO_EXERCISE' | translate}}
<!--&lt;!&ndash;suppress HtmlUnknownAttribute &ndash;&gt;-->
<ion-select placeholder="{{ 'TEST_MODULE_EXERCISE_NUMBER' | translate }}" (ionChange)="goToExercise()"
[(ngModel)]="newExerciseTarget" name="newExerciseTarget">
<ion-select-option *ngFor="let number of Array.from(Array(exercises.length).keys())" value="{{number}}">
{{number + 1}}
</ion-select-option>
</ion-select>
<ion-col>
{{ 'TEST_MODULE_GO_TO_EXERCISE' | translate}}
</ion-col>
<ion-col id="exerciseNav">
<a *ngFor="let number of Array.from(Array(exercises.length).keys())" (click)="showNextExercise(number)">
<span>{{number + 1}}</span>&nbsp;
</a>
</ion-col>
</ion-row>
<ion-row>
<!-- step 1: intro-->
<div *ngIf="currentExercise == 'nonH5P_1'">
<ion-row>
<ion-col>
<h4>Einführung in die Übungseinheit</h4>
Der folgende Test bietet die Möglichkeit, das eigene Wortschatzwissen an einem Beispiel zu testen
und zu verbessern. Er dauert insgesamt 35 min und besteht aus mehreren Abschnitten:
</ion-col>
</ion-row>
<ion-row>
<ion-col>Einstiegstest:</ion-col>
<ion-col>5 min</ion-col>
</ion-row>
<ion-row>
<ion-col>Zweisprachiger Text und <br>
Fragen zum Textverständnis:
</ion-col>
<ion-col>10 min</ion-col>
</ion-row>
<ion-row>
<ion-col>Üben des Wortschatzes:</ion-col>
<ion-col>15 min</ion-col>
</ion-row>
<ion-row>
<ion-col>Wiederholungstest:</ion-col>
<ion-col>5 min</ion-col>
</ion-row>
<ion-row>
<ion-col>
<br>
Nach der Einheit gibt es eine Auswertung zu den einzelnen Ergebnissen.<br>
Es werden keine persönlichen Daten erhoben und die Ergebnisse können nicht bis zu einzelnen
Teilnehmern
zurückverfolgt werden.
</ion-col>
</ion-row>
<ion-row style="text-align:right;">
<ion-col>
<ion-button (click)="showNextExercise(1)">{{ 'START_TEST' | translate}}</ion-button>
</ion-col>
</ion-row>
</div>
<!-- step 2: start vocabulary test-->
<!-- step 3: read the text and answer questions, preparing the exercise unit-->
<div>
<ion-row id="h5p-row">
<ion-col>
<div class="h5p-container"></div>
</ion-col>
</ion-row>
<ion-row style="text-align:right;">
<ion-col>
<ion-button (click)="showNextExercise(29)">{{ "BUTTON_CONTINUE" | translate}}</ion-button>
</ion-col>
</ion-row>
</div>
<div *ngIf="currentExercise == 'nonH5P_3'">
<ion-row>
<p>
<i>Praeclarum est enim summo cum imperio fuisse in Asia triennium sic,
ut nullum te signum, nulla pictura, nullum vas, nulla vestis, nullum mancipium,
nulla forma cuiusquam, nulla condicio pecuniae, quibus rebus abundat
ista provincia, ab summa integritate continentiaque deduxerit.</i>
</p>
<p>
Es ist nämlich etwas ganz Besonderes, drei Jahre lang in der Provinz Asia
so unumschränkte Gewalt gehabt zu haben, dass Dich trotzdem keine Statue,
kein Bild, keine Vase, keine Kleidung, kein Sklave, keine wie auch immer geartete
Schönheit noch ein Geldangebot von Deiner absoluten Unbestechlichkeit und
Deiner Selbstbeherrschung abgebracht hat, obwohl Deine Provinz alle diese Dinge
im Überfluss bietet.
</p>
<!-- Question 2-->
</ion-row>
<ion-row>
<p>
<i>Quid autem reperiri tam eximium aut tam expetendum potest quam istam virtutem,
moderationem animi, temperantiam non latere in tenebris neque esse abditam,
sed in luce Asiae, in oculis clarissimae provinciae atque in auribus omnium
gentium ac nationum esse positam?</i>
</p>
<p>
Was aber kann sich als großartiger und erstrebenswerter erweisen, als dass
Deine Tüchtigkeit, Deine Gelassenheit und Deine Bescheidenheit nicht in der Dunkelheit
verborgen sind und auch nicht waren, sondern dass sie in der Öffentlichkeit
der Provinz Asia, vor den Augen der hochberühmten Provinz und vor den Ohren
aller Stämme und Völker ausgebreitet wurden?
</p>
<!-- Question 3-->
</ion-row>
</div>
<div *ngIf="currentExercise == 'nonH5P_4'">
<ion-row>
<p>
<i>non itineribus tuis perterreri homines, non sumptu exhauriri,
non adventu commoveri? </i>
</p>
<p>
Oder dass die Menschen von Deinen Reisen durch die Provinz nicht erschreckt,
durch die Kosten für Deinen Empfang nicht ausgesaugt noch durch Dein Kommen
beunruhigt werden?
</p>
<p>
<i>esse, quocumque veneris, et publice et privatim maximam laetitiam,
cum urbs custodem non tyrannum, domus hospitem non expilatorem recepisse videatur?</i>
</p>
<p>
Oder dass überall, wohin auch immer Du kommst, sowohl in der Öffentlichkeit
als auch in Privathäusern die höchste Freude ausbricht, weil sich zeigt,
dass die Stadt einen Wächter und keinen Tyrannen,
das Privathaus einen Gastfreund und keinen Räuber aufgenommen hat?
</p>
<!-- Question 4-->
</ion-row>
</div>
<div *ngIf="currentExercise == 'nonH5P_5'">
<ion-row>
<p>
<i>his autem in rebus iam te usus ipse profecto erudivit nequaquam satis esse
ipsum has te habere virtutes, sed esse circumspiciendum diligenter
ut in hac custodia provinciae non te unum sed omnis ministros imperi tui
sociis et civibus et rei publicae praestare videare.</i>
</p>
<p>
Diesbezüglich hat Dich die Praxis sicherlich schon gelehrt, dass es keinesfalls
genug ist, selbst alle diese vorzüglichen Eigenschaften zu besitzen,
sondern dass man sorgfältig dafür sorgen muss, dass bei der Provinzverwaltung
nicht nur Du allein, sondern alle Deine Untergebenen den Bundesgenossen,
den Bürgern und dem Staat verantwortlich zu sein scheinen.
</p>
<!-- Question5 -->
</ion-row>
</div>
<ion-row style="text-align:right;">
<ion-col>
<!--&lt;!&ndash; TODO: enable solution shuffling for H5P ? &ndash;&gt;-->
<div class="h5p-container"></div>
<ion-button (click)="showNextExercise(29)">{{ "BUTTON_CONTINUE" | translate}}</ion-button>
</ion-col>
</ion-row>
<ion-row>
<ion-col *ngIf="this.exercises.indexOf(this.currentExercise) < this.exercises.length - 1">
<ion-button (click)="showNextExercise(this.exercises.indexOf(this.currentExercise) + 1)">
Weiter
</ion-button>
<ion-row *ngIf="state==4">
<!-- fill in the gap exercise / learn voc-->
<!-- Timer to be set: 15min -->
<ion-col>
</ion-col>
</ion-row>
</ion-grid>
<!-- read the text and answer questions, preparing the exercise section-->
<br>
<br>
<br>
<br>
<h6>Aufgabe:</h6>
<div>Lies Dir den zweisprachigen Text gründlich auf Latein und Deutsch durch. Beantworte bitte alle Fragen. </div>
<br>
<h4>Quintus als vorbildlicher Statthalter</h4>
<p style="font-size:0.8em;">
Cicero betont in einem Brief an seinen Bruder Quintus, wie herausragend
dessen Verwaltung der Provinz Asia sei und dass er sich darum
kümmern müsse, dass auch seine Untergebenen ebenso positiv auffallen.
</p>
<p>
<i>[…] Atque haec nunc non, ut facias,
sed ut te facere et fecisse gaudeas, scribo;</i>
</p>
<p>
[…] Und dies schreibe ich dir jetzt nicht, um Dich
zu solchem guten Handeln anzuregen, sondern damit Du Dich darüber
freuen kannst, dass Du bereits so handelst und gehandelt hast.
</p>
<!-- Question 1-->
<p>
<i>Praeclarum est enim summo cum imperio fuisse in Asia triennium sic,
ut nullum te signum, nulla pictura, nullum vas, nulla vestis, nullum mancipium,
nulla forma cuiusquam, nulla condicio pecuniae, quibus rebus abundat
ista provincia, ab summa integritate continentiaque deduxerit.</i>
</p>
<p>
Es ist nämlich etwas ganz Besonderes, drei Jahre lang in der Provinz Asia
so unumschränkte Gewalt gehabt zu haben, dass Dich trotzdem keine Statue,
kein Bild, keine Vase, keine Kleidung, kein Sklave, keine wie auch immer geartete
Schönheit noch ein Geldangebot von Deiner absoluten Unbestechlichkeit und
Deiner Selbstbeherrschung abgebracht hat, obwohl Deine Provinz alle diese Dinge
im Überfluss bietet.
</p>
<!-- Question 2-->
<p>
<i>Quid autem reperiri tam eximium aut tam expetendum potest quam istam virtutem,
moderationem animi, temperantiam non latere in tenebris neque esse abditam,
sed in luce Asiae, in oculis clarissimae provinciae atque in auribus omnium
gentium ac nationum esse positam?</i>
</p>
<p>
Was aber kann sich als großartiger und erstrebenswerter erweisen, als dass
Deine Tüchtigkeit, Deine Gelassenheit und Deine Bescheidenheit nicht in der Dunkelheit
verborgen sind und auch nicht waren, sondern dass sie in der Öffentlichkeit
der Provinz Asia, vor den Augen der hochberühmten Provinz und vor den Ohren
aller Stämme und Völker ausgebreitet wurden?
</p>
<!-- Question 3-->
<p>
<i>non itineribus tuis perterreri homines, non sumptu exhauriri,
non adventu commoveri? </i>
</p>
<p>
Oder dass die Menschen von Deinen Reisen durch die Provinz nicht erschreckt,
durch die Kosten für Deinen Empfang nicht ausgesaugt noch durch Dein Kommen
beunruhigt werden?
</p>
<p>
<i>esse, quocumque veneris, et publice et privatim maximam laetitiam,
cum urbs custodem non tyrannum, domus hospitem non expilatorem recepisse videatur?</i>
</p>
<p>
Oder dass überall, wohin auch immer Du kommst, sowohl in der Öffentlichkeit
als auch in Privathäusern die höchste Freude ausbricht, weil sich zeigt,
dass die Stadt einen Wächter und keinen Tyrannen,
das Privathaus einen Gastfreund und keinen Räuber aufgenommen hat?
</p>
<!-- Question 4-->
<p>
<i>his autem in rebus iam te usus ipse profecto erudivit nequaquam satis esse
ipsum has te habere virtutes, sed esse circumspiciendum diligenter
ut in hac custodia provinciae non te unum sed omnis ministros imperi tui
sociis et civibus et rei publicae praestare videare.</i>
</p>
<p>
Diesbezüglich hat Dich die Praxis sicherlich schon gelehrt, dass es keinesfalls
genug ist, selbst alle diese vorzüglichen Eigenschaften zu besitzen,
sondern dass man sorgfältig dafür sorgen muss, dass bei der Provinzverwaltung
nicht nur Du allein, sondern alle Deine Untergebenen den Bundesgenossen,
den Bürgern und dem Staat verantwortlich zu sein scheinen.
</p>
<!-- Question5 -->
<!-- fill in the gap exercise / learn voc-->
<!-- repeat test-->
<!-- show results-->
<ion-card>
<ion-item>
<ion-icon name="stats" slot="start"></ion-icon>
<ion-label>Ergebnis erster Wortschatztest:</ion-label>
... von ... 30 Aufgaben wurden richtig bearbeitet.
</ion-item>
<ion-item>
<ion-icon name="book" slot="start"></ion-icon>
<ion-label>Ergebnis Leseverstehen:</ion-label>
... von ... Fragen wurden richtig beantwortet.
</ion-item>
<ion-item>
<ion-icon name="pulse" slot="start"></ion-icon>
<ion-label>Ergebnis zweiter Wortschatztest:</ion-label>
... von ... 30 Aufgaben wurden richtig bearbeitet.<br>
Veränderung gegenüber dem 1. Wortschatztest: ...%
</ion-item>
<ion-item>
<ion-icon name="medal" slot="start"></ion-icon>
<ion-label>Rang im Highscore:</ion-label>
Platz ... von ... Teilnehmern
</ion-item>
</ion-card>
</ion-content>
<ion-row *ngIf="state==4" style="text-align:right;">
<ion-col>
<ion-button (click)="state = state + 1">{{ "BUTTON_CONTINUE" | translate}}</ion-button>
</ion-col>
</ion-row>
<ion-row *ngIf="state==5">
<!-- repeat test-->
<ion-col>
</ion-col>
</ion-row>
<ion-row *ngIf="state==5" style="text-align:right;">
<ion-col>
<ion-button (click)="state = state + 1">{{ "BUTTON_CONTINUE" | translate}}</ion-button>
</ion-col>
</ion-row>
<ion-row *ngIf="state==6">
<!-- show results-->
<ion-col>
<ion-card>
<ion-item>
<ion-icon name="stats" slot="start"></ion-icon>
<ion-label>Ergebnis erster Wortschatztest:</ion-label>
... von ... 30 Aufgaben wurden richtig bearbeitet.
</ion-item>
<ion-item>
<ion-icon name="book" slot="start"></ion-icon>
<ion-label>Ergebnis Leseverstehen:</ion-label>
... von ... Fragen wurden richtig beantwortet.
</ion-item>
<ion-item>
<ion-icon name="pulse" slot="start"></ion-icon>
<ion-label>Ergebnis zweiter Wortschatztest:</ion-label>
... von ... 30 Aufgaben wurden richtig bearbeitet.<br>
Veränderung gegenüber dem 1. Wortschatztest: ...%
</ion-item>
<ion-item>
<ion-icon name="medal" slot="start"></ion-icon>
<ion-label>Rang im Highscore:</ion-label>
Platz ... von ... Teilnehmern
</ion-item>
</ion-card>
</ion-col>
</ion-row>
<ion-row *ngIf="state==6">
<ion-toolbar>
<ion-tabs>
<ion-tab-bar slot="bottom">
<ion-tab-button (click)="goToAuthorPage(navCtrl)">
<ion-icon name="walk"></ion-icon>
<ion-label>{{ 'EXERCISE_GENERATE' | translate }}</ion-label>
</ion-tab-button>
<ion-tab-button (click)="HelperService.goToTestPage(navCtrl)">
<!-- Link doesn't work-->
<ion-icon name="school"></ion-icon>
<ion-label>{{ 'TEST_REPEAT' | translate }}</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
</ion-toolbar>
</ion-row>
</ion-grid>
</ion-content>
\ No newline at end of file
import {Component} from '@angular/core';
import {NavController} from "@ionic/angular";
import {HelperService} from '../helper.service';
import {XAPIevent} from "src/app/models/xAPIevent";
import {TranslateService} from "@ngx-translate/core";
import { Component, OnDestroy } from '@angular/core';
import { NavController } from "@ionic/angular";
import { HelperService } from '../helper.service';
import { XAPIevent } from "src/app/models/xAPIevent";
import { TranslateService } from "@ngx-translate/core";
declare var H5P: any;
// dirty hack to prevent H5P access errors after resize events
......@@ -15,66 +15,91 @@ window.onresize = () => {
};
@Component({
selector: 'app-test',
templateUrl: './test.page.html',
styleUrls: ['./test.page.scss'],
selector: 'app-test',
templateUrl: './test.page.html',
styleUrls: ['./test.page.scss'],
})
export class TestPage {
Array = Array;
HelperService = HelperService;
public currentExercise: string = "";
public exercises: string[] = ["fill_blanks_1", "multi_choice_1", "multi_choice_2",
"multi_choice_3", "multi_choice_4", "multi_choice_5", "multi_choice_6",
"multi_choice_7", "multi_choice_8", "fill_blanks_2", "fill_blanks_3",
"fill_blanks_4", "fill_blanks_5", "multi_choice_9", "fill_blanks_6",
"multi_choice_10", "multi_choice_11", "multi_choice_12", "multi_choice_13",
"multi_choice_14", "multi_choice_15", "multi_choice_16", "multi_choice_17",
"fill_blanks_7", "fill_blanks_8", "fill_blanks_9", "fill_blanks_10",
"multi_choice_18s"];
public newExerciseTarget: number;
export class TestPage implements OnDestroy {
Array = Array;
HelperService = HelperService;
public currentExercise: string = "nonH5P_1";
public exercises: string[] = ["nonH5P_1", "fill_blanks_1", "multi_choice_1", "multi_choice_2",
"multi_choice_3", "multi_choice_4", "multi_choice_5", "multi_choice_6",
"multi_choice_7", "multi_choice_8", "fill_blanks_2", "fill_blanks_3",
"fill_blanks_4", "fill_blanks_5", "multi_choice_9", "fill_blanks_6",
"multi_choice_10", "multi_choice_11", "multi_choice_12", "multi_choice_13",
"multi_choice_14", "multi_choice_15", "multi_choice_16", "multi_choice_17",
"fill_blanks_7", "fill_blanks_8", "fill_blanks_9", "fill_blanks_10",
"multi_choice_18", "multi_choice_19", "multi_choice_20", "multi_choice_21",
"multi_choice_22", "multi_choice_23"];
constructor(public navCtrl: NavController, public translate: TranslateService) {
this.showNextExercise(0);
}
constructor(public navCtrl: NavController, public translate: TranslateService) {
H5P.externalDispatcher.on('xAPI', (event: XAPIevent) => {
// results are only available when a task has been completed/answered, not in the "attempted" or "interacted" stages
if (event.data.statement.verb.id === HelperService.config["xAPIverbIDanswered"] && event.data.statement.result) {
// TODO: SAVE THIS SCORE BY SENDING IT TO THE BACKEND? OR WRITE THE WHOLE STATEMENT?
// console.log(event.data.statement.result.score.scaled);
this.showNextExercise(this.exercises.indexOf(this.currentExercise) + 1);
}
});
}
goToExercise() {
this.showNextExercise(this.newExerciseTarget);
}
goToAuthorPage() {
this.navCtrl.navigateForward('/author').then();
}
public initH5P(exerciseType: string) {
// dirty hack to get H5P going without explicit button click on the new page
setTimeout(() => {
(($) => {
$(() => {
// $('.h5p-container').empty();
$('.h5p-container').empty().h5p({
frameJs: 'assets/dist/js/h5p-standalone-frame.min.js',
frameCss: 'assets/dist/styles/h5p.css',
h5pContent: 'assets/test_module/' + exerciseType
});
});
})(H5P.jQuery);
H5P.externalDispatcher.on('xAPI', (event: XAPIevent) => {
// results are only available when a task has been completed/answered, not in the "attempted" or "interacted" stages
if (event.data.statement.verb.id === HelperService.config["xAPIverbIDanswered"] && event.data.statement.result) {
// TODO: SAVE THIS SCORE BY SENDING IT TO THE BACKEND? OR WRITE THE WHOLE STATEMENT?
// console.log(event.data.statement.result.score.scaled);
}
});
}, 50);
}
goToTestPage() {
this.navCtrl.navigateForward('/test').then();
}
showNextExercise(newIndex: number) {
this.currentExercise = this.exercises[newIndex];
let fileName: string = this.currentExercise.split("_").slice(-1) + "_" + this.translate.currentLang + ".json";
const exerciseType = this.currentExercise.split("_").slice(0, 2).join("_");
const baseUrl: string = location.protocol.concat('//').concat(window.location.host);
window.localStorage.setItem(HelperService.config['localStorageKeyH5P'], baseUrl + "/assets/test_module/" + exerciseType + "/content/" + fileName);
this.initH5P(exerciseType);
}
public initH5P(exerciseType: string) {
// dirty hack to get H5P going without explicit button click on the new page
setTimeout(() => {
(($) => {
$(() => {
// $('.h5p-container').empty();
$('.h5p-container').empty().h5p({
frameJs: 'assets/dist/js/h5p-standalone-frame.min.js',
frameCss: 'assets/dist/styles/h5p.css',
h5pContent: 'assets/h5p/' + exerciseType
});
});
})(H5P.jQuery);
}, 50);
}
openUrl(url: string) {
window.open(url, '_system', 'location=yes');
}
ngOnDestroy() {
H5P.externalDispatcher.off('xAPI');
}
showNextExercise(newIndex: number) {
let oldIndex = this.exercises.indexOf(this.currentExercise);
let navLinks: HTMLCollection = document.getElementById("exerciseNav").children;
if (oldIndex > -1) {
navLinks[oldIndex].children[0].classList.remove("highlight");
if (this.currentExercise.startsWith("nonH5P")) {
document.getElementById("h5p-row").classList.remove("hide");
}
}
this.currentExercise = this.exercises[newIndex];
navLinks[this.exercises.indexOf(this.currentExercise)].children[0].classList.add("highlight");
if (this.currentExercise.startsWith("nonH5P")) {
document.getElementById("h5p-row").classList.add("hide");
return;
}
let fileName: string = this.currentExercise.split("_").slice(-1) + "_" + this.translate.currentLang + ".json";
let exerciseType = this.currentExercise.split("_").slice(0, 2).join("_");
const baseUrl: string = location.protocol.concat('//').concat(window.location.host);
window.localStorage.setItem(HelperService.config['localStorageKeyH5P'], baseUrl + "/assets/h5p/" + exerciseType + "/content/" + fileName);
if (exerciseType.startsWith("voc_list")) {
exerciseType = "fill_blanks";
}
this.initH5P(exerciseType);
}
openUrl(url: string) {
window.open(url, '_system', 'location=yes');
}
}
......@@ -175,6 +175,7 @@ div.h5p-fullscreen {
}
.h5p-content ul.h5p-actions {
display: none;
box-sizing: border-box;
-moz-box-sizing: border-box;
overflow: hidden;
......
{
"taskDescription": "<p>What are the colors of these berries when they are ripe?<\/p>\n",
"checkAnswer": "Check",
"tryAgain": "Retry",
"showSolution": "Show Solution",
"behaviour": {
"enableRetry": true,
"enableSolutionsButton": true,
"instantFeedback": false,
"enableCheckButton": true
},
"textField": "Blueberries are *blue:Check the name of the berry!*.\nStrawberries are *red*.\nCloudberries are *orange*.",
"overallFeedback": [
{
"from": 0,
"to": 100,
"feedback": "Score: @score of @total."
}
],
"dropZoneIndex": "Drop Zone @index.",
"empty": "Drop Zone @index is empty.",
"contains": "Drop Zone @index contains draggable @draggable.",
"draggableIndex": "Draggable @text. @index of @count draggables.",
"tipLabel": "Show tip",
"correctText": "Correct!",
"incorrectText": "Incorrect!",
"resetDropTitle": "Reset drop",
"resetDropDescription": "Are you sure you want to reset this drop zone?",
"grabbed": "Draggable is grabbed.",
"cancelledDragging": "Cancelled dragging.",
"correctAnswer": "Correct answer:",
"feedbackHeader": "Feedback",
"scoreBarLabel": "You got :num out of :total points"
}
\ No newline at end of file
{"taskDescription":"<p>What are the colors of these berries when they are ripe?<\/p>\n","checkAnswer":"Check","tryAgain":"Retry","showSolution":"Show Solution","behaviour":{"enableRetry":true,"enableSolutionsButton":true,"instantFeedback":false,"enableCheckButton":true},"textField":"Blueberries are *blue:Check the name of the berry!*.\nStrawberries are *red*.\nCloudberries are *orange*.","overallFeedback":[{"from":0,"to":100,"feedback":"Score: @score of @total."}],"dropZoneIndex":"Drop Zone @index.","empty":"Drop Zone @index is empty.","contains":"Drop Zone @index contains draggable @draggable.","draggableIndex":"Draggable @text. @index of @count draggables.","tipLabel":"Show tip","correctText":"Correct!","incorrectText":"Incorrect!","resetDropTitle":"Reset drop","resetDropDescription":"Are you sure you want to reset this drop zone?","grabbed":"Draggable is grabbed.","cancelledDragging":"Cancelled dragging.","correctAnswer":"Correct answer:","feedbackHeader":"Feedback","scoreBarLabel":"You got :num out of :total points"}
......@@ -16,7 +16,7 @@
"separateLines": false,
"enableRetry": false,
"disableImageZooming": true,
"confirmCheckDialog": true,
"confirmCheckDialog": false,
"confirmRetryDialog": false,
"acceptSpellingErrors": false,
"enableCheckButton": true
......
......@@ -16,7 +16,7 @@
"separateLines": false,
"enableRetry": false,
"disableImageZooming": true,
"confirmCheckDialog": true,