diff --git a/CHANGELOG.md b/CHANGELOG.md index 677fb5698b905ad34e8276da69f73c7a0b8fe460..b9c0ddf27d5dcc61ac2001be6414277180a28df0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,11 +12,15 @@ You should also include the user name that made the change. ## 12.x.x (unreleased) +### Changes +- ノートã®æœ€å¤§æ–‡å—æ•°ã‚’è¨å®šã§ãる機能ãŒå»ƒæ¢ã•ã‚Œã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ä¸€å¾‹3000æ–‡å—ã«ãªã‚Šã¾ã—㟠+ ### Improvements - ### Bugfixes - Client: リアクションピッカーã®é«˜ã•ãŒä½Žããªã£ãŸã¾ã¾æˆ»ã‚‰ãªã„ã“ã¨ãŒã‚ã‚‹ã®ã‚’ä¿®æ£ @syuilo +- Client: タッãƒæ“作ã ã¨ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®ç·¨é›†ãŒã—ã«ãã„ã®ã‚’ä¿®æ£ @xianonn ## 12.107.0 (2022/02/12) diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index f4c9d199816c1d68dc28582478b45ef5099fddd0..840e1beeee5eb807dbec668ad4aa23b6a7425a41 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -422,7 +422,6 @@ next: "次" retype: "å†å…¥åŠ›" noteOf: "{user}ã®ãƒŽãƒ¼ãƒˆ" inviteToGroup: "グループã«æ‹›å¾…" -maxNoteTextLength: "ノートã®æ–‡å—数制é™" quoteAttached: "引用付ã" quoteQuestion: "引用ã¨ã—ã¦æ·»ä»˜ã—ã¾ã™ã‹ï¼Ÿ" noMessagesYet: "ã¾ã ãƒãƒ£ãƒƒãƒˆã¯ã‚ã‚Šã¾ã›ã‚“" diff --git a/packages/backend/migration/1645340161439-remove-max-note-text-length.js b/packages/backend/migration/1645340161439-remove-max-note-text-length.js new file mode 100644 index 0000000000000000000000000000000000000000..63e7d25ee5491d946ef15f700cba08ed9f7bdc2c --- /dev/null +++ b/packages/backend/migration/1645340161439-remove-max-note-text-length.js @@ -0,0 +1,13 @@ +const { MigrationInterface, QueryRunner } = require("typeorm"); + +module.exports = class removeMaxNoteTextLength1645340161439 { + name = 'removeMaxNoteTextLength1645340161439' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "maxNoteTextLength"`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" ADD "maxNoteTextLength" integer NOT NULL DEFAULT '500'`); + } +} diff --git a/packages/backend/src/const.ts b/packages/backend/src/const.ts index b00bd81655851347ab30f2f248ed7c63044f5dd1..6d3b9559e8d89e2dc99b8e98905f063f8f46510c 100644 --- a/packages/backend/src/const.ts +++ b/packages/backend/src/const.ts @@ -1,3 +1,5 @@ +export const MAX_NOTE_TEXT_LENGTH = 3000; + export const USER_ONLINE_THRESHOLD = 1000 * 60 * 10; // 10min export const USER_ACTIVE_THRESHOLD = 1000 * 60 * 60 * 24 * 3; // 3days diff --git a/packages/backend/src/models/entities/meta.ts b/packages/backend/src/models/entities/meta.ts index 1426c79c514df48ef92f719e2194883963eb7def..30316424784b61ef9e1ef0eefa9f4e66ae879f08 100644 --- a/packages/backend/src/models/entities/meta.ts +++ b/packages/backend/src/models/entities/meta.ts @@ -205,12 +205,6 @@ export class Meta { }) public remoteDriveCapacityMb: number; - @Column('integer', { - default: 500, - comment: 'Max allowed note text length in characters', - }) - public maxNoteTextLength: number; - @Column('varchar', { length: 128, nullable: true, diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts index ecede8a049ec83c48f73898f16c3883f4e5de8d6..509e120e7905a165b0c9b98f8f70415b91553edc 100644 --- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts @@ -36,7 +36,6 @@ export const paramDef = { logoImageUrl: { type: 'string', nullable: true }, name: { type: 'string', nullable: true }, description: { type: 'string', nullable: true }, - maxNoteTextLength: { type: 'integer', maximum: 8192 }, localDriveCapacityMb: { type: 'integer' }, remoteDriveCapacityMb: { type: 'integer' }, cacheRemoteFiles: { type: 'boolean' }, @@ -164,10 +163,6 @@ export default define(meta, paramDef, async (ps, me) => { set.description = ps.description; } - if (ps.maxNoteTextLength) { - set.maxNoteTextLength = ps.maxNoteTextLength; - } - if (ps.localDriveCapacityMb !== undefined) { set.localDriveCapacityMb = ps.localDriveCapacityMb; } diff --git a/packages/backend/src/server/api/endpoints/meta.ts b/packages/backend/src/server/api/endpoints/meta.ts index 5b5604f6a6d719f08ab206c6a0814e58daf30233..9ea75009e6879dbb6da1668cbc138c8615c91664 100644 --- a/packages/backend/src/server/api/endpoints/meta.ts +++ b/packages/backend/src/server/api/endpoints/meta.ts @@ -138,11 +138,6 @@ export const meta = { type: 'string', optional: false, nullable: true, }, - maxNoteTextLength: { - type: 'number', - optional: false, nullable: false, - default: 500, - }, emojis: { type: 'array', optional: false, nullable: false, @@ -506,7 +501,6 @@ export default define(meta, paramDef, async (ps, me) => { iconUrl: instance.iconUrl, backgroundImageUrl: instance.backgroundImageUrl, logoImageUrl: instance.logoImageUrl, - maxNoteTextLength: Math.min(instance.maxNoteTextLength, DB_MAX_NOTE_TEXT_LENGTH), emojis: await Emojis.packMany(emojis), ads: ads.map(ad => ({ id: ad.id, diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts index 7ac318c5011a776890c3bfb4f2e963d118a1899b..6bf696b9d13f42a6c31e1e4048fc4fe3ccd3e621 100644 --- a/packages/backend/src/server/api/endpoints/notes/create.ts +++ b/packages/backend/src/server/api/endpoints/notes/create.ts @@ -1,24 +1,14 @@ import ms from 'ms'; -import { length } from 'stringz'; import create from '@/services/note/create'; import define from '../../define'; -import { fetchMeta } from '@/misc/fetch-meta'; import { ApiError } from '../../error'; import { User } from '@/models/entities/user'; import { Users, DriveFiles, Notes, Channels, Blockings } from '@/models/index'; import { DriveFile } from '@/models/entities/drive-file'; import { Note } from '@/models/entities/note'; -import { DB_MAX_NOTE_TEXT_LENGTH } from '@/misc/hard-limits'; import { noteVisibilities } from '../../../../types'; import { Channel } from '@/models/entities/channel'; - -let maxNoteTextLength = 500; - -setInterval(() => { - fetchMeta().then(m => { - maxNoteTextLength = m.maxNoteTextLength; - }); -}, 3000); +import { MAX_NOTE_TEXT_LENGTH } from '@/const'; export const meta = { tags: ['notes'], @@ -102,7 +92,7 @@ export const paramDef = { visibleUserIds: { type: 'array', uniqueItems: true, items: { type: 'string', format: 'misskey:id', } }, - text: { type: 'string', nullable: true, maxLength: 3000, default: null }, + text: { type: 'string', nullable: true, maxLength: MAX_NOTE_TEXT_LENGTH, default: null }, cw: { type: 'string', nullable: true, maxLength: 100 }, localOnly: { type: 'boolean', default: false }, noExtractMentions: { type: 'boolean', default: false }, diff --git a/packages/backend/src/server/nodeinfo.ts b/packages/backend/src/server/nodeinfo.ts index 4209fc7f14e49b4d31b31866f2ceebd37d3de67c..25eca291db1d5a79934e8578f4d51232445bf733 100644 --- a/packages/backend/src/server/nodeinfo.ts +++ b/packages/backend/src/server/nodeinfo.ts @@ -3,6 +3,7 @@ import config from '@/config/index'; import { fetchMeta } from '@/misc/fetch-meta'; import { Users, Notes } from '@/models/index'; import { MoreThan } from 'typeorm'; +import { MAX_NOTE_TEXT_LENGTH } from '@/const'; const router = new Router(); @@ -69,7 +70,7 @@ const nodeinfo2 = async () => { emailRequiredForSignup: meta.emailRequiredForSignup, enableHcaptcha: meta.enableHcaptcha, enableRecaptcha: meta.enableRecaptcha, - maxNoteTextLength: meta.maxNoteTextLength, + maxNoteTextLength: MAX_NOTE_TEXT_LENGTH, enableTwitterIntegration: meta.enableTwitterIntegration, enableGithubIntegration: meta.enableGithubIntegration, enableDiscordIntegration: meta.enableDiscordIntegration, diff --git a/packages/client/src/components/widgets.vue b/packages/client/src/components/widgets.vue index ccde5fbe552bf0a52ff70238760b37011539ebd7..da9d935281f9854c42eecd5b4afefbf50f74adee 100644 --- a/packages/client/src/components/widgets.vue +++ b/packages/client/src/components/widgets.vue @@ -12,13 +12,14 @@ <XDraggable v-model="widgets_" item-key="id" + handle=".handle" animation="150" > <template #item="{element}"> <div class="customize-container"> <button class="config _button" @click.prevent.stop="configWidget(element.id)"><i class="fas fa-cog"></i></button> <button class="remove _button" @click.prevent.stop="removeWidget(element)"><i class="fas fa-times"></i></button> - <component :ref="el => widgetRefs[element.id] = el" :is="`mkw-${element.name}`" :widget="element" @updateProps="updateWidget(element.id, $event)"/> + <component class="handle" :ref="el => widgetRefs[element.id] = el" :is="`mkw-${element.name}`" :widget="element" @updateProps="updateWidget(element.id, $event)"/> </div> </template> </XDraggable> @@ -121,10 +122,6 @@ export default defineComponent({ position: relative; cursor: move; - > *:not(.remove):not(.config) { - pointer-events: none; - } - > .config, > .remove { position: absolute; diff --git a/packages/client/src/pages/admin/settings.vue b/packages/client/src/pages/admin/settings.vue index 81204f6e2fed1101f7baead359d2002dd78dc48e..17f7842ab23dca555ed7e8b9ae310101997dd7d0 100644 --- a/packages/client/src/pages/admin/settings.vue +++ b/packages/client/src/pages/admin/settings.vue @@ -52,11 +52,6 @@ <template #caption>{{ $ts.pinnedUsersDescription }}</template> </FormTextarea> - <FormInput v-model="maxNoteTextLength" type="number" class="_formBlock"> - <template #prefix><i class="fas fa-pencil-alt"></i></template> - <template #label>{{ $ts.maxNoteTextLength }}</template> - </FormInput> - <FormSection> <FormSwitch v-model="enableRegistration" class="_formBlock"> <template #label>{{ $ts.enableRegistration }}</template> @@ -186,7 +181,6 @@ export default defineComponent({ bannerUrl: null, backgroundImageUrl: null, themeColor: null, - maxNoteTextLength: 0, enableLocalTimeline: false, enableGlobalTimeline: false, pinnedUsers: '', @@ -216,7 +210,6 @@ export default defineComponent({ this.themeColor = meta.themeColor; this.maintainerName = meta.maintainerName; this.maintainerEmail = meta.maintainerEmail; - this.maxNoteTextLength = meta.maxNoteTextLength; this.enableLocalTimeline = !meta.disableLocalTimeline; this.enableGlobalTimeline = !meta.disableGlobalTimeline; this.pinnedUsers = meta.pinnedUsers.join('\n'); @@ -244,7 +237,6 @@ export default defineComponent({ themeColor: this.themeColor === '' ? null : this.themeColor, maintainerName: this.maintainerName, maintainerEmail: this.maintainerEmail, - maxNoteTextLength: this.maxNoteTextLength, disableLocalTimeline: !this.enableLocalTimeline, disableGlobalTimeline: !this.enableGlobalTimeline, pinnedUsers: this.pinnedUsers.split('\n'),