diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aa94465faf..b5a33d7a45 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,12 +57,14 @@ jobs: fetch-depth: 1 - name: Setup Git - run: git config --global user.email "ci@ci.invalid" && git config --global user.name "Discourse CI" + run: | + git config --global user.email "ci@ci.invalid" + git config --global user.name "Discourse CI" - name: Setup packages if: env.BUILD_TYPE != 'LINT' run: | - sudo apt-get -yqq install postgresql-client libpq-dev gifsicle jpegoptim optipng jhead && \ + sudo apt-get -yqq install postgresql-client libpq-dev gifsicle jpegoptim optipng jhead wget -qO- https://raw.githubusercontent.com/discourse/discourse_docker/master/image/base/install-pngquant | sudo sh - name: Setup redis @@ -78,7 +80,10 @@ jobs: architecture: 'x64' - name: Setup bundler - run: gem install bundler -v 2.1.1 --no-doc + run: | + gem install bundler -v 2.1.4 --no-doc + bundle config deployment 'true' + bundle config without 'development' - name: Bundler cache uses: actions/cache@v1 @@ -90,7 +95,7 @@ jobs: ${{ runner.os }}-gem- - name: Setup gems - run: bundle install --without development --deployment --jobs 4 --retry 3 + run: bundle install --jobs 4 - name: Get yarn cache directory id: yarn-cache-dir @@ -114,11 +119,15 @@ jobs: - name: Create database if: env.BUILD_TYPE != 'LINT' - run: bin/rake db:create && bin/rake db:migrate + run: | + bin/rake db:create + bin/rake db:migrate - name: Create parallel databases if: env.BUILD_TYPE == 'BACKEND' && env.TARGET == 'CORE' - run: bin/rake parallel:create && bin/rake parallel:migrate + run: | + bin/rake parallel:create + bin/rake parallel:migrate - name: Rubocop if: env.BUILD_TYPE == 'LINT' @@ -126,7 +135,9 @@ jobs: - name: ESLint if: env.BUILD_TYPE == 'LINT' - run: yarn eslint app/assets/javascripts test/javascripts && yarn eslint --ext .es6 app/assets/javascripts test/javascripts plugins + run: | + yarn eslint app/assets/javascripts test/javascripts + yarn eslint --global I18n --ext .es6 plugins - name: Prettier if: env.BUILD_TYPE == 'LINT' @@ -136,7 +147,9 @@ jobs: - name: Core RSpec if: env.BUILD_TYPE == 'BACKEND' && env.TARGET == 'CORE' - run: bin/turbo_rspec && bin/rake plugin:spec + run: | + bin/turbo_rspec + bin/rake plugin:spec - name: Plugin RSpec if: env.BUILD_TYPE == 'BACKEND' && env.TARGET == 'PLUGINS' diff --git a/.gitignore b/.gitignore index 97d1a6b930..2ef99613b6 100644 --- a/.gitignore +++ b/.gitignore @@ -137,4 +137,7 @@ node_modules openapi/* # ember-cli generated -dist \ No newline at end of file +dist + +# Copyright Deposits +copyright diff --git a/.rubocop.yml b/.rubocop.yml index 0cb02e3e97..d46296cf88 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,357 +1,2 @@ -require: - - rubocop-discourse - - rubocop-rspec - -AllCops: - TargetRubyVersion: 2.6 - DisabledByDefault: true - Exclude: - - "db/schema.rb" - - "bundle/**/*" - - "vendor/**/*" - - "node_modules/**/*" - - "public/**/*" - - "plugins/**/gems/**/*" - -Discourse: - Enabled: true - -Discourse/NoChdir: - Exclude: - - 'spec/**/*' # Specs are run sequentially, so chdir can be used - - 'plugins/*/spec/**/*' - -# Prefer &&/|| over and/or. -Style/AndOr: - Enabled: true - -Style/FrozenStringLiteralComment: - Enabled: true - -# Align `when` with `case`. -Layout/CaseIndentation: - Enabled: true - -# Align comments with method definitions. -Layout/CommentIndentation: - Enabled: true - -# No extra empty lines. -Layout/EmptyLines: - Enabled: true - -# Use Ruby >= 1.9 syntax for hashes. Prefer { a: :b } over { :a => :b }. -Style/HashSyntax: - Enabled: true - -# Two spaces, no tabs (for indentation). -Layout/IndentationWidth: - Enabled: true - -Layout/SpaceAfterColon: - Enabled: true - -Layout/SpaceAfterComma: - Enabled: true - -Layout/SpaceAroundEqualsInParameterDefault: - Enabled: true - -Layout/SpaceAroundKeyword: - Enabled: true - -Layout/SpaceAroundOperators: - Enabled: true - -Layout/SpaceBeforeFirstArg: - Enabled: true - -# Defining a method with parameters needs parentheses. -Style/MethodDefParentheses: - Enabled: true - -# Use `foo {}` not `foo{}`. -Layout/SpaceBeforeBlockBraces: - Enabled: true - -# Use `foo { bar }` not `foo {bar}`. -Layout/SpaceInsideBlockBraces: - Enabled: true - -# Use `{ a: 1 }` not `{a:1}`. -Layout/SpaceInsideHashLiteralBraces: - Enabled: true - -Layout/SpaceInsideParens: - Enabled: true - -# Detect hard tabs, no hard tabs. -Layout/IndentationStyle: - Enabled: true - -# Blank lines should not have any spaces. -Layout/TrailingEmptyLines: - Enabled: true - -# No trailing whitespace. -Layout/TrailingWhitespace: - Enabled: true - -Lint/Debugger: - Enabled: true - -Layout/BlockAlignment: - Enabled: true - -# Align `end` with the matching keyword or starting expression except for -# assignments, where it should be aligned with the LHS. -Layout/EndAlignment: - Enabled: true - EnforcedStyleAlignWith: variable - -# Use my_method(my_arg) not my_method( my_arg ) or my_method my_arg. -Lint/RequireParentheses: - Enabled: true - -Lint/ShadowingOuterLocalVariable: - Enabled: true - -Layout/MultilineMethodCallIndentation: - Enabled: true - EnforcedStyle: indented - -Layout/HashAlignment: - Enabled: true - -Bundler/OrderedGems: - Enabled: false - -Style/SingleLineMethods: - Enabled: true - -Style/Semicolon: - Enabled: true - AllowAsExpressionSeparator: true - -Style/RedundantReturn: - Enabled: true - -Style/GlobalVars: - Enabled: true - Severity: warning - Exclude: - - 'lib/tasks/**/*' - - 'script/**/*' - - 'spec/**/*.rb' - - 'plugins/*/spec/**/*' - -# Specs - -RSpec/AnyInstance: - Enabled: false # To be decided - -RSpec/AroundBlock: - Enabled: true - -RSpec/BeforeAfterAll: - Enabled: false # To be decided - -RSpec/ContextMethod: - Enabled: false # TODO - -RSpec/ContextWording: - Enabled: false # To be decided - -RSpec/DescribeClass: - Enabled: false # To be decided - -RSpec/DescribeMethod: - Enabled: true - -RSpec/DescribeSymbol: - Enabled: false # To be decided - -RSpec/DescribedClass: - Enabled: false # To be decided - -RSpec/DescribedClassModuleWrapping: - Enabled: false # To be decided - -RSpec/EmptyExampleGroup: - Enabled: true - Exclude: - - 'spec/requests/api/*' - -RSpec/EmptyLineAfterExample: - Enabled: false # TODO - -RSpec/EmptyLineAfterExampleGroup: - Enabled: false # TODO - -RSpec/EmptyLineAfterFinalLet: - Enabled: false # TODO - -RSpec/EmptyLineAfterHook: - Enabled: false # TODO - -RSpec/EmptyLineAfterSubject: - Enabled: false # TODO - -RSpec/ExampleLength: - Enabled: false # To be decided - -RSpec/ExampleWithoutDescription: - Enabled: true - -RSpec/ExampleWording: - Enabled: false # TODO - -RSpec/ExpectActual: - Enabled: true - -RSpec/ExpectChange: - Enabled: false # To be decided - -RSpec/ExpectInHook: - Enabled: false # To be decided - -RSpec/ExpectOutput: - Enabled: true - -RSpec/FilePath: - Enabled: false # To be decided - -RSpec/Focus: - Enabled: true - -RSpec/HookArgument: - Enabled: false # TODO - -RSpec/HooksBeforeExamples: - Enabled: false # TODO - -RSpec/ImplicitBlockExpectation: - Enabled: true - -RSpec/ImplicitExpect: - Enabled: false # To be decided - -RSpec/ImplicitSubject: - Enabled: false # To be decided - -RSpec/InstanceSpy: - Enabled: true - -RSpec/InstanceVariable: - Enabled: false # TODO - -RSpec/InvalidPredicateMatcher: - Enabled: true - -RSpec/ItBehavesLike: - Enabled: true - -RSpec/IteratedExpectation: - Enabled: false # To be decided - -RSpec/LeadingSubject: - Enabled: false # TODO - -RSpec/LeakyConstantDeclaration: - Enabled: false # To be decided - -RSpec/LetBeforeExamples: - Enabled: false # TODO - -RSpec/LetSetup: - Enabled: false # TODO - -RSpec/MessageChain: - Enabled: true - -RSpec/MessageSpies: - Enabled: true - -RSpec/MissingExampleGroupArgument: - Enabled: true - -RSpec/MultipleDescribes: - Enabled: false # TODO - -RSpec/MultipleSubjects: - Enabled: true - -RSpec/NamedSubject: - Enabled: false # To be decided - -RSpec/NestedGroups: - Enabled: false # To be decided - -RSpec/OverwritingSetup: - Enabled: true - -RSpec/ReceiveCounts: - Enabled: true - -RSpec/ReceiveNever: - Enabled: true - -RSpec/RepeatedDescription: - Enabled: false # TODO - -RSpec/RepeatedExample: - Enabled: false # TODO - -RSpec/RepeatedExampleGroupBody: - Enabled: false # TODO - -RSpec/RepeatedExampleGroupDescription: - Enabled: false # TODO - -RSpec/ReturnFromStub: - Enabled: true - -RSpec/ScatteredSetup: - Enabled: false # TODO - -RSpec/SharedContext: - Enabled: true - -RSpec/SharedExamples: - Enabled: true - -RSpec/SingleArgumentMessageChain: - Enabled: true - -RSpec/SubjectStub: - Enabled: true - -RSpec/UnspecifiedException: - Enabled: true - -RSpec/VerifiedDoubles: - Enabled: true - -RSpec/VoidExpect: - Enabled: true - -RSpec/Yield: - Enabled: true - -Capybara/CurrentPathExpectation: - Enabled: true - -Capybara/FeatureMethods: - Enabled: true - -FactoryBot/AttributeDefinedStatically: - Enabled: true - -FactoryBot/CreateList: - Enabled: true - -FactoryBot/FactoryClassName: - Enabled: true - -Rails/HttpStatus: - Enabled: true +inherit_gem: + rubocop-discourse: default.yml diff --git a/.template-lintrc.js b/.template-lintrc.js index d7b4a104eb..adf0ccad1f 100644 --- a/.template-lintrc.js +++ b/.template-lintrc.js @@ -8,7 +8,6 @@ module.exports = { rules: { "block-indentation": true, "deprecated-render-helper": true, - "require-valid-alt-text": false, "linebreak-style": true, "link-rel-noopener": "strict", "no-abstract-roles": true, diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 7119b6cd2e..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,86 +0,0 @@ -language: ruby - -git: - depth: false - -branches: - only: - - master - - beta - - stable - -env: - global: - - TRAVIS_NODE_VERSION="10" - - DISCOURSE_HOSTNAME=www.example.com - - RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 - matrix: - - "RAILS_MASTER=0 QUNIT_RUN=0 RUN_LINT=0" - - "RAILS_MASTER=0 QUNIT_RUN=1 RUN_LINT=0" - - "RAILS_MASTER=0 QUNIT_RUN=0 RUN_LINT=1" - -addons: - chrome: stable - postgresql: "9.6" - apt: - update: true - packages: - - gifsicle - - jpegoptim - - optipng - - jhead - -matrix: - fast_finish: true - -rvm: - - 2.6.3 - -services: - - redis-server - -sudo: required -dist: xenial - -cache: - yarn: true - directories: - - vendor/bundle - -before_install: - - wget -qO- https://raw.githubusercontent.com/discourse/discourse_docker/master/image/base/install-pngquant | sudo sh - - nvm install node - - node --version - - gem install bundler -v 1.17.3 - - git clone --depth=1 https://github.com/discourse/discourse-backup-uploads-to-s3.git plugins/discourse-backup-uploads-to-s3 - - git clone --depth=1 https://github.com/discourse/discourse-spoiler-alert.git plugins/discourse-spoiler-alert - - git clone --depth=1 https://github.com/discourse/discourse-cakeday.git plugins/discourse-cakeday - - git clone --depth=1 https://github.com/discourse/discourse-canned-replies.git plugins/discourse-canned-replies - - git clone --depth=1 https://github.com/discourse/discourse-chat-integration.git plugins/discourse-chat-integration - - git clone --depth=1 https://github.com/discourse/discourse-assign.git plugins/discourse-assign - - git clone --depth=1 https://github.com/discourse/discourse-patreon.git plugins/discourse-patreon - - git clone --depth=1 https://github.com/discourse/discourse-user-notes.git plugins/discourse-user-notes - - git clone --depth=1 https://github.com/discourse/discourse-group-tracker - - export PATH=$HOME/.yarn/bin:$PATH - -install: - - bash -c "if [ '$RAILS_MASTER' == '1' ]; then bundle update --retry=3 --jobs=3 arel rails seed-fu; fi" - - bash -c "if [ '$RAILS_MASTER' == '0' ]; then bundle install --without development --deployment --retry=3 --jobs=3; fi" - - bash -c "if [ '$QUNIT_RUN' == '1' ] || [ '$RUN_LINT' == '1' ]; then yarn install --dev; fi" - - bash -c "if [ '$RUN_LINT' != '1' ]; then bundle exec rake db:create && LOAD_PLUGINS=1 bundle exec rake db:migrate; fi" - -script: - - | - bash -c " - if [ '$RUN_LINT' == '1' ]; then - npx lefthook run lints - else - if [ '$QUNIT_RUN' == '1' ]; then - bundle exec rake qunit:test['1200000'] && \ - bundle exec rake qunit:test['1200000','/wizard/qunit'] && \ - bundle exec rake plugin:qunit - else - bundle exec rspec && bundle exec rake plugin:spec - fi - fi - " diff --git a/Gemfile b/Gemfile index 742bf82d0b..a80f23dbc0 100644 --- a/Gemfile +++ b/Gemfile @@ -18,13 +18,13 @@ else # this allows us to include the bits of rails we use without pieces we do not. # # To issue a rails update bump the version number here - gem 'actionmailer', '6.0.2.2' - gem 'actionpack', '6.0.2.2' - gem 'actionview', '6.0.2.2' - gem 'activemodel', '6.0.2.2' - gem 'activerecord', '6.0.2.2' - gem 'activesupport', '6.0.2.2' - gem 'railties', '6.0.2.2' + gem 'actionmailer', '6.0.3' + gem 'actionpack', '6.0.3' + gem 'actionview', '6.0.3' + gem 'activemodel', '6.0.3' + gem 'activerecord', '6.0.3' + gem 'activesupport', '6.0.3' + gem 'railties', '6.0.3' gem 'sprockets-rails' end @@ -127,11 +127,7 @@ gem 'mini_racer' # TODO: determine why highline is being held back and upgrade to latest gem 'highline', '~> 1.7.0', require: false -# TODO: Upgrading breaks Sidekiq Web -# This is a bit of a hornets nest cause in an ideal world we much prefer -# if Sidekiq reused session and CSRF mitigation with Discourse on the -# _forum_session cookie instead of a rack.session cookie -gem 'rack', '2.0.8' +gem 'rack', '2.2.2' gem 'rack-protection' # security gem 'cbor', require: false @@ -172,9 +168,7 @@ group :test, :development do gem 'shoulda-matchers', require: false gem 'rspec-html-matchers' gem 'byebug', require: ENV['RM_INFO'].nil?, platform: :mri - gem 'rubocop', require: false gem "rubocop-discourse", require: false - gem "rubocop-rspec", require: false gem 'parallel_tests' gem 'rswag-specs' @@ -254,3 +248,5 @@ end gem 'webpush', require: false gem 'colored2', require: false gem 'maxminddb' + +gem 'rails_failover', require: false diff --git a/Gemfile.lock b/Gemfile.lock index d16ced6284..26cce0e8f2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,21 +1,21 @@ GEM remote: https://rubygems.org/ specs: - actionmailer (6.0.2.2) - actionpack (= 6.0.2.2) - actionview (= 6.0.2.2) - activejob (= 6.0.2.2) + actionmailer (6.0.3) + actionpack (= 6.0.3) + actionview (= 6.0.3) + activejob (= 6.0.3) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (6.0.2.2) - actionview (= 6.0.2.2) - activesupport (= 6.0.2.2) + actionpack (6.0.3) + actionview (= 6.0.3) + activesupport (= 6.0.3) rack (~> 2.0, >= 2.0.8) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actionview (6.0.2.2) - activesupport (= 6.0.2.2) + actionview (6.0.3) + activesupport (= 6.0.3) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -24,20 +24,20 @@ GEM actionview (>= 6.0.a) active_model_serializers (0.8.4) activemodel (>= 3.0) - activejob (6.0.2.2) - activesupport (= 6.0.2.2) + activejob (6.0.3) + activesupport (= 6.0.3) globalid (>= 0.3.6) - activemodel (6.0.2.2) - activesupport (= 6.0.2.2) - activerecord (6.0.2.2) - activemodel (= 6.0.2.2) - activesupport (= 6.0.2.2) - activesupport (6.0.2.2) + activemodel (6.0.3) + activesupport (= 6.0.3) + activerecord (6.0.3) + activemodel (= 6.0.3) + activesupport (= 6.0.3) + activesupport (6.0.3) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) - zeitwerk (~> 2.2) + zeitwerk (~> 2.2, >= 2.2.2) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) annotate (3.1.1) @@ -66,7 +66,7 @@ GEM barber (0.12.2) ember-source (>= 1.0, < 3.1) execjs (>= 1.2, < 3) - better_errors (2.7.0) + better_errors (2.7.1) coderay (>= 1.0.0) erubi (>= 1.0.0) rack (>= 0.9.0) @@ -151,9 +151,8 @@ GEM concurrent-ruby (~> 1.0) image_size (1.5.0) in_threads (1.5.4) - jaro_winkler (1.5.4) jmespath (1.4.0) - jquery-rails (4.3.5) + jquery-rails (4.4.0) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) @@ -184,19 +183,19 @@ GEM mini_mime (>= 0.1.1) maxminddb (0.1.22) memory_profiler (0.9.14) - message_bus (3.1.0) + message_bus (3.2.0) rack (>= 1.1.3) method_source (1.0.0) mini_mime (1.0.2) mini_portile2 (2.4.0) - mini_racer (0.2.10) + mini_racer (0.2.14) libv8 (> 7.3) mini_scheduler (0.12.2) sidekiq mini_sql (0.2.5) mini_suffix (0.3.0) ffi (~> 1.9) - minitest (5.14.0) + minitest (5.14.1) mocha (1.11.2) mock_redis (0.23.0) msgpack (1.3.3) @@ -241,7 +240,7 @@ GEM omniauth-twitter (1.4.0) omniauth-oauth (~> 1.1) rack - onebox (1.9.27.2) + onebox (1.9.28.1) addressable (~> 2.7.0) htmlentities (~> 4.3) multi_json (~> 1.11) @@ -262,12 +261,12 @@ GEM method_source (~> 1.0) pry-rails (0.3.9) pry (>= 0.10.4) - public_suffix (4.0.4) - puma (4.3.3) + public_suffix (4.0.5) + puma (4.3.5) nio4r (~> 2.0) r2 (0.2.7) - rack (2.0.8) - rack-mini-profiler (2.0.1) + rack (2.2.2) + rack-mini-profiler (2.0.2) rack (>= 1.2.0) rack-protection (2.0.8.1) rack @@ -278,12 +277,14 @@ GEM nokogiri (>= 1.6) rails-html-sanitizer (1.3.0) loofah (~> 2.3) - rails_multisite (2.1.1) + rails_failover (0.2.0) + redis (~> 4) + rails_multisite (2.1.2) activerecord (> 5.0, < 7) railties (> 5.0, < 7) - railties (6.0.2.2) - actionpack (= 6.0.2.2) - activesupport (= 6.0.2.2) + railties (6.0.3) + actionpack (= 6.0.3) + activesupport (= 6.0.3) method_source rake (>= 0.8.7) thor (>= 0.20.3, < 2.0) @@ -295,7 +296,7 @@ GEM rb-fsevent (0.10.4) rb-inotify (0.10.1) ffi (~> 1.0) - rbtrace (0.4.12) + rbtrace (0.4.13) ffi (>= 1.0.6) msgpack (>= 0.4.3) optimist (>= 3.0.0) @@ -319,7 +320,7 @@ GEM rspec-mocks (~> 3.9.0) rspec-core (3.9.2) rspec-support (~> 3.9.3) - rspec-expectations (3.9.1) + rspec-expectations (3.9.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.9.0) rspec-html-matchers (0.9.2) @@ -328,7 +329,7 @@ GEM rspec-mocks (3.9.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.9.0) - rspec-rails (4.0.0) + rspec-rails (4.0.1) actionpack (>= 4.2) activesupport (>= 4.2) railties (>= 4.2) @@ -342,20 +343,22 @@ GEM json-schema (~> 2.2) railties (>= 3.1, < 7.0) rtlit (0.0.5) - rubocop (0.82.0) - jaro_winkler (~> 1.5.1) + rubocop (0.84.0) parallel (~> 1.10) parser (>= 2.7.0.1) rainbow (>= 2.2.2, < 4.0) rexml + rubocop-ast (>= 0.0.3) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 2.0) + rubocop-ast (0.0.3) + parser (>= 2.7.0.1) rubocop-discourse (2.1.2) rubocop (>= 0.69.0) rubocop-rspec (>= 1.39.0) rubocop-rspec (1.39.0) rubocop (>= 0.68.1) - ruby-prof (1.3.2) + ruby-prof (1.4.1) ruby-progressbar (1.10.1) ruby-readability (0.7.0) guess_html_encoding (>= 0.0.4) @@ -428,14 +431,14 @@ PLATFORMS ruby DEPENDENCIES - actionmailer (= 6.0.2.2) - actionpack (= 6.0.2.2) - actionview (= 6.0.2.2) + actionmailer (= 6.0.3) + actionpack (= 6.0.3) + actionview (= 6.0.3) actionview_precompiler active_model_serializers (~> 0.8.3) - activemodel (= 6.0.2.2) - activerecord (= 6.0.2.2) - activesupport (= 6.0.2.2) + activemodel (= 6.0.3) + activerecord (= 6.0.3) + activesupport (= 6.0.3) addressable annotate aws-sdk-s3 @@ -508,11 +511,12 @@ DEPENDENCIES pry-rails puma r2 - rack (= 2.0.8) + rack (= 2.2.2) rack-mini-profiler rack-protection + rails_failover rails_multisite - railties (= 6.0.2.2) + railties (= 6.0.3) rake rb-fsevent rb-inotify (~> 0.9) @@ -528,9 +532,7 @@ DEPENDENCIES rspec-rails rswag-specs rtlit - rubocop rubocop-discourse - rubocop-rspec ruby-prof ruby-readability rubyzip diff --git a/app/assets/javascripts/admin/components/admin-backups-logs.js b/app/assets/javascripts/admin/components/admin-backups-logs.js index 1837409c58..76c8cff1ac 100644 --- a/app/assets/javascripts/admin/components/admin-backups-logs.js +++ b/app/assets/javascripts/admin/components/admin-backups-logs.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import discourseDebounce from "discourse/lib/debounce"; diff --git a/app/assets/javascripts/admin/components/admin-directory-toggle.js b/app/assets/javascripts/admin/components/admin-directory-toggle.js deleted file mode 100644 index 093f29826b..0000000000 --- a/app/assets/javascripts/admin/components/admin-directory-toggle.js +++ /dev/null @@ -1,30 +0,0 @@ -import Component from "@ember/component"; -import { iconHTML } from "discourse-common/lib/icon-library"; - -export default Component.extend({ - tagName: "th", - classNames: ["sortable"], - chevronIcon: null, - toggleProperties() { - if (this.order === this.field) { - this.set("ascending", this.ascending ? null : true); - } else { - this.setProperties({ order: this.field, ascending: null }); - } - }, - toggleChevron() { - if (this.order === this.field) { - let chevron = iconHTML(this.ascending ? "chevron-up" : "chevron-down"); - this.set("chevronIcon", `${chevron}`.htmlSafe()); - } else { - this.set("chevronIcon", null); - } - }, - click() { - this.toggleProperties(); - }, - didReceiveAttrs() { - this._super(...arguments); - this.toggleChevron(); - } -}); diff --git a/app/assets/javascripts/admin/components/admin-report-storage-stats.js b/app/assets/javascripts/admin/components/admin-report-storage-stats.js index 61629c626e..0be7256690 100644 --- a/app/assets/javascripts/admin/components/admin-report-storage-stats.js +++ b/app/assets/javascripts/admin/components/admin-report-storage-stats.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { alias } from "@ember/object/computed"; import Component from "@ember/component"; diff --git a/app/assets/javascripts/admin/components/admin-report.js b/app/assets/javascripts/admin/components/admin-report.js index 757a90a7db..b9ce9a6fdf 100644 --- a/app/assets/javascripts/admin/components/admin-report.js +++ b/app/assets/javascripts/admin/components/admin-report.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { makeArray } from "discourse-common/lib/helpers"; import { alias, or, and, equal, notEmpty, not } from "@ember/object/computed"; @@ -59,8 +60,6 @@ export default Component.extend({ forcedModes: null, showAllReportsLink: false, filters: null, - startDate: null, - endDate: null, showTrend: false, showHeader: true, showTitle: true, diff --git a/app/assets/javascripts/admin/components/admin-user-field-item.js b/app/assets/javascripts/admin/components/admin-user-field-item.js index a02404de98..d59abe4437 100644 --- a/app/assets/javascripts/admin/components/admin-user-field-item.js +++ b/app/assets/javascripts/admin/components/admin-user-field-item.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { isEmpty } from "@ember/utils"; import { empty } from "@ember/object/computed"; import { scheduleOnce } from "@ember/runloop"; diff --git a/app/assets/javascripts/admin/components/admin-watched-word.js b/app/assets/javascripts/admin/components/admin-watched-word.js index d4f5108c0f..28a1771246 100644 --- a/app/assets/javascripts/admin/components/admin-watched-word.js +++ b/app/assets/javascripts/admin/components/admin-watched-word.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Component from "@ember/component"; import { iconHTML } from "discourse-common/lib/icon-library"; diff --git a/app/assets/javascripts/admin/components/admin-web-hook-event-chooser.js b/app/assets/javascripts/admin/components/admin-web-hook-event-chooser.js index a38695c735..7e76d8f6bd 100644 --- a/app/assets/javascripts/admin/components/admin-web-hook-event-chooser.js +++ b/app/assets/javascripts/admin/components/admin-web-hook-event-chooser.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { alias } from "@ember/object/computed"; import Component from "@ember/component"; diff --git a/app/assets/javascripts/admin/components/admin-web-hook-event.js b/app/assets/javascripts/admin/components/admin-web-hook-event.js index 365e22aa67..11bb2b4024 100644 --- a/app/assets/javascripts/admin/components/admin-web-hook-event.js +++ b/app/assets/javascripts/admin/components/admin-web-hook-event.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import Component from "@ember/component"; import { ajax } from "discourse/lib/ajax"; diff --git a/app/assets/javascripts/admin/components/admin-web-hook-status.js b/app/assets/javascripts/admin/components/admin-web-hook-status.js index 0c24edc9d6..6c1591bc4c 100644 --- a/app/assets/javascripts/admin/components/admin-web-hook-status.js +++ b/app/assets/javascripts/admin/components/admin-web-hook-status.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import Component from "@ember/component"; import { iconHTML } from "discourse-common/lib/icon-library"; diff --git a/app/assets/javascripts/admin/components/email-styles-editor.js b/app/assets/javascripts/admin/components/email-styles-editor.js index ef5cdb077e..93d4df6b7d 100644 --- a/app/assets/javascripts/admin/components/email-styles-editor.js +++ b/app/assets/javascripts/admin/components/email-styles-editor.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { reads } from "@ember/object/computed"; import Component from "@ember/component"; diff --git a/app/assets/javascripts/admin/components/embeddable-host.js b/app/assets/javascripts/admin/components/embeddable-host.js index 1d853b8986..cc96741fed 100644 --- a/app/assets/javascripts/admin/components/embeddable-host.js +++ b/app/assets/javascripts/admin/components/embeddable-host.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { isEmpty } from "@ember/utils"; import { or } from "@ember/object/computed"; diff --git a/app/assets/javascripts/admin/components/inline-edit-checkbox.js b/app/assets/javascripts/admin/components/inline-edit-checkbox.js index 2eb2c3ee5a..2d681202b9 100644 --- a/app/assets/javascripts/admin/components/inline-edit-checkbox.js +++ b/app/assets/javascripts/admin/components/inline-edit-checkbox.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Component from "@ember/component"; import discourseComputed, { observes } from "discourse-common/utils/decorators"; diff --git a/app/assets/javascripts/admin/components/ip-lookup.js b/app/assets/javascripts/admin/components/ip-lookup.js index b27191d617..d004555513 100644 --- a/app/assets/javascripts/admin/components/ip-lookup.js +++ b/app/assets/javascripts/admin/components/ip-lookup.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import EmberObject from "@ember/object"; import { later } from "@ember/runloop"; import Component from "@ember/component"; diff --git a/app/assets/javascripts/admin/components/penalty-post-action.js b/app/assets/javascripts/admin/components/penalty-post-action.js index 916546452c..aeea3406c8 100644 --- a/app/assets/javascripts/admin/components/penalty-post-action.js +++ b/app/assets/javascripts/admin/components/penalty-post-action.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { equal } from "@ember/object/computed"; import Component from "@ember/component"; diff --git a/app/assets/javascripts/admin/components/permalink-form.js b/app/assets/javascripts/admin/components/permalink-form.js index e1b62a11df..81e9346d6f 100644 --- a/app/assets/javascripts/admin/components/permalink-form.js +++ b/app/assets/javascripts/admin/components/permalink-form.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import discourseComputed from "discourse-common/utils/decorators"; @@ -16,6 +17,7 @@ export default Component.extend({ { id: "topic_id", name: I18n.t("admin.permalink.topic_id") }, { id: "post_id", name: I18n.t("admin.permalink.post_id") }, { id: "category_id", name: I18n.t("admin.permalink.category_id") }, + { id: "tag_name", name: I18n.t("admin.permalink.tag_name") }, { id: "external_url", name: I18n.t("admin.permalink.external_url") } ]; }, diff --git a/app/assets/javascripts/admin/components/resumable-upload.js b/app/assets/javascripts/admin/components/resumable-upload.js index 7425f174fe..ed95ea68be 100644 --- a/app/assets/javascripts/admin/components/resumable-upload.js +++ b/app/assets/javascripts/admin/components/resumable-upload.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { later, schedule } from "@ember/runloop"; import Component from "@ember/component"; import { iconHTML } from "discourse-common/lib/icon-library"; diff --git a/app/assets/javascripts/admin/components/screened-ip-address-form.js b/app/assets/javascripts/admin/components/screened-ip-address-form.js index 48b92641b4..1046f4c210 100644 --- a/app/assets/javascripts/admin/components/screened-ip-address-form.js +++ b/app/assets/javascripts/admin/components/screened-ip-address-form.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { schedule } from "@ember/runloop"; import Component from "@ember/component"; diff --git a/app/assets/javascripts/admin/components/secret-value-list.js b/app/assets/javascripts/admin/components/secret-value-list.js index ea4ecf792c..399ec5c6e7 100644 --- a/app/assets/javascripts/admin/components/secret-value-list.js +++ b/app/assets/javascripts/admin/components/secret-value-list.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { isEmpty } from "@ember/utils"; import Component from "@ember/component"; import { on } from "discourse-common/utils/decorators"; diff --git a/app/assets/javascripts/admin/components/tags-uploader.js b/app/assets/javascripts/admin/components/tags-uploader.js index 88f4afc8d9..7530f29e21 100644 --- a/app/assets/javascripts/admin/components/tags-uploader.js +++ b/app/assets/javascripts/admin/components/tags-uploader.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { alias } from "@ember/object/computed"; import Component from "@ember/component"; import UploadMixin from "discourse/mixins/upload"; diff --git a/app/assets/javascripts/admin/components/watched-word-form.js b/app/assets/javascripts/admin/components/watched-word-form.js index fff5b86e26..96ddbffd7c 100644 --- a/app/assets/javascripts/admin/components/watched-word-form.js +++ b/app/assets/javascripts/admin/components/watched-word-form.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { isEmpty } from "@ember/utils"; import { schedule } from "@ember/runloop"; import Component from "@ember/component"; diff --git a/app/assets/javascripts/admin/components/watched-word-uploader.js b/app/assets/javascripts/admin/components/watched-word-uploader.js index 05dc41c207..dceecea228 100644 --- a/app/assets/javascripts/admin/components/watched-word-uploader.js +++ b/app/assets/javascripts/admin/components/watched-word-uploader.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { alias } from "@ember/object/computed"; import Component from "@ember/component"; diff --git a/app/assets/javascripts/admin/controllers/admin-api-keys-new.js b/app/assets/javascripts/admin/controllers/admin-api-keys-new.js index 9384e79557..eaddcfcd82 100644 --- a/app/assets/javascripts/admin/controllers/admin-api-keys-new.js +++ b/app/assets/javascripts/admin/controllers/admin-api-keys-new.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { isBlank } from "@ember/utils"; import Controller from "@ember/controller"; import discourseComputed from "discourse-common/utils/decorators"; diff --git a/app/assets/javascripts/admin/controllers/admin-backups-index.js b/app/assets/javascripts/admin/controllers/admin-backups-index.js index 45f25dd617..c3b43450b1 100644 --- a/app/assets/javascripts/admin/controllers/admin-backups-index.js +++ b/app/assets/javascripts/admin/controllers/admin-backups-index.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { alias, equal } from "@ember/object/computed"; import Controller, { inject as controller } from "@ember/controller"; import { ajax } from "discourse/lib/ajax"; diff --git a/app/assets/javascripts/admin/controllers/admin-badges-award.js b/app/assets/javascripts/admin/controllers/admin-badges-award.js index ef141ccac1..d7945b15c7 100644 --- a/app/assets/javascripts/admin/controllers/admin-badges-award.js +++ b/app/assets/javascripts/admin/controllers/admin-badges-award.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Controller from "@ember/controller"; import { ajax } from "discourse/lib/ajax"; import { popupAjaxError } from "discourse/lib/ajax-error"; diff --git a/app/assets/javascripts/admin/controllers/admin-badges-show.js b/app/assets/javascripts/admin/controllers/admin-badges-show.js index a860d2f992..6a44fe4ae4 100644 --- a/app/assets/javascripts/admin/controllers/admin-badges-show.js +++ b/app/assets/javascripts/admin/controllers/admin-badges-show.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed, { observes } from "discourse-common/utils/decorators"; import { reads } from "@ember/object/computed"; import Controller, { inject as controller } from "@ember/controller"; diff --git a/app/assets/javascripts/admin/controllers/admin-customize-colors-show.js b/app/assets/javascripts/admin/controllers/admin-customize-colors-show.js index a27022390f..61f6e5d6e7 100644 --- a/app/assets/javascripts/admin/controllers/admin-customize-colors-show.js +++ b/app/assets/javascripts/admin/controllers/admin-customize-colors-show.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { later } from "@ember/runloop"; import Controller from "@ember/controller"; diff --git a/app/assets/javascripts/admin/controllers/admin-customize-colors.js b/app/assets/javascripts/admin/controllers/admin-customize-colors.js index e2ff119aa4..062121fc47 100644 --- a/app/assets/javascripts/admin/controllers/admin-customize-colors.js +++ b/app/assets/javascripts/admin/controllers/admin-customize-colors.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import EmberObject from "@ember/object"; import Controller from "@ember/controller"; import showModal from "discourse/lib/show-modal"; diff --git a/app/assets/javascripts/admin/controllers/admin-customize-email-style-edit.js b/app/assets/javascripts/admin/controllers/admin-customize-email-style-edit.js index d534792b00..0daf5c7973 100644 --- a/app/assets/javascripts/admin/controllers/admin-customize-email-style-edit.js +++ b/app/assets/javascripts/admin/controllers/admin-customize-email-style-edit.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import Controller from "@ember/controller"; diff --git a/app/assets/javascripts/admin/controllers/admin-customize-email-templates-edit.js b/app/assets/javascripts/admin/controllers/admin-customize-email-templates-edit.js index 3617edca75..f6e19c6368 100644 --- a/app/assets/javascripts/admin/controllers/admin-customize-email-templates-edit.js +++ b/app/assets/javascripts/admin/controllers/admin-customize-email-templates-edit.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import Controller from "@ember/controller"; import { popupAjaxError } from "discourse/lib/ajax-error"; diff --git a/app/assets/javascripts/admin/controllers/admin-customize-themes-edit.js b/app/assets/javascripts/admin/controllers/admin-customize-themes-edit.js index c3c0f4fc99..a606505692 100644 --- a/app/assets/javascripts/admin/controllers/admin-customize-themes-edit.js +++ b/app/assets/javascripts/admin/controllers/admin-customize-themes-edit.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Controller from "@ember/controller"; import { url } from "discourse/lib/computed"; import discourseComputed from "discourse-common/utils/decorators"; diff --git a/app/assets/javascripts/admin/controllers/admin-customize-themes-show.js b/app/assets/javascripts/admin/controllers/admin-customize-themes-show.js index 5440c4260a..2c5ad32a18 100644 --- a/app/assets/javascripts/admin/controllers/admin-customize-themes-show.js +++ b/app/assets/javascripts/admin/controllers/admin-customize-themes-show.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { makeArray } from "discourse-common/lib/helpers"; import { empty, diff --git a/app/assets/javascripts/admin/controllers/admin-dashboard-general.js b/app/assets/javascripts/admin/controllers/admin-dashboard-general.js index 5f2ea86819..07a195b566 100644 --- a/app/assets/javascripts/admin/controllers/admin-dashboard-general.js +++ b/app/assets/javascripts/admin/controllers/admin-dashboard-general.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { makeArray } from "discourse-common/lib/helpers"; import { inject } from "@ember/controller"; diff --git a/app/assets/javascripts/admin/controllers/admin-email-index.js b/app/assets/javascripts/admin/controllers/admin-email-index.js index 3433f6f55f..8fad5ff034 100644 --- a/app/assets/javascripts/admin/controllers/admin-email-index.js +++ b/app/assets/javascripts/admin/controllers/admin-email-index.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { empty } from "@ember/object/computed"; import Controller from "@ember/controller"; import { ajax } from "discourse/lib/ajax"; diff --git a/app/assets/javascripts/admin/controllers/admin-emojis.js b/app/assets/javascripts/admin/controllers/admin-emojis.js index 1a49670703..96b9e1ff8e 100644 --- a/app/assets/javascripts/admin/controllers/admin-emojis.js +++ b/app/assets/javascripts/admin/controllers/admin-emojis.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { sort } from "@ember/object/computed"; import EmberObject, { action, computed } from "@ember/object"; import Controller from "@ember/controller"; diff --git a/app/assets/javascripts/admin/controllers/admin-logs-screened-ip-addresses.js b/app/assets/javascripts/admin/controllers/admin-logs-screened-ip-addresses.js index 789f070db1..73a780e278 100644 --- a/app/assets/javascripts/admin/controllers/admin-logs-screened-ip-addresses.js +++ b/app/assets/javascripts/admin/controllers/admin-logs-screened-ip-addresses.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Controller from "@ember/controller"; import discourseDebounce from "discourse/lib/debounce"; import { outputExportResult } from "discourse/lib/export-result"; diff --git a/app/assets/javascripts/admin/controllers/admin-logs-staff-action-logs.js b/app/assets/javascripts/admin/controllers/admin-logs-staff-action-logs.js index 7ef84b45ad..059267ca40 100644 --- a/app/assets/javascripts/admin/controllers/admin-logs-staff-action-logs.js +++ b/app/assets/javascripts/admin/controllers/admin-logs-staff-action-logs.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { gt } from "@ember/object/computed"; import EmberObject from "@ember/object"; import { scheduleOnce } from "@ember/runloop"; diff --git a/app/assets/javascripts/admin/controllers/admin-permalinks.js b/app/assets/javascripts/admin/controllers/admin-permalinks.js index 6f0842049c..177bb4148d 100644 --- a/app/assets/javascripts/admin/controllers/admin-permalinks.js +++ b/app/assets/javascripts/admin/controllers/admin-permalinks.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Controller from "@ember/controller"; import discourseDebounce from "discourse/lib/debounce"; import Permalink from "admin/models/permalink"; diff --git a/app/assets/javascripts/admin/controllers/admin-search-logs-index.js b/app/assets/javascripts/admin/controllers/admin-search-logs-index.js index 397b4c9b9e..ab58efbfcb 100644 --- a/app/assets/javascripts/admin/controllers/admin-search-logs-index.js +++ b/app/assets/javascripts/admin/controllers/admin-search-logs-index.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Controller from "@ember/controller"; export const DEFAULT_PERIOD = "yearly"; diff --git a/app/assets/javascripts/admin/controllers/admin-search-logs-term.js b/app/assets/javascripts/admin/controllers/admin-search-logs-term.js index 66def62c97..cd493e35bc 100644 --- a/app/assets/javascripts/admin/controllers/admin-search-logs-term.js +++ b/app/assets/javascripts/admin/controllers/admin-search-logs-term.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Controller from "@ember/controller"; import { DEFAULT_PERIOD } from "admin/controllers/admin-search-logs-index"; diff --git a/app/assets/javascripts/admin/controllers/admin-site-settings.js b/app/assets/javascripts/admin/controllers/admin-site-settings.js index ac84553a71..04826ca133 100644 --- a/app/assets/javascripts/admin/controllers/admin-site-settings.js +++ b/app/assets/javascripts/admin/controllers/admin-site-settings.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { isEmpty } from "@ember/utils"; import { alias } from "@ember/object/computed"; import Controller from "@ember/controller"; @@ -15,12 +16,32 @@ export default Controller.extend({ // If we have no content, don't bother filtering anything if (!!isEmpty(this.allSiteSettings)) return; - let filter; + let filter, pluginFilter; if (this.filter) { - filter = this.filter.toLowerCase().trim(); + filter = this.filter + .toLowerCase() + .split(" ") + .filter(word => { + if (word.length === 0) { + return false; + } + + if (word.startsWith("plugin:")) { + pluginFilter = word.substr("plugin:".length).trim(); + return false; + } + + return true; + }) + .join(" ") + .trim(); } - if ((!filter || 0 === filter.length) && !this.onlyOverridden) { + if ( + (!filter || 0 === filter.length) && + (!pluginFilter || 0 === pluginFilter.length) && + !this.onlyOverridden + ) { this.set("visibleSiteSettings", this.allSiteSettings); if (this.categoryNameKey === "all_results") { this.transitionToRoute("adminSiteSettings"); @@ -39,6 +60,7 @@ export default Controller.extend({ this.allSiteSettings.forEach(settingsCategory => { const siteSettings = settingsCategory.siteSettings.filter(item => { if (this.onlyOverridden && !item.get("overridden")) return false; + if (pluginFilter && item.plugin !== pluginFilter) return false; if (filter) { const setting = item.get("setting").toLowerCase(); return ( diff --git a/app/assets/javascripts/admin/controllers/admin-site-text-edit.js b/app/assets/javascripts/admin/controllers/admin-site-text-edit.js index d24a172910..417c823824 100644 --- a/app/assets/javascripts/admin/controllers/admin-site-text-edit.js +++ b/app/assets/javascripts/admin/controllers/admin-site-text-edit.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import Controller from "@ember/controller"; import { popupAjaxError } from "discourse/lib/ajax-error"; diff --git a/app/assets/javascripts/admin/controllers/admin-user-badges.js b/app/assets/javascripts/admin/controllers/admin-user-badges.js index a42bf58ca5..63e7edca25 100644 --- a/app/assets/javascripts/admin/controllers/admin-user-badges.js +++ b/app/assets/javascripts/admin/controllers/admin-user-badges.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { alias, sort } from "@ember/object/computed"; import { next } from "@ember/runloop"; diff --git a/app/assets/javascripts/admin/controllers/admin-user-fields.js b/app/assets/javascripts/admin/controllers/admin-user-fields.js index b81b08f559..61e916748b 100644 --- a/app/assets/javascripts/admin/controllers/admin-user-fields.js +++ b/app/assets/javascripts/admin/controllers/admin-user-fields.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { gte, sort } from "@ember/object/computed"; import Controller from "@ember/controller"; import { popupAjaxError } from "discourse/lib/ajax-error"; diff --git a/app/assets/javascripts/admin/controllers/admin-user-index.js b/app/assets/javascripts/admin/controllers/admin-user-index.js index 9076e56654..de6545056f 100644 --- a/app/assets/javascripts/admin/controllers/admin-user-index.js +++ b/app/assets/javascripts/admin/controllers/admin-user-index.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { notEmpty, and } from "@ember/object/computed"; import { inject as service } from "@ember/service"; import Controller from "@ember/controller"; diff --git a/app/assets/javascripts/admin/controllers/admin-users-list-show.js b/app/assets/javascripts/admin/controllers/admin-users-list-show.js index 8b7adb194c..9f82545dac 100644 --- a/app/assets/javascripts/admin/controllers/admin-users-list-show.js +++ b/app/assets/javascripts/admin/controllers/admin-users-list-show.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed, { observes } from "discourse-common/utils/decorators"; import Controller from "@ember/controller"; import discourseDebounce from "discourse/lib/debounce"; @@ -10,7 +11,7 @@ export default Controller.extend(CanCheckEmails, { model: null, query: null, order: null, - ascending: null, + asc: null, showEmails: false, refreshing: false, listFilter: null, @@ -53,7 +54,7 @@ export default Controller.extend(CanCheckEmails, { filter: this.listFilter, show_emails: this.showEmails, order: this.order, - ascending: this.ascending, + asc: this.asc, page: this._page }) .then(result => { diff --git a/app/assets/javascripts/admin/controllers/admin-watched-words-action.js b/app/assets/javascripts/admin/controllers/admin-watched-words-action.js index cf5815da73..1a8070569f 100644 --- a/app/assets/javascripts/admin/controllers/admin-watched-words-action.js +++ b/app/assets/javascripts/admin/controllers/admin-watched-words-action.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { or } from "@ember/object/computed"; import { schedule } from "@ember/runloop"; diff --git a/app/assets/javascripts/admin/controllers/admin-web-hooks-show.js b/app/assets/javascripts/admin/controllers/admin-web-hooks-show.js index 4332f52d9c..031ad8ee8b 100644 --- a/app/assets/javascripts/admin/controllers/admin-web-hooks-show.js +++ b/app/assets/javascripts/admin/controllers/admin-web-hooks-show.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { isEmpty } from "@ember/utils"; import { alias } from "@ember/object/computed"; diff --git a/app/assets/javascripts/admin/controllers/admin-web-hooks.js b/app/assets/javascripts/admin/controllers/admin-web-hooks.js index f9f401e330..ec025662ef 100644 --- a/app/assets/javascripts/admin/controllers/admin-web-hooks.js +++ b/app/assets/javascripts/admin/controllers/admin-web-hooks.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Controller from "@ember/controller"; import { popupAjaxError } from "discourse/lib/ajax-error"; diff --git a/app/assets/javascripts/admin/controllers/modals/admin-add-upload.js b/app/assets/javascripts/admin/controllers/modals/admin-add-upload.js index 6fb2859618..da260b409e 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-add-upload.js +++ b/app/assets/javascripts/admin/controllers/modals/admin-add-upload.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { isEmpty } from "@ember/utils"; import { and, not } from "@ember/object/computed"; import Controller, { inject as controller } from "@ember/controller"; diff --git a/app/assets/javascripts/admin/controllers/modals/admin-badge-preview.js b/app/assets/javascripts/admin/controllers/modals/admin-badge-preview.js index c5baa8eb9a..531d3ea665 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-badge-preview.js +++ b/app/assets/javascripts/admin/controllers/modals/admin-badge-preview.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { alias, map } from "@ember/object/computed"; import Controller from "@ember/controller"; import discourseComputed from "discourse-common/utils/decorators"; diff --git a/app/assets/javascripts/admin/controllers/modals/admin-edit-badge-groupings.js b/app/assets/javascripts/admin/controllers/modals/admin-edit-badge-groupings.js index f1d1274abd..1372f16ca9 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-edit-badge-groupings.js +++ b/app/assets/javascripts/admin/controllers/modals/admin-edit-badge-groupings.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Controller from "@ember/controller"; import { A } from "@ember/array"; import { ajax } from "discourse/lib/ajax"; diff --git a/app/assets/javascripts/admin/controllers/modals/admin-install-theme.js b/app/assets/javascripts/admin/controllers/modals/admin-install-theme.js index 16cf2034d5..7b74bc9964 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-install-theme.js +++ b/app/assets/javascripts/admin/controllers/modals/admin-install-theme.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { equal, match, alias } from "@ember/object/computed"; import Controller, { inject as controller } from "@ember/controller"; import ModalFunctionality from "discourse/mixins/modal-functionality"; diff --git a/app/assets/javascripts/admin/controllers/modals/admin-merge-users-confirmation.js b/app/assets/javascripts/admin/controllers/modals/admin-merge-users-confirmation.js index 91dbe7d072..08ac66070c 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-merge-users-confirmation.js +++ b/app/assets/javascripts/admin/controllers/modals/admin-merge-users-confirmation.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Controller, { inject as controller } from "@ember/controller"; import ModalFunctionality from "discourse/mixins/modal-functionality"; import discourseComputed from "discourse-common/utils/decorators"; diff --git a/app/assets/javascripts/admin/controllers/modals/admin-reseed.js b/app/assets/javascripts/admin/controllers/modals/admin-reseed.js index 326a3a66a7..44bf29a207 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-reseed.js +++ b/app/assets/javascripts/admin/controllers/modals/admin-reseed.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Controller from "@ember/controller"; import ModalFunctionality from "discourse/mixins/modal-functionality"; import { ajax } from "discourse/lib/ajax"; diff --git a/app/assets/javascripts/admin/helpers/human-size.js b/app/assets/javascripts/admin/helpers/human-size.js index cb022e64e1..fe543937f1 100644 --- a/app/assets/javascripts/admin/helpers/human-size.js +++ b/app/assets/javascripts/admin/helpers/human-size.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { htmlHelper } from "discourse-common/lib/helpers"; export default htmlHelper(size => I18n.toHumanSize(size)); diff --git a/app/assets/javascripts/admin/helpers/post-action-title.js b/app/assets/javascripts/admin/helpers/post-action-title.js index 657aee2e9b..53b5922ae5 100644 --- a/app/assets/javascripts/admin/helpers/post-action-title.js +++ b/app/assets/javascripts/admin/helpers/post-action-title.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Helper from "@ember/component/helper"; function postActionTitle([id, nameKey]) { diff --git a/app/assets/javascripts/admin/mixins/penalty-controller.js b/app/assets/javascripts/admin/mixins/penalty-controller.js index 46ba124e18..73349e1067 100644 --- a/app/assets/javascripts/admin/mixins/penalty-controller.js +++ b/app/assets/javascripts/admin/mixins/penalty-controller.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import ModalFunctionality from "discourse/mixins/modal-functionality"; import { popupAjaxError } from "discourse/lib/ajax-error"; import Mixin from "@ember/object/mixin"; diff --git a/app/assets/javascripts/admin/mixins/setting-component.js b/app/assets/javascripts/admin/mixins/setting-component.js index e7afc119f2..83dcc31e65 100644 --- a/app/assets/javascripts/admin/mixins/setting-component.js +++ b/app/assets/javascripts/admin/mixins/setting-component.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { warn } from "@ember/debug"; import discourseComputed from "discourse-common/utils/decorators"; import { alias, oneWay } from "@ember/object/computed"; diff --git a/app/assets/javascripts/admin/mixins/setting-object.js b/app/assets/javascripts/admin/mixins/setting-object.js index 0d97e79873..bfacbedc8e 100644 --- a/app/assets/javascripts/admin/mixins/setting-object.js +++ b/app/assets/javascripts/admin/mixins/setting-object.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { computed } from "@ember/object"; import Mixin from "@ember/object/mixin"; diff --git a/app/assets/javascripts/admin/models/admin-user.js b/app/assets/javascripts/admin/models/admin-user.js index 1ddb7a52ff..9977fa8dd4 100644 --- a/app/assets/javascripts/admin/models/admin-user.js +++ b/app/assets/javascripts/admin/models/admin-user.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { filter, or, gt, lt, not } from "@ember/object/computed"; import { iconHTML } from "discourse-common/lib/icon-library"; @@ -76,12 +77,6 @@ const AdminUser = User.extend({ }); }, - revokeApiKey() { - return ajax(`/admin/users/${this.id}/revoke_api_key`, { - type: "DELETE" - }).then(() => this.set("api_key", null)); - }, - deleteAllPosts() { let deletedPosts = 0; const user = this; diff --git a/app/assets/javascripts/admin/models/backup.js b/app/assets/javascripts/admin/models/backup.js index 882173300a..2c41e1ef9d 100644 --- a/app/assets/javascripts/admin/models/backup.js +++ b/app/assets/javascripts/admin/models/backup.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { ajax } from "discourse/lib/ajax"; import { extractError } from "discourse/lib/ajax-error"; import EmberObject from "@ember/object"; diff --git a/app/assets/javascripts/admin/models/color-scheme-color.js b/app/assets/javascripts/admin/models/color-scheme-color.js index f1aa235a4b..e55fa258f8 100644 --- a/app/assets/javascripts/admin/models/color-scheme-color.js +++ b/app/assets/javascripts/admin/models/color-scheme-color.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed, { observes, on diff --git a/app/assets/javascripts/admin/models/color-scheme.js b/app/assets/javascripts/admin/models/color-scheme.js index ee60097b74..5fe6337f0d 100644 --- a/app/assets/javascripts/admin/models/color-scheme.js +++ b/app/assets/javascripts/admin/models/color-scheme.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { A } from "@ember/array"; import ArrayProxy from "@ember/array/proxy"; import discourseComputed from "discourse-common/utils/decorators"; diff --git a/app/assets/javascripts/admin/models/flag-type.js b/app/assets/javascripts/admin/models/flag-type.js index 93fb2eacc9..1079110045 100644 --- a/app/assets/javascripts/admin/models/flag-type.js +++ b/app/assets/javascripts/admin/models/flag-type.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import RestModel from "discourse/models/rest"; diff --git a/app/assets/javascripts/admin/models/report.js b/app/assets/javascripts/admin/models/report.js index d0152c1a9e..2e0b448887 100644 --- a/app/assets/javascripts/admin/models/report.js +++ b/app/assets/javascripts/admin/models/report.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { makeArray } from "discourse-common/lib/helpers"; import { isEmpty } from "@ember/utils"; @@ -346,7 +347,7 @@ const Report = EmberObject.extend({ return { value: username, - formatedValue: username ? formatedValue(username) : "—" + formatedValue: username ? formatedValue() : "—" }; }, diff --git a/app/assets/javascripts/admin/models/screened-email.js b/app/assets/javascripts/admin/models/screened-email.js index 4ef3217edf..df2fa40ff9 100644 --- a/app/assets/javascripts/admin/models/screened-email.js +++ b/app/assets/javascripts/admin/models/screened-email.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { ajax } from "discourse/lib/ajax"; import EmberObject from "@ember/object"; diff --git a/app/assets/javascripts/admin/models/screened-ip-address.js b/app/assets/javascripts/admin/models/screened-ip-address.js index bfac17d86c..585acb9b79 100644 --- a/app/assets/javascripts/admin/models/screened-ip-address.js +++ b/app/assets/javascripts/admin/models/screened-ip-address.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { equal } from "@ember/object/computed"; import { ajax } from "discourse/lib/ajax"; diff --git a/app/assets/javascripts/admin/models/screened-url.js b/app/assets/javascripts/admin/models/screened-url.js index 31ea850778..4cde3d1261 100644 --- a/app/assets/javascripts/admin/models/screened-url.js +++ b/app/assets/javascripts/admin/models/screened-url.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { ajax } from "discourse/lib/ajax"; import EmberObject from "@ember/object"; diff --git a/app/assets/javascripts/admin/models/site-setting.js b/app/assets/javascripts/admin/models/site-setting.js index 4edc89a1b9..01e34566f5 100644 --- a/app/assets/javascripts/admin/models/site-setting.js +++ b/app/assets/javascripts/admin/models/site-setting.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { ajax } from "discourse/lib/ajax"; import Setting from "admin/mixins/setting-object"; import EmberObject from "@ember/object"; diff --git a/app/assets/javascripts/admin/models/staff-action-log.js b/app/assets/javascripts/admin/models/staff-action-log.js index 45330b13fc..a077d054c0 100644 --- a/app/assets/javascripts/admin/models/staff-action-log.js +++ b/app/assets/javascripts/admin/models/staff-action-log.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import discourseComputed from "discourse-common/utils/decorators"; import { ajax } from "discourse/lib/ajax"; import AdminUser from "admin/models/admin-user"; diff --git a/app/assets/javascripts/admin/models/theme.js b/app/assets/javascripts/admin/models/theme.js index e63e9e1cce..0b96660f99 100644 --- a/app/assets/javascripts/admin/models/theme.js +++ b/app/assets/javascripts/admin/models/theme.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { get } from "@ember/object"; import { isBlank, isEmpty } from "@ember/utils"; import { or, gt } from "@ember/object/computed"; diff --git a/app/assets/javascripts/admin/models/tl3-requirements.js b/app/assets/javascripts/admin/models/tl3-requirements.js index 424aea4f58..6331333de7 100644 --- a/app/assets/javascripts/admin/models/tl3-requirements.js +++ b/app/assets/javascripts/admin/models/tl3-requirements.js @@ -12,6 +12,11 @@ export default EmberObject.extend({ return Math.round((minDaysVisited * 100) / timePeriod); }, + @discourseComputed("num_topics_replied_to", "min_topics_replied_to") + capped_topics_replied_to(numReplied, minReplied) { + return numReplied > minReplied; + }, + @discourseComputed( "days_visited", "min_days_visited", diff --git a/app/assets/javascripts/admin/models/watched-word.js b/app/assets/javascripts/admin/models/watched-word.js index dac78affe1..6713a8a605 100644 --- a/app/assets/javascripts/admin/models/watched-word.js +++ b/app/assets/javascripts/admin/models/watched-word.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { ajax } from "discourse/lib/ajax"; import EmberObject from "@ember/object"; diff --git a/app/assets/javascripts/admin/routes/admin-backups-logs.js b/app/assets/javascripts/admin/routes/admin-backups-logs.js index 3d24756a4a..2c7e16eed7 100644 --- a/app/assets/javascripts/admin/routes/admin-backups-logs.js +++ b/app/assets/javascripts/admin/routes/admin-backups-logs.js @@ -1,6 +1,6 @@ import EmberObject from "@ember/object"; import Route from "@ember/routing/route"; -import PreloadStore from "preload-store"; +import PreloadStore from "discourse/lib/preload-store"; export default Route.extend({ // since the logs are pushed via the message bus diff --git a/app/assets/javascripts/admin/routes/admin-backups.js b/app/assets/javascripts/admin/routes/admin-backups.js index 6bc42d725f..3d517acbf1 100644 --- a/app/assets/javascripts/admin/routes/admin-backups.js +++ b/app/assets/javascripts/admin/routes/admin-backups.js @@ -1,10 +1,11 @@ +import I18n from "I18n"; import EmberObject from "@ember/object"; import DiscourseRoute from "discourse/routes/discourse"; import { ajax } from "discourse/lib/ajax"; import showModal from "discourse/lib/show-modal"; import BackupStatus from "admin/models/backup-status"; import Backup from "admin/models/backup"; -import PreloadStore from "preload-store"; +import PreloadStore from "discourse/lib/preload-store"; import User from "discourse/models/user"; const LOG_CHANNEL = "/admin/backups/logs"; diff --git a/app/assets/javascripts/admin/routes/admin-badges-show.js b/app/assets/javascripts/admin/routes/admin-badges-show.js index 4a29cfae0a..7a74db7161 100644 --- a/app/assets/javascripts/admin/routes/admin-badges-show.js +++ b/app/assets/javascripts/admin/routes/admin-badges-show.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import { get } from "@ember/object"; import Route from "@ember/routing/route"; import { ajax } from "discourse/lib/ajax"; diff --git a/app/assets/javascripts/admin/routes/admin-badges.js b/app/assets/javascripts/admin/routes/admin-badges.js index 0dac4bbaa2..ab6de98504 100644 --- a/app/assets/javascripts/admin/routes/admin-badges.js +++ b/app/assets/javascripts/admin/routes/admin-badges.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import DiscourseRoute from "discourse/routes/discourse"; import { ajax } from "discourse/lib/ajax"; import Badge from "discourse/models/badge"; diff --git a/app/assets/javascripts/admin/routes/admin-customize-email-style-edit.js b/app/assets/javascripts/admin/routes/admin-customize-email-style-edit.js index 8dcc18f0d9..d3a2b035af 100644 --- a/app/assets/javascripts/admin/routes/admin-customize-email-style-edit.js +++ b/app/assets/javascripts/admin/routes/admin-customize-email-style-edit.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Route from "@ember/routing/route"; export default Route.extend({ model(params) { diff --git a/app/assets/javascripts/admin/routes/admin-customize-themes-edit.js b/app/assets/javascripts/admin/routes/admin-customize-themes-edit.js index 62a70f0d7c..5cb695ddcd 100644 --- a/app/assets/javascripts/admin/routes/admin-customize-themes-edit.js +++ b/app/assets/javascripts/admin/routes/admin-customize-themes-edit.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Route from "@ember/routing/route"; export default Route.extend({ model(params) { diff --git a/app/assets/javascripts/admin/routes/admin-customize-themes-show.js b/app/assets/javascripts/admin/routes/admin-customize-themes-show.js index 5b9ce25169..ee175a9df8 100644 --- a/app/assets/javascripts/admin/routes/admin-customize-themes-show.js +++ b/app/assets/javascripts/admin/routes/admin-customize-themes-show.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import Route from "@ember/routing/route"; import { scrollTop } from "discourse/mixins/scroll-top"; import { THEMES, COMPONENTS } from "admin/models/theme"; diff --git a/app/assets/javascripts/admin/routes/admin-plugins.js b/app/assets/javascripts/admin/routes/admin-plugins.js index c4af286faf..261610a97e 100644 --- a/app/assets/javascripts/admin/routes/admin-plugins.js +++ b/app/assets/javascripts/admin/routes/admin-plugins.js @@ -9,18 +9,12 @@ export default Route.extend({ const controller = this.controllerFor("adminSiteSettings"); this.transitionTo("adminSiteSettingsCategory", "plugins").then(() => { if (plugin) { - const siteSettingFilter = plugin.get("enabled_setting_filter"); - const match = /^(.*)_enabled/.exec(plugin.get("enabled_setting")); - const filter = siteSettingFilter || match[1]; - - if (filter) { - // filterContent() is normally on a debounce from typing. - // Because we don't want the default of "All Results", we tell it - // to skip the next debounce. - controller.set("filter", filter); - controller.set("_skipBounce", true); - controller.filterContentNow("plugins"); - } + // filterContent() is normally on a debounce from typing. + // Because we don't want the default of "All Results", we tell it + // to skip the next debounce. + controller.set("filter", `plugin:${plugin.id}`); + controller.set("_skipBounce", true); + controller.filterContentNow("plugins"); } }); } diff --git a/app/assets/javascripts/admin/routes/admin-site-settings-category.js b/app/assets/javascripts/admin/routes/admin-site-settings-category.js index b5a2f810b2..e8a9b853d4 100644 --- a/app/assets/javascripts/admin/routes/admin-site-settings-category.js +++ b/app/assets/javascripts/admin/routes/admin-site-settings-category.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import EmberObject from "@ember/object"; import DiscourseRoute from "discourse/routes/discourse"; diff --git a/app/assets/javascripts/admin/routes/admin-users-list-show.js b/app/assets/javascripts/admin/routes/admin-users-list-show.js index 764fe4ad34..c16591d37f 100644 --- a/app/assets/javascripts/admin/routes/admin-users-list-show.js +++ b/app/assets/javascripts/admin/routes/admin-users-list-show.js @@ -3,7 +3,7 @@ import DiscourseRoute from "discourse/routes/discourse"; export default DiscourseRoute.extend({ queryParams: { order: { refreshModel: true }, - ascending: { refreshModel: true } + asc: { refreshModel: true } }, // TODO: this has been introduced to fix a bug in admin-users-list-show @@ -18,7 +18,7 @@ export default DiscourseRoute.extend({ if (controller) { controller.setProperties({ order: transition.to.queryParams.order, - ascending: transition.to.queryParams.ascending, + asc: transition.to.queryParams.asc, query: params.filter, refreshing: false }); diff --git a/app/assets/javascripts/admin/routes/admin-watched-words-action.js b/app/assets/javascripts/admin/routes/admin-watched-words-action.js index 358cfebe67..af416c48de 100644 --- a/app/assets/javascripts/admin/routes/admin-watched-words-action.js +++ b/app/assets/javascripts/admin/routes/admin-watched-words-action.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import EmberObject from "@ember/object"; import DiscourseRoute from "discourse/routes/discourse"; diff --git a/app/assets/javascripts/admin/routes/admin-web-hooks-show.js b/app/assets/javascripts/admin/routes/admin-web-hooks-show.js index 34aed775cc..f0860e79f7 100644 --- a/app/assets/javascripts/admin/routes/admin-web-hooks-show.js +++ b/app/assets/javascripts/admin/routes/admin-web-hooks-show.js @@ -1,5 +1,4 @@ import { get } from "@ember/object"; -import { isEmpty } from "@ember/utils"; import DiscourseRoute from "discourse/routes/discourse"; export default DiscourseRoute.extend({ @@ -15,7 +14,7 @@ export default DiscourseRoute.extend({ }, setupController(controller, model) { - if (model.get("isNew") || isEmpty(model.get("web_hook_event_types"))) { + if (model.get("isNew")) { model.set("web_hook_event_types", controller.get("defaultEventTypes")); } diff --git a/app/assets/javascripts/admin/routes/admin.js b/app/assets/javascripts/admin/routes/admin.js index bc4e8173ef..0a7ae99fdd 100644 --- a/app/assets/javascripts/admin/routes/admin.js +++ b/app/assets/javascripts/admin/routes/admin.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; import DiscourseRoute from "discourse/routes/discourse"; export default DiscourseRoute.extend({ diff --git a/app/assets/javascripts/admin/services/admin-tools.js b/app/assets/javascripts/admin/services/admin-tools.js index bb5e1ac06a..6193beed66 100644 --- a/app/assets/javascripts/admin/services/admin-tools.js +++ b/app/assets/javascripts/admin/services/admin-tools.js @@ -1,3 +1,4 @@ +import I18n from "I18n"; // A service that can act as a bridge between the front end Discourse application // and the admin application. Use this if you need front end code to access admin // modules. Inject it optionally, and if it exists go to town! diff --git a/app/assets/javascripts/admin/templates/components/admin-directory-toggle.hbs b/app/assets/javascripts/admin/templates/components/admin-directory-toggle.hbs deleted file mode 100644 index 7ea697404f..0000000000 --- a/app/assets/javascripts/admin/templates/components/admin-directory-toggle.hbs +++ /dev/null @@ -1 +0,0 @@ -{{i18n this.i18nKey}}{{chevronIcon}} diff --git a/app/assets/javascripts/admin/templates/components/site-settings/bool.hbs b/app/assets/javascripts/admin/templates/components/site-settings/bool.hbs index 11384580c1..848c68145c 100644 --- a/app/assets/javascripts/admin/templates/components/site-settings/bool.hbs +++ b/app/assets/javascripts/admin/templates/components/site-settings/bool.hbs @@ -1,5 +1,6 @@ + +{{setting-validation-message message=validationMessage}} diff --git a/app/assets/javascripts/admin/templates/modal/admin-install-theme.hbs b/app/assets/javascripts/admin/templates/modal/admin-install-theme.hbs index 604befe690..053ce042a8 100644 --- a/app/assets/javascripts/admin/templates/modal/admin-install-theme.hbs +++ b/app/assets/javascripts/admin/templates/modal/admin-install-theme.hbs @@ -9,7 +9,7 @@ {{#if popular}}