diff --git a/.travis.yml b/.travis.yml index dc5a82fc36..43ef9e8166 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,7 +32,8 @@ rvm: services: - redis-server -sudo: false +sudo: required +dist: trusty cache: directories: diff --git a/Gemfile b/Gemfile index 178f640533..29c9292d08 100644 --- a/Gemfile +++ b/Gemfile @@ -105,8 +105,8 @@ gem 'sidekiq-statistic' # for sidekiq web gem 'sinatra', require: false - -gem 'therubyracer' +gem 'execjs', require: false +gem 'mini_racer' gem 'thin', require: false gem 'highline', require: false gem 'rack-protection' # security diff --git a/Gemfile.lock b/Gemfile.lock index 5ed3677067..995efb13e0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -38,16 +38,16 @@ GEM minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) - annotate (2.7.0) + annotate (2.7.1) activerecord (>= 3.2, < 6.0) - rake (~> 10.4) + rake (>= 10.4, < 12.0) arel (6.0.3) - aws-sdk (2.2.9) - aws-sdk-resources (= 2.2.9) - aws-sdk-core (2.2.9) + aws-sdk (2.3.7) + aws-sdk-resources (= 2.3.7) + aws-sdk-core (2.3.7) jmespath (~> 1.0) - aws-sdk-resources (2.2.9) - aws-sdk-core (= 2.2.9) + aws-sdk-resources (2.3.7) + aws-sdk-core (= 2.3.7) babel-source (5.8.34) babel-transpiler (0.7.0) babel-source (>= 4.0, < 6) @@ -94,7 +94,7 @@ GEM erubis (2.7.0) eventmachine (1.2.0.1) excon (0.45.4) - execjs (2.6.0) + execjs (2.7.0) exifr (1.2.4) fabrication (2.9.8) fakeweb (1.3.0) @@ -108,7 +108,7 @@ GEM fast_xs (0.8.0) ffi (1.9.10) flamegraph (0.9.5) - foreman (0.78.0) + foreman (0.82.0) thor (~> 0.19.1) fspath (2.1.1) gctools (0.2.3) @@ -117,7 +117,7 @@ GEM globalid (0.3.6) activesupport (>= 4.1.0) guess_html_encoding (0.0.11) - hashie (3.4.3) + hashie (3.4.4) highline (1.7.8) hiredis (0.6.1) htmlentities (4.3.4) @@ -133,18 +133,20 @@ GEM progress (~> 3.0, >= 3.0.1) image_size (1.4.1) in_threads (1.3.1) - jmespath (1.1.3) + jmespath (1.2.4) + json_pure (>= 1.8.1) jquery-rails (4.0.5) rails-dom-testing (~> 1.0) railties (>= 4.2.0) thor (>= 0.14, < 2.0) json (1.8.3) + json_pure (1.8.3) jwt (1.5.2) kgio (2.10.0) librarian (0.1.2) highline thor (~> 0.15) - libv8 (3.16.14.13) + libv8 (5.0.71.48.3) listen (0.7.3) logster (1.2.3) loofah (2.0.3) @@ -159,12 +161,14 @@ GEM method_source (0.8.2) mime-types (2.99.1) mini_portile2 (2.1.0) - minitest (5.8.4) + mini_racer (0.1.3) + libv8 (~> 5.0) + minitest (5.9.0) mocha (1.1.0) metaclass (~> 0.0.1) mock_redis (0.15.4) moneta (0.8.0) - msgpack (0.7.4) + msgpack (0.7.6) multi_json (1.11.2) multi_xml (0.5.5) multipart-post (2.0.0) @@ -211,7 +215,7 @@ GEM omniauth-twitter (1.2.1) json (~> 1.3) omniauth-oauth (~> 1.1) - onebox (1.5.39) + onebox (1.5.41) htmlentities (~> 4.3.4) moneta (~> 0.8) multi_json (~> 1.11) @@ -270,26 +274,25 @@ GEM activesupport (= 4.2.6) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) - raindrops (0.15.0) - rake (10.5.0) + raindrops (0.16.0) + rake (11.1.2) rake-compiler (0.9.9) rake rb-fsevent (0.9.7) - rb-inotify (0.9.5) + rb-inotify (0.9.7) ffi (>= 0.5.0) - rbtrace (0.4.7) + rbtrace (0.4.8) ffi (>= 1.0.6) msgpack (>= 0.4.3) trollop (>= 1.16.2) redis (3.3.0) redis-namespace (1.5.2) redis (~> 3.0, >= 3.0.4) - ref (2.0.0) rest-client (1.8.0) http-cookie (>= 1.0.2, < 2.0) mime-types (>= 1.16, < 3.0) netrc (~> 0.7) - rinku (1.7.3) + rinku (2.0.0) rmmseg-cpp (0.2.9) rspec (3.2.0) rspec-core (~> 3.2.0) @@ -373,9 +376,6 @@ GEM activesupport (>= 4.0) sprockets (>= 3.0.0) stackprof (0.2.9) - therubyracer (0.12.2) - libv8 (~> 3.16.14.0) - ref thin (1.6.4) daemons (~> 1.0, >= 1.0.9) eventmachine (~> 1.0, >= 1.0.4) @@ -387,15 +387,13 @@ GEM trollop (2.1.2) tzinfo (1.2.2) thread_safe (~> 0.1) - uglifier (2.7.2) - execjs (>= 0.3.0) - json (>= 1.8.0) + uglifier (3.0.0) + execjs (>= 0.3.0, < 3) unf (0.1.4) unf_ext unf_ext (0.0.7.1) - unicorn (5.0.1) + unicorn (5.1.0) kgio (~> 2.6) - rack raindrops (~> 0.7) PLATFORMS @@ -417,6 +415,7 @@ DEPENDENCIES ember-rails (= 0.18.5) ember-source (= 1.12.2) excon + execjs fabrication (= 2.9.8) fakeweb (~> 1.3.0) fast_blank @@ -439,6 +438,7 @@ DEPENDENCIES memory_profiler message_bus (= 2.0.0.beta.11) mime-types + mini_racer minitest mocha mock_redis @@ -493,7 +493,6 @@ DEPENDENCIES sinatra spork-rails stackprof - therubyracer thin timecop uglifier diff --git a/app/assets/images/favicons/1282043220-favicon.ico b/app/assets/images/favicons/1282043220-favicon.ico deleted file mode 100644 index 9dbcbb7496..0000000000 Binary files a/app/assets/images/favicons/1282043220-favicon.ico and /dev/null differ diff --git a/app/assets/images/favicons/amazon.png b/app/assets/images/favicons/amazon.png index c81b56e76c..3f074f64f2 100644 Binary files a/app/assets/images/favicons/amazon.png and b/app/assets/images/favicons/amazon.png differ diff --git a/app/assets/images/favicons/apple.png b/app/assets/images/favicons/apple.png index cad2143a4c..aed253c7a1 100644 Binary files a/app/assets/images/favicons/apple.png and b/app/assets/images/favicons/apple.png differ diff --git a/app/assets/images/favicons/discourse.png b/app/assets/images/favicons/discourse.png index 210d4118d5..59be3f7aa2 100644 Binary files a/app/assets/images/favicons/discourse.png and b/app/assets/images/favicons/discourse.png differ diff --git a/app/assets/images/favicons/github.png b/app/assets/images/favicons/github.png index 5a180b8915..32c975f4fa 100644 Binary files a/app/assets/images/favicons/github.png and b/app/assets/images/favicons/github.png differ diff --git a/app/assets/images/favicons/google_play.png b/app/assets/images/favicons/google_play.png index 0f0ff12c09..76b523789c 100644 Binary files a/app/assets/images/favicons/google_play.png and b/app/assets/images/favicons/google_play.png differ diff --git a/app/assets/images/favicons/rottentomatoes.png b/app/assets/images/favicons/rottentomatoes.png index ff9041be2c..6344c1922c 100644 Binary files a/app/assets/images/favicons/rottentomatoes.png and b/app/assets/images/favicons/rottentomatoes.png differ diff --git a/app/assets/images/favicons/stackexchange.png b/app/assets/images/favicons/stackexchange.png index 77ebf192f0..c33bb9275b 100644 Binary files a/app/assets/images/favicons/stackexchange.png and b/app/assets/images/favicons/stackexchange.png differ diff --git a/app/assets/images/favicons/twitter.png b/app/assets/images/favicons/twitter.png index d135ab62e7..0e30273e6c 100644 Binary files a/app/assets/images/favicons/twitter.png and b/app/assets/images/favicons/twitter.png differ diff --git a/app/assets/images/favicons/wikipedia.png b/app/assets/images/favicons/wikipedia.png index b83c49696d..050c5df90c 100644 Binary files a/app/assets/images/favicons/wikipedia.png and b/app/assets/images/favicons/wikipedia.png differ diff --git a/app/assets/javascripts/admin/templates/email-sent.hbs b/app/assets/javascripts/admin/templates/email-sent.hbs index 4854a4e94f..847076f098 100644 --- a/app/assets/javascripts/admin/templates/email-sent.hbs +++ b/app/assets/javascripts/admin/templates/email-sent.hbs @@ -29,7 +29,10 @@ — {{/if}} - {{l.to_address}} + + {{#if l.bounced}}{{fa-icon "repeat" title="admin.email.bounced"}}{{/if}} + {{l.to_address}} + {{l.email_type}} {{#if l.post_url}} diff --git a/app/assets/javascripts/discourse/controllers/preferences.js.es6 b/app/assets/javascripts/discourse/controllers/preferences.js.es6 index 6ccc5bb22b..729f749af1 100644 --- a/app/assets/javascripts/discourse/controllers/preferences.js.es6 +++ b/app/assets/javascripts/discourse/controllers/preferences.js.es6 @@ -62,6 +62,24 @@ export default Ember.Controller.extend(CanCheckEmails, { return this.siteSettings.available_locales.split('|').map(s => ({ name: s, value: s })); }, + @computed() + frequencyEstimate() { + var estimate = this.get('model.mailing_list_posts_per_day'); + if (!estimate || estimate < 2) { + return I18n.t('user.mailing_list_mode.few_per_day'); + } else { + return I18n.t('user.mailing_list_mode.many_per_day', { dailyEmailEstimate: estimate }); + } + }, + + @computed() + mailingListModeOptions() { + return [ + {name: I18n.t('user.mailing_list_mode.daily'), value: 0}, + {name: this.get('frequencyEstimate'), value: 1} + ]; + }, + previousRepliesOptions: [ {name: I18n.t('user.email_previous_replies.always'), value: 0}, {name: I18n.t('user.email_previous_replies.unless_emailed'), value: 1}, @@ -116,13 +134,12 @@ export default Ember.Controller.extend(CanCheckEmails, { Em.run.next(()=>{ const postsPerDay = this.get('model.mailing_list_posts_per_day'); if (!postsPerDay || postsPerDay < 2) { - this.set('model.user_option.mailing_list_mode', true); - return; + return true; } bootbox.confirm(I18n.t("user.enable_mailing_list", {count: postsPerDay}), I18n.t("no_value"), I18n.t("yes_value"), (success) => { - if (success) { - this.set('model.user_option.mailing_list_mode', true); + if (!success) { + this.set('model.user_option.mailing_list_mode', false); } }); }); diff --git a/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 b/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 index 1d6a4e02ea..043c6a50e6 100644 --- a/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 +++ b/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 @@ -12,6 +12,7 @@ export function iconHTML(icon, params) { params = params || {}; var html = " parseInt(v, 10)); controller.readPosts(topicId, postNumbers); } + }).catch(e => { + const error = e.jqXHR; + if (error.status === 405 && error.responseJSON.error_type === "read_only") return; }); } else if (this._anonCallback) { // Anonymous viewer - save to localStorage diff --git a/app/assets/javascripts/discourse/lib/utilities.js b/app/assets/javascripts/discourse/lib/utilities.js index 16fb66b631..491e2b6a2b 100644 --- a/app/assets/javascripts/discourse/lib/utilities.js +++ b/app/assets/javascripts/discourse/lib/utilities.js @@ -269,7 +269,7 @@ Discourse.Utilities = { // is Audio/Video return Discourse.Utilities.uploadLocation(upload.url); } else { - return '' + upload.original_filename + ' (' + I18n.toHumanSize(upload.filesize) + ')'; + return '' + upload.original_filename + ' (' + I18n.toHumanSize(upload.filesize) + ')\n'; } }, diff --git a/app/assets/javascripts/discourse/models/user.js.es6 b/app/assets/javascripts/discourse/models/user.js.es6 index 55456dfb1a..1526638f7f 100644 --- a/app/assets/javascripts/discourse/models/user.js.es6 +++ b/app/assets/javascripts/discourse/models/user.js.es6 @@ -155,6 +155,7 @@ const User = RestModel.extend({ [ 'email_always', 'mailing_list_mode', + 'mailing_list_mode_frequency', 'external_links_in_new_tab', 'email_digests', 'email_direct', diff --git a/app/assets/javascripts/discourse/templates/components/preference-checkbox.hbs b/app/assets/javascripts/discourse/templates/components/preference-checkbox.hbs index b47200bf5a..f7931d5918 100644 --- a/app/assets/javascripts/discourse/templates/components/preference-checkbox.hbs +++ b/app/assets/javascripts/discourse/templates/components/preference-checkbox.hbs @@ -1,4 +1,4 @@ diff --git a/app/assets/javascripts/discourse/templates/composer/group-mentioned.hbs b/app/assets/javascripts/discourse/templates/composer/group-mentioned.hbs index b59da973c3..f20da40511 100644 --- a/app/assets/javascripts/discourse/templates/composer/group-mentioned.hbs +++ b/app/assets/javascripts/discourse/templates/composer/group-mentioned.hbs @@ -1,2 +1,2 @@ - + {{{body}}} diff --git a/app/assets/javascripts/discourse/templates/composer/similar-topics.hbs b/app/assets/javascripts/discourse/templates/composer/similar-topics.hbs index 257a51ebf1..b10a489c63 100644 --- a/app/assets/javascripts/discourse/templates/composer/similar-topics.hbs +++ b/app/assets/javascripts/discourse/templates/composer/similar-topics.hbs @@ -1,4 +1,4 @@ -{{fa-icon "times-circle"}} +{{fa-icon "close"}}

{{i18n 'composer.similar_topics'}}