mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
[MM-56572] Preview doesn't work when editing a channel header (#26158)
This commit is contained in:
parent
744b059a75
commit
41081b9eee
@ -65,7 +65,7 @@ exports[`components/EditChannelHeaderModal edit direct message channel 1`] = `
|
|||||||
<Connect(Textbox)
|
<Connect(Textbox)
|
||||||
channelId="fake-id"
|
channelId="fake-id"
|
||||||
characterLimit={1024}
|
characterLimit={1024}
|
||||||
createMessage="Edit the Channel Header..."
|
createMessage="Enter the Channel Header"
|
||||||
handlePostError={[Function]}
|
handlePostError={[Function]}
|
||||||
id="edit_textbox"
|
id="edit_textbox"
|
||||||
onChange={[Function]}
|
onChange={[Function]}
|
||||||
@ -85,7 +85,12 @@ exports[`components/EditChannelHeaderModal edit direct message channel 1`] = `
|
|||||||
hasExceededCharacterLimit={false}
|
hasExceededCharacterLimit={false}
|
||||||
hasText={true}
|
hasText={true}
|
||||||
isMarkdownPreviewEnabled={false}
|
isMarkdownPreviewEnabled={false}
|
||||||
previewMessageLink="Edit Header"
|
previewMessageLink={
|
||||||
|
<Memo(MemoizedFormattedMessage)
|
||||||
|
defaultMessage="Edit"
|
||||||
|
id="edit_channel_header_modal.previewHeader"
|
||||||
|
/>
|
||||||
|
}
|
||||||
showPreview={false}
|
showPreview={false}
|
||||||
updatePreview={[Function]}
|
updatePreview={[Function]}
|
||||||
/>
|
/>
|
||||||
@ -191,7 +196,7 @@ exports[`components/EditChannelHeaderModal error with intl message 1`] = `
|
|||||||
<Connect(Textbox)
|
<Connect(Textbox)
|
||||||
channelId="fake-id"
|
channelId="fake-id"
|
||||||
characterLimit={1024}
|
characterLimit={1024}
|
||||||
createMessage="Edit the Channel Header..."
|
createMessage="Enter the Channel Header"
|
||||||
handlePostError={[Function]}
|
handlePostError={[Function]}
|
||||||
id="edit_textbox"
|
id="edit_textbox"
|
||||||
onChange={[Function]}
|
onChange={[Function]}
|
||||||
@ -211,7 +216,12 @@ exports[`components/EditChannelHeaderModal error with intl message 1`] = `
|
|||||||
hasExceededCharacterLimit={false}
|
hasExceededCharacterLimit={false}
|
||||||
hasText={true}
|
hasText={true}
|
||||||
isMarkdownPreviewEnabled={false}
|
isMarkdownPreviewEnabled={false}
|
||||||
previewMessageLink="Edit Header"
|
previewMessageLink={
|
||||||
|
<Memo(MemoizedFormattedMessage)
|
||||||
|
defaultMessage="Edit"
|
||||||
|
id="edit_channel_header_modal.previewHeader"
|
||||||
|
/>
|
||||||
|
}
|
||||||
showPreview={false}
|
showPreview={false}
|
||||||
updatePreview={[Function]}
|
updatePreview={[Function]}
|
||||||
/>
|
/>
|
||||||
@ -335,7 +345,7 @@ exports[`components/EditChannelHeaderModal error without intl message 1`] = `
|
|||||||
<Connect(Textbox)
|
<Connect(Textbox)
|
||||||
channelId="fake-id"
|
channelId="fake-id"
|
||||||
characterLimit={1024}
|
characterLimit={1024}
|
||||||
createMessage="Edit the Channel Header..."
|
createMessage="Enter the Channel Header"
|
||||||
handlePostError={[Function]}
|
handlePostError={[Function]}
|
||||||
id="edit_textbox"
|
id="edit_textbox"
|
||||||
onChange={[Function]}
|
onChange={[Function]}
|
||||||
@ -355,7 +365,12 @@ exports[`components/EditChannelHeaderModal error without intl message 1`] = `
|
|||||||
hasExceededCharacterLimit={false}
|
hasExceededCharacterLimit={false}
|
||||||
hasText={true}
|
hasText={true}
|
||||||
isMarkdownPreviewEnabled={false}
|
isMarkdownPreviewEnabled={false}
|
||||||
previewMessageLink="Edit Header"
|
previewMessageLink={
|
||||||
|
<Memo(MemoizedFormattedMessage)
|
||||||
|
defaultMessage="Edit"
|
||||||
|
id="edit_channel_header_modal.previewHeader"
|
||||||
|
/>
|
||||||
|
}
|
||||||
showPreview={false}
|
showPreview={false}
|
||||||
updatePreview={[Function]}
|
updatePreview={[Function]}
|
||||||
/>
|
/>
|
||||||
@ -471,7 +486,7 @@ exports[`components/EditChannelHeaderModal should match snapshot, init 1`] = `
|
|||||||
<Connect(Textbox)
|
<Connect(Textbox)
|
||||||
channelId="fake-id"
|
channelId="fake-id"
|
||||||
characterLimit={1024}
|
characterLimit={1024}
|
||||||
createMessage="Edit the Channel Header..."
|
createMessage="Enter the Channel Header"
|
||||||
handlePostError={[Function]}
|
handlePostError={[Function]}
|
||||||
id="edit_textbox"
|
id="edit_textbox"
|
||||||
onChange={[Function]}
|
onChange={[Function]}
|
||||||
@ -491,7 +506,12 @@ exports[`components/EditChannelHeaderModal should match snapshot, init 1`] = `
|
|||||||
hasExceededCharacterLimit={false}
|
hasExceededCharacterLimit={false}
|
||||||
hasText={true}
|
hasText={true}
|
||||||
isMarkdownPreviewEnabled={false}
|
isMarkdownPreviewEnabled={false}
|
||||||
previewMessageLink="Edit Header"
|
previewMessageLink={
|
||||||
|
<Memo(MemoizedFormattedMessage)
|
||||||
|
defaultMessage="Edit"
|
||||||
|
id="edit_channel_header_modal.previewHeader"
|
||||||
|
/>
|
||||||
|
}
|
||||||
showPreview={false}
|
showPreview={false}
|
||||||
updatePreview={[Function]}
|
updatePreview={[Function]}
|
||||||
/>
|
/>
|
||||||
@ -597,7 +617,7 @@ exports[`components/EditChannelHeaderModal submitted 1`] = `
|
|||||||
<Connect(Textbox)
|
<Connect(Textbox)
|
||||||
channelId="fake-id"
|
channelId="fake-id"
|
||||||
characterLimit={1024}
|
characterLimit={1024}
|
||||||
createMessage="Edit the Channel Header..."
|
createMessage="Enter the Channel Header"
|
||||||
handlePostError={[Function]}
|
handlePostError={[Function]}
|
||||||
id="edit_textbox"
|
id="edit_textbox"
|
||||||
onChange={[Function]}
|
onChange={[Function]}
|
||||||
@ -617,7 +637,12 @@ exports[`components/EditChannelHeaderModal submitted 1`] = `
|
|||||||
hasExceededCharacterLimit={false}
|
hasExceededCharacterLimit={false}
|
||||||
hasText={true}
|
hasText={true}
|
||||||
isMarkdownPreviewEnabled={false}
|
isMarkdownPreviewEnabled={false}
|
||||||
previewMessageLink="Edit Header"
|
previewMessageLink={
|
||||||
|
<Memo(MemoizedFormattedMessage)
|
||||||
|
defaultMessage="Edit"
|
||||||
|
id="edit_channel_header_modal.previewHeader"
|
||||||
|
/>
|
||||||
|
}
|
||||||
showPreview={false}
|
showPreview={false}
|
||||||
updatePreview={[Function]}
|
updatePreview={[Function]}
|
||||||
/>
|
/>
|
||||||
|
@ -6,9 +6,11 @@ import React from 'react';
|
|||||||
|
|
||||||
import type {Channel, ChannelType} from '@mattermost/types/channels';
|
import type {Channel, ChannelType} from '@mattermost/types/channels';
|
||||||
|
|
||||||
import EditChannelHeaderModal from 'components/edit_channel_header_modal/edit_channel_header_modal';
|
import {EditChannelHeaderModal} from 'components/edit_channel_header_modal/edit_channel_header_modal';
|
||||||
|
import type {EditChannelHeaderModal as EditChannelHeaderModalClass} from 'components/edit_channel_header_modal/edit_channel_header_modal';
|
||||||
import Textbox from 'components/textbox';
|
import Textbox from 'components/textbox';
|
||||||
|
|
||||||
|
import {type MockIntl} from 'tests/helpers/intl-test-helper';
|
||||||
import {testComponentForLineBreak} from 'tests/helpers/line_break_helpers';
|
import {testComponentForLineBreak} from 'tests/helpers/line_break_helpers';
|
||||||
import Constants from 'utils/constants';
|
import Constants from 'utils/constants';
|
||||||
import * as Utils from 'utils/utils';
|
import * as Utils from 'utils/utils';
|
||||||
@ -51,6 +53,9 @@ describe('components/EditChannelHeaderModal', () => {
|
|||||||
setShowPreview: jest.fn(),
|
setShowPreview: jest.fn(),
|
||||||
patchChannel: jest.fn().mockResolvedValue({}),
|
patchChannel: jest.fn().mockResolvedValue({}),
|
||||||
},
|
},
|
||||||
|
intl: {
|
||||||
|
formatMessage: ({defaultMessage}) => defaultMessage,
|
||||||
|
} as MockIntl,
|
||||||
};
|
};
|
||||||
|
|
||||||
test('should match snapshot, init', () => {
|
test('should match snapshot, init', () => {
|
||||||
@ -105,11 +110,13 @@ describe('components/EditChannelHeaderModal', () => {
|
|||||||
|
|
||||||
describe('handleSave', () => {
|
describe('handleSave', () => {
|
||||||
test('on no change, should hide the modal without trying to patch a channel', async () => {
|
test('on no change, should hide the modal without trying to patch a channel', async () => {
|
||||||
const wrapper = shallow<EditChannelHeaderModal>(
|
const wrapper = shallow(
|
||||||
<EditChannelHeaderModal {...baseProps}/>,
|
<EditChannelHeaderModal {...baseProps}/>,
|
||||||
);
|
);
|
||||||
|
|
||||||
await wrapper.instance().handleSave();
|
const instance = wrapper.instance() as EditChannelHeaderModalClass;
|
||||||
|
|
||||||
|
await instance.handleSave();
|
||||||
|
|
||||||
expect(wrapper.state('show')).toBe(false);
|
expect(wrapper.state('show')).toBe(false);
|
||||||
|
|
||||||
@ -119,13 +126,15 @@ describe('components/EditChannelHeaderModal', () => {
|
|||||||
test('on error, should not close modal and set server error state', async () => {
|
test('on error, should not close modal and set server error state', async () => {
|
||||||
baseProps.actions.patchChannel.mockResolvedValueOnce({error: serverError});
|
baseProps.actions.patchChannel.mockResolvedValueOnce({error: serverError});
|
||||||
|
|
||||||
const wrapper = shallow<EditChannelHeaderModal>(
|
const wrapper = shallow(
|
||||||
<EditChannelHeaderModal {...baseProps}/>,
|
<EditChannelHeaderModal {...baseProps}/>,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const instance = wrapper.instance() as EditChannelHeaderModalClass;
|
||||||
|
|
||||||
wrapper.setState({header: 'New header'});
|
wrapper.setState({header: 'New header'});
|
||||||
|
|
||||||
await wrapper.instance().handleSave();
|
await instance.handleSave();
|
||||||
|
|
||||||
expect(wrapper.state('show')).toBe(true);
|
expect(wrapper.state('show')).toBe(true);
|
||||||
expect(wrapper.state('serverError')).toBe(serverError);
|
expect(wrapper.state('serverError')).toBe(serverError);
|
||||||
@ -134,13 +143,15 @@ describe('components/EditChannelHeaderModal', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('on success, should close modal', async () => {
|
test('on success, should close modal', async () => {
|
||||||
const wrapper = shallow<EditChannelHeaderModal>(
|
const wrapper = shallow(
|
||||||
<EditChannelHeaderModal {...baseProps}/>,
|
<EditChannelHeaderModal {...baseProps}/>,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const instance = wrapper.instance() as EditChannelHeaderModalClass;
|
||||||
|
|
||||||
wrapper.setState({header: 'New header'});
|
wrapper.setState({header: 'New header'});
|
||||||
|
|
||||||
await wrapper.instance().handleSave();
|
await instance.handleSave();
|
||||||
|
|
||||||
expect(wrapper.state('show')).toBe(false);
|
expect(wrapper.state('show')).toBe(false);
|
||||||
|
|
||||||
|
@ -3,13 +3,12 @@
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {Modal} from 'react-bootstrap';
|
import {Modal} from 'react-bootstrap';
|
||||||
import {FormattedMessage} from 'react-intl';
|
import type {WrappedComponentProps} from 'react-intl';
|
||||||
|
import {FormattedMessage, injectIntl} from 'react-intl';
|
||||||
|
|
||||||
import type {Channel} from '@mattermost/types/channels';
|
import type {Channel} from '@mattermost/types/channels';
|
||||||
import type {ServerError} from '@mattermost/types/errors';
|
import type {ServerError} from '@mattermost/types/errors';
|
||||||
|
|
||||||
import type {ActionResult} from 'mattermost-redux/types/actions';
|
|
||||||
|
|
||||||
import Textbox, {TextboxLinks} from 'components/textbox';
|
import Textbox, {TextboxLinks} from 'components/textbox';
|
||||||
import type {TextboxElement} from 'components/textbox';
|
import type {TextboxElement} from 'components/textbox';
|
||||||
import type TextboxClass from 'components/textbox/textbox';
|
import type TextboxClass from 'components/textbox/textbox';
|
||||||
@ -17,30 +16,15 @@ import type TextboxClass from 'components/textbox/textbox';
|
|||||||
import Constants from 'utils/constants';
|
import Constants from 'utils/constants';
|
||||||
import {isKeyPressed} from 'utils/keyboard';
|
import {isKeyPressed} from 'utils/keyboard';
|
||||||
import {isMobile} from 'utils/user_agent';
|
import {isMobile} from 'utils/user_agent';
|
||||||
import {insertLineBreakFromKeyEvent, isUnhandledLineBreakKeyCombo, localizeMessage} from 'utils/utils';
|
import {insertLineBreakFromKeyEvent, isUnhandledLineBreakKeyCombo} from 'utils/utils';
|
||||||
|
|
||||||
|
import type {PropsFromRedux} from './index';
|
||||||
|
|
||||||
const KeyCodes = Constants.KeyCodes;
|
const KeyCodes = Constants.KeyCodes;
|
||||||
|
|
||||||
const headerMaxLength = 1024;
|
const headerMaxLength = 1024;
|
||||||
|
|
||||||
type Props = {
|
type OwnProps = {
|
||||||
|
|
||||||
/*
|
|
||||||
* Object with info about current channel ,
|
|
||||||
*/
|
|
||||||
channel: Channel;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* boolean should be `ctrl` button pressed to send
|
|
||||||
*/
|
|
||||||
ctrlSend: boolean;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Should preview be showed
|
|
||||||
*/
|
|
||||||
shouldShowPreview: boolean;
|
|
||||||
|
|
||||||
markdownPreviewFeatureIsEnabled: boolean;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the modal has been hidden and should be removed.
|
* Called when the modal has been hidden and should be removed.
|
||||||
@ -48,21 +32,12 @@ type Props = {
|
|||||||
onExited: () => void;
|
onExited: () => void;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Collection of redux actions
|
* Object with info about current channel ,
|
||||||
*/
|
*/
|
||||||
actions: {
|
channel: Channel;
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
type Props = OwnProps & PropsFromRedux & WrappedComponentProps;
|
||||||
* patch channel redux-action
|
|
||||||
*/
|
|
||||||
patchChannel: (channelId: string, patch: Partial<Channel>) => Promise<ActionResult>;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set show preview for textbox
|
|
||||||
*/
|
|
||||||
setShowPreview: (showPreview: boolean) => void;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
type State = {
|
type State = {
|
||||||
header?: string;
|
header?: string;
|
||||||
@ -72,7 +47,7 @@ type State = {
|
|||||||
postError?: React.ReactNode;
|
postError?: React.ReactNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class EditChannelHeaderModal extends React.PureComponent<Props, State> {
|
export class EditChannelHeaderModal extends React.PureComponent<Props, State> {
|
||||||
private editChannelHeaderTextboxRef: React.RefObject<TextboxClass>;
|
private editChannelHeaderTextboxRef: React.RefObject<TextboxClass>;
|
||||||
|
|
||||||
constructor(props: Props) {
|
constructor(props: Props) {
|
||||||
@ -266,7 +241,7 @@ export default class EditChannelHeaderModal extends React.PureComponent<Props, S
|
|||||||
onKeyDown={this.handleKeyDown}
|
onKeyDown={this.handleKeyDown}
|
||||||
supportsCommands={false}
|
supportsCommands={false}
|
||||||
suggestionListPosition='bottom'
|
suggestionListPosition='bottom'
|
||||||
createMessage={localizeMessage('edit_channel_header.editHeader', 'Edit the Channel Header...')}
|
createMessage={this.props.intl.formatMessage({id: 'edit_channel_header_modal.placeholder', defaultMessage: 'Enter the Channel Header'})}
|
||||||
handlePostError={this.handlePostError}
|
handlePostError={this.handlePostError}
|
||||||
channelId={this.props.channel.id!}
|
channelId={this.props.channel.id!}
|
||||||
id='edit_textbox'
|
id='edit_textbox'
|
||||||
@ -283,7 +258,12 @@ export default class EditChannelHeaderModal extends React.PureComponent<Props, S
|
|||||||
updatePreview={this.setShowPreview}
|
updatePreview={this.setShowPreview}
|
||||||
hasText={this.state.header ? this.state.header.length > 0 : false}
|
hasText={this.state.header ? this.state.header.length > 0 : false}
|
||||||
hasExceededCharacterLimit={this.state.header ? this.state.header.length > headerMaxLength : false}
|
hasExceededCharacterLimit={this.state.header ? this.state.header.length > headerMaxLength : false}
|
||||||
previewMessageLink={localizeMessage('edit_channel_header.previewHeader', 'Edit Header')}
|
previewMessageLink={
|
||||||
|
<FormattedMessage
|
||||||
|
id='edit_channel_header_modal.previewHeader'
|
||||||
|
defaultMessage='Edit'
|
||||||
|
/>
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
{this.renderError()}
|
{this.renderError()}
|
||||||
@ -316,3 +296,5 @@ export default class EditChannelHeaderModal extends React.PureComponent<Props, S
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export default injectIntl(EditChannelHeaderModal);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||||
// See LICENSE.txt for license information.
|
// See LICENSE.txt for license information.
|
||||||
|
|
||||||
|
import type {ConnectedProps} from 'react-redux';
|
||||||
import {connect} from 'react-redux';
|
import {connect} from 'react-redux';
|
||||||
import {bindActionCreators} from 'redux';
|
import {bindActionCreators} from 'redux';
|
||||||
import type {Dispatch} from 'redux';
|
import type {Dispatch} from 'redux';
|
||||||
@ -36,4 +37,8 @@ function mapDispatchToProps(dispatch: Dispatch) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const connector = connect(mapStateToProps, mapDispatchToProps);
|
||||||
|
|
||||||
|
export type PropsFromRedux = ConnectedProps<typeof connector>;
|
||||||
|
|
||||||
export default connect(mapStateToProps, mapDispatchToProps)(EditChannelHeaderModal);
|
export default connect(mapStateToProps, mapDispatchToProps)(EditChannelHeaderModal);
|
||||||
|
@ -2,14 +2,14 @@
|
|||||||
// See LICENSE.txt for license information.
|
// See LICENSE.txt for license information.
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import type {MouseEvent} from 'react';
|
import type {MouseEvent, ReactNode} from 'react';
|
||||||
import {FormattedMessage} from 'react-intl';
|
import {FormattedMessage} from 'react-intl';
|
||||||
|
|
||||||
import ExternalLink from 'components/external_link';
|
import ExternalLink from 'components/external_link';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
showPreview?: boolean;
|
showPreview?: boolean;
|
||||||
previewMessageLink?: string;
|
previewMessageLink?: ReactNode;
|
||||||
hasText?: boolean;
|
hasText?: boolean;
|
||||||
hasExceededCharacterLimit?: boolean;
|
hasExceededCharacterLimit?: boolean;
|
||||||
isMarkdownPreviewEnabled: boolean;
|
isMarkdownPreviewEnabled: boolean;
|
||||||
@ -38,11 +38,7 @@ function TextboxLinks({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (previewMessageLink) {
|
if (previewMessageLink) {
|
||||||
editHeader = (
|
editHeader = previewMessageLink;
|
||||||
<span>
|
|
||||||
{previewMessageLink}
|
|
||||||
</span>
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
editHeader = (
|
editHeader = (
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
|
@ -3512,11 +3512,11 @@
|
|||||||
"edit_channel_header_modal.cancel": "Cancel",
|
"edit_channel_header_modal.cancel": "Cancel",
|
||||||
"edit_channel_header_modal.description": "Edit the text appearing next to the channel name in the header.",
|
"edit_channel_header_modal.description": "Edit the text appearing next to the channel name in the header.",
|
||||||
"edit_channel_header_modal.error": "The text entered exceeds the character limit. The channel header is limited to {maxLength} characters.",
|
"edit_channel_header_modal.error": "The text entered exceeds the character limit. The channel header is limited to {maxLength} characters.",
|
||||||
|
"edit_channel_header_modal.placeholder": "Edit the Channel Header...",
|
||||||
|
"edit_channel_header_modal.previewHeader": "Edit",
|
||||||
"edit_channel_header_modal.save": "Save",
|
"edit_channel_header_modal.save": "Save",
|
||||||
"edit_channel_header_modal.title": "Edit Header for {channel}",
|
"edit_channel_header_modal.title": "Edit Header for {channel}",
|
||||||
"edit_channel_header_modal.title_dm": "Edit Header",
|
"edit_channel_header_modal.title_dm": "Edit Header",
|
||||||
"edit_channel_header.editHeader": "Edit the Channel Header...",
|
|
||||||
"edit_channel_header.previewHeader": "Edit Header",
|
|
||||||
"edit_channel_private_purpose_modal.body": "This text appears in the \"View Info\" modal of the private channel.",
|
"edit_channel_private_purpose_modal.body": "This text appears in the \"View Info\" modal of the private channel.",
|
||||||
"edit_channel_purpose_modal.body": "Describe how this channel should be used. This text appears in the channel list in the \"More...\" menu and helps others decide whether to join.",
|
"edit_channel_purpose_modal.body": "Describe how this channel should be used. This text appears in the channel list in the \"More...\" menu and helps others decide whether to join.",
|
||||||
"edit_channel_purpose_modal.cancel": "Cancel",
|
"edit_channel_purpose_modal.cancel": "Cancel",
|
||||||
|
@ -70,6 +70,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.textarea-wrapper-preview {
|
||||||
|
.custom-textarea.textbox-preview-area {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.textbox-edit-area {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.edit-post-footer {
|
.edit-post-footer {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
Loading…
Reference in New Issue
Block a user