Merge branch 'master' of github.com:discourse/discourse

This commit is contained in:
Sam 2013-11-26 10:21:57 +11:00
commit d6a14889ac
8 changed files with 119 additions and 39 deletions

View File

@ -200,6 +200,7 @@ Discourse.Dialect = {
Discourse.Dialect.inlineRegexp({
matcher: /((?:https?:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.])(?:[^\s()<>]+|\([^\s()<>]+\))+(?:\([^\s()<>]+\)|[^`!()\[\]{};:'".,<>?«»“”‘’\s]))/gm,
spaceBoundary: true,
start: 'http',
emitter: function(matches) {
var url = matches[1];

View File

@ -24,6 +24,7 @@ module Jobs
extract_images_from(post.cooked).each do |image|
src = image['src']
src = "http:" + src if src.start_with?("//")
if is_valid_image_url(src)
begin

View File

@ -220,6 +220,8 @@ nl:
moderator: "{{user}} is een moderator"
admin: "{{user}} is een admin"
deleted: (verwijderd)
suspended_notice: "Deze gebruiker is geschorst tot {{date}}."
suspended_reason: "Reden: "
messages:
all: Alle
@ -282,13 +284,14 @@ nl:
too_long: Je gebruikersnaam is te lang.
checking: Beschikbaarheid controleren...
enter_email: Gebruikersnaam gevonden. Vul het gekoppelde e-mailadres in.
prefilled: "E-mail hoort bij deze gebruikersnaam."
password_confirmation:
title: Nogmaals het wachtwoord
last_posted: Laatste bericht
last_emailed: Laatst gemailed
last_seen: Laatst gezien
last_seen: Gezien
created: Lid sinds
log_out: Log uit
website: Website
@ -328,11 +331,13 @@ nl:
other: "na {{count}} minuten"
invited:
search: "Typ om uitnodigingen te zoeken..."
title: Uitnodigingen
user: Uitgenodigd lid
none: "{{username}} heeft nog geen mensen uitgenodigd voor deze site."
none: Er zijn geen uitnodigingen gevonden.
truncated: "De eerste {{count}} uitnodigingen."
redeemed: Verzilverde uitnodigingen
redeemed_at: Verzilverd op
redeemed_at: Verzilverd
pending: Uitstaande uitnodigingen
topics_entered: Topics bezocht
posts_read_count: Berichten gelezen
@ -341,6 +346,7 @@ nl:
time_read: Tijd gelezen
days_visited: Dagen bezocht
account_age_days: leeftijd van account in dagen
create: Nodig anderen voor dit forum uit
password:
title: Wachtwoord
@ -380,10 +386,10 @@ nl:
last_post: Laatste bericht
summary:
enabled_description: "Je kijkt nu naar de beste berichten van deze topic. Klik hieronder om alle berichten te zien."
description: "Er zijn <b>{{count}}</b> berichten in deze topic. Dat zijn een hoop! Zou je tijd willen besparen door alleen de berichten te zien met de meeste interactie en reacties?"
enable: "Schakel naar 'Best of'-weergave"
disable: "Schakel naar normale weergave"
enabled_description: "Je kijkt nu naar een samenvatting van deze topic. Klik hieronder om alle berichten te zien."
description: "Er zijn <b>{{count}}</b> reacties. Tijd besparen en alleen de meest relevante reacties zien?"
enable: "Samenvatting van topic"
disable: "Alle berichten"
private_message_info:
title: 'Privé-bericht'
@ -392,7 +398,7 @@ nl:
email: E-mail
username: Gebruikersnaam
last_seen: Laatst gezien
last_seen: Gezien
created: Gemaakt op
trust_level: Trustlevel
@ -477,6 +483,8 @@ nl:
users_placeholder: Voeg een lid toe
title_placeholder: Typ hier je title. Beschrijf in één korte zin waar deze discussie over gaat.
edit_reason_placeholder: vanwaar de wijziging?
show_edit_reason: "(geef een reden)"
reply_placeholder: Typ hier. Gebruik Markdown of BBCode voor de tekstopmaak. Sleep of plak een afbeelding hierin om deze te uploaden."
view_new_post: Bekijk je nieuwe bericht.
saving: Opslaan...
@ -591,7 +599,7 @@ nl:
title: Details topic rangorde
topic:
filter_to: "Laat alleen de {{post_count}} berichten van {{username}} in deze topic zien"
filter_to: "Bekijk {{post_count}} berichten in topic"
create: Maak topic
create_long: Maak een nieuw topic
private_message: Stuur een privé-bericht
@ -737,7 +745,8 @@ nl:
title: Nodig vrienden uit om te reageren
action: Mail uitnodiging
help: verstuur uitnodigingen naar vrienden zodat zij met één klik kunnen reageren op deze topic
email: We zullen je vrienden een korte e-mail sturen waardoor zij op deze topic kunnen reageren door op een link te klikken.
to_topic: We zullen je vriend een korte e-mail sturen waardoor zij op deze topic kunnen reageren door op een link te klikken.
to_forum: We zullen je vriend een korte e-mail sturen waardoor zij het forum op kunnen door op een link te klikken.
email_placeholder: e-mailadres
success: 'Bedankt! We hebben een uitnodiging verstuurd naar <b>{{email}}</b>. We laten je direct weten wanneer ze je uitnodiging hebben geaccepteerd. Check de "Uitnodigingen"-tab op je gebruikerspagina om bij te houden wie je hebt uitgenodigd.'
error: "Sorry, we kunnen deze persoon niet uitnodigen. Wellicht is deze al een lid op onze site?"
@ -753,14 +762,14 @@ nl:
one: van één specifiek lid
other: "van {{count}} specifieke leden"
summary: "Je ziet momenteel alleen {{n_summarized_posts}} {{of_n_posts}}"
summary: "Je ziet momenteel {{n_summarized_posts}} {{of_n_posts}}"
n_summarized_posts:
one: "het enige 'Best of' bericht."
other: "de {{count}} 'Best of' berichten"
one: "het enige bericht in deze topic."
other: "{{count}} berichten"
of_n_posts:
one: ''
other: "van {{count}} in deze topic."
cancel: Laat alle posts in deze topic zien.
other: "van {{count}} als samenvatting van deze topic."
cancel: Laat alle berichten in deze topic zien.
split_topic:
title: Splits topic
@ -794,6 +803,7 @@ nl:
reply_topic: "Reageer op {{link}}"
quote_reply: citeer
edit: "Bewerken van {{link}} door {{replyAvatar}} {{username}}"
edit_reason: "Reden: "
post_number: "bericht {{number}}"
in_reply_to: in reactie op
last_edited_on: bericht gewijzig op
@ -1021,7 +1031,7 @@ nl:
activity: Activiteit
likes: Leuk
likes_long: "er zijn {{count}} likes in deze topic"
users: Deelnemers
users: Gebruikers
category_title: Categorie
history: Geschiedenis
changed_by: "door {{author}}"
@ -1092,6 +1102,7 @@ nl:
please_upgrade: Werk de software bij alsjeblieft
no_check_performed: Er is nog niet op updates gecontroleerd. Zorgen dat sidekiq loopt."
stale_data: Er is al een tijdje niet op updates gecontroleerd. Zorgen dat sidekiq loopt."
version_check_pending: "Het lijkt er op dat je recentelijk hebt bijgewerkt. Fantastisch!"
installed_version: Geïnstalleerd
latest_version: Recent
problems_found: 'Er zijn een aantal problemen gevonden met je Discourse installatie:'
@ -1101,7 +1112,7 @@ nl:
moderators: "Moderators:"
admins: "Admins:"
blocked: "Geblokkeerd:"
suspended: "Geband:"
suspended: "Geschorst:"
private_messages_short: PBs
private_messages_title: Privé-berichten
@ -1139,6 +1150,7 @@ nl:
delete_spammer_title: Verwijder de gebruiker en al hun berichten en topics.
flagged_by: Gemarkeerd door
system: Systeem
error: Er ging iets mis
view_message: Reageer
no_results: Er zijn geen markeringen
@ -1261,8 +1273,8 @@ nl:
change_site_setting: verander instellingen
change_site_customization: verander site aanpassingen
delete_site_customization: verwijder site aanpassingen
ban_user: ban gebruiker
unban_user: hef ban op
suspend_user: schors gebruiker
unsuspend_user: hef schorsing op
screened_emails:
title: Gescreende e-mails
description: Nieuwe accounts met een van deze mailadressen worden geblokkeerd of een andere actie wordt ondernomen.
@ -1271,6 +1283,7 @@ nl:
title: Gescreende urls
description: Deze urls zijn gebruikt door gebruikers die als spammer gemarkeerd zijn.
url: URL
domain: Domein
screened_ips:
title: Gescreende ip-adressen
description: IP-adressen die in de gaten worden gehouden. Kies 'sta toe' om deze op een witte lijst te zetten.
@ -1302,7 +1315,7 @@ nl:
pending: Te beoordelen
admins: Admins
moderators: Moderatoren
suspended: Verbannen
suspended: Geschorst
blocked: Geblokt
approved: Goedgekeurd?
approved_selected:
@ -1323,7 +1336,7 @@ nl:
admins: Administrators
moderators: Moderators
blocked: Geblokkeerde leden
suspended: Verbannen leden
suspended: Geschorste leden
reject_successful:
one: "1 Gebruiker met succes geweigerd"
other: "%{count} Gebruikers met succes geweigerd"
@ -1335,10 +1348,10 @@ nl:
suspend_failed: "Er ging iets fout met het blokkeren van deze gebruiker: {{error}}"
unsuspend_failed: "Er ging iets fout bij het deblokkeren van deze gebruiker: {{error}}"
suspend_duration: "Hoe lang wil je deze gebruiker blokkeren?"
ban_duretion_units: (dagen)
ban_reason_label: "Waarom ban je? Als de gebruiker in probeert te loggen, zullen ze deze tekst zien. Hou het kort."
ban_reason: Reden voor ban
banned_by: Verbannen door
ban_duration_units: (dagen)
ban_reason_label: "Waarom schors je? Deze tekst is voor iedereen zichtbaar en als de gebruiker in probeert te loggen, zullen ze deze tekst zien. Hou het kort."
ban_reason: Reden voor schorsing
banned_by: Geschorst door
delete_all_posts: Verwijder alle berichten
delete_all_posts_confirm: "Je gaat %{posts} en %{topics} verwijderen. Zeker weten?"
suspend: Blokkeer
@ -1393,10 +1406,10 @@ nl:
unblock_failed: Er ging iets mis bij het deblokkeren van deze gebruiker.
block_failed: Er ging iets mis bij het blokkeren van deze gebruiker.
deactivation_explanation: Een gedeactiveerde gebruiker moet zijn e-mailadres opnieuw bevestigen.
banned_explanation: Een verbannen gebruiker kan niet meer inloggen.
banned_explanation: Een geschorste gebruiker kan niet meer inloggen.
block_explanation: Een geblokkeerde gebruiker kan geen topics maken of reageren op topics.
trust_level_change_failed: Er ging iets mis bij het wijzigen van het trust level van deze gebruiker.
ban_modal_title: Ban gebruiker
ban_modal_title: Schors gebruiker
site_content:
none: Selecteer een tekst om deze te bewerken
@ -1408,3 +1421,20 @@ nl:
title: Instellingen
reset: herstel naar standaardinstellingen
none: geen
no_results: "Geen resultaten."
categories:
all_results: Alle
required: Verplicht
basic: Basissetup
users: Gebruikers
posting: Schrijven
email: E-mail
files: Bestanden
trust: Trustlevels
security: Beveiliging
seo: SEO
spam: Spam
developer: Ontwikkelaar
rate_limits: Rate limits
uncategorized: Ongecategoriseerd

View File

@ -443,6 +443,7 @@ nl:
access_password_removal: "Je site gebruikte een toegangswachtwoord (access_password) setting, maar die optie is uit Discourse verwijderd. De login_required en must_approve_users instellingen zijn er voor in de plaats gekomen. Je kan ze in <a href='/admin/site_settings'>de Instellingen</a> aanpassen. Zorg er voor dat je <a href='/admin/users/list/pending'>gebruikers op de wachtlijst accepteert</a>. (Dit bericht verdwijnt na twee dagen.)"
site_contact_username_warning: "De instelling site_contact_username is leeg. Werk deze bij in <a href='/admin/site_settings'>de Instellingen</a>. Stel het in op de gebruikersnaam van een admin die als afzender van de systeemberichten zal worden wordt gebruikt."
notification_email_warning: "De instelling notification_email is leeg. Werk deze bij in <a href='/admin/site_settings'>de Instellingen</a>."
enforce_global_nicknames_warning: "De instelling enforce_global_nicknames is geselecteerd, maar de discourse_org_access_key is niet ingevuld. Een Discourse.org access key is nodig omvoor de enforce_global_nicknames instelling. Werk je <a href='/admin/site_settings'>instellingen</a> bij."
content_types:
education_new_reply:
@ -478,6 +479,12 @@ nl:
login_required:
title: "Inloggen nodig: Homepage"
description: "De tekst die getoond wordt als men moet inloggen om naar het forum te kunnen gaan."
top:
title: "Bovenkant van de pagina's"
description: "HTML dat aan de bovenkant van elke pagina wordt toegevoegd (na de header, voor de navigatie of topictitel)"
bottom:
title: "Onderkant van de pagina's"
description: "HTML dat aan de onderkant van elke pagina wordt toegevoegd"
site_settings:
default_locale: De standaard taal van dit Discourse forum (ISO 639-1 code)
@ -502,6 +509,8 @@ nl:
company_domain: "De domeinnaam van het bedrijf dat deze site draait. Wordt gebruikt in juridische delen van de site, zoals /tos"
queue_jobs: "DEVELOPERS ONLY! WARNING! Zet verschillende taken in een queue binnen sidekiq, bij 'false' worden taken ineens uitgevoerd"
crawl_images: Zet het ophalen van afbeeldingen van externe bronnen aan
download_remote_images_to_local: Download a kopie van externe afbeeldingen met een hotlink in een bericht
download_remote_images_threshold: "Minimum schijfruimte vereist om externe afbeeldingen lokaal te downloaden (percentage)"
ninja_edit_window: "Hoe snel je een aanpassing kan maken zonder dat er een nieuwe versie wordt opgeslagen, in seconden."
edit_history_visible_to_public: "Iedereen mag eerdere versies van een bericht zien. Wanneer aangevinkt kan alleen de staf de eerdere versies van een bericht zien."
delete_removed_posts_after: "Na dit aantal uren zal een door een gebruiker verwijderd bericht ook echt helemaal verwijderd worden (in plaats van alleen verborgen)."
@ -524,11 +533,11 @@ nl:
notification_email: "Het afzenderadres dat wordt gebruikt voor mails waarmee leden op de hoogte worden gesteld van verloren wachtwoorden, nieuwe accounts etc."
email_custom_headers: "Een lijst van custom email headers, gescheiden door een pipe (|)"
use_ssl: "Moet de site toegankelijk zijn via SSL? (NOG NIET GEIMPLEMENTEERD, EXPERIMENTEEL)"
summary_score_threshold: "De minimumscore van bericht om inbegrepen te worden in 'Best of'"
summary_posts_required: "Minimum aantal berichten nodig in een topic voordat de 'Best of'-modus wordt aangezet."
summary_likes_required: "Minimum aantal 'vind ik leuk' nodig voordat de 'Best of'-modus wordt aangezet."
summary_percent_filter: "Als iemand op 'Best of' klikt, laat dan de top % van de berichten zien"
enable_private_messages: "Sta nieuwe leden (trustlevel 1) toe privé-berichten te maken en er op te kunnen reageren"
summary_score_threshold: "De minimumscore van bericht om inbegrepen te worden in de samenvatting"
summary_posts_required: "Minimum aantal berichten nodig in een topic voordat de samenvattingsmodus mogelijk wordt."
summary_likes_required: "Minimum aantal 'vind ik leuk' nodig voordat de samenvattingsmodus mogelijk wordt."
summary_percent_filter: "Als iemand op samenvatting klikt, laat dan de top % van de berichten zien"
enable_private_messages: "Sta nieuwe leden (trustlevel 1) toe privé-berichten te maken en er op te reageren"
enable_long_polling: "De 'message bus' die gebruikt wordt voor notificaties kan 'long polling' gebruiken."
long_polling_interval: "Het interval in milliseconden voor dat een nieuwe 'long poll' wordt uitgestuurd"
@ -725,6 +734,7 @@ nl:
enable_names: "Gebruikers mogen hun volledige naam laten zien"
display_name_on_posts: "Laat de volledige naam van een gebruiker ook bij zijn berichten zien"
invites_shown: Maximum uitnodigingen op gebruikerspagina
notification_types:
mentioned: "%{display_username} heeft je genoemd in %{link}"
@ -780,7 +790,7 @@ nl:
activate_email: "Je bent er bijna! We hebben een activatiemail verstuurd naar <b>%{email}</b>. Volg de instructies in de mail om je account te activeren."
not_activated: "Je kan nog niet inloggen. We hebben je een activatiemail gestuurd. Volg de instructies in de mail om je account te activeren."
suspended: "Je kan tot %{date} niet inloggen."
banned_with_reason: "Je kan tot %{date} niet inloggen. Je hebt een ban om de volgende reden: %{reden}"
suspended_with_reason: "Je kan tot %{date} niet inloggen. Je hebt bent om de volgende reden geschorst: %{reden}"
errors: "%{errors}"
not_available: "Niet beschikbaar. Probeer %{suggestion}?"
something_already_taken: "Er ging iets mis, misschien zijn de gebruikersnaam en/of e-mailadres al in gebruik? Gebruik dan de 'wachtwoord vergeten' link"
@ -814,6 +824,19 @@ nl:
[1]: %{invite_link}
invite_forum_mailer:
subject_template: "[%{site_name}] %{invitee_name} heeft je uitgenodigd voor %{site_name}"
text_body_template: |
%{invitee_name} heeft je uitgenodigd voor %{site_name}.
Klik op onderstaande link om op de uitnodiging in te gaan als je geïnteresseerd bent:
[Bezoek %{site_name}][1]
Je bent uitgenodigd door een vertrouwde gebruiker, daarom kun je je direct inschrijven zonder in te hoeven loggen.
[1]: %{invite_link}
test_mailer:
subject_template: "[%{site_name}] E-mail Bezorgtest"
text_body_template: |
@ -1164,6 +1187,7 @@ nl:
deleted: 'verwijderd'
upload:
edit_reason: "We hebben een kopie van de externe afbeeldingen gedownload"
unauthorized: 'Sorry, je mag dat bestand niet uploaden (toegestane extensies: %{authorized_extensions}).'
pasted_image_filename: Geplakte afbeelding
attachment:

View File

@ -70,11 +70,22 @@ class CookedPostProcessor
end
def limit_size!(img)
w, h = get_size_from_image_sizes(img["src"], @opts[:image_sizes]) || get_size(img["src"])
# retrieve the size from
# 1) the width/height attributes
# 2) the dimension from the preview (image_sizes)
# 3) the dimension of the original image (HTTP request)
w, h = get_size_from_attributes(img) ||
get_size_from_image_sizes(img["src"], @opts[:image_sizes]) ||
get_size(img["src"])
# limit the size of the thumbnail
img["width"], img["height"] = ImageSizer.resize(w, h)
end
def get_size_from_attributes(img)
w, h = img["width"].to_i, img["height"].to_i
return [w, h] if w > 0 && h > 0
end
def get_size_from_image_sizes(src, image_sizes)
return unless image_sizes.present?
image_sizes.each do |image_size|

View File

@ -42,12 +42,20 @@ describe CookedPostProcessor do
context "with image_sizes" do
let(:post) { build(:post_with_image_url) }
let(:post) { build(:post_with_image_urls) }
let(:cpp) { CookedPostProcessor.new(post, image_sizes: {"http://foo.bar/image.png" => {"width" => 111, "height" => 222}}) }
before { cpp.post_process_images }
it "adds the width from the image sizes provided when no dimension is provided" do
cpp.html.should =~ /src="http:\/\/foo.bar\/image.png" width="111" height="222"/
end
it "adds the width from the image sizes provided" do
cpp.post_process_images
cpp.html.should =~ /width=\"111\"/
cpp.html.should =~ /src="http:\/\/domain.com\/picture.jpg" width="50" height="42"/
end
it "should be dirty" do
cpp.should be_dirty
end

View File

@ -1,3 +1,5 @@
# -*- encoding : utf-8 -*-
require 'spec_helper'
require 'email/receiver'

View File

@ -58,8 +58,11 @@ Fabricator(:post_with_unsized_images, from: :post) do
'
end
Fabricator(:post_with_image_url, from: :post) do
cooked '<img src="http://foo.bar/image.png" width="50" height="42">'
Fabricator(:post_with_image_urls, from: :post) do
cooked '
<img src="http://foo.bar/image.png">
<img src="http://domain.com/picture.jpg" width="50" height="42">
'
end
Fabricator(:post_with_large_image, from: :post) do