diff --git a/package-lock.json b/package-lock.json index 7411f16..3a9b10a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "v-emoji-picker": "^2.3.1", "vue": "^2.6.11", "vue-clipboard2": "^0.3.1", + "vue-i18n": "^8.24.4", "vue-resize": "^0.5.0", "vue-router": "^3.2.0", "vue-sanitize": "^0.2.1", @@ -13991,6 +13992,11 @@ "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", "dev": true }, + "node_modules/vue-i18n": { + "version": "8.24.4", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.24.4.tgz", + "integrity": "sha512-RZE94WUAGxEiBAANxQ0pptbRwDkNKNSXl3fnJslpFOxVMF6UkUtMDSuYGuW2blDrVgweIXVpethOVkYoNNT9xw==" + }, "node_modules/vue-loader": { "version": "15.9.6", "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.6.tgz", @@ -26854,6 +26860,11 @@ "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", "dev": true }, + "vue-i18n": { + "version": "8.24.4", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.24.4.tgz", + "integrity": "sha512-RZE94WUAGxEiBAANxQ0pptbRwDkNKNSXl3fnJslpFOxVMF6UkUtMDSuYGuW2blDrVgweIXVpethOVkYoNNT9xw==" + }, "vue-loader": { "version": "15.9.6", "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.6.tgz", diff --git a/package.json b/package.json index 4b2e756..4aa8d5e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "keanuapp-weblite", - "version": "0.1.5", + "version": "0.1.7", "private": true, "scripts": { "serve": "vue-cli-service serve", @@ -33,6 +33,7 @@ "v-emoji-picker": "^2.3.1", "vue": "^2.6.11", "vue-clipboard2": "^0.3.1", + "vue-i18n": "^8.24.4", "vue-resize": "^0.5.0", "vue-router": "^3.2.0", "vue-sanitize": "^0.2.1", diff --git a/package.json.bak b/package.json.bak new file mode 100644 index 0000000..0a05bd1 --- /dev/null +++ b/package.json.bak @@ -0,0 +1,87 @@ +{ + "name": "keanuapp-weblite", + "version": "0.1.6", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "aes-js": "^3.1.2", + "axios": "^0.21.0", + "clean-insights-sdk": "^2.4.1", + "core-js": "^3.6.5", + "data-uri-to-buffer": "^3.0.1", + "dayjs": "^1.10.3", + "fix-webm-duration": "^1.0.0", + "image-resize": "^1.1.5", + "image-size": "^1.0.0", + "intersection-observer": "^0.11.0", + "js-sha256": "^0.9.0", + "json-web-key": "^0.4.0", + "linkifyjs": "^2.1.9", + "material-design-icons-iconfont": "^5.0.1", + "matrix-js-sdk": "^9.4.1", + "md-gum-polyfill": "^1.0.0", + "olm": "https://packages.matrix.org/npm/olm/olm-3.2.1.tgz", + "pretty-bytes": "^5.6.0", + "qrcode": "^1.4.4", + "raw-loader": "^4.0.2", + "recordrtc": "^5.6.2", + "roboto-fontface": "*", + "v-emoji-picker": "^2.3.1", + "vue": "^2.6.11", + "vue-clipboard2": "^0.3.1", + "vue-i18n": "^8.24.4", + "vue-resize": "^0.5.0", + "vue-router": "^3.2.0", + "vue-sanitize": "^0.2.1", + "vue-swipeable-bottom-sheet": "^0.0.5", + "vuetify": "^2.2.11", + "vuex": "^3.5.1", + "vuex-persist": "^3.1.3" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.5.0", + "@vue/cli-plugin-eslint": "~4.5.0", + "@vue/cli-service": "~4.5.0", + "babel-eslint": "^10.1.0", + "eslint": "^6.7.2", + "eslint-plugin-vue": "^6.2.2", + "sass": "^1.19.0", + "sass-loader": "^8.0.0", + "vue-cli-plugin-vuetify": "~2.0.7", + "vue-template-compiler": "^2.6.11", + "vuetify-loader": "^1.3.0" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/essential", + "eslint:recommended" + ], + "parserOptions": { + "parser": "babel-eslint" + }, + "rules": { + "no-unused-vars": [ + "error", + { + "vars": "all", + "args": "after-used", + "ignoreRestSiblings": false, + "argsIgnorePattern": "[iI]gnored" + } + ] + } + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ] +} diff --git a/src/App.vue b/src/App.vue index 1bad6de..244e055 100644 --- a/src/App.vue +++ b/src/App.vue @@ -7,6 +7,8 @@ diff --git a/src/components/CreatedRoomWelcomeHeader.vue b/src/components/CreatedRoomWelcomeHeader.vue index aa91351..7197e57 100644 --- a/src/components/CreatedRoomWelcomeHeader.vue +++ b/src/components/CreatedRoomWelcomeHeader.vue @@ -1,12 +1,12 @@ diff --git a/src/components/DeviceList.vue b/src/components/DeviceList.vue index ba9fb36..097ac5d 100644 --- a/src/components/DeviceList.vue +++ b/src/components/DeviceList.vue @@ -1,6 +1,6 @@ - + - You are joining as: + {{$t('join.joining_as')}}
@@ -97,7 +97,7 @@ @click.stop="handleJoin" :loading="loading" v-if="!currentUser" - >Join as guest{{$t('join.join_guest')}} Join room{{$t('join.join')}} - Change password + {{$t('profile.change_password')}} - - - + + +
{{ passwordErrorMessage }}
- Cancel + {{$t('menu.cancel')}} Ok{{$t('menu.ok')}}
@@ -70,14 +68,14 @@ - Display name + {{$t('profile.display_name')}} - Cancel + {{$t('menu.cancel')}} Ok{{$t('menu.ok')}} diff --git a/src/components/PurgeRoomDialog.vue b/src/components/PurgeRoomDialog.vue index f43be6a..37aa355 100644 --- a/src/components/PurgeRoomDialog.vue +++ b/src/components/PurgeRoomDialog.vue @@ -3,10 +3,9 @@
@@ -18,7 +17,7 @@ block class="text-button" @click="showDialog = false" - >Cancel{{$t('menu.cancel')}} @@ -28,7 +27,7 @@ block class="filled-button" @click.stop="onPurgeRoom()" - >Purge room{{$t('purge_room.button')}} diff --git a/src/components/QuoteView.vue b/src/components/QuoteView.vue index c675c01..370fead 100644 --- a/src/components/QuoteView.vue +++ b/src/components/QuoteView.vue @@ -25,8 +25,6 @@ + + \ No newline at end of file diff --git a/src/components/messages/RoomAvatarChanged.vue b/src/components/messages/RoomAvatarChanged.vue index 62b06f8..7645e80 100644 --- a/src/components/messages/RoomAvatarChanged.vue +++ b/src/components/messages/RoomAvatarChanged.vue @@ -1,7 +1,7 @@ diff --git a/src/components/messages/RoomCreated.vue b/src/components/messages/RoomCreated.vue new file mode 100644 index 0000000..9603e0f --- /dev/null +++ b/src/components/messages/RoomCreated.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/src/components/messages/RoomEncrypted.vue b/src/components/messages/RoomEncrypted.vue new file mode 100644 index 0000000..669b6e7 --- /dev/null +++ b/src/components/messages/RoomEncrypted.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/src/components/messages/RoomHistoryVisibility.vue b/src/components/messages/RoomHistoryVisibility.vue index b3cfc26..19892f4 100644 --- a/src/components/messages/RoomHistoryVisibility.vue +++ b/src/components/messages/RoomHistoryVisibility.vue @@ -1,7 +1,7 @@ @@ -15,13 +15,13 @@ export default { const visibility = event.getContent().history_visibility; switch (visibility) { case "world_readable": - return "readable by anyone"; + return this.$t('message.room_history_world_readable'); case "shared": - return "readable to all members in the room"; + return this.$t('message.room_history_shared'); case "invited": - return "readable to members from when they were invited"; + return this.$t('message.room_history_invited'); case "joined": - return "readable to members from when they joined"; + return this.$t('message.room_history_joined'); } return visibility; } diff --git a/src/components/messages/RoomJoinRules.vue b/src/components/messages/RoomJoinRules.vue index f350988..f80dbff 100644 --- a/src/components/messages/RoomJoinRules.vue +++ b/src/components/messages/RoomJoinRules.vue @@ -1,7 +1,7 @@ @@ -15,9 +15,9 @@ export default { const joinRule = event.getContent().join_rule; switch (joinRule) { case "invite": - return "invite only"; + return this.$t('message.room_joinrule_invite'); case "public": - return "public"; + return this.$t('message.room_joinrule_public'); } return joinRule; } diff --git a/src/components/messages/RoomNameChanged.vue b/src/components/messages/RoomNameChanged.vue index ac3e30f..ba152b8 100644 --- a/src/components/messages/RoomNameChanged.vue +++ b/src/components/messages/RoomNameChanged.vue @@ -1,8 +1,7 @@ diff --git a/src/components/messages/RoomPowerLevelsChanged.vue b/src/components/messages/RoomPowerLevelsChanged.vue new file mode 100644 index 0000000..14df1ff --- /dev/null +++ b/src/components/messages/RoomPowerLevelsChanged.vue @@ -0,0 +1,86 @@ + + + + + \ No newline at end of file diff --git a/src/components/messages/RoomTopicChanged.vue b/src/components/messages/RoomTopicChanged.vue index d669bb3..6ac9992 100644 --- a/src/components/messages/RoomTopicChanged.vue +++ b/src/components/messages/RoomTopicChanged.vue @@ -1,8 +1,7 @@ diff --git a/src/components/messages/messageMixin.js b/src/components/messages/messageMixin.js index 7151bc2..faa4351 100644 --- a/src/components/messages/messageMixin.js +++ b/src/components/messages/messageMixin.js @@ -2,7 +2,7 @@ import QuickReactions from './QuickReactions.vue'; var linkify = require('linkifyjs'); var linkifyHtml = require('linkifyjs/html'); linkify.options.defaults.className = "link"; -linkify.options.defaults.target = null; +linkify.options.defaults.target = { url: '_blank' }; export default { components: { @@ -102,7 +102,7 @@ export default { } // We don't have the original text (at the moment at least) - return ""; + return this.$t('fallbacks.original_text'); } return null; }, @@ -169,7 +169,7 @@ export default { */ stateEventDisplayName(event) { if (event.getSender() == this.$matrix.currentUserId) { - return "You"; + return this.$t('message.you'); } if (this.room) { const member = this.room.getMember(event.getSender()); diff --git a/src/main.js b/src/main.js index 4b6ed62..9b17b0e 100644 --- a/src/main.js +++ b/src/main.js @@ -13,6 +13,7 @@ import VueResize from 'vue-resize'; import 'vue-resize/dist/vue-resize.css'; import VueClipboard from 'vue-clipboard2' import VueSanitize from "vue-sanitize"; +import i18n from './plugins/lang'; var defaultOptions = VueSanitize.defaults; defaultOptions.disallowedTagsMode = "recursiveEscape"; @@ -153,6 +154,7 @@ new Vue({ vuetify, store, router, + i18n, matrix, cleaninsights, render: h => h(App) diff --git a/src/plugins/lang.js b/src/plugins/lang.js new file mode 100644 index 0000000..fa2c749 --- /dev/null +++ b/src/plugins/lang.js @@ -0,0 +1,24 @@ +import Vue from 'vue' +import VueI18n from 'vue-i18n' + +Vue.use(VueI18n) + +var messages = {} + +function importAll(r) { + return r.keys().map(res => { + // Remove"./" + const parts = res.split("/"); + const locale = parts[1].split(".")[0]; + messages[locale] = r(res).default; + }); +} +importAll(require.context('@/assets/translations/', true, /\.js$/)); + + +export default new VueI18n({ + locale: 'en', + fallbackLocale: 'en', + silentFallbackWarn: true, + messages: messages +}) \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js index 8a088b0..a69fbc1 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -82,7 +82,7 @@ const router = new VueRouter({ }); router.beforeEach((to, from, next) => { - const publicPages = ['/login']; + const publicPages = ['/login','/createroom']; var authRequired = !publicPages.includes(to.path); const loggedIn = router.app.$store.state.auth.user; diff --git a/src/services/matrix.service.js b/src/services/matrix.service.js index c68025f..00d4013 100644 --- a/src/services/matrix.service.js +++ b/src/services/matrix.service.js @@ -269,6 +269,19 @@ export default { }) }, + /** + * Returns a promise that will log us into the Matrix. + * + * Will use a real account, if we have one, otherwise will create + * a random account. + */ + getLoginPromise() { + if (this.ready) { + return Promise.resolve(this.currentUser); + } + return this.$store.dispatch("login", this.currentUser || new User(config.defaultServer, "", "", true)); + }, + addMatrixClientListeners(client) { if (client) { client.on("event", this.onEvent); diff --git a/update_version.sh b/update_version.sh new file mode 100755 index 0000000..157f38c --- /dev/null +++ b/update_version.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env sh +# Get version from file +echo "Get version from package.json" +v=`egrep "^[[:space:]]*\"version\"" package.json | cut -d \" -f 4` +# Increment +echo "Increment value" +v=`echo "${v%.*}.$((${v##*.}+1))"` +# Update file +echo "Update file" +sed -i .bak "s/\(\"version\": \"\)[^\"]*\(\"\)/\1${v}\2/g" package.json diff --git a/vue.config.js b/vue.config.js index eac7f5d..5514cb3 100644 --- a/vue.config.js +++ b/vue.config.js @@ -7,7 +7,15 @@ module.exports = { ? './' : './', - devServer: { - https: true - }, + chainWebpack: config => { + config.plugin('html').tap(args => { + var c = require("./src/assets/config.json"); + args[0].title = c.appName; + return args; + }) + }, + + devServer: { + //https: true + }, } \ No newline at end of file