Compare commits

...

4 Commits

Author SHA1 Message Date
syuilo c6e69ffae4 8.34.3 2018-09-10 18:07:38 +09:00
Acid Chicken (硫酸鶏) b24f368d3f サロゲートペアを字数にカウントしないようにする (#2661)
* Update post-form.vue

* Update messaging-message.ts

* Update post-form.vue

* Update note.ts

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#issuecomment-419579444

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#issuecomment-419579444

* Update messaging-message.ts

refs: https://github.com/syuilo/misskey/pull/2661#issuecomment-419579444

* Update note.ts

refs: https://github.com/syuilo/misskey/pull/2661#issuecomment-419579444

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#discussion_r216175581

* Update post-form.vue

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#discussion_r216242002

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#discussion_r216242105
2018-09-10 18:02:46 +09:00
syuilo 4dc8351f56 Optimize booting script 2018-09-10 17:50:34 +09:00
syuilo f3ab8199a5 Fix bug 2018-09-10 17:40:41 +09:00
7 changed files with 27 additions and 13 deletions
+2 -2
View File
@@ -1,8 +1,8 @@
{ {
"name": "misskey", "name": "misskey",
"author": "syuilo <i@syuilo.com>", "author": "syuilo <i@syuilo.com>",
"version": "8.34.2", "version": "8.34.3",
"clientVersion": "1.0.9567", "clientVersion": "1.0.9572",
"codename": "nighthike", "codename": "nighthike",
"main": "./built/index.js", "main": "./built/index.js",
"private": true, "private": true,
+5 -3
View File
@@ -18,6 +18,8 @@
return; return;
} }
const langs = LANGS;
//#region Load settings //#region Load settings
let settings = null; let settings = null;
const vuex = localStorage.getItem('vuex'); const vuex = localStorage.getItem('vuex');
@@ -40,10 +42,10 @@
//#region Detect the user language //#region Detect the user language
let lang = null; let lang = null;
if (LANGS.includes(navigator.language)) { if (langs.includes(navigator.language)) {
lang = navigator.language; lang = navigator.language;
} else { } else {
lang = LANGS.find(x => x.split('-')[0] == navigator.language); lang = langs.find(x => x.split('-')[0] == navigator.language);
if (lang == null) { if (lang == null) {
// Fallback // Fallback
@@ -52,7 +54,7 @@
} }
if (settings && settings.device.lang && if (settings && settings.device.lang &&
LANGS.includes(settings.device.lang)) { langs.includes(settings.device.lang)) {
lang = settings.device.lang; lang = settings.device.lang;
} }
//#endregion //#endregion
@@ -45,7 +45,7 @@
<span v-if="visibility === 'specified'">%fa:envelope%</span> <span v-if="visibility === 'specified'">%fa:envelope%</span>
<span v-if="visibility === 'private'">%fa:lock%</span> <span v-if="visibility === 'private'">%fa:lock%</span>
</button> </button>
<p class="text-count" :class="{ over: text.length > 1000 }">{{ 1000 - text.length }}</p> <p class="text-count" :class="{ over: this.trimmedLength(text) > 1000 }">{{ 1000 - this.trimmedLength(text) }}</p>
<button :class="{ posting }" class="submit" :disabled="!canPost" @click="post"> <button :class="{ posting }" class="submit" :disabled="!canPost" @click="post">
{{ posting ? '%i18n:@posting%' : submitText }}<mk-ellipsis v-if="posting"/> {{ posting ? '%i18n:@posting%' : submitText }}<mk-ellipsis v-if="posting"/>
</button> </button>
@@ -63,6 +63,7 @@ import MkVisibilityChooser from '../../../common/views/components/visibility-cho
import parse from '../../../../../mfm/parse'; import parse from '../../../../../mfm/parse';
import { host } from '../../../config'; import { host } from '../../../config';
import { erase } from '../../../../../prelude/array'; import { erase } from '../../../../../prelude/array';
import { length } from 'stringz';
import parseAcct from '../../../../../misc/acct/parse'; import parseAcct from '../../../../../misc/acct/parse';
export default Vue.extend({ export default Vue.extend({
@@ -147,7 +148,7 @@ export default Vue.extend({
canPost(): boolean { canPost(): boolean {
return !this.posting && return !this.posting &&
(1 <= this.text.length || 1 <= this.files.length || this.poll || this.renote) && (1 <= this.text.length || 1 <= this.files.length || this.poll || this.renote) &&
(this.text.trim().length <= 1000); (length(this.text.trim()) <= 1000);
} }
}, },
@@ -199,6 +200,10 @@ export default Vue.extend({
}, },
methods: { methods: {
trimmedLength(text: string) {
return length(text.trim());
},
addTag(tag: string) { addTag(tag: string) {
insertTextAtCursor(this.$refs.text, ` #${tag} `); insertTextAtCursor(this.$refs.text, ` #${tag} `);
}, },
@@ -4,7 +4,7 @@
<header> <header>
<button class="cancel" @click="cancel">%fa:times%</button> <button class="cancel" @click="cancel">%fa:times%</button>
<div> <div>
<span class="text-count" :class="{ over: text.length > 1000 }">{{ 1000 - text.length }}</span> <span class="text-count" :class="{ over: trimmedLength(text) > 1000 }">{{ 1000 - trimmedLength(text) }}</span>
<span class="geo" v-if="geo">%fa:map-marker-alt%</span> <span class="geo" v-if="geo">%fa:map-marker-alt%</span>
<button class="submit" :disabled="!canPost" @click="post">{{ submitText }}</button> <button class="submit" :disabled="!canPost" @click="post">{{ submitText }}</button>
</div> </div>
@@ -60,6 +60,7 @@ import getFace from '../../../common/scripts/get-face';
import parse from '../../../../../mfm/parse'; import parse from '../../../../../mfm/parse';
import { host } from '../../../config'; import { host } from '../../../config';
import { erase } from '../../../../../prelude/array'; import { erase } from '../../../../../prelude/array';
import { length } from 'stringz';
import parseAcct from '../../../../../misc/acct/parse'; import parseAcct from '../../../../../misc/acct/parse';
export default Vue.extend({ export default Vue.extend({
@@ -180,6 +181,10 @@ export default Vue.extend({
}, },
methods: { methods: {
trimmedLength(text: string) {
return length(text.trim());
},
addTag(tag: string) { addTag(tag: string) {
insertTextAtCursor(this.$refs.text, ` #${tag} `); insertTextAtCursor(this.$refs.text, ` #${tag} `);
}, },
+2 -1
View File
@@ -4,6 +4,7 @@ import { pack as packUser } from './user';
import { pack as packFile } from './drive-file'; import { pack as packFile } from './drive-file';
import db from '../db/mongodb'; import db from '../db/mongodb';
import MessagingHistory, { deleteMessagingHistory } from './messaging-history'; import MessagingHistory, { deleteMessagingHistory } from './messaging-history';
import { length } from 'stringz';
const MessagingMessage = db.get<IMessagingMessage>('messagingMessages'); const MessagingMessage = db.get<IMessagingMessage>('messagingMessages');
export default MessagingMessage; export default MessagingMessage;
@@ -19,7 +20,7 @@ export interface IMessagingMessage {
} }
export function isValidText(text: string): boolean { export function isValidText(text: string): boolean {
return text.length <= 1000 && text.trim() != ''; return length(text.trim()) <= 1000 && text.trim() != '';
} }
/** /**
+3 -2
View File
@@ -2,6 +2,7 @@ import * as mongo from 'mongodb';
const deepcopy = require('deepcopy'); const deepcopy = require('deepcopy');
import rap from '@prezzemolo/rap'; import rap from '@prezzemolo/rap';
import db from '../db/mongodb'; import db from '../db/mongodb';
import { length } from 'stringz';
import { IUser, pack as packUser } from './user'; import { IUser, pack as packUser } from './user';
import { pack as packApp } from './app'; import { pack as packApp } from './app';
import PollVote, { deletePollVote } from './poll-vote'; import PollVote, { deletePollVote } from './poll-vote';
@@ -24,11 +25,11 @@ Note.createIndex({
export default Note; export default Note;
export function isValidText(text: string): boolean { export function isValidText(text: string): boolean {
return text.length <= 1000 && text.trim() != ''; return length(text.trim()) <= 1000 && text.trim() != '';
} }
export function isValidCw(text: string): boolean { export function isValidCw(text: string): boolean {
return text.length <= 100; return length(text.trim()) <= 100;
} }
export type INote = { export type INote = {
+2 -2
View File
@@ -36,8 +36,8 @@ async function save(path: string, name: string, type: string, hash: string, size
if (config.drive && config.drive.storage == 'minio') { if (config.drive && config.drive.storage == 'minio') {
const minio = new Minio.Client(config.drive.config); const minio = new Minio.Client(config.drive.config);
const key = `${config.drive.prefix}/${uuid.v4()}/${name}`; const key = `${config.drive.prefix}/${uuid.v4()}/${encodeURIComponent(name)}`;
const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}/${name}.thumbnail.jpg`; const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}/${encodeURIComponent(name)}.thumbnail.jpg`;
const baseUrl = config.drive.baseUrl const baseUrl = config.drive.baseUrl
|| `${ config.drive.config.useSSL ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? `:${config.drive.config.port}` : '' }/${ config.drive.bucket }`; || `${ config.drive.config.useSSL ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? `:${config.drive.config.port}` : '' }/${ config.drive.bucket }`;