Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 169-add-date-to-examtype
  • 233-make-exam-a-many-to-many-field-on-studentinfo-model
  • 236-improve-importer-experience
  • 243-replace-toggle-buttons-with-switches
  • 250-update-vuetify
  • 258-add-markdown-viewer
  • 265-fix-selection-changing-on-window-switching
  • 272-reviewers-should-be-able-to-assign-exercise-groups-to-tutors
  • 276-create-new-yarn-lockfile
  • 279-tutor-overview-no-scrolling
  • 282-copy-button-does-not-work-when-reviewing-corrections
  • 286-fix-misalignment-of-hide-show-sidebar-buttons
  • 287-build-test-image-constantly-failing
  • 288-add-dropdown-to-participantspage-to-set-students-groups
  • 289-fix-change-log-card
  • 291-revise-to-old-export-scheme
  • 292-update-gitlab-ci-config-for-new-runner
  • 292-update-gitlab-ci-config-for-new-runner-2
  • add-exercise-util-script
  • document-frontend-components
  • grady-exam
  • jakob.dieterle-master-patch-13835
  • master
  • parallel-test
  • test-233-branch-remove-examtype-foreign-key-on-group
  • update-export-dialogs
  • 0.0.1
  • 0.1
  • 0.2
  • 0.3
  • 0.4
  • 0.4.1
  • 0.4.2
  • 0.5.0
  • 0.5.1
  • 1.0.0
  • 1.1.0
  • 2.0.0
  • 2.0.1
  • 2.1.0
  • 2.1.1
  • 2.2.0
  • 3.0.0
  • 3.0.1
  • 4.0.0
  • 4.1.0
  • 4.2.0
  • 4.3.0
  • 4.4.0
  • 4.4.1
  • 5.0.0
  • 5.0.1
  • 5.1.0
  • 5.1.1
  • 5.1.2
  • 5.1.3
  • 5.1.4
  • 5.1.5
  • 5.1.6
  • 5.1.7
  • 5.2.0
  • 5.3.0
  • 5.3.1
  • 5.3.2
  • 5.4.0
  • 5.4.1
  • 5.4.2
  • 6.0.0
  • 6.1.0
  • legacy
70 results

Target

Select target project
  • j.michal/grady
1 result
Select Git revision
  • 169-add-date-to-examtype
  • 233-make-exam-a-many-to-many-field-on-studentinfo-model
  • 236-improve-importer-experience
  • 243-replace-toggle-buttons-with-switches
  • 250-update-vuetify
  • 258-add-markdown-viewer
  • 265-fix-selection-changing-on-window-switching
  • 272-reviewers-should-be-able-to-assign-exercise-groups-to-tutors
  • 276-create-new-yarn-lockfile
  • 279-tutor-overview-no-scrolling
  • 282-copy-button-does-not-work-when-reviewing-corrections
  • 286-fix-misalignment-of-hide-show-sidebar-buttons
  • 287-build-test-image-constantly-failing
  • 288-add-dropdown-to-participantspage-to-set-students-groups
  • 289-fix-change-log-card
  • 291-revise-to-old-export-scheme
  • 292-update-gitlab-ci-config-for-new-runner
  • 292-update-gitlab-ci-config-for-new-runner-2
  • add-exercise-util-script
  • document-frontend-components
  • grady-exam
  • jakob.dieterle-master-patch-13835
  • master
  • parallel-test
  • test-233-branch-remove-examtype-foreign-key-on-group
  • update-export-dialogs
  • 0.0.1
  • 0.1
  • 0.2
  • 0.3
  • 0.4
  • 0.4.1
  • 0.4.2
  • 0.5.0
  • 0.5.1
  • 1.0.0
  • 1.1.0
  • 2.0.0
  • 2.0.1
  • 2.1.0
  • 2.1.1
  • 2.2.0
  • 3.0.0
  • 3.0.1
  • 4.0.0
  • 4.1.0
  • 4.2.0
  • 4.3.0
  • 4.4.0
  • 4.4.1
  • 5.0.0
  • 5.0.1
  • 5.1.0
  • 5.1.1
  • 5.1.2
  • 5.1.3
  • 5.1.4
  • 5.1.5
  • 5.1.6
  • 5.1.7
  • 5.2.0
  • 5.3.0
  • 5.3.1
  • 5.3.2
  • 5.4.0
  • 5.4.1
  • 5.4.2
  • 6.0.0
  • 6.1.0
  • legacy
70 results
Show changes
Commits on Source (4)
Showing
with 51 additions and 30 deletions
...@@ -31,13 +31,14 @@ ...@@ -31,13 +31,14 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue' import Vue from 'vue'
import Component, { mixins } from 'vue-class-component' import Component, { mixins } from 'vue-class-component'
import { Watch } from 'vue-property-decorator'
import { mapState } from 'vuex' import { mapState } from 'vuex'
import { Authentication } from '@/store/modules/authentication' import { Authentication } from '@/store/modules/authentication'
import { actions } from '@/store/actions' import { actions } from '@/store/actions'
import { getters } from '@/store/getters'
@Component({ @Component({
name: 'auto-logout', name: 'auto-logout'
computed: {...mapState(['lastAppInteraction'])}
}) })
export default class AutoLogout extends Vue { export default class AutoLogout extends Vue {
timer = 0 timer = 0
...@@ -46,6 +47,7 @@ export default class AutoLogout extends Vue { ...@@ -46,6 +47,7 @@ export default class AutoLogout extends Vue {
get lastTokenRefreshTry () { return Authentication.state.lastTokenRefreshTry } get lastTokenRefreshTry () { return Authentication.state.lastTokenRefreshTry }
get refreshingToken () { return Authentication.state.refreshingToken } get refreshingToken () { return Authentication.state.refreshingToken }
get jwtTimeDelta () { return Authentication.state.jwtTimeDelta } get jwtTimeDelta () { return Authentication.state.jwtTimeDelta }
get lastAppInteraction () { return getters.state.lastAppInteraction }
logout () { logout () {
this.logoutDialog = false this.logoutDialog = false
...@@ -57,7 +59,8 @@ export default class AutoLogout extends Vue { ...@@ -57,7 +59,8 @@ export default class AutoLogout extends Vue {
this.logoutDialog = false this.logoutDialog = false
} }
lastAppInteraction () { @Watch('lastAppInteraction')
onLastInteractionChange () {
const timeSinceLastRefresh = Date.now() - this.lastTokenRefreshTry const timeSinceLastRefresh = Date.now() - this.lastTokenRefreshTry
const timeDelta = this.jwtTimeDelta const timeDelta = this.jwtTimeDelta
// refresh jwt if it's older than 20% of his maximum age // refresh jwt if it's older than 20% of his maximum age
...@@ -67,10 +70,6 @@ export default class AutoLogout extends Vue { ...@@ -67,10 +70,6 @@ export default class AutoLogout extends Vue {
} }
} }
watch () {
this.lastAppInteraction()
}
mounted () { mounted () {
this.timer = setInterval(() => { this.timer = setInterval(() => {
const timeDialogAppearsBeforeLogout = Math.min(600 * 1e3, const timeDialogAppearsBeforeLogout = Math.min(600 * 1e3,
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
</v-card-title> </v-card-title>
<div v-if="loaded"> <div v-if="loaded">
<ul class="inline-list mx-3"> <ul class="inline-list mx-3">
<li>Submissions per student: <span>{{statistics.submissionsPerStudent}}</span></li> <li>Submissions per participant: <span>{{statistics.submissionsPerStudent}}</span></li>
<li>Submissions per type: <span>{{statistics.submissionsPerType}}</span></li> <li>Submissions per type: <span>{{statistics.submissionsPerType}}</span></li>
<li>Curr. mean score: <li>Curr. mean score:
<span> <span>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<v-card> <v-card>
<v-card-title> <v-card-title>
<span class="title"> <span class="title">
Students Participants
</span> </span>
<student-list-reverse-mapper class="ml-4"/> <student-list-reverse-mapper class="ml-4"/>
<v-spacer/> <v-spacer/>
...@@ -53,8 +53,8 @@ ...@@ -53,8 +53,8 @@
<v-icon small v-if="!props.item.isActive">lock</v-icon> <v-icon small v-if="!props.item.isActive">lock</v-icon>
<v-icon small v-else>lock_open</v-icon> <v-icon small v-else>lock_open</v-icon>
</template> </template>
<span v-if="!props.item.isActive">Student doesn't have access.</span> <span v-if="!props.item.isActive">Participant doesn't have access.</span>
<span v-else>Student has access.</span> <span v-else>Participant has access.</span>
</v-tooltip> </v-tooltip>
</td> </td>
<td <td
......
...@@ -27,8 +27,8 @@ export default { ...@@ -27,8 +27,8 @@ export default {
return [ return [
{ {
title: this.studentsActive title: this.studentsActive
? 'Remove student access' ? 'Remove participant access'
: 'Grant student access', : 'Grant participant access',
action: this.changeStudentsAccess action: this.changeStudentsAccess
} }
] ]
......
...@@ -93,6 +93,10 @@ export default { ...@@ -93,6 +93,10 @@ export default {
}, },
feedback: { feedback: {
type: Object type: Object
},
ignoreHiddenState: {
type: Boolean,
default: false,
} }
}, },
computed: { computed: {
...@@ -154,6 +158,7 @@ export default { ...@@ -154,6 +158,7 @@ export default {
SubmissionNotes.RESET_STATE() SubmissionNotes.RESET_STATE()
SubmissionNotes.SET_SUBMISSION(this.submissionObj) SubmissionNotes.SET_SUBMISSION(this.submissionObj)
SubmissionNotes.SET_ORIG_FEEDBACK(this.feedbackObj) SubmissionNotes.SET_ORIG_FEEDBACK(this.feedbackObj)
SubmissionNotes.SET_SHOW_FEEDBACK(this.ignoreHiddenState ? true : !SubmissionNotes.state.hasOrigFeedback)
} }
}, },
watch: { watch: {
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
> >
<correction-help-card/> <correction-help-card/>
</v-dialog> </v-dialog>
<span class="title">Student submission</span> <span class="title">Participant submission</span>
<toggle-feedback-visibility-button/> <toggle-feedback-visibility-button/>
<v-spacer/> <v-spacer/>
<v-tooltip top> <v-tooltip top>
......
...@@ -5,21 +5,26 @@ ...@@ -5,21 +5,26 @@
</v-btn> </v-btn>
</template> </template>
<script> <script lang="ts">
import Vue from 'vue'
import { SubmissionNotes } from '@/store/modules/submission-notes' import { SubmissionNotes } from '@/store/modules/submission-notes'
import { createComputedGetterSetter } from '@/util/helpers' import { createComputedGetterSetter } from '@/util/helpers'
import { getters } from '@/store/getters'
import Component from 'vue-class-component';
export default { @Component
name: 'toggle-feedback-visibility-button', export default class ToggleFeedbackVisibilityButton extends Vue {
computed: { get showFeedback () {
showFeedback: createComputedGetterSetter({ return getters.state.SubmissionNotes.ui.showFeedback
path: 'SubmissionNotes.ui.showFeedback', }
mutation: SubmissionNotes.SET_SHOW_FEEDBACK
}) set showFeedback (val) {
SubmissionNotes.SET_SHOW_FEEDBACK(val)
} }
} }
</script> </script>
<style scoped> <style scoped>
</style> </style>
...@@ -30,8 +30,10 @@ ...@@ -30,8 +30,10 @@
type="password" type="password"
required required
/> />
<v-btn @click="registerDialog = true" id="register">register</v-btn> <v-layout class="btn-container">
<v-btn :loading="loading" type="submit" color="primary">Access</v-btn> <v-btn @click="registerDialog = true" id="register">Register</v-btn>
<v-btn :loading="loading" type="submit" color="primary">Access</v-btn>
</v-layout>
</v-form> </v-form>
</v-flex> </v-flex>
</v-layout> </v-layout>
...@@ -88,4 +90,13 @@ export default { ...@@ -88,4 +90,13 @@ export default {
</script> </script>
<style scoped> <style scoped>
.v-btn {
margin: 0px;
}
.btn-container {
display: flex;
flex-wrap: nowrap;
justify-content: space-around;
}
</style> </style>
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
:submission-without-assignment="submission" :submission-without-assignment="submission"
:feedback="submission.feedback" :feedback="submission.feedback"
@feedbackCreated="refresh" @feedbackCreated="refresh"
:ignoreHiddenState="true"
/> />
<submission-tests <submission-tests
:tests="submission.tests" :tests="submission.tests"
......
...@@ -31,8 +31,8 @@ export default { ...@@ -31,8 +31,8 @@ export default {
return { return {
subGeneralNavItems: [ subGeneralNavItems: [
{ {
name: 'Students', name: 'Participants',
route: '/student-overview', route: '/participant-overview',
icon: 'people' icon: 'people'
}, },
{ {
......
...@@ -124,17 +124,17 @@ const router = new Router({ ...@@ -124,17 +124,17 @@ const router = new Router({
] ]
}, },
{ {
path: 'student-overview', path: 'participant-overview',
beforeEnter: reviewerOnly, beforeEnter: reviewerOnly,
component: StudentOverviewPage, component: StudentOverviewPage,
children: [ children: [
{ {
path: '', path: '',
name: 'student-overview', name: 'participant-overview',
component: StudentListHelpCard component: StudentListHelpCard
}, },
{ {
path: 'student/:studentPk/submission/:submissionPk', path: 'participant/:studentPk/submission/:submissionPk',
name: 'submission-side-view', name: 'submission-side-view',
component: StudentSubmissionSideView, component: StudentSubmissionSideView,
meta: { meta: {
......
...@@ -106,7 +106,7 @@ class FrontPageTestsReviewer(UntestedParent.FrontPageTestsTutorReviewer): ...@@ -106,7 +106,7 @@ class FrontPageTestsReviewer(UntestedParent.FrontPageTestsTutorReviewer):
drawer = self.browser.find_element_by_class_name('v-navigation-drawer') drawer = self.browser.find_element_by_class_name('v-navigation-drawer')
links = extract_hrefs_hashes(drawer.find_elements_by_tag_name('a')) links = extract_hrefs_hashes(drawer.find_elements_by_tag_name('a'))
self.assertTrue(all(link in links for link in self.assertTrue(all(link in links for link in
['/home', '/feedback', '/student-overview', '/tutor-overview'])) ['/home', '/feedback', '/participant-overview', '/tutor-overview']))
task_title = drawer.find_element_by_class_name('v-toolbar__title') task_title = drawer.find_element_by_class_name('v-toolbar__title')
self.assertEqual('Tasks', task_title.text) self.assertEqual('Tasks', task_title.text)
footer = drawer.find_element_by_class_name('sidebar-footer') footer = drawer.find_element_by_class_name('sidebar-footer')
......