Add initial frontend implementation for spell checks

This commit is contained in:
Ramon Wenger 2019-12-16 14:25:55 +01:00 committed by Ramon Wenger
parent bdda817533
commit 7f71977523
5 changed files with 124 additions and 63 deletions

View File

@ -13,20 +13,25 @@
@saveInput="saveInput" @saveInput="saveInput"
@reopen="reopen" @reopen="reopen"
@changeDocumentUrl="changeDocumentUrl" @changeDocumentUrl="changeDocumentUrl"
@spellcheck="spellcheck"
:user-input="submission" :user-input="submission"
placeholder="Ergebnis erfassen" placeholder="Ergebnis erfassen"
action="Ergebnis mit Lehrperson teilen" action="Ergebnis mit Lehrperson teilen"
shared-msg="Das Ergebnis wurde mit der Lehrperson geteilt." shared-msg="Das Ergebnis wurde mit der Lehrperson geteilt."
:saved="!unsaved" :saved="!unsaved"
> :spellcheck="true"
>
</submission-form> </submission-form>
<div v-html="corrections"></div>
<div v-if="this.assignment.submission.submissionFeedback" class="assignment__feedback"> <div v-if="this.assignment.submission.submissionFeedback" class="assignment__feedback">
<p>{{feedbackText}}</p> <p>{{feedbackText}}</p>
</div> </div>
</template> </template>
<template v-if="!isStudent"> <template v-if="!isStudent">
<router-link class="button button--primary" :to="{name: 'submissions', params: { id: assignment.id }}">Zu den Ergebnissen <router-link class="button button--primary" :to="{name: 'submissions', params: { id: assignment.id }}">Zu den
Ergebnissen
</router-link> </router-link>
</template> </template>
</div> </div>
@ -38,6 +43,7 @@
import ME_QUERY from '@/graphql/gql/meQuery.gql'; import ME_QUERY from '@/graphql/gql/meQuery.gql';
import UPDATE_ASSIGNMENT_MUTATION from '@/graphql/gql/mutations/updateAssignmentMutation.gql'; import UPDATE_ASSIGNMENT_MUTATION from '@/graphql/gql/mutations/updateAssignmentMutation.gql';
import UPDATE_ASSIGNMENT_MUTATION_WITH_SUCCESS from '@/graphql/gql/mutations/updateAssignmentMutationWithSuccess.gql'; import UPDATE_ASSIGNMENT_MUTATION_WITH_SUCCESS from '@/graphql/gql/mutations/updateAssignmentMutationWithSuccess.gql';
import SPELL_CHECK_MUTATION from '@/graphql/gql/mutations/spellCheck.gql';
import debounce from 'lodash/debounce'; import debounce from 'lodash/debounce';
import cloneDeep from 'lodash/cloneDeep' import cloneDeep from 'lodash/cloneDeep'
@ -178,6 +184,31 @@
final: false, final: false,
} }
}, },
spellcheck() {
let self = this;
this.$apollo.mutate({
mutation: SPELL_CHECK_MUTATION,
variables: {
input: {
assignment: 'Hallo',
text: this.assignment.submission.text
}
},
update(store, {data: {spellCheck: {correct, results}}}) {
console.log(results);
console.log(correct);
let corrections = results.map(result => {
let first, middle, last;
first = result.sentence.substring(0, result.offset);
middle = result.sentence.substring(result.offset, result.offset + result.length);
last = result.sentence.substring(result.offset + result.length);
return `<p>${first}<span class="taskbase__correction">${middle}</span>${last}</p>`;
});
self.corrections = corrections.join('');
}
});
}
}, },
apollo: { apollo: {
@ -212,7 +243,8 @@
}, },
inputType: 'text', inputType: 'text',
unsaved: false, unsaved: false,
saving: 0 saving: 0,
corrections: ''
} }
} }
} }
@ -258,6 +290,7 @@
&__feedback { &__feedback {
margin-top: $medium-spacing; margin-top: $medium-spacing;
} }
} }
</style> </style>

View File

@ -1,44 +1,49 @@
<template> <template>
<div class="feedback__submission submission-form-container"> <div class="feedback__submission submission-form-container">
<div class="submission-form-container__inputs"> <div class="submission-form-container__inputs">
<submission-input <submission-input
@input="saveInput" @input="saveInput"
:input-text="userInput.text" :input-text="userInput.text"
:saved="saved" :saved="saved"
:final="final" :final="final"
:placeholder="placeholder" :placeholder="placeholder"
:reopen="reopenSubmission" :reopen="reopenSubmission"
></submission-input> ></submission-input>
</div>
<div class="submission-form-container__actions" v-if="!final">
<button class="submission-form-container__submit button button--primary button--white-bg"
@click="$emit('turnIn')"
>{{action}}
</button>
<div v-if="userInput.document">
<document-block
:value="{url: userInput.document}"
show-trash-icon
v-on:trash="changeDocumentUrl('')"
></document-block>
</div>
<simple-file-upload
v-if="allowsDocuments"
v-on:link-change-url="changeDocumentUrl"
:value="userInput.document"
class="submission-form-container__document"
></simple-file-upload>
<slot></slot>
</div>
<final-submission
v-if="final"
:user-input="userInput"
:shared-msg="sharedMsg"
@reopen="$emit('reopen')"></final-submission>
</div> </div>
<div class="submission-form-container__actions" v-if="!final">
<button class="submission-form-container__submit button button--primary button--white-bg"
@click="$emit('turnIn')"
>{{action}}
</button>
<button class="submission-form-container__submit button button--primary button--white-bg"
v-if="spellcheck"
@click="$emit('spellcheck')"
>Rechtschreibung prüfen
</button>
<div v-if="userInput.document">
<document-block
:value="{url: userInput.document}"
show-trash-icon
v-on:trash="changeDocumentUrl('')"
></document-block>
</div>
<simple-file-upload
v-if="allowsDocuments"
v-on:link-change-url="changeDocumentUrl"
:value="userInput.document"
class="submission-form-container__document"
></simple-file-upload>
<slot></slot>
</div>
<final-submission
v-if="final"
:user-input="userInput"
:shared-msg="sharedMsg"
@reopen="$emit('reopen')"></final-submission>
</div>
</template> </template>
<script> <script>
@ -62,6 +67,10 @@
action: String, action: String,
reopen: Function, reopen: Function,
document: String, document: String,
spellcheck: {
tyoe: Boolean,
default: false
},
sharedMsg: String sharedMsg: String
}, },
@ -90,34 +99,34 @@
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import '@/styles/_mixins.scss'; @import '@/styles/_mixins.scss';
.submission-form-container { .submission-form-container {
@include input-box-shadow; @include input-box-shadow;
background-color: $color-white; background-color: $color-white;
border-radius: $input-border-radius; border-radius: $input-border-radius;
border: 1px solid $color-silver; border: 1px solid $color-silver;
padding: $medium-spacing; padding: $medium-spacing;
&__inputs { &__inputs {
margin-bottom: 12px; margin-bottom: 12px;
} }
&__submit { &__submit {
margin-right: $medium-spacing; margin-right: $medium-spacing;
} }
&__actions { &__actions {
display: flex; display: flex;
align-items: center; align-items: center;
} }
&__document { &__document {
&:hover { &:hover {
cursor: pointer; cursor: pointer;
}
} }
} }
}
</style> </style>

View File

@ -0,0 +1,13 @@
mutation SpellCheck($input: SpellCheckInput!) {
spellCheck(input: $input) {
correct
results {
sentence
offset
length
affected
corrected
}
}
}

View File

@ -0,0 +1,5 @@
.taskbase {
&__correction {
background: yellow;
}
}

View File

@ -22,3 +22,4 @@
@import "public-page"; @import "public-page";
@import "student-submission"; @import "student-submission";
@import "module-activity"; @import "module-activity";
@import "taskbase";