[Glitch] Preserve newlines in delete & redraft and desktop notifications

Port c75493755f to glitch-soc
master
Thibaut Girka 6 years ago committed by ThibG
parent a01faecfcb
commit 26c20a4ec7
  1. 7
      app/javascript/flavours/glitch/reducers/compose.js
  2. 3
      app/javascript/flavours/glitch/util/html.js

@ -37,6 +37,7 @@ import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrde
import uuid from 'flavours/glitch/util/uuid'; import uuid from 'flavours/glitch/util/uuid';
import { me } from 'flavours/glitch/util/initial_state'; import { me } from 'flavours/glitch/util/initial_state';
import { overwrite } from 'flavours/glitch/util/js_helpers'; import { overwrite } from 'flavours/glitch/util/js_helpers';
import { unescapeHTML } from 'flavours/glitch/util/html';
const totalElefriends = 3; const totalElefriends = 3;
@ -229,14 +230,14 @@ const hydrate = (state, hydratedState) => {
const domParser = new DOMParser(); const domParser = new DOMParser();
const htmlToText = status => { const expandMentions = status => {
const fragment = domParser.parseFromString(status.get('content'), 'text/html').documentElement; const fragment = domParser.parseFromString(status.get('content'), 'text/html').documentElement;
status.get('mentions').forEach(mention => { status.get('mentions').forEach(mention => {
fragment.querySelector(`a[href="${mention.get('url')}"]`).textContent = `@${mention.get('acct')}`; fragment.querySelector(`a[href="${mention.get('url')}"]`).textContent = `@${mention.get('acct')}`;
}); });
return fragment.textContent; return fragment.innerHTML;
}; };
export default function compose(state = initialState, action) { export default function compose(state = initialState, action) {
@ -381,7 +382,7 @@ export default function compose(state = initialState, action) {
return state.mergeIn(['doodle'], action.options); return state.mergeIn(['doodle'], action.options);
case REDRAFT: case REDRAFT:
return state.withMutations(map => { 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('in_reply_to', action.status.get('in_reply_to_id'));
map.set('privacy', action.status.get('visibility')); map.set('privacy', action.status.get('visibility'));
map.set('media_attachments', action.status.get('media_attachments')); map.set('media_attachments', action.status.get('media_attachments'));

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

Loading…
Cancel
Save