diff --git a/.config/example.yml b/.config/example.yml index 91580d9ec..201082cce 100644 --- a/.config/example.yml +++ b/.config/example.yml @@ -88,7 +88,9 @@ redis: #elasticsearch: # host: localhost # port: 9200 -# pass: null +# ssl: false +# user: +# pass: # ┌───────────────┐ #───┘ ID generation └─────────────────────────────────────────── diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index c5c8b3597..91668786e 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -21,6 +21,7 @@ jobs: - 5432:5432 env: POSTGRES_DB: test-misskey + POSTGRES_HOST_AUTH_METHOD: trust redis: image: redis:alpine ports: @@ -40,3 +41,13 @@ jobs: run: yarn build - name: Test run: yarn test + + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 12.x + - run: yarn install + - run: yarn lint diff --git a/.mocharc.json b/.mocharc.json new file mode 100644 index 000000000..908490eca --- /dev/null +++ b/.mocharc.json @@ -0,0 +1,4 @@ +{ + "timeout": 30000, + "slow": 1000 +} diff --git a/README.md b/README.md index 32175b188..3247cb8ec 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,6 @@ Please see the [Contribution Guide](./CONTRIBUTING.md). 見当かなみ YuzuRyo61 mewl hayabusa -mydarkstar Denshi Liaizon Wakest @@ -140,7 +139,6 @@ Please see the [Contribution Guide](./CONTRIBUTING.md). 見当かなみ YuzuRyo61 mewl hayabusa -mydarkstar @@ -167,6 +165,8 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
S Y
+ + @@ -175,6 +175,8 @@ Please see the [Contribution Guide](./CONTRIBUTING.md). + + @@ -183,18 +185,18 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
aqz tamaina012nafuchoco Atsuko Tominaga natalie noellabouroco @99
aqz tamaina012nafuchoco Atsuko Tominaga natalie noellabouroco @99
- + - +
dansup Nokotaro Takeda nenohiEfertone Takashi Shibuya
dansup Nokotaro Takeda nenohiEfertone Takashi Shibuya
-**Last updated:** Fri, 21 Feb 2020 13:39:06 UTC +**Last updated:** Tue, 17 Mar 2020 18:57:08 UTC [backer-url]: #backers diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 550ac5159..3e5712087 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -84,7 +84,7 @@ clickToShow: "クリックして表示" sensitive: "閲覧注意" add: "追加" reaction: "リアクション" -reactionSettingDescription: "リアクションピッカーに表示するリアクションを改行で区切って設定します。" +reactionSettingDescription: "リアクションピッカーに表示するリアクションを設定します。" rememberNoteVisibility: "公開範囲を記憶する" renameFile: "ファイル名を変更" attachCancel: "添付取り消し" @@ -168,6 +168,7 @@ intro: "Misskeyのインストールが完了しました!管理者アカウ done: "完了" processing: "処理中" preview: "プレビュー" +default: "デフォルト" noCustomEmojis: "絵文字はありません" customEmojisOfRemote: "リモートの絵文字" noJobs: "ジョブはありません" @@ -422,16 +423,28 @@ hideThisNote: "このノートを非表示" showFeaturedNotesInTimeline: "タイムラインにおすすめのノートを表示する" objectStorage: "オブジェクトストレージ" useObjectStorage: "オブジェクトストレージを使用" +objectStorageBaseUrl: "Base URL" +objectStorageBaseUrlDesc: "参照に使用するURL。CDNやProxyを使用している場合はそのURL、S3: 'https://.s3.amazonaws.com'、GCS等: 'https://storage.googleapis.com/'。" +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "使用サービスのbucket名を指定してください。" +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "このprefixのディレクトリ下に格納されます。" +objectStorageEndpoint: "Endpoint" +objectStorageEndpointDesc: "S3の場合は空、それ以外の場合は各サービスのendpointを指定してください。''または':'のように指定します。" +objectStorageRegion: "Region" +objectStorageRegionDesc: "'xx-east-1'のようなregionを指定してください。使用サービスにregionの概念がない場合は、空または'us-east-1'にしてください。" +objectStorageUseSSL: "SSLを使用する" +objectStorageUseSSLDesc: "API接続にhttpsを使用しない場合はオフにしてください" serverLogs: "サーバーログ" deleteAll: "全て削除" showFixedPostForm: "タイムライン上部に投稿フォームを表示する" newNoteRecived: "新しいノートがあります" -useNotificationsPopup: "通知一覧をポップアップで表示" sounds: "サウンド" listen: "聴く" none: "なし" volume: "音量" details: "詳細" +chooseEmoji: "絵文字を選択" _sfx: note: "ノート" diff --git a/migration/1582875306439-note-reaction-length.ts b/migration/1582875306439-note-reaction-length.ts new file mode 100644 index 000000000..b9af61eb0 --- /dev/null +++ b/migration/1582875306439-note-reaction-length.ts @@ -0,0 +1,14 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class noteReactionLength1582875306439 implements MigrationInterface { + name = 'noteReactionLength1582875306439' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "note_reaction" ALTER COLUMN "reaction" TYPE character varying(130)`, undefined); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "note_reaction" ALTER COLUMN "reaction" TYPE character varying(128)`, undefined); + } + +} diff --git a/package.json b/package.json index 4fc350cc2..ba80ccdbb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo ", - "version": "12.21.0", + "version": "12.22.0", "codename": "indigo", "repository": { "type": "git", @@ -21,7 +21,7 @@ "gulp": "gulp build", "clean": "gulp clean", "cleanall": "gulp cleanall", - "lint": "gulp lint", + "lint": "tslint 'src/**/*.ts'", "test": "cross-env TS_NODE_FILES=true gulp test", "format": "gulp format" }, diff --git a/src/@types/jsrsasign.d.ts b/src/@types/jsrsasign.d.ts index 55bebd9bf..bc9d746f7 100644 --- a/src/@types/jsrsasign.d.ts +++ b/src/@types/jsrsasign.d.ts @@ -171,6 +171,7 @@ declare module 'jsrsasign' { public static getTLVbyList(h: ASN1S, currentIndex: Idx, nthList: Mutable, checkingTag?: string): ASN1TLV; + // tslint:disable-next-line:bool-param-default public static getVbyList(h: ASN1S, currentIndex: Idx, nthList: Mutable, checkingTag?: string, removeUnusedbits?: boolean): ASN1V; public static hextooidstr(hex: ASN1OIDV): OID; @@ -620,9 +621,7 @@ declare module 'jsrsasign' { public encrypt(text: string): HexString | null; - public encryptOAEP(text: string, hash?: string, hashLen?: number): HexString | null; - - public encryptOAEP(text: string, hash?: (s: string) => string, hashLen?: number): HexString | null; + public encryptOAEP(text: string, hash?: string | ((s: string) => string), hashLen?: number): HexString | null; //// RSA PRIVATE @@ -638,9 +637,7 @@ declare module 'jsrsasign' { public decrypt(ctext: HexString): string; - public decryptOAEP(ctext: HexString, hash?: string, hashLen?: number): string | null; - - public encryptOAEP(ctext: HexString, hash?: (s: string) => string, hashLen?: number): string | null; + public decryptOAEP(ctext: HexString, hash?: string | ((s: string) => string), hashLen?: number): string | null; //// RSA PEM diff --git a/src/client/app.vue b/src/client/app.vue index 48df0b9aa..4e5dfbd18 100644 --- a/src/client/app.vue +++ b/src/client/app.vue @@ -51,11 +51,7 @@ {{ $store.getters.isSignedIn ? $t('timeline') : $t('home') }} @@ -173,7 +164,6 @@ import { v4 as uuid } from 'uuid'; import i18n from './i18n'; import { host, instanceName } from './config'; import { search } from './scripts/search'; -import contains from './scripts/contains'; import MkToast from './components/toast.vue'; const DESKTOP_THRESHOLD = 1100; @@ -183,7 +173,6 @@ export default Vue.extend({ components: { XClock: () => import('./components/header-clock.vue').then(m => m.default), - XNotifications: () => import('./components/notifications.vue').then(m => m.default), MkButton: () => import('./components/ui/button.vue').then(m => m.default), XDraggable: () => import('vuedraggable'), }, @@ -194,7 +183,6 @@ export default Vue.extend({ pageKey: 0, showNav: false, searching: false, - notificationsOpen: false, accounts: [], lists: [], connection: null, @@ -226,23 +214,10 @@ export default Vue.extend({ watch:{ $route(to, from) { this.pageKey++; - this.notificationsOpen = false; this.showNav = false; this.canBack = (window.history.length > 0 && !['index'].includes(to.name)); }, - notificationsOpen(open) { - if (open) { - for (const el of Array.from(document.querySelectorAll('*'))) { - el.addEventListener('mousedown', this.onMousedown); - } - } else { - for (const el of Array.from(document.querySelectorAll('*'))) { - el.removeEventListener('mousedown', this.onMousedown); - } - } - }, - isDesktop() { if (this.isDesktop) this.adjustWidgetsWidth(); } @@ -568,15 +543,6 @@ export default Vue.extend({ this.$root.sound('notification'); }, - onMousedown(e) { - e.preventDefault(); - if (!contains(this.$refs.notifications.$el, e.target) && - !contains(this.$refs.notificationButton, e.target) && - !contains(this.$refs.notificationButton2, e.target) - ) this.notificationsOpen = false; - return false; - }, - widgetFunc(id) { const w = this.$refs[id][0]; if (w.func) w.func(); @@ -652,7 +618,7 @@ export default Vue.extend({ $header-height: 60px; $nav-width: 250px; $nav-icon-only-width: 74px; - $main-width: 700px; + $main-width: 650px; $ui-font-size: 1em; $nav-icon-only-threshold: 1300px; $nav-hide-threshold: 700px; @@ -975,17 +941,21 @@ export default Vue.extend({ > main { width: $main-width; min-width: $main-width; + box-shadow: 1px 0 0 0 var(--divider), -1px 0 0 0 var(--divider); @media (max-width: $side-hide-threshold) { min-width: 0; } > .content { - padding: 16px; - box-sizing: border-box; + > * { + &:not(.full) { + padding: var(--margin) 0; + } - @media (max-width: 500px) { - padding: 8px; + &:not(.naked) { + background: var(--pageBg); + } } } @@ -1023,6 +993,7 @@ export default Vue.extend({ > .widgets { box-sizing: border-box; + margin-left: var(--margin); @media (max-width: $side-hide-threshold) { display: none; @@ -1175,34 +1146,5 @@ export default Vue.extend({ } } } - - > .notifications { - position: fixed; - top: 32px; - left: 0; - right: 0; - margin: 0 auto; - padding: 8px 8px 0 8px; - z-index: 10001; - width: 350px; - height: 400px; - box-sizing: border-box; - background: var(--vocsgcxy); - -webkit-backdrop-filter: blur(12px); - backdrop-filter: blur(12px); - border-radius: 6px; - box-shadow: 0 3px 12px rgba(27, 31, 35, 0.15); - overflow: auto; - - @media (max-width: 800px) { - width: 320px; - height: 350px; - } - - @media (max-width: 500px) { - width: 290px; - height: 310px; - } - } } diff --git a/src/client/components/date-separated-list.vue b/src/client/components/date-separated-list.vue index 53fd0a7c7..d41dd9d52 100644 --- a/src/client/components/date-separated-list.vue +++ b/src/client/components/date-separated-list.vue @@ -1,5 +1,5 @@