diff --git a/.eslintrc.js b/.eslintrc.js
index 9f2a053..fb2c5ee 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -4,12 +4,12 @@ module.exports = {
node: true,
},
plugins: [
- 'vue-a11y',
+ 'vuejs-accessibility',
],
extends: [
'plugin:vue/essential',
'@vue/airbnb',
- 'plugin:vue-a11y/base',
+ 'plugin:vuejs-accessibility/recommended',
],
parserOptions: {
parser: 'babel-eslint',
@@ -26,9 +26,11 @@ module.exports = {
'dot-location': 'off',
'comma-dangle': 'off',
'keyword-spacing': 'off',
- 'vue-a11y/media-has-caption': 'off',
- 'vue-a11y/no-autofocus': 'off',
- 'vue-a11y/click-events-have-key-events': 'off',
+ 'vuejs-accessibility/anchor-has-content': 'off',
+ 'vuejs-accessibility/heading-has-content': 'off',
+ 'vue/multi-word-component-names': 'off',
+ 'vuejs-accessibility/no-autofocus': 'off',
+ 'vuejs-accessibility/media-has-caption': 'off',
},
overrides: [
{
diff --git a/package.json b/package.json
index 7e2f15a..e78f97b 100644
--- a/package.json
+++ b/package.json
@@ -17,36 +17,38 @@
"lint": "vue-cli-service lint"
},
"dependencies": {
+ "@vue/compat": "^3.2.24",
"core-js": "^3.6.5",
- "eslint-plugin-vue-a11y": "^0.0.31",
"palava-client": "^2.2.1",
"register-service-worker": "^1.7.1",
- "vue": "^2.6.11",
- "vue-i18n": "^8.17.0",
+ "vue": "^3.2.24",
+ "vue-i18n": "^9.0.0",
"vue-inline-svg": "^1.3.1",
"vue-meta": "^2.3.3",
- "vue-router": "^3.1.6",
+ "vue-router": "^4.0.12",
"yyid": "2"
},
"devDependencies": {
- "@vue/cli-plugin-babel": "~4.3.0",
- "@vue/cli-plugin-e2e-nightwatch": "~4.3.0",
- "@vue/cli-plugin-eslint": "~4.3.0",
- "@vue/cli-plugin-router": "~4.3.0",
- "@vue/cli-plugin-unit-mocha": "~4.3.0",
- "@vue/cli-plugin-vuex": "~4.3.0",
- "@vue/cli-service": "~4.3.0",
- "@vue/eslint-config-airbnb": "^5.0.2",
- "@vue/test-utils": "1.0.0-beta.31",
+ "@babel/eslint-parser": "^7.16.3",
+ "@vue/cli-plugin-babel": "~4.5.15",
+ "@vue/cli-plugin-e2e-nightwatch": "~4.5.15",
+ "@vue/cli-plugin-eslint": "~4.5.15",
+ "@vue/cli-plugin-router": "~4.5.15",
+ "@vue/cli-plugin-unit-mocha": "~4.5.15",
+ "@vue/cli-plugin-vuex": "~4.5.15",
+ "@vue/cli-service": "~4.5.15",
+ "@vue/compiler-sfc": "^3.2.24",
+ "@vue/eslint-config-airbnb": "^6.0.0",
+ "@vue/test-utils": "^1.3.0",
"babel-eslint": "^10.1.0",
"chai": "^4.1.2",
"chromedriver": "88",
- "eslint": "^6.7.2",
- "eslint-plugin-import": "^2.20.2",
- "eslint-plugin-vue": "^6.2.2",
- "geckodriver": "^1.19.1",
- "node-sass": "^4.12.0",
- "sass-loader": "^8.0.2",
- "vue-template-compiler": "^2.6.11"
+ "eslint": "^7.0.0",
+ "eslint-plugin-import": "^2.25.3",
+ "eslint-plugin-vue": "^8.2.0",
+ "eslint-plugin-vuejs-accessibility": "^1.1.0",
+ "geckodriver": "^2.0.4",
+ "sass": "^1.44.0",
+ "sass-loader": "^10.0.0"
}
}
diff --git a/src/App.vue b/src/App.vue
index 56c638a..26a6ad8 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -25,7 +25,7 @@ export default {
src: url('/fonts/WorkSans-Regular.woff2') format('woff2');
}
-html, body {
+html, body, #app {
margin: 0;
padding: 0;
height: 100%;
diff --git a/src/components/Navigation.vue b/src/components/Navigation.vue
index 31944c3..3320407 100644
--- a/src/components/Navigation.vue
+++ b/src/components/Navigation.vue
@@ -3,7 +3,10 @@
-
- {{ infoPage.title }}
+ {{ infoPage.title }}
diff --git a/src/components/Party.vue b/src/components/Party.vue
index 44383be..318432a 100644
--- a/src/components/Party.vue
+++ b/src/components/Party.vue
@@ -354,17 +354,17 @@ export default {
.top-control {
position: absolute;
z-index: 1000;
- top: $small-control-size / 3;
+ top: calc($small-control-size / 3);
@media (min-width: $mobile) {
- top: $large-control-size / 3;
+ top: calc($large-control-size / 3);
}
display: flex;
align-items: center;
.logo-control, .control {
- margin-left: $small-control-size / 3;
+ margin-left: calc($small-control-size / 3);
@media (min-width: $mobile) {
- margin-left: $large-control-size / 3;
+ margin-left: calc($large-control-size / 3);
}
}
@@ -413,9 +413,9 @@ export default {
}
&--switch-language > * {
- font-size: $small-control-size / 2.2;
+ font-size: calc($small-control-size / 2.2);
@media (min-width: $mobile) {
- font-size: $large-control-size / 2.2;
+ font-size: calc($large-control-size / 2.2);
}
transform: translate(-1px, 0px);
text-transform: uppercase;
diff --git a/src/components/Peer.vue b/src/components/Peer.vue
index a7a0eb5..118020f 100644
--- a/src/components/Peer.vue
+++ b/src/components/Peer.vue
@@ -436,13 +436,13 @@ export default {
}
&--in-lobby {
- bottom: $small-control-size / 8;
- right: $small-control-size / 8;
+ bottom: calc($small-control-size / 8);
+ right: calc($small-control-size / 8);
.menu-control {
height: $small-control-size;
width: $small-control-size;
- font-size: $small-control-size / 2;
- margin: $small-control-size / 8;
+ font-size: calc($small-control-size / 2);
+ margin: calc($small-control-size / 8);
& > * {
padding: 2px;
@@ -451,21 +451,21 @@ export default {
}
&--on-stage {
- bottom: $small-control-size / 8;
- right: $small-control-size / 8;
+ bottom: calc($small-control-size / 8);
+ right: calc($small-control-size / 8);
@media (min-width: $mobile) {
- bottom: $large-control-size / 8;
- right: $large-control-size / 8;
+ bottom: calc($large-control-size / 8);
+ right: calc($large-control-size / 8);
}
.menu-control {
height: $small-control-size;
width: $small-control-size;
- margin: $small-control-size / 8;
+ margin: calc($small-control-size / 8);
@media (min-width: $mobile) {
height: $large-control-size;
width: $large-control-size;
- margin: $large-control-size / 8;
+ margin: calc($large-control-size / 8);
}
}
}
diff --git a/src/components/PeerStatus.vue b/src/components/PeerStatus.vue
index 62c8715..234e8ba 100644
--- a/src/components/PeerStatus.vue
+++ b/src/components/PeerStatus.vue
@@ -1,5 +1,5 @@
-
+
diff --git a/src/components/Stream.vue b/src/components/Stream.vue
index d4516c5..d7fd273 100644
--- a/src/components/Stream.vue
+++ b/src/components/Stream.vue
@@ -10,6 +10,7 @@
'media--orientation-unknown': this.status === 'video' && this.orientation === 'unknown',
}"
@click="$emit('click')"
+ @keypress.enter="$emit('click')"
/>
diff --git a/src/css/styles.scss b/src/css/styles.scss
index 1c10eb6..fa3dd0e 100644
--- a/src/css/styles.scss
+++ b/src/css/styles.scss
@@ -192,9 +192,9 @@ $lobby-border-radius: 0px;
position: absolute;
height: $size;
width: $size;
- font-size: $size / 1.7;
- top: $size / 4;
- right: $size / 4;
+ font-size: calc($size / 1.7);
+ top: calc($size / 4);
+ right: calc($size / 4);
fill: $action-1;
}
diff --git a/src/main.js b/src/main.js
index 29ad0a9..9519401 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,5 +1,5 @@
-import Vue from 'vue'
-import VueI18n from 'vue-i18n'
+import { createApp } from 'vue'
+import { createI18n } from 'vue-i18n'
import VueMeta from 'vue-meta'
import { InlineSvgPlugin } from 'vue-inline-svg'
@@ -10,24 +10,20 @@ import config from './config'
import messages from './i18nStrings'
import { detectLanguage } from './support'
-Vue.config.productionTip = false
-Vue.use(VueI18n)
-Vue.use(VueMeta, {
- refreshOnceOnNavigation: true,
-})
-Vue.use(InlineSvgPlugin)
-
const language = detectLanguage()
const locale = language && language.startsWith('de') ? 'de' : config.defaultLocale
-const i18n = new VueI18n({
+const i18n = createI18n({
locale,
fallbackLocale: config.defaultLocale,
messages,
})
-new Vue({
- router,
- i18n,
- render: (h) => h(App),
-}).$mount('#app')
+const app = createApp(App)
+app
+ .use(router)
+ .use(i18n)
+ .use(VueMeta, { refreshOnceOnNavigation: true, })
+ .use(InlineSvgPlugin)
+
+app.mount('#app')
diff --git a/src/router/index.js b/src/router/index.js
index b9c0a90..25d8114 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -1,5 +1,4 @@
-import Vue from 'vue'
-import VueRouter from 'vue-router'
+import { createRouter, createWebHistory } from 'vue-router'
import Home from '@/views/Home.vue'
import Room from '@/views/Room.vue'
@@ -11,8 +10,6 @@ import { escapeRegex } from '@/support'
const validInfoPages = i18nStrings.en.infoPages.map((ip) => escapeRegex(ip.id))
-Vue.use(VueRouter)
-
const routes = [
{
path: '/',
@@ -38,10 +35,9 @@ const routes = [
},
];
-const router = new VueRouter({
- mode: 'history',
- base: process.env.BASE_URL,
- routes,
-});
+const router = createRouter({
+ history: createWebHistory(process.env.BASE_URL),
+ routes
+})
export default router
diff --git a/src/views/Room.vue b/src/views/Room.vue
index 3c38bd9..115b7e3 100644
--- a/src/views/Room.vue
+++ b/src/views/Room.vue
@@ -6,7 +6,7 @@