commit
f6838a28f6
|
@ -65,7 +65,7 @@ class Api::V1::StatusesController < Api::BaseController
|
|||
|
||||
RemovalWorker.perform_async(@status.id)
|
||||
|
||||
render_empty
|
||||
render json: @status, serializer: REST::StatusSerializer, source_requested: true
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -71,10 +71,11 @@ export function fetchStatusFail(id, error, skipLoading) {
|
|||
};
|
||||
};
|
||||
|
||||
export function redraft(status) {
|
||||
export function redraft(status, raw_text) {
|
||||
return {
|
||||
type: REDRAFT,
|
||||
status,
|
||||
raw_text,
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -88,12 +89,12 @@ export function deleteStatus(id, router, withRedraft = false) {
|
|||
|
||||
dispatch(deleteStatusRequest(id));
|
||||
|
||||
api(getState).delete(`/api/v1/statuses/${id}`).then(() => {
|
||||
api(getState).delete(`/api/v1/statuses/${id}`).then(response => {
|
||||
dispatch(deleteStatusSuccess(id));
|
||||
dispatch(deleteFromTimelines(id));
|
||||
|
||||
if (withRedraft) {
|
||||
dispatch(redraft(status));
|
||||
dispatch(redraft(status, response.data.text));
|
||||
|
||||
if (!getState().getIn(['compose', 'mounted'])) {
|
||||
router.push('/statuses/new');
|
||||
|
|
|
@ -426,7 +426,7 @@ export default function compose(state = initialState, action) {
|
|||
return state.mergeIn(['doodle'], action.options);
|
||||
case REDRAFT:
|
||||
return state.withMutations(map => {
|
||||
map.set('text', unescapeHTML(expandMentions(action.status)));
|
||||
map.set('text', action.raw_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'));
|
||||
|
|
|
@ -131,10 +131,11 @@ export function fetchStatusFail(id, error, skipLoading) {
|
|||
};
|
||||
};
|
||||
|
||||
export function redraft(status) {
|
||||
export function redraft(status, raw_text) {
|
||||
return {
|
||||
type: REDRAFT,
|
||||
status,
|
||||
raw_text,
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -148,13 +149,13 @@ export function deleteStatus(id, router, withRedraft = false) {
|
|||
|
||||
dispatch(deleteStatusRequest(id));
|
||||
|
||||
api(getState).delete(`/api/v1/statuses/${id}`).then(() => {
|
||||
api(getState).delete(`/api/v1/statuses/${id}`).then(response => {
|
||||
evictStatus(id);
|
||||
dispatch(deleteStatusSuccess(id));
|
||||
dispatch(deleteFromTimelines(id));
|
||||
|
||||
if (withRedraft) {
|
||||
dispatch(redraft(status));
|
||||
dispatch(redraft(status, response.data.text));
|
||||
|
||||
if (!getState().getIn(['compose', 'mounted'])) {
|
||||
router.push('/statuses/new');
|
||||
|
|
|
@ -4,7 +4,6 @@ import PropTypes from 'prop-types';
|
|||
import classNames from 'classnames';
|
||||
import { changeComposeSensitivity } from 'mastodon/actions/compose';
|
||||
import { injectIntl, defineMessages, FormattedMessage } from 'react-intl';
|
||||
import Icon from 'mastodon/components/icon';
|
||||
|
||||
const messages = defineMessages({
|
||||
marked: { id: 'compose_form.sensitive.marked', defaultMessage: 'Media is marked as sensitive' },
|
||||
|
@ -38,9 +37,19 @@ class SensitiveButton extends React.PureComponent {
|
|||
|
||||
return (
|
||||
<div className='compose-form__sensitive-button'>
|
||||
<button className={classNames('icon-button', { active })} onClick={onClick} disabled={disabled} title={intl.formatMessage(active ? messages.marked : messages.unmarked)}>
|
||||
<Icon id='eye-slash' /> <FormattedMessage id='compose_form.sensitive.hide' defaultMessage='Mark media as sensitive' />
|
||||
</button>
|
||||
<label className={classNames('icon-button', { active })} title={intl.formatMessage(active ? messages.marked : messages.unmarked)}>
|
||||
<input
|
||||
name='mark-sensitive'
|
||||
type='checkbox'
|
||||
checked={active}
|
||||
onChange={onClick}
|
||||
disabled={disabled}
|
||||
/>
|
||||
|
||||
<span className={classNames('checkbox', { active })} />
|
||||
|
||||
<FormattedMessage id='compose_form.sensitive.hide' defaultMessage='Mark media as sensitive' />
|
||||
</label>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -77,6 +77,7 @@
|
|||
"compose_form.poll.remove_option": "Toglie sta scelta",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "Indicà u media cum'è sensibile",
|
||||
"compose_form.sensitive.marked": "Media indicatu cum'è sensibile",
|
||||
"compose_form.sensitive.unmarked": "Media micca indicatu cum'è sensibile",
|
||||
"compose_form.spoiler.marked": "Testu piattatu daret'à un'avertimentu",
|
||||
|
@ -209,6 +210,7 @@
|
|||
"lightbox.close": "Chjudà",
|
||||
"lightbox.next": "Siguente",
|
||||
"lightbox.previous": "Pricidente",
|
||||
"lightbox.view_context": "Vede u cuntestu",
|
||||
"lists.account.add": "Aghjunghje à a lista",
|
||||
"lists.account.remove": "Toglie di a lista",
|
||||
"lists.delete": "Supprime a lista",
|
||||
|
@ -340,7 +342,6 @@
|
|||
"status.reply": "Risponde",
|
||||
"status.replyAll": "Risponde à tutti",
|
||||
"status.report": "Palisà @{name}",
|
||||
"status.sensitive_toggle": "Cliccate per vede",
|
||||
"status.sensitive_warning": "Cuntinutu sensibile",
|
||||
"status.share": "Sparte",
|
||||
"status.show_less": "Ripiegà",
|
||||
|
|
|
@ -77,6 +77,7 @@
|
|||
"compose_form.poll.remove_option": "Supprimer ce choix",
|
||||
"compose_form.publish": "Pouet",
|
||||
"compose_form.publish_loud": "{publish} !",
|
||||
"compose_form.sensitive.hide": "Marquer le média comme sensible",
|
||||
"compose_form.sensitive.marked": "Média marqué comme sensible",
|
||||
"compose_form.sensitive.unmarked": "Média non marqué comme sensible",
|
||||
"compose_form.spoiler.marked": "Le texte est caché derrière un avertissement",
|
||||
|
@ -209,6 +210,7 @@
|
|||
"lightbox.close": "Fermer",
|
||||
"lightbox.next": "Suivant",
|
||||
"lightbox.previous": "Précédent",
|
||||
"lightbox.view_context": "Voir le contexte",
|
||||
"lists.account.add": "Ajouter à la liste",
|
||||
"lists.account.remove": "Supprimer de la liste",
|
||||
"lists.delete": "Effacer la liste",
|
||||
|
@ -340,7 +342,6 @@
|
|||
"status.reply": "Répondre",
|
||||
"status.replyAll": "Répondre au fil",
|
||||
"status.report": "Signaler @{name}",
|
||||
"status.sensitive_toggle": "Cliquer pour afficher",
|
||||
"status.sensitive_warning": "Contenu sensible",
|
||||
"status.share": "Partager",
|
||||
"status.show_less": "Replier",
|
||||
|
|
|
@ -331,7 +331,7 @@ export default function compose(state = initialState, action) {
|
|||
}));
|
||||
case REDRAFT:
|
||||
return state.withMutations(map => {
|
||||
map.set('text', unescapeHTML(expandMentions(action.status)));
|
||||
map.set('text', action.raw_content || 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'));
|
||||
|
|
|
@ -268,9 +268,34 @@
|
|||
padding: 10px;
|
||||
padding-top: 0;
|
||||
|
||||
.icon-button {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
|
||||
&.active {
|
||||
color: $highlight-text-color;
|
||||
}
|
||||
|
||||
input[type=checkbox] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.checkbox {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
border: 1px solid $ui-primary-color;
|
||||
box-sizing: border-box;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
flex: 0 0 auto;
|
||||
margin-right: 10px;
|
||||
top: -1px;
|
||||
border-radius: 4px;
|
||||
vertical-align: middle;
|
||||
|
||||
&.active {
|
||||
border-color: $highlight-text-color;
|
||||
background: $highlight-text-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
class REST::StatusSerializer < ActiveModel::Serializer
|
||||
attributes :id, :created_at, :in_reply_to_id, :in_reply_to_account_id,
|
||||
:sensitive, :spoiler_text, :visibility, :language,
|
||||
:uri, :content, :url, :replies_count, :reblogs_count,
|
||||
:uri, :url, :replies_count, :reblogs_count,
|
||||
:favourites_count
|
||||
|
||||
attribute :favourited, if: :current_user?
|
||||
|
@ -13,6 +13,9 @@ class REST::StatusSerializer < ActiveModel::Serializer
|
|||
attribute :pinned, if: :pinnable?
|
||||
attribute :local_only if :local?
|
||||
|
||||
attribute :content, unless: :source_requested?
|
||||
attribute :text, if: :source_requested?
|
||||
|
||||
belongs_to :reblog, serializer: REST::StatusSerializer
|
||||
belongs_to :application, if: :show_application?
|
||||
belongs_to :account, serializer: REST::AccountSerializer
|
||||
|
@ -115,6 +118,10 @@ class REST::StatusSerializer < ActiveModel::Serializer
|
|||
%w(public unlisted).include?(object.visibility)
|
||||
end
|
||||
|
||||
def source_requested?
|
||||
instance_options[:source_requested]
|
||||
end
|
||||
|
||||
def ordered_mentions
|
||||
object.active_mentions.to_a.sort_by(&:id)
|
||||
end
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
.log-entry__title
|
||||
= t("admin.action_logs.actions.#{action_log.action}_#{action_log.target_type.underscore}", name: content_tag(:span, action_log.account.username, class: 'username'), target: content_tag(:span, log_target(action_log), class: 'target')).html_safe
|
||||
.log-entry__timestamp
|
||||
%time= l action_log.created_at
|
||||
%time.formatted{ datetime: action_log.created_at.iso8601 }
|
||||
.spacer
|
||||
.log-entry__icon
|
||||
= fa_icon icon_for_log(action_log)
|
||||
|
|
|
@ -81,7 +81,7 @@ co:
|
|||
destroyed_msg: Nota di muderazione sguassata!
|
||||
accounts:
|
||||
approve: Appruvà
|
||||
approve_all: Appruvà tutti
|
||||
approve_all: Appruvà tuttu
|
||||
are_you_sure: Site sicuru·a?
|
||||
avatar: Ritrattu di prufile
|
||||
by_domain: Duminiu
|
||||
|
@ -877,6 +877,7 @@ co:
|
|||
migrate: Migrazione di u contu
|
||||
notifications: Nutificazione
|
||||
preferences: Priferenze
|
||||
profile: Prufile
|
||||
relationships: Abbunamenti è abbunati
|
||||
two_factor_authentication: Identificazione à dui fattori
|
||||
statuses:
|
||||
|
|
|
@ -26,6 +26,8 @@ fr:
|
|||
hosted_on: Serveur Mastodon hébergée par %{domain}
|
||||
learn_more: En savoir plus
|
||||
privacy_policy: Politique de vie privée
|
||||
see_whats_happening: Voir ce qui se passe
|
||||
server_stats: 'Statistiques du serveur :'
|
||||
source_code: Code source
|
||||
status_count_after:
|
||||
one: Statut
|
||||
|
@ -66,6 +68,7 @@ fr:
|
|||
admin: Admin
|
||||
bot: Robot
|
||||
moderator: Modérateur·trice
|
||||
unavailable: Profil non disponible
|
||||
unfollow: Ne plus suivre
|
||||
admin:
|
||||
account_actions:
|
||||
|
@ -77,6 +80,8 @@ fr:
|
|||
delete: Supprimer
|
||||
destroyed_msg: Note de modération supprimée avec succès !
|
||||
accounts:
|
||||
approve: Approuver
|
||||
approve_all: Tout approuver
|
||||
are_you_sure: Êtes-vous certain⋅e ?
|
||||
avatar: Avatar
|
||||
by_domain: Domaine
|
||||
|
@ -868,6 +873,7 @@ fr:
|
|||
featured_tags: Hashtags mis en avant
|
||||
identity_proofs: Preuves d’identité
|
||||
import: Import de données
|
||||
import_and_export: Import et export
|
||||
migrate: Migration de compte
|
||||
notifications: Notifications
|
||||
preferences: Préférences
|
||||
|
|
|
@ -128,6 +128,7 @@ fr:
|
|||
follow: Envoyer un courriel lorsque quelqu’un me suit
|
||||
follow_request: Envoyer un courriel lorsque quelqu’un demande à me suivre
|
||||
mention: Envoyer un courriel lorsque quelqu’un me mentionne
|
||||
pending_account: Envoyer un courriel lorsqu'un nouveau compte est en attente d'approbation
|
||||
reblog: Envoyer un courriel lorsque quelqu’un partage mes statuts
|
||||
report: Envoyer un courriel lorsqu’un nouveau rapport est soumis
|
||||
'no': Non
|
||||
|
|
Loading…
Reference in New Issue