Compare commits

...

11 Commits

Author SHA1 Message Date
Eugen Rochko
637ea3bb5b Bump version to 2.0.0rc4 2017-10-17 23:16:35 +02:00
Jeroen
363d0d3a44 Dutch: A few strings I found last minute (#5440)
* Dutch: A few strings I found last minute

* Update simple_form.nl.yml
2017-10-17 23:15:40 +02:00
YaQ
6e54719474 Make theme directory and Rename application.scss (#5336)
* Rename application.scss

* Move to 'default' directory

* Follow review

Move directory, and Rename "mastodon".

* Revert rename

* undo removal of newline
2017-10-18 05:20:07 +09:00
Eugen Rochko
f3003417c5 When unreblog arrives over streaming API, just delete in UI (#5439) 2017-10-17 22:17:02 +02:00
JeanGauthier
33ea042dec i18n better wording (OC/CA/FR) + string added in FR (#5438)
* Update oc.json

* Update fr.json

* Update ca.json

* Update fr.json

* Update simple_form.fr.yml

* Update ca.json

* Update fr.json

* Update oc.json

* Update oc.json

* Update fr.json
2017-10-17 21:49:39 +02:00
Nolan Lawson
8b22a63ab0 Fix scrolling of dropdown when offscreen (#5434) 2017-10-17 20:38:16 +02:00
Eugen Rochko
05686cc99d Fix unwanted content warning gap in CSS (#5436)
Fix #5356
2017-10-17 20:07:44 +02:00
Eugen Rochko
484208ce12 When status is fetched instead of delivered, do not stream it (#5437) 2017-10-17 20:05:21 +02:00
unarist
3bc8924940 Don't capture scheme-less URLs in the status (#5435)
Specifically, this fixes status length calculation to be same as JS side.

BTW, since this pattern used in not only preview card fetching, we
should extract it (with twitter-regex?) and write tests I think.
2017-10-17 18:32:25 +02:00
JeanGauthier
a02de9e012 i18n update (#5427) in OC/CA/FR/ES (#5431)
* Update oc.json

* Update ca.json

* Update fr.json

* Update es.json
2017-10-17 13:03:28 +02:00
unarist
2d395324e1 Fix React warning about tabIndex on status with CW (#5432) 2017-10-17 13:03:12 +02:00
32 changed files with 63 additions and 50 deletions

View File

@@ -122,6 +122,7 @@ export default class StatusContent extends React.PureComponent {
const directionStyle = { direction: 'ltr' }; const directionStyle = { direction: 'ltr' };
const classNames = classnames('status__content', { const classNames = classnames('status__content', {
'status__content--with-action': this.props.onClick && this.context.router, 'status__content--with-action': this.props.onClick && this.context.router,
'status__content--with-spoiler': status.get('spoiler_text').length > 0,
}); });
if (isRtl(status.get('search_index'))) { if (isRtl(status.get('search_index'))) {
@@ -153,7 +154,7 @@ export default class StatusContent extends React.PureComponent {
{mentionsPlaceholder} {mentionsPlaceholder}
<div tabIndex={!hidden && 0} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''}`} style={directionStyle} dangerouslySetInnerHTML={content} /> <div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''}`} style={directionStyle} dangerouslySetInnerHTML={content} />
</div> </div>
); );
} else if (this.props.onClick) { } else if (this.props.onClick) {

View File

@@ -159,11 +159,11 @@
"privacy.public.short": "Públic", "privacy.public.short": "Públic",
"privacy.unlisted.long": "No publicar en línies de temps públiques", "privacy.unlisted.long": "No publicar en línies de temps públiques",
"privacy.unlisted.short": "No llistat", "privacy.unlisted.short": "No llistat",
"relative_time.days": "{number}d", "relative_time.days": "fa {number} jorns",
"relative_time.hours": "{number}h", "relative_time.hours": "fa {number} hores",
"relative_time.just_now": "now", "relative_time.just_now": "ara",
"relative_time.minutes": "{number}m", "relative_time.minutes": "fa {number} minutes",
"relative_time.seconds": "{number}s", "relative_time.seconds": "fa {number} segondes",
"reply_indicator.cancel": "Cancel·lar", "reply_indicator.cancel": "Cancel·lar",
"report.placeholder": "Comentaris addicionals", "report.placeholder": "Comentaris addicionals",
"report.submit": "Enviar", "report.submit": "Enviar",

View File

@@ -161,7 +161,7 @@
"privacy.unlisted.short": "Sin federar", "privacy.unlisted.short": "Sin federar",
"relative_time.days": "{number}d", "relative_time.days": "{number}d",
"relative_time.hours": "{number}h", "relative_time.hours": "{number}h",
"relative_time.just_now": "now", "relative_time.just_now": "ahora",
"relative_time.minutes": "{number}m", "relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s", "relative_time.seconds": "{number}s",
"reply_indicator.cancel": "Cancelar", "reply_indicator.cancel": "Cancelar",

View File

@@ -63,7 +63,7 @@
"confirmations.mute.message": "Confirmez-vous le masquage de {name}?", "confirmations.mute.message": "Confirmez-vous le masquage de {name}?",
"confirmations.unfollow.confirm": "Ne plus suivre", "confirmations.unfollow.confirm": "Ne plus suivre",
"confirmations.unfollow.message": "Voulez-vous arrêter de suivre {name}?", "confirmations.unfollow.message": "Voulez-vous arrêter de suivre {name}?",
"embed.instructions": "Intégrez ce statut à votre site en copiant ce code ci-dessous.", "embed.instructions": "Intégrez ce statut à votre site en copiant le code ci-dessous.",
"embed.preview": "Il apparaîtra comme cela:", "embed.preview": "Il apparaîtra comme cela:",
"emoji_button.activity": "Activités", "emoji_button.activity": "Activités",
"emoji_button.custom": "Personnalisés", "emoji_button.custom": "Personnalisés",
@@ -159,11 +159,11 @@
"privacy.public.short": "Public", "privacy.public.short": "Public",
"privacy.unlisted.long": "Ne pas afficher dans les fils publics", "privacy.unlisted.long": "Ne pas afficher dans les fils publics",
"privacy.unlisted.short": "Non-listé", "privacy.unlisted.short": "Non-listé",
"relative_time.days": "{number}d", "relative_time.days": "il y a {number} jour",
"relative_time.hours": "{number}h", "relative_time.hours": "il y a {number}h",
"relative_time.just_now": "now", "relative_time.just_now": "à linstant",
"relative_time.minutes": "{number}m", "relative_time.minutes": "il y a {number} min.",
"relative_time.seconds": "{number}s", "relative_time.seconds": "il y a {number}s",
"reply_indicator.cancel": "Annuler", "reply_indicator.cancel": "Annuler",
"report.placeholder": "Commentaires additionnels", "report.placeholder": "Commentaires additionnels",
"report.submit": "Envoyer", "report.submit": "Envoyer",

View File

@@ -159,11 +159,11 @@
"privacy.public.short": "Public", "privacy.public.short": "Public",
"privacy.unlisted.long": "Mostrar pas dins los fluxes publics", "privacy.unlisted.long": "Mostrar pas dins los fluxes publics",
"privacy.unlisted.short": "Pas-listat", "privacy.unlisted.short": "Pas-listat",
"relative_time.days": "{number}d", "relative_time.days": "fa {number}j",
"relative_time.hours": "{number}h", "relative_time.hours": "fa {number}h",
"relative_time.just_now": "now", "relative_time.just_now": "ara",
"relative_time.minutes": "{number}m", "relative_time.minutes": "fa {number} minutas",
"relative_time.seconds": "{number}s", "relative_time.seconds": "fa {number} segondas",
"reply_indicator.cancel": "Anullar", "reply_indicator.cancel": "Anullar",
"report.placeholder": "Comentaris addicionals", "report.placeholder": "Comentaris addicionals",
"report.submit": "Mandar", "report.submit": "Mandar",

View File

@@ -75,15 +75,9 @@ const updateTimeline = (state, timeline, status, references) => {
})); }));
}; };
const deleteStatus = (state, id, accountId, references, reblogOf) => { const deleteStatus = (state, id, accountId, references) => {
state.keySeq().forEach(timeline => { state.keySeq().forEach(timeline => {
state = state.updateIn([timeline, 'items'], list => { state = state.updateIn([timeline, 'items'], list => list.filterNot(item => item === id));
if (reblogOf && !list.includes(reblogOf)) {
return list.map(item => item === id ? reblogOf : item);
} else {
return list.filterNot(item => item === id);
}
});
}); });
// Remove reblogs of deleted status // Remove reblogs of deleted status

View File

@@ -1,22 +1,22 @@
@import 'mixins'; @import 'mastodon/mixins';
@import 'variables'; @import 'mastodon/variables';
@import 'fonts/roboto'; @import 'fonts/roboto';
@import 'fonts/roboto-mono'; @import 'fonts/roboto-mono';
@import 'fonts/montserrat'; @import 'fonts/montserrat';
@import 'reset'; @import 'mastodon/reset';
@import 'basics'; @import 'mastodon/basics';
@import 'containers'; @import 'mastodon/containers';
@import 'lists'; @import 'mastodon/lists';
@import 'footer'; @import 'mastodon/footer';
@import 'compact_header'; @import 'mastodon/compact_header';
@import 'landing_strip'; @import 'mastodon/landing_strip';
@import 'forms'; @import 'mastodon/forms';
@import 'accounts'; @import 'mastodon/accounts';
@import 'stream_entries'; @import 'mastodon/stream_entries';
@import 'components'; @import 'mastodon/components';
@import 'emoji_picker'; @import 'mastodon/emoji_picker';
@import 'about'; @import 'mastodon/about';
@import 'tables'; @import 'mastodon/tables';
@import 'admin'; @import 'mastodon/admin';
@import 'rtl'; @import 'mastodon/rtl';

View File

@@ -30,7 +30,7 @@ body {
} }
&.app-body { &.app-body {
position: fixed; position: absolute;
width: 100%; width: 100%;
height: 100%; height: 100%;
padding: 0; padding: 0;

View File

@@ -511,6 +511,14 @@
overflow: hidden; overflow: hidden;
white-space: pre-wrap; white-space: pre-wrap;
&.status__content--with-spoiler {
white-space: normal;
.status__content__text {
white-space: pre-wrap;
}
}
.emojione { .emojione {
width: 18px; width: 18px;
height: 18px; height: 18px;

View File

@@ -67,9 +67,14 @@ class ActivityPub::Activity
end end
def distribute(status) def distribute(status)
crawl_links(status)
# Only continue if the status is supposed to have
# arrived in real-time
return unless @options[:override_timestamps]
notify_about_reblog(status) if reblog_of_local_account?(status) notify_about_reblog(status) if reblog_of_local_account?(status)
notify_about_mentions(status) notify_about_mentions(status)
crawl_links(status)
distribute_to_followers(status) distribute_to_followers(status)
end end

View File

@@ -56,7 +56,7 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
Rails.logger.debug "Queuing remote status #{status.id} (#{id}) for distribution" Rails.logger.debug "Queuing remote status #{status.id} (#{id}) for distribution"
LinkCrawlWorker.perform_async(status.id) unless status.spoiler_text? LinkCrawlWorker.perform_async(status.id) unless status.spoiler_text?
DistributionWorker.perform_async(status.id) DistributionWorker.perform_async(status.id) if @options[:override_timestamps]
status status
end end

View File

@@ -3,7 +3,7 @@
class FetchLinkCardService < BaseService class FetchLinkCardService < BaseService
URL_PATTERN = %r{ URL_PATTERN = %r{
( # $1 URL ( # $1 URL
(https?:\/\/)? # $2 Protocol (optional) (https?:\/\/) # $2 Protocol (required)
(#{Twitter::Regex[:valid_domain]}) # $3 Domain(s) (#{Twitter::Regex[:valid_domain]}) # $3 Domain(s)
(?::(#{Twitter::Regex[:valid_port_number]}))? # $4 Port number (optional) (?::(#{Twitter::Regex[:valid_port_number]}))? # $4 Port number (optional)
(/#{Twitter::Regex[:valid_url_path]}*)? # $5 URL Path and anchor (/#{Twitter::Regex[:valid_url_path]}*)? # $5 URL Path and anchor

View File

@@ -44,6 +44,7 @@ fr:
setting_default_sensitive: Toujours marquer les médias comme sensibles setting_default_sensitive: Toujours marquer les médias comme sensibles
setting_delete_modal: Afficher une fenêtre de confirmation avant de supprimer un pouet setting_delete_modal: Afficher une fenêtre de confirmation avant de supprimer un pouet
setting_noindex: Demander aux moteurs de recherche de ne pas indexer vos informations personnelles setting_noindex: Demander aux moteurs de recherche de ne pas indexer vos informations personnelles
setting_reduce_motion: Réduire la vitesse des animations
setting_system_font_ui: Utiliser la police par défaut du système setting_system_font_ui: Utiliser la police par défaut du système
setting_theme: Thème du site setting_theme: Thème du site
setting_unfollow_modal: Afficher une fenêtre de confirmation avant de vous désabonner dun compte setting_unfollow_modal: Afficher une fenêtre de confirmation avant de vous désabonner dun compte

View File

@@ -4,13 +4,17 @@ nl:
hints: hints:
defaults: defaults:
avatar: PNG, GIF of JPG. Maximaal 2MB. Wordt teruggeschaald naar 120x120px avatar: PNG, GIF of JPG. Maximaal 2MB. Wordt teruggeschaald naar 120x120px
display_name: Maximaal 30 tekens digest: Wordt na een lange periode van inactiviteit verzonden, met een samenvatting van vermeldingen tijdens je afwezigheid.
display_name:
one: <span class="name-counter">1</span> teken over
other: <span class="name-counter">%{count}</span> tekens over
header: PNG, GIF of JPG. Maximaal 2MB. Wordt teruggeschaald naar 700x335px header: PNG, GIF of JPG. Maximaal 2MB. Wordt teruggeschaald naar 700x335px
locked: Vereist dat je handmatig volgers moet accepteren en stelt de privacy van toots standaard in op alleen volgers locked: Vereist dat je handmatig volgers moet accepteren en stelt de privacy van toots standaard in op alleen volgers
note: note:
one: <span class="note-counter">1</span> teken over one: <span class="note-counter">1</span> teken over
other: <span class="note-counter">%{count}</span> tekens over other: <span class="note-counter">%{count}</span> tekens over
setting_noindex: Heeft invloed op jouw openbare profiel en toots setting_noindex: Heeft invloed op jouw openbare profiel en toots
setting_theme: Heeft invloed op hoe de webapp van Mastodon er uit ziet, op elk apparaat waarmee je inlogt.
imports: imports:
data: CSV-bestand dat op een andere Mastodon-server werd geëxporteerd data: CSV-bestand dat op een andere Mastodon-server werd geëxporteerd
sessions: sessions:

View File

@@ -21,7 +21,7 @@ module Mastodon
end end
def flags def flags
'rc3' 'rc4'
end end
def to_a def to_a