diff --git a/gulpfile.ts b/gulpfile.ts index bcd50890e..660dfb013 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -5,7 +5,7 @@ import * as fs from 'fs'; import * as gulp from 'gulp'; import * as rimraf from 'rimraf'; -import * as replace from 'gulp-replace'; +const replace = require('gulp-replace'); const terser = require('gulp-terser'); const cssnano = require('gulp-cssnano'); diff --git a/locales/de-DE.yml b/locales/de-DE.yml index f3e01e1ea..4ed334337 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -704,6 +704,7 @@ editCode: "Code bearbeiten" apply: "Anwenden" receiveAnnouncementFromInstance: "E-Mail-Benachrichtigungen von dieser Instanz empfangen" emailNotification: "E-Mail-Benachrichtigungen" +publish: "Veröffentlichen" inChannelSearch: "In Kanal suchen" useReactionPickerForContextMenu: "Reaktionsauswahl durch Rechtsklick öffnen" typingUsers: "{users} ist/sind am schreiben..." @@ -739,7 +740,15 @@ switch: "Wechseln" noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert." noBotProtectionWarning: "Bot-Schutz ist nicht konfiguriert." configure: "Konfigurieren" +postToGallery: "Beitrag zu Galerie hinzufügen" +gallery: "Galerie" +recentPosts: "Neue Beiträge" +popularPosts: "Beliebte Beiträge" +shareWithNote: "Mit Notiz teilen" _gallery: + my: "Meine Galerie" + liked: "Beiträge, die mir gefallen" + like: "Gefällt mir" unlike: "\"Gefällt mir\" entfernen" _email: _follow: diff --git a/locales/en-US.yml b/locales/en-US.yml index 4fd1b89dc..f023409d5 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -704,6 +704,7 @@ editCode: "Edit code" apply: "Apply" receiveAnnouncementFromInstance: "Receive Email notifications from this instance" emailNotification: "Email notifications" +publish: "Publish" inChannelSearch: "Search in channel" useReactionPickerForContextMenu: "Open reaction picker on right-click" typingUsers: "{users} is/are typing..." @@ -740,7 +741,15 @@ switch: "Switch" noMaintainerInformationWarning: "Maintainer information is not configured." noBotProtectionWarning: "Bot protection is not configured." configure: "Configure" +postToGallery: "Post to Gallery" +gallery: "Gallery" +recentPosts: "Recent posts" +popularPosts: "Popular posts" +shareWithNote: "Share with note" _gallery: + my: "My Gallery" + liked: "Liked Posts" + like: "Like" unlike: "Undo like" _email: _follow: diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index f8c6c0762..dcac32e3e 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -138,6 +138,7 @@ flagAsBotDescription: "Si ce compte est géré de manière automatisée , défin flagAsCat: "Ce compte est un chat" flagAsCatDescription: "Activer l'option \" Je suis un chat \" pour ce compte." autoAcceptFollowed: "Accepter automatiquement les demandes d’abonnement venant d’utilisateur·rice·s que vous suivez" +addAccount: "Ajouter un compte" loginFailed: "Échec de la connexion" showOnRemote: "Voir sur l’instance distante" general: "Général" @@ -451,6 +452,7 @@ category: "Catégorie" tags: "Étiquettes" docSource: "Source de ce document" createAccount: "Créer un compte" +existingAccount: "Compte existant" regenerate: "Générer à nouveau" fontSize: "Taille de la police" noFollowRequests: "Vous n’avez aucune demande d’abonnement en attente" @@ -701,6 +703,7 @@ editCode: "Modifier le code" apply: "Appliquer" receiveAnnouncementFromInstance: "Recevoir les messages d'information de l'instance" emailNotification: "Notifications par mail" +publish: "Public" inChannelSearch: "Chercher dans le canal" useReactionPickerForContextMenu: "Clic-droit pour ouvrir le panneau de réactions" typingUsers: "{users} est en train d'écrire" @@ -731,7 +734,20 @@ disabled: "Désactivé" quickAction: "Actions rapides" user: "Utilisateur·rice·s" administration: "Gestion" +accounts: "Comptes" +switch: "Remplacer" +noMaintainerInformationWarning: "Informations administrateur non configurées." +noBotProtectionWarning: "La protection contre les bots n'est pas configurée." +configure: "Configurer" +postToGallery: "Publier dans la galerie" +gallery: "Galerie" +recentPosts: "Les plus récentes" +popularPosts: "Les plus consultées" +shareWithNote: "Partager dans une note" _gallery: + my: "Mes publications" + liked: " Publications que j'ai aimées" + like: "J'aime" unlike: "Je n’aime pas" _email: _follow: diff --git a/locales/it-IT.yml b/locales/it-IT.yml index 61e204cce..b96f3c99a 100644 --- a/locales/it-IT.yml +++ b/locales/it-IT.yml @@ -136,6 +136,7 @@ flagAsBotDescription: "Se l'account esegue principalmente operazioni automatiche flagAsCat: "Io sono un gatto" flagAsCatDescription: "Abilita l'opzione \"Io sono un gatto\" per l'account." autoAcceptFollowed: "Accetta automaticamente le richieste di follow da utenti che già segui" +addAccount: "Aggiungi account" loginFailed: "Accesso non riuscito" showOnRemote: "Sfoglia sull'istanza remota" general: "Generali" @@ -439,6 +440,7 @@ category: "Categoria" tags: "Tag" docSource: "Sorgente della scheda" createAccount: "Crea il tuo account" +existingAccount: "Account esistente" regenerate: "Generare di nuovo" fontSize: "Dimensione carattere" noFollowRequests: "Non hai alcuna richiesta di follow" @@ -653,6 +655,7 @@ capacity: "Capacità" editCode: "Modifica codice" apply: "Applica" emailNotification: "Eventi per notifiche via mail" +publish: "Pubblico" inChannelSearch: "Cerca in canale" useReactionPickerForContextMenu: "Cliccare sul tasto destro per aprire il pannello di reazioni" typingUsers: "{users} sta(nno) scrivendo" @@ -683,8 +686,21 @@ disabled: "Inattivo" quickAction: "Azioni rapide" user: "Utente" administration: "Gestione" +accounts: "Account" +switch: "Sostituisci" +noMaintainerInformationWarning: "Le informazioni amministratore non sono impostate." +noBotProtectionWarning: "Nessuna protezione impostata contro i bot." +configure: "Imposta" +postToGallery: "Pubblicare nella galleria" +gallery: "Galleria" +recentPosts: "Le più recenti" +popularPosts: "Le più visualizzate" +shareWithNote: "Condividere in nota" _gallery: - unlike: "Togli Mi piace" + my: "Le mie pubblicazioni" + liked: "Pubblicazioni che mi piacciono" + like: "Mi piace!" + unlike: "Non mi piace più" _email: _follow: title: "Ha iniziato a seguirti" diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 44e8a13cb..7b61c2f0a 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -726,6 +726,7 @@ active: "최근에 활동함" offline: "오프라인" user: "유저" administration: "관리" +gallery: "갤러리" _gallery: unlike: "좋아요 해제" _email: diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index bf84fb6f1..b53be8d11 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -704,6 +704,7 @@ editCode: "编辑代码" apply: "应用" receiveAnnouncementFromInstance: "从实例接收通知" emailNotification: "邮件通知" +publish: "发布" inChannelSearch: "频道内搜索" useReactionPickerForContextMenu: "单击右键打开回应工具栏" typingUsers: "{users}正在输入" @@ -741,7 +742,15 @@ switch: "切换" noMaintainerInformationWarning: "管理人员信息未设置。" noBotProtectionWarning: "Bot保护未设置。" configure: "设置" +postToGallery: "发送到图库" +gallery: "图库" +recentPosts: "最新发布" +popularPosts: "热门投稿" +shareWithNote: "在帖子中分享" _gallery: + my: "我的图库" + liked: "喜欢的图片" + like: "喜欢❤" unlike: "取消赞" _email: _follow: diff --git a/package.json b/package.json index 950404901..561c4d08b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo ", - "version": "12.79.0", + "version": "12.79.1", "codename": "indigo", "repository": { "type": "git", @@ -47,16 +47,15 @@ "@sinonjs/fake-timers": "7.0.5", "@syuilo/aiscript": "0.11.1", "@types/bcryptjs": "2.4.2", - "@types/bull": "3.15.0", + "@types/bull": "3.15.1", "@types/cbor": "5.0.1", "@types/dateformat": "3.0.1", "@types/escape-regexp": "0.0.0", "@types/glob": "7.1.3", "@types/gulp": "4.0.8", "@types/gulp-rename": "2.0.0", - "@types/gulp-replace": "0.0.31", "@types/is-url": "1.2.28", - "@types/js-yaml": "4.0.0", + "@types/js-yaml": "4.0.1", "@types/jsdom": "16.2.10", "@types/jsonld": "1.5.5", "@types/katex": "0.11.0", @@ -107,31 +106,31 @@ "@typescript-eslint/parser": "4.22.0", "@vue/compiler-sfc": "3.0.11", "abort-controller": "3.0.0", - "apexcharts": "3.26.0", + "apexcharts": "3.26.1", "autobind-decorator": "2.4.0", "autosize": "4.0.2", "autwh": "0.1.0", - "aws-sdk": "2.887.0", + "aws-sdk": "2.892.0", "bcryptjs": "2.4.3", "blurhash": "1.1.3", "broadcast-channel": "3.5.3", - "bull": "3.22.0", + "bull": "3.22.3", "cafy": "15.2.1", "cbor": "7.0.5", - "chalk": "4.1.0", + "chalk": "4.1.1", "chart.js": "2.9.4", "cli-highlight": "2.1.11", "commander": "7.2.0", "concurrently": "6.0.2", "content-disposition": "0.5.3", - "core-js": "3.10.1", + "core-js": "3.11.0", "crc-32": "1.2.0", - "css-loader": "5.2.1", + "css-loader": "5.2.4", "cssnano": "5.0.1", "dateformat": "4.5.1", "diskusage": "1.1.3", "escape-regexp": "0.0.1", - "eslint": "7.24.0", + "eslint": "7.25.0", "eslint-plugin-vue": "7.9.0", "eventemitter3": "4.0.7", "feed": "4.2.2", @@ -142,7 +141,7 @@ "gulp": "4.0.2", "gulp-cssnano": "2.1.3", "gulp-rename": "2.0.0", - "gulp-replace": "1.0.0", + "gulp-replace": "1.1.1", "gulp-terser": "2.0.1", "gulp-tslint": "8.1.4", "hard-source-webpack-plugin": "0.13.1", @@ -160,7 +159,7 @@ "json5-loader": "4.0.1", "jsonld": "4.0.1", "jsrsasign": "8.0.20", - "katex": "0.13.2", + "katex": "0.13.3", "koa": "2.13.1", "koa-bodyparser": "4.3.0", "koa-favicon": "2.1.0", @@ -172,7 +171,7 @@ "koa-views": "7.0.1", "langmap": "0.0.16", "lookup-dns-cache": "2.1.0", - "markdown-it": "12.0.5", + "markdown-it": "12.0.6", "markdown-it-anchor": "7.1.0", "matter-js": "0.17.1", "mfm-js": "0.16.3", @@ -188,7 +187,7 @@ "parse5": "6.0.1", "pg": "8.6.0", "portscanner": "2.2.0", - "postcss": "8.2.10", + "postcss": "8.2.12", "postcss-loader": "5.2.0", "prismjs": "1.23.0", "probe-image-size": "7.1.0", @@ -202,7 +201,7 @@ "ratelimiter": "3.4.1", "re2": "1.15.9", "reconnecting-websocket": "4.4.0", - "redis": "3.1.1", + "redis": "3.1.2", "redis-lock": "0.1.4", "reflect-metadata": "0.1.13", "regenerator-runtime": "0.13.7", @@ -212,7 +211,7 @@ "rimraf": "3.0.2", "rndstr": "1.0.0", "s-age": "1.1.2", - "sass": "1.32.8", + "sass": "1.32.11", "sass-loader": "11.0.1", "seedrandom": "3.0.5", "sharp": "0.28.1", @@ -228,9 +227,9 @@ "throttle-debounce": "3.0.1", "tinycolor2": "1.4.2", "tmp": "0.2.1", - "ts-loader": "8.1.0", + "ts-loader": "9.1.1", "ts-node": "9.1.1", - "tsc-alias": "1.2.9", + "tsc-alias": "1.2.10", "tsconfig-paths": "3.9.0", "tslint": "6.1.3", "tslint-sonarts": "1.9.0", @@ -250,15 +249,15 @@ "vue-svg-loader": "0.17.0-beta.2", "vuedraggable": "4.0.1", "web-push": "3.4.4", - "webpack": "5.33.2", + "webpack": "5.35.1", "webpack-cli": "4.6.0", "websocket": "1.0.34", - "ws": "7.4.4", + "ws": "7.4.5", "xev": "2.0.1" }, "devDependencies": { - "@types/chai": "4.2.15", - "@types/fluent-ffmpeg": "2.1.16", + "@types/chai": "4.2.16", + "@types/fluent-ffmpeg": "2.1.17", "chai": "4.3.4", "cross-env": "7.0.3" } diff --git a/src/client/components/launch-pad.vue b/src/client/components/launch-pad.vue index e66bbd73e..58b74bdae 100644 --- a/src/client/components/launch-pad.vue +++ b/src/client/components/launch-pad.vue @@ -16,16 +16,16 @@
- +
{{ $ts.help }}
- +
{{ $t('aboutX', { x: instanceName }) }}
- - + +
{{ $ts.aboutMisskey }}
@@ -101,6 +101,7 @@ export default defineComponent({ flex-direction: column; align-items: center; justify-content: center; + vertical-align: bottom; width: 128px; height: 128px; border-radius: var(--radius); @@ -117,6 +118,7 @@ export default defineComponent({ > .icon { font-size: 26px; + height: 32px; } > .text { diff --git a/src/client/pages/about.vue b/src/client/pages/about.vue index 4f70998ee..bdd4c7882 100644 --- a/src/client/pages/about.vue +++ b/src/client/pages/about.vue @@ -1,39 +1,57 @@ @@ -45,9 +63,12 @@ import FormLink from '@client/components/form/link.vue'; import FormBase from '@client/components/form/base.vue'; import FormGroup from '@client/components/form/group.vue'; import FormKeyValueView from '@client/components/form/key-value-view.vue'; +import FormTextarea from '@client/components/form/textarea.vue'; +import FormSuspense from '@client/components/form/suspense.vue'; import * as os from '@client/os'; import number from '@client/filters/number'; import * as symbols from '@client/symbols'; +import { host } from '@client/config'; export default defineComponent({ components: { @@ -55,6 +76,8 @@ export default defineComponent({ FormGroup, FormLink, FormKeyValueView, + FormTextarea, + FormSuspense, }, data() { @@ -63,24 +86,17 @@ export default defineComponent({ title: this.$ts.instanceInfo, icon: 'fas fa-info-circle' }, + host, version, instanceName, stats: null, + initStats: () => os.api('stats', { + }).then((stats) => { + this.stats = stats; + }) } }, - computed: { - meta() { - return this.$instance; - }, - }, - - created() { - os.api('stats').then(stats => { - this.stats = stats; - }); - }, - methods: { number } @@ -88,18 +104,20 @@ export default defineComponent({ diff --git a/src/client/pages/gallery/post.vue b/src/client/pages/gallery/post.vue index 86fae9988..9bd102cee 100644 --- a/src/client/pages/gallery/post.vue +++ b/src/client/pages/gallery/post.vue @@ -19,7 +19,7 @@ {{ post.likedCount }}
- +
@@ -125,6 +125,12 @@ export default defineComponent({ }); }, + shareWithNote() { + os.post({ + initialText: `${this.post.title} ${url}/gallery/${this.post.id}` + }); + }, + like() { os.apiWithDialog('gallery/posts/like', { postId: this.postId, @@ -148,12 +154,6 @@ export default defineComponent({ this.post.likedCount--; }); }, - - createNote() { - os.post({ - initialText: `${this.post.title} ${url}/gallery/${this.post.id}` - }); - } } }); diff --git a/src/client/pages/instance-info.vue b/src/client/pages/instance-info.vue index 662b82ddb..c66ad50f6 100644 --- a/src/client/pages/instance-info.vue +++ b/src/client/pages/instance-info.vue @@ -147,7 +147,6 @@ import * as os from '@client/os'; import number from '@client/filters/number'; import bytes from '@client/filters/bytes'; import * as symbols from '@client/symbols'; -import { url } from '@client/config'; const chartLimit = 90; const sum = (...arr) => arr.reduce((r, a) => r.map((b, i) => a[i] + b)); @@ -449,7 +448,7 @@ export default defineComponent({ .fnfelxur { padding: 16px; - > img { + > .icon { display: block; margin: auto; height: 64px; diff --git a/src/client/pages/page.vue b/src/client/pages/page.vue index e43add7b0..6ee3ee8d2 100644 --- a/src/client/pages/page.vue +++ b/src/client/pages/page.vue @@ -1,35 +1,60 @@ @@ -39,11 +64,20 @@ import XPage from '@client/components/page/page.vue'; import MkButton from '@client/components/ui/button.vue'; import * as os from '@client/os'; import * as symbols from '@client/symbols'; +import { url } from '@client/config'; +import MkFollowButton from '@client/components/follow-button.vue'; +import MkContainer from '@client/components/ui/container.vue'; +import MkPagination from '@client/components/ui/pagination.vue'; +import MkPagePreview from '@client/components/page-preview.vue'; export default defineComponent({ components: { XPage, MkButton, + MkFollowButton, + MkContainer, + MkPagination, + MkPagePreview, }, props: { @@ -69,6 +103,14 @@ export default defineComponent({ }, } : null), page: null, + error: null, + otherPostsPagination: { + endpoint: 'users/pages', + limit: 6, + params: () => ({ + userId: this.page.user.id + }) + }, }; }, @@ -90,11 +132,28 @@ export default defineComponent({ methods: { fetch() { + this.page = null; os.api('pages/show', { name: this.pageName, username: this.username, }).then(page => { this.page = page; + }).catch(e => { + this.error = e; + }); + }, + + share() { + navigator.share({ + title: this.page.title || this.page.name, + text: this.page.summary, + url: `${url}/@${this.page.user.username}/pages/${this.page.name}` + }); + }, + + shareWithNote() { + os.post({ + initialText: `${this.page.title || this.page.name} ${url}/@${this.page.user.username}/pages/${this.page.name}` }); }, @@ -132,6 +191,15 @@ export default defineComponent({