Browse Source

Preserve newlines in delete & redraft and desktop notifications (#7750)

Fix #7748
master
Eugen Rochko 6 years ago
committed by GitHub
parent
commit
c75493755f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 5 deletions
  1. +4
    -3
      app/javascript/mastodon/reducers/compose.js
  2. +1
    -2
      app/javascript/mastodon/utils/html.js

+ 4
- 3
app/javascript/mastodon/reducers/compose.js View File

@ -36,6 +36,7 @@ import { REDRAFT } from '../actions/statuses';
import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable';
import uuid from '../uuid';
import { me } from '../initial_state';
import { unescapeHTML } from '../utils/html';
const initialState = ImmutableMap({
mounted: 0,
@ -173,14 +174,14 @@ const hydrate = (state, hydratedState) => {
const domParser = new DOMParser();
const htmlToText = status => {
const expandMentions = status => {
const fragment = domParser.parseFromString(status.get('content'), 'text/html').documentElement;
status.get('mentions').forEach(mention => {
fragment.querySelector(`a[href="${mention.get('url')}"]`).textContent = `@${mention.get('acct')}`;
});
return fragment.textContent;
return fragment.innerHTML;
};
export default function compose(state = initialState, action) {
@ -316,7 +317,7 @@ export default function compose(state = initialState, action) {
}));
case REDRAFT:
return state.withMutations(map => {
map.set('text', htmlToText(action.status));
map.set('text', unescapeHTML(expandMentions(action.status)));
map.set('in_reply_to', action.status.get('in_reply_to_id'));
map.set('privacy', action.status.get('visibility'));
map.set('media_attachments', action.status.get('media_attachments'));

+ 1
- 2
app/javascript/mastodon/utils/html.js View File

@ -1,6 +1,5 @@
export const unescapeHTML = (html) => {
const wrapper = document.createElement('div');
html = html.replace(/<br \/>|<br>|\n/g, ' ');
wrapper.innerHTML = html;
wrapper.innerHTML = html.replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n').replace(/<[^>]*>/g, '');
return wrapper.textContent;
};

Loading…
Cancel
Save