From e92b22ea30b2ccbea46162f25d9794746d4eede2 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Fri, 28 Jun 2019 00:31:00 +0300 Subject: [PATCH 001/767] #2259: Use a Chartjs-ror version with airblade/chartjs-ror#57 applied. Adds a container around each chart allowing to enable responsivity and get a less fuzzy chart. --- Gemfile | 2 +- Gemfile.lock | 12 +++++++++--- app/views/stats/_actions.html.erb | 2 -- app/views/stats/_contexts.html.erb | 2 -- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Gemfile b/Gemfile index 50f48727..355d051f 100644 --- a/Gemfile +++ b/Gemfile @@ -38,7 +38,7 @@ gem 'paperclip' # To use ActiveModel has_secure_password gem 'bcrypt', '~> 3.1.13' -gem 'chartjs-ror' +gem 'chartjs-ror', :github => 'ZeiP/chartjs-ror', :branch => 'bug/41_container_element' # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks # gem 'turbolinks' diff --git a/Gemfile.lock b/Gemfile.lock index 74473b18..c106467e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,3 +1,11 @@ +GIT + remote: git://github.com/ZeiP/chartjs-ror.git + revision: e9d3aabbda3059c001144833d915a386d8b511c5 + branch: bug/41_container_element + specs: + chartjs-ror (3.6.4) + rails (>= 3.1) + GEM remote: https://rubygems.org/ specs: @@ -66,8 +74,6 @@ GEM activesupport (>= 3.0.0) uniform_notifier (~> 1.11) byebug (11.0.1) - chartjs-ror (3.6.4) - rails (>= 3.1) childprocess (1.0.1) rake (< 13.0) climate_control (0.2.0) @@ -277,7 +283,7 @@ DEPENDENCIES bootstrap-sass (= 3.4.1) bullet byebug - chartjs-ror + chartjs-ror! codeclimate-test-reporter (= 1.0.7) coffee-rails (~> 4.2.0) database_cleaner diff --git a/app/views/stats/_actions.html.erb b/app/views/stats/_actions.html.erb index 1daf9b7f..2cdff002 100644 --- a/app/views/stats/_actions.html.erb +++ b/app/views/stats/_actions.html.erb @@ -3,8 +3,6 @@ options = { width: "400px", height: "400px", - maintainAspectRatio: false, - responsive: false, plugins: { colorschemes: { scheme: 'brewer.Paired12', diff --git a/app/views/stats/_contexts.html.erb b/app/views/stats/_contexts.html.erb index 54dfa730..7049afd8 100644 --- a/app/views/stats/_contexts.html.erb +++ b/app/views/stats/_contexts.html.erb @@ -15,8 +15,6 @@ Stats::TopContextsQuery.new(current_user).result.map { |context| options = { width: "400px", height: "400px", - maintainAspectRatio: false, - responsive: false, plugins: { colorschemes: { scheme: 'brewer.Paired12', From 9f3d181fdc3372538351dae7cbca9d3c28d364f3 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 24 Oct 2019 03:01:54 +0000 Subject: [PATCH 002/767] [Security] Bump loofah from 2.2.3 to 2.3.1 Bumps [loofah](https://github.com/flavorjones/loofah) from 2.2.3 to 2.3.1. **This update includes a security fix.** - [Release notes](https://github.com/flavorjones/loofah/releases) - [Changelog](https://github.com/flavorjones/loofah/blob/master/CHANGELOG.md) - [Commits](https://github.com/flavorjones/loofah/compare/v2.2.3...v2.3.1) Signed-off-by: dependabot-preview[bot] --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index ff84004b..e5d7d3b4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -81,7 +81,7 @@ GEM execjs coffee-script-source (1.12.2) concurrent-ruby (1.1.5) - crass (1.0.4) + crass (1.0.5) database_cleaner (1.7.0) diff-lcs (1.3) docile (1.3.2) @@ -113,7 +113,7 @@ GEM rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) ruby_dep (~> 1.2) - loofah (2.2.3) + loofah (2.3.1) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) From 79ac907346d4d20c9edff5f7bcfc7d1a18dcffda Mon Sep 17 00:00:00 2001 From: Dan Rice Date: Wed, 30 Oct 2019 20:45:50 -0400 Subject: [PATCH 003/767] Migrate CI to GitHub Actions --- .github/workflows/continuous-integration.yml | 11 ++++++++++ .travis.yml | 21 -------------------- Dockerfile | 2 +- README.md | 2 +- script/cibuild | 6 +++--- 5 files changed, 16 insertions(+), 26 deletions(-) create mode 100644 .github/workflows/continuous-integration.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml new file mode 100644 index 00000000..cf1ea945 --- /dev/null +++ b/.github/workflows/continuous-integration.yml @@ -0,0 +1,11 @@ +--- +name: Continuous Integration + +on: push + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - run: bash -x script/cibuild diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d58dddc9..00000000 --- a/.travis.yml +++ /dev/null @@ -1,21 +0,0 @@ -sudo: true -services: - - docker -env: - - DOCKER_COMPOSE_VERSION=1.21.0 -before_install: - - sudo rm /usr/local/bin/docker-compose - - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose - - chmod 0755 docker-compose - - sudo mv docker-compose /usr/local/bin -install: true -script: "script/cibuild" -addons: - apt: - packages: - - docker-ce -notifications: - email: false - #irc: - #channels: "chat.freenode.net#tracks" - #skip_join: true diff --git a/Dockerfile b/Dockerfile index 37c63310..739c978f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ RUN touch /etc/app-env COPY Gemfile* /app/ RUN gem install bundler -RUN bundle install +RUN bundle install --jobs 4 RUN mkdir /app/log diff --git a/README.md b/README.md index 61c11321..6b1b8095 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ * Contributors: https://github.com/TracksApp/tracks/wiki/Contributors * Version: 2.4.0 -[![Build Status](https://travis-ci.org/TracksApp/tracks.svg?branch=master)](https://travis-ci.org/TracksApp/tracks) +[![Build Status](https://github.com/TracksApp/tracks/workflows/Continuous%20Integration/badge.svg)](https://github.com/TracksApp/tracks/actions) [![Code Climate](https://codeclimate.com/github/TracksApp/tracks/badges/gpa.svg)](https://codeclimate.com/github/TracksApp/tracks) Full instructions for both new installations and upgrades from older installations of Tracks diff --git a/script/cibuild b/script/cibuild index 702cf364..af04b27a 100755 --- a/script/cibuild +++ b/script/cibuild @@ -26,8 +26,8 @@ $docker_compose up -d script/poll-for-db # Leaving this in since it will be needed for Rails 5 -bin/rails db:environment:set RAILS_ENV=test || true +$docker_compose run web bin/rails db:environment:set RAILS_ENV=test || true -bin/rake db:reset -bin/rake test +$docker_compose run web bin/rake db:reset +$docker_compose run web bin/rake test From b94f2cdcfd16f852fe06692adf81806c9f135bb3 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Wed, 6 Nov 2019 01:32:46 +0200 Subject: [PATCH 004/767] #2295: Fix for the migration bug in MySQL --- db/migrate/20190618202817_add_user_id_to_tag.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migrate/20190618202817_add_user_id_to_tag.rb b/db/migrate/20190618202817_add_user_id_to_tag.rb index 8268aeb5..8a6e0ca9 100644 --- a/db/migrate/20190618202817_add_user_id_to_tag.rb +++ b/db/migrate/20190618202817_add_user_id_to_tag.rb @@ -4,7 +4,7 @@ class AddUserIdToTag < ActiveRecord::Migration[5.2] # Find uses of each tag for both Todos and RecurringTodos to # figure out which users use which tags. - @tags = execute <<-EOQ + @tags = exec_query <<-EOQ SELECT t.id AS tid, tds.user_id AS todo_uid, rt.user_id AS rtodo_uid FROM tags t JOIN taggings tgs ON tgs.tag_id = t.id From 5d28482f3dbc1b25265f6afa8dda78bdd889a64f Mon Sep 17 00:00:00 2001 From: Matt Rogers Date: Tue, 5 Nov 2019 20:34:21 -0600 Subject: [PATCH 005/767] Do builds on push and pull request --- .github/workflows/continuous-integration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index cf1ea945..2980320b 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -1,7 +1,7 @@ --- name: Continuous Integration -on: push +on: [push, pull_request] jobs: test: From ab6d51081ae91130d72644e1902b4b1cb543b546 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Wed, 6 Nov 2019 23:27:13 +0200 Subject: [PATCH 006/767] Version 2.4.1 --- README.md | 2 +- config/initializers/tracks.rb | 2 +- doc/CHANGELOG.md | 7 +++++++ doc/installation.md | 2 +- doc/upgrading.md | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6b1b8095..d4dac5c2 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ * IRC channel: #tracks on Freenode * Original developer: bsag (http://www.rousette.org.uk/) * Contributors: https://github.com/TracksApp/tracks/wiki/Contributors -* Version: 2.4.0 +* Version: 2.4.1 [![Build Status](https://github.com/TracksApp/tracks/workflows/Continuous%20Integration/badge.svg)](https://github.com/TracksApp/tracks/actions) [![Code Climate](https://codeclimate.com/github/TracksApp/tracks/badges/gpa.svg)](https://codeclimate.com/github/TracksApp/tracks) diff --git a/config/initializers/tracks.rb b/config/initializers/tracks.rb index 60245c3f..488b797f 100644 --- a/config/initializers/tracks.rb +++ b/config/initializers/tracks.rb @@ -1,4 +1,4 @@ -tracks_version='2.4.0' +tracks_version='2.4.1' # comment out next two lines if you do not want (or can not) the date of the # last git commit in the footer info=`git log --pretty=format:"%ai" -1` diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index 36326425..7cd9a0c7 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -1,3 +1,10 @@ +## Version 2.4.1 + +### Bug fixes +* Fixed a bug in the tag migration that prevented the migration from completing + at least in some MySQL environments. The bug only affected upgrading an existing Tracks + installation. + ## Version 2.4.0 ### New features diff --git a/doc/installation.md b/doc/installation.md index 2f03d75e..fd7af61a 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -10,7 +10,7 @@ For alternative installation options and tips for specific environments, please Tracks has a few software requirements that must be satisfied before installation: -1. **Ruby**. Tracks requires Ruby 1.9.3 or greater. +1. **Ruby**. Tracks requires Ruby 2.4 or greater. 2. **Bundler**. Tracks requires a recent version of [Bundler](http://bundler.io) to handle the installation of dependencies. Bundler is typically installed by running `gem install bundler`. 3. **Database**. Tracks is tested on [MySQL](http://www.mysql.com/) and [SQLite](http://www.sqlite.org/), but [PostgreSQL](http://www.postgresql.org/) can also be used. Of the three, SQLite requires the least configuration. Whatever your choice, the appropriate database software must be installed. diff --git a/doc/upgrading.md b/doc/upgrading.md index 8cc2c716..8632ba3c 100644 --- a/doc/upgrading.md +++ b/doc/upgrading.md @@ -1,6 +1,6 @@ # Upgrading Tracks -## Upgrading from Tracks 2.3 to 2.4.0 +## Upgrading from Tracks 2.3 to 2.4.1 These upgrade instructions are rough. Please suggest improvements in a GitHub issue if you run into problems. From db199b68df193e2f60bb93d5e089633455c93c8f Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 7 Nov 2019 18:06:30 +0200 Subject: [PATCH 007/767] Fix the contributors file location in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d4dac5c2..1a3e6d17 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ you cannot find a solution to your problem. The wiki has a lot of user contributed installation HOWTOs for various webhosts, specific OS's and more. If you are thinking about contributing towards the development of Tracks, -please read /doc/README_DEVELOPERS for general information. Also you can find +please read /CONTRIBUTING.md for general information. Also you can find some information on development, testing and contributing on the wiki. While fully usable for everyday use, Tracks is still a work in progress. Make From 7f45f748b300aa7622ccd42933dca15a0bdc36de Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Wed, 13 Nov 2019 19:33:11 +0200 Subject: [PATCH 008/767] #2259: Trying without the branch --- Gemfile | 2 +- Gemfile.lock | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index b048489d..f8ff1f4a 100644 --- a/Gemfile +++ b/Gemfile @@ -38,7 +38,7 @@ gem 'paperclip' # To use ActiveModel has_secure_password gem 'bcrypt', '~> 3.1.13' -gem 'chartjs-ror', :github => 'ZeiP/chartjs-ror', :branch => 'bug/41_container_element' +gem 'chartjs-ror', :git => 'git://github.com/ZeiP/chartjs-ror.git' # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks # gem 'turbolinks' diff --git a/Gemfile.lock b/Gemfile.lock index 0839f04f..b1b0b653 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,6 @@ GIT remote: git://github.com/ZeiP/chartjs-ror.git revision: e9d3aabbda3059c001144833d915a386d8b511c5 - branch: bug/41_container_element specs: chartjs-ror (3.6.4) rails (>= 3.1) From bc7404714cbab06b3b8827979ae22ea67a9b6726 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Wed, 13 Nov 2019 21:04:30 +0200 Subject: [PATCH 009/767] #2259: Perhaps just run the CI once --- .github/workflows/continuous-integration.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 2980320b..a7387608 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -1,7 +1,9 @@ --- name: Continuous Integration -on: [push, pull_request] +on: + pull_request: + types: opened, edited jobs: test: From 2d4a3625c36b908fcc2c10b823033e13410bde69 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Wed, 13 Nov 2019 21:23:09 +0200 Subject: [PATCH 010/767] #2259: Try without the type limits for CI --- .github/workflows/continuous-integration.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index a7387608..c2a51a65 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -1,9 +1,7 @@ --- name: Continuous Integration -on: - pull_request: - types: opened, edited +on: pull_request jobs: test: From e0aa0ac69e3b81a974c9a7e5afb8e0be088d2661 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 14 Nov 2019 02:16:59 +0200 Subject: [PATCH 011/767] #2072: Remove needless sanitisation of tags. The sanitised version is only used in DB queries, which handle escaping themselves; the actual UI XSS sanitisation is handled separately. --- app/controllers/todos_controller.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/controllers/todos_controller.rb b/app/controllers/todos_controller.rb index a23419b8..743a5515 100644 --- a/app/controllers/todos_controller.rb +++ b/app/controllers/todos_controller.rb @@ -871,14 +871,16 @@ class TodosController < ApplicationController def get_params_for_tag_view filter_format_for_tag_view - # use sanitize to prevent XSS attacks + # Don't use sanitize here because these are only used for a DB query. @tag_expr = [] - @tag_expr << sanitize(params[:name]).split(',') - @tag_expr << sanitize(params[:and]).split(',') if params[:and] + # Tag conditions handled as OR. + @tag_expr << params[:name].split(',') + # Additional tag condition(s) handled as AND. + @tag_expr << params[:and].split(',') if params[:and] i = 1 while params['and'+i.to_s] - @tag_expr << sanitize(params['and'+i.to_s]).split(',') + @tag_expr << params['and'+i.to_s].split(',') i=i+1 end From c66ce02cb61805829608993fc6f9ab424c320148 Mon Sep 17 00:00:00 2001 From: Jan-Yves Ruzicka Date: Sun, 17 Nov 2019 16:03:40 +1300 Subject: [PATCH 012/767] Refactor todos_controller and todos_helper to use @original_item Project uses properties of @original_item over a number of similar-named variables (eg. @original_item_description, @original_item_was_pending, etc.) Have left in @original_item_due_date and @original_completed_period as these are more complex, and not simply properties of the todo item. --- app/controllers/todos_controller.rb | 79 ++++++++++++----------------- app/helpers/todos_helper.rb | 12 +++-- 2 files changed, 41 insertions(+), 50 deletions(-) diff --git a/app/controllers/todos_controller.rb b/app/controllers/todos_controller.rb index a23419b8..80358c18 100644 --- a/app/controllers/todos_controller.rb +++ b/app/controllers/todos_controller.rb @@ -301,28 +301,27 @@ class TodosController < ApplicationController end end + ## # Toggles the 'done' status of the action - # def toggle_check @todo = current_user.todos.find(params['id']) @source_view = params['_source_view'] || 'todo' - @original_item = current_user.todos.build(@todo.attributes) # create a (unsaved) copy of the original todo - @original_item_due = @todo.due - @original_item_was_deferred = @todo.deferred? - @original_item_was_pending = @todo.pending? - @original_item_was_hidden = @todo.hidden? - @original_item_context_id = @todo.context_id - @original_item_project_id = @todo.project_id + # Create a (unsaved) copy of the original todo, before it was toggled + @original_item = current_user.todos.build(@todo.attributes) @original_completed_period = DoneTodos.completed_period(@todo.completed_at) - @todo_was_completed_from_deferred_or_blocked_state = @original_item_was_deferred || @original_item_was_pending + + @todo_was_completed_from_deferred_or_blocked_state = + @original_item.deferred? || @original_item.pending? @saved = @todo.toggle_completion! - @todo_was_blocked_from_completed_state = @todo.pending? # since we toggled_completion the previous state was completed + # As a result of toggling the done status of the todo, have we shifted from + # "Done" to "Blocked"? + @todo_was_blocked_from_completed_state = @todo.pending? - # check if this todo has a related recurring_todo. If so, create next todo + # Check if this todo has a related recurring_todo. If so, create next todo @new_recurring_todo = check_for_next_todo(@todo) if @saved @predecessors = @todo.uncompleted_predecessors @@ -343,7 +342,7 @@ class TodosController < ApplicationController determine_deferred_tag_count(params['_tag_name']) if source_view_is(:tag) @wants_redirect_after_complete = @todo.completed? && !@todo.project_id.nil? && current_user.prefs.show_project_on_todo_done && !source_view_is(:project) if source_view_is :calendar - @original_item_due_id = get_due_id_for_calendar(@original_item_due) + @original_item_due_id = get_due_id_for_calendar(@original_item.due) @old_due_empty = is_old_due_empty(@original_item_due_id) end end @@ -403,7 +402,6 @@ class TodosController < ApplicationController def change_context # change context if you drag a todo to another context @todo = current_user.todos.find(params[:id]) - @original_item_context_id = @todo.context_id @original_item = current_user.todos.build(@todo.attributes) # create a (unsaved) copy of the original todo @context = current_user.contexts.find(params[:todo][:context_id]) @todo.context = @context @@ -426,8 +424,6 @@ class TodosController < ApplicationController @todo = current_user.todos.find(params['id']) @original_item = current_user.todos.build(@todo.attributes) # create a (unsaved) copy of the original todo - cache_attributes_from_before_update # TODO: remove in favor of @original_item - update_tags update_project update_context @@ -456,7 +452,7 @@ class TodosController < ApplicationController update_dependency_state if @project_changed - @remaining_undone_in_project = current_user.projects.find(@original_item_project_id).todos.active.count if source_view_is :project + @remaining_undone_in_project = current_user.projects.find(@original_item.project_id).todos.active.count if source_view_is :project end determine_changes_by_this_update @@ -464,7 +460,7 @@ class TodosController < ApplicationController determine_down_count determine_deferred_tag_count(sanitize(params['_tag_name'])) if source_view_is(:tag) - @todo.touch_predecessors if @original_item_description != @todo.description + @todo.touch_predecessors if @original_item.description != @todo.description respond_to do |format| format.js { @@ -496,7 +492,6 @@ class TodosController < ApplicationController @source_view = params['_source_view'] || 'todo' @todo = current_user.todos.find(params['id']) @original_item = current_user.todos.build(@todo.attributes) # create a (unsaved) copy of the original todo - @original_item_due = @todo.due @context_id = @todo.context_id @project_id = @todo.project_id @todo_was_destroyed = true @@ -545,7 +540,7 @@ class TodosController < ApplicationController if source_view_is_one_of(:todo, :deferred, :project, :context, :tag) determine_remaining_in_container_count(@todo) elsif source_view_is :calendar - @original_item_due_id = get_due_id_for_calendar(@original_item_due) + @original_item_due_id = get_due_id_for_calendar(@original_item.due) @old_due_empty = is_old_due_empty(@original_item_due_id) end end @@ -728,7 +723,6 @@ class TodosController < ApplicationController @todo = current_user.todos.find(params[:id]) @original_item = current_user.todos.build(@todo.attributes) # create a (unsaved) copy of the original todo - @original_item_context_id = @todo.context_id @todo_deferred_state_changed = true @new_context_created = false @due_date_changed = false @@ -745,7 +739,6 @@ class TodosController < ApplicationController source_view do |page| page.project { @remaining_undone_in_project = current_user.projects.find(@todo.project_id).todos.not_completed.count - @original_item_project_id = @todo.project_id } page.tag { determine_deferred_tag_count(params['_tag_name']) @@ -945,7 +938,7 @@ end @down_count = current_user.todos.active.not_hidden.count end from.context do - context_id = @original_item_context_id || @todo.context_id + context_id = @original_item.context_id || @todo.context_id todos = current_user.contexts.find(context_id).todos.not_completed if @todo.context.hidden? @@ -1019,7 +1012,7 @@ end @remaining_deferred_or_pending_count = current_user.todos.with_tag(tag.id).deferred_or_blocked.count } from.project { - project_id = @project_changed ? @original_item_project_id : @todo.project_id + project_id = @project_changed ? @original_item.project_id : @todo.project_id @remaining_deferred_or_pending_count = current_user.projects.find(project_id).todos.deferred_or_blocked.count if @todo_was_completed_from_deferred_or_blocked_state @@ -1163,19 +1156,6 @@ end end end - def cache_attributes_from_before_update - @original_item_context_id = @todo.context_id - @original_item_project_id = @todo.project_id - @original_item_was_deferred = @todo.deferred? - @original_item_was_hidden = @todo.hidden? - @original_item_was_pending = @todo.pending? - @original_item_due = @todo.due - @original_item_due_id = get_due_id_for_calendar(@todo.due) - @original_item_predecessor_list = @todo.predecessors.map{|t| t.specification}.join(', ') - @original_item_description = @todo.description - @todo_was_deferred_or_blocked = @todo.deferred? || @todo.pending? - end - def update_project @project_changed = false if params['todo']['project_id'].blank? && !params['project_name'].nil? @@ -1193,7 +1173,7 @@ end end end params["todo"]["project_id"] = project.id - @project_changed = @original_item_project_id != params["todo"]["project_id"] = project.id + @project_changed = @original_item.project_id != params["todo"]["project_id"] = project.id end end @@ -1212,7 +1192,7 @@ end @context = @new_context end params["todo"]["context_id"] = @context.id - @context_changed = @original_item_context_id != params["todo"]["context_id"] = @context.id + @context_changed = @original_item.context_id != params["todo"]["context_id"] = @context.id end end @@ -1258,7 +1238,12 @@ end def update_dependency_state # assumes @todo.save was called so that the predecessor_list is persistent - if @original_item_predecessor_list != params[:predecessor_list] + original_item_predecessor_list = + @original_item.predecessors + .map{ |t| t.specification } + .join(', ') + + if original_item_predecessor_list != params[:predecessor_list] # Possible state change with new dependencies if @todo.uncompleted_predecessors.empty? @todo.activate! if @todo.state == 'pending' # Activate pending if no uncompleted predecessors @@ -1276,16 +1261,16 @@ end end def determine_changes_by_this_update - @todo_was_activated_from_deferred_state = @todo.active? && @original_item_was_deferred - @todo_was_activated_from_pending_state = @todo.active? && @original_item_was_pending - @todo_was_deferred_from_active_state = @todo.deferred? && !@original_item_was_deferred - @todo_was_blocked_from_active_state = @todo.pending? && !@original_item_was_pending + @todo_was_activated_from_deferred_state = @todo.active? && @original_item.deferred? + @todo_was_activated_from_pending_state = @todo.active? && @original_item.pending? + @todo_was_deferred_from_active_state = @todo.deferred? && !@original_item.deferred? + @todo_was_blocked_from_active_state = @todo.pending? && !@original_item.pending? - @todo_deferred_state_changed = @original_item_was_deferred != @todo.deferred? - @todo_pending_state_changed = @original_item_was_pending != @todo.pending? - @todo_hidden_state_changed = @original_item_was_hidden != @todo.hidden? + @todo_deferred_state_changed = @original_item.deferred? != @todo.deferred? + @todo_pending_state_changed = @original_item.pending? != @todo.pending? + @todo_hidden_state_changed = @original_item.hidden? != @todo.hidden? - @due_date_changed = @original_item_due != @todo.due + @due_date_changed = @original_item.due != @todo.due source_view do |page| page.calendar do diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb index 8b04e928..47475a86 100644 --- a/app/helpers/todos_helper.rb +++ b/app/helpers/todos_helper.rb @@ -501,7 +501,13 @@ module TodosHelper @todo_was_deferred_from_active_state || @tag_was_removed || @todo_was_destroyed || - (@todo.completed? && !(@original_item_was_deferred || @original_item_was_hidden || @original_item_was_pending)) + ( + @todo.completed? && !( + @original_item.deferred? || + @original_item.hidden? || + @original_item.pending? + ) + ) ) end @@ -662,9 +668,9 @@ module TodosHelper page.calendar { container_id = "#{@original_item_due_id}_container-empty-d" if @old_due_empty } page.tag { container_id = "hidden_container-empty-d" if (@remaining_hidden_count == 0 && !@todo.hidden? && @todo_hidden_state_changed) || - (@remaining_hidden_count == 0 && @todo.completed? && @original_item_was_hidden) + (@remaining_hidden_count == 0 && @todo.completed? && @original_item.hidden?) container_id = "deferred_pending_container-empty-d" if (todo_was_removed_from_deferred_or_blocked_container && @remaining_deferred_or_pending_count == 0) || - (@original_item_was_deferred && @remaining_deferred_or_pending_count == 0 && (@todo.completed? || @tag_was_removed)) + (@original_item.deferred? && @remaining_deferred_or_pending_count == 0 && (@todo.completed? || @tag_was_removed)) container_id = "completed_container-empty-d" if @completed_count && @completed_count == 0 && !@todo.completed? } page.context { From eb5c2484a9e3f4966dbad7da7096aefff5e363c4 Mon Sep 17 00:00:00 2001 From: Matt Rogers Date: Tue, 26 Nov 2019 15:27:19 -0600 Subject: [PATCH 013/767] Remove a useless variable assignment We can shortcut the assignment that was in the partial by naming the object directly. --- app/views/shared/_add_new_item_form.html.erb | 4 ++-- app/views/todos/_new_multi_todo_form.html.erb | 2 -- app/views/todos/_new_todo_form.html.erb | 2 -- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/app/views/shared/_add_new_item_form.html.erb b/app/views/shared/_add_new_item_form.html.erb index e592540a..42a33364 100644 --- a/app/views/shared/_add_new_item_form.html.erb +++ b/app/views/shared/_add_new_item_form.html.erb @@ -14,7 +14,7 @@ <%= t('shared.toggle_multi') %> - <%= render :partial => 'todos/new_todo_form', :object => Todo.new %> - <%= render :partial => 'todos/new_multi_todo_form', :object => Todo.new %> + <%= render :partial => 'todos/new_todo_form', :locals => {todo: Todo.new} %> + <%= render :partial => 'todos/new_multi_todo_form', :locals => {todo: Todo.new} %> diff --git a/app/views/todos/_new_multi_todo_form.html.erb b/app/views/todos/_new_multi_todo_form.html.erb index 1e30579a..7a5be642 100644 --- a/app/views/todos/_new_multi_todo_form.html.erb +++ b/app/views/todos/_new_multi_todo_form.html.erb @@ -1,5 +1,3 @@ -<%- todo = new_multi_todo_form -%> - diff --git a/config/locales/en.yml b/config/locales/en.yml index a953c51a..663cbea6 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -821,11 +821,13 @@ en: authentication_header: Your authentication current_authentication_type: Your authentication type is %{auth_type} change_authentication_type: Change your authentication type + remove_introduction: You can remove your user account here. Note that this is irreversible and will remove all your data! After removal you will be logged out. tabs: authentication: Authentication tracks_behavior: Tracks behavior profile: Profile date_and_time: Date and time + remove_account: Remove account generate_new_token_confirm: Are you sure? Generating a new token will replace the existing one and break any external usages of this token. data: import_successful: Import was successful. diff --git a/config/routes.rb b/config/routes.rb index 79d5d5c6..6650560a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -106,7 +106,7 @@ Rails.application.routes.draw do # This means the controller action needs to parse the extension and set format/content type # Needed for /todos/tag/first.last.m to work get 'todos/tag/:name' => 'todos#tag', :as => :tag, :format => false, :name => /.*/ - + get 'attachments/:id/:filename' => "todos#attachment" get 'tags.autocomplete' => "todos#tags", :format => 'autocomplete' get 'todos/done/tag/:name' => "todos#done_tag", :as => :done_tag diff --git a/lib/login_system.rb b/lib/login_system.rb index ce2e2614..85d1d3e0 100644 --- a/lib/login_system.rb +++ b/lib/login_system.rb @@ -222,6 +222,7 @@ private def redirect_to_login respond_to do |format| format.html { redirect_to login_path } + format.js { render js: "redirect_to('" + login_path + "')" } format.m { redirect_to login_path(:format => 'm') } end end From 2f5e5a5ae3fd8bd7466be8ed9163078fc92ba467 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Aug 2020 05:56:58 +0000 Subject: [PATCH 141/767] Bump rubocop from 0.89.0 to 0.89.1 Bumps [rubocop](https://github.com/rubocop-hq/rubocop) from 0.89.0 to 0.89.1. - [Release notes](https://github.com/rubocop-hq/rubocop/releases) - [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.89.0...v0.89.1) Signed-off-by: dependabot[bot] --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 93fc2af7..9f65353c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -203,13 +203,13 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.9.0) rspec-support (3.9.3) - rubocop (0.89.0) + rubocop (0.89.1) parallel (~> 1.10) parser (>= 2.7.1.1) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.7) rexml - rubocop-ast (>= 0.1.0, < 1.0) + rubocop-ast (>= 0.3.0, < 1.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 2.0) rubocop-ast (0.3.0) From 95cb7ec79971fecb09942b4667e573a3fdef2c68 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Tue, 11 Aug 2020 11:50:35 +0300 Subject: [PATCH 142/767] Fix tests and add more comments --- app/controllers/users_controller.rb | 12 +++++++++--- test/test_helper.rb | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index a58d5a63..f4c6da9f 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -131,16 +131,20 @@ class UsersController < ApplicationController # DELETE /users/id DELETE /users/id.xml def destroy @deleted_user = User.find(params[:id]) + + # Check that the user has access (logged in as admin or the target user.) unless current_user && (current_user.is_admin || current_user == @deleted_user) render :body => t('errors.user_unauthorized'), :status => 401 return end + # Remove the user @saved = @deleted_user.destroy - if current_user == @deleted_user + + # Log out the user if they've deleted their own user and it succeeded. + if @saved && current_user == @deleted_user logout_user end - @total_users = User.count respond_to do |format| format.html do @@ -155,7 +159,9 @@ class UsersController < ApplicationController redirect_to users_url end end - format.js + format.js do + @total_users = User.count + end format.xml do head :ok end diff --git a/test/test_helper.rb b/test/test_helper.rb index 94bdf410..70c26275 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -140,7 +140,7 @@ class ActionDispatch::IntegrationTest end def assert_401_unauthorized_admin - assert_response_and_body 401, "401 Unauthorized: Only admin users are allowed access to this function." + assert_response_and_body 401, "401 Unauthorized: Only administrative users are allowed access to this function." end def assert_responses_with_error(error_msg) From 69b24c3af73ce7d784f23c2fae07fb145cbc377d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Aug 2020 05:37:11 +0000 Subject: [PATCH 143/767] Bump aasm from 4.12.3 to 5.1.1 Bumps [aasm](https://github.com/aasm/aasm) from 4.12.3 to 5.1.1. - [Release notes](https://github.com/aasm/aasm/releases) - [Changelog](https://github.com/aasm/aasm/blob/master/CHANGELOG.md) - [Commits](https://github.com/aasm/aasm/compare/v4.12.3...v5.1.1) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index 5a0c005a..4152ea0e 100644 --- a/Gemfile +++ b/Gemfile @@ -29,7 +29,7 @@ gem "RedCloth" gem "sanitize", "~> 5.2" gem "will_paginate" gem "acts_as_list" -gem "aasm", '~> 4.12.3' +gem "aasm", '~> 5.1.1' gem "htmlentities" gem "rails_autolink" gem 'puma', '~> 4.3' diff --git a/Gemfile.lock b/Gemfile.lock index 9f65353c..080dca69 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -9,7 +9,7 @@ GEM remote: https://rubygems.org/ specs: RedCloth (4.3.2) - aasm (4.12.3) + aasm (5.1.1) concurrent-ruby (~> 1.0) actioncable (5.2.4.3) actionpack (= 5.2.4.3) @@ -87,7 +87,7 @@ GEM coffee-script-source execjs coffee-script-source (1.12.2) - concurrent-ruby (1.1.6) + concurrent-ruby (1.1.7) crass (1.0.6) database_cleaner (1.8.5) diff-lcs (1.3) @@ -294,7 +294,7 @@ PLATFORMS DEPENDENCIES RedCloth - aasm (~> 4.12.3) + aasm (~> 5.1.1) actionpack-xml_parser (~> 2.0) activemodel-serializers-xml (~> 1.0.1) acts_as_list From b4f8b65f49ac38520675ed27b8f382fc366104ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Aug 2020 05:49:16 +0000 Subject: [PATCH 144/767] Bump solargraph from 0.39.13 to 0.39.14 Bumps [solargraph](https://github.com/castwide/solargraph) from 0.39.13 to 0.39.14. - [Release notes](https://github.com/castwide/solargraph/releases) - [Commits](https://github.com/castwide/solargraph/compare/v0.39.13...v0.39.14) Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9f65353c..439d7ecf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -242,7 +242,7 @@ GEM docile (~> 1.1) simplecov-html (~> 0.11) simplecov-html (0.12.2) - solargraph (0.39.13) + solargraph (0.39.14) backport (~> 1.1) benchmark bundler (>= 1.17.2) From 4bfffc6476db1fc6a3d37a7af997004cb99550da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2020 05:49:51 +0000 Subject: [PATCH 145/767] Bump simplecov from 0.18.5 to 0.19.0 Bumps [simplecov](https://github.com/simplecov-ruby/simplecov) from 0.18.5 to 0.19.0. - [Release notes](https://github.com/simplecov-ruby/simplecov/releases) - [Changelog](https://github.com/simplecov-ruby/simplecov/blob/main/CHANGELOG.md) - [Commits](https://github.com/simplecov-ruby/simplecov/compare/v0.18.5...v0.19.0) Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 439d7ecf..1f36a807 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -238,7 +238,7 @@ GEM selenium-webdriver (3.142.7) childprocess (>= 0.5, < 4.0) rubyzip (>= 1.2.2) - simplecov (0.18.5) + simplecov (0.19.0) docile (~> 1.1) simplecov-html (~> 0.11) simplecov-html (0.12.2) From d03edb72694c7778facdb7b2180d46d8e772c768 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Mon, 17 Aug 2020 12:23:11 +0300 Subject: [PATCH 146/767] Dropping Ruby 2.4 because dependencies dropped it. --- doc/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/installation.md b/doc/installation.md index f47db6a7..d138c70b 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -98,7 +98,7 @@ This description is intended for people installing Tracks from scratch. If you w Tracks has a few software requirements that must be satisfied before installation: -1. **Ruby**. Tracks requires Ruby 2.4 or greater, but is not tested with 2.7. +1. **Ruby**. Tracks requires Ruby 2.5 or greater. Most of the testing is done with 2.6. 2. **Bundler**. Tracks requires a recent version of [Bundler](http://bundler.io) to handle the installation of dependencies. Bundler is typically installed by running `gem install bundler`. 3. **Database**. Tracks is tested on [MySQL](http://www.mysql.com/) and [SQLite](http://www.sqlite.org/), but [PostgreSQL](http://www.postgresql.org/) can also be used. Of the three, SQLite requires the least configuration but is also the least performant and may make it difficult to operate in the future. We recommend either MySQL or PostgreSQL. Whatever your choice, the appropriate database software must be installed. From 2d4ba48ad4edf34d2d9c85699757f14ddf1aee7d Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Tue, 18 Aug 2020 11:51:16 +0300 Subject: [PATCH 147/767] Move the access control to a dedicated helper --- app/controllers/application_controller.rb | 7 +++++++ app/controllers/users_controller.rb | 7 +------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index bbe55e3a..f589762a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -154,6 +154,13 @@ class ApplicationController < ActionController::Base end end + def admin_or_self_login_required + unless User.find(session['user_id']).is_admin || session['user_id'] == params[:id] + render :body => t('errors.user_unauthorized'), :status => 401 + return false + end + end + def redirect_back_or_home respond_to do |format| format.html { redirect_back_or_default root_url } diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index f4c6da9f..01d13fc1 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,6 +1,7 @@ class UsersController < ApplicationController before_action :admin_login_required, :only => [ :index, :show ] + before_action :admin_or_self_login_required, :only => [ :destroy ] skip_before_action :login_required, :only => [ :new, :create ] prepend_before_action :login_optional, :only => [ :new, :create ] @@ -132,12 +133,6 @@ class UsersController < ApplicationController def destroy @deleted_user = User.find(params[:id]) - # Check that the user has access (logged in as admin or the target user.) - unless current_user && (current_user.is_admin || current_user == @deleted_user) - render :body => t('errors.user_unauthorized'), :status => 401 - return - end - # Remove the user @saved = @deleted_user.destroy From 6c8e0ce176c03c70a53e7bea1f115d728dc37850 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Tue, 18 Aug 2020 14:49:37 +0300 Subject: [PATCH 148/767] Add tests --- test/controllers/users_controller_test.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb index c3dde992..13ee8db6 100644 --- a/test/controllers/users_controller_test.rb +++ b/test/controllers/users_controller_test.rb @@ -36,7 +36,7 @@ class UsersControllerTest < ActionController::TestCase assert_equal assigns['users'],[User.where(:login => 'jane').first] end - def test_destroy_user + def test_destroy_user_as_admin login_as :admin_user @no_users_before = User.count user_id = users(:ldap_user).id @@ -44,8 +44,16 @@ class UsersControllerTest < ActionController::TestCase assert_equal @no_users_before-1, User.count end + def test_destroy_user_as_user + login_as :other_user + @no_users_before = User.count + user_id = users(:other_user).id + post :destroy, xhr: true, params: { :id => user_id.to_param } + assert_equal @no_users_before-1, User.count + end + def test_update_password_successful - get :change_password, params: { :id => users(:admin_user).id } + get :change_password, params: { :id => users(:admin_user).id } # should fail because no login assert_redirected_to login_path login_as :admin_user From 320da8b72a818dde02db63121625d3107c49cb04 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Tue, 18 Aug 2020 15:27:43 +0300 Subject: [PATCH 149/767] Compare int to int --- app/controllers/application_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index f589762a..184b7fb5 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -155,7 +155,7 @@ class ApplicationController < ActionController::Base end def admin_or_self_login_required - unless User.find(session['user_id']).is_admin || session['user_id'] == params[:id] + unless User.find(session['user_id']).is_admin || session['user_id'] == params[:id].to_i render :body => t('errors.user_unauthorized'), :status => 401 return false end From 112419e7130f14f0143449c1cdbd05c8d551ff41 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Tue, 18 Aug 2020 17:00:28 +0300 Subject: [PATCH 150/767] Fix the included files for the new version of jquery-ui-rails. Don't know why the menu stylesheet wasn't previously needed as a separate include, but seems to work with the file added. --- app/assets/javascripts/application.js | 12 ++++++------ app/assets/stylesheets/application.scss | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 375f0bdd..113fc78d 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -14,12 +14,12 @@ //= require jquery_ujs //= require bootstrap-sprockets -//= require jquery-ui/autocomplete -//= require jquery-ui/datepicker -//= require jquery-ui/dialog -//= require jquery-ui/droppable -//= require jquery-ui/effect-highlight -//= require jquery-ui/sortable +//= require jquery-ui/widgets/autocomplete +//= require jquery-ui/widgets/datepicker +//= require jquery-ui/widgets/dialog +//= require jquery-ui/widgets/droppable +//= require jquery-ui/effects/effect-highlight +//= require jquery-ui/widgets/sortable // Stuff in app/assets //= require tracks diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 32baec8f..ce2e368d 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -10,6 +10,7 @@ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new * file per style scope. * + *= require jquery-ui/menu *= require jquery-ui/autocomplete *= require jquery-ui/datepicker *= require jquery-ui/dialog From 8c2c1654803784bd1c642b5054ff136ef8ddbc8c Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 18 Aug 2020 14:10:35 +0000 Subject: [PATCH 151/767] Bump font-awesome-sass from 4.5.0 to 5.13.0 Bumps [font-awesome-sass](https://github.com/FortAwesome/font-awesome-sass) from 4.5.0 to 5.13.0. - [Release notes](https://github.com/FortAwesome/font-awesome-sass/releases) - [Commits](https://github.com/FortAwesome/font-awesome-sass/commits) Signed-off-by: dependabot-preview[bot] --- Gemfile | 2 +- Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index 5a0c005a..840bf529 100644 --- a/Gemfile +++ b/Gemfile @@ -47,7 +47,7 @@ gem 'chartjs-ror', :git => 'git://github.com/ZeiP/chartjs-ror.git' # gem 'jbuilder', '~> 1.2' gem "bootstrap-sass", "3.4.1" -gem "font-awesome-sass", "~> 4.5.0" +gem "font-awesome-sass", "~> 5.13.0" group :development do gem "spring" diff --git a/Gemfile.lock b/Gemfile.lock index 1f36a807..7132255e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -101,8 +101,8 @@ GEM factory_bot (~> 6.1.0) railties (>= 5.0.0) ffi (1.9.25) - font-awesome-sass (4.5.0) - sass (>= 3.2) + font-awesome-sass (5.13.0) + sassc (>= 1.11) globalid (0.4.2) activesupport (>= 4.2.0) htmlentities (4.3.4) @@ -307,7 +307,7 @@ DEPENDENCIES coffee-rails (~> 5.0.0) database_cleaner factory_bot_rails - font-awesome-sass (~> 4.5.0) + font-awesome-sass (~> 5.13.0) htmlentities jquery-rails (~> 4.4) jquery-ui-rails (~> 5.0.5) From 399e2c0b76403e594db63b07f5816c7986e51122 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Wed, 19 Aug 2020 02:42:36 +0300 Subject: [PATCH 152/767] Try potential fix for aasm 5.x --- app/models/recurring_todo.rb | 4 ++-- app/models/todo.rb | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/models/recurring_todo.rb b/app/models/recurring_todo.rb index e9f09ff3..d3daf9ac 100644 --- a/app/models/recurring_todo.rb +++ b/app/models/recurring_todo.rb @@ -12,8 +12,8 @@ class RecurringTodo < ApplicationRecord include AASM aasm :column => :state do - state :active, :initial => true, :before_enter => Proc.new { |t| t.occurrences_count = 0 } - state :completed, :before_enter => Proc.new { |t| t.completed_at = Time.zone.now }, :before_exit => Proc.new { |t| t.completed_at = nil } + state :active, :initial => true, :before_enter => Proc.new { occurrences_count = 0 } + state :completed, :before_enter => Proc.new { completed_at = Time.zone.now }, :before_exit => Proc.new { completed_at = nil } event :complete do transitions :to => :completed, :from => [:active] diff --git a/app/models/todo.rb b/app/models/todo.rb index c69bb69c..ba067946 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -70,13 +70,13 @@ class Todo < ApplicationRecord # state machine include AASM - aasm_initial_state = Proc.new { |t| (t.show_from && t.user && (t.show_from > t.user.date)) ? :deferred : :active} + aasm_initial_state = Proc.new { (show_from && user && (show_from > user.date)) ? :deferred : :active} aasm :column => :state do state :active - state :completed, :before_enter => Proc.new { |t| t.completed_at = Time.zone.now }, :before_exit => Proc.new { |t| t.completed_at = nil} - state :deferred, :before_exit => Proc.new { |t| t[:show_from] = nil } + state :completed, :before_enter => Proc.new { completed_at = Time.zone.now }, :before_exit => Proc.new { completed_at = nil} + state :deferred, :before_exit => Proc.new { show_from = nil } state :pending event :defer do From 99e2d0bb107455103f4187e60c0abfdf42c72df2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2020 05:51:06 +0000 Subject: [PATCH 153/767] Bump solargraph from 0.39.14 to 0.39.15 Bumps [solargraph](https://github.com/castwide/solargraph) from 0.39.14 to 0.39.15. - [Release notes](https://github.com/castwide/solargraph/releases) - [Commits](https://github.com/castwide/solargraph/compare/v0.39.14...v0.39.15) Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 28517123..62c94f4c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -242,7 +242,7 @@ GEM docile (~> 1.1) simplecov-html (~> 0.11) simplecov-html (0.12.2) - solargraph (0.39.14) + solargraph (0.39.15) backport (~> 1.1) benchmark bundler (>= 1.17.2) From ea6c11c3a41c6df7df35b570a3dd1132c11bde3d Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Wed, 19 Aug 2020 11:54:50 +0300 Subject: [PATCH 154/767] Add the style parameter --- app/helpers/icon_helper.rb | 4 ++-- app/views/shared/_navbar.html.erb | 10 +++++----- test/helpers/icon_helper_test.rb | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/helpers/icon_helper.rb b/app/helpers/icon_helper.rb index 3fb817fa..108a9e9b 100644 --- a/app/helpers/icon_helper.rb +++ b/app/helpers/icon_helper.rb @@ -1,7 +1,7 @@ module IconHelper include FontAwesome::Sass::Rails::ViewHelpers - def icon_fw(icon, text = nil, html_options = {}) + def icon_fw(style, name, text = nil, html_options = {}) text, html_options = nil, text if text.is_a?(Hash) if html_options.key?(:class) @@ -10,6 +10,6 @@ module IconHelper html_options[:class] = "fa-fw" end - icon(icon, text, html_options) + icon(style, name, text, html_options) end end diff --git a/app/views/shared/_navbar.html.erb b/app/views/shared/_navbar.html.erb index 709670c5..dd664fe8 100644 --- a/app/views/shared/_navbar.html.erb +++ b/app/views/shared/_navbar.html.erb @@ -67,16 +67,16 @@ <%= content_tag :span, t('layouts.navigation.options'), class: 'visible-xs-inline' %> diff --git a/test/helpers/icon_helper_test.rb b/test/helpers/icon_helper_test.rb index 5ab2e43f..90eaf3f4 100644 --- a/test/helpers/icon_helper_test.rb +++ b/test/helpers/icon_helper_test.rb @@ -4,10 +4,10 @@ class IconHelperTest < ActionView::TestCase include IconHelper test 'icon_fw generates fixed-width class' do - assert_equal '', icon_fw('gear') + assert_equal '', icon_fw('fas', 'gear') end test 'icon_fw accepts an additional class' do - assert_equal '', icon_fw('gear', class: 'myclass') + assert_equal '', icon_fw('fas', 'gear', class: 'myclass') end end From 7bad259d2c2630616127f9274982d1abb2b9147e Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Wed, 19 Aug 2020 12:25:59 +0300 Subject: [PATCH 155/767] Fixed a few more uses of the library icon helper --- app/views/search/_index.html.erb | 2 +- app/views/shared/_navbar.html.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/search/_index.html.erb b/app/views/search/_index.html.erb index b77fae66..ced351fc 100644 --- a/app/views/search/_index.html.erb +++ b/app/views/search/_index.html.erb @@ -4,7 +4,7 @@ <%= text_field_tag(:search, params[:search], class: 'form-control') %>
<%= button_tag(type: 'submit', class: 'btn pull-right') do%> - <%= icon('search', class: 'hidden-xs') %> + <%= icon('fas', 'search', class: 'hidden-xs') %> <% end %>
diff --git a/app/views/shared/_navbar.html.erb b/app/views/shared/_navbar.html.erb index dd664fe8..f0f5fdf9 100644 --- a/app/views/shared/_navbar.html.erb +++ b/app/views/shared/_navbar.html.erb @@ -63,7 +63,7 @@
  • /projects/<%= t('rest_help.id') %>/todos.xml
  • -

    <%= raw t('rest_help.retrieve.limit', { +

    <%= raw t('rest_help.retrieve.limit', fields: 'ID, created_at, modified_at, completed_at', limit_parameter: 'limit_fields', - set_to: 'index'}) %>

    + set_to: 'index') %>

     
    @@ -87,10 +87,10 @@
     
     

    <%= t('rest_help.writing.title') %>

    -

    <%= raw t('rest_help.writing.description', { +

    <%= raw t('rest_help.writing.description', put: 'PUT', post: 'POST', - delete: 'DELETE'}) %>

    + delete: 'DELETE') %>

    <%= t('rest_help.writing.example_title') %>

    @@ -105,9 +105,9 @@ Location: <%= root_url %>projects/65.xml
    -

    <%= raw t('rest_help.writing.example_project_response_title', { +

    <%= raw t('rest_help.writing.example_project_response_title', response_code: 'HTTP/1.1 201 Created', - header: 'Location'}) %>

    + header: 'Location') %>

     
    @@ -120,9 +120,9 @@ Location: <%= root_url %>todos/452.xml
     
     
    -

    <%= raw t('rest_help.writing.example_todo_response_title', { +

    <%= raw t('rest_help.writing.example_todo_response_title', response_code: 'HTTP/1.1 201 Created', - header: 'Location'}) %>

    + header: 'Location') %>

     
    @@ -143,8 +143,8 @@ Location: <%= root_url %>todos/452.xml
     
     
    -

    <%= raw t('rest_help.writing.example_note_response_title', { - response_code: 'HTTP/1.1 200 OK'}) %>

    +

    <%= raw t('rest_help.writing.example_note_response_title', + response_code: 'HTTP/1.1 200 OK') %>

     
    @@ -164,8 +164,8 @@ Location: <%= root_url %>todos/452.xml
     
     
    -

    <%= raw t('rest_help.writing.example_delete_title', { - delete: 'DELETE'}) %>

    +

    <%= raw t('rest_help.writing.example_delete_title', + delete: 'DELETE') %>

     
    @@ -176,15 +176,15 @@ Location: <%= root_url %>todos/452.xml
     
     
    -

    <%= raw t('rest_help.writing.example_delete_response_title', { - response_code: 'HTTP/1.1 200 OK'}) %>

    +

    <%= raw t('rest_help.writing.example_delete_response_title', + response_code: 'HTTP/1.1 200 OK') %>

    <%= t('rest_help.response.title') %>

    -

    <%= raw t('rest_help.response.description', { +

    <%= raw t('rest_help.response.description', response_200: '200 OK', response_201: '201 Created', - example_call: 'GET /contexts/2/todos.xml'}) %>

    + example_call: 'GET /contexts/2/todos.xml') %>

    <%= t('rest_help.response.xml_description') %>

    @@ -200,11 +200,11 @@ $ curl -u username:p4ssw0rd -H "Content-Type: text/xml" \

    <%= t('rest_help.activeresource.title') %>

    -

    <%= raw I18n.t 'rest_help.activeresource.description', { +

    <%= raw I18n.t 'rest_help.activeresource.description', activeresource_link: link_to(I18n.t('rest_help.activeresource.activeresource_link_text'), 'http://weblog.rubyonrails.org/2007/9/30/rails-2-0-0-preview-release'), ror_link: link_to(I18n.t('rest_help.activeresource.ror_link_text'), 'http://www.rubyonrails.org'), gem_command: 'gem install activeresource --source http://gems.rubyonrails.org --include-dependencies' -} %>

    +%>

     
    @@ -226,8 +226,8 @@ Loading development environment (Rails 1.2.4)
     
     
    -

    <%= raw I18n.t 'rest_help.activeresource.wrapper_description', { - signals_link: link_to(I18n.t('rest_help.activeresource.signals_link_text'), 'http://www.37signals.com')} %>

    +

    <%= raw I18n.t 'rest_help.activeresource.wrapper_description', + signals_link: link_to(I18n.t('rest_help.activeresource.signals_link_text'), 'http://www.37signals.com') %>

     
    @@ -246,13 +246,13 @@ irb(main):003:0>
     

    <%= t('rest_help.notes.description') %>

      -
    • <%= raw I18n.t 'rest_help.notes.bullet1', { +
    • <%= raw I18n.t 'rest_help.notes.bullet1', id: 'ID', - url: 'URL'} %>
    • -
    • <%= raw I18n.t 'rest_help.notes.bullet2', { - omit: '...' } %>
    • + url: 'URL' %> +
    • <%= raw I18n.t 'rest_help.notes.bullet2', + omit: '...' %>
    -

    <%= raw I18n.t 'rest_help.notes.curl_description', { - curl: link_to(I18n.t('rest_help.curl_link_text'), 'http://en.wikipedia.org/wiki/CURL')} %>

    +

    <%= raw I18n.t 'rest_help.notes.curl_description', + curl: link_to(I18n.t('rest_help.curl_link_text'), 'http://en.wikipedia.org/wiki/CURL') %>

    diff --git a/test/helpers/rendering_helper_test.rb b/test/helpers/rendering_helper_test.rb index 8aae34e9..14740710 100644 --- a/test/helpers/rendering_helper_test.rb +++ b/test/helpers/rendering_helper_test.rb @@ -28,7 +28,7 @@ class RenderingHelperTest < ActionView::TestCase end test "message link" do - expected = '

    Call message://<123>.

    ' + expected = '

    Call message://<123>.

    ' actual = render_text("Call message://<123>.") assert_equal(expected, actual) end From d1b4ee9e879fd4bbf5d70e62920bb0b4123e2ba4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Jan 2022 00:02:10 +0000 Subject: [PATCH 397/767] Bump kt-paperclip from 6.4.1 to 7.0.1 Bumps [kt-paperclip](https://github.com/kreeti/kt-paperclip) from 6.4.1 to 7.0.1. - [Release notes](https://github.com/kreeti/kt-paperclip/releases) - [Changelog](https://github.com/kreeti/kt-paperclip/blob/master/NEWS) - [Commits](https://github.com/kreeti/kt-paperclip/compare/v6.4.1...v7.0.1) --- updated-dependencies: - dependency-name: kt-paperclip dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/Gemfile b/Gemfile index 4c21623c..7b8b5dab 100644 --- a/Gemfile +++ b/Gemfile @@ -20,7 +20,7 @@ gem 'aasm', '~> 5.2.0' gem 'acts_as_list' gem 'bcrypt', '~> 3.1.16' gem 'htmlentities' -gem "kt-paperclip", "~> 6.4", ">= 6.4.1" +gem "kt-paperclip", "~> 7.0" gem 'puma', '~> 5.5' gem 'rails_autolink' gem 'RedCloth' diff --git a/Gemfile.lock b/Gemfile.lock index f1d97d33..ead9092e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -135,11 +135,11 @@ GEM rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) - kt-paperclip (6.4.1) + kt-paperclip (7.0.1) activemodel (>= 4.2.0) activesupport (>= 4.2.0) + marcel (~> 1.0.1) mime-types - mimemagic (~> 0.3.0) terrapin (~> 0.6.0) libv8 (3.16.14.19) listen (3.7.0) @@ -155,9 +155,6 @@ GEM mime-types (3.4.1) mime-types-data (~> 3.2015) mime-types-data (3.2021.1115) - mimemagic (0.3.10) - nokogiri (~> 1) - rake mini_mime (1.1.2) mini_portile2 (2.6.1) minitest (5.15.0) @@ -336,7 +333,7 @@ DEPENDENCIES i18n-tasks (~> 0.9.37) jquery-rails (~> 4.4) jquery-ui-rails (~> 6.0.1) - kt-paperclip (~> 6.4, >= 6.4.1) + kt-paperclip (~> 7.0) listen minitest-stub-const mocha From e165a561ae90913233b8249b56b2f8909c795699 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Tue, 4 Jan 2022 03:17:04 +0200 Subject: [PATCH 398/767] Bump the .ruby-version --- .ruby-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ruby-version b/.ruby-version index 95e3ba81..1effb003 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.5 +2.7 From f99b423445580a611913f372114d74cc9329695a Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Sat, 15 Jan 2022 10:59:56 +0200 Subject: [PATCH 399/767] Apparently Rubocop only works with up to 2.5, so let's use that then for it. --- .ruby-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ruby-version b/.ruby-version index 1effb003..95e3ba81 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.7 +2.5 From 4b95fc4af7ebe08b0a17794c156152778a0684c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 15 Jan 2022 18:14:02 +0000 Subject: [PATCH 400/767] Bump tolk from 4.1.0 to 4.1.1 Bumps [tolk](https://github.com/tolk/tolk) from 4.1.0 to 4.1.1. - [Release notes](https://github.com/tolk/tolk/releases) - [Changelog](https://github.com/tolk/tolk/blob/master/CHANGELOG.md) - [Commits](https://github.com/tolk/tolk/compare/v4.1.0...v4.1.1) --- updated-dependencies: - dependency-name: tolk dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Gemfile b/Gemfile index 7b8b5dab..98e8e2fb 100644 --- a/Gemfile +++ b/Gemfile @@ -40,7 +40,7 @@ group :development do gem 'spring' gem 'yard' - gem 'tolk', '~> 4.1.0' + gem 'tolk', '~> 4.1.1' gem 'bullet' gem 'rack-mini-profiler' diff --git a/Gemfile.lock b/Gemfile.lock index ead9092e..7b25066b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -105,7 +105,7 @@ GEM factory_bot_rails (6.2.0) factory_bot (~> 6.2.0) railties (>= 5.0.0) - ffi (1.15.3) + ffi (1.15.5) font-awesome-sass (5.15.1) sassc (>= 1.11) globalid (1.0.0) @@ -156,14 +156,14 @@ GEM mime-types-data (~> 3.2015) mime-types-data (3.2021.1115) mini_mime (1.1.2) - mini_portile2 (2.6.1) + mini_portile2 (2.7.1) minitest (5.15.0) minitest-stub-const (0.6) mocha (1.13.0) mysql2 (0.5.3) nio4r (2.5.8) - nokogiri (1.12.5) - mini_portile2 (~> 2.6.1) + nokogiri (1.13.1) + mini_portile2 (~> 2.7.0) racc (~> 1.4) parallel (1.21.0) parser (3.1.0.0) @@ -287,13 +287,14 @@ GEM therubyracer (0.12.3) libv8 (~> 3.16.14.15) ref - thor (1.1.0) + thor (1.2.1) thread_safe (0.3.6) tilt (2.0.10) - tolk (4.1.0) + tolk (4.1.1) rails (>= 5.0) safe_yaml (>= 0.8.6) sassc + sprockets-rails (~> 3.4) tracks-chartjs-ror (3.6.4) rails (>= 3.1) tzinfo (1.2.9) @@ -354,7 +355,7 @@ DEPENDENCIES spring sqlite3 therubyracer - tolk (~> 4.1.0) + tolk (~> 4.1.1) tracks-chartjs-ror uglifier (>= 1.3.0) will_paginate From c660f275e0a15136749a530fb3960a2741824f5a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 15 Jan 2022 18:14:16 +0000 Subject: [PATCH 401/767] Bump listen from 3.7.0 to 3.7.1 Bumps [listen](https://github.com/guard/listen) from 3.7.0 to 3.7.1. - [Release notes](https://github.com/guard/listen/releases) - [Commits](https://github.com/guard/listen/compare/v3.7.0...v3.7.1) --- updated-dependencies: - dependency-name: listen dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index ead9092e..de58da68 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -105,7 +105,7 @@ GEM factory_bot_rails (6.2.0) factory_bot (~> 6.2.0) railties (>= 5.0.0) - ffi (1.15.3) + ffi (1.15.5) font-awesome-sass (5.15.1) sassc (>= 1.11) globalid (1.0.0) @@ -142,7 +142,7 @@ GEM mime-types terrapin (~> 0.6.0) libv8 (3.16.14.19) - listen (3.7.0) + listen (3.7.1) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) loofah (2.13.0) From 771c24154d6a8a090f211548791bf1dc6291b029 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jan 2022 00:09:20 +0000 Subject: [PATCH 402/767] Bump bullet from 7.0.0 to 7.0.1 Bumps [bullet](https://github.com/flyerhzm/bullet) from 7.0.0 to 7.0.1. - [Release notes](https://github.com/flyerhzm/bullet/releases) - [Changelog](https://github.com/flyerhzm/bullet/blob/master/CHANGELOG.md) - [Commits](https://github.com/flyerhzm/bullet/compare/7.0.0...7.0.1) --- updated-dependencies: - dependency-name: bullet dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 215b3457..53ba8b58 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -78,7 +78,7 @@ GEM autoprefixer-rails (>= 5.2.1) sassc (>= 2.0.0) builder (3.2.4) - bullet (7.0.0) + bullet (7.0.1) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) byebug (11.1.3) From 279cfffeb0d382fdf8a691eac71c41c907debd76 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jan 2022 00:09:54 +0000 Subject: [PATCH 403/767] Bump rspec-expectations from 3.10.1 to 3.10.2 Bumps [rspec-expectations](https://github.com/rspec/rspec-expectations) from 3.10.1 to 3.10.2. - [Release notes](https://github.com/rspec/rspec-expectations/releases) - [Changelog](https://github.com/rspec/rspec-expectations/blob/main/Changelog.md) - [Commits](https://github.com/rspec/rspec-expectations/compare/v3.10.1...v3.10.2) --- updated-dependencies: - dependency-name: rspec-expectations dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 215b3457..1a1526a6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -95,7 +95,7 @@ GEM concurrent-ruby (1.1.9) crass (1.0.6) database_cleaner (1.8.5) - diff-lcs (1.4.4) + diff-lcs (1.5.0) docile (1.3.4) e2mmap (0.1.0) erubi (1.10.0) @@ -222,10 +222,10 @@ GEM reverse_markdown (2.1.1) nokogiri rexml (3.2.5) - rspec-expectations (3.10.1) + rspec-expectations (3.10.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.10.0) - rspec-support (3.10.1) + rspec-support (3.10.3) rubocop (1.24.1) parallel (~> 1.10) parser (>= 3.0.0.0) From 57dd37ada3b87e13b186ee59b54b9be714813ce3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jan 2022 00:02:39 +0000 Subject: [PATCH 404/767] Bump rubocop from 1.24.1 to 1.25.0 Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.24.1 to 1.25.0. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.24.1...v1.25.0) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 98e8e2fb..f3999cd2 100644 --- a/Gemfile +++ b/Gemfile @@ -52,7 +52,7 @@ end group :development, :test do gem 'byebug' gem 'listen' - gem 'rubocop', '~> 1.24', require: false + gem 'rubocop', '~> 1.25', require: false end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index 96351388..6b631d37 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -212,7 +212,7 @@ GEM method_source rake (>= 0.8.7) thor (>= 0.20.3, < 2.0) - rainbow (3.0.0) + rainbow (3.1.1) rake (13.0.6) rb-fsevent (0.11.0) rb-inotify (0.10.1) @@ -226,9 +226,9 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.10.0) rspec-support (3.10.3) - rubocop (1.24.1) + rubocop (1.25.0) parallel (~> 1.10) - parser (>= 3.0.0.0) + parser (>= 3.1.0.0) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml @@ -347,7 +347,7 @@ DEPENDENCIES rails-dom-testing (~> 2.0.0) rails_autolink rspec-expectations - rubocop (~> 1.24) + rubocop (~> 1.25) sanitize (~> 6.0) sassc-rails (~> 2.1.2) simplecov From c22ce009510aa1a3f1c81d63a20252e587eb3644 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jan 2022 00:06:00 +0000 Subject: [PATCH 405/767] Bump solargraph from 0.44.2 to 0.44.3 Bumps [solargraph](https://github.com/castwide/solargraph) from 0.44.2 to 0.44.3. - [Release notes](https://github.com/castwide/solargraph/releases) - [Changelog](https://github.com/castwide/solargraph/blob/master/CHANGELOG.md) - [Commits](https://github.com/castwide/solargraph/compare/v0.44.2...v0.44.3) --- updated-dependencies: - dependency-name: solargraph dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 96351388..c5d53e5e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -212,7 +212,7 @@ GEM method_source rake (>= 0.8.7) thor (>= 0.20.3, < 2.0) - rainbow (3.0.0) + rainbow (3.1.1) rake (13.0.6) rb-fsevent (0.11.0) rb-inotify (0.10.1) @@ -256,7 +256,7 @@ GEM simplecov_json_formatter (~> 0.1) simplecov-html (0.12.3) simplecov_json_formatter (0.1.2) - solargraph (0.44.2) + solargraph (0.44.3) backport (~> 1.2) benchmark bundler (>= 1.17.2) From 86e14120a20d6fb475fbce59e5f7a12feb69a0c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 Jan 2022 00:02:13 +0000 Subject: [PATCH 406/767] Bump puma from 5.5.2 to 5.6.1 Bumps [puma](https://github.com/puma/puma) from 5.5.2 to 5.6.1. - [Release notes](https://github.com/puma/puma/releases) - [Changelog](https://github.com/puma/puma/blob/master/History.md) - [Commits](https://github.com/puma/puma/compare/v5.5.2...v5.6.1) --- updated-dependencies: - dependency-name: puma dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index f3999cd2..d1fdbb7e 100644 --- a/Gemfile +++ b/Gemfile @@ -21,7 +21,7 @@ gem 'acts_as_list' gem 'bcrypt', '~> 3.1.16' gem 'htmlentities' gem "kt-paperclip", "~> 7.0" -gem 'puma', '~> 5.5' +gem 'puma', '~> 5.6' gem 'rails_autolink' gem 'RedCloth' gem 'sanitize', '~> 6.0' diff --git a/Gemfile.lock b/Gemfile.lock index 63420825..546f8f1c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -169,7 +169,7 @@ GEM parser (3.1.0.0) ast (~> 2.4.1) pg (1.2.3) - puma (5.5.2) + puma (5.6.1) nio4r (~> 2.0) racc (1.6.0) rack (2.2.3) @@ -340,7 +340,7 @@ DEPENDENCIES mocha mysql2 (~> 0.5.3) pg (~> 1.2.3) - puma (~> 5.5) + puma (~> 5.6) rack-mini-profiler rails (~> 6.0.4) rails-controller-testing From a37817a90b5e28509c71f54c0d9da36d9c98f61c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Jan 2022 09:44:10 +0000 Subject: [PATCH 407/767] Bump pg from 1.2.3 to 1.3.0 Bumps [pg](https://github.com/ged/ruby-pg) from 1.2.3 to 1.3.0. - [Release notes](https://github.com/ged/ruby-pg/releases) - [Changelog](https://github.com/ged/ruby-pg/blob/master/History.rdoc) - [Commits](https://github.com/ged/ruby-pg/compare/v1.2.3...v1.3.0) --- updated-dependencies: - dependency-name: pg dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index d1fdbb7e..70acd47e 100644 --- a/Gemfile +++ b/Gemfile @@ -34,7 +34,7 @@ gem 'therubyracer', group: :therubyracer # Use --without argument to skip unnecessary drivers gem 'sqlite3', group: :sqlite gem 'mysql2', '~> 0.5.3', group: :mysql -gem 'pg', '~> 1.2.3', group: :postgresql +gem 'pg', '~> 1.3.0', group: :postgresql group :development do gem 'spring' diff --git a/Gemfile.lock b/Gemfile.lock index 546f8f1c..77e80383 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -168,7 +168,7 @@ GEM parallel (1.21.0) parser (3.1.0.0) ast (~> 2.4.1) - pg (1.2.3) + pg (1.3.0) puma (5.6.1) nio4r (~> 2.0) racc (1.6.0) @@ -339,7 +339,7 @@ DEPENDENCIES minitest-stub-const mocha mysql2 (~> 0.5.3) - pg (~> 1.2.3) + pg (~> 1.3.0) puma (~> 5.6) rack-mini-profiler rails (~> 6.0.4) From a6d70a05a1a8f830fb2b2de47428613fdc65e235 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Mon, 31 Jan 2022 12:06:47 +0200 Subject: [PATCH 408/767] Add Obsidian support to the link sanitation --- app/helpers/rendering_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/rendering_helper.rb b/app/helpers/rendering_helper.rb index 60c6b3c6..956e93d9 100644 --- a/app/helpers/rendering_helper.rb +++ b/app/helpers/rendering_helper.rb @@ -27,7 +27,7 @@ module RenderingHelper config = relaxed_config # add onenote and message protocols, allow a target - a_href_config = relaxed_config[:protocols]['a']['href'] + %w(onenote message) + a_href_config = relaxed_config[:protocols]['a']['href'] + %w[onenote message obsidian] a_attributes = relaxed_config[:attributes]['a'] + ['target'] config = Sanitize::Config.merge(config, protocols: { 'a' => { 'href' => a_href_config } }, :attributes => { 'a' => a_attributes }) From 9e09972d031af0c131d953343c4c623cf5657a4e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Feb 2022 00:02:33 +0000 Subject: [PATCH 409/767] Bump pg from 1.3.0 to 1.3.1 Bumps [pg](https://github.com/ged/ruby-pg) from 1.3.0 to 1.3.1. - [Release notes](https://github.com/ged/ruby-pg/releases) - [Changelog](https://github.com/ged/ruby-pg/blob/master/History.rdoc) - [Commits](https://github.com/ged/ruby-pg/compare/v1.3.0...v1.3.1) --- updated-dependencies: - dependency-name: pg dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 70acd47e..bd3019de 100644 --- a/Gemfile +++ b/Gemfile @@ -34,7 +34,7 @@ gem 'therubyracer', group: :therubyracer # Use --without argument to skip unnecessary drivers gem 'sqlite3', group: :sqlite gem 'mysql2', '~> 0.5.3', group: :mysql -gem 'pg', '~> 1.3.0', group: :postgresql +gem 'pg', '~> 1.3.1', group: :postgresql group :development do gem 'spring' diff --git a/Gemfile.lock b/Gemfile.lock index 77e80383..1c0a86c0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -168,7 +168,7 @@ GEM parallel (1.21.0) parser (3.1.0.0) ast (~> 2.4.1) - pg (1.3.0) + pg (1.3.1) puma (5.6.1) nio4r (~> 2.0) racc (1.6.0) @@ -339,7 +339,7 @@ DEPENDENCIES minitest-stub-const mocha mysql2 (~> 0.5.3) - pg (~> 1.3.0) + pg (~> 1.3.1) puma (~> 5.6) rack-mini-profiler rails (~> 6.0.4) From 7a9dd6cd6fe3ffca942b08a6838cbf3001b847fc Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 3 Feb 2022 11:44:26 +0200 Subject: [PATCH 410/767] Add the obsidian link support to config also. Fix poll-for-db. --- Dockerfile | 2 +- config/initializers/sanitizer.rb | 2 +- script/poll-for-db | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index db32b135..6faeffe5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ RUN bundle install --jobs 4 RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list -RUN apt-get update && apt-get install -y yarn +RUN apt-get update && apt-get install -y yarn netcat RUN mkdir /app/log diff --git a/config/initializers/sanitizer.rb b/config/initializers/sanitizer.rb index 46ca6ebd..7f6a5e32 100644 --- a/config/initializers/sanitizer.rb +++ b/config/initializers/sanitizer.rb @@ -7,4 +7,4 @@ safe_list = Loofah::HTML5::WhiteList end -safe_list::ALLOWED_PROTOCOLS.merge(%w(message onenote)) +safe_list::ALLOWED_PROTOCOLS.merge(%w(message onenote obsidian)) diff --git a/script/poll-for-db b/script/poll-for-db index f6877f34..05b1db4b 100755 --- a/script/poll-for-db +++ b/script/poll-for-db @@ -1,10 +1,12 @@ #!/bin/bash +echo "==> Polling DB…" + appdir=$(cd $(dirname "$0")/.. && pwd) [ -f /etc/app-env ] || exec "$appdir/script/docker-environment" $0 $@ for i in {1..60}; do - curl -sf telnet://db:3306 >/dev/null && exit + nc -z -w5 db 3306 && exit sleep 1 done From a58b0c77b0c815e6325b72158398684c66dea667 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Feb 2022 00:02:07 +0000 Subject: [PATCH 411/767] Bump rubocop from 1.25.0 to 1.25.1 Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.25.0 to 1.25.1. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.25.0...v1.25.1) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 77e80383..5121835a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -226,7 +226,7 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.10.0) rspec-support (3.10.3) - rubocop (1.25.0) + rubocop (1.25.1) parallel (~> 1.10) parser (>= 3.1.0.0) rainbow (>= 2.2.2, < 4.0) From 5eddac7731e8aac7033079cff8de61bd4abf1cd0 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Fri, 7 Jan 2022 12:41:46 +0000 Subject: [PATCH 412/767] Translated using Weblate (English) Currently translated at 99.0% (1105 of 1116 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/en/ --- config/locales/en.yml | 114 +++++++++++++++++++++++++++--------------- 1 file changed, 73 insertions(+), 41 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 47df204d..38e489d4 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -96,9 +96,8 @@ en: action: Action actions: Actions actions_midsentence: - one: action - other: actions - zero: actions + one: actions + other: action add: Add ajaxError: There was an error retrieving from server back: Back @@ -110,9 +109,8 @@ en: contribute: Contribute create: Create days_midsentence: - one: day - other: days - zero: days + one: days + other: day deferred: deferred description: Description drag_handle: DRAG @@ -131,9 +129,8 @@ en: none: None not_available_abbr: n/a note: - one: 1 notes - other: "%{count} notes" - zero: no notes + one: no notes + other: 1 notes notes: Notes numbered_step: Step %{number} ok: Ok @@ -320,13 +317,11 @@ en: other: almost %{count} years half_a_minute: half a minute less_than_x_minutes: - one: less than a minute - other: less than %{count} minutes - zero: less than 1 minute + one: less than 1 minute + other: less than a minute less_than_x_seconds: one: less than 1 second - other: less than %{count} seconds - zero: less than 1 second + other: less than 1 second over_x_years: one: over 1 year other: over %{count} years @@ -1325,13 +1320,11 @@ en: multi_page_html: Displaying %{model} %{from} - %{to} of %{count} in total single_page: - one: Displaying 1 %{model} - other: Displaying all %{count} %{model} - zero: No %{model} found + one: No %{model} found + other: Displaying 1 %{model} single_page_html: - one: Displaying 1 %{model} - other: Displaying all %{count} %{model} - zero: No %{model} found + one: No %{model} found + other: Displaying 1 %{model} page_gap: "…" previous_label: "← Previous" auth_type: @@ -1342,49 +1335,88 @@ en: curl_link_text: cURL intro: title: Introduction - content: Tracks is designed to be integrated with scripts, web services, and third-party applications. This page serves as the documentation of our REST API. - content_2: The Tracks REST API allows developers to integrate Tracks into their applications. It allows applications to access and modify Tracks data, and is implemented as Vanilla XML over HTTP. - content_3: The API is a %{restful_link} service. All data is available through the API as a resource to which can be referred using a unique identifier. It responds to a number of the HTTP methods, specifically GET, PUT, POST and UPDATE, and all responses from the API are in a simple XML format encoded as UTF-8. + content: Tracks is designed to be integrated with scripts, web services, and + third-party applications. This page serves as the documentation of our REST + API. + content_2: The Tracks REST API allows developers to integrate Tracks into their + applications. It allows applications to access and modify Tracks data, and + is implemented as Vanilla XML over HTTP. + content_3: The API is a %{restful_link} service. All data is available through + the API as a resource to which can be referred using a unique identifier. + It responds to a number of the HTTP methods, specifically GET, PUT, POST and + UPDATE, and all responses from the API are in a simple XML format encoded + as UTF-8. restful_link_text: RESTful auth: title: Authentication - content: Authentication is handled using %{auth_link}. Your Tracks username and password is used as the authentication credentials for the API. Note that in Basic HTTP authentication, your password is sent in clear text. If you need a more secure authentication solution, you should configure your web server to run Tracks under HTTPS. + content: Authentication is handled using %{auth_link}. Your Tracks username + and password is used as the authentication credentials for the API. Note that + in Basic HTTP authentication, your password is sent in clear text. If you + need a more secure authentication solution, you should configure your web + server to run Tracks under HTTPS. basic_auth_link_text: Basic HTTP authentication retrieve: title: Retrieving data from the API - content: 'To retrieve data you only need to do an HTTP GET on a resource identifier. For example, if you want to get all the contexts with %{curl_link}:' + content: 'To retrieve data you only need to do an HTTP GET on a resource identifier. + For example, if you want to get all the contexts with %{curl_link}:' single_context: 'Getting a single context:' todos_from_context: 'Getting the todos within a context:' - projects: You also can apply the pattern shown above with projects instead of contexts. + projects: You also can apply the pattern shown above with projects instead of + contexts. paths_title: 'All data is available according to the following resource paths:' - limit: 'For the todo resources (todos, tickler, done, hidden and calendar) you can limit the returnedfield to %{fields} by adding the parameter %{limit_parameter} and setting it to %{set_to}. For example:' - active_todos: 'If you only want to get the active todos, you add the parameter %{active_code} and set it to some value like this:' + limit: 'For the todo resources (todos, tickler, done, hidden and calendar) you + can limit the returnedfield to %{fields} by adding the parameter %{limit_parameter} + and setting it to %{set_to}. For example:' + active_todos: 'If you only want to get the active todos, you add the parameter + %{active_code} and set it to some value like this:' writing: title: Writing to the API - description: The API provides mechanisms for adding, updating and deleting resources using the HTTP methods %{put}, %{post} and %{delete} in combination with the content. + description: The API provides mechanisms for adding, updating and deleting resources + using the HTTP methods %{put}, %{post} and %{delete} in combination with the + content. example_title: 'Creating a new project, using curl:' example_project_name: Build a treehouse for the kids - example_project_response_title: 'The response is an %{response_code} with %{header} header indicating where the new project resource can be found. Now we can add a todo to this project, using curl:' + example_project_response_title: 'The response is an %{response_code} with %{header} + header indicating where the new project resource can be found. Now we can + add a todo to this project, using curl:' example_todo_name: Model treehouse in SketchUp - example_todo_response_title: 'The response is a again an %{response_code} with %{header} header indicating where the new todo resource can be found. Changing the todo notes, again using curl:' + example_todo_response_title: 'The response is a again an %{response_code} with + %{header} header indicating where the new todo resource can be found. Changing + the todo notes, again using curl:' example_note_text: use maple texture - example_note_response_title: 'The response is an %{response_code} with in the body the XML representation of the updated todo. We provide a shorcut method to toggle a todo done or undone without having to perform the update with the right field values:' - example_delete_title: 'If we want to delete that todo we can call its unique resource identifier (the URL) with the HTTP method %{delete}, again with curl:' - example_delete_response_title: The API returns an %{response_code} and the todo is now deleted. + example_note_response_title: 'The response is an %{response_code} with in the + body the XML representation of the updated todo. We provide a shorcut method + to toggle a todo done or undone without having to perform the update with + the right field values:' + example_delete_title: 'If we want to delete that todo we can call its unique + resource identifier (the URL) with the HTTP method %{delete}, again with curl:' + example_delete_response_title: The API returns an %{response_code} and the todo + is now deleted. response: title: Dealing with the response and response status - description: All successful operations respond with a status code of %{response_200} or %{response_201} depending on the operation. Sometimes a list, say %{example_call} will not have any items, it will return an empty list. - xml_description: 'The XML for empty list responses look like this, again with curl:' + description: All successful operations respond with a status code of %{response_200} + or %{response_201} depending on the operation. Sometimes a list, say %{example_call} + will not have any items, it will return an empty list. + xml_description: 'The XML for empty list responses look like this, again with + curl:' activeresource: title: Consuming the API with ActiveResource - description: '%{activeresource_link} is a thin but powerful wrapper around RESTful services exposed by %{ror_link}. It will be part of Rails 2.0 but until then you can get it with %{gem_command}.' + description: '%{activeresource_link} is a thin but powerful wrapper around RESTful + services exposed by %{ror_link}. It will be part of Rails 2.0 but until then + you can get it with %{gem_command}.' activeresource_link_text: ActiveResource ror_link_text: Ruby on Rails - wrapper_description: 'Inspired by %{signals_link} ’s Highrise wrapper, we’ve put together a small ruby wrapper (find it in the doc/ directory) for the API which sets up the ActiveResource models for you to play with in an IRB session:' + wrapper_description: 'Inspired by %{signals_link} ’s Highrise wrapper, + we’ve put together a small ruby wrapper (find it in the doc/ directory) + for the API which sets up the ActiveResource models for you to play with in + an IRB session:' signals_link_text: 37 Signals notes: title: Notes about the documentation - description: 'A few conventions have been applied in the documentation, these are:' - bullet1: '%{id}’s in a resource %{url} indicate that the resource’s unique ID needs to be inserted there' - bullet2: '%{omit} indicates that unimportant bits of response data have been removed to eliminate noise from the documentation' + description: 'A few conventions have been applied in the documentation, these + are:' + bullet1: '%{id}’s in a resource %{url} indicate that the resource’s + unique ID needs to be inserted there' + bullet2: '%{omit} indicates that unimportant bits of response data have been + removed to eliminate noise from the documentation' curl_description: 'All examples make use of %{curl}.' From 1b8a6d732aeff65bc8e4580444928d2c45845af2 Mon Sep 17 00:00:00 2001 From: Francisco Serrador Date: Thu, 13 Jan 2022 19:26:42 +0000 Subject: [PATCH 413/767] Translated using Weblate (Spanish) Currently translated at 88.2% (985 of 1116 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/es/ --- config/locales/es.yml | 239 ++++++++++++++++++++++++++---------------- 1 file changed, 151 insertions(+), 88 deletions(-) diff --git a/config/locales/es.yml b/config/locales/es.yml index d832b127..73996c78 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1,4 +1,3 @@ ---- es: activerecord: attributes: @@ -26,6 +25,8 @@ es: title_date_format: Título del formato de fecha verbose_action_descriptors: Descriptores detallado de acción week_starts: La semana comienza + theme: Tema + email: Correo-e project: default_context_name: Default contexto default_tags: Etiquetas estándar @@ -49,6 +50,8 @@ es: login: Login open_id_url: OpenID URL password: Password + created_at: Creado en + last_login_at: Última presentación en errors: full_messages: format: "%{attribute} %{message}" @@ -70,8 +73,10 @@ es: odd: tiene que ser impar record_invalid: 'Validation failed: %{errors}' restrict_dependent_destroy: - many: Невозможно удалить запись, так как есть %{record} зависящие от нее one: Невозможно удалить запись, так как есть %{record} зависящая от нее + other: Невозможно удалить запись, так как есть %{record} зависящие от нее + has_one: No se puede borrar la grabación porque existe un %{record} dependiente + has_many: No se puede borrar la grabación porque existe %{record} dependiente taken: Ya se ha dado too_long: es demasiado largo (el máximo es %{count} caracteres) too_short: es demasiado corto (mínimo %{count} caracteres) @@ -87,14 +92,13 @@ es: body: 'Hubo problemas con los campos siguientes:' header: one: Un error esta prohibido %{model} se guarden - other: "%{count} errores prohíbe este %{model} que se guarden" + other: '%{count} errores prohíbe este %{model} que se guarden' common: action: Tarea actions: Tareas actions_midsentence: - one: tarea - other: tareas - zero: tareas + one: tareas + other: tarea add: Añadir ajaxError: Hubo un error al recuperar desde el servidor back: Atrás @@ -106,9 +110,8 @@ es: contribute: Contribuir create: Crear days_midsentence: - one: día - other: días - zero: días + one: días + other: día deferred: pospuestas description: Descripción drag_handle: ARRASTRAR @@ -127,9 +130,8 @@ es: none: Ninguno not_available_abbr: n/e note: - one: 1 nota - other: "%{count} notas" - zero: 0 notas + one: 0 notas + other: 1 nota notes: Notas numbered_step: Paso %{number} ok: Ok @@ -145,11 +147,13 @@ es: show_all: Mostrar todo sort: alphabetically: Alfabéticamente - alphabetically_confirm: "¿Está seguro que desea ordenar los proyectos por orden alfabético? Esto reemplazará el orden existente." + alphabetically_confirm: "¿Está seguro que desea ordenar los proyectos por orden\ + \ alfabético? Esto reemplazará el orden existente." alphabetically_title: Proyectos de ordenar alfabéticamente by_task_count: Por número de tareas by_task_count_title: Ordenar por número de tareas - by_task_count_title_confirm: "¿Está seguro que desea ordenar los proyectos por el número de tareas? Esto reemplazará el orden existente." + by_task_count_title_confirm: "¿Está seguro que desea ordenar los proyectos por\ + \ el número de tareas? Esto reemplazará el orden existente." sort: Ordenar third: Tercero todo: Todo @@ -160,14 +164,18 @@ es: wiki: Wiki contexts: add_context: Añadir contexto - all_completed_tasks_title: 'TRACKS:: Todas las acciones completadas en ''%{context_name}'' contexto' - completed_tasks_title: 'TRACKS:: Las acciones completadas en ''%{context_name}'' el contexto' + all_completed_tasks_title: 'TRACKS:: Todas las acciones completadas en ''%{context_name}'' + contexto' + completed_tasks_title: 'TRACKS:: Las acciones completadas en ''%{context_name}'' + el contexto' context_deleted: Contexto eliminado '%{name}' context_hide: "¿Esconder de la página principal?" context_name: Nombre del contexto context_state: Context state delete_context: Eliminar contexto - delete_context_confirmation: "¿Está seguro que desea eliminar '%{name}' el contexto? Tenga en cuenta que esto también se eliminarán todas las acciones (la repetición) en este contexto!" + delete_context_confirmation: "¿Está seguro que desea eliminar '%{name}' el contexto?\ + \ Tenga en cuenta que esto también se eliminarán todas las acciones (la repetición)\ + \ en este contexto!" delete_context_title: Eliminar contexto edit_context: Editar contexto hidden_contexts: Contextos ocultos @@ -197,7 +205,8 @@ es: some: Han ocurrido algunos errores durante la importación file_blank: File can't be blank invalid_csv: "Invalid CSV: could not read headers: %{e}" - save_error: "Could not save uploaded CSV (%{path_and_file}). Can Tracks write to the upload directory? %{e}" + save_error: "Could not save uploaded CSV (%{path_and_file}). Can Tracks write\ + \ to the upload directory? %{e}" map_title: Map fields to be imported header: Importing data submit: Import @@ -208,21 +217,30 @@ es: projects_count: "%{count} Projects imported" todos_count: "%{count} Todos imported" yaml_disabled: "YAML loading is disabled" - yaml_warning: "%{warning}: all your current data will be destroyed before importing the YAML file, so if you have access to the database, we strongly recommend backing up the database right now in case that anything goes wrong." - paste_field: "Paste the contents of the YAML file you exported into the text box below:" + yaml_warning: "%{warning}: all your current data will be destroyed before importing\ + \ the YAML file, so if you have access to the database, we strongly recommend\ + \ backing up the database right now in case that anything goes wrong." + paste_field: "Paste the contents of the YAML file you exported into the text\ + \ box below:" warning: Beware export: page_title: Tracks::Export title: Exportar datos format_header: "Puede escoger entre los siguientes formatos:" yaml_description: "%{yaml}: Mejor formato para exportar datos." - yaml_link_description: Fichero YAML con todas sus acciones, contextos, proyectos, etiquetas y notas - yaml_experimental: "Por favor tenga en cuenta que la importación de ficheros YAML actualmente esta soportada de forma experimental. No confíe en este formato para hacer copias de seguridad de datos importantes." - csv_description: "%{csv}: Mejor formato para importar en una hoja de cálculo o en programas de análisis de datos." - csv_actions_description: Fichero CSV con todas sus acciones, con contextos por nombre y proyectos + yaml_link_description: Fichero YAML con todas sus acciones, contextos, proyectos, + etiquetas y notas + yaml_experimental: "Por favor tenga en cuenta que la importación de ficheros\ + \ YAML actualmente esta soportada de forma experimental. No confíe en este\ + \ formato para hacer copias de seguridad de datos importantes." + csv_description: "%{csv}: Mejor formato para importar en una hoja de cálculo\ + \ o en programas de análisis de datos." + csv_actions_description: Fichero CSV con todas sus acciones, con contextos por + nombre y proyectos csv_notes_description: Fichero CSV con todas sus notas xml_description: "%{xml}: Mejor formato para transformar los datos a otro formato" - xml_link_description: Fichero XML con todas sus acciones, contextos, proyectos, etiquetas y notas + xml_link_description: Fichero XML con todas sus acciones, contextos, proyectos, + etiquetas y notas download_link: Enlace de descarga yaml_link_title: Fichero YAML csv_actions_title: Fichero CSV (acciones, contextos y proyectos) @@ -300,28 +318,26 @@ es: other: Casi %{count} años half_a_minute: medio minuto less_than_x_minutes: - one: menos de un minuto - other: menos de %{count} minutos - zero: menos de 1 minuto + one: menos de 1 minuto + other: menos de un minuto less_than_x_seconds: one: menos de 1 segundo - other: menos de %{count} segundos - zero: menos de 1 segundo + other: menos de 1 segundo over_x_years: one: más de 1 año other: en %{count} años x_days: one: 1 día - other: "%{count} días" + other: '%{count} días' x_minutes: one: 1 minuto - other: "%{count} minutos" + other: '%{count} minutos' x_months: one: 1 mes - other: "%{count} meses" + other: '%{count} meses' x_seconds: one: Un segundo - other: "%{count} segundos" + other: '%{count} segundos' prompts: day: Día hour: Hora @@ -354,7 +370,8 @@ es: too_long: 'слишком длинное (максимум: %{count} символов)' too_short: 'слишком кроткое (минимум: %{count} символов)' wrong_length: неверной длины (должно быть %{count} символов) - user_unauthorized: '401 No autorizado: Solo los usuarios administrativos pueden acceder a esta función.' + user_unauthorized: '401 No autorizado: Solo los usuarios administrativos pueden + acceder a esta función.' feedlist: actions_completed_last_week: Tareas completadas en los últimos 7 días actions_due_next_week: Tareas pendientes en 7 días o menos @@ -367,14 +384,17 @@ es: choose_context: Elija el contexto en el que desea un canal de choose_project: Elegir el proyecto que quiere un canal de context_centric_actions: Feeds de acciones incompletas en un contexto específico - context_needed: Es necesario que haya al menos un contexto antes de poder solicitar un feed + context_needed: Es necesario que haya al menos un contexto antes de poder solicitar + un feed ical_feed: iCal alimentación last_fixed_number: Última/s %{number} accion/es legend: 'Leyenda:' - notice_incomplete_only: 'Nota: Todos los alimentos muestran sólo las acciones que no han sido marcadas como realizadas, a menos que se indique lo contrario.' + notice_incomplete_only: 'Nota: Todos los alimentos muestran sólo las acciones + que no han sido marcadas como realizadas, a menos que se indique lo contrario.' plain_text_feed: Canal Texto sin formato project_centric: Feeds de acciones incompletas en un proyecto específico - project_needed: Es necesario que haya al menos un proyecto antes de poder solicitar un feed + project_needed: Es necesario que haya al menos un proyecto antes de poder solicitar + un feed projects_and_actions: Proyectos activos con sus acciones rss_feed: RSS Feed select_feed_for_context: Seleccione la alimentación de este contexto @@ -392,11 +412,14 @@ es: opensearch_description: Buscar en las Tracks help: title: Help - usage: 'You can find information on the usage in the %{manual_link} in the project GitHub wiki.' + usage: 'You can find information on the usage in the %{manual_link} in the project + GitHub wiki.' manual_link_text: User manual - bugs: 'If you encounter a bug or have a feature request, please report it in the %{issue_link}.' + bugs: 'If you encounter a bug or have a feature request, please report it in the + %{issue_link}.' issue_link_text: issue queue - contribute: 'We gladly welcome all contributions to Tracks. Check the %{contribute_link} for further information. You can also come discuss with the community:' + contribute: 'We gladly welcome all contributions to Tracks. Check the %{contribute_link} + for further information. You can also come discuss with the community:' contribute_link_text: project website mailing_list_link_text: Mailing list irc_bullet: '%{irc_link} (also available in %{matrix_link})' @@ -506,8 +529,10 @@ es: todo: error_date_must_be_future: must be a date in the future user: - error_context_not_associated: Context id %{context} not associated with user id %{user}. - error_project_not_associated: Project id %{project} not associated with user id %{user}. + error_context_not_associated: Context id %{context} not associated with user + id %{user}. + error_project_not_associated: Project id %{project} not associated with user + id %{user}. notes: delete_confirmation: Are you sure that you want to delete the note '%{id}'? delete_item_title: Delete item @@ -516,7 +541,8 @@ es: deleted_note: Deleted note '%{id}' edit_item_title: Edit item in_project: 'En:' - no_notes_available: 'Currently there are no notes: add notes to projects from individual project pages.' + no_notes_available: 'Currently there are no notes: add notes to projects from + individual project pages.' note_header: Note %{id} note_link_title: Show note %{id} note_location_link: 'In:' @@ -578,14 +604,17 @@ es: current_authentication_type: Your authentication type is %{auth_type} edit_preferences: Edit preferences generate_new_token: Generate a new token - generate_new_token_confirm: Are you sure? Generating a new token will replace the existing one and break any external usages of this token. + generate_new_token_confirm: Are you sure? Generating a new token will replace + the existing one and break any external usages of this token. is_false: 'false' is_true: 'true' open_id_url: Your OpenID URL is page_title: TRACKS::Preferences page_title_edit: TRACKS::Edit Preferences password_changed: Que ha cambiado la contraseña, por favor vuelve a iniciar sesión. - remove_introduction: You can remove your user account here. Note that this is irreversible and will remove all your data! After removal you will be logged out. + remove_introduction: You can remove your user account here. Note that this is + irreversible and will remove all your data! After removal you will be logged + out. show_number_completed: Show %{number} completed items sms_context_none: None staleness_starts_after: Staleness starts after %{days} days @@ -605,11 +634,13 @@ es: add_note: Añadir una nota add_note_submit: Añadir nota add_project: Añadir Proyecto - all_completed_tasks_title: 'TRACKS:: Lista de todas las acciones terminado en ''%{project_name}'' Proyecto' + all_completed_tasks_title: 'TRACKS:: Lista de todas las acciones terminado en + ''%{project_name}'' Proyecto' completed_actions: Completed actions completed_actions_empty: Completed actions empty completed_projects: Proyectos completados - completed_tasks_title: 'TRACKS:: Lista de Acciones completadas en ''%{project_name}'' Proyecto' + completed_tasks_title: 'TRACKS:: Lista de Acciones completadas en ''%{project_name}'' + Proyecto' default_context: El contexto por defecto para este proyecto es %{context} default_context_removed: Eliminado el contexto por defecto default_context_set: Set project's default context to %{default_context} @@ -617,7 +648,8 @@ es: deferred_actions: Deferred actions deferred_actions_empty: Deferred actions empty delete_project: Delete project - delete_project_confirmation: Are you sure that you want to delete the project '%{name}'? + delete_project_confirmation: Are you sure that you want to delete the project + '%{name}'? delete_project_title: Delete the project edit_project_settings: Edit Project Settings edit_project_title: Editar proyecto @@ -632,7 +664,8 @@ es: list_reviews: TRACKS::Revisión no_default_context: Este proyecto no tiene un contexto por defecto no_last_completed_projects: No hay proyectos terminados encontrado - no_last_completed_recurring_todos: No se ha completado las acciones repetitivas que se encuentran + no_last_completed_recurring_todos: No se ha completado las acciones repetitivas + que se encuentran no_notes_attached: Actualmente no hay notas adjuntas a este proyectos no_projects: Currently there are no projects notes: Notes @@ -725,10 +758,13 @@ es: action_selection_title: TRACKS::Selección de Acción actions: Acciones actions_30days_title: Acciones en los últimos 30 días - actions_actions_avg_created_30days: In the last 30 days you created on average %{count} actions + actions_actions_avg_created_30days: In the last 30 days you created on average + %{count} actions actions_avg_completed: and completed an average of %{count} actions per month. - actions_avg_completed_30days: and completed an average of %{count} actions per day. - actions_avg_completion_time: Of all your completed actions, the average time to complete is %{count} days. + actions_avg_completed_30days: and completed an average of %{count} actions per + day. + actions_avg_completion_time: Of all your completed actions, the average time to + complete is %{count} days. actions_avg_created: In the last 12 months you created on average %{count} actions actions_day_of_week_legend: day_of_week: Día de la semana @@ -749,10 +785,12 @@ es: actions_selected_from_week: Actions selected from week click_to_return: Click %{link} to return to the statistics page. click_to_return_link: here - click_to_show_actions_from_week: Click %{link} to show the actions from week %{week} and further. + click_to_show_actions_from_week: Click %{link} to show the actions from week %{week} + and further. click_to_update_actions: Click on a bar in the chart to update the actions below. contexts: Contexts - current_running_time_of_incomplete_visible_actions: Current running time of incomplete visible actions + current_running_time_of_incomplete_visible_actions: Current running time of incomplete + visible actions index_title: TRACKS::Estadística labels: avg_completed: Avg completed @@ -769,7 +807,8 @@ es: number_of_days: Number of days ago percentage: Percentage running_time: Running time of an action (weeks) - more_stats_will_appear: More statistics will appear here once you have added some actions. + more_stats_will_appear: More statistics will appear here once you have added some + actions. no_actions_selected: No hay tareas seleccionadas. no_tags_available: no tags available open_per_week: Próximas acciones activas (visibles y ocultas) a la semana @@ -788,10 +827,13 @@ es: percentage: Percentage weeks: Running time of an action (weeks). Click on a bar for more info spread_of_actions_for_all_context: Spread of actions for all context - spread_of_running_actions_for_visible_contexts: Spread of running actions for visible contexts - tag_cloud_90days_description: This tag cloud includes tags of actions that were created or completed in the past 90 days. + spread_of_running_actions_for_visible_contexts: Spread of running actions for + visible contexts + tag_cloud_90days_description: This tag cloud includes tags of actions that were + created or completed in the past 90 days. tag_cloud_90days_title: Tag cloud actions in past 90 days - tag_cloud_description: This tag cloud includes tags of all actions (completed, not completed, visible and/or hidden) + tag_cloud_description: This tag cloud includes tags of all actions (completed, + not completed, visible and/or hidden) tag_cloud_title: Tag cloud for all actions tags: Tags time_of_day: Time of day (all actions) @@ -806,7 +848,8 @@ es: top10_projects: Top 10 projects top10_projects_30days: Top 10 project in past 30 days top5_contexts: Top 5 contexts - top5_visible_contexts_with_incomplete_actions: Top 5 visible contexts with incomplete actions + top5_visible_contexts_with_incomplete_actions: Top 5 visible contexts with incomplete + actions totals: Totals totals_action_count: you have a total of %{count} actions totals_actions_completed: "%{count} of these are completed." @@ -846,8 +889,10 @@ es: action_deleted_error: Failed to delete the action action_deleted_success: Successfully deleted next action action_due_on: "(action due on %{date})" - action_marked_complete: The action '%{description}' was marked as %{completed} - action_marked_complete_error: The action '%{description}' was NOT marked as %{completed} due to an error on the server. + action_marked_complete: The action '%{description}' was marked + as %{completed} + action_marked_complete_error: The action '%{description}' was + NOT marked as %{completed} due to an error on the server. action_saved: Action saved action_saved_to_tickler: Acción guardada en el recordatorio. actions: @@ -873,7 +918,8 @@ es: added_new_project: Added new project all_completed: Todas las acciones realizadas all_completed_here: aquí - all_completed_tagged_page_title: 'TRACKS:: Todas las tareas realizadas con etiqueta %{tag_name}' + all_completed_tagged_page_title: 'TRACKS:: Todas las tareas realizadas con etiqueta + %{tag_name}' append_in_this_project: en este proyecto archived_tasks_title: TRACKS::Archived completed tasks blocked_by: Blocked by %{predecessors} @@ -885,7 +931,8 @@ es: due_today: Due today get_in_ical_format: Get this calendar in iCal format calendar_page_title: TRACKS::Calendar - cannot_add_dependency_to_completed_todo: Cannot add this action as a dependency to a completed action! + cannot_add_dependency_to_completed_todo: Cannot add this action as a dependency + to a completed action! clear_due_date: Clear due date clear_show_from_date: Clear show from date completed: Completed @@ -896,7 +943,8 @@ es: other: There are %{count} completed actions in the archive. completed_last_day: Completed in the last 24 hours completed_last_x_days: Completed in last %{count} days - completed_recurrence_completed: There is no next action after the recurring action you just deleted. The recurrence is completed + completed_recurrence_completed: There is no next action after the recurring action + you just deleted. The recurrence is completed completed_recurring: Completed recurring todos completed_recurring_actions_title: TRACKS::Completed recurring actions completed_rest_of_month: Completado en el resto de este mes @@ -908,7 +956,8 @@ es: confirm_delete: Are you sure that you want to delete the action '%{description}'? context_changed: Context changed to %{name} convert_to_project: Make project - defer_date_after_due_date: Defer date is after due date. Please edit and adjust due date before deferring. + defer_date_after_due_date: Defer date is after due date. Please edit and adjust + due date before deferring. defer_x_days: one: Defer one day other: Defer %{count} days @@ -917,7 +966,8 @@ es: deferred_tasks_title: TRACKS::Recordatorio delete: Delete delete_action: Delete action - delete_recurring_action_confirm: Are you sure that you want to delete the recurring action '%{description}'? + delete_recurring_action_confirm: Are you sure that you want to delete the recurring + action '%{description}'? delete_recurring_action_title: Delete the recurring action deleted_success: The action was deleted successfully. depends_on: Depends on @@ -932,7 +982,8 @@ es: error: invalid_due_date: Invalid due date invalid_show_from_date: Invalid show from date - error_completing_todo: There was an error completing / activating the recurring todo %{description} + error_completing_todo: There was an error completing / activating the recurring + todo %{description} error_deleting_item: There was an error deleting the item %{description} error_deleting_recurring: There was an error deleting the recurring todo '%{description}' error_removing_dependency: There was an error removing the dependency @@ -952,10 +1003,12 @@ es: in_hidden_state: en estado oculto in_pending_state: en estado pendiente list_incomplete_next_actions: Lista las siguientes tareas incompletas - list_incomplete_next_actions_with_limit: Lists the last %{count} incomplete next actions + list_incomplete_next_actions_with_limit: Lists the last %{count} incomplete next + actions mark_complete: Mark complete mobile_todos_page_title: Todas las tareas - new_related_todo_created: Una nueva tarea fue añadida y que pertenece a esta tarea recurrente + new_related_todo_created: Una nueva tarea fue añadida y que pertenece a esta tarea + recurrente new_related_todo_created_short: creada una nueva tarea new_related_todo_not_created_short: no se creó la tarea next_action_description: Descripción de la nueva tarea @@ -1084,9 +1137,11 @@ es: yearly_every_x_day: Every %{month} %{day} yearly_every_xth_day: The %{day} %{day_of_week} of %{month} yearly_options: Settings for yearly recurring actions - recurrence_completed: There is no next action after the recurring action you just finished. The recurrence is completed + recurrence_completed: There is no next action after the recurring action you just + finished. The recurrence is completed recurrence_period: Recurrence period - recurring_action_deleted: Action was deleted. Because this action is recurring, a new action was added + recurring_action_deleted: Action was deleted. Because this action is recurring, + a new action was added recurring_action_saved: Recurring action saved recurring_actions_title: TRACKS::Recurring Actions recurring_deleted_success: The recurring action was deleted successfully. @@ -1110,32 +1165,38 @@ es: task_list_title: TRACKS::List tasks tickler_items_due: one: One tickler item is now due - refresh the page to see it. - other: "%{count} tickler items are now due - refresh the page to see them." + other: '%{count} tickler items are now due - refresh the page to see them.' to_tickler: al recordatorio unable_to_add_dependency: Unable to add dependency - unresolved_dependency: The value you entered in the dependency field did not resolve to an existing action. This value will not be saved with the rest of the action. Continue? + unresolved_dependency: The value you entered in the dependency field did not resolve + to an existing action. This value will not be saved with the rest of the action. + Continue? was_due_on_date: was due on %{date} users: account_signup: Account signup approve_tos: I approve the Terms of Service auth_change_submit: Change authentication type - auth_type_update_error: 'There was a problem updating your authentication type: %{error_messages}' + auth_type_update_error: 'There was a problem updating your authentication type: + %{error_messages}' auth_type_updated: Authentication type updated. change_auth_type_title: TRACKS::Change authentication type change_authentication_type: Change authentication type - change_password_prompt: Enter your new password in the fields below and click 'Change password' to replace your current password with your new one. + change_password_prompt: Enter your new password in the fields below and click + 'Change password' to replace your current password with your new one. change_password_submit: Change password change_password_title: TRACKS::Change password choose_password: Choose password confirm_password: Confirm password desired_login: Desired login - destroy_confirmation: 'Warning: this will delete user ''%{login}'', all their actions, contexts, project and notes. Are you sure that you want to continue?' + destroy_confirmation: 'Warning: this will delete user ''%{login}'', all their + actions, contexts, project and notes. Are you sure that you want to continue?' destroy_error: There was an error deleting the user %{login} destroy_successful: User %{login} was successfully destroyed destroy_user: Destroy user email_address: Email address failed_to_delete_user: Failed to delete user %{username} - first_user_heading: 'Welcome to TRACKS. To get started, please create an admin account:' + first_user_heading: 'Welcome to TRACKS. To get started, please create an admin + account:' first_user_title: TRACKS::Sign up as the admin user identity_url: Identity URL label_auth_type: Authentication type @@ -1145,12 +1206,15 @@ es: new_user_heading: 'Sign up a new user:' new_user_title: TRACKS::Sign up as the admin user no_signups_title: TRACKS::No signups - openid_ok_pref_failed: You have successfully verified %{url} as your identity but there was a problem saving your authentication preferences. - openid_url_verified: You have successfully verified %{url} as your identity and set your authentication type to OpenID. + openid_ok_pref_failed: You have successfully verified %{url} as your identity + but there was a problem saving your authentication preferences. + openid_url_verified: You have successfully verified %{url} as your identity and + set your authentication type to OpenID. password_confirmation_label: Confirm password password_updated: Password updated. register_with_cas: With your CAS username - select_authentication_type: Select your new authentication type and click 'Change authentication type' to replace your current settings. + select_authentication_type: Select your new authentication type and click 'Change + authentication type' to replace your current settings. signup: Signup signup_new_user: Sign up new user signup_successful: Signup successful for user %{username}. @@ -1167,14 +1231,13 @@ es: next_label: Siguiente » page_entries_info: multi_page: Отображено %{model} %{from} - %{to} из %{count} - multi_page_html: Viendo %{model} %{from} - %{to} de %{count} en el total de + multi_page_html: Viendo %{model} %{from} - %{to} de %{count} + en el total de single_page: - one: Viendo del 1 %{model} - other: Viendo todos los %{count} %{model} - zero: No %{model} encontrado + one: No %{model} encontrado + other: Viendo del 1 %{model} single_page_html: - one: Viendo del 1 %{model} - other: Viendo todos los %{count} %{model} - zero: No %{model} encontrado + one: No %{model} encontrado + other: Viendo del 1 %{model} page_gap: "..." previous_label: "« Anterior" From 724524f0d16fa60cdb00a80d8dc6c73203fba3ae Mon Sep 17 00:00:00 2001 From: Francisco Serrador Date: Mon, 17 Jan 2022 22:59:26 +0000 Subject: [PATCH 414/767] Translated using Weblate (Spanish) Currently translated at 89.8% (1003 of 1116 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/es/ --- config/locales/es.yml | 531 +++++++++++++++++++++--------------------- 1 file changed, 266 insertions(+), 265 deletions(-) diff --git a/config/locales/es.yml b/config/locales/es.yml index 73996c78..94fac183 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -13,13 +13,14 @@ es: mobile_todos_per_page: Tareas por página (Vista Móvil) refresh: Intervalo de actualización (en minutos) review_period: Intervalo de revisión del proyecto - show_completed_projects_in_sidebar: Show completed projects in sidebar + show_completed_projects_in_sidebar: Muestra proyectos completados en la barra + lateral show_hidden_contexts_in_sidebar: Mostrar los contextos ocultos en el lateral show_hidden_projects_in_sidebar: Mostrar proyectos ocultos en el lateral show_number_completed: Mostrar número de tareas completadas show_project_on_todo_done: Ir a la página del proyecto al completar la tarea sms_context: Contexto por defecto para el email - sms_email: Email origen + sms_email: Correo-e origen staleness_starts: Comienzo de estancamiento time_zone: Zona horaria title_date_format: Título del formato de fecha @@ -28,28 +29,28 @@ es: theme: Tema email: Correo-e project: - default_context_name: Default contexto - default_tags: Etiquetas estándar + default_context_name: Contexto predeterminado + default_tags: Etiquetas predeterminadas description: Descripción name: Nombre todo: context: Contexto description: Descripción - due: Fecha límite + due: Vencimiento notes: Notas predecessors: Depende de la project: Proyecto - show_from: Mostrar + show_from: Mostrar desde tags: Etiquetas user: - auth_type: Auth type - display_name: Display name - email: Email address + auth_type: Tipo autoritario + display_name: Nombre de pantalla + email: Dirección de correo-e first_name: Primer nombre - last_name: Apellido - login: Login - open_id_url: OpenID URL - password: Password + last_name: Apellidos + login: Presentación + open_id_url: URL OpenID + password: Contraseña created_at: Creado en last_login_at: Última presentación en errors: @@ -61,38 +62,38 @@ es: confirmation: no coincide con la confirmación empty: no puede estar vacío equal_to: debe ser igual a %{count} - even: debe ser aún + even: debe ser par exclusion: está reservado greater_than: debe ser mayor que %{count} greater_than_or_equal_to: debe ser mayor que o igual a %{count} inclusion: no está incluido en la lista - invalid: no puede contener el carácter de coma (',') + invalid: no es válido less_than: debe ser menor que %{count} less_than_or_equal_to: debe ser menor o igual a %{count} not_a_number: no es un número - odd: tiene que ser impar - record_invalid: 'Validation failed: %{errors}' + odd: debe ser impar + record_invalid: 'Validación errónea: %{errors}' restrict_dependent_destroy: one: Невозможно удалить запись, так как есть %{record} зависящая от нее other: Невозможно удалить запись, так как есть %{record} зависящие от нее has_one: No se puede borrar la grabación porque existe un %{record} dependiente has_many: No se puede borrar la grabación porque existe %{record} dependiente - taken: Ya se ha dado + taken: ya se ha tomado too_long: es demasiado largo (el máximo es %{count} caracteres) too_short: es demasiado corto (mínimo %{count} caracteres) - wrong_length: es la longitud del mal (debe ser %{count} caracteres) + wrong_length: la longitud es errónea (serían %{count} caracteres) models: project: attributes: name: - blank: proyecto debe tener un nombre + blank: el proyecto debe tener un nombre taken: ya existe - too_long: El nombre del proyecto tiene que tener menos de 256 caracteres + too_long: el nombre del proyecto tiene que tener menos de 256 caracteres template: body: 'Hubo problemas con los campos siguientes:' header: - one: Un error esta prohibido %{model} se guarden - other: '%{count} errores prohíbe este %{model} que se guarden' + one: Un error ha impedido que se guarde este %{model} + other: '%{count} errores han impedido que se guarden este %{model}' common: action: Tarea actions: Tareas @@ -104,37 +105,37 @@ es: back: Atrás bugs: Errores cancel: Cancelar - collapse_expand: Collapse/expand + collapse_expand: Colapsar/expandir context: Contexto contexts: Contextos contribute: Contribuir create: Crear days_midsentence: - one: días - other: día + one: día + other: días deferred: pospuestas description: Descripción drag_handle: ARRASTRAR email: Email errors_with_fields: 'Ha habido problemas con los siguientes campos:' first: Primero - forth: Siguiente + forth: Adelante fourth: Cuarto - go_back: Volver atrás + go_back: Retroceder last: Último logout: Salir - mailing_list: Mailing List + mailing_list: Listado de correo month: mes months: meses - next: Próximo + next: Siguiente none: Ninguno - not_available_abbr: n/e + not_available_abbr: n/d note: one: 0 notas other: 1 nota notes: Notas numbered_step: Paso %{number} - ok: Ok + ok: Aceptar optional: opcional previous: Anterior project: Proyecto @@ -147,82 +148,77 @@ es: show_all: Mostrar todo sort: alphabetically: Alfabéticamente - alphabetically_confirm: "¿Está seguro que desea ordenar los proyectos por orden\ - \ alfabético? Esto reemplazará el orden existente." - alphabetically_title: Proyectos de ordenar alfabéticamente + alphabetically_confirm: "¿Está seguro que desea ordenar estos proyectos alfabéticamente?\ + \ Esto reemplazará el orden existente." + alphabetically_title: Ordenar proyectos alfabéticamente by_task_count: Por número de tareas by_task_count_title: Ordenar por número de tareas - by_task_count_title_confirm: "¿Está seguro que desea ordenar los proyectos por\ - \ el número de tareas? Esto reemplazará el orden existente." + by_task_count_title_confirm: "¿Seguro que desea ordenar estos proyectos por\ + \ el número de tareas? Esto reemplazará la ordenación existente." sort: Ordenar third: Tercero - todo: Todo + todo: pendiente update: Actualizar - website: Website + website: Web week: semana weeks: semanas wiki: Wiki contexts: add_context: Añadir contexto - all_completed_tasks_title: 'TRACKS:: Todas las acciones completadas en ''%{context_name}'' - contexto' - completed_tasks_title: 'TRACKS:: Las acciones completadas en ''%{context_name}'' - el contexto' - context_deleted: Contexto eliminado '%{name}' - context_hide: "¿Esconder de la página principal?" - context_name: Nombre del contexto - context_state: Context state - delete_context: Eliminar contexto - delete_context_confirmation: "¿Está seguro que desea eliminar '%{name}' el contexto?\ - \ Tenga en cuenta que esto también se eliminarán todas las acciones (la repetición)\ - \ en este contexto!" - delete_context_title: Eliminar contexto + all_completed_tasks_title: 'TRACKS:: Todas las acciones completadas en el contexto + ''%{context_name}''' + completed_tasks_title: 'Las acciones TRACKS::Completed dentro del contexto ''%{context_name}''' + context_deleted: Contexto '%{name}' borrado + context_hide: "¿Ocultar página principal?" + context_name: Nombre contextual + context_state: Estado contextual + delete_context: Borrar contexto + delete_context_confirmation: "¿Seguro que desea borrar el contexto '%{name}'?\ + \ ¡Tenga en cuenta que esto también borra todas las acciones (recurrentes) dentro\ + \ de este contexto!" + delete_context_title: Borrar contexto edit_context: Editar contexto hidden_contexts: Contextos ocultos - hide_form: Esconder formulario - hide_form_title: Ocultar el formulario nuevo contexto - last_completed_in_context: en este contexto (últimos %{number}) + hide_form: Ocultar formulario + hide_form_title: Ocultar formulario de contexto nuevo + last_completed_in_context: (%{number} último) letter_abbreviation: C - new_context_post: "' También se ha creado. ¿Está seguro?" + new_context_post: "' también será creado. ¿Está seguro?" new_context_pre: Nuevo contexto ' - no_contexts_: 'No contexts ' + no_contexts_: 'Sin contexto ' no_contexts_active: Actualmente no hay contextos activos - no_contexts_closed: Currently there are no closed contexts + no_contexts_closed: Actualmente no hay contextos cerrados no_contexts_hidden: Actualmente no hay contextos ocultos save_status_message: Contexto guardado - show_form: Crear un nuevo contexto - show_form_title: Añadir un contexto + show_form: Crea un contexto nuevo + show_form_title: Añade un contexto status_active: El contexto está activo - status_hidden: Contexto se oculta + status_hidden: El contexto está oculto todos_append: en este contexto update_status_message: Nombre de contexto ha cambiado view_link: 'View context: %{name}' - visible_contexts: Contextos visible + visible_contexts: Contextos visibles data: import: errors: - invalid_destination: "Invalid import destination: %{e}" + invalid_destination: "" some: Han ocurrido algunos errores durante la importación - file_blank: File can't be blank - invalid_csv: "Invalid CSV: could not read headers: %{e}" - save_error: "Could not save uploaded CSV (%{path_and_file}). Can Tracks write\ - \ to the upload directory? %{e}" - map_title: Map fields to be imported - header: Importing data - submit: Import + file_blank: '' + invalid_csv: "" + save_error: "" + map_title: '' + header: Importando datos + submit: Importar successful: Importación se realizó correctamente. target_field: "Import to:" - upload: Upload - upload_csv: Please upload your CSV file - projects_count: "%{count} Projects imported" - todos_count: "%{count} Todos imported" - yaml_disabled: "YAML loading is disabled" - yaml_warning: "%{warning}: all your current data will be destroyed before importing\ - \ the YAML file, so if you have access to the database, we strongly recommend\ - \ backing up the database right now in case that anything goes wrong." - paste_field: "Paste the contents of the YAML file you exported into the text\ - \ box below:" - warning: Beware + upload: Subir + upload_csv: '' + projects_count: "%{count} proyectos importados" + todos_count: "%{count} pendientes importados" + yaml_disabled: "" + yaml_warning: "" + paste_field: "" + warning: Aviso export: page_title: Tracks::Export title: Exportar datos @@ -234,7 +230,7 @@ es: \ YAML actualmente esta soportada de forma experimental. No confíe en este\ \ formato para hacer copias de seguridad de datos importantes." csv_description: "%{csv}: Mejor formato para importar en una hoja de cálculo\ - \ o en programas de análisis de datos." + \ o en programas de análisis de datos" csv_actions_description: Fichero CSV con todas sus acciones, con contextos por nombre y proyectos csv_notes_description: Fichero CSV con todas sus notas @@ -324,7 +320,7 @@ es: one: menos de 1 segundo other: menos de 1 segundo over_x_years: - one: más de 1 año + one: más de un año other: en %{count} años x_days: one: 1 día @@ -348,153 +344,154 @@ es: errors: format: "%{attribute} %{message}" messages: - accepted: должен быть подтвержден - blank: должна быть заполнена - confirmation: не соответствует %{attribute} - empty: не может быть пустым - equal_to: должно равняться %{count} - even: должно быть четным - exclusion: зарезервированно - greater_than: должно быть больше %{count} - greater_than_or_equal_to: должно быть больше или равно %{count} - inclusion: не входит в список - invalid: неверное - less_than: должно быть меньше %{count} - less_than_or_equal_to: должно быть меньше или равно %{count} - not_a_number: не является числом - not_an_integer: должно быть целым числом - odd: должно быть нечетным - other_than: должно отличаться от %{count} - present: должно быть пустым - taken: уже занято - too_long: 'слишком длинное (максимум: %{count} символов)' - too_short: 'слишком кроткое (минимум: %{count} символов)' - wrong_length: неверной длины (должно быть %{count} символов) + accepted: debe ser aceptado + blank: no puede estar en blanco + confirmation: no coincide con %{attribute} + empty: no puede estar vacío + equal_to: debe ser igual a %{count} + even: debe ser par + exclusion: está reservado + greater_than: debe ser mayor que %{count} + greater_than_or_equal_to: debe ser mayor o igual que %{count} + inclusion: no está incluido en el listado + invalid: no es válido + less_than: debe ser menor que %{count} + less_than_or_equal_to: debe ser menor o igual que %{count} + not_a_number: no es un número + not_an_integer: debe ser un entero + odd: debe ser impar + other_than: debe ser distinto que %{count} + present: debe estar en blanco + taken: ya ha sido tomado + too_long: 'es muy largo (máximo es %{count} caracteres)' + too_short: 'es demasiado corto (mínimo es %{count} caracteres)' + wrong_length: es la longitud errónea (debería ser de %{count} caracteres) user_unauthorized: '401 No autorizado: Solo los usuarios administrativos pueden acceder a esta función.' feedlist: actions_completed_last_week: Tareas completadas en los últimos 7 días - actions_due_next_week: Tareas pendientes en 7 días o menos - actions_due_today: Acciones pendientes hoy o antes - active_projects_wo_next: Proyectos activos, sin las próximas acciones + actions_due_next_week: Tareas vencen en 7 días o menos + actions_due_today: Acciones vencen hoy o antes + active_projects_wo_next: Proyectos activos, sin las acciones siguientes active_starred_actions: Todas las acciones que protagonizó, activa all_actions: Todas las tareas all_contexts: Todos los contextos all_projects: Todos los proyectos choose_context: Elija el contexto en el que desea un canal de choose_project: Elegir el proyecto que quiere un canal de - context_centric_actions: Feeds de acciones incompletas en un contexto específico + context_centric_actions: Canales de acciones incompletas en un contexto específico context_needed: Es necesario que haya al menos un contexto antes de poder solicitar - un feed - ical_feed: iCal alimentación + un canal + ical_feed: Canal iCal last_fixed_number: Última/s %{number} accion/es legend: 'Leyenda:' - notice_incomplete_only: 'Nota: Todos los alimentos muestran sólo las acciones - que no han sido marcadas como realizadas, a menos que se indique lo contrario.' + notice_incomplete_only: 'Nota: Todos los canales muestran sólo las acciones que + no han sido marcadas como realizadas, a menos que se indique lo contrario. Estos + canales iCal pueden ser agregados a listados pendientes. Si desea mostrar vencimientos + pendientes en un calendario, utilice el canal iCal en la página del calendario' plain_text_feed: Canal Texto sin formato - project_centric: Feeds de acciones incompletas en un proyecto específico + project_centric: Canal de acciones incompletas en un proyecto específico project_needed: Es necesario que haya al menos un proyecto antes de poder solicitar - un feed + un canal projects_and_actions: Proyectos activos con sus acciones - rss_feed: RSS Feed - select_feed_for_context: Seleccione la alimentación de este contexto - select_feed_for_project: Seleccione la fuente para este proyecto + rss_feed: Canal RSS + select_feed_for_context: Seleccione el canal para este contexto + select_feed_for_project: Seleccione el canal para este proyecto footer: - send_feedback: Envía comentarios sobre el %{version} + send_feedback: Envía comentarios sobre la %{version} helpers: select: - prompt: Выберите + prompt: Seleccione submit: - create: Создать %{model} - submit: Сохранить %{model} - update: Обновить %{model} + create: Cree %{model} + submit: Guardar %{model} + update: Actualizar %{model} integrations: - opensearch_description: Buscar en las Tracks + opensearch_description: Buscar en las Pistas help: title: Help - usage: 'You can find information on the usage in the %{manual_link} in the project - GitHub wiki.' + usage: '' manual_link_text: User manual - bugs: 'If you encounter a bug or have a feature request, please report it in the - %{issue_link}.' - issue_link_text: issue queue + bugs: '' + issue_link_text: '' contribute: 'We gladly welcome all contributions to Tracks. Check the %{contribute_link} for further information. You can also come discuss with the community:' contribute_link_text: project website mailing_list_link_text: Mailing list irc_bullet: '%{irc_link} (also available in %{matrix_link})' irc_link_text: 'IRC channel #Tracks@FreeNode' - matrix_link_text: Matrix + matrix_link_text: Matriz layouts: mobile_navigation: - calendar: Calendar + calendar: Calendario contexts: Contextos - feeds: Feeds - full: Full Site + feeds: Claves + full: Sitio Lleno home: Inicio logout: Cerrar sesión new_action: Nueva tarea projects: Proyectos - starred: avoritos + starred: Favoritos tickler: Recordatorio navigation: admin: Admin api_docs: REST API Docs calendar: Calendario - calendar_title: Calendario de las acciones por + calendar_title: Calendario de las acciones pendientes completed_tasks: Hecho - completed_tasks_title: Completed - contexts_title: Contexts + completed_tasks_title: Completado + contexts_title: Contextos export: Exportar - export_title: Importar y exportar datos - feeds: Feeds - feeds_title: See a list of available feeds - group_view_by_context: Group by context - group_view_by_project: Group by project - group_view_by_title: Change the grouping of the actions on this page + export_title: Exportar datos + feeds: '' + feeds_title: Vea un listado de alimentaciones disponibles + group_view_by_context: Grupo por contexto + group_view_by_project: Grupo por proyecto + group_view_by_title: Cambio de agrupamiento de las acciones en esta página help: "?" - help_page: Help + help_page: Ayuda home: Inicio home_title: Inicio - import: Import - import_title: Import data - integrations_: Integrar Tracks + import: Importar + import_title: Importar datos + integrations_: Pistas Integradas manage_users: Administrar usuarios manage_users_title: Añadir o eliminar usuarios mobile: Mobile Site notes_title: Mostrar todas las notas - options: Options + options: Opciones organize: Organizar preferences: Preferencias preferences_title: Mostrar mis preferencias projects_title: Proyectos recurring_todos: Tareas repetitivas - recurring_todos_title: Manage recurring actions - review_title: Posibilidad de una revisión - search: Search All Items - show_empty_containers_context: Show empty contexts - show_empty_containers_project: Show empty projects - show_empty_containers_title: Show or hide the empty projects or contexts + recurring_todos_title: Gestión de acciones recurrentes + review_title: Crear revisión + search: Buscar Todos los Ítemes + show_empty_containers_context: Mostrar contextos vacíos + show_empty_containers_project: Muestra proyectos vacíos + show_empty_containers_title: Muestra u oculta los proyectos vacíos o contenidos starred: Estrellas - starred_title: See your starred actions + starred_title: Vea sus acciones con estrellas stats: Estadísticas - stats_title: See your statistics + stats_title: Vea sus estadísticas tickler: Recordatorio tickler_title: Recordatorio view: Ver next_actions_rss_feed: RSS feed of next actions - toggle_contexts: Expandir/contraer los contextos - toggle_contexts_title: Hacer que los contextos contraídos sea (in)visibles - toggle_notes: Activar/Desactivar notas - toggle_notes_title: Activar/Desactivar todas las notas + toggle_contexts: Conmuta contextos colapsados + toggle_contexts_title: Hacer que los contextos colapsados sea (in)visibles + toggle_notes: Conmuta anotaciones + toggle_notes_title: Conmuta todas las anotaciones login: account_login: Acceso a la cuenta cas_create_account: If you like to request on please go here to %{signup_link} cas_logged_in_greeting: Hello, %{username}! You are authenticated. cas_login: CAS Login cas_no_user_found: Hello, %{username}! You do not have an account on Tracks. - cas_signup_link: Request account - cas_username_not_found: Sorry, no user by that CAS username exists (%{username}) + cas_signup_link: Solicitar cuenta + cas_username_not_found: Disculpe, ningún usuario por esa id de usuario CAS existe + (%{username}) log_in_again: log in again. logged_out: You have been logged out of Tracks. login_cas: go to the CAS @@ -502,35 +499,35 @@ es: login_with_openid: login with an OpenID mobile_use_openid: "…or login with an OpenID" openid_identity_url_not_found: Sorry, no user by that identity URL exists (%{identity_url}) - option_separator: or, + option_separator: o, please_login: Please log in to use Tracks session_time_out: Session has timed out. Please %{link} session_will_expire: session will expire after %{hours} hour(s) of inactivity. - session_will_not_expire: session will not expire. + session_will_not_expire: sesión no caducada. sign_in: Entrar signup_prompt: Want to create an account? - successful: Has entrado con éxito. Bienvenido! - successful_with_session_info: 'Login successful:' - unsuccessful: Login unsuccessful. - user_no_expiry: Stay logged in + successful: Has entrado correctamente. ¡Bienvenido de nuevo! + successful_with_session_info: 'Entrada correcta:' + unsuccessful: Entrada incorrecta. + user_no_expiry: Mantener dentro models: preference: - due_in: Due in %{days} days - due_on: Due on %{date} + due_in: Vence en %{days} días + due_on: Vence en %{date} due_styles: - - Due in ___ days - - Due on _______ + - Vence en ___ días + - Vence en _______ themes: - black: Black - light_blue: Light blue + black: En blanco + light_blue: Azul claro project: - feed_description: Lists all the projects for %{username} - feed_title: Tracks Projects + feed_description: Enumera todos los proyectos para %{username} + feed_title: Proyectos de Seguimiento todo: - error_date_must_be_future: must be a date in the future + error_date_must_be_future: debe ser una fecha futura user: - error_context_not_associated: Context id %{context} not associated with user - id %{user}. + error_context_not_associated: ID de contexto %{context} no asociado con el id + %{user} del usuario. error_project_not_associated: Project id %{project} not associated with user id %{user}. notes: @@ -540,14 +537,14 @@ es: delete_note_title: Delete the note '%{id}' deleted_note: Deleted note '%{id}' edit_item_title: Edit item - in_project: 'En:' + in_project: 'En: ' no_notes_available: 'Currently there are no notes: add notes to projects from individual project pages.' note_header: Note %{id} - note_link_title: Show note %{id} - note_location_link: 'In:' - save_status_message: Note %{id} was saved - show_note_title: Show note + note_link_title: Mostrar nota %{id} + note_location_link: 'En:' + save_status_message: Nota %{id} fue guardada + show_note_title: Mostrar nota number: currency: format: @@ -568,17 +565,17 @@ es: decimal_units: format: "%n %u" units: - billion: Миллиард - million: Миллион - quadrillion: Квадрильон - thousand: Тысяча - trillion: Триллион + billion: Billón + million: Millón + quadrillion: Cuatrillón + thousand: Millar + trillion: Trillón unit: "." format: delimiter: Delimiter precision: '1' - significant: 'true' - strip_insignificant_zeros: 'true' + significant: 'verdadero' + strip_insignificant_zeros: 'verdadero' storage_units: format: "%n %u" units: @@ -588,7 +585,7 @@ es: gb: GB kb: KB mb: MB - tb: Tuberculosis + tb: TB percentage: format: delimiter: Delimiter @@ -597,26 +594,27 @@ es: format: delimiter: Delimiter preferences: - authentication_header: Your authentication - change_authentication_type: Change your authentication type - change_identity_url: Change Your Identity URL - change_password: Change your password - current_authentication_type: Your authentication type is %{auth_type} - edit_preferences: Edit preferences - generate_new_token: Generate a new token - generate_new_token_confirm: Are you sure? Generating a new token will replace - the existing one and break any external usages of this token. - is_false: 'false' - is_true: 'true' - open_id_url: Your OpenID URL is + authentication_header: Su autenticación + change_authentication_type: Cambie su tipo autenticado + change_identity_url: Cambie su URL de su Identidad + change_password: Cambiar su contraseña + current_authentication_type: Su tipo de autenticación es %{auth_type} + edit_preferences: Editar preferencias + generate_new_token: Genera un vale nuevo + generate_new_token_confirm: ¿Seguro? Generar un vale nuevo reemplazara el existente + y romperá los usos de este vale. + is_false: 'falso' + is_true: 'verdadero' + open_id_url: Su URL OpenID es page_title: TRACKS::Preferences page_title_edit: TRACKS::Edit Preferences - password_changed: Que ha cambiado la contraseña, por favor vuelve a iniciar sesión. + password_changed: Su contraseña ha sido modificada, por favor vuelve a iniciar + sesión. remove_introduction: You can remove your user account here. Note that this is irreversible and will remove all your data! After removal you will be logged out. - show_number_completed: Show %{number} completed items - sms_context_none: None + show_number_completed: Muestra los %{number} elementos completados + sms_context_none: Ninguno staleness_starts_after: Staleness starts after %{days} days tabs: authentication: Autenticación @@ -626,7 +624,7 @@ es: tracks_behavior: Rastrea el comportamiento de title: Your preferences token_description: Token (for feeds and API use) - token_header: Your token + token_header: Su vale updated: Las preferencias de actualización projects: actions_in_project_title: Acciones en este proyecto @@ -645,11 +643,10 @@ es: default_context_removed: Eliminado el contexto por defecto default_context_set: Set project's default context to %{default_context} default_tags_removed_notice: Removed the default tags - deferred_actions: Deferred actions - deferred_actions_empty: Deferred actions empty - delete_project: Delete project - delete_project_confirmation: Are you sure that you want to delete the project - '%{name}'? + deferred_actions: Acciones diferidas + deferred_actions_empty: Acciones diferidas vacías + delete_project: Borrar proyecto + delete_project_confirmation: ¿Seguro que quiere borrar el proyecto '%{name}'? delete_project_title: Delete the project edit_project_settings: Edit Project Settings edit_project_title: Editar proyecto @@ -657,7 +654,7 @@ es: hide_form: Esconder formulario hide_form_title: Hide new project form is_active: está activo - last_completed_in_project: "(last %{number})" + last_completed_in_project: "(último %{number})" letter_abbreviation: P list_completed_projects: 'TRACKS:: Lista de Proyectos Realizados' list_projects: TRACKS::Lista de Proyectos @@ -671,37 +668,37 @@ es: notes: Notes notes_empty: No hay notas para este proyecto page_title: 'TRACKS::Project: %{project}' - project_destroyed_status: Deleted project '%{name}' - project_saved_status: Project saved - project_state: Project is %{state}. + project_destroyed_status: Proyecto «%{name}» borrado + project_saved_status: Proyecto guardado + project_state: El proyecto es %{state}. set_default_tags_notice: Set project's default tags to %{default_tags} - settings: Settings - show_form: Add a project - show_form_title: Create a new project + settings: Parámetros + show_form: Agrega un proyecto + show_form_title: Crea un proyecto nuevo state: Este proyecto está %{state} - status_project_name_changed: Name of project was changed + status_project_name_changed: El nombre del proyecto fue cambiado this_project: Este proyecto - to_new_project_page: Take me to the new project page - view_link: 'View project: %{name}' - was_marked_complete: has been marked as completed - was_marked_hidden: has been marked as hidden - with_default_context: with a default context of '%{context_name}' - with_default_tags: and with '%{tags}' as the default tags + to_new_project_page: Lléveme a la página del proyecto nuevo + view_link: 'Vista del proyecto: %{name}' + was_marked_complete: ha sido marcado como completado + was_marked_hidden: ha sido marcado como oculto + with_default_context: con un contexto predeterminado de «%{context_name}» + with_default_tags: y con '%{tags}' como los etiquetados predeterminados with_no_default_context: with no default context with_no_default_tags: and with no default tags search: contexts_matching_query: Contexts matching query no_results: Your search yielded no results. notes_matching_query: Notes matching query - projects_matching_query: Projects matching query + projects_matching_query: Proyectos cotejan solicitud tags_matching_query: Tags matching query todos_matching_query: Todos matching query shared: add_action: Añadir tarea add_actions: Añadir tareas add_context: Agregue contexto - context_for_all_actions: Context for all actions - hide_action_form_title: Hide new action form + context_for_all_actions: Contexto para todas las acciones + hide_action_form_title: Ocultar formulario de acción nueva hide_form: Esconder formulario make_actions_dependent: Asegúrese que las acciones dependen unos de otros multiple_next_actions: Multiple next actions (one on each line) @@ -736,7 +733,7 @@ es: current: Hasta al día current_plural: Hasta al día hidden: Hidden - hidden_plural: Hidden + hidden_plural: Oculto projects: ":": ":" active: Active projects @@ -774,7 +771,7 @@ es: day_of_week: Día de la semana number_of_actions: Número de acciones actions_dow_30days_title: Day of week (past 30 days) - actions_further: and further + actions_further: ' y posterior' actions_last_year: Actions in the last years actions_last_year_legend: months_ago: Months ago @@ -782,9 +779,9 @@ es: actions_lastyear_title: Actions in the last 12 months actions_min_completion_time: The minimum time to complete is %{time}. actions_min_max_completion_days: The Min-/maximum days to complete is %{min}/%{max}. - actions_selected_from_week: Actions selected from week + actions_selected_from_week: 'Acciones seleccionadas desde semana ' click_to_return: Click %{link} to return to the statistics page. - click_to_return_link: here + click_to_return_link: aquí click_to_show_actions_from_week: Click %{link} to show the actions from week %{week} and further. click_to_update_actions: Click on a bar in the chart to update the actions below. @@ -801,7 +798,7 @@ es: month_avg_created: "%{months} Month avg created" legend: actions: Tareas - day_of_week: Day of week + day_of_week: Día de semana months_ago: Months ago number_of_actions: Número de tareas number_of_days: Number of days ago @@ -816,7 +813,7 @@ es: actions: Acciones weeks: Semanas atrás other_actions_label: "(otros)" - projects: Projects + projects: Proyectos running_time_all: Current running time of all incomplete actions running_time_all_legend: actions: Tareas @@ -835,7 +832,7 @@ es: tag_cloud_description: This tag cloud includes tags of all actions (completed, not completed, visible and/or hidden) tag_cloud_title: Tag cloud for all actions - tags: Tags + tags: Etiquetas time_of_day: Time of day (all actions) time_of_day_legend: number_of_actions: Número de tareas @@ -869,9 +866,9 @@ es: within_one: Dentro de un support: array: - last_word_connector: ", y" - two_words_connector: y - words_connector: "," + last_word_connector: ", y " + two_words_connector: ' y ' + words_connector: ", " select: prompt: Por favor seleccione time: @@ -894,14 +891,14 @@ es: action_marked_complete_error: The action '%{description}' was NOT marked as %{completed} due to an error on the server. action_saved: Action saved - action_saved_to_tickler: Acción guardada en el recordatorio. + action_saved_to_tickler: Acción guardada en el recordatorio actions: completed: Completed actions context_completed: Completed actions in this context context_deferred_pending: Deferred/pending actions in this context context_without_project: Actions without project in %{param} home_completed: Completed actions - home_without_project: Actions without project + home_without_project: Acciones sin proyecto project_completed: Completed actions in this project project_deferred_pending: Deferred/pending actions in this project project_project: Actions in this project @@ -915,11 +912,11 @@ es: added_new_next_action: Added new next action added_new_next_action_plural: Added new next actions added_new_next_action_singular: Added new next action - added_new_project: Added new project + added_new_project: Proyecto nuevo añadido all_completed: Todas las acciones realizadas all_completed_here: aquí - all_completed_tagged_page_title: 'TRACKS:: Todas las tareas realizadas con etiqueta - %{tag_name}' + all_completed_tagged_page_title: 'TRACKS::All Todas las tareas realizadas con + etiqueta %{tag_name}' append_in_this_project: en este proyecto archived_tasks_title: TRACKS::Archived completed tasks blocked_by: Blocked by %{predecessors} @@ -928,7 +925,7 @@ es: due_next_week: Due next week due_this_month: Due in rest of %{month} due_this_week: Due in rest of this week - due_today: Due today + due_today: Vence hoy get_in_ical_format: Get this calendar in iCal format calendar_page_title: TRACKS::Calendar cannot_add_dependency_to_completed_todo: Cannot add this action as a dependency @@ -937,7 +934,7 @@ es: clear_show_from_date: Clear show from date completed: Completed completed_actions: Completed actions - completed_actions_with: Acciones completadas with the tag %{tag_name} + completed_actions_with: Acciones completadas con la lengüeta «%{tag_name}» completed_in_archive: one: There is one completed action in the archive. other: There are %{count} completed actions in the archive. @@ -965,15 +962,15 @@ es: deferred_pending_actions: Deferred/pending actions deferred_tasks_title: TRACKS::Recordatorio delete: Delete - delete_action: Delete action - delete_recurring_action_confirm: Are you sure that you want to delete the recurring - action '%{description}'? + delete_action: Borrar acción + delete_recurring_action_confirm: Seguro que desea borrar la acción recurrente + «%{description}»? delete_recurring_action_title: Delete the recurring action deleted_success: The action was deleted successfully. depends_on: Depends on depends_on_separate_with_commas: Depende de (separar con comas) done: Done? - drag_action_title: Drag onto another action to make it depend on that action + drag_action_title: '' due: Fecha límite edit: Edit edit_action: Edit action @@ -985,7 +982,8 @@ es: error_completing_todo: There was an error completing / activating the recurring todo %{description} error_deleting_item: There was an error deleting the item %{description} - error_deleting_recurring: There was an error deleting the recurring todo '%{description}' + error_deleting_recurring: Hubo un error borrando la recursividad «%{description}» + pendiente error_removing_dependency: There was an error removing the dependency error_saving_recurring: There was an error saving the recurring todo '%{description}' error_starring: Could not toggle the star of this todo '%{description}' @@ -995,7 +993,7 @@ es: feed_title_in_project: in project '%{project}' feeds: completed: 'Completed: %{date}' - due: 'Due: %{date}' + due: 'Vence: %{date}' has_x_pending: one: Tiene una tarea pendiente other: Tiene %{count} tareas pendientes @@ -1005,15 +1003,15 @@ es: list_incomplete_next_actions: Lista las siguientes tareas incompletas list_incomplete_next_actions_with_limit: Lists the last %{count} incomplete next actions - mark_complete: Mark complete + mark_complete: Marca completa mobile_todos_page_title: Todas las tareas new_related_todo_created: Una nueva tarea fue añadida y que pertenece a esta tarea recurrente new_related_todo_created_short: creada una nueva tarea new_related_todo_not_created_short: no se creó la tarea next_action_description: Descripción de la nueva tarea - next_action_needed: You need to submit at least one next action - next_actions_description: 'Filter:' + next_action_needed: Requiere enviar al menos una acción siguiente + next_actions_description: 'Filtrador:' next_actions_description_additions: completed: in the last %{count} days due_date: with a due date %{due_date} or earlier @@ -1025,11 +1023,11 @@ es: overdue_by_plural: Overdue by %{days} days next_actions_title: Tracks - Next Actions next_actions_title_additions: - completed: actions completed - due_today: due today - due_within_a_week: due within a week + completed: acciones completadas + due_today: vence hoy + due_within_a_week: vence en una semana no_actions: - completed: Actualmente no hay acciones completadas. + completed: Actualmente no hay acciones completadas completed_recurring: Currently there are no completed recurring todos completed_rest_of_month: No actions were completed in the rest of this month completed_rest_of_week: No actions were completed in the rest of this week @@ -1113,7 +1111,7 @@ es: - October - November - December - on_day_n: on day %{n} + on_day_n: el día %{n} on_work_days: on work days second: second show: show @@ -1146,7 +1144,7 @@ es: recurring_actions_title: TRACKS::Recurring Actions recurring_deleted_success: The recurring action was deleted successfully. recurring_pattern_removed: El patrón de repetición se retira de %{count} - recurring_todos: Recurring todos + recurring_todos: Recursión pendiente remove_dependency: Remove dependency (does not delete the action) removed_predecessor: Removed %{successor} as dependency from %{predecessor}. scheduled_overdue: Scheduled to show %{days} days ago @@ -1231,13 +1229,16 @@ es: next_label: Siguiente » page_entries_info: multi_page: Отображено %{model} %{from} - %{to} из %{count} - multi_page_html: Viendo %{model} %{from} - %{to} de %{count} - en el total de + multi_page_html: Representando %{model} %{from} - %{to} de + %{count} en el total single_page: one: No %{model} encontrado other: Viendo del 1 %{model} single_page_html: one: No %{model} encontrado other: Viendo del 1 %{model} - page_gap: "..." + page_gap: "…" previous_label: "« Anterior" + rest_help: + auth: + title: Autenticación From a26ee3d62ddc4587f362f4d2b3573a3f161051ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20H=C3=BCseyin=20Ekseli?= Date: Mon, 24 Jan 2022 12:11:14 +0000 Subject: [PATCH 415/767] Translated using Weblate (Turkish) Currently translated at 30.5% (341 of 1116 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/tr/ --- config/locales/tr.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 0d4e107f..985d6948 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -141,6 +141,15 @@ common: add: Ekle actions: Eylemler action: Eylem + days_midsentence: + one: Gün + other: Günler + note: + one: Not yok + other: 1 not var + actions_midsentence: + one: Eylem + other: Eylemler activerecord: errors: template: @@ -241,6 +250,8 @@ date: - Pe - Cu - Ct + - Cum + - Cmt abbr_month_names: - Kas - Oca @@ -253,6 +264,8 @@ date: - Ağu - Eyl - Eki + - Kas + - Ara day_names: - Pazar - Pazartesi @@ -279,9 +292,11 @@ date: - Ekim - Kasım - Aralık + - Aralık order: - :yıl - :gün + - :day datetime: prompts: day: Gün @@ -390,6 +405,17 @@ integrations: için: %{documentation_link}' developer_documentation_link: Tracks için geliştirici dokümantasyonu contents_header: 'İçerikler:' + tell_us_link_text: Bunun hakkında bize görüş bildirin + cron_2: Başka bir metin kullanabilirsiniz %{feeds_link} Projede birlikte çalıştığınız + meslektaşlarınıza neden listeyi e-posta gönderemeyesiniz ki? + cron_email_subject: Bitimi 7 gün içerisinde olan Tracks eylemleri + feeds_link_text: akış Tracks tarafından sağlanmıştır + cron_1: Bu girdiyi crontab üzerinden girerseniz, her gün ÖÖ 5'te 7 gün içerisinde + bitimi yaklaşan eylemlerle ilgili bir e-posta alacaksınız. + message_gateway: + rich_api_tip: Mesaj içeriği tanım, içerik ve proje kısmına, not ise gövde metnine + yazarak "çamaşırları yıka @ Ev" veya "Mehmet'i Ara > x projesi" ve benzeri türden + görevler oluşturmak için Rich Todo API kullanabilirsiniz. footer: send_feedback: Geri bildirim gönderin %{version} helpers: From 1f363db3802a9f5b4d577bb54ab91dc8dcb704fc Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Wed, 2 Feb 2022 23:54:22 +0000 Subject: [PATCH 416/767] Translated using Weblate (Finnish) Currently translated at 99.8% (1114 of 1116 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/fi/ --- config/locales/fi.yml | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 41ced1b2..c0da25dc 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -131,9 +131,8 @@ fi: none: Ei not_available_abbr: ei note: - one: 1 muistiinpano - other: "%{count} muistiinpanoa" - zero: ei muistiinpanoja + one: ei muistiinpanoja + other: 1 muistiinpano notes: Muistiinpanot numbered_step: Askel %{number} ok: Ok @@ -756,7 +755,7 @@ fi: no_last_completed_recurring_todos: Valmiita toistuvia toimenpiteitä ei löytynyt no_notes_attached: Projektiin ei ole liitetty muistiinpanoja no_projects: Projekteja ei löytynyt - notes: Notes + notes: Muistiinpanot notes_empty: Tälle projektille ei ole muistiinpanoja page_title: 'TRACKS::Project: %{project}' project_destroyed_status: Projekti ”%{name}” poistettu @@ -1158,7 +1157,7 @@ fi: no_last_completed_actions: Valmistuneita toimenpiteitä ei ole no_project: "--No project--" no_recurring_todos: Ei toistuvia toimenpiteitä - notes: Notes + notes: Muistiinpanot overdue: Myöhässä pending: Odottaa recurrence: @@ -1332,13 +1331,11 @@ fi: multi_page_html: Näytetään %{model} %{from} - %{to} yhteensä %{count} tietueesta single_page: - one: Näytetään 1 %{model} - other: Näytetään kaikki %{count} %{model} - zero: '%{model} ei löytynyt' + one: '%{model} ei löytynyt' + other: Näytetään 1 %{model} single_page_html: - one: Näytetään 1 %{model} - other: Näytetään kaikki %{count} %{model} - zero: '%{model} ei löytynyt' + one: '%{model} ei löytynyt' + other: Näytetään 1 %{model} page_gap: "…" previous_label: "← Edellinen" auth_type: From 2b2acb494aade60d36511a4763bd3dbd046df5ba Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Fri, 4 Feb 2022 17:32:11 +0200 Subject: [PATCH 417/767] Fixed the plurals again. --- config/locales/en.yml | 33 ++++++++++++++++++++------------- config/locales/es.yml | 28 +++++++++++++++++----------- config/locales/fi.yml | 15 +++++++++------ 3 files changed, 46 insertions(+), 30 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 38e489d4..983aee73 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -96,8 +96,9 @@ en: action: Action actions: Actions actions_midsentence: - one: actions - other: action + one: action + other: actions + zero: actions add: Add ajaxError: There was an error retrieving from server back: Back @@ -109,8 +110,9 @@ en: contribute: Contribute create: Create days_midsentence: - one: days - other: day + one: day + other: days + zero: days deferred: deferred description: Description drag_handle: DRAG @@ -129,8 +131,9 @@ en: none: None not_available_abbr: n/a note: - one: no notes - other: 1 notes + one: 1 notes + other: "%{count} notes" + zero: no notes notes: Notes numbered_step: Step %{number} ok: Ok @@ -317,11 +320,13 @@ en: other: almost %{count} years half_a_minute: half a minute less_than_x_minutes: - one: less than 1 minute - other: less than a minute + one: less than a minute + other: less than %{count} minutes + zero: less than 1 minute less_than_x_seconds: one: less than 1 second - other: less than 1 second + other: less than %{count} seconds + zero: less than 1 second over_x_years: one: over 1 year other: over %{count} years @@ -1320,11 +1325,13 @@ en: multi_page_html: Displaying %{model} %{from} - %{to} of %{count} in total single_page: - one: No %{model} found - other: Displaying 1 %{model} + one: Displaying 1 %{model} + other: Displaying all %{count} %{model} + zero: No %{model} found single_page_html: - one: No %{model} found - other: Displaying 1 %{model} + one: Displaying 1 %{model} + other: Displaying all %{count} %{model} + zero: No %{model} found page_gap: "…" previous_label: "← Previous" auth_type: diff --git a/config/locales/es.yml b/config/locales/es.yml index 94fac183..387ad0c0 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -98,8 +98,9 @@ es: action: Tarea actions: Tareas actions_midsentence: - one: tareas - other: tarea + one: tarea + other: tareas + zero: tareas add: Añadir ajaxError: Hubo un error al recuperar desde el servidor back: Atrás @@ -131,8 +132,9 @@ es: none: Ninguno not_available_abbr: n/d note: - one: 0 notas - other: 1 nota + one: 1 nota + other: "%{count} notas" + zero: 0 notas notes: Notas numbered_step: Paso %{number} ok: Aceptar @@ -314,11 +316,13 @@ es: other: Casi %{count} años half_a_minute: medio minuto less_than_x_minutes: - one: menos de 1 minuto - other: menos de un minuto + one: menos de un minuto + other: menos de %{count} minutos + zero: menos de 1 minuto less_than_x_seconds: one: menos de 1 segundo - other: menos de 1 segundo + other: menos de %{count} segundos + zero: menos de 1 segundo over_x_years: one: más de un año other: en %{count} años @@ -1232,11 +1236,13 @@ es: multi_page_html: Representando %{model} %{from} - %{to} de %{count} en el total single_page: - one: No %{model} encontrado - other: Viendo del 1 %{model} + one: Viendo del 1 %{model} + other: Viendo todos los %{count} %{model} + zero: No %{model} encontrado single_page_html: - one: No %{model} encontrado - other: Viendo del 1 %{model} + one: Viendo del 1 %{model} + other: Viendo todos los %{count} %{model} + zero: No %{model} encontrado page_gap: "…" previous_label: "« Anterior" rest_help: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index c0da25dc..a3761cb0 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -131,8 +131,9 @@ fi: none: Ei not_available_abbr: ei note: - one: ei muistiinpanoja - other: 1 muistiinpano + one: 1 muistiinpano + other: "%{count} muistiinpanoa" + zero: ei muistiinpanoja notes: Muistiinpanot numbered_step: Askel %{number} ok: Ok @@ -1331,11 +1332,13 @@ fi: multi_page_html: Näytetään %{model} %{from} - %{to} yhteensä %{count} tietueesta single_page: - one: '%{model} ei löytynyt' - other: Näytetään 1 %{model} + one: Näytetään 1 %{model} + other: Näytetään kaikki %{count} %{model} + zero: '%{model} ei löytynyt' single_page_html: - one: '%{model} ei löytynyt' - other: Näytetään 1 %{model} + one: Näytetään 1 %{model} + other: Näytetään kaikki %{count} %{model} + zero: '%{model} ei löytynyt' page_gap: "…" previous_label: "← Edellinen" auth_type: From 3e11894caf4628c31b88c7d0d50c1ea532a3512f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Feb 2022 00:21:41 +0000 Subject: [PATCH 418/767] Bump kt-paperclip from 7.0.1 to 7.1.0 Bumps [kt-paperclip](https://github.com/kreeti/kt-paperclip) from 7.0.1 to 7.1.0. - [Release notes](https://github.com/kreeti/kt-paperclip/releases) - [Changelog](https://github.com/kreeti/kt-paperclip/blob/master/NEWS) - [Commits](https://github.com/kreeti/kt-paperclip/compare/v7.0.1...v7.1.0) --- updated-dependencies: - dependency-name: kt-paperclip dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Gemfile b/Gemfile index bd3019de..536f6302 100644 --- a/Gemfile +++ b/Gemfile @@ -20,7 +20,7 @@ gem 'aasm', '~> 5.2.0' gem 'acts_as_list' gem 'bcrypt', '~> 3.1.16' gem 'htmlentities' -gem "kt-paperclip", "~> 7.0" +gem "kt-paperclip", "~> 7.1" gem 'puma', '~> 5.6' gem 'rails_autolink' gem 'RedCloth' diff --git a/Gemfile.lock b/Gemfile.lock index 5f8513aa..e392616a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -112,7 +112,7 @@ GEM activesupport (>= 5.0) highline (2.0.3) htmlentities (4.3.4) - i18n (1.8.11) + i18n (1.9.1) concurrent-ruby (~> 1.0) i18n-tasks (0.9.37) activesupport (>= 4.0.2) @@ -135,7 +135,7 @@ GEM rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) - kt-paperclip (7.0.1) + kt-paperclip (7.1.0) activemodel (>= 4.2.0) activesupport (>= 4.2.0) marcel (~> 1.0.1) @@ -154,7 +154,7 @@ GEM method_source (1.0.0) mime-types (3.4.1) mime-types-data (~> 3.2015) - mime-types-data (3.2021.1115) + mime-types-data (3.2022.0105) mini_mime (1.1.2) mini_portile2 (2.7.1) minitest (5.15.0) @@ -310,7 +310,7 @@ GEM will_paginate (3.3.1) yard (0.9.27) webrick (~> 1.7.0) - zeitwerk (2.5.3) + zeitwerk (2.5.4) PLATFORMS ruby @@ -334,7 +334,7 @@ DEPENDENCIES i18n-tasks (~> 0.9.37) jquery-rails (~> 4.4) jquery-ui-rails (~> 6.0.1) - kt-paperclip (~> 7.0) + kt-paperclip (~> 7.1) listen minitest-stub-const mocha From 861a007beaa6c4abbd04fff94971a9806e50693e Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Fri, 4 Feb 2022 23:58:02 +0000 Subject: [PATCH 419/767] Translated using Weblate (Finnish) Currently translated at 99.6% (1112 of 1116 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/fi/ --- config/locales/fi.yml | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/config/locales/fi.yml b/config/locales/fi.yml index a3761cb0..7d6c0957 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -63,14 +63,14 @@ fi: empty: ei voi olla tyhjä equal_to: täytyy olla sama kuin %{count} even: täytyy olla tasan - exclusion: is reserved + exclusion: on varattu greater_than: täytyy olla suurempi kuin %{count} greater_than_or_equal_to: täytyy olla suurempi tai yhtäsuuri kuin %{count} inclusion: ei sisälly listaan - invalid: cannot contain the comma (',') character + invalid: ei voi sisältää pilkkua less_than: täytyy olla vähemmän kuin %{count} less_than_or_equal_to: täytyy olla vähemmän tai yhtäsuuri kuin %{count} - not_a_number: is not a number + not_a_number: ei ole numero odd: täytyy olla pariton record_invalid: 'Validointi epäonnistui: %{errors}' restrict_dependent_destroy: @@ -131,9 +131,8 @@ fi: none: Ei not_available_abbr: ei note: - one: 1 muistiinpano - other: "%{count} muistiinpanoa" - zero: ei muistiinpanoja + one: ei muistiinpanoja + other: 1 muistiinpano notes: Muistiinpanot numbered_step: Askel %{number} ok: Ok @@ -192,7 +191,7 @@ fi: save_status_message: Asiayhteys tallennettu show_form: Luo uusi asiayhteys show_form_title: Lisää asiayhteys - status_active: Context is active + status_active: Asiayhteys on aktiivinen status_hidden: Asiayhteys on piilotettu todos_append: tässä asiayhteydessä update_status_message: Asiayhteyden nimi muutettiin @@ -745,7 +744,7 @@ fi: hidden_projects: Piilotetut projektit hide_form: Piilota lomake hide_form_title: Piilota projektinluontilomake - is_active: is active + is_active: on aktiivinen last_completed_in_project: "(viimeiset %{number})" letter_abbreviation: P list_completed_projects: TRACKS::Valmistuneiden projektien lista @@ -775,7 +774,7 @@ fi: was_marked_hidden: on merkitty piilotetuksi with_default_context: with a default context of '%{context_name}' with_default_tags: ja oletusasiasanoilla ”%{tags}” - with_no_default_context: with no default context + with_no_default_context: ilman oletusasiayhteyttä with_no_default_tags: ja ilman oletusavainsanoja search: contexts_matching_query: hakua vastaavaa asiayhteyttä @@ -1332,13 +1331,11 @@ fi: multi_page_html: Näytetään %{model} %{from} - %{to} yhteensä %{count} tietueesta single_page: - one: Näytetään 1 %{model} - other: Näytetään kaikki %{count} %{model} - zero: '%{model} ei löytynyt' + one: '%{model} ei löytynyt' + other: Näytetään 1 %{model} single_page_html: - one: Näytetään 1 %{model} - other: Näytetään kaikki %{count} %{model} - zero: '%{model} ei löytynyt' + one: '%{model} ei löytynyt' + other: Näytetään 1 %{model} page_gap: "…" previous_label: "← Edellinen" auth_type: From eaf6d4f0a457c79416a04e421c5eefa8dc0be467 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Tue, 8 Feb 2022 23:42:13 +0200 Subject: [PATCH 420/767] Fix the plurals again in FI --- config/locales/fi.yml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 7d6c0957..da2d4bcc 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -131,8 +131,9 @@ fi: none: Ei not_available_abbr: ei note: - one: ei muistiinpanoja - other: 1 muistiinpano + one: 1 muistiinpano + other: "%{count} muistiinpanoa" + zero: ei muistiinpanoja notes: Muistiinpanot numbered_step: Askel %{number} ok: Ok @@ -1331,11 +1332,13 @@ fi: multi_page_html: Näytetään %{model} %{from} - %{to} yhteensä %{count} tietueesta single_page: - one: '%{model} ei löytynyt' - other: Näytetään 1 %{model} + one: Näytetään 1 %{model} + other: Näytetään kaikki %{count} %{model} + zero: '%{model} ei löytynyt' single_page_html: - one: '%{model} ei löytynyt' - other: Näytetään 1 %{model} + one: Näytetään 1 %{model} + other: Näytetään kaikki %{count} %{model} + zero: '%{model} ei löytynyt' page_gap: "…" previous_label: "← Edellinen" auth_type: From c2bd1b0d81a36908cb3e003cf3daddb8e603e0bb Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Wed, 9 Feb 2022 11:28:05 +0200 Subject: [PATCH 421/767] Error message fixes for CSV import. Add the necessary directory to Docker image. --- Dockerfile | 17 ++++++++++++++++- app/controllers/data_controller.rb | 8 ++++++-- app/models/todo.rb | 4 ++++ public/uploads/csv/.keep | 0 4 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 public/uploads/csv/.keep diff --git a/Dockerfile b/Dockerfile index 6faeffe5..d17e68ca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,10 +17,25 @@ RUN apt-get update && apt-get install -y yarn netcat RUN mkdir /app/log -COPY . /app/ +COPY COPYING /app/ +COPY config /app/config/ COPY config/database.docker.yml /app/config/database.yml COPY config/site.docker.yml /app/config/site.yml +COPY bin /app/bin/ +COPY script /app/script/ +COPY public /app/public/ +COPY vendor /app/vendor/ + +COPY .yardopts /app/ +COPY Rakefile /app/ +COPY config.ru /app/ +COPY docker-entrypoint.sh /app/ + +COPY lib /app/lib/ +COPY app /app/app/ +COPY db /app/db/ + RUN RAILS_ENV=production bundle exec rake assets:precompile ENTRYPOINT ["/app/docker-entrypoint.sh"] diff --git a/app/controllers/data_controller.rb b/app/controllers/data_controller.rb index e9893f16..9ed72b43 100644 --- a/app/controllers/data_controller.rb +++ b/app/controllers/data_controller.rb @@ -62,12 +62,16 @@ class DataController < ApplicationController flash[:notice] = t 'data.import.projects_count', count: count when 'todos' count = Todo.import path_and_file, params, current_user - flash[:notice] = t 'data.import.todos.count', count: count + if not count + flash[:error] = t('data.import.errors.invalid_destination') + else + flash[:notice] = t 'data.import.todos_count', count: count + end else flash[:error] = t('data.import.errors.invalid_destination') end rescue Exception => e - flash[:error] = t 'data.import.invalid_destination', e: e + flash[:error] = t 'data.import.errors.invalid_destination', e: e end File.delete(path_and_file) redirect_to import_data_path diff --git a/app/models/todo.rb b/app/models/todo.rb index c97f3ade..79972055 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -353,6 +353,10 @@ class Todo < ApplicationRecord def self.import(filename, params, user) default_context = user.contexts.order('id').first + if default_context.nil? + logger.error "No available contexts in import" + return FALSE + end count = 0 CSV.foreach(filename, headers: true) do |row| diff --git a/public/uploads/csv/.keep b/public/uploads/csv/.keep new file mode 100644 index 00000000..e69de29b From 511a4a23b6535c7507ede54e8b864cc059824f10 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Wed, 9 Feb 2022 11:48:09 +0200 Subject: [PATCH 422/767] Better error messages --- app/controllers/data_controller.rb | 4 ++-- app/models/todo.rb | 5 +---- config/locales/en.yml | 1 + 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/app/controllers/data_controller.rb b/app/controllers/data_controller.rb index 9ed72b43..218de1e0 100644 --- a/app/controllers/data_controller.rb +++ b/app/controllers/data_controller.rb @@ -62,8 +62,8 @@ class DataController < ApplicationController flash[:notice] = t 'data.import.projects_count', count: count when 'todos' count = Todo.import path_and_file, params, current_user - if not count - flash[:error] = t('data.import.errors.invalid_destination') + if ! count + flash[:error] = t('data.import.errors.no_context') else flash[:notice] = t 'data.import.todos_count', count: count end diff --git a/app/models/todo.rb b/app/models/todo.rb index 79972055..acfe032f 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -353,10 +353,7 @@ class Todo < ApplicationRecord def self.import(filename, params, user) default_context = user.contexts.order('id').first - if default_context.nil? - logger.error "No available contexts in import" - return FALSE - end + return false if default_context.nil? count = 0 CSV.foreach(filename, headers: true) do |row| diff --git a/config/locales/en.yml b/config/locales/en.yml index 983aee73..67613cee 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -207,6 +207,7 @@ en: invalid_csv: "Invalid CSV: could not read headers: %{e}" save_error: "Could not save uploaded CSV (%{path_and_file}). Can Tracks write\ \ to the upload directory? %{e}" + no_context: No default context could be found map_title: Map fields to be imported header: Importing data submit: Import From dfdab8af557fa259ead3bd6e6d94642f1b7e0b11 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Wed, 9 Feb 2022 11:50:16 +0200 Subject: [PATCH 423/767] CS fix --- app/controllers/data_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/data_controller.rb b/app/controllers/data_controller.rb index 218de1e0..610ae047 100644 --- a/app/controllers/data_controller.rb +++ b/app/controllers/data_controller.rb @@ -62,7 +62,7 @@ class DataController < ApplicationController flash[:notice] = t 'data.import.projects_count', count: count when 'todos' count = Todo.import path_and_file, params, current_user - if ! count + if !count flash[:error] = t('data.import.errors.no_context') else flash[:notice] = t 'data.import.todos_count', count: count From 889afc6667a1338d8254c0992d0e7966a93cde89 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Feb 2022 00:07:03 +0000 Subject: [PATCH 424/767] Bump rspec-expectations from 3.10.2 to 3.11.0 Bumps [rspec-expectations](https://github.com/rspec/rspec-expectations) from 3.10.2 to 3.11.0. - [Release notes](https://github.com/rspec/rspec-expectations/releases) - [Changelog](https://github.com/rspec/rspec-expectations/blob/main/Changelog.md) - [Commits](https://github.com/rspec/rspec-expectations/compare/v3.10.2...v3.11.0) --- updated-dependencies: - dependency-name: rspec-expectations dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index e392616a..5190290c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -222,10 +222,10 @@ GEM reverse_markdown (2.1.1) nokogiri rexml (3.2.5) - rspec-expectations (3.10.2) + rspec-expectations (3.11.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.10.0) - rspec-support (3.10.3) + rspec-support (~> 3.11.0) + rspec-support (3.11.0) rubocop (1.25.1) parallel (~> 1.10) parser (>= 3.1.0.0) From 237b0591cfac00fd88afe3b042eb523cd9e09014 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Feb 2022 00:07:15 +0000 Subject: [PATCH 425/767] Bump kt-paperclip from 7.1.0 to 7.1.1 Bumps [kt-paperclip](https://github.com/kreeti/kt-paperclip) from 7.1.0 to 7.1.1. - [Release notes](https://github.com/kreeti/kt-paperclip/releases) - [Changelog](https://github.com/kreeti/kt-paperclip/blob/master/NEWS) - [Commits](https://github.com/kreeti/kt-paperclip/compare/v7.1.0...v7.1.1) --- updated-dependencies: - dependency-name: kt-paperclip dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index e392616a..86c89074 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -135,7 +135,7 @@ GEM rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) - kt-paperclip (7.1.0) + kt-paperclip (7.1.1) activemodel (>= 4.2.0) activesupport (>= 4.2.0) marcel (~> 1.0.1) From 6487527bbe39bf37b77ba18fb17175b9c646ce08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Feb 2022 22:05:04 +0000 Subject: [PATCH 426/767] Bump puma from 5.6.1 to 5.6.2 Bumps [puma](https://github.com/puma/puma) from 5.6.1 to 5.6.2. - [Release notes](https://github.com/puma/puma/releases) - [Changelog](https://github.com/puma/puma/blob/master/History.md) - [Commits](https://github.com/puma/puma/compare/v5.6.1...v5.6.2) --- updated-dependencies: - dependency-name: puma dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index e392616a..e1641656 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -169,7 +169,7 @@ GEM parser (3.1.0.0) ast (~> 2.4.1) pg (1.3.1) - puma (5.6.1) + puma (5.6.2) nio4r (~> 2.0) racc (1.6.0) rack (2.2.3) From 6aaf56dfe52a6e4dff509e8e078089f7d5150f45 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Sun, 20 Feb 2022 19:28:51 +0200 Subject: [PATCH 427/767] Minor upgrade to Rails --- Gemfile.lock | 104 +++++++++++++++++++++++++-------------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 68fd9998..cf0a1cf8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -4,26 +4,26 @@ GEM RedCloth (4.3.2) aasm (5.2.0) concurrent-ruby (~> 1.0) - actioncable (6.0.4.4) - actionpack (= 6.0.4.4) + actioncable (6.0.4.6) + actionpack (= 6.0.4.6) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (6.0.4.4) - actionpack (= 6.0.4.4) - activejob (= 6.0.4.4) - activerecord (= 6.0.4.4) - activestorage (= 6.0.4.4) - activesupport (= 6.0.4.4) + actionmailbox (6.0.4.6) + actionpack (= 6.0.4.6) + activejob (= 6.0.4.6) + activerecord (= 6.0.4.6) + activestorage (= 6.0.4.6) + activesupport (= 6.0.4.6) mail (>= 2.7.1) - actionmailer (6.0.4.4) - actionpack (= 6.0.4.4) - actionview (= 6.0.4.4) - activejob (= 6.0.4.4) + actionmailer (6.0.4.6) + actionpack (= 6.0.4.6) + actionview (= 6.0.4.6) + activejob (= 6.0.4.6) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (6.0.4.4) - actionview (= 6.0.4.4) - activesupport (= 6.0.4.4) + actionpack (6.0.4.6) + actionview (= 6.0.4.6) + activesupport (= 6.0.4.6) rack (~> 2.0, >= 2.0.8) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) @@ -31,36 +31,36 @@ GEM actionpack-xml_parser (2.0.1) actionpack (>= 5.0) railties (>= 5.0) - actiontext (6.0.4.4) - actionpack (= 6.0.4.4) - activerecord (= 6.0.4.4) - activestorage (= 6.0.4.4) - activesupport (= 6.0.4.4) + actiontext (6.0.4.6) + actionpack (= 6.0.4.6) + activerecord (= 6.0.4.6) + activestorage (= 6.0.4.6) + activesupport (= 6.0.4.6) nokogiri (>= 1.8.5) - actionview (6.0.4.4) - activesupport (= 6.0.4.4) + actionview (6.0.4.6) + activesupport (= 6.0.4.6) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (6.0.4.4) - activesupport (= 6.0.4.4) + activejob (6.0.4.6) + activesupport (= 6.0.4.6) globalid (>= 0.3.6) - activemodel (6.0.4.4) - activesupport (= 6.0.4.4) + activemodel (6.0.4.6) + activesupport (= 6.0.4.6) activemodel-serializers-xml (1.0.2) activemodel (> 5.x) activesupport (> 5.x) builder (~> 3.1) - activerecord (6.0.4.4) - activemodel (= 6.0.4.4) - activesupport (= 6.0.4.4) - activestorage (6.0.4.4) - actionpack (= 6.0.4.4) - activejob (= 6.0.4.4) - activerecord (= 6.0.4.4) + activerecord (6.0.4.6) + activemodel (= 6.0.4.6) + activesupport (= 6.0.4.6) + activestorage (6.0.4.6) + actionpack (= 6.0.4.6) + activejob (= 6.0.4.6) + activerecord (= 6.0.4.6) marcel (~> 1.0.0) - activesupport (6.0.4.4) + activesupport (6.0.4.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) @@ -112,7 +112,7 @@ GEM activesupport (>= 5.0) highline (2.0.3) htmlentities (4.3.4) - i18n (1.9.1) + i18n (1.10.0) concurrent-ruby (~> 1.0) i18n-tasks (0.9.37) activesupport (>= 4.0.2) @@ -145,7 +145,7 @@ GEM listen (3.7.1) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - loofah (2.13.0) + loofah (2.14.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) @@ -177,20 +177,20 @@ GEM rack (>= 1.2.0) rack-test (1.1.0) rack (>= 1.0, < 3) - rails (6.0.4.4) - actioncable (= 6.0.4.4) - actionmailbox (= 6.0.4.4) - actionmailer (= 6.0.4.4) - actionpack (= 6.0.4.4) - actiontext (= 6.0.4.4) - actionview (= 6.0.4.4) - activejob (= 6.0.4.4) - activemodel (= 6.0.4.4) - activerecord (= 6.0.4.4) - activestorage (= 6.0.4.4) - activesupport (= 6.0.4.4) + rails (6.0.4.6) + actioncable (= 6.0.4.6) + actionmailbox (= 6.0.4.6) + actionmailer (= 6.0.4.6) + actionpack (= 6.0.4.6) + actiontext (= 6.0.4.6) + actionview (= 6.0.4.6) + activejob (= 6.0.4.6) + activemodel (= 6.0.4.6) + activerecord (= 6.0.4.6) + activestorage (= 6.0.4.6) + activesupport (= 6.0.4.6) bundler (>= 1.3.0) - railties (= 6.0.4.4) + railties (= 6.0.4.6) sprockets-rails (>= 2.0.0) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) @@ -206,9 +206,9 @@ GEM railties (>= 6.0.0, < 8) rails_autolink (1.1.6) rails (> 3.1) - railties (6.0.4.4) - actionpack (= 6.0.4.4) - activesupport (= 6.0.4.4) + railties (6.0.4.6) + actionpack (= 6.0.4.6) + activesupport (= 6.0.4.6) method_source rake (>= 0.8.7) thor (>= 0.20.3, < 2.0) From c9845711c07a81b7c8873f67f753e18d1bd252a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 20 Feb 2022 17:44:55 +0000 Subject: [PATCH 428/767] Bump pg from 1.3.1 to 1.3.2 Bumps [pg](https://github.com/ged/ruby-pg) from 1.3.1 to 1.3.2. - [Release notes](https://github.com/ged/ruby-pg/releases) - [Changelog](https://github.com/ged/ruby-pg/blob/master/History.rdoc) - [Commits](https://github.com/ged/ruby-pg/compare/v1.3.1...v1.3.2) --- updated-dependencies: - dependency-name: pg dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 536f6302..7cf39ef2 100644 --- a/Gemfile +++ b/Gemfile @@ -34,7 +34,7 @@ gem 'therubyracer', group: :therubyracer # Use --without argument to skip unnecessary drivers gem 'sqlite3', group: :sqlite gem 'mysql2', '~> 0.5.3', group: :mysql -gem 'pg', '~> 1.3.1', group: :postgresql +gem 'pg', '~> 1.3.2', group: :postgresql group :development do gem 'spring' diff --git a/Gemfile.lock b/Gemfile.lock index cf0a1cf8..74151955 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -168,7 +168,7 @@ GEM parallel (1.21.0) parser (3.1.0.0) ast (~> 2.4.1) - pg (1.3.1) + pg (1.3.2) puma (5.6.2) nio4r (~> 2.0) racc (1.6.0) @@ -339,7 +339,7 @@ DEPENDENCIES minitest-stub-const mocha mysql2 (~> 0.5.3) - pg (~> 1.3.1) + pg (~> 1.3.2) puma (~> 5.6) rack-mini-profiler rails (~> 6.0.4) From 580781536f22a48fd004c1b4a50807cbf58e49f5 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Wed, 9 Feb 2022 10:05:59 +0000 Subject: [PATCH 429/767] Translated using Weblate (Finnish) Currently translated at 99.6% (1113 of 1117 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/fi/ --- config/locales/fi.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/config/locales/fi.yml b/config/locales/fi.yml index da2d4bcc..2dfd76e5 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -131,9 +131,8 @@ fi: none: Ei not_available_abbr: ei note: - one: 1 muistiinpano - other: "%{count} muistiinpanoa" - zero: ei muistiinpanoja + one: ei muistiinpanoja + other: 1 muistiinpano notes: Muistiinpanot numbered_step: Askel %{number} ok: Ok @@ -251,6 +250,7 @@ fi: file_blank: Tiedosto ei voi olla tyhjä some: Tuonnissa tapahtui virheitä invalid_destination: 'Virheellinen tuontikohde: %{e}' + no_context: Asiayhteyttä ei löytynyt oletusarvoksi date: abbr_day_names: - Su @@ -1332,13 +1332,11 @@ fi: multi_page_html: Näytetään %{model} %{from} - %{to} yhteensä %{count} tietueesta single_page: - one: Näytetään 1 %{model} - other: Näytetään kaikki %{count} %{model} - zero: '%{model} ei löytynyt' + one: '%{model} ei löytynyt' + other: Näytetään 1 %{model} single_page_html: - one: Näytetään 1 %{model} - other: Näytetään kaikki %{count} %{model} - zero: '%{model} ei löytynyt' + one: '%{model} ei löytynyt' + other: Näytetään 1 %{model} page_gap: "…" previous_label: "← Edellinen" auth_type: From ba861b326d8afa945e0e39f888a33b7d32edc806 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Mon, 21 Feb 2022 11:39:36 +0200 Subject: [PATCH 430/767] Fixed the plurals --- config/locales/fi.yml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 2dfd76e5..be14d51a 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -131,8 +131,9 @@ fi: none: Ei not_available_abbr: ei note: - one: ei muistiinpanoja - other: 1 muistiinpano + one: 1 muistiinpano + other: "%{count} muistiinpanoa" + zero: ei muistiinpanoja notes: Muistiinpanot numbered_step: Askel %{number} ok: Ok @@ -1332,11 +1333,13 @@ fi: multi_page_html: Näytetään %{model} %{from} - %{to} yhteensä %{count} tietueesta single_page: - one: '%{model} ei löytynyt' - other: Näytetään 1 %{model} + one: Näytetään 1 %{model} + other: Näytetään kaikki %{count} %{model} + zero: '%{model} ei löytynyt' single_page_html: - one: '%{model} ei löytynyt' - other: Näytetään 1 %{model} + one: Näytetään 1 %{model} + other: Näytetään kaikki %{count} %{model} + zero: '%{model} ei löytynyt' page_gap: "…" previous_label: "← Edellinen" auth_type: From 4c429b7a83d8a76ca0f0869fc595c17611a48552 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Mon, 21 Feb 2022 11:51:37 +0200 Subject: [PATCH 431/767] Version 2.6 --- config/initializers/tracks.rb | 2 +- doc/CHANGELOG.md | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/config/initializers/tracks.rb b/config/initializers/tracks.rb index d3666fa7..3fd9524a 100644 --- a/config/initializers/tracks.rb +++ b/config/initializers/tracks.rb @@ -1,4 +1,4 @@ -tracks_version='2.5.3' +tracks_version='2.6.0' # comment out next two lines if you do not want (or can not) the date of the # last git commit in the footer info=`git log --pretty=format:"%ai" -1` diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index 5d788103..0b960583 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -1,15 +1,29 @@ See doc/upgrading.md for the upgrade documentation! -## Version 2.6 +## Version 2.6.0 ## New features * Ruby 3.0 is now supported. +* Support obsidian links in notes. ## Removed features * No longer supporting EOL Ruby 2.5 +### Bug fixes + +* Fix Docker image functionality in certain cases. +* Lots of dependencies have been upgraded. +* Fixed some error messages in import. +* Fixed import in the Docker image. + +## Updated translations + +* Finnish (by maintainer Jyri-Petteri ”ZeiP” Paloposki) +* Turkish (thanks Burak Ekseli!) +* Spanish (thanks Francisco Serrador!) + ## Version 2.5.2 ### New features From 6ca701f6fdad3fd596ce3ff2f5c33a5696613dcb Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Mon, 21 Feb 2022 12:32:08 +0200 Subject: [PATCH 432/767] Fix the Git version in the footer with the Docker image and change the wording. --- .dockerignore | 1 - Dockerfile | 2 ++ app/views/shared/_footer.html.erb | 3 ++- config/initializers/tracks.rb | 10 +++------- config/locales/cs.yml | 3 ++- config/locales/de.yml | 3 ++- config/locales/en.yml | 3 ++- config/locales/es.yml | 3 ++- config/locales/fi.yml | 3 ++- config/locales/fr.yml | 3 ++- config/locales/he.yml | 3 ++- config/locales/nl.yml | 3 ++- config/locales/ru.yml | 3 ++- config/locales/tr.yml | 3 ++- doc/CHANGELOG.md | 1 + 15 files changed, 28 insertions(+), 19 deletions(-) diff --git a/.dockerignore b/.dockerignore index d9b8002c..51d21e85 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,4 @@ .bundle -.git config/database.yml config/site.yml coverage diff --git a/Dockerfile b/Dockerfile index d17e68ca..b770a113 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,6 +36,8 @@ COPY lib /app/lib/ COPY app /app/app/ COPY db /app/db/ +COPY .git /app/.git + RUN RAILS_ENV=production bundle exec rake assets:precompile ENTRYPOINT ["/app/docker-entrypoint.sh"] diff --git a/app/views/shared/_footer.html.erb b/app/views/shared/_footer.html.erb index aac3178e..f2fb0970 100644 --- a/app/views/shared/_footer.html.erb +++ b/app/views/shared/_footer.html.erb @@ -1,6 +1,7 @@
    <%= render :partial => "shared/add_new_item_form" %> - <%= render :file => "sidebar/sidebar" %> + <%= render :template => "sidebar/sidebar" %>
    From 0eaa0d65c1bf0df819039447481f9ed8e06ba9e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 00:46:46 +0000 Subject: [PATCH 635/767] Bump sanitize from 6.1.0 to 6.1.1 Bumps [sanitize](https://github.com/rgrove/sanitize) from 6.1.0 to 6.1.1. - [Release notes](https://github.com/rgrove/sanitize/releases) - [Changelog](https://github.com/rgrove/sanitize/blob/main/HISTORY.md) - [Commits](https://github.com/rgrove/sanitize/compare/v6.1.0...v6.1.1) --- updated-dependencies: - dependency-name: sanitize dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index c6851fa4..d4487d0e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -271,7 +271,7 @@ GEM ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) safe_yaml (1.0.5) - sanitize (6.1.0) + sanitize (6.1.1) crass (~> 1.0.2) nokogiri (>= 1.12.0) sassc (2.4.0) From ddf0260a03930bcd4011e03b66d2f0f9663be9a7 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Sat, 17 Sep 2022 18:53:17 +0000 Subject: [PATCH 636/767] Translated using Weblate (Spanish) Currently translated at 90.9% (1018 of 1119 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/es/ --- config/locales/es.yml | 132 +++++++++++++++++++++++++++++++----------- 1 file changed, 98 insertions(+), 34 deletions(-) diff --git a/config/locales/es.yml b/config/locales/es.yml index 5cf075af..326a9bb3 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -2,8 +2,8 @@ es: activerecord: attributes: note: - created_at: Creado el - updated_at: actualizado a las + created_at: Creado en + updated_at: Actualizado en preference: date_format: Formato de fecha due_style: Debido al estilo @@ -93,14 +93,15 @@ es: body: 'Hubo problemas con los campos siguientes:' header: one: Un error ha impedido que se guarde este %{model} - other: '%{count} errores han impedido que se guarden este %{model}' + many: '%{count} errores han impedido que se guarden este %{model}' + other: '' common: action: Tarea actions: Tareas actions_midsentence: - one: tarea + one: tareas + many: tarea other: tareas - zero: tareas add: Añadir ajaxError: Hubo un error al recuperar desde el servidor back: Atrás @@ -113,7 +114,8 @@ es: create: Crear days_midsentence: one: día - other: días + many: días + other: '' deferred: pospuestas description: Descripción drag_handle: ARRASTRAR @@ -132,9 +134,9 @@ es: none: Ninguno not_available_abbr: n/d note: - one: 1 nota - other: "%{count} notas" - zero: 0 notas + one: 0 notas + many: 1 nota + other: '%{count} notas' notes: Notas numbered_step: Paso %{number} ok: Aceptar @@ -313,40 +315,49 @@ es: distance_in_words: about_x_hours: one: alrededor de 1 hora - other: Acerca de %{count} horas + many: Acerca de %{count} horas + other: '' about_x_months: one: alrededor de 1 mes - other: Acerca de %{count} meses + many: Acerca de %{count} meses + other: '' about_x_years: one: alrededor de 1 año - other: Acerca de %{count} años + many: Acerca de %{count} años + other: '' almost_x_years: one: casi 1 año - other: Casi %{count} años + many: Casi %{count} años + other: '' half_a_minute: medio minuto less_than_x_minutes: - one: menos de un minuto + one: menos de 1 minuto + many: menos de un minuto other: menos de %{count} minutos - zero: menos de 1 minuto less_than_x_seconds: - one: menos de 1 segundo - other: menos de %{count} segundos - zero: menos de 1 segundo + one: menos de %{count} segundo + many: más de %{count} segundos + other: '' over_x_years: one: más de un año - other: en %{count} años + many: en %{count} años + other: '' x_days: one: 1 día - other: '%{count} días' + many: '%{count} días' + other: '' x_minutes: one: 1 minuto - other: '%{count} minutos' + many: '%{count} minutos' + other: '' x_months: one: 1 mes - other: '%{count} meses' + many: '%{count} meses' + other: '' x_seconds: one: Un segundo - other: '%{count} segundos' + many: '%{count} segundos' + other: '' prompts: day: Día hour: Hora @@ -426,6 +437,52 @@ es: message_gateway: Integre Seguimientos con un servidor de correo para ser capaz de enviar una acción a través del correo a los Seguimientos mailgun: Enviar correos a los Seguimientos con Mailgun + automatic_email: Envíese automáticamente por correo electrónico las próximas + acciones + message_gateway: + one_user_configuration: 'También puede enviar todos los correos electrónicos + a un usuario específico de Tracks. Configure mail_dispatch en site.yml a %{single_user_value} + y pase el inicio de sesión del usuario en el comando de canalización: %{code}' + instructions: + '1': Vaya a %{preferences_link} y configure su "%{sms_email_name}" y "%{sms_context_name}" + para todos los enviados por correo electrónico (que podrían provenir de + un mensaje SMS) + '3': ¡Envíe un correo electrónico a su dirección recién configurada! + '2': En sendmail/qmail/postfix/whatever, configure un alias de dirección de + correo electrónico para enviar mensajes a %{command} + description: 'Si Tracks se ejecuta en el mismo servidor que tu correo, puedes + utilizar el gestor de correo integrado en Tracks. Pasos para configurarlo:' + rich_api_tip: También puedes utilizar la Rich Todo API para enviar tareas como + "lavar la ropa en casa" o "llamar a Bill > proyecto X". El asunto del mensaje + rellenará la descripción, el contexto y el proyecto, mientras que el cuerpo + rellenará la nota de la tarea. + configuration: Es posible que deba configurar su %{site_yml} para decirle a + la puerta de enlace de mensajes que mire el campo %{to_name} o el campo %{from_name} + para buscar al usuario de Tracks desde la dirección de correo electrónico + en ese campo. + mailgun: + description: Si desea enviar tareas por correo electrónico a Tracks, pero no + puede ejecutar un servidor de correo en el mismo host, puede utilizar la compatibilidad + con %{mailgun_link} integrada en Tracks. + developer_documentation_link: Información para desarrolladores de Tracks + cron_email_subject: Realiza un seguimiento de las acciones que vencen en los próximos + 7 días + title: Integraciones + intro: Tracks se puede integrar con otras herramientas... lo que sea necesario + para ayudarle a hacer las cosas! Esta página tiene información sobre cómo configurar + algunos de estos. No todas ellas son aplicables a todas las plataformas, y algunas + requieren más conocimientos técnicos que otras. Véase también %{documentation_link} + cron_2: Por supuesto, puede utilizar otro texto %{feeds_link} - ¿Por qué no enviar + una lista de las próximas acciones delproyecto en particular a un grupo de colegas + que están trabajando en el proyecto? + feeds_link_text: feeds proporcionados por Tracks + contents_header: 'Contenido:' + add_your_own: ¿Tienes uno propio para agregar? %{tell_us_link} y podemos incluirlo + en esta página en futuras versiones de Tracks. + tell_us_link_text: Cuéntanos sobre ello en nuestra cola de problemas + cron_1: Si ingresa la siguiente entrada a su crontab, recibirá un correo electrónico + todos los días alrededor de las 5 AM con una lista de las próximas acciones + que deben realizarse dentro de los próximos 7 días. help: title: Help usage: '' @@ -436,7 +493,7 @@ es: contribute_link_text: project website mailing_list_link_text: Mailing list irc_bullet: '%{irc_link} (también disponible en %{matrix_link})' - irc_link_text: 'IRC channel #Tracks@FreeNode' + irc_link_text: 'Canal IRC #Tracks@Libera' matrix_link_text: Matriz layouts: mobile_navigation: @@ -597,7 +654,8 @@ es: units: byte: one: Byte - other: Bytes + many: Bytes + other: '' gb: GB kb: KB mb: MB @@ -953,7 +1011,8 @@ es: completed_actions_with: Acciones completadas con la lengüeta «%{tag_name}» completed_in_archive: one: There is one completed action in the archive. - other: There are %{count} completed actions in the archive. + many: There are %{count} completed actions in the archive. + other: '' completed_last_day: Completed in the last 24 hours completed_last_x_days: Completed in last %{count} days completed_recurrence_completed: There is no next action after the recurring action @@ -973,7 +1032,8 @@ es: due date before deferring. defer_x_days: one: Defer one day - other: Defer %{count} days + many: Defer %{count} days + other: '' deferred_actions_with: Deferred actions with the tag '%{tag_name}' deferred_pending_actions: Deferred/pending actions deferred_tasks_title: TRACKS::Recordatorio @@ -1012,7 +1072,8 @@ es: due: 'Vence: %{date}' has_x_pending: one: Tiene una tarea pendiente - other: Tiene %{count} tareas pendientes + many: Tiene %{count} tareas pendientes + other: '' hidden_actions: Tareas ocultas in_hidden_state: en estado oculto in_pending_state: en estado pendiente @@ -1179,8 +1240,9 @@ es: task_list_title: TRACKS::List etiquetadas tickler_items_due: one: Un elemento de tiquet ahora está vencido - recargue la página para verlo. - other: '%{count} elementos de ticket ahora están vencidos - recargue la página + many: '%{count} elementos de ticket ahora están vencidos - recargue la página para verlos.' + other: '' to_tickler: al recordatorio unable_to_add_dependency: Es imposible añadir dependencia unresolved_dependency: '' @@ -1191,7 +1253,7 @@ es: auth_change_submit: Modifica el tipo de autenticación auth_type_update_error: 'Hubo un problema actualizando su tipo de autenticación: %{error_messages}' - auth_type_updated: Tipo autenticador actualizado + auth_type_updated: Tipo autenticador actualizado. change_auth_type_title: TRACKS::Change tipo de autenticación change_authentication_type: Cambia el tipo de autenticación change_password_prompt: Introduzca su contraseña nueva dentro de los campos debajo @@ -1246,13 +1308,13 @@ es: multi_page_html: Representando %{model} %{from} - %{to} de %{count} en el total single_page: - one: Viendo del 1 %{model} + one: No %{model} encontrado + many: Viendo del 1 %{model} other: Viendo todos los %{count} %{model} - zero: No %{model} encontrado single_page_html: - one: Viendo del 1 %{model} + one: No %{model} encontrado + many: Viendo del 1 %{model} other: Viendo todos los %{count} %{model} - zero: No %{model} encontrado page_gap: "…" previous_label: "« Anterior" rest_help: @@ -1260,3 +1322,5 @@ es: title: Autenticación activeresource: ror_link_text: Ruby on Rails + notes: + curl_description: Todos los ejemplos utilizan %{curl}. From 98e57367e9d627f443e986c71e630faa479a00a8 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Sat, 1 Oct 2022 14:08:07 +0000 Subject: [PATCH 637/767] Translated using Weblate (Spanish) Currently translated at 91.0% (1019 of 1119 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/es/ --- config/locales/es.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/locales/es.yml b/config/locales/es.yml index 326a9bb3..d576e9e2 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -439,6 +439,7 @@ es: mailgun: Enviar correos a los Seguimientos con Mailgun automatic_email: Envíese automáticamente por correo electrónico las próximas acciones + email_rich: Formato del correo electrónico de Rich Todo Message message_gateway: one_user_configuration: 'También puede enviar todos los correos electrónicos a un usuario específico de Tracks. Configure mail_dispatch en site.yml a %{single_user_value} From 10ad112b7074940fa1b9265d7c83af3dee1c874e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20H=C3=BCseyin=20Ekseli?= Date: Fri, 9 Dec 2022 09:30:22 +0000 Subject: [PATCH 638/767] Translated using Weblate (Turkish) Currently translated at 30.1% (337 of 1119 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/tr/ --- config/locales/tr.yml | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/config/locales/tr.yml b/config/locales/tr.yml index c7e5b762..7b9613e5 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -21,9 +21,9 @@ tr: paste_field: 'İçe aktarılan YAML dosyasının içeriğini aşağıdaki metin kutucuğuna yapıştır:' warning: Dikkat - yaml_warning: '%{warning}: YAML dosyası dışa aktarılmadan önce mevcut bütün bilgileriniz - kaybolacak. Herhangi bir sorun yaşama ihtimalinize karşılık, eğer veri tabanına - şu anda erişiminiz var ise yedeklemenizi öneririz.' + yaml_warning: '%{warning}: YAML dosyası dışa aktarılmadan önce mevcut bütün + bilgileriniz kaybolacak. Herhangi bir sorun yaşama ihtimalinize karşılık, + eğer veri tabanına şu anda erişiminiz var ise yedeklemenizi öneririz.' export: page_title: Tracks::Export title: Dışa aktarılıyor @@ -39,8 +39,8 @@ tr: download_link: İndirme bağlantısı yaml_link_title: YAML dosyası xml_description: '%{xml}: Veri aktarımı ve düzenleme için en iyisidir' - yaml_experimental: Lütfen YAML dosyalarının deneysel olarak desteklendiğini göz - önünde bulundurunuz. Önemli verileri yedeklerken dikkatli olunuz. + yaml_experimental: Lütfen YAML dosyalarının deneysel olarak desteklendiğini + göz önünde bulundurunuz. Önemli verileri yedeklerken dikkatli olunuz. csv_description: '%{csv}: İş tablosuna veya veri analizi yazılımlarına aktarmak için en iyisidir' xml_link_description: XML dosyası bütün eylemlerinizi, içeriklerinizi, projelerinizi, @@ -80,7 +80,8 @@ tr: context_hide: Font sayfasında gizle? context_deleted: Silinen içerik '%{name}' completed_tasks_title: TRACKS::şuradan '%{context_name}' tamamlanan eylemler - all_completed_tasks_title: TRACKS::şuradan '%{context_name}' tamamlanan bütün eylemler + all_completed_tasks_title: TRACKS::şuradan '%{context_name}' tamamlanan bütün + eylemler add_context: İçerik ekle common: wiki: Wiki @@ -97,8 +98,8 @@ tr: by_task_count_title: Görev sayısına göre sırala by_task_count: Görev sayısına göre alphabetically_title: Projeleri alfabetik olarak sırala - alphabetically_confirm: Bu projeleri alfabetik olarak sıralamak istediğinize emin - misiniz? Bu işlem mevcut sıralamayı iptal edecektir. + alphabetically_confirm: Bu projeleri alfabetik olarak sıralamak istediğinize + emin misiniz? Bu işlem mevcut sıralamayı iptal edecektir. alphabetically: Alfabetik sırayla show_all: Hepsini göster server_error: Sunucuda bir hata meydana geldi. @@ -149,8 +150,8 @@ tr: one: Not yok other: 1 not var actions_midsentence: - one: Eylem - other: Eylemler + one: eylem + other: eylemler activerecord: errors: template: @@ -172,7 +173,8 @@ tr: taken: zaten alınmış restrict_dependent_destroy: has_many: Bu kayda bağlı bir dosya bulunduğu için kayıt silinemez %{record} - has_one: Bu kayda bağlı farklı bir dosya bulunduğu için kayıt silinemez %{record} + has_one: Bu kayda bağlı farklı bir dosya bulunduğu için kayıt silinemez + %{record} record_invalid: 'Doğrulama başarısız: %{errors}' odd: tek sayı olmalıdır not_a_number: rakam değildir @@ -380,10 +382,10 @@ tr: ical_feed: iCal akış last_fixed_number: Son %{number} eylem/ler legend: 'Semboller:' - notice_incomplete_only: "Not: Akış, aksi işaretlenmedikçe sadece tamamlanmamış eylemleri\ - \ gösterir. Bu iCal akışları todo listesine eklenebilir. Eğer bitimi yaklaşan\ - \ todo'ları takvimde görüntülemek istiyorsanız, takvim sayfasından iCal akışını\ - \ kullanın" + notice_incomplete_only: "Not: Akış, aksi işaretlenmedikçe sadece tamamlanmamış\ + \ eylemleri gösterir. Bu iCal akışları todo listesine eklenebilir. Eğer bitimi\ + \ yaklaşan todo'ları takvimde görüntülemek istiyorsanız, takvim sayfasından\ + \ iCal akışını kullanın" plain_text_feed: Düz Yazı Akışı project_centric: Belirli bir projedeki tamamlanmamış eylemler akışı project_needed: Akış talep etmeden önce en az bir proje olmalı @@ -401,9 +403,9 @@ tr: add_your_own: Eklemek istediğiniz araç mı var? Tracks'ın gelecek sürümlerine ekleyebilmemiz için bize gönderin %{tell_us_link}. intro: 'Tracks işinize yarayabilecek diğer araçlarla entegre edilebilir! Bu sayfa - bazılarını entegre etmeye yönelik bilgi içerir. Her platforma uygulanabilir olmayabilirler - ve bazıları diğerlerine kıyasla daha fazla teknik bilgi gerektirebilir. Ek bilgi - için: %{documentation_link}' + bazılarını entegre etmeye yönelik bilgi içerir. Her platforma uygulanabilir + olmayabilirler ve bazıları diğerlerine kıyasla daha fazla teknik bilgi gerektirebilir. + Ek bilgi için: %{documentation_link}' developer_documentation_link: Tracks için geliştirici dokümantasyonu contents_header: 'İçerikler:' tell_us_link_text: Bunun hakkında bize görüş bildirin @@ -415,8 +417,8 @@ tr: bitimi yaklaşan eylemlerle ilgili bir e-posta alacaksınız. message_gateway: rich_api_tip: Mesaj içeriği tanım, içerik ve proje kısmına, not ise gövde metnine - yazarak "çamaşırları yıka @ Ev" veya "Mehmet'i Ara > x projesi" ve benzeri türden - görevler oluşturmak için Rich Todo API kullanabilirsiniz. + yazarak "çamaşırları yıka @ Ev" veya "Mehmet'i Ara > x projesi" ve benzeri + türden görevler oluşturmak için Rich Todo API kullanabilirsiniz. footer: send_feedback: Geri bildirim version: 'Tracks %{version} (%{revision_with_date})' From d26275c5e963e6ead91f1653eb33ce56ec0a6a15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=A1=D0=B2?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D1=83=D0=BD=D0=BE=D0=B2?= Date: Wed, 18 Jan 2023 20:07:10 +0000 Subject: [PATCH 639/767] Translated using Weblate (Russian) Currently translated at 97.0% (1086 of 1119 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/ru/ --- config/locales/ru.yml | 52 ++++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/config/locales/ru.yml b/config/locales/ru.yml index ef7e3bff..2622d87e 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -103,7 +103,6 @@ ru: one: действий few: действие many: действия - other: действия add: Добавить ajaxError: От сервера была получена ошибка back: Назад @@ -115,9 +114,9 @@ ru: contribute: Сотрудничество create: Создать days_midsentence: - one: дней - few: день - many: дня + one: день + few: дня + many: дней deferred: отложенные description: Описание drag_handle: ТАЩИТЬ @@ -136,10 +135,9 @@ ru: none: Не задано not_available_abbr: н/д note: - few: "%{count} записи" - one: 1 запись - other: '%{count} записи' - zero: нет записей + one: нет записей + few: 1 запись + many: '%{count} записи' notes: Заметки numbered_step: Шаг %{number} ok: ОК @@ -221,6 +219,7 @@ ru: нет доступа к каталогу загрузок? %{e} invalid_csv: 'Недопустимый CSV: не удаётся прочитать заголовки: %{e}' invalid_destination: 'Неверное место назначения импорта: %{e}' + no_context: Контекст по умолчанию не найден yaml_disabled: Загрузка YAML отключена todos_count: '%{count} задач импортировано' projects_count: '%{count} проектов импортировано' @@ -474,12 +473,15 @@ ru: для месяца и дня или шестизначной для года, месяца и дня) project: Проект для внесения в задачу context: Контекст для внесения в задачу + tickler_date: Дата напоминания для задачи (может быть 2 цифры для дня, 4 цифры + для месяца-дня или 6 цифр для года-месяца-дня) fields_instruction: Все специальные символы являются необязательными, а текст до первого символа (или конца строки) используется в качестве описания задачи meaning_title: Значение symbol_title: Символ fields_title: 'Поля:' - description: 'Для обоих описанных методов используется следующий формат:' + description: 'Для обоих описанных методов в теме сообщения можно использовать + следующий формат для добавления метаданных:' message_gateway: instructions: '3': На вашу свежеустановленную почту отправлено письмо! @@ -1082,7 +1084,6 @@ ru: one: Отложить на 1 день few: Отложить на %{count} дня many: Отложить на %{count} дней - other: Отложить на %{count} дней deferred_actions_with: Отложенные действия с меткой '%{tag_name}' deferred_pending_actions: Отложенные/ожидающие действия deferred_tasks_title: TRACKS::Отложенные @@ -1360,13 +1361,13 @@ ru: multi_page: Отображено %{model} %{from} - %{to} из %{count} multi_page_html: Отображено %{model} %{from} - %{to} из %{count} single_page: - one: Отображён 1 %{model} - other: Отображены все %{count} %{model} - zero: '%{model} не найден' + one: '%{model} не найден' + few: Отображён 1 %{model} + many: Отображены все %{count} %{model} single_page_html: - one: Отображен 1 %{model} - other: Отображены все %{count} %{model} - zero: '%{model} не найден' + one: '%{model} не найден' + few: Отображен 1 %{model} + many: Отображены все %{count} %{model} page_gap: "…" previous_label: "← Пред" rest_help: @@ -1378,8 +1379,27 @@ ru: другими приложениями. На этой странице представлена документация по нашему REST API. title: Вступление + content_3: API — это служба %{restful_link}. Все данные доступны через API как + ресурс, на который можно сослаться по уникальному идентификатору. Он отвечает + на ряд методов HTTP, в частности GET, PUT, POST и UPDATE, а все ответы от + API представлены в простом XML формате, в кодировке UTF-8. + restful_link_text: RESTful curl_link_text: cURL id: ID title: Документация REST API для разаработчиков + auth: + basic_auth_link_text: Базовая HTTP-аутентификация + title: Аутентификация + content: Аутентификация обрабатывается с помощью %{auth_link}. Ваше имя пользователя + и пароль Tracks используются в качестве учетных данных аутентификации через + API. Обратите внимание, что при обычной HTTP-аутентификации ваш пароль отправляется + в виде открытого текста. Если вам нужно более безопасное решение для аутентификации, + вам следует настроить веб-сервер для запуска Tracks по HTTPS. + retrieve: + title: Получение данных из API + content: 'Чтобы получить данные, вам нужно всего лишь выполнить HTTP GET запрос + для идентификатора ресурса. Например, если вы хотите получить все контексты + с %{curl_link}:' + single_context: 'Получение единого контекста:' auth_type: database: База данных From 8ed97a511dc1b9711093b015f6cd428993789768 Mon Sep 17 00:00:00 2001 From: Ranforingus Date: Wed, 22 Nov 2023 16:50:16 +0000 Subject: [PATCH 640/767] Translated using Weblate (Dutch) Currently translated at 88.2% (988 of 1119 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/nl/ --- config/locales/nl.yml | 319 ++++++++++++++++++++++++++---------------- 1 file changed, 202 insertions(+), 117 deletions(-) diff --git a/config/locales/nl.yml b/config/locales/nl.yml index b244660e..739fa7a3 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1,4 +1,3 @@ ---- nl: activerecord: attributes: @@ -70,8 +69,8 @@ nl: odd: moet oneven zijn record_invalid: 'Validatie mislukt: %{errors}' restrict_dependent_destroy: - many: Kan record niet verwijderen omdat afhankelijke %{record} bestaan one: Kan record niet verwijderen omdat een afhankelijk %{record} bestaat + other: Kan record niet verwijderen omdat afhankelijke %{record} bestaan taken: is al gepakt too_long: is te lang (maximum is %{count} karakters) too_short: is te kort (minimum is %{count} karakters) @@ -87,14 +86,13 @@ nl: body: Er waren problemen met de volgende velden header: one: 1 fout voorkomt het kunnen bewaren van deze %{model} - other: "%{count} fouten voorkomen dat dit %{model} bewaard kan worden" + other: '%{count} fouten voorkomen dat dit %{model} bewaard kan worden' common: action: Actie actions: Acties actions_midsentence: - one: actie - other: acties - zero: acties + one: acties + other: actie add: Toevoegen ajaxError: Er is een fout opgetreden bij het ophalen van gegevens van de server back: Terug @@ -106,9 +104,8 @@ nl: contribute: Bijdragen create: Maken days_midsentence: - one: dag - other: dagen - zero: dagen + one: dagen + other: dag deferred: uitgestelde description: Beschrijving drag_handle: SLEEP @@ -127,9 +124,8 @@ nl: none: Geen not_available_abbr: n/b note: - one: 1 notitie - other: "%{count} notities" - zero: geen notities + one: geen notities + other: 1 notitie notes: Notities numbered_step: Stap %{number} ok: Ok @@ -145,11 +141,13 @@ nl: show_all: Toon alle sort: alphabetically: Alfabetisch - alphabetically_confirm: Weet u zeker dat u deze projecten alfabetisch wilt sorteren? Dat zal de huidige sorteervolgorde aanpassen. + alphabetically_confirm: Weet u zeker dat u deze projecten alfabetisch wilt sorteren? + Dat zal de huidige sorteervolgorde aanpassen. alphabetically_title: Sorteer projecten alfabetisch by_task_count: Op aantal acties by_task_count_title: Sorteer op aantal acties - by_task_count_title_confirm: Weet u zeker dat u deze op aantal acties wilt sorteren? Dat zal de huidige sorteervolgorde aanpassen. + by_task_count_title_confirm: Weet u zeker dat u deze op aantal acties wilt sorteren? + Dat zal de huidige sorteervolgorde aanpassen. sort: Sorteer third: Derde todo: actie @@ -167,7 +165,8 @@ nl: context_name: Context naam context_state: Status delete_context: Verwijder context - delete_context_confirmation: Weet u zeker dat u de context '%{name}' wilt verwijderen? Merk op dat dit ook alle (herhalende) acties in deze context zal verwijderen! + delete_context_confirmation: Weet u zeker dat u de context '%{name}' wilt verwijderen? + Merk op dat dit ook alle (herhalende) acties in deze context zal verwijderen! delete_context_title: Verwijder context edit_context: Bewerk context hidden_contexts: Verborgen contexten @@ -267,28 +266,26 @@ nl: other: bijna %{count} jaren half_a_minute: halve minuut less_than_x_minutes: - one: minder dan een minuut - other: minder dan %{count} minuten - zero: minder dan 1 minuut + one: minder dan 1 minuut + other: minder dan een minuut less_than_x_seconds: one: minder dan 1 seconde - other: minder dan %{count} seconden - zero: minder dan 1 seconde + other: minder dan 1 seconde over_x_years: one: over 1 jaar other: over %{count} jaren x_days: one: 1 dag - other: "%{count} dagen" + other: '%{count} dagen' x_minutes: one: 1 minuut - other: "%{count} minuten" + other: '%{count} minuten' x_months: one: 1 maand - other: "%{count} maanden" + other: '%{count} maanden' x_seconds: one: 1 seconde - other: "%{count} seconden" + other: '%{count} seconden' prompts: day: Dag hour: Uur @@ -321,7 +318,8 @@ nl: too_long: is te lang (maximum is %{count} karakters) too_short: is te kort (minimum is %{count} karakters) wrong_length: is de verkeerde lengte (zou %{count} karakters moeten zijn) - user_unauthorized: '401 Unauthorized: Alleen administratieve gebruikers mogen deze functie gebruiken.' + user_unauthorized: '401 Unauthorized: Alleen administratieve gebruikers mogen + deze functie gebruiken.' feedlist: actions_completed_last_week: Acties afgerond in de afgelopen 7 dagen actions_due_next_week: Acties die binnen 7 dagen afgerond moeten @@ -334,14 +332,17 @@ nl: choose_context: Kies de context waar je een feed van wilt choose_project: Kies het project waar je een feed van wilt context_centric_actions: Feeds voor onafgeronde acties in een specifieke context - context_needed: Er moet eerst ten minste één context zijn voor je een feed kan opvragen + context_needed: Er moet eerst ten minste één context zijn voor je een feed kan + opvragen ical_feed: iCal feed last_fixed_number: Laatste %{number} acties legend: Legenda - notice_incomplete_only: 'Merk op: alle feeds laten alleen acties zien die niet afgerond zijn, tenzij anders vermeld.' + notice_incomplete_only: 'Merk op: alle feeds laten alleen acties zien die niet + afgerond zijn, tenzij anders vermeld.' plain_text_feed: Reguliere tekst feed project_centric: Feeds voor onafgeronde acties in een specifiek project - project_needed: Er moet ten minste één project zijn voor een feed opgevraagd kan worden + project_needed: Er moet ten minste één project zijn voor een feed opgevraagd kan + worden projects_and_actions: Actieve projecten met hun acties rss_feed: RSS Feed select_feed_for_context: Kies de feed voor deze context @@ -359,52 +360,83 @@ nl: integrations: sections: automatic_email: Email jezelf automatisch de acties met een aflopende deadline - message_gateway: Integreer Tracks met een email server om een actie via email naar Tracks te sturen + message_gateway: Integreer Tracks met een email server om een actie via email + naar Tracks te sturen mailgun: Send emails to Tracks with Mailgun email_rich: Rich Todo Message email format opensearch_description: Zoek in Tracks title: Integratie - intro: "Tracks kan met een aantal tools worden geïntegreerd... Alles om je te helpen om dingen gedaan te krijgen! Deze pagina heeft informatie over het tot stand brengen van sommige integratievormen. Deze voorbeelden zijn niet altijd voor alle platformen van toepassing en sommige voorbeelden vragen meer technische kennis dan anderen Zie ook %{documentation_link}." - developer_documentation_link: "de documentatie voor ontwikkelaars met Tracks' REST API" + intro: "Tracks kan met een aantal tools worden geïntegreerd... Alles om je te + helpen om dingen gedaan te krijgen! Deze pagina heeft informatie over het tot + stand brengen van sommige integratievormen. Deze voorbeelden zijn niet altijd + voor alle platformen van toepassing en sommige voorbeelden vragen meer technische + kennis dan anderen Zie ook %{documentation_link}." + developer_documentation_link: "de documentatie voor ontwikkelaars met Tracks' + REST API" contents_header: "Inhoud:" - add_your_own: Heb je een tip om hier toe te voegen? %{tell_us_link} en misschien voegen we jouw tip toe op deze pagina in een toekomstige versie van Tracks. + add_your_own: Heb je een tip om hier toe te voegen? %{tell_us_link} en misschien + voegen we jouw tip toe op deze pagina in een toekomstige versie van Tracks. tell_us_link_text: Vertel ons er over in onze issue queue - cron_1: Als je de volgende regel toevoegd aan jouw crontab, dat ontvang je een e-mail op elke dag rond 05:00 met een lijst met acties waarvan de deadline afloopt binnen de komende 7 dagen. - cron_2: "Uiteraard kan je ook een andere %{feeds_link} – bijvoorbeeld een email met een lijst van acties voor een specifiek project naar een groep collega's die werken aan dat project?" + cron_1: Als je de volgende regel toevoegd aan jouw crontab, dat ontvang je een + e-mail op elke dag rond 05:00 met een lijst met acties waarvan de deadline afloopt + binnen de komende 7 dagen. + cron_2: "Uiteraard kan je ook een andere %{feeds_link} – bijvoorbeeld een email + met een lijst van acties voor een specifiek project naar een groep collega's + die werken aan dat project?" cron_email_subject: Tracks actions due in the next 7 days feeds_link_text: text feed gebruiken die Tracks biedt message_gateway: - description: 'Als Tracks draait op dezelfde server als jouw mailserver, dan kan je de geïntegreerde mail handler gebruiken van Tracks. Om dit in te stellen:' - rich_api_tip: 'Je kan ook de Rich Todo API gebruiken om acties te maken zoals "do laundry @ Home" of "Call Bill > project X". Het onderwerp van het bericht zal de bijschrijving van de actie vullen, de context, en het project, terwijl de body van het bericht de notities van de actie zal vullen.' - configuration: "Het kan nodig zijn om jouw %{site_yml} te configureren om de message gateway te laten kijken naar het %{to_name} veld of het %{from_name} veld om de Tracks-gebruiker op te zoeken met het emailadres uit dat veld." - one_user_configuration: "Je kan ook alle email naar een specifieke Tracks gebruiker sturen. Stel mail_dispatch in site.yml in op %{single_user_value} en geeft de login van de gebruiker door: %{code}" + description: 'Als Tracks draait op dezelfde server als jouw mailserver, dan + kan je de geïntegreerde mail handler gebruiken van Tracks. Om dit in te stellen:' + rich_api_tip: 'Je kan ook de Rich Todo API gebruiken om acties te maken zoals + "do laundry @ Home" of "Call Bill > project X". Het onderwerp van het bericht + zal de bijschrijving van de actie vullen, de context, en het project, terwijl + de body van het bericht de notities van de actie zal vullen.' + configuration: "Het kan nodig zijn om jouw %{site_yml} te configureren om de + message gateway te laten kijken naar het %{to_name} veld of het %{from_name} + veld om de Tracks-gebruiker op te zoeken met het emailadres uit dat veld." + one_user_configuration: "Je kan ook alle email naar een specifieke Tracks gebruiker + sturen. Stel mail_dispatch in site.yml in op %{single_user_value} en geeft + de login van de gebruiker door: %{code}" instructions: - '1': 'Ga naar %{preferences_link} en stel in "%{sms_email_name}" en "%{sms_context_name}" voor acties die verzonden zijn via email (die bijv. komen via een SMS message)' - '2': In sendmail/qmail/postfix/whatever, stel een email address alias in om berichten door te sturen naar %{command} + '1': 'Ga naar %{preferences_link} en stel in "%{sms_email_name}" en "%{sms_context_name}" + voor acties die verzonden zijn via email (die bijv. komen via een SMS message)' + '2': In sendmail/qmail/postfix/whatever, stel een email address alias in om + berichten door te sturen naar %{command} '3': Verstuur een email naar het net geconfigureerde e-mail adres! mailgun: - description: If you want to email tasks to Tracks, but cannot run a mailserver on the same host, you could use the %{mailgun_link} support built in to Tracks. - conditions: For this to work your Tracks server will need to be reachable from the internet, so that Mailgun can POST data to it. - gateway_instructions: All the comments about the email format from the section above apply to the Mailgun handling, as the data is processed the same way + description: If you want to email tasks to Tracks, but cannot run a mailserver + on the same host, you could use the %{mailgun_link} support built in to Tracks. + conditions: For this to work your Tracks server will need to be reachable from + the internet, so that Mailgun can POST data to it. + gateway_instructions: All the comments about the email format from the section + above apply to the Mailgun handling, as the data is processed the same way instructions: '1': Go to %{mailgun_link} and register for a free account. '2': "Go to 'Routes' in the Mailgun control panel, and add a new route:" 2a: "'Filter expression' should be set to 'catch_all()'" - 2b: "'Action' should be 'forward(\"http://mytracksserver.example.com/mailgun/mime\")'" - '3': 'Go to %{preferences_link} and enter your incoming Mailgun email address (e.g. tracks@user.mailgun.com) in the "%{sms_email_name}" box.' + 2b: "'Action' should be 'forward(\"http://mytracksserver.example.com/mailgun/mime\"\ + )'" + '3': 'Go to %{preferences_link} and enter your incoming Mailgun email address + (e.g. tracks@user.mailgun.com) in the "%{sms_email_name}" box.' '4': 'Select a default context for emails to be put in with "%{sms_context_name"' '5': "Add your Mailgun API key (not the Public API key) to the Tracks 'site.yml'" - '6': "Update the mailmap in 'site.yml' to define which senders can send emails to which incoming addresses. For example, to send emails from your work and home email accounts to your tracks Mailgun route, set it up like this: %{code}" + '6': "Update the mailmap in 'site.yml' to define which senders can send emails + to which incoming addresses. For example, to send emails from your work + and home email accounts to your tracks Mailgun route, set it up like this: + %{code}" email_rich: description: "For both of the above methods, the follow format can be used:" fields_title: "The fields are:" symbol_title: Symbol meaning_title: Meaning - fields_instruction: All symbols are optional, and text up to the first symbol (or end of string) is used as the description of the todo + fields_instruction: All symbols are optional, and text up to the first symbol + (or end of string) is used as the description of the todo field_descriptions: context: The context to place the Todo in project: The project to place the Todo in - due_date: The due date for the Todo (may be 2 digits for day, 4 digits for month-day, or 6 digits for year-month-day) + due_date: The due date for the Todo (may be 2 digits for day, 4 digits for + month-day, or 6 digits for year-month-day) tag: A tag to apply to the Todo – may be used multiple times star: Flag to star the Todo example_names: @@ -416,11 +448,14 @@ nl: '2': tag2 help: title: Help - usage: 'You can find information on the usage in the %{manual_link} in the project GitHub wiki.' + usage: 'You can find information on the usage in the %{manual_link} in the project + GitHub wiki.' manual_link_text: User manual - bugs: 'If you encounter a bug or have a feature request, please report it in the %{issue_link}.' + bugs: 'If you encounter a bug or have a feature request, please report it in the + %{issue_link}.' issue_link_text: issue queue - contribute: 'We gladly welcome all contributions to Tracks. Check the %{contribute_link} for further information. You can also come discuss with the community:' + contribute: 'We gladly welcome all contributions to Tracks. Check the %{contribute_link} + for further information. You can also come discuss with the community:' contribute_link_text: project website mailing_list_link_text: Mailing list irc_bullet: '%{irc_link} (also available in %{matrix_link})' @@ -495,14 +530,16 @@ nl: cas_login: CAS Inloggen cas_no_user_found: Hallo,%{username}! Je hebt nog geen account op Tracks. cas_signup_link: Aanvragen account - cas_username_not_found: Sorry, geen gebruiker met die CAS gebruikersnaam bestaat (%{username}) + cas_username_not_found: Sorry, geen gebruiker met die CAS gebruikersnaam bestaat + (%{username}) log_in_again: opnieuw in te loggen. logged_out: Je bent afgemeld bij Tracks. login_cas: Ga naar het CAS login_standard: Ga terug naar de standaard login login_with_openid: inloggen met een OpenID mobile_use_openid: "... if inloggen met een OpenID" - openid_identity_url_not_found: Sorry, geen gebruiker met die identiteit URL bestaat (%{identity_url}) + openid_identity_url_not_found: Sorry, geen gebruiker met die identiteit URL bestaat + (%{identity_url}) option_separator: of, please_login: Log in om Tracks te gebruiken session_time_out: Sessie is verlopen. Gelieve %{link} @@ -530,8 +567,10 @@ nl: todo: error_date_must_be_future: moet een datum in de toekomst zijn user: - error_context_not_associated: Context %{context} niet geassocieerd met gebruikers %{user}. - error_project_not_associated: Project %{project} niet geassocieerd met gebruikers %{user}. + error_context_not_associated: Context %{context} niet geassocieerd met gebruikers + %{user}. + error_project_not_associated: Project %{project} niet geassocieerd met gebruikers + %{user}. notes: delete_confirmation: Weet u zeker dat u de notitie '%{id}' wilt verwijderen? delete_item_title: Verwijder item @@ -540,7 +579,8 @@ nl: deleted_note: Verwijder notitie '%{id}' edit_item_title: Item bewerken in_project: 'In:' - no_notes_available: 'Momenteel zijn er geen notities: voeg notities toe aan projecten vanaf de individuele project pagina''s.' + no_notes_available: 'Momenteel zijn er geen notities: voeg notities toe aan projecten + vanaf de individuele project pagina''s.' note_header: Notitie %{id} note_link_title: Toon notitie %{id} note_location_link: 'In:' @@ -551,17 +591,17 @@ nl: format: delimiter: "." format: "%u %n" - precision: 2 + precision: '2' separator: "," - significant: false - strip_insignificant_zeros: false + significant: 'False' + strip_insignificant_zeros: 'False' unit: "€" format: delimiter: "." - precision: 3 + precision: '3' separator: "," - significant: false - strip_insignificant_zeros: false + significant: 'False' + strip_insignificant_zeros: 'False' human: decimal_units: format: "%n %u" @@ -574,9 +614,9 @@ nl: unit: "." format: delimiter: "." - precision: 1 - significant: true - strip_insignificant_zeros: true + precision: '1' + significant: 'True' + strip_insignificant_zeros: 'True' storage_units: format: "%n %u" units: @@ -602,14 +642,18 @@ nl: current_authentication_type: Uw authenticatietype is %{auth_type} edit_preferences: Voorkeuren bewerken generate_new_token: Genereer een nieuwe token - generate_new_token_confirm: Weet u dit zeker? Het genereren van een nieuw token zal de bestaande te vervangen en dit zal het extern gebruiken van de oude token laten mislukken. + generate_new_token_confirm: Weet u dit zeker? Het genereren van een nieuw token + zal de bestaande te vervangen en dit zal het extern gebruiken van de oude token + laten mislukken. is_false: Nee is_true: Ja open_id_url: Uw OpenID URL is page_title: 'TRACKS:: Voorkeuren' page_title_edit: 'TRACKS:: Voorkeuren bewerken' password_changed: Je wachtwoord is gewijzigd, meld je opnieuw aan. - remove_introduction: You can remove your user account here. Note that this is irreversible and will remove all your data! After removal you will be logged out. + remove_introduction: You can remove your user account here. Note that this is + irreversible and will remove all your data! After removal you will be logged + out. show_number_completed: Toon %{number} voltooide items sms_context_none: Geen staleness_starts_after: Markeren openstaande acties begint na %{days} dagen @@ -629,7 +673,8 @@ nl: add_note: Een notitie toevoegen add_note_submit: Notitie toevoegen add_project: Voeg project toe - all_completed_tasks_title: TRACKS::Overzicht van all afgeronde acties in project '%{project_name}' + all_completed_tasks_title: TRACKS::Overzicht van all afgeronde acties in project + '%{project_name}' completed_actions: Completed actions completed_actions_empty: Completed actions empty completed_projects: Voltooide projecten @@ -641,7 +686,8 @@ nl: deferred_actions: Deferred actions deferred_actions_empty: Deferred actions empty delete_project: Project verwijderen - delete_project_confirmation: Weet u zeker dat u wilt het project '%{name} wilt verwijderen? + delete_project_confirmation: Weet u zeker dat u wilt het project '%{name} wilt + verwijderen? delete_project_title: Verwijder het project edit_project_settings: Bewerk project instellingen edit_project_title: Bewerk project @@ -749,11 +795,15 @@ nl: action_selection_title: 'TRACKS:: Actie selectie' actions: Acties actions_30days_title: Acties in de afgelopen 30 dagen - actions_actions_avg_created_30days: In de afgelopen 30 dagen heeft u gemiddeld %{count} acties gemaakt + actions_actions_avg_created_30days: In de afgelopen 30 dagen heeft u gemiddeld + %{count} acties gemaakt actions_avg_completed: en voltooide een gemiddelde van %{count} acties per maand. - actions_avg_completed_30days: en voltooide een gemiddelde van %{count} acties per dag. - actions_avg_completion_time: Van al uw afgeronde acties, de gemiddelde tijd dat dit in beslag nam is %{count} dagen. - actions_avg_created: In de afgelopen 12 maanden heeft u gemiddeld%{count} acties aangemaakt + actions_avg_completed_30days: en voltooide een gemiddelde van %{count} acties + per dag. + actions_avg_completion_time: Van al uw afgeronde acties, de gemiddelde tijd dat + dit in beslag nam is %{count} dagen. + actions_avg_created: In de afgelopen 12 maanden heeft u gemiddeld%{count} acties + aangemaakt actions_day_of_week_legend: day_of_week: Dag van de week number_of_actions: Aantal acties @@ -762,7 +812,7 @@ nl: day_of_week: Dag van de week number_of_actions: Aantal acties actions_dow_30days_title: Dag van de week (laatste 30 dagen) - actions_further: en verder + actions_further: ' en verder' actions_last_year: Acties in de afgelopen jaren actions_last_year_legend: months_ago: Maanden geleden @@ -773,10 +823,13 @@ nl: actions_selected_from_week: Gekozen acties van week click_to_return: Klik %{link} om terug te keren naar de statistieken pagina. click_to_return_link: hier - click_to_show_actions_from_week: Klik %{link} om de acties van week %{week} en verder te zien. - click_to_update_actions: Klik op een balk in de grafiek op de acties hieronder aan te passen. + click_to_show_actions_from_week: Klik %{link} om de acties van week %{week} en + verder te zien. + click_to_update_actions: Klik op een balk in de grafiek op de acties hieronder + aan te passen. contexts: Contexten - current_running_time_of_incomplete_visible_actions: Huidige looptijd van onvolledige zichtbare acties + current_running_time_of_incomplete_visible_actions: Huidige looptijd van onvolledige + zichtbare acties index_title: TRACKS::Statistiek labels: avg_completed: Gem afgerond @@ -793,7 +846,8 @@ nl: number_of_days: Aantal dagen geleden percentage: Percentage running_time: Looptijd van een actie (weken) - more_stats_will_appear: Meer statistieken zullen hier verschijnen zodra u acties hebt toegevoegd. + more_stats_will_appear: Meer statistieken zullen hier verschijnen zodra u acties + hebt toegevoegd. no_actions_selected: Er zijn geen acties geselecteerd. no_tags_available: geen tags beschikbaar open_per_week: Active (zichtbare en verborgen) volgende acties per week @@ -812,10 +866,13 @@ nl: percentage: Percentage weeks: Looptijd van een actie (weken). Klik op een balk voor meer info spread_of_actions_for_all_context: Verdeling van acties voor alle contexten - spread_of_running_actions_for_visible_contexts: Verdeling van actieve acties voor zichtbare contexten - tag_cloud_90days_description: Deze tag cloud bevat tags van acties die zijn gemaakt of voltooid in de afgelopen 90 dagen. + spread_of_running_actions_for_visible_contexts: Verdeling van actieve acties voor + zichtbare contexten + tag_cloud_90days_description: Deze tag cloud bevat tags van acties die zijn gemaakt + of voltooid in de afgelopen 90 dagen. tag_cloud_90days_title: Tag cloud met acties in afgelopen 90 dagen - tag_cloud_description: Deze tag cloud bevat tags van alle acties (afgerond, niet voltooid, zichtbaar en / of verborgen) + tag_cloud_description: Deze tag cloud bevat tags van alle acties (afgerond, niet + voltooid, zichtbaar en / of verborgen) tag_cloud_title: Tag Cloud voor alle acties tags: Tags time_of_day: Tijd van de dag (alle acties) @@ -830,7 +887,8 @@ nl: top10_projects: Top 10 projecten top10_projects_30days: Top 10 project in de laatste 30 dagen top5_contexts: Top 5 contexten - top5_visible_contexts_with_incomplete_actions: Top 5 zichtbare contexten met onvolledige acties + top5_visible_contexts_with_incomplete_actions: Top 5 zichtbare contexten met onvolledige + acties totals: Totalen totals_action_count: u heeft een totaal van %{count} acties totals_actions_completed: "%{count} van deze zijn voltooid." @@ -851,7 +909,7 @@ nl: support: array: last_word_connector: ", en" - two_words_connector: en + two_words_connector: ' en ' words_connector: "," select: prompt: Selecteer @@ -870,8 +928,10 @@ nl: action_deleted_error: Verwijderen van de actie is mislukt action_deleted_success: Actie succesvol verwijderd action_due_on: "(deadline actie op %{date})" - action_marked_complete: De actie '%{description}' werd gemarkeerd als %{completed} - action_marked_complete_error: De actie '%{description}' is niet gemarkeerd als %{completed} vanwege een fout op de server. + action_marked_complete: De actie '%{description}' werd gemarkeerd + als %{completed} + action_marked_complete_error: De actie '%{description}' is niet + gemarkeerd als %{completed} vanwege een fout op de server. action_saved: Actie opgeslagen action_saved_to_tickler: Actie opgeslagen in tickler actions: @@ -909,7 +969,8 @@ nl: due_today: Deadline vandaag get_in_ical_format: Ontvang deze agenda in iCal-formaat calendar_page_title: TRACKS::Agenda - cannot_add_dependency_to_completed_todo: Kan deze actie niet als een afhankelijkheid van een voltooide actie toevoegen! + cannot_add_dependency_to_completed_todo: Kan deze actie niet als een afhankelijkheid + van een voltooide actie toevoegen! clear_due_date: Maak deadline leeg clear_show_from_date: Maak de datum Tonen Vanaf leeg completed: Afgerond @@ -920,7 +981,8 @@ nl: other: Er zijn %{count} afgeronde acties in het archief. completed_last_day: Voltooid in de laatste 24 uur completed_last_x_days: Voltooid in de laatste %{count} dagen - completed_recurrence_completed: Er is geen actie na de terugkerende actie die u new verwijderd heeft. De herhaling is voltooid + completed_recurrence_completed: Er is geen actie na de terugkerende actie die + u new verwijderd heeft. De herhaling is voltooid completed_recurring: Afgesloten terugkerende todos completed_recurring_actions_title: TRACKS::Completed recurring actions completed_rest_of_month: Afgerond in de rest van deze maand @@ -932,22 +994,25 @@ nl: confirm_delete: Weet u zeker dat u de actie '%{description}' wilt verwijderen? context_changed: Context veranderd in '%{name}' convert_to_project: Maak project - defer_date_after_due_date: Uitsteldatum is na de vervaldag. Gelieve vervaldag bewerken alvorens uitsteldatum aan te passen. + defer_date_after_due_date: Uitsteldatum is na de vervaldag. Gelieve vervaldag + bewerken alvorens uitsteldatum aan te passen. defer_x_days: one: Een dag uitstellen - other: "%{count} dagen uitstellen" + other: '%{count} dagen uitstellen' deferred_actions_with: Uitgestelde acties met de tag '%{tag_name}' deferred_pending_actions: Uitgestelde/wachtende acties deferred_tasks_title: TRACKS::Tickler delete: Verwijder delete_action: Verwijder actie - delete_recurring_action_confirm: Weet u zeker dat u wilt de terugkerende actie '%{description}' wilt verwijderen? + delete_recurring_action_confirm: Weet u zeker dat u wilt de terugkerende actie + '%{description}' wilt verwijderen? delete_recurring_action_title: Verwijder de terugkerende actie deleted_success: De actie werd met succes verwijderd. depends_on: Hangt af van depends_on_separate_with_commas: Afhankelijk van (gescheiden door komma's) done: Voltooid? - drag_action_title: Sleep naar een andere actie om deze afhankelijk te maken van die actie + drag_action_title: Sleep naar een andere actie om deze afhankelijk te maken van + die actie due: Deadline edit: Bewerken edit_action: Actie bewerken @@ -956,13 +1021,19 @@ nl: error: invalid_due_date: Ongeldige deadline datum invalid_show_from_date: Ongeldige datum voor tonen vanaf - error_completing_todo: Er was een fout bij het voltooien / activeren van de terugkerende actie '%{description}' - error_deleting_item: Er is een fout opgetreden bij het verwijderen van het item '%{description}' - error_deleting_recurring: Er is een fout opgetreden bij het verwijderen van het item '%{description}' - error_removing_dependency: Er is een fout opgetreden het verwijderen van de afhankelijke actie - error_saving_recurring: Er is een fout opgetreden het opslaan van de terugkerende actie '%{description}' + error_completing_todo: Er was een fout bij het voltooien / activeren van de terugkerende + actie '%{description}' + error_deleting_item: Er is een fout opgetreden bij het verwijderen van het item + '%{description}' + error_deleting_recurring: Er is een fout opgetreden bij het verwijderen van het + item '%{description}' + error_removing_dependency: Er is een fout opgetreden het verwijderen van de afhankelijke + actie + error_saving_recurring: Er is een fout opgetreden het opslaan van de terugkerende + actie '%{description}' error_starring: Kon niet de ster van deze actie niet omzetten '%{description}' - error_starring_recurring: Kon niet de ster van deze terugkerende actie niet omzetten '%{description}' + error_starring_recurring: Kon niet de ster van deze terugkerende actie niet omzetten + '%{description}' error_toggle_complete: Kon deze actie niet als afgerond markeren feed_title_in_context: in context '%{context}' feed_title_in_project: In het project '%{project}' @@ -976,10 +1047,12 @@ nl: in_hidden_state: in verborgen toestand in_pending_state: in wachtende toestand list_incomplete_next_actions: Toon onvoltooide acties - list_incomplete_next_actions_with_limit: Toont de laatste %{count} onvoltooide acties + list_incomplete_next_actions_with_limit: Toont de laatste %{count} onvoltooide + acties mark_complete: Markeer gereed mobile_todos_page_title: Alle acties - new_related_todo_created: Een nieuwe actie is toegevoegd, die behoort bij deze terugkerende todo + new_related_todo_created: Een nieuwe actie is toegevoegd, die behoort bij deze + terugkerende todo new_related_todo_created_short: een nieuwe actie gemaakt new_related_todo_not_created_short: een nieuwe actie is niet gemaakt next_action_description: Actie beschrijving @@ -1108,9 +1181,11 @@ nl: yearly_every_x_day: Elke %{month} %{day} yearly_every_xth_day: De %{day} %{day_of_week} van %{month} yearly_options: Instellingen voor jaarlijks terugkerende acties - recurrence_completed: Er is geen volgende actie na de terugkerende actie die u zojuist hebt voltooid. De herhaling is voltooid + recurrence_completed: Er is geen volgende actie na de terugkerende actie die u + zojuist hebt voltooid. De herhaling is voltooid recurrence_period: Herhaling periode - recurring_action_deleted: Actie werd verwijderd. Omdat deze actie herhalend is. werd een nieuwe actie toegevoegd + recurring_action_deleted: Actie werd verwijderd. Omdat deze actie herhalend is. + werd een nieuwe actie toegevoegd recurring_action_saved: Terugkerende actie opgeslagen recurring_actions_title: TRACKS::Terugkerende acties recurring_deleted_success: De recurrente actie is succesvol verwijderd. @@ -1134,27 +1209,35 @@ nl: task_list_title: TRACKS::Toon acties tickler_items_due: one: Een tickler item wordt nu zichtbaar - vernieuw de pagina om het te zien. - other: "%{count} tickerl items zijn nu zichtbaar - vernieuw de pagina om ze te zien." + other: '%{count} tickerl items zijn nu zichtbaar - vernieuw de pagina om ze + te zien.' to_tickler: naar tickler unable_to_add_dependency: Niet in staat om de afhankelijkheid toe te voegen - unresolved_dependency: De waarde die u ingevoerd heeft in het afhankelijkheden veld is niet herleidbaar naar een bestaande actie. Deze waarde wordt niet bewaard met de rest van de actie. Doorgaan? + unresolved_dependency: De waarde die u ingevoerd heeft in het afhankelijkheden + veld is niet herleidbaar naar een bestaande actie. Deze waarde wordt niet bewaard + met de rest van de actie. Doorgaan? was_due_on_date: had deadline op %{date} users: account_signup: Aanmelden voor een account approve_tos: I approve the Terms of Service auth_change_submit: Wijzigen authenticatietype - auth_type_update_error: 'Er was een probleem met het bijwerken van uw authenticatietype: %{error_messages}' + auth_type_update_error: 'Er was een probleem met het bijwerken van uw authenticatietype: + %{error_messages}' auth_type_updated: Authenticatietype bijgewerkt. change_auth_type_title: TRACKS::Wijzig authenticatietype change_authentication_type: Wijzigen authenticatietype - change_password_prompt: Voer uw nieuwe wachtwoord in de onderstaande velden in en kies 'Wachtwoord wijzigen' om uw huidige wachtwoord met uw nieuwe te vervangen. + change_password_prompt: Voer uw nieuwe wachtwoord in de onderstaande velden in + en kies 'Wachtwoord wijzigen' om uw huidige wachtwoord met uw nieuwe te vervangen. change_password_submit: Wachtwoord wijzigen change_password_title: TRACKS::Wachtwoord wijzigen choose_password: Kies een wachtwoord confirm_password: Bevestig wachtwoord desired_login: Gewenste login - destroy_confirmation: 'Waarschuwing: dit zal de gebruiker ''%{login} verwijderen met al zijn acties, contexten, projecten en notities. Weet u zeker dat u wilt doorgaan?' - destroy_error: Er is een fout opgetreden bij het verwijderen van de gebruiker '%{login}' + destroy_confirmation: 'Waarschuwing: dit zal de gebruiker ''%{login} verwijderen + met al zijn acties, contexten, projecten en notities. Weet u zeker dat u wilt + doorgaan?' + destroy_error: Er is een fout opgetreden bij het verwijderen van de gebruiker + '%{login}' destroy_successful: Gebruiker %{login} met succes verwijderd destroy_user: Verwijder de gebruiker email_address: Email address @@ -1169,12 +1252,15 @@ nl: new_user_heading: 'Registreer een nieuwe gebruiker:' new_user_title: 'TRACKS:: Aanmelden als de admin gebruiker' no_signups_title: 'TRACKS:: Geen nieuwe aanmeldingen' - openid_ok_pref_failed: Je hebt succesvol de %{url} geverifieerd als je identiteit, maar er was een probleem met het opslaan van uw authenticatie voorkeuren. - openid_url_verified: Je hebt %{url} met succes geverifieerd als je identiteit en uw authenticatie type OpenID opgeslagen. + openid_ok_pref_failed: Je hebt succesvol de %{url} geverifieerd als je identiteit, + maar er was een probleem met het opslaan van uw authenticatie voorkeuren. + openid_url_verified: Je hebt %{url} met succes geverifieerd als je identiteit + en uw authenticatie type OpenID opgeslagen. password_confirmation_label: Bevestig wachtwoord password_updated: Wachtwoord bijgewerkt. register_with_cas: Met uw CAS gebruikersnaam - select_authentication_type: Selecteer uw nieuwe authenticatie type en klik op 'Wijzigen authenticatietype' om uw huidige instellingen te vervangen. + select_authentication_type: Selecteer uw nieuwe authenticatie type en klik op + 'Wijzigen authenticatietype' om uw huidige instellingen te vervangen. signup: Aanmelden signup_new_user: Registreer nieuwe gebruiker signup_successful: Aanmelding succesvol voor gebruiker %{username}. @@ -1191,14 +1277,13 @@ nl: next_label: Volgende » page_entries_info: multi_page: Toon %{model} %{from} - %{to} van %{count} in totaal - multi_page_html: Toon %{model} %{from} - %{to} van %{count} in totaal + multi_page_html: Toon %{model} %{from} - %{to} van %{count} + in totaal single_page: - one: Toon 1 %{model} - other: Toon alle %{count} %{model} - zero: Geen %{model} gevonden + one: Geen %{model} gevonden + other: Toon 1 %{model} single_page_html: - one: Toon 1 %{model} - other: Toon alle %{count} %{model} - zero: Geen %{model} gevonden + one: Geen %{model} gevonden + other: Toon 1 %{model} page_gap: "…" previous_label: "«Vorige" From fcdc464725a1b0c9f149a538b6eca556ac376ced Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Sat, 27 Jan 2024 18:23:37 +0000 Subject: [PATCH 641/767] Translated using Weblate (Spanish) Currently translated at 100.0% (1119 of 1119 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/es/ --- config/locales/es.yml | 246 +++++++++++++++++++++++++++++++++--------- 1 file changed, 197 insertions(+), 49 deletions(-) diff --git a/config/locales/es.yml b/config/locales/es.yml index d576e9e2..9f24b55e 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -152,13 +152,13 @@ es: show_all: Mostrar todo sort: alphabetically: Alfabéticamente - alphabetically_confirm: "¿Está seguro que desea ordenar estos proyectos alfabéticamente?\ - \ Esto reemplazará el orden existente." + alphabetically_confirm: "¿Está seguro que desea ordenar estos proyectos alfabéticamente? + Esto reemplazará el orden existente." alphabetically_title: Ordenar proyectos alfabéticamente by_task_count: Por número de tareas by_task_count_title: Ordenar por número de tareas - by_task_count_title_confirm: "¿Seguro que desea ordenar estos proyectos por\ - \ el número de tareas? Esto reemplazará la ordenación existente." + by_task_count_title_confirm: "¿Seguro que desea ordenar estos proyectos por + el número de tareas? Esto reemplazará la ordenación existente." sort: Ordenar third: Tercero todo: pendiente @@ -177,9 +177,9 @@ es: context_name: Nombre contextual context_state: Estado contextual delete_context: Borrar contexto - delete_context_confirmation: "¿Seguro que desea borrar el contexto '%{name}'?\ - \ ¡Tenga en cuenta que esto también borra todas las acciones (recurrentes) dentro\ - \ de este contexto!" + delete_context_confirmation: "¿Seguro que desea borrar el contexto '%{name}'? + ¡Tenga en cuenta que esto también borra todas las acciones (recurrentes) dentro + de este contexto!" delete_context_title: Borrar contexto edit_context: Editar contexto hidden_contexts: Contextos ocultos @@ -209,8 +209,8 @@ es: some: Han ocurrido algunos errores durante la importación file_blank: 'Archivo no puede estar en blanco' invalid_csv: "CSV inválido: no pudo leer cabeceras: %{e}" - save_error: "No pudo guardar CSV subido (%{path_and_file}). Puede hacer un\ - \ seguimiento de escritura al directorio de la subida? %{e}" + save_error: "No pudo guardar CSV subido (%{path_and_file}). Puede hacer un + seguimiento de escritura al directorio de la subida? %{e}" no_context: No pudo encontrar un contexto predeterminado map_title: 'Asocia campos a ser importados' header: Importando datos @@ -222,12 +222,12 @@ es: projects_count: "%{count} proyectos importados" todos_count: "%{count} pendientes importados" yaml_disabled: "Carga YAML deshabilitada" - yaml_warning: "%{warning}: todos sus datos actuales serán destruidos antes de\ - \ importar el archivo YAML, por lo que si tiene acceso a la base de datos,\ - \ le recomendamos encarecidamente respaldar la base de dato ahora mismo, por\ - \ si algo pueda salir mal." - paste_field: "Pegue el contenido del archivo YAML que ha exportado a la caja\ - \ de texto de abajo:" + yaml_warning: "%{warning}: todos sus datos actuales serán destruidos antes de + importar el archivo YAML, por lo que si tiene acceso a la base de datos, le + recomendamos encarecidamente respaldar la base de dato ahora mismo, por si + algo pueda salir mal." + paste_field: "Pegue el contenido del archivo YAML que ha exportado a la caja + de texto de abajo:" warning: Aviso export: page_title: Tracks::Export @@ -236,11 +236,11 @@ es: yaml_description: "%{yaml}: Mejor formato para exportar datos." yaml_link_description: Fichero YAML con todas sus acciones, contextos, proyectos, etiquetas y notas - yaml_experimental: "Por favor tenga en cuenta que la importación de ficheros\ - \ YAML actualmente esta soportada de forma experimental. No confíe en este\ - \ formato para hacer copias de seguridad de datos importantes." - csv_description: "%{csv}: Mejor formato para importar en una hoja de cálculo\ - \ o en programas de análisis de datos" + yaml_experimental: "Por favor tenga en cuenta que la importación de ficheros + YAML actualmente esta soportada de forma experimental. No confíe en este formato + para hacer copias de seguridad de datos importantes." + csv_description: "%{csv}: Mejor formato para importar en una hoja de cálculo + o en programas de análisis de datos" csv_actions_description: Fichero CSV con todas sus acciones, con contextos por nombre y proyectos csv_notes_description: Fichero CSV con todas sus notas @@ -465,6 +465,30 @@ es: description: Si desea enviar tareas por correo electrónico a Tracks, pero no puede ejecutar un servidor de correo en el mismo host, puede utilizar la compatibilidad con %{mailgun_link} integrada en Tracks. + conditions: Para que esto funcione, su servidor de Tracks tendrá que ser accesible + desde Internet, para que Mailgun pueda enviarle datos. + instructions: + '1': Vaya a %{mailgun_link} y regístrese para obtener una cuenta gratuita. + '3': Vaya a %{preferences_link} e introduzca su dirección de correo electrónico + entrante de Mailgun (por ejemplo, tracks@user.mailgun.com) en la casilla + "%{sms_email_name}". + '4': Seleccione un contexto predeterminado para los correos electrónicos que + se pondrán con "%{sms_context_name}" + '2': "Vaya a 'Rutas' en el panel de control de Mailgun, y añada una nueva + ruta:" + 2a: La 'Expresión de filtro' debe establecerse en 'catch_all()' + 2b: "'Acción' debe ser 'adelante (\"http://mytracksserver.example.com/mailgun/mime\"\ + )'" + '5': Añade tu clave de API de Mailgun (no la clave de API pública) a los Tracks + 'site.yml' + '6': "Actualice el mapa de correo en 'site.yml' para definir qué remitentes + pueden enviar correos electrónicos a qué direcciones entrantes. Por ejemplo, + para enviar correos electrónicos desde sus cuentas de correo electrónico + del trabajo y de casa a su ruta Tracks Mailgun, configúrelo de la siguiente + manera: %{code}" + gateway_instructions: Todos los comentarios sobre el formato de correo electrónico + de la sección anterior se aplican a la gestión de Mailgun, ya que los datos + se procesan de la misma manera developer_documentation_link: Información para desarrolladores de Tracks cron_email_subject: Realiza un seguimiento de las acciones que vencen en los próximos 7 días @@ -484,13 +508,41 @@ es: cron_1: Si ingresa la siguiente entrada a su crontab, recibirá un correo electrónico todos los días alrededor de las 5 AM con una lista de las próximas acciones que deben realizarse dentro de los próximos 7 días. + example_names: + context: contexto + project: proyecto + tag: + '1': etiqueta1 + '2': etiqueta2 + todo: mi impresionante tarea + email_rich: + description: 'Para los dos métodos anteriores, se puede utilizar el siguiente + formato en el asunto del mensaje para añadir metadatos:' + fields_title: 'Los campos son:' + symbol_title: Símbolo + meaning_title: Significado + field_descriptions: + due_date: La fecha de vencimiento de las tareas (puede ser de 2 dígitos para + el día, de 4 dígitos para el mes-día o de 6 dígitos para el año-mes-día) + tag: Una etiqueta para aplicar a la tarea - puede utilizarse varias veces + star: Bandera para empezar la tarea + project: El proyecto para colocar la tarea en + context: El contexto en el que colocar la tarea + tickler_date: La fecha clave para las tareas (puede ser de 2 dígitos para + el día, 4 dígitos para el día del mes o 6 dígitos para el día del mes) + fields_instruction: Todos los símbolos son opcionales, y el texto hasta el primer + símbolo (o el final de la cadena) se utiliza como descripción de la tarea help: title: Help - usage: '' + usage: 'Puedes encontrar información sobre el uso en el %{manual_link} en la wiki + de GitHub del proyecto.' manual_link_text: User manual - bugs: '' - issue_link_text: '' - contribute: '' + bugs: 'Si encuentras un error o tienes una petición de funcionalidad, por favor + infórmalo en el %{issue_link}.' + issue_link_text: 'cola de problemas' + contribute: 'Todas las contribuciones a Tracks son bienvenidas. Consulta el enlace + %{contribute_link} para más información. También puedes venir a debatir con + la comunidad:' contribute_link_text: project website mailing_list_link_text: Mailing list irc_bullet: '%{irc_link} (también disponible en %{matrix_link})' @@ -510,7 +562,7 @@ es: tickler: Recordatorio navigation: admin: Admin - api_docs: '' + api_docs: 'Documentación sobre la API REST' calendar: Calendario calendar_title: Calendario de las acciones pendientes completed_tasks: Hecho @@ -518,7 +570,7 @@ es: contexts_title: Contextos export: Exportar export_title: Exportar datos - feeds: '' + feeds: 'Feeds' feeds_title: Vea un listado de alimentaciones disponibles group_view_by_context: Grupo por contexto group_view_by_project: Grupo por proyecto @@ -532,7 +584,7 @@ es: integrations_: Pistas Integradas manage_users: Administrar usuarios manage_users_title: Añadir o eliminar usuarios - mobile: '' + mobile: 'Version móvil' notes_title: Mostrar todas las notas options: Opciones organize: Organizar @@ -553,34 +605,35 @@ es: tickler: Recordatorio tickler_title: Recordatorio view: Ver - next_actions_rss_feed: '' + next_actions_rss_feed: 'RSS de las próximas acciones' toggle_contexts: Conmuta contextos colapsados toggle_contexts_title: Hacer que los contextos colapsados sea (in)visibles toggle_notes: Conmuta anotaciones toggle_notes_title: Conmuta todas las anotaciones login: account_login: Acceso a la cuenta - cas_create_account: '' - cas_logged_in_greeting: '' - cas_login: '' - cas_no_user_found: '' + cas_create_account: 'Si desea realizar una solicitud, por favor vaya aquí %{signup_link}' + cas_logged_in_greeting: '¡Hola, %{username}! Está autenticad@.' + cas_login: 'Inicio de sesión en CAS' + cas_no_user_found: '¡Hola, %{username}! No tienes una cuenta en Tracks.' cas_signup_link: Solicitar cuenta cas_username_not_found: Disculpe, ningún usuario por esa id de usuario CAS existe (%{username}) - log_in_again: '' - logged_out: '' - login_cas: '' - login_standard: '' - login_with_openid: '' - mobile_use_openid: "" - openid_identity_url_not_found: '' + log_in_again: 'conéctate de nuevo.' + logged_out: 'Has salido de Tracks.' + login_cas: 'ir al CAS' + login_standard: 'volver al inicio de sesión estándar' + login_with_openid: 'iniciar sesión con OpenID' + mobile_use_openid: "...o iniciar sesión con OpenID" + openid_identity_url_not_found: 'Lo sentimos, no existe ningún usuari@ con esa + URL (%{identity_url})' option_separator: o, - please_login: '' - session_time_out: '' - session_will_expire: '' + please_login: 'Por favor, inicia sesión para utilizar Tracks' + session_time_out: 'La sesión ha expirado. Por favor %{link}' + session_will_expire: 'la sesión expirará tras %{hours} hora(s) de inactividad.' session_will_not_expire: sesión no caducada. sign_in: Entrar - signup_prompt: '' + signup_prompt: '¿Quiere crear una cuenta?' successful: Has entrado correctamente. ¡Bienvenido de nuevo! successful_with_session_info: 'Entrada correcta:' unsuccessful: Entrada incorrecta. @@ -603,9 +656,10 @@ es: user: error_context_not_associated: ID de contexto %{context} no asociado con el id %{user} del usuario. - error_project_not_associated: '' + error_project_not_associated: 'El id de proyecto %{project} no está asociado + al id de usuario %{user}.' notes: - delete_confirmation: '' + delete_confirmation: '¿Estás seguro de que quieres borrar la nota ''%{id}''?' delete_item_title: Delete item delete_note_confirm: Are you sure that you want to delete the note '%{id}'? delete_note_title: Delete the note '%{id}' @@ -701,6 +755,8 @@ es: token_description: Token (for feeds and API use) token_header: Su vale updated: Las preferencias de actualización + pick_one: 'O elige uno de los siguientes:' + result_in: 'Esto dará lugar a: ' projects: actions_in_project_title: Acciones en este proyecto active_projects: Proyectos Activos @@ -1047,7 +1103,8 @@ es: depends_on: Depends on depends_on_separate_with_commas: Depende de (separar con comas) done: Done? - drag_action_title: '' + drag_action_title: 'Arrastre sobre otra acción para marcar esa acción como dependencia + de esta acción.' due: Fecha límite edit: Edit edit_action: Edit action @@ -1246,10 +1303,12 @@ es: other: '' to_tickler: al recordatorio unable_to_add_dependency: Es imposible añadir dependencia - unresolved_dependency: '' + unresolved_dependency: 'El valor que ha introducido en el campo de dependencia + no se ha resuelto con una acción existente. Este valor no se guardará con el + resto de la acción. ¿Continuar?' was_due_on_date: venció el %{date} users: - account_signup: '' + account_signup: 'Registro de la cuenta' approve_tos: Apruebo los Términos del Servicio auth_change_submit: Modifica el tipo de autenticación auth_type_update_error: 'Hubo un problema actualizando su tipo de autenticación: @@ -1264,7 +1323,8 @@ es: choose_password: Elija contraseña confirm_password: Conformar contraseña desired_login: Acceso deseado - destroy_confirmation: '' + destroy_confirmation: 'Aviso: esto eliminará al usuario ''%{login}'', todas sus + acciones, contextos, proyecto y notas. ¿Está seguro de que desea continuar?' destroy_error: Hubo un error al borrar el usuario %{login} destroy_successful: El usuario %{login} fue destruido completamente destroy_user: Destruir usuario @@ -1302,6 +1362,7 @@ es: total_users_count: You have a total of %{count} users user_created: User created. you_have_to_reset_your_password: Usted tiene que restablecer su contraseña + manage_users_title: TRACKS::Gestión de usuarios will_paginate: next_label: Siguiente » page_entries_info: @@ -1321,7 +1382,94 @@ es: rest_help: auth: title: Autenticación + basic_auth_link_text: Autenticación HTTP básica + content: La autenticación se gestiona mediante %{auth_link}. Su nombre de usuario + y contraseña de Tracks se utilizan como credenciales de autenticación para + la API. Tenga en cuenta que en la autenticación HTTP básica, su contraseña + se envía en texto claro. Si necesitas una solución de autenticación más segura, + debes configurar tu servidor web para ejecutar Tracks bajo HTTPS. activeresource: ror_link_text: Ruby on Rails + title: Consumir la API con ActiveResource + activeresource_link_text: ActiveResource + wrapper_description: 'Inspirándonos en el contenedor Highrise de %{signals_link}, + creamos un pequeño contenedor Ruby (que se encuentra en el directorio doc/-) + para la interfaz que crea modelos ActiveResource para que juegues con ellos + en una sesión IRB:' + description: '%{activeresource_link} es un contenedor delgado pero poderoso + para los servicios RESTful expuestos por %{ror_link}. Será parte de Rails + 2.0 pero hasta entonces podrás obtenerlo con %{gem_command}.' + signals_link_text: 37 Signals notes: curl_description: Todos los ejemplos utilizan %{curl}. + description: 'En la documentación se han aplicado algunas convenciones, las + cuales son:' + bullet1: '%{id} del recurso %{url} indica que debe reemplazarse con el identificador + único del recurso' + bullet2: '%{omit} indica que se han omitido partes irrelevantes de los datos + de la respuesta para aclarar la instrucción' + title: Notas sobre la documentación + title: Documentación de la API REST para desarrolladores + id: ID + curl_link_text: cURL + intro: + title: Introducción + content: Tracks está diseñado para integrarse con scripts, servicios web y aplicaciones + de terceros. Esta página sirve como documentación de nuestra API REST. + content_2: La API REST de Tracks permite a los desarrolladores integrar Tracks + en sus aplicaciones. Permite a las aplicaciones acceder a los datos de Tracks + y modificarlos, y se implementa como Vanilla XML sobre HTTP. + restful_link_text: RESTful + content_3: La API es un servicio %{restful_link}. Todos los datos están disponibles + a través de la API como un recurso al que se puede hacer referencia utilizando + un identificador único. Responde a varios de los métodos HTTP, concretamente + GET, PUT, POST y UPDATE, y todas las respuestas de la API están en un formato + XML sencillo codificado como UTF-8. + writing: + example_todo_response_title: 'La respuesta es de nuevo un %{response_code} con + la cabecera %{header} indicando dónde se puede encontrar el nuevo recurso + todo. Cambiando las notas de todo, de nuevo usando curl:' + title: Escribiendo en la API + example_project_response_title: 'La respuesta es un %{response_code} con una + cabecera %{header} que indica dónde se puede encontrar el nuevo recurso del + proyecto. Ahora podemos añadir una tarea a este proyecto, usando curl:' + example_todo_name: Modelar la casa del árbol en SketchUp + example_note_text: usar textura de arce + example_delete_title: 'Si queremos borrar esa tarea podemos llamar a su identificador + único de recurso (la URL) con el método HTTP %{delete}, de nuevo con curl:' + example_delete_response_title: La API devuelve un %{response_code} y la tarea + se elimina. + example_title: 'Creando un nuevo proyecto, usando curl:' + description: La API proporciona mecanismos para añadir, actualizar y eliminar + recursos utilizando los métodos HTTP %{put}, %{post} y %{delete} en combinación + con el contenido. + example_project_name: Construir una casa en el árbol para los niños + example_note_response_title: 'La respuesta es un %{response_code} con en el + cuerpo la representación XML de la tarea actualizada. Proporcionamos un método + abreviado para activar o desactivar una tarea sin tener que realizar la actualización + con los valores de campo correctos:' + retrieve: + content: 'Para recuperar datos basta con hacer un HTTP GET sobre un identificador + de recurso. Por ejemplo, si desea obtener todos los contextos con %{curl_link}:' + single_context: 'Obtener un contexto único:' + todos_from_context: 'Obtener las tareas dentro de un contexto:' + paths_title: 'Todos los datos están disponibles según las siguientes rutas de + recursos:' + active_todos: 'Si sólo quieres obtener las tareas activas, añade el parámetro + %{active_code} y ponlo en algún valor como este:' + title: Recuperar datos de la API + projects: También puede aplicar el patrón mostrado anteriormente con proyectos + en lugar de contextos. + limit: 'Para los recursos de tareas pendientes (tareas, tickler, hecho, oculto + y calendario), puede limitar el campo devuelto a %{fields} agregando el parámetro + %{limit_parameter} y configurándolo en %{set_to}. Por ejemplo:' + response: + title: Tratamiento de la respuesta y estado de la respuesta + description: Todas las operaciones exitosas responden con un código de estado + de %{response_200} o %{response_201} dependiendo de la operación. A veces + una lista, digamos %{example_call} no tendrá ningún elemento, devolverá una + lista vacía. + xml_description: 'El XML para las respuestas de la lista vacía tiene este aspecto, + de nuevo con curl:' + auth_type: + database: Base de datos From 6274e9e1d39dac497005b41cd931fd7c3c72514d Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Mon, 17 Jun 2024 12:46:01 +0300 Subject: [PATCH 642/767] Changelog for release 2.7 --- doc/CHANGELOG.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index e051dee1..f0245067 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -1,5 +1,29 @@ See doc/upgrading.md for the upgrade documentation! +## Version 2.7 + +### Removed features + +* Support for Ruby 2.6 and 2.7 were dropped. +* Support for inbound message handling was dropped due to API changes caused by required Ruby on Rails upgrade. If you need this, comment in the issue https://github.com/TracksApp/tracks/issues/2463 +* Rubocop is no longer used in the CI due to missing support for Ruby > 2.5. + +### Deprecations + +* This will be the last release to support Ruby 3.0, which is already end-of-life. + +### Bug fixes + +* The base version for the Docker image was updated from Ruby 2.7 to Ruby 3.3. +* Lots of dependencies have been updated (including security updates). + +### Updated translations + +* Spanish (thanks Gallegonovato!) +* Dutch (thanks Ranforingus!) +* Russian (thanks Alexey Svistunov!) +* Turkish (thanks Burak Hüseyin Ekseli!) + ## Version 2.6.1 ### Deprecations From d5235e8c61ae04edc103508d7edf5b5ba541530a Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Mon, 17 Jun 2024 12:46:16 +0300 Subject: [PATCH 643/767] Move default build to Ruby 3.3, test only MySQL for Rubies 3.1 & 3.2 (middle versions) --- .github/workflows/continuous-integration.yml | 4 +++ Dockerfile | 4 +-- Dockerfile-3.3 => Dockerfile-3.1 | 2 +- test-envs/docker-compose-3.1-mysql.yml | 2 +- test-envs/docker-compose-3.1-postgres.yml | 32 -------------------- test-envs/docker-compose-3.1-sqlite.yml | 17 ----------- test-envs/docker-compose-3.2-postgres.yml | 32 -------------------- test-envs/docker-compose-3.2-sqlite.yml | 17 ----------- 8 files changed, 8 insertions(+), 102 deletions(-) rename Dockerfile-3.3 => Dockerfile-3.1 (98%) delete mode 100644 test-envs/docker-compose-3.1-postgres.yml delete mode 100644 test-envs/docker-compose-3.1-sqlite.yml delete mode 100644 test-envs/docker-compose-3.2-postgres.yml delete mode 100644 test-envs/docker-compose-3.2-sqlite.yml diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 3c238552..9d89cdfa 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -9,6 +9,10 @@ jobs: ruby: ["3.0", "3.1", "3.2", "3.3"] db: [sqlite, mysql, postgres] exclude: + - ruby: "3.1" + db: sqlite + - ruby: "3.1" + db: postgres - ruby: "3.2" db: sqlite - ruby: "3.2" diff --git a/Dockerfile b/Dockerfile index f1f6d7cd..1a637feb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:3.1 +FROM ruby:3.3 # throw errors if Gemfile has been modified since Gemfile.lock RUN bundle config --global frozen 1 @@ -8,7 +8,7 @@ WORKDIR /app RUN touch /etc/app-env COPY Gemfile* /app/ -RUN gem install bundler -v 2.4.22 +RUN gem install bundler RUN bundle install --jobs 4 RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - diff --git a/Dockerfile-3.3 b/Dockerfile-3.1 similarity index 98% rename from Dockerfile-3.3 rename to Dockerfile-3.1 index 0e143fd7..13ee22a2 100644 --- a/Dockerfile-3.3 +++ b/Dockerfile-3.1 @@ -1,4 +1,4 @@ -FROM ruby:3.2 +FROM ruby:3.1 # throw errors if Gemfile has been modified since Gemfile.lock RUN bundle config --global frozen 1 diff --git a/test-envs/docker-compose-3.1-mysql.yml b/test-envs/docker-compose-3.1-mysql.yml index 67e67f17..03f609e5 100644 --- a/test-envs/docker-compose-3.1-mysql.yml +++ b/test-envs/docker-compose-3.1-mysql.yml @@ -10,7 +10,7 @@ services: web: build: context: .. - dockerfile: Dockerfile + dockerfile: Dockerfile-3.1 environment: # These are set in script/ci-build, so we need to pass-thru them. RAILS_ENV: $RAILS_ENV diff --git a/test-envs/docker-compose-3.1-postgres.yml b/test-envs/docker-compose-3.1-postgres.yml deleted file mode 100644 index a66d41b2..00000000 --- a/test-envs/docker-compose-3.1-postgres.yml +++ /dev/null @@ -1,32 +0,0 @@ -version: '3' -services: - db: - image: postgres:13 - environment: - POSTGRES_DB: ${DATABASE_NAME:-tracks} - POSTGRES_PASSWORD: password - volumes: - - db-data:/var/lib/postgresql/data - web: - build: - context: .. - dockerfile: Dockerfile - environment: - # These are set in script/ci-build, so we need to pass-thru them. - RAILS_ENV: $RAILS_ENV - DATABASE_NAME: $DATABASE_NAME - DATABASE_USERNAME: postgres - DATABASE_PASSWORD: password - DATABASE_TYPE: postgresql - DATABASE_ENCODING: unicode - DATABASE_PORT: 5432 - volumes: - - ${VOLUME:-..}:/app:Z - - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - - ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z - ports: - - 3000:3000 - depends_on: - - db -volumes: - db-data: diff --git a/test-envs/docker-compose-3.1-sqlite.yml b/test-envs/docker-compose-3.1-sqlite.yml deleted file mode 100644 index 4fd50bd5..00000000 --- a/test-envs/docker-compose-3.1-sqlite.yml +++ /dev/null @@ -1,17 +0,0 @@ -version: '3' -services: - web: - build: - context: .. - dockerfile: Dockerfile - environment: - # These are set in script/ci-build, so we need to pass-thru them. - RAILS_ENV: $RAILS_ENV - DATABASE_NAME: "/app/db.sqlite" - DATABASE_TYPE: sqlite3 - volumes: - - ${VOLUME:-..}:/app:Z - - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - - ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z - ports: - - 3000:3000 diff --git a/test-envs/docker-compose-3.2-postgres.yml b/test-envs/docker-compose-3.2-postgres.yml deleted file mode 100644 index 16711e2d..00000000 --- a/test-envs/docker-compose-3.2-postgres.yml +++ /dev/null @@ -1,32 +0,0 @@ -version: '3' -services: - db: - image: postgres:13 - environment: - POSTGRES_DB: ${DATABASE_NAME:-tracks} - POSTGRES_PASSWORD: password - volumes: - - db-data:/var/lib/postgresql/data - web: - build: - context: .. - dockerfile: Dockerfile-3.2 - environment: - # These are set in script/ci-build, so we need to pass-thru them. - RAILS_ENV: $RAILS_ENV - DATABASE_NAME: $DATABASE_NAME - DATABASE_USERNAME: postgres - DATABASE_PASSWORD: password - DATABASE_TYPE: postgresql - DATABASE_ENCODING: unicode - DATABASE_PORT: 5432 - volumes: - - ${VOLUME:-..}:/app:Z - - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - - ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z - ports: - - 3000:3000 - depends_on: - - db -volumes: - db-data: diff --git a/test-envs/docker-compose-3.2-sqlite.yml b/test-envs/docker-compose-3.2-sqlite.yml deleted file mode 100644 index 47a2e7e0..00000000 --- a/test-envs/docker-compose-3.2-sqlite.yml +++ /dev/null @@ -1,17 +0,0 @@ -version: '3' -services: - web: - build: - context: .. - dockerfile: Dockerfile-3.2 - environment: - # These are set in script/ci-build, so we need to pass-thru them. - RAILS_ENV: $RAILS_ENV - DATABASE_NAME: "/app/db.sqlite" - DATABASE_TYPE: sqlite3 - volumes: - - ${VOLUME:-..}:/app:Z - - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - - ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z - ports: - - 3000:3000 From b274c270f1007ac92230b90ed186c5d9693bf69c Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Mon, 17 Jun 2024 12:48:29 +0300 Subject: [PATCH 644/767] New version number --- config/initializers/tracks.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/tracks.rb b/config/initializers/tracks.rb index 77d12eac..83183ed7 100644 --- a/config/initializers/tracks.rb +++ b/config/initializers/tracks.rb @@ -1,3 +1,3 @@ -TRACKS_VERSION='2.6.1' +TRACKS_VERSION='2.7' TRACKS_REVISION_WITH_DATE=`git log --date=format:'%Y-%m-%d' --pretty=format:"%h @ %ad" -1` TRACKS_REVISION=`git log --pretty=format:"%h" -1` From 167274a6da0f7b17d09c14beb35947f89ee5689f Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Mon, 17 Jun 2024 13:11:27 +0300 Subject: [PATCH 645/767] Fix again the translations broken by Weblate --- config/locales/es.yml | 76 +++++++++++++++++-------------------------- config/locales/nl.yml | 35 ++++++++++++-------- config/locales/ru.yml | 26 ++++++++------- 3 files changed, 65 insertions(+), 72 deletions(-) diff --git a/config/locales/es.yml b/config/locales/es.yml index 9f24b55e..6f008359 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -93,15 +93,14 @@ es: body: 'Hubo problemas con los campos siguientes:' header: one: Un error ha impedido que se guarde este %{model} - many: '%{count} errores han impedido que se guarden este %{model}' - other: '' + other: '%{count} errores han impedido que se guarden este %{model}' common: action: Tarea actions: Tareas actions_midsentence: - one: tareas - many: tarea + one: tarea other: tareas + zero: tareas add: Añadir ajaxError: Hubo un error al recuperar desde el servidor back: Atrás @@ -114,8 +113,7 @@ es: create: Crear days_midsentence: one: día - many: días - other: '' + other: días deferred: pospuestas description: Descripción drag_handle: ARRASTRAR @@ -134,9 +132,9 @@ es: none: Ninguno not_available_abbr: n/d note: - one: 0 notas - many: 1 nota - other: '%{count} notas' + one: 1 nota + other: "%{count} notas" + zero: 0 notas notes: Notas numbered_step: Paso %{number} ok: Aceptar @@ -315,49 +313,40 @@ es: distance_in_words: about_x_hours: one: alrededor de 1 hora - many: Acerca de %{count} horas - other: '' + other: Acerca de %{count} horas about_x_months: one: alrededor de 1 mes - many: Acerca de %{count} meses - other: '' + other: Acerca de %{count} meses about_x_years: one: alrededor de 1 año - many: Acerca de %{count} años - other: '' + other: Acerca de %{count} años almost_x_years: one: casi 1 año - many: Casi %{count} años - other: '' + other: Casi %{count} años half_a_minute: medio minuto less_than_x_minutes: - one: menos de 1 minuto - many: menos de un minuto + one: menos de un minuto other: menos de %{count} minutos + zero: menos de 1 minuto less_than_x_seconds: - one: menos de %{count} segundo - many: más de %{count} segundos - other: '' + one: menos de 1 segundo + other: menos de %{count} segundos + zero: menos de 1 segundo over_x_years: one: más de un año - many: en %{count} años - other: '' + other: en %{count} años x_days: one: 1 día - many: '%{count} días' - other: '' + other: '%{count} días' x_minutes: one: 1 minuto - many: '%{count} minutos' - other: '' + other: '%{count} minutos' x_months: one: 1 mes - many: '%{count} meses' - other: '' + other: '%{count} meses' x_seconds: one: Un segundo - many: '%{count} segundos' - other: '' + other: '%{count} segundos' prompts: day: Día hour: Hora @@ -709,8 +698,7 @@ es: units: byte: one: Byte - many: Bytes - other: '' + other: Bytes gb: GB kb: KB mb: MB @@ -1068,8 +1056,7 @@ es: completed_actions_with: Acciones completadas con la lengüeta «%{tag_name}» completed_in_archive: one: There is one completed action in the archive. - many: There are %{count} completed actions in the archive. - other: '' + other: There are %{count} completed actions in the archive. completed_last_day: Completed in the last 24 hours completed_last_x_days: Completed in last %{count} days completed_recurrence_completed: There is no next action after the recurring action @@ -1089,8 +1076,7 @@ es: due date before deferring. defer_x_days: one: Defer one day - many: Defer %{count} days - other: '' + other: Defer %{count} days deferred_actions_with: Deferred actions with the tag '%{tag_name}' deferred_pending_actions: Deferred/pending actions deferred_tasks_title: TRACKS::Recordatorio @@ -1130,8 +1116,7 @@ es: due: 'Vence: %{date}' has_x_pending: one: Tiene una tarea pendiente - many: Tiene %{count} tareas pendientes - other: '' + other: Tiene %{count} tareas pendientes hidden_actions: Tareas ocultas in_hidden_state: en estado oculto in_pending_state: en estado pendiente @@ -1298,9 +1283,8 @@ es: task_list_title: TRACKS::List etiquetadas tickler_items_due: one: Un elemento de tiquet ahora está vencido - recargue la página para verlo. - many: '%{count} elementos de ticket ahora están vencidos - recargue la página + other: '%{count} elementos de ticket ahora están vencidos - recargue la página para verlos.' - other: '' to_tickler: al recordatorio unable_to_add_dependency: Es imposible añadir dependencia unresolved_dependency: 'El valor que ha introducido en el campo de dependencia @@ -1370,13 +1354,13 @@ es: multi_page_html: Representando %{model} %{from} - %{to} de %{count} en el total single_page: - one: No %{model} encontrado - many: Viendo del 1 %{model} + one: Viendo del 1 %{model} other: Viendo todos los %{count} %{model} + zero: No %{model} encontrado single_page_html: - one: No %{model} encontrado - many: Viendo del 1 %{model} + one: Viendo del 1 %{model} other: Viendo todos los %{count} %{model} + zero: No %{model} encontrado page_gap: "…" previous_label: "« Anterior" rest_help: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 739fa7a3..97d35ff0 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -70,7 +70,7 @@ nl: record_invalid: 'Validatie mislukt: %{errors}' restrict_dependent_destroy: one: Kan record niet verwijderen omdat een afhankelijk %{record} bestaat - other: Kan record niet verwijderen omdat afhankelijke %{record} bestaan + many: Kan record niet verwijderen omdat afhankelijke %{record} bestaan taken: is al gepakt too_long: is te lang (maximum is %{count} karakters) too_short: is te kort (minimum is %{count} karakters) @@ -91,8 +91,9 @@ nl: action: Actie actions: Acties actions_midsentence: - one: acties - other: actie + one: actie + other: acties + zero: acties add: Toevoegen ajaxError: Er is een fout opgetreden bij het ophalen van gegevens van de server back: Terug @@ -104,8 +105,9 @@ nl: contribute: Bijdragen create: Maken days_midsentence: - one: dagen - other: dag + one: dag + other: dagen + zero: dagen deferred: uitgestelde description: Beschrijving drag_handle: SLEEP @@ -124,8 +126,9 @@ nl: none: Geen not_available_abbr: n/b note: - one: geen notities - other: 1 notitie + one: 1 notitie + other: "%{count} notities" + zero: geen notities notes: Notities numbered_step: Stap %{number} ok: Ok @@ -266,11 +269,13 @@ nl: other: bijna %{count} jaren half_a_minute: halve minuut less_than_x_minutes: - one: minder dan 1 minuut - other: minder dan een minuut + one: minder dan een minuut + other: minder dan %{count} minuten + zero: minder dan 1 minuut less_than_x_seconds: one: minder dan 1 seconde - other: minder dan 1 seconde + other: minder dan %{count} seconden + zero: minder dan 1 seconde over_x_years: one: over 1 jaar other: over %{count} jaren @@ -1280,10 +1285,12 @@ nl: multi_page_html: Toon %{model} %{from} - %{to} van %{count} in totaal single_page: - one: Geen %{model} gevonden - other: Toon 1 %{model} + one: Toon 1 %{model} + other: Toon alle %{count} %{model} + zero: Geen %{model} gevonden single_page_html: - one: Geen %{model} gevonden - other: Toon 1 %{model} + one: Toon 1 %{model} + other: Toon alle %{count} %{model} + zero: Geen %{model} gevonden page_gap: "…" previous_label: "«Vorige" diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 2622d87e..ac496932 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -103,6 +103,7 @@ ru: one: действий few: действие many: действия + other: действия add: Добавить ajaxError: От сервера была получена ошибка back: Назад @@ -114,9 +115,9 @@ ru: contribute: Сотрудничество create: Создать days_midsentence: - one: день - few: дня - many: дней + one: дней + few: день + many: дня deferred: отложенные description: Описание drag_handle: ТАЩИТЬ @@ -135,9 +136,10 @@ ru: none: Не задано not_available_abbr: н/д note: - one: нет записей - few: 1 запись - many: '%{count} записи' + few: "%{count} записи" + one: 1 запись + other: '%{count} записи' + zero: нет записей notes: Заметки numbered_step: Шаг %{number} ok: ОК @@ -1361,13 +1363,13 @@ ru: multi_page: Отображено %{model} %{from} - %{to} из %{count} multi_page_html: Отображено %{model} %{from} - %{to} из %{count} single_page: - one: '%{model} не найден' - few: Отображён 1 %{model} - many: Отображены все %{count} %{model} + one: Отображён 1 %{model} + other: Отображены все %{count} %{model} + zero: '%{model} не найден' single_page_html: - one: '%{model} не найден' - few: Отображен 1 %{model} - many: Отображены все %{count} %{model} + one: Отображен 1 %{model} + other: Отображены все %{count} %{model} + zero: '%{model} не найден' page_gap: "…" previous_label: "← Пред" rest_help: From 1d79436a524dec4b47b43af83df6558b4fc5d358 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Mon, 17 Jun 2024 13:20:55 +0300 Subject: [PATCH 646/767] Fix Ruby 3.3 tests to correct Dockerfile --- test-envs/docker-compose-3.3-mysql.yml | 2 +- test-envs/docker-compose-3.3-postgres.yml | 2 +- test-envs/docker-compose-3.3-sqlite.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test-envs/docker-compose-3.3-mysql.yml b/test-envs/docker-compose-3.3-mysql.yml index fe6891be..67e67f17 100644 --- a/test-envs/docker-compose-3.3-mysql.yml +++ b/test-envs/docker-compose-3.3-mysql.yml @@ -10,7 +10,7 @@ services: web: build: context: .. - dockerfile: Dockerfile-3.3 + dockerfile: Dockerfile environment: # These are set in script/ci-build, so we need to pass-thru them. RAILS_ENV: $RAILS_ENV diff --git a/test-envs/docker-compose-3.3-postgres.yml b/test-envs/docker-compose-3.3-postgres.yml index 759c880f..a66d41b2 100644 --- a/test-envs/docker-compose-3.3-postgres.yml +++ b/test-envs/docker-compose-3.3-postgres.yml @@ -10,7 +10,7 @@ services: web: build: context: .. - dockerfile: Dockerfile-3.3 + dockerfile: Dockerfile environment: # These are set in script/ci-build, so we need to pass-thru them. RAILS_ENV: $RAILS_ENV diff --git a/test-envs/docker-compose-3.3-sqlite.yml b/test-envs/docker-compose-3.3-sqlite.yml index e838d3bb..4fd50bd5 100644 --- a/test-envs/docker-compose-3.3-sqlite.yml +++ b/test-envs/docker-compose-3.3-sqlite.yml @@ -3,7 +3,7 @@ services: web: build: context: .. - dockerfile: Dockerfile-3.3 + dockerfile: Dockerfile environment: # These are set in script/ci-build, so we need to pass-thru them. RAILS_ENV: $RAILS_ENV From f20aa13b7bb9e7869ea129b8276b8b5370f70a50 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 00:55:39 +0000 Subject: [PATCH 647/767] Bump RedCloth from 4.3.3 to 4.3.4 Bumps [RedCloth](https://github.com/jgarber/redcloth) from 4.3.3 to 4.3.4. - [Changelog](https://github.com/jgarber/redcloth/blob/master/CHANGELOG) - [Commits](https://github.com/jgarber/redcloth/compare/v4.3.3...v4.3.4) --- updated-dependencies: - dependency-name: RedCloth dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index d4487d0e..4850fbcf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ GEM remote: https://rubygems.org/ specs: - RedCloth (4.3.3) + RedCloth (4.3.4) aasm (5.5.0) concurrent-ruby (~> 1.0) actioncable (6.1.7.8) From b280485ef20ec84705766235b600c48fa16ba30c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jun 2024 00:20:33 +0000 Subject: [PATCH 648/767] Bump bullet from 7.1.4 to 7.1.6 Bumps [bullet](https://github.com/flyerhzm/bullet) from 7.1.4 to 7.1.6. - [Changelog](https://github.com/flyerhzm/bullet/blob/main/CHANGELOG.md) - [Commits](https://github.com/flyerhzm/bullet/compare/7.1.4...7.1.6) --- updated-dependencies: - dependency-name: bullet dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4850fbcf..48882364 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -83,7 +83,7 @@ GEM autoprefixer-rails (>= 5.2.1) sassc (>= 2.0.0) builder (3.3.0) - bullet (7.1.4) + bullet (7.1.6) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) byebug (11.1.3) @@ -338,7 +338,7 @@ GEM websocket-extensions (0.1.5) will_paginate (4.0.1) yard (0.9.36) - zeitwerk (2.6.15) + zeitwerk (2.6.16) PLATFORMS ruby From 720cb02697d35d68b4c059e9657f898299ee74e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 00:12:49 +0000 Subject: [PATCH 649/767] Bump mocha from 2.1.0 to 2.4.0 Bumps [mocha](https://github.com/freerange/mocha) from 2.1.0 to 2.4.0. - [Changelog](https://github.com/freerange/mocha/blob/main/RELEASE.md) - [Commits](https://github.com/freerange/mocha/compare/v2.1.0...v2.4.0) --- updated-dependencies: - dependency-name: mocha dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 48882364..f968fe8a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -172,7 +172,7 @@ GEM libv8-node (~> 21.7.2.0) minitest (5.23.1) minitest-stub-const (0.6) - mocha (2.1.0) + mocha (2.4.0) ruby2_keywords (>= 0.0.5) mysql2 (0.5.6) net-imap (0.4.12) From 713c89c6e094eb7755b559f52244db2a309aaed0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 00:01:21 +0000 Subject: [PATCH 650/767] Bump rspec-expectations from 3.12.3 to 3.13.1 Bumps [rspec-expectations](https://github.com/rspec/rspec-expectations) from 3.12.3 to 3.13.1. - [Release notes](https://github.com/rspec/rspec-expectations/releases) - [Changelog](https://github.com/rspec/rspec-expectations/blob/main/Changelog.md) - [Commits](https://github.com/rspec/rspec-expectations/compare/v3.12.3...v3.13.1) --- updated-dependencies: - dependency-name: rspec-expectations dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index f968fe8a..0afc88f6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -101,7 +101,7 @@ GEM crass (1.0.6) database_cleaner (1.99.0) date (3.3.4) - diff-lcs (1.5.0) + diff-lcs (1.5.1) docile (1.1.5) e2mmap (0.1.0) erubi (1.13.0) @@ -251,10 +251,10 @@ GEM nokogiri rexml (3.3.0) strscan - rspec-expectations (3.12.3) + rspec-expectations (3.13.1) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.12.0) - rspec-support (3.12.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) rubocop (1.64.1) json (~> 2.3) language_server-protocol (>= 3.17.0) From 2108b203a65249238af7fe709f8ee2d7aaaa7bf7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 00:27:42 +0000 Subject: [PATCH 651/767] Bump rubocop from 1.64.1 to 1.65.0 Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.64.1 to 1.65.0. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.64.1...v1.65.0) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Gemfile b/Gemfile index 30ad6230..a55f6a62 100644 --- a/Gemfile +++ b/Gemfile @@ -52,7 +52,7 @@ end group :development, :test do gem 'byebug' gem 'listen' - gem 'rubocop', '~> 1.64', require: false + gem 'rubocop', '~> 1.65', require: false end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index 0afc88f6..dc72c4fb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -189,7 +189,7 @@ GEM mini_portile2 (~> 2.8.2) racc (~> 1.4) parallel (1.25.1) - parser (3.3.3.0) + parser (3.3.4.0) ast (~> 2.4.1) racc pg (1.5.6) @@ -249,19 +249,19 @@ GEM regexp_parser (2.9.2) reverse_markdown (2.1.1) nokogiri - rexml (3.3.0) + rexml (3.3.1) strscan rspec-expectations (3.13.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-support (3.13.1) - rubocop (1.64.1) + rubocop (1.65.0) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.8, < 3.0) + regexp_parser (>= 2.4, < 3.0) rexml (>= 3.2.5, < 4.0) rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (~> 1.7) @@ -376,7 +376,7 @@ DEPENDENCIES rails-dom-testing (~> 2.2.0) rails_autolink rspec-expectations - rubocop (~> 1.64) + rubocop (~> 1.65) sanitize (~> 6.1) sassc-rails (~> 2.1.2) simplecov From a66dca4a6b6122c7fd8a8e65f8fc4d531a21e173 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 00:39:04 +0000 Subject: [PATCH 652/767] Bump bullet from 7.1.6 to 7.2.0 Bumps [bullet](https://github.com/flyerhzm/bullet) from 7.1.6 to 7.2.0. - [Changelog](https://github.com/flyerhzm/bullet/blob/main/CHANGELOG.md) - [Commits](https://github.com/flyerhzm/bullet/compare/7.1.6...7.2.0) --- updated-dependencies: - dependency-name: bullet dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index dc72c4fb..0813fee8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -83,7 +83,7 @@ GEM autoprefixer-rails (>= 5.2.1) sassc (>= 2.0.0) builder (3.3.0) - bullet (7.1.6) + bullet (7.2.0) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) byebug (11.1.3) @@ -170,7 +170,7 @@ GEM mini_portile2 (2.8.7) mini_racer (0.12.0) libv8-node (~> 21.7.2.0) - minitest (5.23.1) + minitest (5.24.1) minitest-stub-const (0.6) mocha (2.4.0) ruby2_keywords (>= 0.0.5) From 5940fe10a6e1c29fb6ec0d969112d96706f6ca98 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 18 Jul 2024 16:00:02 +0300 Subject: [PATCH 653/767] Add Stripe as an optional package --- Dockerfile | 1 + Gemfile | 11 +++++++---- Gemfile.lock | 4 +++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1a637feb..be7d456e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ FROM ruby:3.3 # throw errors if Gemfile has been modified since Gemfile.lock RUN bundle config --global frozen 1 +RUN bundle config set --local without test development stripe WORKDIR /app diff --git a/Gemfile b/Gemfile index a55f6a62..6e04c5fa 100644 --- a/Gemfile +++ b/Gemfile @@ -28,6 +28,11 @@ gem 'sanitize', '~> 6.1' gem 'tracks-chartjs-ror' gem 'will_paginate' +group :layout do + gem 'listen' + gem 'tolk', '~> 5.0.1' +end + # See https://github.com/sstephenson/execjs#readme for more supported runtimes gem 'mini_racer', group: :therubyracer @@ -40,8 +45,6 @@ group :development do gem 'spring', '~> 4' gem 'yard' - gem 'tolk', '~> 5.0.1' - gem 'bullet' gem 'rack-mini-profiler' gem 'solargraph' @@ -51,12 +54,10 @@ end group :development, :test do gem 'byebug' - gem 'listen' gem 'rubocop', '~> 1.65', require: false end group :test do - # get test coverage info on codeclimate gem 'codeclimate-test-reporter', '1.0.9', group: :test, require: nil gem 'database_cleaner', '~> 1' @@ -68,3 +69,5 @@ group :test do gem 'rspec-expectations' gem 'simplecov' end + +gem 'stripe', "~> 5.24.0", group: :stripe diff --git a/Gemfile.lock b/Gemfile.lock index 0813fee8..fad802ed 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -304,7 +304,7 @@ GEM tilt (~> 2.0) yard (~> 0.9, >= 0.9.24) spring (4.2.1) - sprockets (4.2.0) + sprockets (4.2.1) concurrent-ruby (~> 1.0) rack (>= 2.2.4, < 4) sprockets-rails (3.4.2) @@ -313,6 +313,7 @@ GEM sprockets (>= 3.0.0) sqlite3 (1.6.9) mini_portile2 (~> 2.8.0) + stripe (5.24.0) strscan (3.1.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -383,6 +384,7 @@ DEPENDENCIES solargraph spring (~> 4) sqlite3 + stripe (~> 5.24.0) tolk (~> 5.0.1) tracks-chartjs-ror uglifier (>= 1.3.0) From ff5adc5696682475825b0911a497eec4f794de7d Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 18 Jul 2024 17:12:31 +0300 Subject: [PATCH 654/767] Replace the version-specific Dockerfiles with one staged Dockerfile --- .dockerignore | 2 - .github/workflows/build-latest.yml | 1 + .github/workflows/build-release.yml | 1 + Dockerfile | 42 +++++++++++++------ Dockerfile-3.0 | 30 ------------- Dockerfile-3.1 | 30 ------------- Dockerfile-3.2 | 30 ------------- Gemfile | 30 ++++++------- docker-compose.yml | 4 +- script/cibuild | 4 +- script/poll-for-db | 18 ++++---- test-envs/docker-compose-3.0-mysql.yml | 29 ------------- test-envs/docker-compose-3.1-mysql.yml | 29 ------------- test-envs/docker-compose-3.2-mysql.yml | 29 ------------- test-envs/docker-compose-3.3-postgres.yml | 32 -------------- test-envs/docker-compose-3.3-sqlite.yml | 17 -------- ...3.3-mysql.yml => docker-compose-mysql.yml} | 4 +- ...stgres.yml => docker-compose-postgres.yml} | 4 +- ...0-sqlite.yml => docker-compose-sqlite.yml} | 10 +++-- 19 files changed, 75 insertions(+), 271 deletions(-) delete mode 100644 Dockerfile-3.0 delete mode 100644 Dockerfile-3.1 delete mode 100644 Dockerfile-3.2 delete mode 100644 test-envs/docker-compose-3.0-mysql.yml delete mode 100644 test-envs/docker-compose-3.1-mysql.yml delete mode 100644 test-envs/docker-compose-3.2-mysql.yml delete mode 100644 test-envs/docker-compose-3.3-postgres.yml delete mode 100644 test-envs/docker-compose-3.3-sqlite.yml rename test-envs/{docker-compose-3.3-mysql.yml => docker-compose-mysql.yml} (91%) rename test-envs/{docker-compose-3.0-postgres.yml => docker-compose-postgres.yml} (92%) rename test-envs/{docker-compose-3.0-sqlite.yml => docker-compose-sqlite.yml} (69%) diff --git a/.dockerignore b/.dockerignore index 51d21e85..808f30c7 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,9 +3,7 @@ config/database.yml config/site.yml coverage db/*.sqlite3 -doc features log public/assets -test tmp diff --git a/.github/workflows/build-latest.yml b/.github/workflows/build-latest.yml index 53bf9d34..c9d1cce5 100644 --- a/.github/workflows/build-latest.yml +++ b/.github/workflows/build-latest.yml @@ -35,6 +35,7 @@ jobs: uses: docker/build-push-action@v3 with: context: . + target: production push: true tags: | tracksapp/tracks:latest diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index ccc9a016..f70b4a33 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -35,6 +35,7 @@ jobs: uses: docker/build-push-action@v3 with: context: . + target: production push: true tags: | tracksapp/tracks:${{ github.event.release.name }} diff --git a/Dockerfile b/Dockerfile index be7d456e..fb60c234 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,13 @@ -FROM ruby:3.3 - -# throw errors if Gemfile has been modified since Gemfile.lock -RUN bundle config --global frozen 1 -RUN bundle config set --local without test development stripe +ARG RUBY_VERSION=3.3 +FROM ruby:${RUBY_VERSION} AS base WORKDIR /app - RUN touch /etc/app-env -COPY Gemfile* /app/ -RUN gem install bundler -RUN bundle install --jobs 4 - RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN apt-get update && apt-get install -y yarn netcat-openbsd +RUN gem install bundler RUN mkdir /app/log @@ -39,10 +32,33 @@ COPY db /app/db/ COPY .git /app/.git -RUN RAILS_ENV=production bundle exec rake assets:precompile +COPY Gemfile* /app/ ENTRYPOINT ["/app/docker-entrypoint.sh"] - EXPOSE 3000 - CMD ["./bin/rails", "server", "-b", "0.0.0.0"] + +FROM base AS precompile +RUN bundle config set with assets +RUN bundle config set deployment true +RUN bundle install --jobs 4 +RUN RAILS_GROUPS=assets bundle exec rake assets:precompile + +# Build the environment-specific stuff +FROM base AS production +RUN bundle config --global frozen 1 +RUN bundle install --jobs 4 +COPY --from=precompile /app/public/assets /app/public/assets + +FROM base AS test +COPY test /app/test/ +# For testing the API client +COPY doc /app/doc/ +RUN bundle config set with development test assets +RUN bundle config --global frozen 1 +RUN bundle install --jobs 4 +RUN RAILS_GROUPS=assets bundle exec rake assets:precompile + +FROM base AS development +RUN bundle config set with development test +RUN bundle install --jobs 4 diff --git a/Dockerfile-3.0 b/Dockerfile-3.0 deleted file mode 100644 index 534d5c92..00000000 --- a/Dockerfile-3.0 +++ /dev/null @@ -1,30 +0,0 @@ -FROM ruby:3.0 - -# throw errors if Gemfile has been modified since Gemfile.lock -RUN bundle config --global frozen 1 - -WORKDIR /app - -RUN touch /etc/app-env - -RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - -RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list -RUN apt-get update && apt-get install -y yarn - -COPY Gemfile* /app/ -RUN gem install bundler -RUN bundle install --jobs 4 - -RUN mkdir /app/log - -COPY . /app/ -COPY config/database.docker.yml /app/config/database.yml -COPY config/site.docker.yml /app/config/site.yml - -RUN RAILS_ENV=production bundle exec rake assets:precompile - -ENTRYPOINT ["/app/docker-entrypoint.sh"] - -EXPOSE 3000 - -CMD ["rails", "server", "-b", "0.0.0.0"] diff --git a/Dockerfile-3.1 b/Dockerfile-3.1 deleted file mode 100644 index 13ee22a2..00000000 --- a/Dockerfile-3.1 +++ /dev/null @@ -1,30 +0,0 @@ -FROM ruby:3.1 - -# throw errors if Gemfile has been modified since Gemfile.lock -RUN bundle config --global frozen 1 - -WORKDIR /app - -RUN touch /etc/app-env - -RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - -RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list -RUN apt-get update && apt-get install -y yarn - -COPY Gemfile* /app/ -RUN gem install bundler -RUN bundle install --jobs 4 - -RUN mkdir /app/log - -COPY . /app/ -COPY config/database.docker.yml /app/config/database.yml -COPY config/site.docker.yml /app/config/site.yml - -RUN RAILS_ENV=production bundle exec rake assets:precompile - -ENTRYPOINT ["/app/docker-entrypoint.sh"] - -EXPOSE 3000 - -CMD ["rails", "server", "-b", "0.0.0.0"] diff --git a/Dockerfile-3.2 b/Dockerfile-3.2 deleted file mode 100644 index 0e143fd7..00000000 --- a/Dockerfile-3.2 +++ /dev/null @@ -1,30 +0,0 @@ -FROM ruby:3.2 - -# throw errors if Gemfile has been modified since Gemfile.lock -RUN bundle config --global frozen 1 - -WORKDIR /app - -RUN touch /etc/app-env - -RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - -RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list -RUN apt-get update && apt-get install -y yarn - -COPY Gemfile* /app/ -RUN gem install bundler -RUN bundle install --jobs 4 - -RUN mkdir /app/log - -COPY . /app/ -COPY config/database.docker.yml /app/config/database.yml -COPY config/site.docker.yml /app/config/site.yml - -RUN RAILS_ENV=production bundle exec rake assets:precompile - -ENTRYPOINT ["/app/docker-entrypoint.sh"] - -EXPOSE 3000 - -CMD ["rails", "server", "-b", "0.0.0.0"] diff --git a/Gemfile b/Gemfile index 6e04c5fa..3e281bad 100644 --- a/Gemfile +++ b/Gemfile @@ -28,20 +28,17 @@ gem 'sanitize', '~> 6.1' gem 'tracks-chartjs-ror' gem 'will_paginate' -group :layout do - gem 'listen' - gem 'tolk', '~> 5.0.1' -end - -# See https://github.com/sstephenson/execjs#readme for more supported runtimes -gem 'mini_racer', group: :therubyracer - # Use --without argument to skip unnecessary drivers gem 'sqlite3', group: :sqlite gem 'mysql2', '~> 0.5.6', group: :mysql gem 'pg', '~> 1.5.6', group: :postgresql -group :development do +group :assets, :optional => true do + gem 'listen' + gem 'tolk', '~> 5.0.1' +end + +group :development, :optional => true do gem 'spring', '~> 4' gem 'yard' @@ -52,22 +49,25 @@ group :development do gem 'i18n-tasks', '~> 1.0.14' end -group :development, :test do +group :development, :test, :optional => true do gem 'byebug' - gem 'rubocop', '~> 1.65', require: false + gem 'rubocop', '~> 1.65' + gem 'mini_racer' end -group :test do +group :test, :optional => true do # get test coverage info on codeclimate - gem 'codeclimate-test-reporter', '1.0.9', group: :test, require: nil + gem 'codeclimate-test-reporter', '1.0.9' gem 'database_cleaner', '~> 1' gem 'factory_bot_rails' gem 'minitest-stub-const' - gem 'mocha', :require => false + gem 'mocha' gem 'rails-controller-testing' gem 'rails-dom-testing', '~> 2.2.0' gem 'rspec-expectations' gem 'simplecov' end -gem 'stripe', "~> 5.24.0", group: :stripe +group :stripe, :optional => true do + gem 'stripe', "~> 5.24.0" +end diff --git a/docker-compose.yml b/docker-compose.yml index 00872463..b60ecad3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,9 @@ services: volumes: - db-data:/var/lib/mysql web: - build: . + build: + context: . + target: production # can also be development or test environment: # These are set in script/ci-build, so we need to pass-thru them. RAILS_ENV: $RAILS_ENV diff --git a/script/cibuild b/script/cibuild index 564941a4..a68de2ad 100755 --- a/script/cibuild +++ b/script/cibuild @@ -2,7 +2,9 @@ set -e -docker_compose="docker-compose --file test-envs/docker-compose-$1-$2.yml" +export RUBY_VERSION=$1 + +docker_compose="docker-compose --file test-envs/docker-compose-$2.yml" function cleanup() { $docker_compose down diff --git a/script/poll-for-db b/script/poll-for-db index 05b1db4b..4be07922 100755 --- a/script/poll-for-db +++ b/script/poll-for-db @@ -2,13 +2,15 @@ echo "==> Polling DB…" -appdir=$(cd $(dirname "$0")/.. && pwd) -[ -f /etc/app-env ] || exec "$appdir/script/docker-environment" $0 $@ +if [ "$DATABASE_TYPE" == "mysql" ]; then + appdir=$(cd $(dirname "$0")/.. && pwd) + [ -f /etc/app-env ] || exec "$appdir/script/docker-environment" $0 $@ -for i in {1..60}; do - nc -z -w5 db 3306 && exit - sleep 1 -done + for i in {1..60}; do + nc -z -w5 db 3306 && exit + sleep 1 + done -echo "Unable to reach database!" -exit 1 + echo "Unable to reach database!" + exit 1 +fi diff --git a/test-envs/docker-compose-3.0-mysql.yml b/test-envs/docker-compose-3.0-mysql.yml deleted file mode 100644 index 2cd0413f..00000000 --- a/test-envs/docker-compose-3.0-mysql.yml +++ /dev/null @@ -1,29 +0,0 @@ -version: '3' -services: - db: - image: mysql:5.7 - environment: - MYSQL_ALLOW_EMPTY_PASSWORD: 1 - MYSQL_DATABASE: ${TRACKS_DB:-tracks} - volumes: - - db-data:/var/lib/mysql - web: - build: - context: .. - dockerfile: Dockerfile-3.0 - environment: - # These are set in script/ci-build, so we need to pass-thru them. - RAILS_ENV: $RAILS_ENV - DATABASE_NAME: $DATABASE_NAME - DATABASE_USERNAME: root - DATABASE_PASSWORD_EMPTY: 1 - volumes: - - ${VOLUME:-..}:/app:Z - - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - - ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z - ports: - - 3000:3000 - depends_on: - - db -volumes: - db-data: diff --git a/test-envs/docker-compose-3.1-mysql.yml b/test-envs/docker-compose-3.1-mysql.yml deleted file mode 100644 index 03f609e5..00000000 --- a/test-envs/docker-compose-3.1-mysql.yml +++ /dev/null @@ -1,29 +0,0 @@ -version: '3' -services: - db: - image: mysql:5.7 - environment: - MYSQL_ALLOW_EMPTY_PASSWORD: 1 - MYSQL_DATABASE: ${TRACKS_DB:-tracks} - volumes: - - db-data:/var/lib/mysql - web: - build: - context: .. - dockerfile: Dockerfile-3.1 - environment: - # These are set in script/ci-build, so we need to pass-thru them. - RAILS_ENV: $RAILS_ENV - DATABASE_NAME: $DATABASE_NAME - DATABASE_USERNAME: root - DATABASE_PASSWORD_EMPTY: 1 - volumes: - - ${VOLUME:-..}:/app:Z - - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - - ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z - ports: - - 3000:3000 - depends_on: - - db -volumes: - db-data: diff --git a/test-envs/docker-compose-3.2-mysql.yml b/test-envs/docker-compose-3.2-mysql.yml deleted file mode 100644 index 48b2e6d9..00000000 --- a/test-envs/docker-compose-3.2-mysql.yml +++ /dev/null @@ -1,29 +0,0 @@ -version: '3' -services: - db: - image: mysql:5.7 - environment: - MYSQL_ALLOW_EMPTY_PASSWORD: 1 - MYSQL_DATABASE: ${TRACKS_DB:-tracks} - volumes: - - db-data:/var/lib/mysql - web: - build: - context: .. - dockerfile: Dockerfile-3.2 - environment: - # These are set in script/ci-build, so we need to pass-thru them. - RAILS_ENV: $RAILS_ENV - DATABASE_NAME: $DATABASE_NAME - DATABASE_USERNAME: root - DATABASE_PASSWORD_EMPTY: 1 - volumes: - - ${VOLUME:-..}:/app:Z - - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - - ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z - ports: - - 3000:3000 - depends_on: - - db -volumes: - db-data: diff --git a/test-envs/docker-compose-3.3-postgres.yml b/test-envs/docker-compose-3.3-postgres.yml deleted file mode 100644 index a66d41b2..00000000 --- a/test-envs/docker-compose-3.3-postgres.yml +++ /dev/null @@ -1,32 +0,0 @@ -version: '3' -services: - db: - image: postgres:13 - environment: - POSTGRES_DB: ${DATABASE_NAME:-tracks} - POSTGRES_PASSWORD: password - volumes: - - db-data:/var/lib/postgresql/data - web: - build: - context: .. - dockerfile: Dockerfile - environment: - # These are set in script/ci-build, so we need to pass-thru them. - RAILS_ENV: $RAILS_ENV - DATABASE_NAME: $DATABASE_NAME - DATABASE_USERNAME: postgres - DATABASE_PASSWORD: password - DATABASE_TYPE: postgresql - DATABASE_ENCODING: unicode - DATABASE_PORT: 5432 - volumes: - - ${VOLUME:-..}:/app:Z - - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - - ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z - ports: - - 3000:3000 - depends_on: - - db -volumes: - db-data: diff --git a/test-envs/docker-compose-3.3-sqlite.yml b/test-envs/docker-compose-3.3-sqlite.yml deleted file mode 100644 index 4fd50bd5..00000000 --- a/test-envs/docker-compose-3.3-sqlite.yml +++ /dev/null @@ -1,17 +0,0 @@ -version: '3' -services: - web: - build: - context: .. - dockerfile: Dockerfile - environment: - # These are set in script/ci-build, so we need to pass-thru them. - RAILS_ENV: $RAILS_ENV - DATABASE_NAME: "/app/db.sqlite" - DATABASE_TYPE: sqlite3 - volumes: - - ${VOLUME:-..}:/app:Z - - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - - ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z - ports: - - 3000:3000 diff --git a/test-envs/docker-compose-3.3-mysql.yml b/test-envs/docker-compose-mysql.yml similarity index 91% rename from test-envs/docker-compose-3.3-mysql.yml rename to test-envs/docker-compose-mysql.yml index 67e67f17..6982fe3a 100644 --- a/test-envs/docker-compose-3.3-mysql.yml +++ b/test-envs/docker-compose-mysql.yml @@ -10,7 +10,9 @@ services: web: build: context: .. - dockerfile: Dockerfile + target: test + args: + RUBY_VERSION: ${RUBY_VERSION} environment: # These are set in script/ci-build, so we need to pass-thru them. RAILS_ENV: $RAILS_ENV diff --git a/test-envs/docker-compose-3.0-postgres.yml b/test-envs/docker-compose-postgres.yml similarity index 92% rename from test-envs/docker-compose-3.0-postgres.yml rename to test-envs/docker-compose-postgres.yml index 0c6d9b03..378d30cf 100644 --- a/test-envs/docker-compose-3.0-postgres.yml +++ b/test-envs/docker-compose-postgres.yml @@ -10,7 +10,9 @@ services: web: build: context: .. - dockerfile: Dockerfile-3.0 + target: test + args: + RUBY_VERSION: ${RUBY_VERSION} environment: # These are set in script/ci-build, so we need to pass-thru them. RAILS_ENV: $RAILS_ENV diff --git a/test-envs/docker-compose-3.0-sqlite.yml b/test-envs/docker-compose-sqlite.yml similarity index 69% rename from test-envs/docker-compose-3.0-sqlite.yml rename to test-envs/docker-compose-sqlite.yml index ba4d3709..374ff3eb 100644 --- a/test-envs/docker-compose-3.0-sqlite.yml +++ b/test-envs/docker-compose-sqlite.yml @@ -3,15 +3,19 @@ services: web: build: context: .. - dockerfile: Dockerfile-3.0 + target: test + args: + RUBY_VERSION: ${RUBY_VERSION} environment: # These are set in script/ci-build, so we need to pass-thru them. RAILS_ENV: $RAILS_ENV - DATABASE_NAME: "/app/db.sqlite" + DATABASE_NAME: "/app/db/db.sqlite" DATABASE_TYPE: sqlite3 volumes: - - ${VOLUME:-..}:/app:Z + - ${VOLUME:-sqlite}:/app/db:Z - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z ports: - 3000:3000 +volumes: + sqlite: {} From 212b2dc20c63f2fbb34f5d62e983d32a928d828a Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 18 Jul 2024 21:36:51 +0300 Subject: [PATCH 655/767] Fix DB adapters with the same constraints as in the ActiveRecord files (for example https://github.com/rails/rails/blob/v7.1.3.4/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb ) --- Gemfile | 6 +++--- Gemfile.lock | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Gemfile b/Gemfile index 3e281bad..2ca6347b 100644 --- a/Gemfile +++ b/Gemfile @@ -29,9 +29,9 @@ gem 'tracks-chartjs-ror' gem 'will_paginate' # Use --without argument to skip unnecessary drivers -gem 'sqlite3', group: :sqlite -gem 'mysql2', '~> 0.5.6', group: :mysql -gem 'pg', '~> 1.5.6', group: :postgresql +gem 'sqlite3', '~> 1.4', group: :sqlite +gem 'mysql2', '~> 0.5', group: :mysql +gem 'pg', '~> 1.1', group: :postgresql group :assets, :optional => true do gem 'listen' diff --git a/Gemfile.lock b/Gemfile.lock index fad802ed..a368acec 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -311,7 +311,7 @@ GEM actionpack (>= 5.2) activesupport (>= 5.2) sprockets (>= 3.0.0) - sqlite3 (1.6.9) + sqlite3 (1.7.3) mini_portile2 (~> 2.8.0) stripe (5.24.0) strscan (3.1.0) @@ -368,8 +368,8 @@ DEPENDENCIES mini_racer minitest-stub-const mocha - mysql2 (~> 0.5.6) - pg (~> 1.5.6) + mysql2 (~> 0.5) + pg (~> 1.1) puma (~> 6.4) rack-mini-profiler rails (~> 6.1) @@ -383,7 +383,7 @@ DEPENDENCIES simplecov solargraph spring (~> 4) - sqlite3 + sqlite3 (~> 1.4) stripe (~> 5.24.0) tolk (~> 5.0.1) tracks-chartjs-ror From 8464d0c60e70395ecb6ee8ae5fcac85f8cb67e45 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 18 Jul 2024 21:39:08 +0300 Subject: [PATCH 656/767] Remove the version constraint from Stripe --- Gemfile | 2 +- Gemfile.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 2ca6347b..a5ea9dd1 100644 --- a/Gemfile +++ b/Gemfile @@ -69,5 +69,5 @@ group :test, :optional => true do end group :stripe, :optional => true do - gem 'stripe', "~> 5.24.0" + gem 'stripe' end diff --git a/Gemfile.lock b/Gemfile.lock index a368acec..1cf6f3b4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -384,7 +384,7 @@ DEPENDENCIES solargraph spring (~> 4) sqlite3 (~> 1.4) - stripe (~> 5.24.0) + stripe tolk (~> 5.0.1) tracks-chartjs-ror uglifier (>= 1.3.0) From 0968152c5ad308c4e6ca48c0052afd70d620b02e Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 18 Jul 2024 21:53:03 +0300 Subject: [PATCH 657/767] Update rexml --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 1cf6f3b4..d0e75558 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -249,7 +249,7 @@ GEM regexp_parser (2.9.2) reverse_markdown (2.1.1) nokogiri - rexml (3.3.1) + rexml (3.3.2) strscan rspec-expectations (3.13.1) diff-lcs (>= 1.2.0, < 2.0) From d2fff6a64c4988744f0f164ce9ccfa8a3481b648 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 18 Jul 2024 22:09:35 +0300 Subject: [PATCH 658/767] Don't require the .git directory to exist for a successful Docker build. --- Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index fb60c234..ee0313a7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,7 +30,9 @@ COPY lib /app/lib/ COPY app /app/app/ COPY db /app/db/ -COPY .git /app/.git +# Use glob to omit error if the .git directory doesn't exists (in case the +# code is from a release archive, not a Git clone) +COPY .gi[t] /app/.git COPY Gemfile* /app/ From 2bf2f9476aff3b3bde96e8ef7a2e8da993aa27f2 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 18 Jul 2024 22:34:04 +0300 Subject: [PATCH 659/767] Fix a few user creation errors to be prettier --- app/controllers/users_controller.rb | 4 +++- config/locales/en.yml | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 30b63172..159449f8 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -81,13 +81,15 @@ class UsersController < ApplicationController end unless params['approve_tos'] == 'on' || SITE_CONFIG['tos_link'].blank? - render_failure "You have to accept the terms of service to sign up!" + notify :error, t('users.tos_error') + redirect_to signup_path return end user = User.new(user_params) unless user.valid? + notify :error, t('users.create_error') redirect_to signup_path return end diff --git a/config/locales/en.yml b/config/locales/en.yml index 9b8efd03..102f3863 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1281,6 +1281,7 @@ en: change_password_title: TRACKS::Change password choose_password: Choose password confirm_password: Confirm password + create_error: User creation failed, maybe you already have an account here? desired_login: Desired login destroy_confirmation: 'Warning: this will delete user ''%{login}'', all their actions, contexts, project and notes. Are you sure that you want to continue?' @@ -1315,6 +1316,7 @@ en: signup_successful: Signup successful for user %{username}. successfully_deleted_user: Successfully deleted user %{username} tos_link: read the Terms of Service + tos_error: You have to accept the terms of service to sign up! total_actions: Total actions total_contexts: Total contexts total_notes: Total notes From ad87729e31881eb9cc0d712675542095adf42849 Mon Sep 17 00:00:00 2001 From: "Sean M. Pappalardo" Date: Thu, 18 Jul 2024 14:25:56 -0400 Subject: [PATCH 660/767] Update bundle config command, add instructions for PostgreSQL --- doc/installation.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/doc/installation.md b/doc/installation.md index 375997e8..a3c2712a 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -153,13 +153,22 @@ Tracks is built upon a number of Ruby libraries (known as ‘gems’). The Bundl * If you are using SQLite: ``` - bundle install --without "development test mysql" + bundle config set without "development test mysql" + bundle install ``` * If you are using MySQL: ``` - bundle install --without "development test sqlite" + bundle config set without "development test sqlite" + bundle install + ``` + + * If you are using PostgreSQL: + + ``` + bundle config set without "development test sqlite mysql" + bundle install ``` * If you are installing Tracks on Windows or Mac OS X, or if you have another JavaScript runtime such as Node.js installed, you may also append `therubyracer` as an additional "without" parameter. From f5f0193b60e67a8b20e48e6bdce6b45ffa1d3da6 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 18 Jul 2024 23:37:40 +0300 Subject: [PATCH 661/767] Add asset stuff back to being included by default for non-Docker users; move more asset-related packages to the group --- Dockerfile | 7 ++++--- Gemfile | 22 ++++++++++------------ doc/installation.md | 8 ++++---- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/Dockerfile b/Dockerfile index ee0313a7..e569d8df 100644 --- a/Dockerfile +++ b/Dockerfile @@ -41,13 +41,13 @@ EXPOSE 3000 CMD ["./bin/rails", "server", "-b", "0.0.0.0"] FROM base AS precompile -RUN bundle config set with assets RUN bundle config set deployment true RUN bundle install --jobs 4 RUN RAILS_GROUPS=assets bundle exec rake assets:precompile # Build the environment-specific stuff FROM base AS production +RUN bundle config set without assets RUN bundle config --global frozen 1 RUN bundle install --jobs 4 COPY --from=precompile /app/public/assets /app/public/assets @@ -56,10 +56,11 @@ FROM base AS test COPY test /app/test/ # For testing the API client COPY doc /app/doc/ -RUN bundle config set with development test assets +RUN bundle config set without assets +RUN bundle config set with development test RUN bundle config --global frozen 1 RUN bundle install --jobs 4 -RUN RAILS_GROUPS=assets bundle exec rake assets:precompile +COPY --from=precompile /app/public/assets /app/public/assets FROM base AS development RUN bundle config set with development test diff --git a/Gemfile b/Gemfile index a5ea9dd1..59a0a548 100644 --- a/Gemfile +++ b/Gemfile @@ -3,19 +3,9 @@ source 'https://rubygems.org' gem 'actionpack-xml_parser', '~> 2.0' gem 'activemodel-serializers-xml', '~> 1.0.1' -gem 'coffee-rails', '~> 5.0.0' - -gem 'jquery-rails', '~> 4.6' -gem 'jquery-ui-rails', '~>7.0.0' - gem 'rails', '~> 6.1' -gem 'sassc-rails', '~> 2.1.2' -gem 'bootstrap-sass', '3.4.1' gem 'font-awesome-sass', '~> 6.5.2' - -gem 'uglifier', '>=1.3.0' - gem 'aasm', '~> 5.5.0' gem 'acts_as_list' gem 'bcrypt', '~> 3.1.20' @@ -33,7 +23,16 @@ gem 'sqlite3', '~> 1.4', group: :sqlite gem 'mysql2', '~> 0.5', group: :mysql gem 'pg', '~> 1.1', group: :postgresql -group :assets, :optional => true do +# See https://github.com/sstephenson/execjs#readme for more supported runtimes +gem 'mini_racer', group: :therubyracer + +group :assets do + gem 'coffee-rails', '~> 5.0.0' + gem 'jquery-rails', '~> 4.6' + gem 'jquery-ui-rails', '~>7.0.0' + gem 'sassc-rails', '~> 2.1.2' + gem 'bootstrap-sass', '3.4.1' + gem 'uglifier', '>=1.3.0' gem 'listen' gem 'tolk', '~> 5.0.1' end @@ -52,7 +51,6 @@ end group :development, :test, :optional => true do gem 'byebug' gem 'rubocop', '~> 1.65' - gem 'mini_racer' end group :test, :optional => true do diff --git a/doc/installation.md b/doc/installation.md index a3c2712a..2e937f63 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -44,7 +44,7 @@ Tracks container. In future there should be an official image in Docker Hub. You 1. Get the Tracks code base by either downloading the archive file for the latest releast or cloning it from GitHub. 2. Run the following command in the Tracks directory to build the image: ``` - $ docker build -t="tracks" . + $ docker build -t="tracks" --target=production . ``` 1. Make sure you have Docker properly installed. @@ -153,21 +153,21 @@ Tracks is built upon a number of Ruby libraries (known as ‘gems’). The Bundl * If you are using SQLite: ``` - bundle config set without "development test mysql" + bundle config set without mysql postgresql bundle install ``` * If you are using MySQL: ``` - bundle config set without "development test sqlite" + bundle config set without sqlite postgresql bundle install ``` * If you are using PostgreSQL: ``` - bundle config set without "development test sqlite mysql" + bundle config set without sqlite mysql bundle install ``` From 55050af2cbd5d6bf4405192729885cf51f2e5657 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 18 Jul 2024 23:44:19 +0300 Subject: [PATCH 662/767] Test the builded code, not the one mounted. --- test-envs/docker-compose-mysql.yml | 1 - test-envs/docker-compose-postgres.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/test-envs/docker-compose-mysql.yml b/test-envs/docker-compose-mysql.yml index 6982fe3a..7793c6b4 100644 --- a/test-envs/docker-compose-mysql.yml +++ b/test-envs/docker-compose-mysql.yml @@ -20,7 +20,6 @@ services: DATABASE_USERNAME: root DATABASE_PASSWORD_EMPTY: 1 volumes: - - ${VOLUME:-..}:/app:Z - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z ports: diff --git a/test-envs/docker-compose-postgres.yml b/test-envs/docker-compose-postgres.yml index 378d30cf..0bb095fa 100644 --- a/test-envs/docker-compose-postgres.yml +++ b/test-envs/docker-compose-postgres.yml @@ -23,7 +23,6 @@ services: DATABASE_ENCODING: unicode DATABASE_PORT: 5432 volumes: - - ${VOLUME:-..}:/app:Z - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z ports: From 13d7a711a420fc487f6dca9c6c33ce7bdc89dd52 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Fri, 19 Jul 2024 00:14:41 +0300 Subject: [PATCH 663/767] Move jquery back to default group --- Gemfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 59a0a548..6cb7fada 100644 --- a/Gemfile +++ b/Gemfile @@ -6,6 +6,8 @@ gem 'activemodel-serializers-xml', '~> 1.0.1' gem 'rails', '~> 6.1' gem 'font-awesome-sass', '~> 6.5.2' +gem 'jquery-rails', '~> 4.6' +gem 'jquery-ui-rails', '~>7.0.0' gem 'aasm', '~> 5.5.0' gem 'acts_as_list' gem 'bcrypt', '~> 3.1.20' @@ -28,8 +30,6 @@ gem 'mini_racer', group: :therubyracer group :assets do gem 'coffee-rails', '~> 5.0.0' - gem 'jquery-rails', '~> 4.6' - gem 'jquery-ui-rails', '~>7.0.0' gem 'sassc-rails', '~> 2.1.2' gem 'bootstrap-sass', '3.4.1' gem 'uglifier', '>=1.3.0' From 50f5a946d469e150404a621ebc8eebd6dfe2b7bc Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Fri, 19 Jul 2024 00:36:42 +0300 Subject: [PATCH 664/767] Don't use old databases in test runs --- test-envs/docker-compose-mysql.yml | 4 ---- test-envs/docker-compose-postgres.yml | 4 ---- test-envs/docker-compose-sqlite.yml | 2 +- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/test-envs/docker-compose-mysql.yml b/test-envs/docker-compose-mysql.yml index 7793c6b4..002f5b9e 100644 --- a/test-envs/docker-compose-mysql.yml +++ b/test-envs/docker-compose-mysql.yml @@ -5,8 +5,6 @@ services: environment: MYSQL_ALLOW_EMPTY_PASSWORD: 1 MYSQL_DATABASE: ${TRACKS_DB:-tracks} - volumes: - - db-data:/var/lib/mysql web: build: context: .. @@ -26,5 +24,3 @@ services: - 3000:3000 depends_on: - db -volumes: - db-data: diff --git a/test-envs/docker-compose-postgres.yml b/test-envs/docker-compose-postgres.yml index 0bb095fa..52ba2945 100644 --- a/test-envs/docker-compose-postgres.yml +++ b/test-envs/docker-compose-postgres.yml @@ -5,8 +5,6 @@ services: environment: POSTGRES_DB: ${DATABASE_NAME:-tracks} POSTGRES_PASSWORD: password - volumes: - - db-data:/var/lib/postgresql/data web: build: context: .. @@ -29,5 +27,3 @@ services: - 3000:3000 depends_on: - db -volumes: - db-data: diff --git a/test-envs/docker-compose-sqlite.yml b/test-envs/docker-compose-sqlite.yml index 374ff3eb..7a04620c 100644 --- a/test-envs/docker-compose-sqlite.yml +++ b/test-envs/docker-compose-sqlite.yml @@ -12,7 +12,7 @@ services: DATABASE_NAME: "/app/db/db.sqlite" DATABASE_TYPE: sqlite3 volumes: - - ${VOLUME:-sqlite}:/app/db:Z + - sqlite:/app/db:Z - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z ports: From 76d3083e8f6c10f02813b1e7b53f7eb7ac184df9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 00:40:03 +0000 Subject: [PATCH 665/767] Bump mocha from 2.4.0 to 2.4.2 Bumps [mocha](https://github.com/freerange/mocha) from 2.4.0 to 2.4.2. - [Changelog](https://github.com/freerange/mocha/blob/main/RELEASE.md) - [Commits](https://github.com/freerange/mocha/compare/v2.4.0...v2.4.2) --- updated-dependencies: - dependency-name: mocha dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index d0e75558..c2fb7da0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -172,7 +172,7 @@ GEM libv8-node (~> 21.7.2.0) minitest (5.24.1) minitest-stub-const (0.6) - mocha (2.4.0) + mocha (2.4.2) ruby2_keywords (>= 0.0.5) mysql2 (0.5.6) net-imap (0.4.12) From a0999e3e453a5a0865033d0dd975a71027620f9c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 00:40:25 +0000 Subject: [PATCH 666/767] Bump acts_as_list from 1.2.1 to 1.2.2 Bumps [acts_as_list](https://github.com/brendon/acts_as_list) from 1.2.1 to 1.2.2. - [Changelog](https://github.com/brendon/acts_as_list/blob/master/CHANGELOG.md) - [Commits](https://github.com/brendon/acts_as_list/compare/v1.2.1...v1.2.2) --- updated-dependencies: - dependency-name: acts_as_list dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index d0e75558..c768d5fd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -70,7 +70,7 @@ GEM minitest (>= 5.1) tzinfo (~> 2.0) zeitwerk (~> 2.3) - acts_as_list (1.2.1) + acts_as_list (1.2.2) activerecord (>= 6.1) activesupport (>= 6.1) ast (2.4.2) From 36f139d8793c049cfa48ea27fb04dbea7f35e645 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Fri, 19 Jul 2024 14:00:19 +0300 Subject: [PATCH 667/767] Update schema.rb for Postgres support --- db/schema.rb | 78 +++++++++++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index a0b9a251..6e2fb9c3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -2,30 +2,33 @@ # of editing this file, please use the migrations feature of Active Record to # incrementally modify your database, and then regenerate this schema definition. # -# Note that this schema.rb definition is the authoritative source for your -# database schema. If you need to create the application database on another -# system, you should be using db:schema:load, not running all the migrations -# from scratch. The latter is a flawed and unsustainable approach (the more migrations -# you'll amass, the slower it'll run and the greater likelihood for issues). +# This file is the source Rails uses to define your schema when running `bin/rails +# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to +# be faster and is potentially less error prone than running all of your +# migrations from scratch. Old migrations may fail to apply correctly if those +# migrations use external dependencies or application code. # # It's strongly recommended that you check this file into your version control system. ActiveRecord::Schema.define(version: 2020_08_20_000743) do - create_table "attachments", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| - t.integer "todo_id" + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + create_table "attachments", force: :cascade do |t| + t.bigint "todo_id" t.string "file_file_name" t.string "file_content_type" - t.integer "file_file_size" + t.bigint "file_file_size" t.datetime "file_updated_at" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.index ["todo_id"], name: "index_attachments_on_todo_id" end - create_table "contexts", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "contexts", force: :cascade do |t| t.string "name", null: false - t.integer "position", default: 0 + t.integer "position" t.integer "user_id", default: 1 t.datetime "created_at" t.datetime "updated_at" @@ -34,7 +37,7 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do t.index ["user_id"], name: "index_contexts_on_user_id" end - create_table "dependencies", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "dependencies", force: :cascade do |t| t.integer "successor_id", null: false t.integer "predecessor_id", null: false t.string "relationship_type" @@ -42,7 +45,7 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do t.index ["successor_id"], name: "index_dependencies_on_successor_id" end - create_table "notes", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "notes", force: :cascade do |t| t.integer "user_id", null: false t.integer "project_id", null: false t.text "body" @@ -52,7 +55,7 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do t.index ["user_id"], name: "index_notes_on_user_id" end - create_table "open_id_authentication_associations", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "open_id_authentication_associations", force: :cascade do |t| t.integer "issued" t.integer "lifetime" t.string "handle" @@ -61,13 +64,13 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do t.binary "secret" end - create_table "open_id_authentication_nonces", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "open_id_authentication_nonces", force: :cascade do |t| t.integer "timestamp", null: false t.string "server_url" t.string "salt", null: false end - create_table "preferences", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "preferences", force: :cascade do |t| t.integer "user_id", null: false t.string "date_format", limit: 40, default: "%d/%m/%Y", null: false t.integer "week_starts", default: 0, null: false @@ -79,9 +82,9 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do t.integer "refresh", default: 0, null: false t.boolean "verbose_action_descriptors", default: false, null: false t.boolean "show_hidden_projects_in_sidebar", default: true, null: false - t.string "time_zone", default: "London", null: false + t.string "time_zone", limit: 255, default: "London", null: false t.boolean "show_project_on_todo_done", default: false, null: false - t.string "title_date_format", default: "%A, %d %B %Y", null: false + t.string "title_date_format", limit: 255, default: "%A, %d %B %Y", null: false t.integer "mobile_todos_per_page", default: 6, null: false t.string "sms_email" t.integer "sms_context_id" @@ -91,11 +94,11 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do t.index ["user_id"], name: "index_preferences_on_user_id" end - create_table "projects", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "projects", force: :cascade do |t| t.string "name", null: false - t.integer "position", default: 0 + t.integer "position" t.integer "user_id", default: 1 - t.text "description", limit: 16777215 + t.text "description" t.string "state", limit: 20, null: false t.datetime "created_at" t.datetime "updated_at" @@ -109,12 +112,12 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do t.index ["user_id"], name: "index_projects_on_user_id" end - create_table "recurring_todos", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "recurring_todos", force: :cascade do |t| t.integer "user_id", default: 1 t.integer "context_id", null: false t.integer "project_id" t.string "description", null: false - t.text "notes", limit: 16777215 + t.text "notes" t.string "state", limit: 20, null: false t.datetime "start_from" t.string "ends_on" @@ -133,21 +136,21 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do t.integer "every_count" t.integer "weekday" t.datetime "completed_at" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.boolean "show_always" t.index ["state"], name: "index_recurring_todos_on_state" t.index ["user_id"], name: "index_recurring_todos_on_user_id" end - create_table "sessions", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "sessions", force: :cascade do |t| t.string "session_id" t.text "data" t.datetime "updated_at" - t.index ["session_id"], name: "sessions_session_id_index" + t.index ["session_id"], name: "index_sessions_on_session_id" end - create_table "taggings", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "taggings", force: :cascade do |t| t.integer "taggable_id" t.integer "tag_id" t.string "taggable_type" @@ -156,7 +159,7 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do t.index ["taggable_id", "taggable_type"], name: "index_taggings_on_taggable_id_and_taggable_type" end - create_table "tags", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "tags", force: :cascade do |t| t.string "name" t.datetime "created_at" t.datetime "updated_at" @@ -164,11 +167,11 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do t.index ["name"], name: "index_tags_on_name" end - create_table "todos", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "todos", force: :cascade do |t| t.integer "context_id", null: false t.integer "project_id" t.text "description", null: false - t.text "notes", limit: 16777215 + t.text "notes" t.datetime "created_at" t.datetime "due" t.datetime "completed_at" @@ -177,7 +180,6 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do t.string "state", limit: 20, null: false t.integer "recurring_todo_id" t.datetime "updated_at" - t.text "rendered_notes", limit: 16777215 t.index ["context_id"], name: "index_todos_on_context_id" t.index ["project_id"], name: "index_todos_on_project_id" t.index ["state"], name: "index_todos_on_state" @@ -186,20 +188,20 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do t.index ["user_id", "state"], name: "index_todos_on_user_id_and_state" end - create_table "tolk_locales", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "tolk_locales", force: :cascade do |t| t.string "name" t.datetime "created_at" t.datetime "updated_at" t.index ["name"], name: "index_tolk_locales_on_name", unique: true end - create_table "tolk_phrases", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "tolk_phrases", force: :cascade do |t| t.text "key" t.datetime "created_at" t.datetime "updated_at" end - create_table "tolk_translations", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "tolk_translations", force: :cascade do |t| t.integer "phrase_id" t.integer "locale_id" t.text "text" @@ -210,9 +212,9 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do t.index ["phrase_id", "locale_id"], name: "index_tolk_translations_on_phrase_id_and_locale_id", unique: true end - create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| + create_table "users", force: :cascade do |t| t.string "login", limit: 80, null: false - t.string "crypted_password", limit: 60 + t.string "crypted_password", limit: 60, null: false t.string "token" t.boolean "is_admin", default: false, null: false t.string "first_name" From a9a978c1f84662079ce76d1b227c0ad651edeff1 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Fri, 19 Jul 2024 14:34:54 +0300 Subject: [PATCH 668/767] Fix the installation documentation of postgresql. Fixes #2845. --- doc/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/installation.md b/doc/installation.md index 2e937f63..89829c8b 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -142,7 +142,7 @@ You need to create a database and database-user to use with Tracks. For this, yo #### PostgreSQL $ sudo -u postgres psql - postgres=# CREATE USER tracks WITH ENCRYPTED PASSWORD 'password-goes-here'; + postgres=# CREATE ROLE tracks WITH LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION PASSWORD 'password-goes-here'; postgres=# CREATE DATABASE tracks OWNER=tracks; ### Install dependencies From 3fcdb41fa9e6c2a1ec7f19149b522a1d2514baf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 00:25:45 +0000 Subject: [PATCH 669/767] Bump stripe from 5.24.0 to 12.3.0 Bumps [stripe](https://github.com/stripe/stripe-ruby) from 5.24.0 to 12.3.0. - [Release notes](https://github.com/stripe/stripe-ruby/releases) - [Changelog](https://github.com/stripe/stripe-ruby/blob/master/CHANGELOG.md) - [Commits](https://github.com/stripe/stripe-ruby/compare/v5.24.0...v12.3.0) --- updated-dependencies: - dependency-name: stripe dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index e9bc84cb..f9c51435 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -313,7 +313,7 @@ GEM sprockets (>= 3.0.0) sqlite3 (1.7.3) mini_portile2 (~> 2.8.0) - stripe (5.24.0) + stripe (12.3.0) strscan (3.1.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) From 0d2d89780b7a90d1ac0add92921972e7923469ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jul 2024 00:33:56 +0000 Subject: [PATCH 670/767] Bump mocha from 2.4.2 to 2.4.3 Bumps [mocha](https://github.com/freerange/mocha) from 2.4.2 to 2.4.3. - [Changelog](https://github.com/freerange/mocha/blob/main/RELEASE.md) - [Commits](https://github.com/freerange/mocha/compare/v2.4.2...v2.4.3) --- updated-dependencies: - dependency-name: mocha dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index e9bc84cb..b3e8c8e6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -172,7 +172,7 @@ GEM libv8-node (~> 21.7.2.0) minitest (5.24.1) minitest-stub-const (0.6) - mocha (2.4.2) + mocha (2.4.3) ruby2_keywords (>= 0.0.5) mysql2 (0.5.6) net-imap (0.4.12) From a984011ddc0b63fb663a3175567357febb07d326 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Jul 2024 00:32:02 +0000 Subject: [PATCH 671/767] Bump mocha from 2.4.3 to 2.4.4 Bumps [mocha](https://github.com/freerange/mocha) from 2.4.3 to 2.4.4. - [Changelog](https://github.com/freerange/mocha/blob/main/RELEASE.md) - [Commits](https://github.com/freerange/mocha/compare/v2.4.3...v2.4.4) --- updated-dependencies: - dependency-name: mocha dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 79558d8d..31302178 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -172,7 +172,7 @@ GEM libv8-node (~> 21.7.2.0) minitest (5.24.1) minitest-stub-const (0.6) - mocha (2.4.3) + mocha (2.4.4) ruby2_keywords (>= 0.0.5) mysql2 (0.5.6) net-imap (0.4.12) From 49fa90c7a66c0dd62f0d877e44913faba67fc6cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 00:28:45 +0000 Subject: [PATCH 672/767] Bump mocha from 2.4.4 to 2.4.5 Bumps [mocha](https://github.com/freerange/mocha) from 2.4.4 to 2.4.5. - [Changelog](https://github.com/freerange/mocha/blob/main/RELEASE.md) - [Commits](https://github.com/freerange/mocha/compare/v2.4.4...v2.4.5) --- updated-dependencies: - dependency-name: mocha dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 31302178..8e16f046 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -172,7 +172,7 @@ GEM libv8-node (~> 21.7.2.0) minitest (5.24.1) minitest-stub-const (0.6) - mocha (2.4.4) + mocha (2.4.5) ruby2_keywords (>= 0.0.5) mysql2 (0.5.6) net-imap (0.4.12) From 784f8c3009b265fe584aef1d8644f0c45a2503b9 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Mon, 22 Jul 2024 10:34:27 +0000 Subject: [PATCH 673/767] Translated using Weblate (Spanish) Currently translated at 100.0% (1121 of 1121 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/es/ --- config/locales/es.yml | 74 +++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 28 deletions(-) diff --git a/config/locales/es.yml b/config/locales/es.yml index 6f008359..2b235861 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -93,14 +93,15 @@ es: body: 'Hubo problemas con los campos siguientes:' header: one: Un error ha impedido que se guarde este %{model} - other: '%{count} errores han impedido que se guarden este %{model}' + many: '%{count} errores han impedido que se guarden este %{model}' + other: '' common: action: Tarea actions: Tareas actions_midsentence: - one: tarea + one: tareas + many: tarea other: tareas - zero: tareas add: Añadir ajaxError: Hubo un error al recuperar desde el servidor back: Atrás @@ -113,7 +114,8 @@ es: create: Crear days_midsentence: one: día - other: días + many: días + other: '' deferred: pospuestas description: Descripción drag_handle: ARRASTRAR @@ -132,9 +134,9 @@ es: none: Ninguno not_available_abbr: n/d note: - one: 1 nota - other: "%{count} notas" - zero: 0 notas + one: 0 notas + many: 1 nota + other: '%{count} notas' notes: Notas numbered_step: Paso %{number} ok: Aceptar @@ -313,40 +315,49 @@ es: distance_in_words: about_x_hours: one: alrededor de 1 hora - other: Acerca de %{count} horas + many: Acerca de %{count} horas + other: '' about_x_months: one: alrededor de 1 mes - other: Acerca de %{count} meses + many: Acerca de %{count} meses + other: '' about_x_years: one: alrededor de 1 año - other: Acerca de %{count} años + many: Acerca de %{count} años + other: '' almost_x_years: one: casi 1 año - other: Casi %{count} años + many: Casi %{count} años + other: '' half_a_minute: medio minuto less_than_x_minutes: - one: menos de un minuto + one: menos de 1 minuto + many: menos de un minuto other: menos de %{count} minutos - zero: menos de 1 minuto less_than_x_seconds: one: menos de 1 segundo + many: menos de 1 segundo other: menos de %{count} segundos - zero: menos de 1 segundo over_x_years: one: más de un año - other: en %{count} años + many: en %{count} años + other: '' x_days: one: 1 día - other: '%{count} días' + many: '%{count} días' + other: '' x_minutes: one: 1 minuto - other: '%{count} minutos' + many: '%{count} minutos' + other: '' x_months: one: 1 mes - other: '%{count} meses' + many: '%{count} meses' + other: '' x_seconds: one: Un segundo - other: '%{count} segundos' + many: '%{count} segundos' + other: '' prompts: day: Día hour: Hora @@ -698,7 +709,8 @@ es: units: byte: one: Byte - other: Bytes + many: Bytes + other: '' gb: GB kb: KB mb: MB @@ -1056,7 +1068,8 @@ es: completed_actions_with: Acciones completadas con la lengüeta «%{tag_name}» completed_in_archive: one: There is one completed action in the archive. - other: There are %{count} completed actions in the archive. + many: There are %{count} completed actions in the archive. + other: '' completed_last_day: Completed in the last 24 hours completed_last_x_days: Completed in last %{count} days completed_recurrence_completed: There is no next action after the recurring action @@ -1076,7 +1089,8 @@ es: due date before deferring. defer_x_days: one: Defer one day - other: Defer %{count} days + many: Defer %{count} days + other: '' deferred_actions_with: Deferred actions with the tag '%{tag_name}' deferred_pending_actions: Deferred/pending actions deferred_tasks_title: TRACKS::Recordatorio @@ -1116,7 +1130,8 @@ es: due: 'Vence: %{date}' has_x_pending: one: Tiene una tarea pendiente - other: Tiene %{count} tareas pendientes + many: Tiene %{count} tareas pendientes + other: '' hidden_actions: Tareas ocultas in_hidden_state: en estado oculto in_pending_state: en estado pendiente @@ -1283,8 +1298,9 @@ es: task_list_title: TRACKS::List etiquetadas tickler_items_due: one: Un elemento de tiquet ahora está vencido - recargue la página para verlo. - other: '%{count} elementos de ticket ahora están vencidos - recargue la página + many: '%{count} elementos de ticket ahora están vencidos - recargue la página para verlos.' + other: '' to_tickler: al recordatorio unable_to_add_dependency: Es imposible añadir dependencia unresolved_dependency: 'El valor que ha introducido en el campo de dependencia @@ -1347,6 +1363,8 @@ es: user_created: User created. you_have_to_reset_your_password: Usted tiene que restablecer su contraseña manage_users_title: TRACKS::Gestión de usuarios + create_error: La creación de usuario falló, ¿quizás ya tienes una cuenta aquí? + tos_error: ¡Tienes que aceptar los términos del servicio para registrarte! will_paginate: next_label: Siguiente » page_entries_info: @@ -1354,13 +1372,13 @@ es: multi_page_html: Representando %{model} %{from} - %{to} de %{count} en el total single_page: - one: Viendo del 1 %{model} + one: No %{model} encontrado + many: Viendo del 1 %{model} other: Viendo todos los %{count} %{model} - zero: No %{model} encontrado single_page_html: - one: Viendo del 1 %{model} + one: No %{model} encontrado + many: Viendo del 1 %{model} other: Viendo todos los %{count} %{model} - zero: No %{model} encontrado page_gap: "…" previous_label: "« Anterior" rest_help: From c7d81bb79f4625f5a61fd7963bab563b00b25c58 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Tue, 23 Jul 2024 11:32:01 +0000 Subject: [PATCH 674/767] Translated using Weblate (Finnish) Currently translated at 99.1% (1111 of 1121 strings) Translation: Tracks/Tracks Translate-URL: https://hosted.weblate.org/projects/tracks/tracks/fi/ --- config/locales/fi.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 3c68b79c..008cba69 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -131,9 +131,8 @@ fi: none: Ei not_available_abbr: ei note: - one: 1 muistiinpano - other: "%{count} muistiinpanoa" - zero: ei muistiinpanoja + one: ei muistiinpanoja + other: 1 muistiinpano notes: Muistiinpanot numbered_step: Askel %{number} ok: Ok @@ -1331,6 +1330,9 @@ fi: total_users_count: Sinulla on yhteensä %{count} käyttäjää user_created: Käyttäjä luotu. you_have_to_reset_your_password: Palauta salasanasi + create_error: Tunnuksen luominen epäonnistui, ehkä sinulla on jo käyttäjätunnus + täällä? + tos_error: Sinun täytyy hyväksyä käyttöehdot rekisteröityäksesi! will_paginate: next_label: Seuraava → page_entries_info: @@ -1338,13 +1340,11 @@ fi: multi_page_html: Näytetään %{model} %{from} - %{to} yhteensä %{count} tietueesta single_page: - one: Näytetään 1 %{model} - other: Näytetään kaikki %{count} %{model} - zero: '%{model} ei löytynyt' + one: '%{model} ei löytynyt' + other: Näytetään 1 %{model} single_page_html: - one: Näytetään 1 %{model} - other: Näytetään kaikki %{count} %{model} - zero: '%{model} ei löytynyt' + one: '%{model} ei löytynyt' + other: Näytetään 1 %{model} page_gap: "…" previous_label: "← Edellinen" auth_type: From c23ca0574ec1149993476632ffd66643aec6aac2 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 25 Jul 2024 14:53:04 +0300 Subject: [PATCH 675/767] Fix reflected XSS vulnerability on the stats page --- app/views/stats/show_selection_from_chart.html.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/stats/show_selection_from_chart.html.erb b/app/views/stats/show_selection_from_chart.html.erb index 29e9dfdb..abe7f04b 100644 --- a/app/views/stats/show_selection_from_chart.html.erb +++ b/app/views/stats/show_selection_from_chart.html.erb @@ -4,8 +4,8 @@ unless @further -%> <%= raw t('stats.click_to_show_actions_from_week', - :link => link_to("here", show_actions_from_chart_path(:id=>"#{params[:id]}_end", :index => params[:index])), - :week => params[:index]) + :link => link_to("here", show_actions_from_chart_path(:id=>"#{params[:id].to_i}_end", :index => params[:index].to_i)), + :week => params[:index].to_i) -%> <% end From d64e1a0fa436ab0762f18dd37c8d5cb40d87e500 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 25 Jul 2024 21:34:12 +0300 Subject: [PATCH 676/767] Fix the plurals as usual --- config/locales/es.yml | 70 +++++++++++++++++-------------------------- config/locales/fi.yml | 15 ++++++---- 2 files changed, 36 insertions(+), 49 deletions(-) diff --git a/config/locales/es.yml b/config/locales/es.yml index 2b235861..e4dffa6d 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -93,15 +93,14 @@ es: body: 'Hubo problemas con los campos siguientes:' header: one: Un error ha impedido que se guarde este %{model} - many: '%{count} errores han impedido que se guarden este %{model}' - other: '' + other: '%{count} errores han impedido que se guarden este %{model}' common: action: Tarea actions: Tareas actions_midsentence: - one: tareas - many: tarea + one: tarea other: tareas + zero: tareas add: Añadir ajaxError: Hubo un error al recuperar desde el servidor back: Atrás @@ -114,8 +113,7 @@ es: create: Crear days_midsentence: one: día - many: días - other: '' + other: días deferred: pospuestas description: Descripción drag_handle: ARRASTRAR @@ -134,9 +132,9 @@ es: none: Ninguno not_available_abbr: n/d note: - one: 0 notas - many: 1 nota + one: 1 nota other: '%{count} notas' + zero: 0 notas notes: Notas numbered_step: Paso %{number} ok: Aceptar @@ -315,49 +313,40 @@ es: distance_in_words: about_x_hours: one: alrededor de 1 hora - many: Acerca de %{count} horas - other: '' + other: Acerca de %{count} horas about_x_months: one: alrededor de 1 mes - many: Acerca de %{count} meses - other: '' + other: Acerca de %{count} meses about_x_years: one: alrededor de 1 año - many: Acerca de %{count} años - other: '' + other: Acerca de %{count} años almost_x_years: one: casi 1 año - many: Casi %{count} años - other: '' + other: Casi %{count} años half_a_minute: medio minuto less_than_x_minutes: - one: menos de 1 minuto - many: menos de un minuto + one: menos de un minuto other: menos de %{count} minutos + zero: menos de 1 minuto less_than_x_seconds: one: menos de 1 segundo - many: menos de 1 segundo other: menos de %{count} segundos + zero: menos de 1 segundo over_x_years: one: más de un año - many: en %{count} años - other: '' + other: en %{count} años x_days: one: 1 día - many: '%{count} días' - other: '' + other: '%{count} días' x_minutes: one: 1 minuto - many: '%{count} minutos' - other: '' + other: '%{count} minutos' x_months: one: 1 mes - many: '%{count} meses' - other: '' + other: '%{count} meses' x_seconds: one: Un segundo - many: '%{count} segundos' - other: '' + other: '%{count} segundos' prompts: day: Día hour: Hora @@ -709,8 +698,7 @@ es: units: byte: one: Byte - many: Bytes - other: '' + other: Bytes gb: GB kb: KB mb: MB @@ -1068,8 +1056,7 @@ es: completed_actions_with: Acciones completadas con la lengüeta «%{tag_name}» completed_in_archive: one: There is one completed action in the archive. - many: There are %{count} completed actions in the archive. - other: '' + other: There are %{count} completed actions in the archive. completed_last_day: Completed in the last 24 hours completed_last_x_days: Completed in last %{count} days completed_recurrence_completed: There is no next action after the recurring action @@ -1089,8 +1076,7 @@ es: due date before deferring. defer_x_days: one: Defer one day - many: Defer %{count} days - other: '' + other: Defer %{count} days deferred_actions_with: Deferred actions with the tag '%{tag_name}' deferred_pending_actions: Deferred/pending actions deferred_tasks_title: TRACKS::Recordatorio @@ -1130,8 +1116,7 @@ es: due: 'Vence: %{date}' has_x_pending: one: Tiene una tarea pendiente - many: Tiene %{count} tareas pendientes - other: '' + other: Tiene %{count} tareas pendientes hidden_actions: Tareas ocultas in_hidden_state: en estado oculto in_pending_state: en estado pendiente @@ -1298,9 +1283,8 @@ es: task_list_title: TRACKS::List etiquetadas tickler_items_due: one: Un elemento de tiquet ahora está vencido - recargue la página para verlo. - many: '%{count} elementos de ticket ahora están vencidos - recargue la página + other: '%{count} elementos de ticket ahora están vencidos - recargue la página para verlos.' - other: '' to_tickler: al recordatorio unable_to_add_dependency: Es imposible añadir dependencia unresolved_dependency: 'El valor que ha introducido en el campo de dependencia @@ -1372,13 +1356,13 @@ es: multi_page_html: Representando %{model} %{from} - %{to} de %{count} en el total single_page: - one: No %{model} encontrado - many: Viendo del 1 %{model} + one: Viendo del 1 %{model} other: Viendo todos los %{count} %{model} + zero: No %{model} encontrado single_page_html: - one: No %{model} encontrado - many: Viendo del 1 %{model} + one: Viendo del 1 %{model} other: Viendo todos los %{count} %{model} + zero: No %{model} encontrado page_gap: "…" previous_label: "« Anterior" rest_help: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 008cba69..6286ad2e 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -131,8 +131,9 @@ fi: none: Ei not_available_abbr: ei note: - one: ei muistiinpanoja - other: 1 muistiinpano + one: 1 muistiinpano + other: '%{count} muistiinpanoa' + zero: ei muistiinpanoja notes: Muistiinpanot numbered_step: Askel %{number} ok: Ok @@ -1340,11 +1341,13 @@ fi: multi_page_html: Näytetään %{model} %{from} - %{to} yhteensä %{count} tietueesta single_page: - one: '%{model} ei löytynyt' - other: Näytetään 1 %{model} + one: Näytetään 1 %{model} + other: Näytetään kaikki %{count} %{model} + zero: '%{model} ei löytynyt' single_page_html: - one: '%{model} ei löytynyt' - other: Näytetään 1 %{model} + one: Näytetään 1 %{model} + other: Näytetään kaikki %{count} %{model} + zero: '%{model} ei löytynyt' page_gap: "…" previous_label: "← Edellinen" auth_type: From b0d288d2efd0f8020d04ca95b8e0738a9eab6c51 Mon Sep 17 00:00:00 2001 From: Jyri-Petteri Paloposki Date: Thu, 25 Jul 2024 15:34:44 +0300 Subject: [PATCH 677/767] Fix reflected XSS vulnerabilities in some views --- app/controllers/todos_controller.rb | 6 ++++-- app/views/layouts/application.html.erb | 12 ++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/controllers/todos_controller.rb b/app/controllers/todos_controller.rb index 1c852420..05b7a95a 100644 --- a/app/controllers/todos_controller.rb +++ b/app/controllers/todos_controller.rb @@ -863,8 +863,10 @@ class TodosController < ApplicationController end @single_tag = @tag_expr.size == 1 && @tag_expr[0].size == 1 - @tag_name = @tag_expr[0][0] - @tag_title = @single_tag ? @tag_name : tag_title(@tag_expr) + + # These are used in the templates, sanitise to prevent XSS. + @tag_name = sanitize(@tag_expr[0][0]) + @tag_title = sanitize(@single_tag ? @tag_name : tag_title(@tag_expr)) end def filter_format_for_tag_view diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 31e5808e..4640637a 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -7,14 +7,14 @@ <%= javascript_include_tag "application" %> <%= csrf_meta_tags %>