Merge pull request 'develop' (#9031) from develop into main

Reviewed-on: https://codeberg.org/thatonecalculator/calckey/pulls/9031
This commit is contained in:
Kainoa Kanter 2022-08-16 00:31:09 +02:00
commit d56c0f3708
11 changed files with 1214 additions and 972 deletions

1
.gitignore vendored
View File

@ -46,6 +46,7 @@ api-docs.json
.DS_Store .DS_Store
/files /files
ormconfig.json ormconfig.json
/custom
# blender backups # blender backups
*.blend1 *.blend1

View File

@ -15,6 +15,7 @@
- Non-nyaify cat mode - Non-nyaify cat mode
- Timeline filters - Timeline filters
- Filter notifications by user - Filter notifications by user
- Join Reason system like Mastodon/Pleroma
- Build flag to remove NSFW/AI stuff - Build flag to remove NSFW/AI stuff
- [Rat mode?](https://stop.voring.me/notes/933fx97bmd) - [Rat mode?](https://stop.voring.me/notes/933fx97bmd)

View File

@ -9,6 +9,11 @@
You should also include the user name that made the change. You should also include the user name that made the change.
--> -->
## 12.x.x (unreleased)
### Improvements
- Client: Add following badge to user preview popup @nvisser
## 12.118.1 (2022/08/08) ## 12.118.1 (2022/08/08)
### Bugfixes ### Bugfixes

View File

@ -17,23 +17,33 @@
- Calckey adds many quality of life changes and bug fixes for users and instance admins alike. - Calckey adds many quality of life changes and bug fixes for users and instance admins alike.
- Read **[this document](./CALCKEY.md)** all for current and future differences. - Read **[this document](./CALCKEY.md)** all for current and future differences.
- Notable differences: - Notable differences:
- Improved UI/UX, notifications, security, and more
- Recommended Instances timeline - Recommended Instances timeline
- Improved notifications
- Many more user and admin settings - Many more user and admin settings
</div> </div>
<div style="clear: both;"></div> <div style="clear: both;"></div>
# 🥂 Links
- 💸 Liberapay: https://liberapay.com/ThatOneCalculator
- 💁 Matrix support room: https://matrix.to/#/#calckey:matrix.fedibird.com
- 📜 Instance list: https://calckey.fediverse.observer/list
- 📖 JoinFediverse Wiki: https://joinfediverse.wiki/What_is_Calckey%3F
# 📝 Documentation # 📝 Documentation
- Misskey documentation can be found on [Misskey Hub](https://misskey-hub.net/) - Misskey documentation can be found on [Misskey Hub](https://misskey-hub.net/)
- To make a new Calckey instance, read their documentation for building from source or using Docker, but replace their repo link (`https://github.com/misskey-dev/misskey.git`) with `https://codeberg.org/thatonecalculator/calckey.git`.
- API reference can be found on any Calckey instance's [API doc page](https://stop.voring.me/api-doc) - API reference can be found on any Calckey instance's [API doc page](https://stop.voring.me/api-doc)
# 🚚 Migrating from Misskey to Calckey # 🚚 Migrating from Misskey to Calckey
You need at least 🐢 NodeJS v16.15.0 (v18.4.0 recommended!) and *exactly* 🧶 Yarn v3.2.2! You need at least 🐢 NodeJS v16.15.0 (v18.4.0 recommended!) and *exactly* 🧶 Yarn v3.2.2!
> ⚠️ Please don't use NodeJS v18.6.0, as it's known to cause problems.
## 📩 Install dependencies ## 📩 Install dependencies
```sh ```sh
@ -54,8 +64,8 @@ cp ../misskey/.config/default.yml ./.config/default.yml # replace `../misskey/`
## 💅 Customize ## 💅 Customize
- To add custom CSS for all users, edit `/custom/instance.css`. - To add custom CSS for all users, edit `./custom/instance.css`.
- To add static assets (such as images for the splash screen), place them in the `/custom/` folder. They'll then be avaliable on `https://yourinstance.tld/static-assets/filename.png`. - To add static assets (such as images for the splash screen), place them in the `./custom/` directory. They'll then be avaliable on `https://yourinstance.tld/static-assets/filename.ext`.
## 🚀 Build and launch! ## 🚀 Build and launch!
@ -63,7 +73,7 @@ cp ../misskey/.config/default.yml ./.config/default.yml # replace `../misskey/`
```sh ```sh
# git pull # git pull
yarn install yarn install # prepend `YARN_CHECKSUM_BEHAVIOR=update` if it doesn't work
NODE_ENV=production yarn run build && yarn run migrate NODE_ENV=production yarn run build && yarn run migrate
# Edit service to point to calckey folder and restart! # Edit service to point to calckey folder and restart!
``` ```
@ -75,7 +85,3 @@ NODE_ENV=production yarn run build && yarn run migrate
sudo docker-compose build sudo docker-compose build
sudo docker-compose stop && sudo docker-compose up -d sudo docker-compose stop && sudo docker-compose up -d
``` ```
# 💸 Patrons
None yet! You can support of the development of this fork here, every little bit counts: https://liberapay.com/ThatOneCalculator/

View File

@ -1,6 +1,6 @@
{ {
"name": "misskey", "name": "misskey",
"version": "12.118.1-calc", "version": "12.118.1-calc.1",
"codename": "aqua", "codename": "aqua",
"repository": { "repository": {
"type": "git", "type": "git",
@ -56,9 +56,9 @@
"devDependencies": { "devDependencies": {
"@types/gulp": "4.0.9", "@types/gulp": "4.0.9",
"@types/gulp-rename": "2.0.1", "@types/gulp-rename": "2.0.1",
"@typescript-eslint/parser": "5.31.0", "@typescript-eslint/parser": "5.33.0",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"cypress": "10.3.1", "cypress": "10.4.0",
"start-server-and-test": "1.14.0", "start-server-and-test": "1.14.0",
"typescript": "4.7.4", "typescript": "4.7.4",
"vue-eslint-parser": "^9.0.2" "vue-eslint-parser": "^9.0.2"

View File

@ -17,24 +17,24 @@
"@tensorflow/tfjs-node": "3.19.0" "@tensorflow/tfjs-node": "3.19.0"
}, },
"dependencies": { "dependencies": {
"@bull-board/koa": "4.1.1", "@bull-board/koa": "4.2.2",
"@discordapp/twemoji": "14.0.2", "@discordapp/twemoji": "14.0.2",
"@elastic/elasticsearch": "7.17.0", "@elastic/elasticsearch": "7.17.0",
"@koa/cors": "3.3.0", "@koa/cors": "3.3.0",
"@koa/multer": "3.0.0", "@koa/multer": "3.0.0",
"@koa/router": "9.4.0", "@koa/router": "9.0.1",
"@peertube/http-signature": "1.6.0", "@peertube/http-signature": "1.7.0",
"@sinonjs/fake-timers": "9.1.2", "@sinonjs/fake-timers": "9.1.2",
"@syuilo/aiscript": "0.11.1", "@syuilo/aiscript": "0.11.1",
"ajv": "8.11.0", "ajv": "8.11.0",
"archiver": "5.3.1", "archiver": "5.3.1",
"autobind-decorator": "2.4.0", "autobind-decorator": "2.4.0",
"autwh": "0.1.0", "autwh": "0.1.0",
"aws-sdk": "2.1185.0", "aws-sdk": "2.1194.0",
"bcryptjs": "2.4.3", "bcryptjs": "2.4.3",
"blurhash": "1.1.5", "blurhash": "1.1.5",
"bull": "4.8.5", "bull": "4.8.5",
"cacheable-lookup": "6.0.4", "cacheable-lookup": "6.1.0",
"cbor": "8.1.0", "cbor": "8.1.0",
"chalk": "5.0.1", "chalk": "5.0.1",
"chalk-template": "0.4.0", "chalk-template": "0.4.0",
@ -46,9 +46,9 @@
"deep-email-validator": "0.1.21", "deep-email-validator": "0.1.21",
"escape-regexp": "0.0.1", "escape-regexp": "0.0.1",
"feed": "4.2.2", "feed": "4.2.2",
"file-type": "17.1.4", "file-type": "17.1.6",
"fluent-ffmpeg": "2.1.2", "fluent-ffmpeg": "2.1.2",
"got": "12.3.0", "got": "12.3.1",
"hpagent": "0.1.2", "hpagent": "0.1.2",
"ioredis": "4.28.5", "ioredis": "4.28.5",
"ip-cidr": "3.0.10", "ip-cidr": "3.0.10",
@ -75,13 +75,13 @@
"multer": "1.4.4", "multer": "1.4.4",
"nested-property": "4.0.0", "nested-property": "4.0.0",
"node-fetch": "3.2.10", "node-fetch": "3.2.10",
"nodemailer": "6.7.7", "nodemailer": "6.7.8",
"nsfwjs": "2.4.1", "nsfwjs": "2.4.1",
"oauth": "^0.9.15", "oauth": "^0.9.15",
"os-utils": "0.0.14", "os-utils": "0.0.14",
"parse5": "7.0.0", "parse5": "7.0.0",
"pg": "8.7.3", "pg": "8.7.3",
"private-ip": "2.3.3", "private-ip": "2.3.4",
"probe-image-size": "7.2.3", "probe-image-size": "7.2.3",
"promise-limit": "2.7.0", "promise-limit": "2.7.0",
"pug": "3.0.2", "pug": "3.0.2",
@ -105,13 +105,13 @@
"stringz": "2.1.0", "stringz": "2.1.0",
"summaly": "2.7.0", "summaly": "2.7.0",
"syslog-pro": "1.0.0", "syslog-pro": "1.0.0",
"systeminformation": "5.12.1", "systeminformation": "5.12.5",
"tinycolor2": "1.4.2", "tinycolor2": "1.4.2",
"tmp": "0.2.1", "tmp": "0.2.1",
"ts-loader": "9.3.1", "ts-loader": "9.3.1",
"ts-node": "10.9.1", "ts-node": "10.9.1",
"tsc-alias": "1.7.0", "tsc-alias": "1.7.0",
"tsconfig-paths": "4.0.0", "tsconfig-paths": "4.1.0",
"twemoji-parser": "14.0.0", "twemoji-parser": "14.0.0",
"typeorm": "0.3.7", "typeorm": "0.3.7",
"ulid": "2.3.0", "ulid": "2.3.0",
@ -123,14 +123,14 @@
"xev": "3.0.2" "xev": "3.0.2"
}, },
"devDependencies": { "devDependencies": {
"@redocly/openapi-core": "1.0.0-beta.105", "@redocly/openapi-core": "1.0.0-beta.106",
"@types/bcryptjs": "2.4.2", "@types/bcryptjs": "2.4.2",
"@types/bull": "3.15.9", "@types/bull": "3.15.9",
"@types/cbor": "6.0.0", "@types/cbor": "6.0.0",
"@types/escape-regexp": "0.0.1", "@types/escape-regexp": "0.0.1",
"@types/fluent-ffmpeg": "2.1.20", "@types/fluent-ffmpeg": "2.1.20",
"@types/js-yaml": "4.0.5", "@types/js-yaml": "4.0.5",
"@types/jsdom": "16.2.14", "@types/jsdom": "20.0.0",
"@types/jsonld": "1.5.6", "@types/jsonld": "1.5.6",
"@types/jsrsasign": "10.5.2", "@types/jsrsasign": "10.5.2",
"@types/koa": "2.13.5", "@types/koa": "2.13.5",
@ -145,9 +145,9 @@
"@types/koa__multer": "2.0.4", "@types/koa__multer": "2.0.4",
"@types/koa__router": "8.0.11", "@types/koa__router": "8.0.11",
"@types/mocha": "9.1.1", "@types/mocha": "9.1.1",
"@types/node": "18.6.3", "@types/node": "18.7.2",
"@types/node-fetch": "3.0.3", "@types/node-fetch": "3.0.3",
"@types/nodemailer": "6.4.4", "@types/nodemailer": "6.4.5",
"@types/oauth": "0.9.1", "@types/oauth": "0.9.1",
"@types/pug": "2.0.6", "@types/pug": "2.0.6",
"@types/punycode": "2.1.0", "@types/punycode": "2.1.0",
@ -157,8 +157,8 @@
"@types/redis": "4.0.11", "@types/redis": "4.0.11",
"@types/rename": "1.0.4", "@types/rename": "1.0.4",
"@types/sanitize-html": "2.6.2", "@types/sanitize-html": "2.6.2",
"@types/semver": "7.3.10", "@types/semver": "7.3.12",
"@types/sharp": "0.30.4", "@types/sharp": "0.30.5",
"@types/sinonjs__fake-timers": "8.1.2", "@types/sinonjs__fake-timers": "8.1.2",
"@types/speakeasy": "2.0.7", "@types/speakeasy": "2.0.7",
"@types/tinycolor2": "1.4.3", "@types/tinycolor2": "1.4.3",
@ -167,10 +167,10 @@
"@types/web-push": "3.3.2", "@types/web-push": "3.3.2",
"@types/websocket": "1.0.5", "@types/websocket": "1.0.5",
"@types/ws": "8.5.3", "@types/ws": "8.5.3",
"@typescript-eslint/eslint-plugin": "5.31.0", "@typescript-eslint/eslint-plugin": "5.33.0",
"@typescript-eslint/parser": "5.31.0", "@typescript-eslint/parser": "5.33.0",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"eslint": "8.20.0", "eslint": "8.21.0",
"eslint-plugin-import": "2.26.0", "eslint-plugin-import": "2.26.0",
"execa": "6.1.0", "execa": "6.1.0",
"form-data": "^4.0.0", "form-data": "^4.0.0",

View File

@ -13,14 +13,14 @@
"@rollup/plugin-json": "4.1.0", "@rollup/plugin-json": "4.1.0",
"@rollup/pluginutils": "^4.2.1", "@rollup/pluginutils": "^4.2.1",
"@syuilo/aiscript": "0.11.1", "@syuilo/aiscript": "0.11.1",
"@vitejs/plugin-vue": "3.0.1", "@vitejs/plugin-vue": "3.0.3",
"@vue/compiler-sfc": "3.2.37", "@vue/compiler-sfc": "3.2.37",
"autobind-decorator": "2.4.0", "autobind-decorator": "2.4.0",
"autosize": "5.0.1", "autosize": "5.0.1",
"blurhash": "1.1.5", "blurhash": "1.1.5",
"broadcast-channel": "4.14.0", "broadcast-channel": "4.14.0",
"browser-image-resizer": "git+https://github.com/misskey-dev/browser-image-resizer#v2.2.1-misskey.2", "browser-image-resizer": "git+https://github.com/misskey-dev/browser-image-resizer#v2.2.1-misskey.2",
"chart.js": "3.8.2", "chart.js": "3.9.1",
"chartjs-adapter-date-fns": "2.0.0", "chartjs-adapter-date-fns": "2.0.0",
"chartjs-plugin-gradient": "0.5.0", "chartjs-plugin-gradient": "0.5.0",
"chartjs-plugin-zoom": "1.2.1", "chartjs-plugin-zoom": "1.2.1",
@ -42,7 +42,7 @@
"querystring": "0.2.1", "querystring": "0.2.1",
"rndstr": "1.0.0", "rndstr": "1.0.0",
"s-age": "1.1.2", "s-age": "1.1.2",
"sass": "1.54.0", "sass": "1.54.4",
"seedrandom": "3.0.5", "seedrandom": "3.0.5",
"strict-event-emitter-types": "2.0.0", "strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0", "stringz": "2.1.0",
@ -53,12 +53,12 @@
"throttle-debounce": "5.0.0", "throttle-debounce": "5.0.0",
"tinycolor2": "1.4.2", "tinycolor2": "1.4.2",
"tsc-alias": "1.7.0", "tsc-alias": "1.7.0",
"tsconfig-paths": "4.0.0", "tsconfig-paths": "4.1.0",
"twemoji-parser": "14.0.0", "twemoji-parser": "14.0.0",
"typescript": "4.7.4", "typescript": "4.7.4",
"uuid": "8.3.2", "uuid": "8.3.2",
"vanilla-tilt": "1.7.2", "vanilla-tilt": "1.7.2",
"vite": "3.0.4", "vite": "3.0.7",
"vue": "3.2.37", "vue": "3.2.37",
"vue-prism-editor": "2.0.0-alpha.2", "vue-prism-editor": "2.0.0-alpha.2",
"vuedraggable": "4.0.1" "vuedraggable": "4.0.1"
@ -69,20 +69,20 @@
"@types/gulp": "4.0.9", "@types/gulp": "4.0.9",
"@types/gulp-rename": "2.0.1", "@types/gulp-rename": "2.0.1",
"@types/katex": "0.14.0", "@types/katex": "0.14.0",
"@types/matter-js": "0.17.7", "@types/matter-js": "0.18.1",
"@types/punycode": "2.1.0", "@types/punycode": "2.1.0",
"@types/seedrandom": "3.0.2", "@types/seedrandom": "3.0.2",
"@types/throttle-debounce": "5.0.0", "@types/throttle-debounce": "5.0.0",
"@types/tinycolor2": "1.4.3", "@types/tinycolor2": "1.4.3",
"@types/uuid": "8.3.4", "@types/uuid": "8.3.4",
"@typescript-eslint/eslint-plugin": "5.31.0", "@typescript-eslint/eslint-plugin": "5.33.0",
"@typescript-eslint/parser": "5.31.0", "@typescript-eslint/parser": "5.33.0",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"cypress": "10.3.1", "cypress": "10.4.0",
"eslint": "8.20.0", "eslint": "8.21.0",
"eslint-plugin-import": "2.26.0", "eslint-plugin-import": "2.26.0",
"eslint-plugin-vue": "9.3.0", "eslint-plugin-vue": "9.3.0",
"rollup": "2.77.2", "rollup": "2.77.3",
"start-server-and-test": "1.14.0" "start-server-and-test": "1.14.0"
} }
} }

View File

@ -1,5 +1,8 @@
<template> <template>
<div v-if="show" ref="el" class="fdidabkb" :class="{ slim: narrow, thin: thin_ }" :style="{ background: bg }" @click="onClick"> <div v-if="show" ref="el" class="fdidabkb" :class="{ slim: narrow, thin: thin_ }" :style="{ background: bg }" @click="onClick">
<div v-if="narrow" class="buttons left">
<MkAvatar v-if="props.displayMyAvatar && $i" class="avatar" :user="$i" :disable-preview="true"/>
</div>
<template v-if="metadata"> <template v-if="metadata">
<div v-if="!hideTitle" class="titleContainer" @click="showTabsPopup"> <div v-if="!hideTitle" class="titleContainer" @click="showTabsPopup">
<MkAvatar v-if="metadata.avatar" class="avatar" :user="metadata.avatar" :disable-preview="true" :show-indicator="true"/> <MkAvatar v-if="metadata.avatar" class="avatar" :user="metadata.avatar" :disable-preview="true" :show-indicator="true"/>
@ -41,6 +44,7 @@ import { scrollToTop } from '@/scripts/scroll';
import { i18n } from '@/i18n'; import { i18n } from '@/i18n';
import { globalEvents } from '@/events'; import { globalEvents } from '@/events';
import { injectPageMetadata } from '@/scripts/page-metadata'; import { injectPageMetadata } from '@/scripts/page-metadata';
import { $i } from '@/account';
type Tab = { type Tab = {
key?: string | null; key?: string | null;
@ -59,6 +63,7 @@ const props = defineProps<{
handler: (ev: MouseEvent) => void; handler: (ev: MouseEvent) => void;
}[]; }[];
thin?: boolean; thin?: boolean;
displayMyAvatar?: boolean;
}>(); }>();
const emit = defineEmits<{ const emit = defineEmits<{
@ -197,7 +202,6 @@ onUnmounted(() => {
> .titleContainer { > .titleContainer {
flex: 1; flex: 1;
margin: 0 auto; margin: 0 auto;
margin-left: var(--height);
> *:first-child { > *:first-child {
margin-left: auto; margin-left: auto;
@ -213,9 +217,24 @@ onUnmounted(() => {
--margin: 8px; --margin: 8px;
display: flex; display: flex;
align-items: center; align-items: center;
min-width: var(--height);
height: var(--height); height: var(--height);
margin: 0 var(--margin); margin: 0 var(--margin);
&.left {
margin-right: auto;
> .avatar {
$size: 32px;
display: inline-block;
width: $size;
height: $size;
vertical-align: bottom;
margin: 0 8px;
pointer-events: none;
}
}
&.right { &.right {
margin-left: auto; margin-left: auto;
} }

View File

@ -2,7 +2,9 @@
<transition :name="$store.state.animation ? 'popup' : ''" appear @after-leave="$emit('closed')"> <transition :name="$store.state.animation ? 'popup' : ''" appear @after-leave="$emit('closed')">
<div v-if="showing" class="fxxzrfni _popup _shadow" :style="{ zIndex, top: top + 'px', left: left + 'px' }" @mouseover="() => { $emit('mouseover'); }" @mouseleave="() => { $emit('mouseleave'); }"> <div v-if="showing" class="fxxzrfni _popup _shadow" :style="{ zIndex, top: top + 'px', left: left + 'px' }" @mouseover="() => { $emit('mouseover'); }" @mouseleave="() => { $emit('mouseleave'); }">
<div v-if="fetched" class="info"> <div v-if="fetched" class="info">
<div class="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl})` : ''"></div> <div class="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl})` : ''">
<span v-if="$i && $i.id != user.id && user.isFollowed" class="followed">{{ $ts.followsYou }}</span>
</div>
<MkAvatar class="avatar" :user="user" :disable-preview="true" :show-indicator="true"/> <MkAvatar class="avatar" :user="user" :disable-preview="true" :show-indicator="true"/>
<div class="title"> <div class="title">
<MkA class="name" :to="userPage(user)"><MkUserName :user="user" :nowrap="false"/></MkA> <MkA class="name" :to="userPage(user)"><MkUserName :user="user" :nowrap="false"/></MkA>
@ -120,6 +122,16 @@ export default defineComponent({
background-color: rgba(0, 0, 0, 0.1); background-color: rgba(0, 0, 0, 0.1);
background-size: cover; background-size: cover;
background-position: center; background-position: center;
> .followed {
position: absolute;
top: 12px;
left: 12px;
padding: 4px 8px;
color: #fff;
background: rgba(0, 0, 0, 0.7);
font-size: 0.7em;
border-radius: 6px;
}
&::after { &::after {
content: ""; content: "";

View File

@ -1,6 +1,6 @@
<template> <template>
<MkStickyContainer> <MkStickyContainer>
<template #header><MkPageHeader v-model:tab="src" :actions="headerActions" :tabs="$i ? headerTabs : headerTabsWhenNotLogin"/></template> <template #header><MkPageHeader v-model:tab="src" :actions="headerActions" :tabs="headerTabs" :display-my-avatar="true"/></template>
<MkSpacer :content-max="800"> <MkSpacer :content-max="800">
<div ref="rootEl" v-hotkey.global="keymap" class="cmuxhskf"> <div ref="rootEl" v-hotkey.global="keymap" class="cmuxhskf">
<XTutorial v-if="$store.reactiveState.tutorial.value != -1" class="tutorial _block"/> <XTutorial v-if="$store.reactiveState.tutorial.value != -1" class="tutorial _block"/>

2052
yarn.lock

File diff suppressed because it is too large Load Diff