diff --git a/src/components/ICONS.jsx b/src/components/ICONS.jsx
index 60fbb7c954..72ecd43b0f 100644
--- a/src/components/ICONS.jsx
+++ b/src/components/ICONS.jsx
@@ -175,4 +175,10 @@ export const ICONS = {
'user-x': () => import('@iconify-icons/mingcute/user-x-line'),
minimize: () => import('@iconify-icons/mingcute/arrows-down-line'),
celebrate: () => import('@iconify-icons/mingcute/celebrate-line'),
+ font: () => import('@iconify-icons/mingcute/font-line'),
+ 'brackets-angle': () => import('@iconify-icons/mingcute/brackets-angle-line'),
+ asterisk: () => import('@iconify-icons/mingcute/asterisk-line'),
+ brackets: () => import('@iconify-icons/mingcute/brackets-line'),
+ 'currency-dollar-2': () =>
+ import('@iconify-icons/mingcute/currency-dollar-2-line'),
};
diff --git a/src/components/compose.jsx b/src/components/compose.jsx
index 2a4dca8fee..8376b13649 100644
--- a/src/components/compose.jsx
+++ b/src/components/compose.jsx
@@ -1,7 +1,7 @@
import './compose.css';
import '@github/text-expander-element';
-import { msg, plural } from '@lingui/core/macro';
+import { msg, plural, t } from '@lingui/core/macro';
import { Trans, useLingui } from '@lingui/react/macro';
import { MenuItem } from '@szhsin/react-menu';
import { deepEqual } from 'fast-equals';
@@ -46,7 +46,6 @@ import store from '../utils/store';
import {
getCurrentAccount,
getCurrentAccountNS,
- getCurrentInstance,
getCurrentInstanceConfiguration,
} from '../utils/store-utils';
import supports from '../utils/supports';
@@ -75,6 +74,14 @@ const supportedLanguagesMap = supportedLanguages.reduce((acc, l) => {
return acc;
}, {});
+const contentTypesMap = {
+ 'text/plain': { icon: 'font', text: t`Plain text` },
+ 'text/html': { icon: 'brackets-angle', text: t`HTML` },
+ 'text/markdown': { icon: 'asterisk', text: t`Markdown` },
+ 'text/bbcode': { icon: 'brackets', text: t`BBCode` },
+ 'text/x.misskeymarkdown': { icon: 'currency-dollar-2', text: t`MFM` },
+};
+
/* NOTES:
- Max character limit includes BOTH status text and Content Warning text
*/
@@ -235,12 +242,13 @@ function Compose({
const {
statuses: {
+ supportedMimeTypes: supportedStatusMimeTypes = ['text/plain'],
maxCharacters,
maxMediaAttachments, // Beware: it can be undefined!
charactersReservedPerUrl,
} = {},
mediaAttachments: {
- supportedMimeTypes,
+ supportedMimeTypes: supportedMediaMimeTypes = undefined,
imageSizeLimit,
imageMatrixLimit,
videoSizeLimit,
@@ -255,9 +263,12 @@ function Compose({
} = {},
} = configuration || {};
+ const defaultContentType = supportedStatusMimeTypes[0];
+
const textareaRef = useRef();
const spoilerTextRef = useRef();
const [visibility, setVisibility] = useState('public');
+ const [contentType, setContentType] = useState(defaultContentType);
const [sensitive, setSensitive] = useState(false);
const [language, setLanguage] = useState(
store.session.get('currentLanguage') || DEFAULT_LANG,
@@ -1123,9 +1134,16 @@ function Compose({
);
} else if (!editStatus) {
params.visibility = visibility;
+ if (params.visibility === 'list') {
+ const list_id = prompt('Target list ID?');
+ params.visibility = `list:${list_id}`;
+ }
// params.inReplyToId = replyToStatus?.id || undefined;
params.in_reply_to_id = replyToStatus?.id || undefined;
}
+ if (supportedStatusMimeTypes.length > 1) {
+ params.content_type = contentType;
+ }
params = removeNullUndefined(params);
console.log('POST', params);
@@ -1212,6 +1230,37 @@ function Compose({
/>
{' '}
+ {supportedStatusMimeTypes.length > 1 && (
+ <>
+ {' '}
+ >
+ )}