From 9fa2223fa7785acc37086b227ece9ddc2a498086 Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 13 Jun 2019 22:35:37 +0900 Subject: [PATCH 01/12] Make url preview log warn --- src/server/web/url-preview.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/web/url-preview.ts b/src/server/web/url-preview.ts index cdb6f13f5..e5b9ff624 100644 --- a/src/server/web/url-preview.ts +++ b/src/server/web/url-preview.ts @@ -36,7 +36,7 @@ module.exports = async (ctx: Koa.BaseContext) => { ctx.body = summary; } catch (e) { - logger.error(`Failed to get preview of ${ctx.query.url}: ${e}`); + logger.warn(`Failed to get preview of ${ctx.query.url}: ${e}`); ctx.status = 200; ctx.set('Cache-Control', 'max-age=86400, immutable'); ctx.body = '{}'; From 1c8c166720a915711993af22b47b6c9f95f7e7fd Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 13 Jun 2019 22:59:15 +0900 Subject: [PATCH 02/12] =?UTF-8?q?=E3=82=B5=E3=83=A0=E3=83=8D=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E7=94=9F=E6=88=90=E3=81=A7=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=A6=E3=82=82=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AE=E3=82=A2=E3=83=83=E3=83=97=E3=83=AD?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=82=92=E5=A4=B1=E6=95=97=E3=81=97=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #5050 --- src/services/drive/add-file.ts | 54 +++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts index d21c67d18..a2143ca60 100644 --- a/src/services/drive/add-file.ts +++ b/src/services/drive/add-file.ts @@ -149,18 +149,22 @@ export async function generateAlts(path: string, type: string, generateWeb: bool if (generateWeb) { logger.info(`creating web image`); - if (['image/jpeg'].includes(type)) { - webpublic = await convertToJpeg(path, 2048, 2048); - } else if (['image/webp'].includes(type)) { - webpublic = await convertToWebp(path, 2048, 2048); - } else if (['image/png'].includes(type)) { - webpublic = await convertToPng(path, 2048, 2048); - } else if (['image/apng', 'image/vnd.mozilla.apng'].includes(type)) { - webpublic = await convertToApng(path); - } else if (['image/gif'].includes(type)) { - webpublic = await convertToGif(path); - } else { - logger.info(`web image not created (not an image)`); + try { + if (['image/jpeg'].includes(type)) { + webpublic = await convertToJpeg(path, 2048, 2048); + } else if (['image/webp'].includes(type)) { + webpublic = await convertToWebp(path, 2048, 2048); + } else if (['image/png'].includes(type)) { + webpublic = await convertToPng(path, 2048, 2048); + } else if (['image/apng', 'image/vnd.mozilla.apng'].includes(type)) { + webpublic = await convertToApng(path); + } else if (['image/gif'].includes(type)) { + webpublic = await convertToGif(path); + } else { + logger.info(`web image not created (not an image)`); + } + } catch (e) { + logger.warn(`web image not created (an error occured)`, e); } } else { logger.info(`web image not created (from remote)`); @@ -170,18 +174,22 @@ export async function generateAlts(path: string, type: string, generateWeb: bool // #region thumbnail let thumbnail: IImage | null = null; - if (['image/jpeg', 'image/webp'].includes(type)) { - thumbnail = await convertToJpeg(path, 498, 280); - } else if (['image/png'].includes(type)) { - thumbnail = await convertToPng(path, 498, 280); - } else if (['image/gif'].includes(type)) { - thumbnail = await convertToGif(path); - } else if (type.startsWith('video/')) { - try { - thumbnail = await GenerateVideoThumbnail(path); - } catch (e) { - logger.error(`GenerateVideoThumbnail failed: ${e}`); + try { + if (['image/jpeg', 'image/webp'].includes(type)) { + thumbnail = await convertToJpeg(path, 498, 280); + } else if (['image/png'].includes(type)) { + thumbnail = await convertToPng(path, 498, 280); + } else if (['image/gif'].includes(type)) { + thumbnail = await convertToGif(path); + } else if (type.startsWith('video/')) { + try { + thumbnail = await GenerateVideoThumbnail(path); + } catch (e) { + logger.error(`GenerateVideoThumbnail failed: ${e}`); + } } + } catch (e) { + logger.warn(`thumbnail not created (an error occured)`, e); } // #endregion thumbnail From 36bd60a0e0f596829eb57621829259a70750a991 Mon Sep 17 00:00:00 2001 From: MeiMei <30769358+mei23@users.noreply.github.com> Date: Fri, 14 Jun 2019 12:14:23 +0900 Subject: [PATCH 03/12] =?UTF-8?q?image=E4=BB=A5=E5=A4=96=E3=81=AFproxy?= =?UTF-8?q?=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=20(#5051?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/proxy/proxy-media.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/proxy/proxy-media.ts b/src/server/proxy/proxy-media.ts index e16665f6c..4535a0fb5 100644 --- a/src/server/proxy/proxy-media.ts +++ b/src/server/proxy/proxy-media.ts @@ -17,6 +17,8 @@ export async function proxyMedia(ctx: Koa.BaseContext) { const [type, ext] = await detectMine(path); + if (!type.startsWith('image/')) throw 403; + let image: IImage; if ('static' in ctx.query && ['image/png', 'image/gif'].includes(type)) { From 81c9d66bf48fddd7932f21201c081d9112e1290e Mon Sep 17 00:00:00 2001 From: Aya Morisawa Date: Fri, 14 Jun 2019 22:54:19 +0900 Subject: [PATCH 04/12] Use halfwidth space instead of fullwidth space in code (#5054) --- src/games/reversi/core.ts | 2 +- src/services/logger.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/games/reversi/core.ts b/src/games/reversi/core.ts index cf8986263..09d23e2b7 100644 --- a/src/games/reversi/core.ts +++ b/src/games/reversi/core.ts @@ -257,7 +257,7 @@ export default class Reversi { public get winner(): Color | null { return this.isEnded ? this.blackCount == this.whiteCount ? null : - this.opts.isLlotheo === this.blackCount > this.whiteCount ? WHITE : BLACK : + this.opts.isLlotheo === this.blackCount > this.whiteCount ? WHITE : BLACK : undefined as never; } } diff --git a/src/services/logger.ts b/src/services/logger.ts index 190bbdd25..c393f017c 100644 --- a/src/services/logger.ts +++ b/src/services/logger.ts @@ -90,7 +90,7 @@ export default class Logger { } } - public warn(message: string, data?: Record | null, important = false): void { // 実行を継続できるが改善すべき状況で使う + public warn(message: string, data?: Record | null, important = false): void { // 実行を継続できるが改善すべき状況で使う this.log('warning', message, data, important); } From 9c2bad300a3604b9506a4bb431436148ef8e5442 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 15 Jun 2019 00:07:41 +0900 Subject: [PATCH 05/12] Resolve #365 --- src/models/repositories/messaging-message.ts | 2 +- src/models/repositories/user.ts | 31 +++++-------------- src/remote/activitypub/models/person.ts | 8 +++-- src/server/api/endpoints/i/update.ts | 8 ++--- .../endpoints/messaging/messages/create.ts | 2 +- .../api/endpoints/username/available.ts | 2 +- src/server/api/endpoints/users/search.ts | 2 +- src/server/api/private/signup.ts | 4 +-- 8 files changed, 23 insertions(+), 36 deletions(-) diff --git a/src/models/repositories/messaging-message.ts b/src/models/repositories/messaging-message.ts index 6db2f4fa7..7f0b2047a 100644 --- a/src/models/repositories/messaging-message.ts +++ b/src/models/repositories/messaging-message.ts @@ -8,7 +8,7 @@ export type PackedMessagingMessage = SchemaType { - public isValidText(text: string): boolean { + public validateText(text: string): boolean { return text.trim().length <= 1000 && text.trim() != ''; } diff --git a/src/models/repositories/user.ts b/src/models/repositories/user.ts index d3cd75b17..bd48f04ea 100644 --- a/src/models/repositories/user.ts +++ b/src/models/repositories/user.ts @@ -1,3 +1,4 @@ +import $ from 'cafy'; import { EntityRepository, Repository, In } from 'typeorm'; import { User, ILocalUser, IRemoteUser } from '../entities/user'; import { Emojis, Notes, NoteUnreads, FollowRequests, Notifications, MessagingMessages, UserNotePinings, Followings, Blockings, Mutings, UserProfiles, UserGroupJoinings } from '..'; @@ -231,29 +232,13 @@ export class UserRepository extends Repository { } //#region Validators - public validateUsername(username: string, remote = false): boolean { - return typeof username == 'string' && (remote ? /^\w([\w-]*\w)?$/ : /^\w{1,20}$/).test(username); - } - - public validatePassword(password: string): boolean { - return typeof password == 'string' && password != ''; - } - - public isValidName(name?: string): boolean { - return name === null || (typeof name == 'string' && name.length < 50 && name.trim() != ''); - } - - public isValidDescription(description: string): boolean { - return typeof description == 'string' && description.length < 500 && description.trim() != ''; - } - - public isValidLocation(location: string): boolean { - return typeof location == 'string' && location.length < 50 && location.trim() != ''; - } - - public isValidBirthday(birthday: string): boolean { - return typeof birthday == 'string' && /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/.test(birthday); - } + public validateLocalUsername = $.str.match(/^\w{1,20}$/); + public validateRemoteUsername = $.str.match(/^\w([\w-]*\w)?$/); + public validatePassword = $.str.min(1); + public validateName = $.str.min(1).max(50); + public validateDescription = $.str.min(1).max(500); + public validateLocation = $.str.min(1).max(50); + public validateBirthday = $.str.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/); //#endregion } diff --git a/src/remote/activitypub/models/person.ts b/src/remote/activitypub/models/person.ts index 654d36403..dcd64e0cd 100644 --- a/src/remote/activitypub/models/person.ts +++ b/src/remote/activitypub/models/person.ts @@ -53,12 +53,14 @@ function validatePerson(x: any, uri: string) { return new Error('invalid person: inbox is not a string'); } - if (!Users.validateUsername(x.preferredUsername, true)) { + if (!Users.validateRemoteUsername.ok(x.preferredUsername)) { return new Error('invalid person: invalid username'); } - if (!Users.isValidName(x.name == '' ? null : x.name)) { - return new Error('invalid person: invalid name'); + if (x.name != null && x.name != '') { + if (!Users.validateName.ok(x.name)) { + return new Error('invalid person: invalid name'); + } } if (typeof x.id !== 'string') { diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts index 2951072cf..10521d12d 100644 --- a/src/server/api/endpoints/i/update.ts +++ b/src/server/api/endpoints/i/update.ts @@ -29,14 +29,14 @@ export const meta = { params: { name: { - validator: $.optional.nullable.str.pipe(Users.isValidName), + validator: $.optional.nullable.use(Users.validateName), desc: { 'ja-JP': '名前(ハンドルネームやニックネーム)' } }, description: { - validator: $.optional.nullable.str.pipe(Users.isValidDescription), + validator: $.optional.nullable.use(Users.validateDescription), desc: { 'ja-JP': 'アカウントの説明や自己紹介' } @@ -50,14 +50,14 @@ export const meta = { }, location: { - validator: $.optional.nullable.str.pipe(Users.isValidLocation), + validator: $.optional.nullable.use(Users.validateLocation), desc: { 'ja-JP': '住んでいる地域、所在' } }, birthday: { - validator: $.optional.nullable.str.pipe(Users.isValidBirthday), + validator: $.optional.nullable.use(Users.validateBirthday), desc: { 'ja-JP': '誕生日 (YYYY-MM-DD形式)' } diff --git a/src/server/api/endpoints/messaging/messages/create.ts b/src/server/api/endpoints/messaging/messages/create.ts index f5d7cf2b3..feffc9a0c 100644 --- a/src/server/api/endpoints/messaging/messages/create.ts +++ b/src/server/api/endpoints/messaging/messages/create.ts @@ -44,7 +44,7 @@ export const meta = { }, text: { - validator: $.optional.str.pipe(MessagingMessages.isValidText) + validator: $.optional.str.pipe(MessagingMessages.validateText) }, fileId: { diff --git a/src/server/api/endpoints/username/available.ts b/src/server/api/endpoints/username/available.ts index 42ab17665..724bb3a0c 100644 --- a/src/server/api/endpoints/username/available.ts +++ b/src/server/api/endpoints/username/available.ts @@ -9,7 +9,7 @@ export const meta = { params: { username: { - validator: $.str.pipe(Users.validateUsername) + validator: $.use(Users.validateLocalUsername) } } }; diff --git a/src/server/api/endpoints/users/search.ts b/src/server/api/endpoints/users/search.ts index 2809465fd..5c413defb 100644 --- a/src/server/api/endpoints/users/search.ts +++ b/src/server/api/endpoints/users/search.ts @@ -66,7 +66,7 @@ export const meta = { }; export default define(meta, async (ps, me) => { - const isUsername = Users.validateUsername(ps.query.replace('@', ''), !ps.localOnly); + const isUsername = ps.localOnly ? Users.validateLocalUsername.ok(ps.query.replace('@', '')) : Users.validateRemoteUsername.ok(ps.query.replace('@', '')); let users: User[] = []; diff --git a/src/server/api/private/signup.ts b/src/server/api/private/signup.ts index c75f8fb29..ca197a661 100644 --- a/src/server/api/private/signup.ts +++ b/src/server/api/private/signup.ts @@ -58,13 +58,13 @@ export default async (ctx: Koa.BaseContext) => { } // Validate username - if (!Users.validateUsername(username)) { + if (!Users.validateLocalUsername.ok(username)) { ctx.status = 400; return; } // Validate password - if (!Users.validatePassword(password)) { + if (!Users.validatePassword.ok(password)) { ctx.status = 400; return; } From 015acf9b229296c173993f0e51d283f991ffc46c Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 15 Jun 2019 17:06:03 +0900 Subject: [PATCH 06/12] Refactor --- locales/ja-JP.yml | 4 ++-- src/misc/aiscript/evaluator.ts | 2 +- src/misc/aiscript/index.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 52f1e2901..7053360a1 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -2060,8 +2060,8 @@ pages: _divide: arg1: "A" arg2: "B" - remind: "÷ 割った余り" - _remind: + mod: "÷ 割った余り" + _mod: arg1: "A" arg2: "B" eq: "AとBが同じ" diff --git a/src/misc/aiscript/evaluator.ts b/src/misc/aiscript/evaluator.ts index 541d4e4c6..d93fcebcf 100644 --- a/src/misc/aiscript/evaluator.ts +++ b/src/misc/aiscript/evaluator.ts @@ -161,7 +161,7 @@ export class ASEvaluator { subtract: (a: number, b: number) => a - b, multiply: (a: number, b: number) => a * b, divide: (a: number, b: number) => a / b, - remind: (a: number, b: number) => a % b, + mod: (a: number, b: number) => a % b, strLen: (a: string) => a.length, strPick: (a: string, b: number) => a[b - 1], strReplace: (a: string, b: string, c: string) => a.split(b).join(c), diff --git a/src/misc/aiscript/index.ts b/src/misc/aiscript/index.ts index 236b332da..8635399da 100644 --- a/src/misc/aiscript/index.ts +++ b/src/misc/aiscript/index.ts @@ -58,7 +58,7 @@ export const funcDefs: Record Date: Sat, 15 Jun 2019 17:09:59 +0900 Subject: [PATCH 07/12] =?UTF-8?q?=E9=96=89=E9=8E=96=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=82=8B=E3=83=9B=E3=82=B9=E3=83=88=E3=81=AB=E3=81=AF?= =?UTF-8?q?AP=20deliver=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=20(#5057)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 閉鎖しているホストにはAP deliverしないように * fix case --- src/remote/activitypub/request.ts | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/remote/activitypub/request.ts b/src/remote/activitypub/request.ts index 3b69dd9ae..bde4921c3 100644 --- a/src/remote/activitypub/request.ts +++ b/src/remote/activitypub/request.ts @@ -9,7 +9,7 @@ import config from '../../config'; import { ILocalUser } from '../../models/entities/user'; import { publishApLogStream } from '../../services/stream'; import { apLogger } from './logger'; -import { UserKeypairs } from '../../models'; +import { UserKeypairs, Instances } from '../../models'; import { fetchMeta } from '../../misc/fetch-meta'; import { toPuny } from '../../misc/convert-host'; import { ensure } from '../../prelude/ensure'; @@ -17,15 +17,30 @@ import { ensure } from '../../prelude/ensure'; export const logger = apLogger.createSubLogger('deliver'); export default async (user: ILocalUser, url: string, object: any) => { - logger.info(`--> ${url}`); - const timeout = 10 * 1000; const { protocol, host, hostname, port, pathname, search } = new URL(url); // ブロックしてたら中断 const meta = await fetchMeta(); - if (meta.blockedHosts.includes(toPuny(host))) return; + if (meta.blockedHosts.includes(toPuny(host))) { + logger.info(`skip (blocked) ${url}`); + return; + } + + // closedなら中断 + const closedHosts = await Instances.find({ + where: { + isMarkedAsClosed: true + }, + cache: 60 * 1000 + }); + if (closedHosts.map(x => x.host).includes(toPuny(host))) { + logger.info(`skip (closed) ${url}`); + return; + } + + logger.info(`--> ${url}`); const data = JSON.stringify(object); From 80dc76368976d726f1df89da9b1cf997dcc5995d Mon Sep 17 00:00:00 2001 From: MeiMei <30769358+mei23@users.noreply.github.com> Date: Sun, 16 Jun 2019 14:24:37 +0900 Subject: [PATCH 08/12] Support Unicode 12.0 Emoji (#5062) --- src/misc/emoji-regex.ts | 2 +- src/misc/twemoji-base.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/misc/emoji-regex.ts b/src/misc/emoji-regex.ts index 3c8c02f48..62ded8ade 100644 --- a/src/misc/emoji-regex.ts +++ b/src/misc/emoji-regex.ts @@ -1 +1 @@ -export const emojiRegex = /((?:\ud83d[\udc68\udc69])(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddb0-\uddb3])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f)|[\u0023\u002a\u0030-\u0039]\ufe0f?\u20e3|(?:[\u00a9\u00ae\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddb5\uddb6\uddb8\uddb9\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\udeeb\udeec\udef4-\udef9]|\ud83e[\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd40-\udd45\udd47-\udd70\udd73-\udd76\udd7a\udd7c-\udda2\uddb4\uddb7\uddc0-\uddc2\uddd0\uddde-\uddff]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f)/; +export const emojiRegex = /((?:\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c\udffb|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c\udffb|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c\udffb|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb\udffc]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udffd]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d])|(?:\ud83d[\udc68\udc69])(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5\udeeb\udeec\udef4-\udefa\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd71\udd73-\udd76\udd7a-\udda2\udda5-\uddaa\uddae-\uddb4\uddb7\uddba\uddbc-\uddca\uddd0\uddde-\uddff\ude70-\ude73\ude78-\ude7a\ude80-\ude82\ude90-\ude95]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f)/; diff --git a/src/misc/twemoji-base.ts b/src/misc/twemoji-base.ts index 74611a488..2a74ab014 100644 --- a/src/misc/twemoji-base.ts +++ b/src/misc/twemoji-base.ts @@ -1,4 +1,4 @@ -export const twemojiBase = 'https://cdn.jsdelivr.net/npm/twemoji@11.3.0'; -// https://cdn.jsdelivr.net/npm/twemoji@11.3.0 -// https://cdnjs.cloudflare.com/ajax/libs/twemoji/11.3.0 +export const twemojiBase = 'https://cdn.jsdelivr.net/npm/twemoji@12.0.1'; +// https://cdn.jsdelivr.net/npm/twemoji@12.0.1 +// https://cdnjs.cloudflare.com/ajax/libs/twemoji/12.0.1 // https://twemoji.maxcdn.com From eb2f32d3e2d91e4b4841cce0e4b859f27a9716de Mon Sep 17 00:00:00 2001 From: MeiMei <30769358+mei23@users.noreply.github.com> Date: Sun, 16 Jun 2019 16:04:27 +0900 Subject: [PATCH 09/12] =?UTF-8?q?Fix:=20=E3=82=AA=E3=83=BC=E3=83=88?= =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=97=E3=83=AA=E3=83=BC=E3=83=88=E3=81=AB?= =?UTF-8?q?=E3=82=A2=E3=83=8B=E3=83=A1=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3?= =?UTF-8?q?=E5=81=9C=E6=AD=A2=E3=81=8C=E5=8A=B9=E3=81=8B=E3=81=AA=E3=81=84?= =?UTF-8?q?=20(#5061)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/client/app/common/views/components/autocomplete.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/client/app/common/views/components/autocomplete.vue b/src/client/app/common/views/components/autocomplete.vue index b66da49d7..ca6599df2 100644 --- a/src/client/app/common/views/components/autocomplete.vue +++ b/src/client/app/common/views/components/autocomplete.vue @@ -16,7 +16,7 @@
  1. - + {{ emoji.emoji }} @@ -31,6 +31,7 @@ import Vue from 'vue'; import * as emojilib from 'emojilib'; import contains from '../../../common/scripts/contains'; import { twemojiBase } from '../../../../../misc/twemoji-base'; +import { getStaticImageUrl } from '../../../common/scripts/get-static-image-url'; type EmojiDef = { emoji: string; @@ -78,6 +79,7 @@ export default Vue.extend({ data() { return { + getStaticImageUrl, fetching: true, users: [], hashtags: [], From 546de7c6bd5398d8b0bb415c147289dd742a3e0b Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 16 Jun 2019 16:06:00 +0900 Subject: [PATCH 10/12] New Crowdin translations (#5053) * New translations ja-JP.yml (Czech) * New translations ja-JP.yml (Czech) * New translations ja-JP.yml (Czech) * New translations ja-JP.yml (French) * New translations ja-JP.yml (French) * New translations ja-JP.yml (French) * New translations ja-JP.yml (English) * New translations ja-JP.yml (French) * New translations ja-JP.yml (Korean) * New translations ja-JP.yml (Chinese Simplified) * New translations ja-JP.yml (Danish) * New translations ja-JP.yml (Korean) * New translations ja-JP.yml (Chinese Simplified) * New translations ja-JP.yml (English) * New translations ja-JP.yml (Czech) * New translations ja-JP.yml (French) --- locales/cs-CZ.yml | 45 ++++++++++++++++++++++++++++++++++++++++++++ locales/da-DK.yml | 3 +-- locales/en-US.yml | 4 ++-- locales/fr-FR.yml | 48 ++++++++++++++++++++++++----------------------- locales/ko-KR.yml | 4 ++-- locales/zh-CN.yml | 4 ++-- 6 files changed, 77 insertions(+), 31 deletions(-) diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml index 9516a6f02..29395ecfd 100644 --- a/locales/cs-CZ.yml +++ b/locales/cs-CZ.yml @@ -94,9 +94,20 @@ common: follow-users-to-make-your-timeline: "Poznámky sledujících se zobrazí ve vaší časové ose" explore: "Najít uživatele" post-form: + attach-location-information: "Přidat informace o lokaci" + hide-contents: "Schovat obsah" + reply-placeholder: "Odpovědět na tento příspěvek" + quote-placeholder: "Citovat tento příspěvek" submit: "Odeslat" reply: "Odpovědět" renote: "Renotovat" + attach-media-from-local: "Uplodovat soubor z vašeho zařízení" + insert-a-kao: "v('ω')v" + create-poll: "Vytvořit anketu" + text-remain: "zbývá ještě {} znaků" + recent-tags: "Nejnovější" + visibility: "Viditelnost" + geolocation-alert: "Vaše zařízení nedalo k dispozici lokaci" error: "Chyba" enter-username: "Zadejte své uživatelské jméno" add-visible-user: "Přidat uživatele" @@ -316,7 +327,10 @@ auth/views/form.vue: accept: "Povolit přístup" auth/views/index.vue: loading: "Načítám..." + denied-paragraph: "Tato aplikace nebude mít přístup k Vašemu účtu." already-authorized: "Tato aplikace byla již autorizována." + callback-url: "Zpátky do aplikace." + please-go-back: "Prosím vraťte se zpátky do aplikace." error: "Taková relace neexistuje." sign-in: "Prosím přihlaste se." common/views/pages/explore.vue: @@ -366,20 +380,25 @@ common/views/components/games/reversi/reversi.room.vue: waiting-for-both: "Připravuji" cancel: "Zrušit" ready: "Připraveno" + cancel-ready: "Pokračovat v přípravě" common/views/components/connect-failed.vue: title: "Nelze se připojit k serveru" description: "Nastal problém s Vaším připojením k internetu, nebo server není dostupný nebo zrovna probíhá údržba. Prosím {zkuste to znova} za pár minut." thanks: "Děkujeme že jste použili Misskey." common/views/components/connect-failed.troubleshooter.vue: + title: "Poradce při potížích" network: "Síťové připojení" checking-network: "Prověřit síťové připojení" internet: "Připojení k internetu" checking-internet: "Ověřuji připojení k internetu." server: "Připojení k serveru" + checking-server: "Spojuji se se serverem" no-network-desc: "Ujistěte se že jste připojeni k Internetu." no-internet: "Nejste připojeni k internetu" no-internet-desc: "Jste připojen k síti, ale zdá se že stále chybí připojení k Internetu. Prosím zkontrolujte Vaše připojení k Internetu." no-server: "Nelze se připojit k serveru Misskey" + success: "Úspěšně se podařilo spojit s Misskey serverem" + flush: "Vyčistit mezipaměť" common/views/components/media-banner.vue: sensitive: "Choulostivý obsah" click-to-show: "Klikněte pro zobrazení" @@ -403,8 +422,10 @@ common/views/components/theme.vue: find-more-theme: "Najít další vzhledy" theme-name: "Jméno vzhledu" preview-created-theme: "Náhled" + invalid-theme: "Vzhled není validní" already-installed: "Tento vzhled je již nainstalován." saved: "Uloženo" + manage-themes: "Správa vzhledů" builtin-themes: "Standardní vzhledy" my-themes: "Moje vzhledy" installed-themes: "Nainstalované vzhledy" @@ -415,6 +436,7 @@ common/views/components/theme.vue: desc: "Popis" export: "Exportovat" import: "Importovat" + import-by-code: "nebo zkopírujte kód" theme-name-required: "Jméno vzhledu je povinné" common/views/components/cw-button.vue: hide: "Skrýt" @@ -487,10 +509,13 @@ common/views/components/poll-editor.vue: remove: "Odstranit tuto možnost" add: "+ Přidat možnost" destroy: "Zahodit dotazník" + multiple: "Více odpovědí je povoleno" expiration: "Termín" infinite: "Nekonečne" at: "Výběr data a času" + no-more: "Více už přidat nemůžete" deadline-date: "Termín ukončení" + deadline-time: "Doba trvání" interval: "Trvání" second: "Sekunda" minute: "Minuta" @@ -498,6 +523,7 @@ common/views/components/poll-editor.vue: day: "Ne" common/views/components/reaction-picker.vue: choose-reaction: "Vyberte svoji reakci" + input-reaction-placeholder: "nebo vložte Emoji" common/views/components/emoji-picker.vue: custom-emoji: "Emoji" people: "Lidé" @@ -511,6 +537,7 @@ common/views/components/emoji-picker.vue: common/views/components/signin.vue: username: "Přezdívka" password: "Heslo" + token: "Token" signing-in: "Přihlašování..." or: "Nebo" signin-with-twitter: "Přihlásit se pomocí účtu Twitter" @@ -538,6 +565,7 @@ common/views/components/signup.vue: password-matched: "OK" password-not-matched: "Neshodují se" recaptcha: "Potvrzení" + tos: "Podmínky užívání" create: "Vytvořit účet" some-error: "Pokus o vytvoření účtu selhal. Prosím zkuste to znovu." common/views/components/special-message.vue: @@ -576,6 +604,7 @@ common/views/components/visibility-chooser.vue: home: "Domů" specified-desc: "Poslat pouze zmíněným uživatelům" local-public: "Veřejná (pouze místní)" + local-public-desc: "Nepublikovat na vzdálených serverech" local-home: "Domovská (pouze místní)" local-followers: "Pro sledující (pouze místní)" common/views/components/trends.vue: @@ -585,6 +614,8 @@ common/views/components/language-settings.vue: title: "Zobrazit jazyky" pick-language: "Zvolte jazyk" recommended: "Doporučené" + auto: "Automaticky" + specify-language: "Vyberte jazyk" info: "Pro aktivování změn musíte znovu načíst stránky." common/views/components/profile-editor.vue: title: "Profil" @@ -611,6 +642,7 @@ common/views/components/profile-editor.vue: email-not-verified: "Váš email není potvrzen. Prosím zkontrolujte si svou schránku." export: "Exportovat" import: "Importovat" + export-and-import: "Import / Export" export-targets: following-list: "Seznam sledujících" mute-list: "Seznam ztlumených uživatelů" @@ -630,19 +662,31 @@ common/views/components/user-list-editor.vue: add-user: "Přidat uživatele" common/views/components/user-group-editor.vue: users: "Členové" + rename: "Přejmenovat skupinu" + delete: "Odstranit skupinu" transfer: "Přesunout skupinu" + transfer-are-you-sure: "Jste si jistí že chcete přidat @$2 do skupiny: $1?" transferred: "Skupina přesunuta" + remove-user: "Odebrat uživatele z této skupiny" + delete-are-you-sure: "Jste si jistí že chcete smazat skupinu \"$1\"?" deleted: "Smazáno" invite: "Pozvat" + invited: "Pozvánka byla úspěšně odeslána" common/views/components/user-lists.vue: user-lists: "Seznamy" + create-list: "Vytvořit seznam" list-name: "Název seznamu" common/views/components/user-groups.vue: user-groups: "Skupiny" + create-group: "Vytvořit skupinu" + group-name: "Název skupiny" + owned-groups: "Moje skupiny" invites: "Pozvat" reject-invite: "Odmítnout" common/views/widgets/broadcast.vue: fetching: "Načítám" + no-broadcasts: "Žádná nová oznámení" + have-a-nice-day: "Přejeme Vám příjemný den!" next: "Další" common/views/widgets/calendar.vue: year: "Rok {}" @@ -800,6 +844,7 @@ desktop/views/components/renote-form-window.vue: desktop/views/components/settings.2fa.vue: detail: "Více…" url: "https://www.google.cz/landing/2step/" + token: "Token" common/views/components/media-image.vue: click-to-show: "Klikněte pro zobrazení" common/views/components/api-settings.vue: diff --git a/locales/da-DK.yml b/locales/da-DK.yml index 568ce36fa..08ca17592 100644 --- a/locales/da-DK.yml +++ b/locales/da-DK.yml @@ -1761,8 +1761,7 @@ pages: _divide: arg1: "A" arg2: "B" - remind: "÷ Tomo" - _remind: + _mod: arg1: "A" arg2: "B" eq: "A og B er ens" diff --git a/locales/en-US.yml b/locales/en-US.yml index 6975bedd7..5ac2561d1 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -1857,8 +1857,8 @@ pages: _divide: arg1: "A" arg2: "B" - remind: "÷ Remaindering" - _remind: + mod: "÷ Remaindering" + _mod: arg1: "A" arg2: "B" eq: "A and B are equal" diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index 0e372e920..100b2f912 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -12,7 +12,7 @@ common: rich-contents: "Notes" rich-contents-desc: "Partagez vos idées, les événements et les sujets qui vous tiennent à cœur ainsi que tout autre chose que vous souhaitez partager avec les autres. Si vous le désirez, vous pouvez décorer vos messages en utilisant une syntaxe différente ou en y joignant des sondages et des fichiers, tels que les photos ou les vidéos que vous aimez." reaction: "Réactions" - reaction-desc: "Une manière simple d'exprimer vos émotions. Misskey peut attacher diverses réactions aux publications des autres utilisateurs. Si vous essayez les réactions sur Misskey, vous ne pourrez plus retourner sur une autre plateforme de réseaux sociaux n'offrant que des « J'aime »." + reaction-desc: "Une manière simple d'exprimer vos émotions. Misskey peut attacher diverses réactions aux publications des autres utilisateur·rice·s. Si vous essayez les réactions sur Misskey, vous ne pourrez plus retourner sur une autre plateforme de réseaux sociaux n'offrant que des « J'aime »." ui: "Interface" ui-desc: "Aucune interface graphique ne peut plaire à tout le monde. Par conséquent, Misskey possède une interface utilisateur hautement personnalisable selon vos goûts. Vous pouvez rendre votre page d'accueil originale en modifiant la mise en page de votre fil et en déplaçant les widgets que vous pouvez facilement ajuster pour vous approprier cet espace." drive: "Drive" @@ -89,8 +89,8 @@ common: "write:reactions": "Gérer vos réactions" "write:votes": "Vote" empty-timeline-info: - follow-users-to-make-your-timeline: "Les utilisateurs suivants afficheront leurs publications sur votre fil." - explore: "Trouver des utilisateurs" + follow-users-to-make-your-timeline: "Les utilisateur·rice·s suivant·e·s afficheront leurs publications sur votre fil." + explore: "Trouver des utilisateur·rice·s" post-form: attach-location-information: "Joindre des informations de localisation" hide-contents: "Masquer les contenus" @@ -148,13 +148,13 @@ common: public: "Public" home: "Principal" home-desc: "Publier sur le fil principal uniquement" - followers: "Abonnés" - followers-desc: "Publier à vos abonnés uniquement" + followers: "Abonné·e·s" + followers-desc: "Publier à vos abonné·e·s uniquement" specified: "Direct" - specified-desc: "Publier uniquement aux utilisateurs mentionnés" + specified-desc: "Publier uniquement aux utilisateur·rice·s mentionné·e·s" local-public: "Local (Public)" local-home: "Accueil (local uniquement)" - local-followers: "Local (Abonnés)" + local-followers: "Abonné·e·s (Local uniquement)" note-placeholders: a: "Que faites-vous maintenant ?" b: "Quoi de neuf ?" @@ -314,7 +314,7 @@ common: version: "Version" broadcast: "Diffusion" notifications: "Notifications" - users: "Utilisateurs recommandés" + users: "Utilisateur·rice·s recommandé·e·s" polls: "Sondages" post-form: "Champs de publication" server: "Infos sur le serveur" @@ -342,13 +342,13 @@ auth/views/index.vue: sign-in: "Veuillez vous connecter" common/views/pages/explore.vue: pinned-users: "Utilisateur·rice·s épinglé·e·s" - popular-users: "Utilisateurs populaires" - recently-updated-users: "Utilisateurs actifs récemment" + popular-users: "Utilisateur·rice·s populaires" + recently-updated-users: "Utilisateur·rice·s actif·ve·s récemment" recently-registered-users: "Les nouveaux inscrits" popular-tags: "Mots-clés populaires" federated: "Du Fédiverse" explore: "Explorer {host}" - users-info: "Actuellement, {users} utilisateurs se sont inscrit ici" + users-info: "Actuellement, {users} utilisateur·rice·s se sont inscrit ici" common/views/components/url-preview.vue: enable-player: "Activer la lecture" disable-player: "Fermer le lecteur" @@ -653,13 +653,13 @@ common/views/components/visibility-chooser.vue: followers: "Abonné·e·s" followers-desc: "Publier à vos abonné·e·s uniquement" specified: "Direct" - specified-desc: "Publier uniquement aux utilisateurs mentionnés" + specified-desc: "Publier uniquement aux utilisateur·rice·s mentionné·e·s" local-public: "Local (Public)" local-public-desc: "Ne pas publier pour les distants" local-home: "Accueil (local uniquement)" - local-followers: "Local (Abonnés)" + local-followers: "Abonné·e·s (Local uniquement)" common/views/components/trends.vue: - count: "{} utilisateurs mentionnés" + count: "{} utilisateur·rice·s mentionné·e·s" empty: "Aucune tendance" common/views/components/language-settings.vue: title: "Langue " @@ -897,7 +897,7 @@ desktop/views/components/media-video.vue: sensitive: "Le contenu est NSFW" click-to-show: "Cliquer pour afficher" desktop/views/components/followers-window.vue: - followers: "{} abonné·e·s" + followers: "Abonné·e·s de {}" desktop/views/components/followers.vue: empty: "Il semble que vous n’avez pas encore d’abonné·e·s." desktop/views/components/following-window.vue: @@ -1224,7 +1224,7 @@ admin/views/charts.vue: per-hour: "par heure" federation: "Fédération" notes: "Publications" - users: "Utilisateurs" + users: "Utilisateur·rice·s" drive: "Lecteur" network: "Réseau" charts: @@ -1234,8 +1234,8 @@ admin/views/charts.vue: local-notes: "Nombre des publications : augmentation/diminution (Local)" remote-notes: "Nombre de publications : augmentation/diminution (distants)" notes-total: "Total des notes" - users: "Nombre d’utilisateurs : augmentation/diminution" - users-total: "Nombre total des utilisateurs" + users: "Nombre d’utilisateur·rice·s : augmentation/diminution" + users-total: "Nombre total des utilisateur·rice·s" active-users: "Utilisateur·rice·s actif·ve·s" drive: "Capacité utilisée comme stockage : augmentation/diminution" drive-total: "Utilisation totale du lecteur" @@ -1266,6 +1266,7 @@ admin/views/drive.vue: unmark-as-sensitive: "Ne pas marquer comme sensible" marked-as-sensitive: "Marqué comme sensible" unmarked-as-sensitive: "Marqué comme non sensible" + clean-remote-files: "Nettoyer le cache des fichiers distants" clean-up: "Nettoyage" admin/views/users.vue: operation: "Actions" @@ -1374,7 +1375,7 @@ admin/views/federation.vue: lastCommunicatedAtAsc: "La date et l'heure des interactions plus anciennes" lastCommunicatedAtDesc: "La date et l'heure des nouvelles interactions" notesDesc: "Description des notes" - usersAsc: "Peu d'abonnés" + usersAsc: "Peu d'abonné·e·s" followingAsc: "Les moins suivies" followingDesc: "Ayant le plus d'abonné·e·s" followersAsc: "Ayant le moins d'abonné·e·s" @@ -1389,7 +1390,7 @@ admin/views/federation.vue: charts: "Graphs" chart-srcs: requests: "Requêtes" - users: "Nombre d’utilisateurs·trices : augmentation/diminution" + users: "Nombre d’utilisateur·trice·s : augmentation/diminution" users-total: "Nombre total des utilisateur·rice·s" notes: "Augmentation/diminution du nombre des notes" notes-total: "Nombre total des notes" @@ -1431,7 +1432,7 @@ desktop/views/pages/user-list.users.vue: desktop/views/pages/user/user.followers-you-know.vue: title: "Abonné·e·s que vous connaissez" loading: "Chargement en cours" - no-users: "Aucun abonné connu" + no-users: "Aucun·e abonné·e connu·e" desktop/views/pages/user/user.friends.vue: title: "Mentions fréquentes" loading: "Chargement en cours" @@ -1646,7 +1647,7 @@ deck/deck.user-column.vue: follows-you: "Vous suit" posts: "Notes" following: "Suit" - followers: "Abonnés" + followers: "Abonné·e·s" images: "Images" activity: "Activité" timeline: "Fil d’actualité" @@ -1688,6 +1689,7 @@ pages: view-source: "Afficher la source" view-page: "Afficher la page" like: "Bien" + liked-pages: "Pages favorites" my-pages: "Mes pages" inspector: "Inspecteur" content: "Bloc de page" @@ -1801,7 +1803,7 @@ pages: _divide: arg1: "A" arg2: "B" - _remind: + _mod: arg1: "A" arg2: "B" eq: "A et B sont équivalents" diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 6e4882aa1..72070e4d4 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -1857,8 +1857,8 @@ pages: _divide: arg1: "A" arg2: "B" - remind: "÷ 나눈 나머지" - _remind: + mod: "÷ 나눈 나머지" + _mod: arg1: "A" arg2: "B" eq: "A와 B가 동일" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index 30103217e..39d9920a4 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -1857,8 +1857,8 @@ pages: _divide: arg1: "A" arg2: "B" - remind: "÷ 取模" - _remind: + mod: "÷ 取模" + _mod: arg1: "A" arg2: "B" eq: "A和B相等" From f9e6ec178536edf5de1b5a1833463ba27aaa14a9 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 16 Jun 2019 16:07:57 +0900 Subject: [PATCH 11/12] Update dependencies :rocket: --- package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index dd54c42fe..d7ad45937 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "@types/websocket": "0.0.40", "@types/ws": "6.0.1", "animejs": "3.0.1", - "apexcharts": "3.7.1", + "apexcharts": "3.8.0", "autobind-decorator": "2.4.0", "autosize": "4.0.2", "autwh": "0.1.0", @@ -165,11 +165,11 @@ "loader-utils": "1.2.3", "lolex": "3.1.0", "lookup-dns-cache": "2.1.0", - "minio": "7.0.8", + "minio": "7.0.10", "mocha": "6.1.4", "moji": "0.5.1", "moment": "2.24.0", - "ms": "2.1.1", + "ms": "2.1.2", "nested-property": "0.0.7", "node-fetch": "2.6.0", "nodemailer": "6.2.1", @@ -215,7 +215,7 @@ "stylus": "0.54.5", "stylus-loader": "3.0.2", "summaly": "2.2.0", - "systeminformation": "4.1.6", + "systeminformation": "4.11.1", "syuilo-password-strength": "0.0.1", "terser-webpack-plugin": "1.3.0", "textarea-caret": "3.1.0", @@ -255,8 +255,8 @@ "vuex": "3.1.1", "vuex-persistedstate": "2.5.4", "web-push": "3.3.5", - "webpack": "4.33.0", - "webpack-cli": "3.3.2", + "webpack": "4.34.0", + "webpack-cli": "3.3.4", "websocket": "1.0.28", "ws": "7.0.0", "xev": "2.0.1" From 0e362b3cefaa8b2bd6aa9fef2f6be1c5f3bd67f0 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 16 Jun 2019 16:08:36 +0900 Subject: [PATCH 12/12] 11.21.0 --- CHANGELOG.md | 11 +++++++++++ package.json | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e5f9a793..2da31c0f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,17 @@ npm i -g ts-node npm run migrate ``` +11.21.0 (2019/06/16) +-------------------- +### ✨Improvements +* Unicode 12.0 の絵文字に対応 +* 閉鎖しているホストにはAP deliverしないように +* image以外はproxyしないように + +### 🐛Fixes +* サムネイル生成でエラーになるとファイルのアップロードに失敗する問題を修正 +* オートコンプリートにアニメーション停止が効かない問題を修正 + 11.20.4 (2019/06/13) -------------------- ### 🐛Fixes diff --git a/package.json b/package.json index d7ad45937..22cb43cb3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo ", - "version": "11.20.4", + "version": "11.21.0", "codename": "daybreak", "repository": { "type": "git",