Merge branch 'master' into glitch-soc/merge-upstream
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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; | ||||
|     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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user