parent
c08a249558
commit
a01faecfcb
6 changed files with 73 additions and 11 deletions
|
@ -32,6 +32,7 @@ import {
|
|||
} from 'flavours/glitch/actions/compose';
|
||||
import { TIMELINE_DELETE } from 'flavours/glitch/actions/timelines';
|
||||
import { STORE_HYDRATE } from 'flavours/glitch/actions/store';
|
||||
import { REDRAFT } from 'flavours/glitch/actions/statuses';
|
||||
import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable';
|
||||
import uuid from 'flavours/glitch/util/uuid';
|
||||
import { me } from 'flavours/glitch/util/initial_state';
|
||||
|
@ -226,6 +227,18 @@ const hydrate = (state, hydratedState) => {
|
|||
return state;
|
||||
};
|
||||
|
||||
const domParser = new DOMParser();
|
||||
|
||||
const htmlToText = 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;
|
||||
};
|
||||
|
||||
export default function compose(state = initialState, action) {
|
||||
switch(action.type) {
|
||||
case STORE_HYDRATE:
|
||||
|
@ -366,6 +379,24 @@ export default function compose(state = initialState, action) {
|
|||
}));
|
||||
case COMPOSE_DOODLE_SET:
|
||||
return state.mergeIn(['doodle'], action.options);
|
||||
case REDRAFT:
|
||||
return state.withMutations(map => {
|
||||
map.set('text', htmlToText(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'));
|
||||
map.set('focusDate', new Date());
|
||||
map.set('caretPosition', null);
|
||||
map.set('idempotencyKey', uuid());
|
||||
|
||||
if (action.status.get('spoiler_text').length > 0) {
|
||||
map.set('spoiler', true);
|
||||
map.set('spoiler_text', action.status.get('spoiler_text'));
|
||||
} else {
|
||||
map.set('spoiler', false);
|
||||
map.set('spoiler_text', '');
|
||||
}
|
||||
});
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue