From 074f4c33662a3e31d2920fa010d9f034e2d69576 Mon Sep 17 00:00:00 2001 From: "robinwilliam.hundt" <robinwilliam.hundt@stud.uni-goettingen.de> Date: Wed, 8 Nov 2017 22:57:19 +0100 Subject: [PATCH] First step towards REST + Vue Student Page Backend - Added isStudent permission - Added serializers apropriate for StudentPage - Added api-endpoint urls - Added views regarding StudentPage - Migrated the Django Session Authentication to djangorestframework-jwt authentication Frontend - Migrated from vue-resource to axios because of better documentation & features - Added Login Component - Added First Part of StudentPage containing overview of exam and subissions Closes #41 References #39 --- backend/core/permissions.py | 19 +-- backend/core/serializers.py | 21 ++- backend/core/urls.py | 8 +- backend/core/views.py | 17 ++- backend/grady/settings/default.py | 17 +++ backend/requirements.txt | 1 + frontend/src/App.vue | 13 +- frontend/src/assets/brand.png | Bin 0 -> 46385 bytes frontend/src/components/HelloWorld.vue | 28 +++- frontend/src/components/Login.vue | 62 ++++++++ frontend/src/components/student/Base.vue | 13 -- .../components/student/ExamInformation.vue | 29 ++++ .../src/components/student/StudentNav.vue | 38 +++++ .../src/components/student/StudentPage.vue | 57 ++++++++ .../components/student/SubmissionDetail.vue | 12 -- .../src/components/student/SubmissionList.vue | 44 +++--- frontend/src/main.js | 8 +- frontend/src/router/index.js | 12 +- frontend/src/store/api.js | 30 +--- frontend/src/store/store.js | 39 +++++ frontend/yarn.lock | 137 +++++------------- 21 files changed, 384 insertions(+), 221 deletions(-) create mode 100644 frontend/src/assets/brand.png create mode 100644 frontend/src/components/Login.vue delete mode 100644 frontend/src/components/student/Base.vue create mode 100644 frontend/src/components/student/ExamInformation.vue create mode 100644 frontend/src/components/student/StudentNav.vue create mode 100644 frontend/src/components/student/StudentPage.vue delete mode 100644 frontend/src/components/student/SubmissionDetail.vue create mode 100644 frontend/src/store/store.js diff --git a/backend/core/permissions.py b/backend/core/permissions.py index 19b78f01..3418f6dd 100644 --- a/backend/core/permissions.py +++ b/backend/core/permissions.py @@ -1,18 +1,9 @@ from rest_framework import permissions -from core.custom_annotations import in_groups -from core.models import Feedback, Student, Submission +from core.models import Student -class StudentRequestOwnData(permissions.BasePermission): - def has_object_permission(self, request, view, obj): - if in_groups(request.user, ['Students']): - student = request.user.student - if isinstance(obj, Student): - return student == obj - elif isinstance(obj, Submission): - return student == obj.student - elif isinstance(obj, Feedback): - return student == obj.of_submission.student - - return False +class IsStudent(permissions.BasePermission): + def has_permission(self, request, view): + user = request.user + return user.is_authenticated() and isinstance(user.get_associated_user(), Student) diff --git a/backend/core/serializers.py b/backend/core/serializers.py index e4c4fa80..c58def52 100644 --- a/backend/core/serializers.py +++ b/backend/core/serializers.py @@ -1,7 +1,17 @@ -from django.contrib.auth.models import User from rest_framework import serializers +from core.models import Student, Submission, Feedback, ExamType from core.models import Feedback, Student, Submission +======= +from rest_framework import serializers +from core.models import Student, Submission, Feedback, ExamType + + +class ExamSerializer(serializers.ModelSerializer): + class Meta: + model = ExamType + fields = ('module_reference', 'total_score', 'pass_score', 'pass_only',) +>>>>>>> First step towards REST + Vue Student Page class FeedbackSerializer(serializers.ModelSerializer): @@ -11,15 +21,20 @@ class FeedbackSerializer(serializers.ModelSerializer): class SubmissionSerializer(serializers.ModelSerializer): - feedback = FeedbackSerializer() + feedback = serializers.ReadOnlyField(source='feedback.text') + score = serializers.ReadOnlyField(source='feedback.score') + type = serializers.ReadOnlyField(source='type.name') + full_score = serializers.ReadOnlyField(source='type.full_score') class Meta: model = Submission - fields = ('seen_by_student', 'text', 'type', 'student', 'feedback') + fields = ('type', 'text', 'feedback', 'score', 'full_score') class StudentSerializer(serializers.ModelSerializer): + name = serializers.ReadOnlyField(source='user.fullname') user = serializers.ReadOnlyField(source='user.username') + exam = ExamSerializer() submissions = SubmissionSerializer(many=True) class Meta: diff --git a/backend/core/urls.py b/backend/core/urls.py index 9f957f39..962f6681 100644 --- a/backend/core/urls.py +++ b/backend/core/urls.py @@ -1,13 +1,15 @@ from django.conf.urls import url from django.contrib.staticfiles.urls import staticfiles_urlpatterns -from rest_framework.urlpatterns import format_suffix_patterns +from rest_framework_jwt.views import obtain_jwt_token from core import views urlpatterns = [ url(r'^api/student/$', views.StudentApiView.as_view()), - url(r'^api/submission/$', views.SubmissionApiView.as_view()), - url(r'^api/feedback/$', views.FeedbackApiView.as_view()), + url(r'^api/student/submission/(?P<pk>[0-9]+)$', views.SubmissionApiView.as_view()), + url(r'^api/student/submission/(?P<pk>[0-9]+)/feedback/$', views.FeedbackApiView.as_view()), + + url(r'^api-token-auth/', obtain_jwt_token) ] urlpatterns += staticfiles_urlpatterns() diff --git a/backend/core/views.py b/backend/core/views.py index 80146573..5ab7f1ef 100644 --- a/backend/core/views.py +++ b/backend/core/views.py @@ -1,28 +1,29 @@ - +from core.serializers import SubmissionSerializer, StudentSerializer, FeedbackSerializer from rest_framework.generics import RetrieveAPIView - -from core.models import Feedback, Student, Submission -from core.serializers import (FeedbackSerializer, StudentSerializer, - SubmissionSerializer) +from core.permissions import IsStudent class StudentApiView(RetrieveAPIView): + permission_classes = (IsStudent,) + def get_object(self): return self.request.user.student serializer_class = StudentSerializer class SubmissionApiView(RetrieveAPIView): - def get_object(self): + permission_classes = (IsStudent,) + + def get_queryset(self): return self.request.user.student.submissions serializer_class = SubmissionSerializer class FeedbackApiView(RetrieveAPIView): + permission_classes = (IsStudent,) + def get_queryset(self): return [submission.feedback for submission in self.request.user.submissions] serializer_class = FeedbackSerializer -class StudentPageView(RetrieveAPIView): - queryset = Student.objects.all() diff --git a/backend/grady/settings/default.py b/backend/grady/settings/default.py index 839caa89..29513984 100644 --- a/backend/grady/settings/default.py +++ b/backend/grady/settings/default.py @@ -11,6 +11,7 @@ https://docs.djangoproject.com/en/1.10/ref/settings/ """ import os +import datetime from django.contrib.messages import constants as messages @@ -143,3 +144,19 @@ AUTH_PASSWORD_VALIDATORS = [] CORS_ORIGIN_WHITELIST = ( 'localhost:8080' ) + +REST_FRAMEWORK = { + 'DEFAULT_PERMISSION_CLASSES': ( + 'rest_framework.permissions.IsAuthenticated', + ), + 'DEFAULT_AUTHENTICATION_CLASSES': ( + 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', + 'rest_framework.authentication.SessionAuthentication', + 'rest_framework.authentication.BasicAuthentication', + ), +} + +JWT_AUTH = { + 'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=600), +} + diff --git a/backend/requirements.txt b/backend/requirements.txt index b5f17075..a6f7f9bd 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,6 +1,7 @@ Django~=1.11.3 django-extensions~=1.7.7 djangorestframework~=3.6.3 +djangorestframework-jwt~=1.11.0 django_compressor~=2.1.1 gunicorn~=19.7.0 psycopg2~=2.7.1 diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 20f09c82..11aee7fd 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,23 +1,20 @@ <template> <div id="app"> - <img src="./assets/logo.png"> <router-view/> </div> </template> <script> export default { - name: 'app' + name: 'app', + components: { + + } } </script> <style> #app { - font-family: 'Avenir', Helvetica, Arial, sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - text-align: center; - color: #2c3e50; - margin-top: 60px; + } </style> diff --git a/frontend/src/assets/brand.png b/frontend/src/assets/brand.png new file mode 100644 index 0000000000000000000000000000000000000000..5dfdb7913e235b0e63d195afc1d27f1b4ad04c86 GIT binary patch literal 46385 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 N002ovPDHLkV1mu|Vxa&4 literal 0 HcmV?d00001 diff --git a/frontend/src/components/HelloWorld.vue b/frontend/src/components/HelloWorld.vue index 7a4afec5..0bdb2f3c 100644 --- a/frontend/src/components/HelloWorld.vue +++ b/frontend/src/components/HelloWorld.vue @@ -1,14 +1,28 @@ <template> - <span>{{msg}}</span> + <div> + <span>{{msg}}</span> + <span>{{token}}</span> + </div> </template> <script> -export default { - name: 'HelloWorld', - data () { - return { - msg: 'Welcome to Your Vue.js App' + import axios from 'axios' + + export default { + name: 'HelloWorld', + data () { + return { + msg: 'Welcome to Your Vue.js App', + token: '' + } + }, + created: function () { + axios.post('http://localhost:8000/api-token-auth/', { + username: 'robin', + password: 'p' + }).then(token => { + this.token = token.data.token + }) } } -} </script> diff --git a/frontend/src/components/Login.vue b/frontend/src/components/Login.vue new file mode 100644 index 00000000..0ea4acc6 --- /dev/null +++ b/frontend/src/components/Login.vue @@ -0,0 +1,62 @@ +<template> + <div class="mx-auto col-md-4 col-xl-2" id="login"> + <img src="../assets/brand.png"/> + <h2>Log in</h2> + <p>Log in to your account to grade stuff!</p> + <div class="aler alert-danger" v-if="error"> + <p>{{ error }}</p> + </div> + <div class="form-group"> + <input + type="text" + class="form-control" + placeholder="Enter your username" + v-model="credentials.username" + /> + </div> + <div class="form-group" @keyup.enter="submit()"> + <input + type="password" + class="form-control" + placeholder="Enter your password" + v-model="credentials.password" + /> + </div> + <button class="btn btn-primary" @click="submit()">Access</button> + </div> +</template> + + +<script> + export default { + name: 'grady-login', + data () { + return { + credentials: { + username: '', + password: '' + }, + error: '' + } + }, + methods: { + submit () { + const credentials = { + username: this.credentials.username, + password: this.credentials.password + } + this.$store.dispatch('getToken', credentials).then(response => { + this.$router.push('/student/') + }) + } + } + } +</script> + + +<style scoped> + #login { + text-align: center; + margin-top: 10%; + } +</style> diff --git a/frontend/src/components/student/Base.vue b/frontend/src/components/student/Base.vue deleted file mode 100644 index 346f7ee0..00000000 --- a/frontend/src/components/student/Base.vue +++ /dev/null @@ -1,13 +0,0 @@ -<template> - -</template> - - -<script> - -</script> - - -<style> - -</style> diff --git a/frontend/src/components/student/ExamInformation.vue b/frontend/src/components/student/ExamInformation.vue new file mode 100644 index 00000000..817cd58c --- /dev/null +++ b/frontend/src/components/student/ExamInformation.vue @@ -0,0 +1,29 @@ +<template> + <table class="table table-info rounded"> + <tbody> + <tr> + <th>Modul</th> + <td>{{ exam.module_reference }}</td> + </tr> + <tr v-if="!exam.pass_only"> + <th>Pass score</th> + <td>{{ exam.pass_score }}</td> + </tr> + <tr v-else> + <th>Pass only!</th> + </tr> + <tr> + <th>Total score</th> + <td>{{ exam.total_score }}</td> + </tr> + </tbody> + </table> +</template> + + +<script> + export default { + name: 'exam-information', + props: ['exam'] + } +</script> diff --git a/frontend/src/components/student/StudentNav.vue b/frontend/src/components/student/StudentNav.vue new file mode 100644 index 00000000..6613a097 --- /dev/null +++ b/frontend/src/components/student/StudentNav.vue @@ -0,0 +1,38 @@ +<template> + <b-navbar toggleable="md" type="light" variant="light"> + <b-navbar-toggle target="nav_collapse"></b-navbar-toggle> + + <b-navbar-brand> + <img src="../../assets/brand.png" width="30" class="d-inline-block align-top"> + Grady + </b-navbar-brand> + + <b-collapse is-nav id="nav_collapse"> + + <b-navbar-nav id="nav-left"> + <b-nav-item class="active" href="#">Results</b-nav-item> + <b-nav-item href="#">Statistics</b-nav-item> + </b-navbar-nav> + + <!-- Right aligned nav items --> + <b-navbar-nav class="ml-auto"> + <b-nav-item>{{ this.$store.state.username }}</b-nav-item> + <router-link to="/"> + <b-button class="btn-dark" @click="logout()" >Signout</b-button> + </router-link> + </b-navbar-nav> + </b-collapse> + </b-navbar> +</template> + + +<script> + export default { + name: 'grady-nav', + methods: { + logout () { + this.$store.dispatch('logout') + } + } + } +</script> diff --git a/frontend/src/components/student/StudentPage.vue b/frontend/src/components/student/StudentPage.vue new file mode 100644 index 00000000..b1e92496 --- /dev/null +++ b/frontend/src/components/student/StudentPage.vue @@ -0,0 +1,57 @@ +<template> + <div> + <grady-nav></grady-nav> + <div class="container-fluid"> + <div class="row justify-content-center my-3"> + <div class="col-md-3"> + <h2 class="my-5">Exam Overview</h2> + <exam-information v-if="doneLoading" :exam="exam"></exam-information> + </div> + <div class="col-md-6 offset-md-1" v-if="doneLoading"> + <h2 class="my-5">Submissions of {{ this.studentData.name }}</h2> + <submission-list :submissions="submissions"></submission-list> + </div> + </div> + </div> + </div> +</template> + + +<script> + import ax from '@/store/api' + import GradyNav from './StudentNav.vue' + import SubmissionList from './SubmissionList.vue' + import ExamInformation from './ExamInformation.vue' + + export default { + components: { + ExamInformation, + SubmissionList, + GradyNav}, + name: 'student-page', + data () { + return { + studentData: {}, + doneLoading: false + } + }, + created: function () { + this.doneLoading = false + ax.get('api/student/').then(response => { + this.studentData = response.data + this.doneLoading = true + }) + }, + computed: { + submissions () { + return this.studentData.submissions + }, + exam () { + return this.studentData.exam + } + } + } +</script> + +<style scoped> +</style> diff --git a/frontend/src/components/student/SubmissionDetail.vue b/frontend/src/components/student/SubmissionDetail.vue deleted file mode 100644 index 9a7264b4..00000000 --- a/frontend/src/components/student/SubmissionDetail.vue +++ /dev/null @@ -1,12 +0,0 @@ -<template> - -</template> - - -<script> - export default { - computed: { - - } - } -</script> diff --git a/frontend/src/components/student/SubmissionList.vue b/frontend/src/components/student/SubmissionList.vue index f4cf766f..3474bfd5 100644 --- a/frontend/src/components/student/SubmissionList.vue +++ b/frontend/src/components/student/SubmissionList.vue @@ -1,33 +1,33 @@ <template> - <ul> - <li v-for="sub in submissions"> - <span>{{sub.type}}</span> - <span>{{sub.text}}</span> - <span>{{sub.feedback}}</span> - </li> - </ul> + <div class="row my-2 justify-content-center"> + <b-table hover :items="submissions" :fields="fields"></b-table> + <div class="alert alert-info">You reached <b>{{ sumScore }}</b> of <b>{{ sumFullScore }}</b> possible points( {{ pointRatio }}% ).</div> + </div> </template> + <script> export default { - data: function () { + name: 'submission-list', + data () { return { - submissions: [] + fields: [ + { key: 'type', sortable: true }, + { key: 'score', label: 'Score', sortable: true }, + { key: 'full_score', sortable: true } + ] } }, - created: function () { - this.getSubmissions() - }, - methods: { - getSubmissions () { - this.$http.get('http://localhost:8000/api/student/1').then(student => { - return Promise.all(student.body.submissions.map(id => { - return this.$http.get(`http://localhost:8000/api/submission/${id}`) - })) - }).then(response => { - console.log(response) - this.submissions = response.map(item => { return item.body }) - }).catch(console.log.bind(console)) + props: ['submissions'], + computed: { + sumScore () { + return this.submissions.map(a => a.score).reduce((a, b) => a + b) + }, + sumFullScore () { + return this.submissions.map(a => a.full_score).reduce((a, b) => a + b) + }, + pointRatio () { + return ((this.sumScore / this.sumFullScore) * 100).toFixed(2) } } } diff --git a/frontend/src/main.js b/frontend/src/main.js index 6dca5db2..565189ce 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -2,16 +2,20 @@ // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from 'vue' import App from './App' +import BootstrapVue from 'bootstrap-vue' import router from './router' -import VueResource from 'vue-resource' +import store from './store/store' +import 'bootstrap-vue/dist/bootstrap-vue.css' +import 'bootstrap/dist/css/bootstrap.css' -Vue.use(VueResource) +Vue.use(BootstrapVue) Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', + store, router, template: '<App/>', components: { App } diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index b00e372a..c29cbc7d 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -1,6 +1,7 @@ import Vue from 'vue' import Router from 'vue-router' -import SubmissionList from '@/components/student/SubmissionList' +import Login from '@/components/Login' +import StudentPage from '@/components/student/StudentPage' Vue.use(Router) @@ -8,8 +9,13 @@ export default new Router({ routes: [ { path: '/', - name: 'Submissions', - component: SubmissionList + name: 'grady-login', + component: Login + }, + { + path: '/student/', + name: 'student-page', + component: StudentPage } ] }) diff --git a/frontend/src/store/api.js b/frontend/src/store/api.js index fd2c9786..368c09c8 100644 --- a/frontend/src/store/api.js +++ b/frontend/src/store/api.js @@ -1,27 +1,7 @@ -import Vue from 'vue' -import VueResource from 'vue-resource' +import axios from 'axios' -Vue.use(VueResource) +var ax = axios.create({ + baseURL: 'http://localhost:8000/' +}) -export default { - get (url, request) { - return Vue.http.get(url, request) - .then((response) => Promise.resolve(response)) - .catch((error) => Promise.reject(error)) - }, - post (url, request) { - return Vue.http.post(url, request) - .then((response) => Promise.resolve(response)) - .catch((error) => Promise.reject(error)) - }, - patch (url, request) { - return Vue.http.patch(url, request) - .then((response) => Promise.resolve(response)) - .catch((error) => Promise.reject(error)) - }, - delete (url, request) { - return Vue.http.delete(url, request) - .then((response) => Promise.resolve(response)) - .catch((error) => Promise.reject(error)) - } -} +export default ax diff --git a/frontend/src/store/store.js b/frontend/src/store/store.js new file mode 100644 index 00000000..150521a0 --- /dev/null +++ b/frontend/src/store/store.js @@ -0,0 +1,39 @@ +import Vuex from 'vuex' +import Vue from 'vue' +import ax from './api' + +Vue.use(Vuex) + +const store = new Vuex.Store({ + state: { + token: '', + loggedIn: false, + username: '' + }, + mutations: { + 'LOGIN': function (state, creds) { + state.token = creds.token + state.loggedIn = true + state.username = creds.username + }, + 'LOGOUT': function (state) { + state.token = '' + state.loggedIn = false + } + }, + actions: { + async getToken (store, credentials) { + const response = await ax.post('api-token-auth/', credentials) + store.commit('LOGIN', { + token: response.data.token, + username: credentials.username + }) + ax.defaults.headers.common['Authorization'] = 'JWT ' + response.data.token + }, + logout (store) { + store.commit('LOGOUT') + } + } +}) + +export default store diff --git a/frontend/yarn.lock b/frontend/yarn.lock index e96d4143..3d843ede 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -272,6 +272,13 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +axios@^0.17.0: + version "0.17.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.17.0.tgz#7da747916db803f761651d6091d708789b953c6a" + dependencies: + follow-redirects "^1.2.3" + is-buffer "^1.1.5" + babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -950,13 +957,15 @@ boom@5.x.x: dependencies: hoek "4.x.x" -bootstrap-vue@^1.0.0-beta.9: - version "1.0.0-beta.9" - resolved "https://registry.yarnpkg.com/bootstrap-vue/-/bootstrap-vue-1.0.0-beta.9.tgz#4e0bc5bcb95a90dc3bec7124ea3ddf5cc4c6ffa6" +bootstrap-vue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bootstrap-vue/-/bootstrap-vue-1.0.0.tgz#65c1d18bce782672c18ba54188e13c2e18725ae0" dependencies: - bootstrap "^4.0.0-beta" + lodash.startcase "^4.4.0" + popper.js "^1.12.6" + vue-functional-data-merge "^1.0.6" -bootstrap@^4.0.0-beta: +bootstrap@4.0.0-beta.2: version "4.0.0-beta.2" resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.0.0-beta.2.tgz#4d67d2aa2219f062cd90bc1247e6747b9e8fd051" @@ -1673,7 +1682,7 @@ debug@2.6.8: dependencies: ms "2.0.0" -debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.6.8: +debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -1683,12 +1692,6 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" -decompress-response@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - dependencies: - mimic-response "^1.0.0" - deep-eql@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" @@ -1852,10 +1855,6 @@ domutils@^1.5.1: dom-serializer "0" domelementtype "1" -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" @@ -2480,6 +2479,12 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" +follow-redirects@^1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.2.5.tgz#ffd3e14cbdd5eaa72f61b6368c1f68516c2a26cc" + dependencies: + debug "^2.6.9" + for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -2685,25 +2690,6 @@ globby@^5.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -got@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" - dependencies: - decompress-response "^3.2.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-plain-obj "^1.1.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - p-cancelable "^0.3.0" - p-timeout "^1.1.1" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - url-parse-lax "^1.0.0" - url-to-options "^1.0.1" - graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -2778,16 +2764,6 @@ has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" -has-symbol-support-x@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz#66ec2e377e0c7d7ccedb07a3a84d77510ff1bc4c" - -has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - dependencies: - has-symbol-support-x "^1.4.1" - has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -3185,10 +3161,6 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -3205,7 +3177,7 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: +is-plain-obj@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -3227,11 +3199,7 @@ is-resolvable@^1.0.0: dependencies: tryit "^1.0.1" -is-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - -is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -3318,13 +3286,6 @@ istanbul@^0.4.0: which "^1.1.1" wordwrap "^1.0.0" -isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" - js-base64@^2.1.9: version "2.3.2" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.3.2.tgz#a79a923666372b580f8e27f51845c6f7e8fbfbaf" @@ -3672,6 +3633,10 @@ lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" +lodash.startcase@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -3726,10 +3691,6 @@ lower-case@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" -lowercase-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - lru-cache@2.2.x: version "2.2.4" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" @@ -3853,10 +3814,6 @@ mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" -mimic-response@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" - minimalistic-assert@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" @@ -4206,10 +4163,6 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-cancelable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -4224,12 +4177,6 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -p-timeout@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.0.tgz#9820f99434c5817868b4f34809ee5291660d5b6c" - dependencies: - p-finally "^1.0.0" - pako@~0.2.0: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" @@ -4415,6 +4362,10 @@ pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" +popper.js@^1.12.6: + version "1.12.6" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.12.6.tgz#91e12a97b07815258b76915d64044e8ac053d426" + portfinder@^1.0.13: version "1.0.13" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" @@ -4696,7 +4647,7 @@ prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" -prepend-http@^1.0.0, prepend-http@^1.0.1: +prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" @@ -5624,10 +5575,6 @@ time-stamp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - timers-browserify@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6" @@ -5788,16 +5735,6 @@ url-loader@^0.5.8: loader-utils "^1.0.2" mime "1.3.x" -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - dependencies: - prepend-http "^1.0.1" - -url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -5877,6 +5814,10 @@ void-elements@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" +vue-functional-data-merge@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/vue-functional-data-merge/-/vue-functional-data-merge-1.0.6.tgz#cde4f0cf3f251f7f0196341156d2c936cca63d40" + vue-hot-reload-api@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.2.0.tgz#9a21b35ced3634434a43ee80efb7350ea8fb206d" @@ -5899,12 +5840,6 @@ vue-loader@^13.3.0: vue-style-loader "^3.0.0" vue-template-es2015-compiler "^1.6.0" -vue-resource@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/vue-resource/-/vue-resource-1.3.4.tgz#9fc0bdf6a2f5cab430129fc99d347b3deae7b099" - dependencies: - got "^7.0.0" - vue-router@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.1.tgz#d9b05ad9c7420ba0f626d6500d693e60092cc1e9" -- GitLab