Merge branch 'master' into patch-1

This commit is contained in:
Jyri-Petteri Paloposki 2022-08-16 01:28:22 +03:00 committed by GitHub
commit 326d434cd7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
60 changed files with 1749 additions and 1079 deletions

View file

@ -1,4 +1,18 @@
engines: version: "2"
checks:
file-lines:
config:
threshold: 300
method-complexity:
config:
threshold: 50
method-count:
config:
threshold: 20
method-lines:
config:
threshold: 100
plugins:
brakeman: brakeman:
enabled: true enabled: true
fixme: fixme:
@ -16,3 +30,5 @@ engines:
enabled: false enabled: false
Rubocop/Style/HashSyntax: Rubocop/Style/HashSyntax:
enabled: false enabled: false
#exclude_patterns:
#- app/assets/javascripts-jquery-ui

View file

@ -1,5 +1,4 @@
.bundle .bundle
.git
config/database.yml config/database.yml
config/site.yml config/site.yml
coverage coverage

View file

@ -0,0 +1,47 @@
name: 'build'
on:
push:
branches:
- master
pull_request:
jobs:
build-and-publish-latest:
name: 'Build latest'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2 # Checking out the repo
-
name: Set up QEMU
uses: docker/setup-qemu-action@v2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
-
name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v3
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: |
tracksapp/tracks:latest
tracksapp/tracks:master
ghcr.io/tracksapp/tracks:latest
#ghcr.io/TracksApp/tracks:1.0.0
#tracksapp/tracks:1.0.0

View file

@ -6,13 +6,9 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
ruby: ["2.5", "2.6", "2.7"] ruby: ["2.7", "3.0"]
db: [sqlite, mysql, postgres] db: [sqlite, mysql, postgres]
exclude: exclude:
- ruby: "2.5"
db: sqlite
- ruby: "2.5"
db: postgres
- ruby: "2.6" - ruby: "2.6"
db: sqlite db: sqlite
- ruby: "2.6" - ruby: "2.6"

View file

@ -16,3 +16,20 @@ Style/StringLiterals:
Layout/AlignParameters: Layout/AlignParameters:
EnforcedStyle: with_fixed_indentation EnforcedStyle: with_fixed_indentation
Metrics/AbcSize:
Max: 100
Metrics/CyclomaticComplexity:
Max: 100
Metrics/MethodLength:
Max: 100
CountAsOne: ['array', 'hash', 'heredoc']
Metrics/ModuleLength:
Max: 300
CountAsOne: ['array', 'hash', 'heredoc']
Metrics/ClassLength:
Max: 300
Metrics/ParameterLists:
Max: 20
Metrics/PerceivedComplexity:
Max: 100

View file

@ -1,4 +1,4 @@
FROM ruby:2.7.1 FROM ruby:2.7
# throw errors if Gemfile has been modified since Gemfile.lock # throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1 RUN bundle config --global frozen 1
@ -13,18 +13,35 @@ RUN bundle install --jobs 4
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - 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 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 RUN mkdir /app/log
COPY . /app/ COPY COPYING /app/
COPY config /app/config/
COPY config/database.docker.yml /app/config/database.yml COPY config/database.docker.yml /app/config/database.yml
COPY config/site.docker.yml /app/config/site.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/
COPY .git /app/.git
RUN RAILS_ENV=production bundle exec rake assets:precompile RUN RAILS_ENV=production bundle exec rake assets:precompile
ENTRYPOINT ["/app/docker-entrypoint.sh"] ENTRYPOINT ["/app/docker-entrypoint.sh"]
EXPOSE 3000 EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"] CMD ["./bin/rails", "server", "-b", "0.0.0.0"]

View file

@ -1,4 +1,4 @@
FROM ruby:2.6.5 FROM ruby:2.6
# throw errors if Gemfile has been modified since Gemfile.lock # throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1 RUN bundle config --global frozen 1

View file

@ -1,4 +1,4 @@
FROM ruby:2.5.7 FROM ruby:3.0
# throw errors if Gemfile has been modified since Gemfile.lock # throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1 RUN bundle config --global frozen 1

34
Gemfile
View file

@ -5,23 +5,23 @@ gem 'activemodel-serializers-xml', '~> 1.0.1'
gem 'coffee-rails', '~> 5.0.0' gem 'coffee-rails', '~> 5.0.0'
gem 'jquery-rails', '~> 4.4' gem 'jquery-rails', '~> 4.5'
gem 'jquery-ui-rails', '~>6.0.1' gem 'jquery-ui-rails', '~>6.0.1'
gem 'rails', '~> 6.0.3' gem 'rails', '~> 6.0.0'
gem 'sassc-rails', '~> 2.1.2' gem 'sassc-rails', '~> 2.1.2'
gem 'bootstrap-sass', '3.4.1' gem 'bootstrap-sass', '3.4.1'
gem 'font-awesome-sass', '~> 5.15.1' gem 'font-awesome-sass', '~> 6.1.2'
gem 'uglifier', '>=1.3.0' gem 'uglifier', '>=1.3.0'
gem 'aasm', '~> 5.2.0' gem 'aasm', '~> 5.3.0'
gem 'acts_as_list' gem 'acts_as_list'
gem 'bcrypt', '~> 3.1.16' gem 'bcrypt', '~> 3.1.18'
gem 'htmlentities' gem 'htmlentities'
gem 'paperclip' gem "kt-paperclip", "~> 7.1"
gem 'puma', '~> 5.5' gem 'puma', '~> 5.6'
gem 'rails_autolink' gem 'rails_autolink'
gem 'RedCloth' gem 'RedCloth'
gem 'sanitize', '~> 6.0' gem 'sanitize', '~> 6.0'
@ -36,35 +36,35 @@ end
# Use --without <group> argument to skip unnecessary drivers # Use --without <group> argument to skip unnecessary drivers
gem 'sqlite3', group: :sqlite gem 'sqlite3', group: :sqlite
gem 'mysql2', '~> 0.5.3', group: :mysql gem 'mysql2', '~> 0.5.4', group: :mysql
gem 'pg', '~> 1.2.3', group: :postgresql gem 'pg', '~> 1.4.3', group: :postgresql
group :development do group :development do
gem 'spring' gem 'spring', '~> 4'
gem 'yard' gem 'yard'
gem 'tolk', '~> 4.1.0' gem 'tolk', '~> 4.3.0'
gem 'bullet' gem 'bullet'
gem 'rack-mini-profiler' gem 'rack-mini-profiler'
gem 'solargraph' gem 'solargraph'
gem 'i18n-tasks', '~> 0.9.35' gem 'i18n-tasks', '~> 1.0.11'
end end
group :development, :test do group :development, :test do
gem 'byebug' gem 'byebug'
gem 'listen' gem 'listen'
gem 'rubocop', '~> 1.22', require: false gem 'rubocop', '~> 1.34', require: false
end end
group :test do group :test do
# Get test coverage info on codeclimate # get test coverage info on codeclimate
gem 'codeclimate-test-reporter', '1.0.7', require: nil gem 'codeclimate-test-reporter', '1.0.7', group: :test, require: nil
gem 'database_cleaner' gem 'database_cleaner', '~> 1'
gem 'factory_bot_rails' gem 'factory_bot_rails'
gem 'mocha', :require => false
gem 'minitest-stub-const' gem 'minitest-stub-const'
gem 'mocha', :require => false
gem 'rails-controller-testing' gem 'rails-controller-testing'
gem 'rails-dom-testing', '~> 2.0.0' gem 'rails-dom-testing', '~> 2.0.0'
gem 'rspec-expectations' gem 'rspec-expectations'

View file

@ -2,28 +2,28 @@ GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
RedCloth (4.3.2) RedCloth (4.3.2)
aasm (5.2.0) aasm (5.3.0)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
actioncable (6.0.4.1) actioncable (6.0.5.1)
actionpack (= 6.0.4.1) actionpack (= 6.0.5.1)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (>= 0.6.1) websocket-driver (>= 0.6.1)
actionmailbox (6.0.4.1) actionmailbox (6.0.5.1)
actionpack (= 6.0.4.1) actionpack (= 6.0.5.1)
activejob (= 6.0.4.1) activejob (= 6.0.5.1)
activerecord (= 6.0.4.1) activerecord (= 6.0.5.1)
activestorage (= 6.0.4.1) activestorage (= 6.0.5.1)
activesupport (= 6.0.4.1) activesupport (= 6.0.5.1)
mail (>= 2.7.1) mail (>= 2.7.1)
actionmailer (6.0.4.1) actionmailer (6.0.5.1)
actionpack (= 6.0.4.1) actionpack (= 6.0.5.1)
actionview (= 6.0.4.1) actionview (= 6.0.5.1)
activejob (= 6.0.4.1) activejob (= 6.0.5.1)
mail (~> 2.5, >= 2.5.4) mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
actionpack (6.0.4.1) actionpack (6.0.5.1)
actionview (= 6.0.4.1) actionview (= 6.0.5.1)
activesupport (= 6.0.4.1) activesupport (= 6.0.5.1)
rack (~> 2.0, >= 2.0.8) rack (~> 2.0, >= 2.0.8)
rack-test (>= 0.6.3) rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
@ -31,36 +31,36 @@ GEM
actionpack-xml_parser (2.0.1) actionpack-xml_parser (2.0.1)
actionpack (>= 5.0) actionpack (>= 5.0)
railties (>= 5.0) railties (>= 5.0)
actiontext (6.0.4.1) actiontext (6.0.5.1)
actionpack (= 6.0.4.1) actionpack (= 6.0.5.1)
activerecord (= 6.0.4.1) activerecord (= 6.0.5.1)
activestorage (= 6.0.4.1) activestorage (= 6.0.5.1)
activesupport (= 6.0.4.1) activesupport (= 6.0.5.1)
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
actionview (6.0.4.1) actionview (6.0.5.1)
activesupport (= 6.0.4.1) activesupport (= 6.0.5.1)
builder (~> 3.1) builder (~> 3.1)
erubi (~> 1.4) erubi (~> 1.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0)
activejob (6.0.4.1) activejob (6.0.5.1)
activesupport (= 6.0.4.1) activesupport (= 6.0.5.1)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (6.0.4.1) activemodel (6.0.5.1)
activesupport (= 6.0.4.1) activesupport (= 6.0.5.1)
activemodel-serializers-xml (1.0.2) activemodel-serializers-xml (1.0.2)
activemodel (> 5.x) activemodel (> 5.x)
activesupport (> 5.x) activesupport (> 5.x)
builder (~> 3.1) builder (~> 3.1)
activerecord (6.0.4.1) activerecord (6.0.5.1)
activemodel (= 6.0.4.1) activemodel (= 6.0.5.1)
activesupport (= 6.0.4.1) activesupport (= 6.0.5.1)
activestorage (6.0.4.1) activestorage (6.0.5.1)
actionpack (= 6.0.4.1) actionpack (= 6.0.5.1)
activejob (= 6.0.4.1) activejob (= 6.0.5.1)
activerecord (= 6.0.4.1) activerecord (= 6.0.5.1)
marcel (~> 1.0.0) marcel (~> 1.0)
activesupport (6.0.4.1) activesupport (6.0.5.1)
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
minitest (~> 5.1) minitest (~> 5.1)
@ -69,16 +69,24 @@ GEM
acts_as_list (1.0.4) acts_as_list (1.0.4)
activerecord (>= 4.2) activerecord (>= 4.2)
ast (2.4.2) ast (2.4.2)
autoprefixer-rails (10.1.0.0) autoprefixer-rails (10.4.7.0)
execjs execjs (~> 2)
backport (1.2.0) backport (1.2.0)
bcrypt (3.1.16) bcrypt (3.1.18)
benchmark (0.1.1) benchmark (0.2.0)
better_html (1.0.16)
actionview (>= 4.0)
activesupport (>= 4.0)
ast (~> 2.0)
erubi (~> 1.4)
html_tokenizer (~> 0.0.6)
parser (>= 2.4)
smart_properties
bootstrap-sass (3.4.1) bootstrap-sass (3.4.1)
autoprefixer-rails (>= 5.2.1) autoprefixer-rails (>= 5.2.1)
sassc (>= 2.0.0) sassc (>= 2.0.0)
builder (3.2.4) builder (3.2.4)
bullet (6.1.5) bullet (7.0.3)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
uniform_notifier (~> 1.11) uniform_notifier (~> 1.11)
byebug (11.1.3) byebug (11.1.3)
@ -92,31 +100,33 @@ GEM
coffee-script-source coffee-script-source
execjs execjs
coffee-script-source (1.12.2) coffee-script-source (1.12.2)
concurrent-ruby (1.1.9) concurrent-ruby (1.1.10)
crass (1.0.6) crass (1.0.6)
database_cleaner (1.8.5) database_cleaner (1.99.0)
diff-lcs (1.4.4) diff-lcs (1.5.0)
docile (1.3.4) docile (1.4.0)
e2mmap (0.1.0) e2mmap (0.1.0)
erubi (1.10.0) erubi (1.11.0)
execjs (2.7.0) execjs (2.8.1)
factory_bot (6.2.0) factory_bot (6.2.1)
activesupport (>= 5.0.0) activesupport (>= 5.0.0)
factory_bot_rails (6.2.0) factory_bot_rails (6.2.0)
factory_bot (~> 6.2.0) factory_bot (~> 6.2.0)
railties (>= 5.0.0) railties (>= 5.0.0)
ffi (1.15.3) ffi (1.15.5)
font-awesome-sass (5.15.1) font-awesome-sass (6.1.2)
sassc (>= 1.11) sassc (~> 2.0)
globalid (0.5.2) globalid (1.0.0)
activesupport (>= 5.0) activesupport (>= 5.0)
highline (2.0.3) highline (2.0.3)
html_tokenizer (0.0.7)
htmlentities (4.3.4) htmlentities (4.3.4)
i18n (1.8.11) i18n (1.12.0)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
i18n-tasks (0.9.35) i18n-tasks (1.0.11)
activesupport (>= 4.0.2) activesupport (>= 4.0.2)
ast (>= 2.1.0) ast (>= 2.1.0)
better_html (~> 1.0)
erubi erubi
highline (>= 2.0.0) highline (>= 2.0.0)
i18n i18n
@ -125,75 +135,73 @@ GEM
rainbow (>= 2.2.2, < 4.0) rainbow (>= 2.2.2, < 4.0)
terminal-table (>= 1.5.1) terminal-table (>= 1.5.1)
jaro_winkler (1.5.4) jaro_winkler (1.5.4)
jquery-rails (4.4.0) jquery-rails (4.5.0)
rails-dom-testing (>= 1, < 3) rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0) railties (>= 4.2.0)
thor (>= 0.14, < 2.0) thor (>= 0.14, < 2.0)
jquery-ui-rails (6.0.1) jquery-ui-rails (6.0.1)
railties (>= 3.2.16) railties (>= 3.2.16)
kramdown (2.3.1) json (2.6.2)
kramdown (2.4.0)
rexml rexml
kramdown-parser-gfm (1.1.0) kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0) kramdown (~> 2.0)
kt-paperclip (7.1.1)
activemodel (>= 4.2.0)
activesupport (>= 4.2.0)
marcel (~> 1.0.1)
mime-types
terrapin (~> 0.6.0)
libv8 (3.16.14.19) libv8 (3.16.14.19)
listen (3.7.0) listen (3.7.1)
rb-fsevent (~> 0.10, >= 0.10.3) rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10) rb-inotify (~> 0.9, >= 0.9.10)
loofah (2.12.0) loofah (2.18.0)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.5.9) nokogiri (>= 1.5.9)
mail (2.7.1) mail (2.7.1)
mini_mime (>= 0.1.1) mini_mime (>= 0.1.1)
marcel (1.0.2) marcel (1.0.2)
method_source (1.0.0) method_source (1.0.0)
mime-types (3.3.1) mime-types (3.4.1)
mime-types-data (~> 3.2015) mime-types-data (~> 3.2015)
mime-types-data (3.2020.1104) mime-types-data (3.2022.0105)
mimemagic (0.3.10)
nokogiri (~> 1)
rake
mini_mime (1.1.2) mini_mime (1.1.2)
mini_portile2 (2.6.1) mini_portile2 (2.8.0)
minitest (5.14.4) minitest (5.16.2)
minitest-stub-const (0.6) minitest-stub-const (0.6)
mocha (1.13.0) mocha (1.14.0)
mysql2 (0.5.3) mysql2 (0.5.4)
nio4r (2.5.8) nio4r (2.5.8)
nokogiri (1.12.5) nokogiri (1.13.8)
mini_portile2 (~> 2.6.1) mini_portile2 (~> 2.8.0)
racc (~> 1.4) racc (~> 1.4)
paperclip (6.1.0) parallel (1.22.1)
activemodel (>= 4.2.0) parser (3.1.2.1)
activesupport (>= 4.2.0)
mime-types
mimemagic (~> 0.3.0)
terrapin (~> 0.6.0)
parallel (1.21.0)
parser (3.0.2.0)
ast (~> 2.4.1) ast (~> 2.4.1)
pg (1.2.3) pg (1.4.3)
puma (5.5.2) puma (5.6.4)
nio4r (~> 2.0) nio4r (~> 2.0)
racc (1.6.0) racc (1.6.0)
rack (2.2.3) rack (2.2.4)
rack-mini-profiler (2.3.3) rack-mini-profiler (3.0.0)
rack (>= 1.2.0) rack (>= 1.2.0)
rack-test (1.1.0) rack-test (2.0.2)
rack (>= 1.0, < 3) rack (>= 1.3)
rails (6.0.4.1) rails (6.0.5.1)
actioncable (= 6.0.4.1) actioncable (= 6.0.5.1)
actionmailbox (= 6.0.4.1) actionmailbox (= 6.0.5.1)
actionmailer (= 6.0.4.1) actionmailer (= 6.0.5.1)
actionpack (= 6.0.4.1) actionpack (= 6.0.5.1)
actiontext (= 6.0.4.1) actiontext (= 6.0.5.1)
actionview (= 6.0.4.1) actionview (= 6.0.5.1)
activejob (= 6.0.4.1) activejob (= 6.0.5.1)
activemodel (= 6.0.4.1) activemodel (= 6.0.5.1)
activerecord (= 6.0.4.1) activerecord (= 6.0.5.1)
activestorage (= 6.0.4.1) activestorage (= 6.0.5.1)
activesupport (= 6.0.4.1) activesupport (= 6.0.5.1)
bundler (>= 1.3.0) bundler (>= 1.3.0)
railties (= 6.0.4.1) railties (= 6.0.5.1)
sprockets-rails (>= 2.0.0) sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.5) rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1) actionpack (>= 5.0.1.rc1)
@ -202,44 +210,45 @@ GEM
rails-dom-testing (2.0.3) rails-dom-testing (2.0.3)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
nokogiri (>= 1.6) nokogiri (>= 1.6)
rails-html-sanitizer (1.4.2) rails-html-sanitizer (1.4.3)
loofah (~> 2.3) loofah (~> 2.3)
rails-i18n (6.0.0) rails-i18n (7.0.5)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 7) railties (>= 6.0.0, < 8)
rails_autolink (1.1.6) rails_autolink (1.1.6)
rails (> 3.1) rails (> 3.1)
railties (6.0.4.1) railties (6.0.5.1)
actionpack (= 6.0.4.1) actionpack (= 6.0.5.1)
activesupport (= 6.0.4.1) activesupport (= 6.0.5.1)
method_source method_source
rake (>= 0.8.7) rake (>= 0.8.7)
thor (>= 0.20.3, < 2.0) thor (>= 0.20.3, < 2.0)
rainbow (3.0.0) rainbow (3.1.1)
rake (13.0.6) rake (13.0.6)
rb-fsevent (0.11.0) rb-fsevent (0.11.1)
rb-inotify (0.10.1) rb-inotify (0.10.1)
ffi (~> 1.0) ffi (~> 1.0)
ref (2.0.0) ref (2.0.0)
regexp_parser (2.1.1) regexp_parser (2.5.0)
reverse_markdown (2.0.0) reverse_markdown (2.1.1)
nokogiri nokogiri
rexml (3.2.5) rexml (3.2.5)
rspec-expectations (3.10.1) rspec-expectations (3.11.0)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.10.0) rspec-support (~> 3.11.0)
rspec-support (3.10.1) rspec-support (3.11.0)
rubocop (1.22.3) rubocop (1.35.0)
json (~> 2.3)
parallel (~> 1.10) parallel (~> 1.10)
parser (>= 3.0.0.0) parser (>= 3.1.2.1)
rainbow (>= 2.2.2, < 4.0) rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0) regexp_parser (>= 1.8, < 3.0)
rexml rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.12.0, < 2.0) rubocop-ast (>= 1.20.1, < 2.0)
ruby-progressbar (~> 1.7) ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 3.0) unicode-display_width (>= 1.4.0, < 3.0)
rubocop-ast (1.12.0) rubocop-ast (1.21.0)
parser (>= 3.0.1.1) parser (>= 3.1.1.0)
ruby-progressbar (1.11.0) ruby-progressbar (1.11.0)
safe_yaml (1.0.5) safe_yaml (1.0.5)
sanitize (6.0.0) sanitize (6.0.0)
@ -258,8 +267,9 @@ GEM
simplecov-html (~> 0.11) simplecov-html (~> 0.11)
simplecov_json_formatter (~> 0.1) simplecov_json_formatter (~> 0.1)
simplecov-html (0.12.3) simplecov-html (0.12.3)
simplecov_json_formatter (0.1.2) simplecov_json_formatter (0.1.4)
solargraph (0.44.0) smart_properties (1.17.0)
solargraph (0.45.0)
backport (~> 1.2) backport (~> 1.2)
benchmark benchmark
bundler (>= 1.17.2) bundler (>= 1.17.2)
@ -274,15 +284,15 @@ GEM
thor (~> 1.0) thor (~> 1.0)
tilt (~> 2.0) tilt (~> 2.0)
yard (~> 0.9, >= 0.9.24) yard (~> 0.9, >= 0.9.24)
spring (3.0.0) spring (4.0.0)
sprockets (4.0.2) sprockets (4.1.1)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
rack (> 1, < 3) rack (> 1, < 3)
sprockets-rails (3.3.0) sprockets-rails (3.4.2)
actionpack (>= 5.2) actionpack (>= 5.2)
activesupport (>= 5.2) activesupport (>= 5.2)
sprockets (>= 3.0.0) sprockets (>= 3.0.0)
sqlite3 (1.4.2) sqlite3 (1.4.4)
terminal-table (3.0.2) terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3) unicode-display_width (>= 1.1.1, < 3)
terrapin (0.6.0) terrapin (0.6.0)
@ -290,77 +300,80 @@ GEM
therubyracer (0.12.3) therubyracer (0.12.3)
libv8 (~> 3.16.14.15) libv8 (~> 3.16.14.15)
ref ref
thor (1.1.0) thor (1.2.1)
thread_safe (0.3.6) thread_safe (0.3.6)
tilt (2.0.10) tilt (2.0.11)
tolk (4.1.0) tolk (4.3.0)
rails (>= 5.0) rails (>= 5.0)
safe_yaml (>= 0.8.6) safe_yaml (>= 0.8.6)
sassc sassc
sprockets-rails (~> 3.4)
tracks-chartjs-ror (3.6.4) tracks-chartjs-ror (3.6.4)
rails (>= 3.1) rails (>= 3.1)
tzinfo (1.2.9) tzinfo (1.2.10)
thread_safe (~> 0.1) thread_safe (~> 0.1)
uglifier (4.2.0) uglifier (4.2.0)
execjs (>= 0.3.0, < 3) execjs (>= 0.3.0, < 3)
unicode-display_width (2.1.0) unicode-display_width (2.2.0)
uniform_notifier (1.14.2) uniform_notifier (1.16.0)
webrick (1.7.0)
websocket-driver (0.7.5) websocket-driver (0.7.5)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5) websocket-extensions (0.1.5)
will_paginate (3.3.1) will_paginate (3.3.1)
yard (0.9.26) yard (0.9.28)
zeitwerk (2.5.1) webrick (~> 1.7.0)
zeitwerk (2.6.0)
PLATFORMS PLATFORMS
ruby ruby
DEPENDENCIES DEPENDENCIES
RedCloth RedCloth
aasm (~> 5.2.0) aasm (~> 5.3.0)
actionpack-xml_parser (~> 2.0) actionpack-xml_parser (~> 2.0)
activemodel-serializers-xml (~> 1.0.1) activemodel-serializers-xml (~> 1.0.1)
acts_as_list acts_as_list
bcrypt (~> 3.1.16) bcrypt (~> 3.1.18)
bootstrap-sass (= 3.4.1) bootstrap-sass (= 3.4.1)
bullet bullet
byebug byebug
codeclimate-test-reporter (= 1.0.7) codeclimate-test-reporter (= 1.0.7)
coffee-rails (~> 5.0.0) coffee-rails (~> 5.0.0)
database_cleaner database_cleaner (~> 1)
factory_bot_rails factory_bot_rails
font-awesome-sass (~> 5.15.1) font-awesome-sass (~> 6.1.2)
htmlentities htmlentities
i18n-tasks (~> 0.9.35) i18n-tasks (~> 1.0.11)
jquery-rails (~> 4.4) jquery-rails (~> 4.5)
jquery-ui-rails (~> 6.0.1) jquery-ui-rails (~> 6.0.1)
kt-paperclip (~> 7.1)
listen listen
mini_racer mini_racer
minitest-stub-const minitest-stub-const
mocha mocha
mysql2 (~> 0.5.3) mysql2 (~> 0.5.4)
paperclip pg (~> 1.4.3)
pg (~> 1.2.3) puma (~> 5.6)
puma (~> 5.5)
rack-mini-profiler rack-mini-profiler
rails (~> 6.0.3) rails (~> 6.0.0)
rails-controller-testing rails-controller-testing
rails-dom-testing (~> 2.0.0) rails-dom-testing (~> 2.0.0)
rails_autolink rails_autolink
rspec-expectations rspec-expectations
rubocop (~> 1.22) rubocop (~> 1.34)
sanitize (~> 6.0) sanitize (~> 6.0)
sassc-rails (~> 2.1.2) sassc-rails (~> 2.1.2)
simplecov simplecov
solargraph solargraph
spring spring (~> 4)
sqlite3 sqlite3
therubyracer therubyracer
tolk (~> 4.1.0) tolk (~> 4.3.0)
tracks-chartjs-ror tracks-chartjs-ror
uglifier (>= 1.3.0) uglifier (>= 1.3.0)
will_paginate will_paginate
yard yard
BUNDLED WITH BUNDLED WITH
2.2.22 2.2.33

View file

@ -7,5 +7,8 @@
//= link datepicker-fi.js //= link datepicker-fi.js
//= link datepicker-fr.js //= link datepicker-fr.js
//= link datepicker-he.js //= link datepicker-he.js
//= link datepicker-nb_NO.js
//= link datepicker-nl.js //= link datepicker-nl.js
//= link datepicker-ru.js //= link datepicker-ru.js
//= link datepicker-sv.js
//= link datepicker-tr.js

View file

@ -1,6 +1,8 @@
/* Czech initialisation for the jQuery UI date picker plugin. */ /* Czech initialisation for the jQuery UI date picker plugin. */
/* Written by Tomas Muller (tomas@tomas-muller.net). */ /* Written by Tomas Muller (tomas@tomas-muller.net). */
( function( factory ) { ( function( factory ) {
"use strict";
if ( typeof define === "function" && define.amd ) { if ( typeof define === "function" && define.amd ) {
// AMD. Register as an anonymous module. // AMD. Register as an anonymous module.
@ -10,20 +12,21 @@
// Browser globals // Browser globals
factory( jQuery.datepicker ); factory( jQuery.datepicker );
} }
}( function( datepicker ) { } )( function( datepicker ) {
"use strict";
datepicker.regional.cs = { datepicker.regional.cs = {
closeText: "Zavřít", closeText: "Zavřít",
prevText: "&#x3C;Dříve", prevText: "Dříve",
nextText: "Později&#x3E;", nextText: "Později",
currentText: "Nyní", currentText: "Nyní",
monthNames: [ "leden","únor","březen","duben","květen","červen", monthNames: [ "leden", "únor", "březen", "duben", "květen", "červen",
"červenec","srpen","září","říjen","listopad","prosinec" ], "červenec", "srpen", "září", "říjen", "listopad", "prosinec" ],
monthNamesShort: [ "led","úno","bře","dub","kvě","čer", monthNamesShort: [ "led", "úno", "bře", "dub", "kvě", "čer",
"čvc","srp","zář","říj","lis","pro" ], "čvc", "srp", "zář", "říj", "lis", "pro" ],
dayNames: [ "neděle", "pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota" ], dayNames: [ "neděle", "pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota" ],
dayNamesShort: [ "ne", "po", "út", "st", "čt", "pá", "so" ], dayNamesShort: [ "ne", "po", "út", "st", "čt", "pá", "so" ],
dayNamesMin: [ "ne","po","út","st","čt","pá","so" ], dayNamesMin: [ "ne", "po", "út", "st", "čt", "pá", "so" ],
weekHeader: "Týd", weekHeader: "Týd",
dateFormat: "dd.mm.yy", dateFormat: "dd.mm.yy",
firstDay: 1, firstDay: 1,
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.cs );
return datepicker.regional.cs; return datepicker.regional.cs;
} ) ); } );

View file

@ -1,6 +1,8 @@
/* German initialisation for the jQuery UI date picker plugin. */ /* German initialisation for the jQuery UI date picker plugin. */
/* Written by Milian Wolff (mail@milianw.de). */ /* Written by Milian Wolff (mail@milianw.de). */
( function( factory ) { ( function( factory ) {
"use strict";
if ( typeof define === "function" && define.amd ) { if ( typeof define === "function" && define.amd ) {
// AMD. Register as an anonymous module. // AMD. Register as an anonymous module.
@ -10,20 +12,21 @@
// Browser globals // Browser globals
factory( jQuery.datepicker ); factory( jQuery.datepicker );
} }
}( function( datepicker ) { } )( function( datepicker ) {
"use strict";
datepicker.regional.de = { datepicker.regional.de = {
closeText: "Schließen", closeText: "Schließen",
prevText: "&#x3C;Zurück", prevText: "Zurück",
nextText: "Vor&#x3E;", nextText: "Vor",
currentText: "Heute", currentText: "Heute",
monthNames: [ "Januar","Februar","März","April","Mai","Juni", monthNames: [ "Januar", "Februar", "März", "April", "Mai", "Juni",
"Juli","August","September","Oktober","November","Dezember" ], "Juli", "August", "September", "Oktober", "November", "Dezember" ],
monthNamesShort: [ "Jan","Feb","Mär","Apr","Mai","Jun", monthNamesShort: [ "Jan", "Feb", "Mär", "Apr", "Mai", "Jun",
"Jul","Aug","Sep","Okt","Nov","Dez" ], "Jul", "Aug", "Sep", "Okt", "Nov", "Dez" ],
dayNames: [ "Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag" ], dayNames: [ "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" ],
dayNamesShort: [ "So","Mo","Di","Mi","Do","Fr","Sa" ], dayNamesShort: [ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" ],
dayNamesMin: [ "So","Mo","Di","Mi","Do","Fr","Sa" ], dayNamesMin: [ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" ],
weekHeader: "KW", weekHeader: "KW",
dateFormat: "dd.mm.yy", dateFormat: "dd.mm.yy",
firstDay: 1, firstDay: 1,
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.de );
return datepicker.regional.de; return datepicker.regional.de;
} ) ); } );

View file

@ -1,6 +1,8 @@
/* Inicialización en español para la extensión 'UI date picker' para jQuery. */ /* Inicialización en español para la extensión 'UI date picker' para jQuery. */
/* Traducido por Vester (xvester@gmail.com). */ /* Traducido por Vester (xvester@gmail.com). */
( function( factory ) { ( function( factory ) {
"use strict";
if ( typeof define === "function" && define.amd ) { if ( typeof define === "function" && define.amd ) {
// AMD. Register as an anonymous module. // AMD. Register as an anonymous module.
@ -10,20 +12,21 @@
// Browser globals // Browser globals
factory( jQuery.datepicker ); factory( jQuery.datepicker );
} }
}( function( datepicker ) { } )( function( datepicker ) {
"use strict";
datepicker.regional.es = { datepicker.regional.es = {
closeText: "Cerrar", closeText: "Cerrar",
prevText: "&#x3C;Ant", prevText: "Ant",
nextText: "Sig&#x3E;", nextText: "Sig",
currentText: "Hoy", currentText: "Hoy",
monthNames: [ "enero","febrero","marzo","abril","mayo","junio", monthNames: [ "enero", "febrero", "marzo", "abril", "mayo", "junio",
"julio","agosto","septiembre","octubre","noviembre","diciembre" ], "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre" ],
monthNamesShort: [ "ene","feb","mar","abr","may","jun", monthNamesShort: [ "ene", "feb", "mar", "abr", "may", "jun",
"jul","ago","sep","oct","nov","dic" ], "jul", "ago", "sep", "oct", "nov", "dic" ],
dayNames: [ "domingo","lunes","martes","miércoles","jueves","viernes","sábado" ], dayNames: [ "domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado" ],
dayNamesShort: [ "dom","lun","mar","mié","jue","vie","sáb" ], dayNamesShort: [ "dom", "lun", "mar", "mié", "jue", "vie", "sáb" ],
dayNamesMin: [ "D","L","M","X","J","V","S" ], dayNamesMin: [ "D", "L", "M", "X", "J", "V", "S" ],
weekHeader: "Sm", weekHeader: "Sm",
dateFormat: "dd/mm/yy", dateFormat: "dd/mm/yy",
firstDay: 1, firstDay: 1,
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.es );
return datepicker.regional.es; return datepicker.regional.es;
} ) ); } );

View file

@ -1,6 +1,8 @@
/* Finnish initialisation for the jQuery UI date picker plugin. */ /* Finnish initialisation for the jQuery UI date picker plugin. */
/* Written by Harri Kilpiö (harrikilpio@gmail.com). */ /* Written by Harri Kilpiö (harrikilpio@gmail.com). */
( function( factory ) { ( function( factory ) {
"use strict";
if ( typeof define === "function" && define.amd ) { if ( typeof define === "function" && define.amd ) {
// AMD. Register as an anonymous module. // AMD. Register as an anonymous module.
@ -10,20 +12,21 @@
// Browser globals // Browser globals
factory( jQuery.datepicker ); factory( jQuery.datepicker );
} }
}( function( datepicker ) { } )( function( datepicker ) {
"use strict";
datepicker.regional.fi = { datepicker.regional.fi = {
closeText: "Sulje", closeText: "Sulje",
prevText: "&#xAB;Edellinen", prevText: "Edellinen",
nextText: "Seuraava&#xBB;", nextText: "Seuraava",
currentText: "Tänään", currentText: "Tänään",
monthNames: [ "Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu", monthNames: [ "Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu",
"Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu" ], "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu" ],
monthNamesShort: [ "Tammi","Helmi","Maalis","Huhti","Touko","Kesä", monthNamesShort: [ "Tammi", "Helmi", "Maalis", "Huhti", "Touko", "Kesä",
"Heinä","Elo","Syys","Loka","Marras","Joulu" ], "Heinä", "Elo", "Syys", "Loka", "Marras", "Joulu" ],
dayNamesShort: [ "Su","Ma","Ti","Ke","To","Pe","La" ], dayNamesShort: [ "Su", "Ma", "Ti", "Ke", "To", "Pe", "La" ],
dayNames: [ "Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai" ], dayNames: [ "Sunnuntai", "Maanantai", "Tiistai", "Keskiviikko", "Torstai", "Perjantai", "Lauantai" ],
dayNamesMin: [ "Su","Ma","Ti","Ke","To","Pe","La" ], dayNamesMin: [ "Su", "Ma", "Ti", "Ke", "To", "Pe", "La" ],
weekHeader: "Vk", weekHeader: "Vk",
dateFormat: "d.m.yy", dateFormat: "d.m.yy",
firstDay: 1, firstDay: 1,
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.fi );
return datepicker.regional.fi; return datepicker.regional.fi;
} ) ); } );

View file

@ -3,6 +3,8 @@
Stéphane Nahmani (sholby@sholby.net), Stéphane Nahmani (sholby@sholby.net),
Stéphane Raimbault <stephane.raimbault@gmail.com> */ Stéphane Raimbault <stephane.raimbault@gmail.com> */
( function( factory ) { ( function( factory ) {
"use strict";
if ( typeof define === "function" && define.amd ) { if ( typeof define === "function" && define.amd ) {
// AMD. Register as an anonymous module. // AMD. Register as an anonymous module.
@ -12,7 +14,8 @@
// Browser globals // Browser globals
factory( jQuery.datepicker ); factory( jQuery.datepicker );
} }
}( function( datepicker ) { } )( function( datepicker ) {
"use strict";
datepicker.regional.fr = { datepicker.regional.fr = {
closeText: "Fermer", closeText: "Fermer",
@ -25,7 +28,7 @@ datepicker.regional.fr = {
"juil.", "août", "sept.", "oct.", "nov.", "déc." ], "juil.", "août", "sept.", "oct.", "nov.", "déc." ],
dayNames: [ "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" ], dayNames: [ "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" ],
dayNamesShort: [ "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." ], dayNamesShort: [ "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." ],
dayNamesMin: [ "D","L","M","M","J","V","S" ], dayNamesMin: [ "D", "L", "M", "M", "J", "V", "S" ],
weekHeader: "Sem.", weekHeader: "Sem.",
dateFormat: "dd/mm/yy", dateFormat: "dd/mm/yy",
firstDay: 1, firstDay: 1,
@ -36,4 +39,4 @@ datepicker.setDefaults( datepicker.regional.fr );
return datepicker.regional.fr; return datepicker.regional.fr;
} ) ); } );

View file

@ -1,6 +1,8 @@
/* Hebrew initialisation for the UI Datepicker extension. */ /* Hebrew initialisation for the UI Datepicker extension. */
/* Written by Amir Hardon (ahardon at gmail dot com). */ /* Written by Amir Hardon (ahardon at gmail dot com). */
( function( factory ) { ( function( factory ) {
"use strict";
if ( typeof define === "function" && define.amd ) { if ( typeof define === "function" && define.amd ) {
// AMD. Register as an anonymous module. // AMD. Register as an anonymous module.
@ -10,20 +12,21 @@
// Browser globals // Browser globals
factory( jQuery.datepicker ); factory( jQuery.datepicker );
} }
}( function( datepicker ) { } )( function( datepicker ) {
"use strict";
datepicker.regional.he = { datepicker.regional.he = {
closeText: "סגור", closeText: "סגור",
prevText: "&#x3C;הקודם", prevText: "הקודם",
nextText: "הבא&#x3E;", nextText: "הבא",
currentText: "היום", currentText: "היום",
monthNames: [ "ינואר","פברואר","מרץ","אפריל","מאי","יוני", monthNames: [ "ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני",
"יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר" ], "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר" ],
monthNamesShort: [ "ינו","פבר","מרץ","אפר","מאי","יוני", monthNamesShort: [ "ינו", "פבר", "מרץ", "אפר", "מאי", "יוני",
"יולי","אוג","ספט","אוק","נוב","דצמ" ], "יולי", "אוג", "ספט", "אוק", "נוב", "דצמ" ],
dayNames: [ "ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת" ], dayNames: [ "ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת" ],
dayNamesShort: [ "א'","ב'","ג'","ד'","ה'","ו'","שבת" ], dayNamesShort: [ "א'", "ב'", "ג'", "ד'", "ה'", "ו'", "שבת" ],
dayNamesMin: [ "א'","ב'","ג'","ד'","ה'","ו'","שבת" ], dayNamesMin: [ "א'", "ב'", "ג'", "ד'", "ה'", "ו'", "שבת" ],
weekHeader: "Wk", weekHeader: "Wk",
dateFormat: "dd/mm/yy", dateFormat: "dd/mm/yy",
firstDay: 0, firstDay: 0,
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.he );
return datepicker.regional.he; return datepicker.regional.he;
} ) ); } );

View file

@ -0,0 +1,52 @@
/* Norwegian Bokmål initialisation for the jQuery UI date picker plugin. */
/* Written by Bjørn Johansen (post@bjornjohansen.no). */
( function( factory ) {
"use strict";
if ( typeof define === "function" && define.amd ) {
// AMD. Register as an anonymous module.
define( [ "../widgets/datepicker" ], factory );
} else {
// Browser globals
factory( jQuery.datepicker );
}
} )( function( datepicker ) {
"use strict";
datepicker.regional.nb = {
closeText: "Lukk",
prevText: "Forrige",
nextText: "Neste",
currentText: "I dag",
monthNames: [
"januar",
"februar",
"mars",
"april",
"mai",
"juni",
"juli",
"august",
"september",
"oktober",
"november",
"desember"
],
monthNamesShort: [ "jan", "feb", "mar", "apr", "mai", "jun", "jul", "aug", "sep", "okt", "nov", "des" ],
dayNamesShort: [ "søn", "man", "tir", "ons", "tor", "fre", "lør" ],
dayNames: [ "søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag" ],
dayNamesMin: [ "sø", "ma", "ti", "on", "to", "fr", "lø" ],
weekHeader: "Uke",
dateFormat: "dd.mm.yy",
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ""
};
datepicker.setDefaults( datepicker.regional.nb );
return datepicker.regional.nb;
} );

View file

@ -1,6 +1,8 @@
/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Mathias Bynens <http://mathiasbynens.be/> */ /* Written by Mathias Bynens <http://mathiasbynens.be/> */
( function( factory ) { ( function( factory ) {
"use strict";
if ( typeof define === "function" && define.amd ) { if ( typeof define === "function" && define.amd ) {
// AMD. Register as an anonymous module. // AMD. Register as an anonymous module.
@ -10,12 +12,13 @@
// Browser globals // Browser globals
factory( jQuery.datepicker ); factory( jQuery.datepicker );
} }
}( function( datepicker ) { } )( function( datepicker ) {
"use strict";
datepicker.regional.nl = { datepicker.regional.nl = {
closeText: "Sluiten", closeText: "Sluiten",
prevText: "", prevText: "Vorig",
nextText: "", nextText: "Volgende",
currentText: "Vandaag", currentText: "Vandaag",
monthNames: [ "januari", "februari", "maart", "april", "mei", "juni", monthNames: [ "januari", "februari", "maart", "april", "mei", "juni",
"juli", "augustus", "september", "oktober", "november", "december" ], "juli", "augustus", "september", "oktober", "november", "december" ],
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.nl );
return datepicker.regional.nl; return datepicker.regional.nl;
} ) ); } );

View file

@ -1,6 +1,8 @@
/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Andrew Stromnov (stromnov@gmail.com). */ /* Written by Andrew Stromnov (stromnov@gmail.com). */
( function( factory ) { ( function( factory ) {
"use strict";
if ( typeof define === "function" && define.amd ) { if ( typeof define === "function" && define.amd ) {
// AMD. Register as an anonymous module. // AMD. Register as an anonymous module.
@ -10,20 +12,21 @@
// Browser globals // Browser globals
factory( jQuery.datepicker ); factory( jQuery.datepicker );
} }
}( function( datepicker ) { } )( function( datepicker ) {
"use strict";
datepicker.regional.ru = { datepicker.regional.ru = {
closeText: "Закрыть", closeText: "Закрыть",
prevText: "&#x3C;Пред", prevText: "Пред",
nextText: "След&#x3E;", nextText: "След",
currentText: "Сегодня", currentText: "Сегодня",
monthNames: [ "Январь","Февраль","Март","Апрель","Май","Июнь", monthNames: [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
"Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь" ], "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ],
monthNamesShort: [ "Янв","Фев","Мар","Апр","Май","Июн", monthNamesShort: [ "Янв", "Фев", "Мар", "Апр", "Май", "Июн",
"Июл","Авг","Сен","Окт","Ноя","Дек" ], "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек" ],
dayNames: [ "воскресенье","понедельник","вторник","среда","четверг","пятница","суббота" ], dayNames: [ "воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота" ],
dayNamesShort: [ "вск","пнд","втр","срд","чтв","птн","сбт" ], dayNamesShort: [ "вск", "пнд", "втр", "срд", "чтв", "птн", "сбт" ],
dayNamesMin: [ "Вс","Пн","Вт","Ср","Чт","Пт","Сб" ], dayNamesMin: [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
weekHeader: "Нед", weekHeader: "Нед",
dateFormat: "dd.mm.yy", dateFormat: "dd.mm.yy",
firstDay: 1, firstDay: 1,
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.ru );
return datepicker.regional.ru; return datepicker.regional.ru;
} ) ); } );

View file

@ -0,0 +1,40 @@
/* Swedish initialisation for the jQuery UI date picker plugin. */
/* Written by Anders Ekdahl ( anders@nomadiz.se). */
( function( factory ) {
"use strict";
if ( typeof define === "function" && define.amd ) {
// AMD. Register as an anonymous module.
define( [ "../widgets/datepicker" ], factory );
} else {
// Browser globals
factory( jQuery.datepicker );
}
} )( function( datepicker ) {
"use strict";
datepicker.regional.sv = {
closeText: "Stäng",
prevText: "Förra",
nextText: "Nästa",
currentText: "Idag",
monthNames: [ "januari", "februari", "mars", "april", "maj", "juni",
"juli", "augusti", "september", "oktober", "november", "december" ],
monthNamesShort: [ "jan.", "feb.", "mars", "apr.", "maj", "juni",
"juli", "aug.", "sep.", "okt.", "nov.", "dec." ],
dayNamesShort: [ "sön", "mån", "tis", "ons", "tor", "fre", "lör" ],
dayNames: [ "söndag", "måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag" ],
dayNamesMin: [ "sö", "må", "ti", "on", "to", "fr", "lö" ],
weekHeader: "Ve",
dateFormat: "yy-mm-dd",
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.sv );
return datepicker.regional.sv;
} );

View file

@ -0,0 +1,40 @@
/* Turkish initialisation for the jQuery UI date picker plugin. */
/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
( function( factory ) {
"use strict";
if ( typeof define === "function" && define.amd ) {
// AMD. Register as an anonymous module.
define( [ "../widgets/datepicker" ], factory );
} else {
// Browser globals
factory( jQuery.datepicker );
}
} )( function( datepicker ) {
"use strict";
datepicker.regional.tr = {
closeText: "kapat",
prevText: "geri",
nextText: "ileri",
currentText: "bugün",
monthNames: [ "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran",
"Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık" ],
monthNamesShort: [ "Oca", "Şub", "Mar", "Nis", "May", "Haz",
"Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara" ],
dayNames: [ "Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi" ],
dayNamesShort: [ "Pz", "Pt", "Sa", "Ça", "Pe", "Cu", "Ct" ],
dayNamesMin: [ "Pz", "Pt", "Sa", "Ça", "Pe", "Cu", "Ct" ],
weekHeader: "Hf",
dateFormat: "dd.mm.yy",
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.tr );
return datepicker.regional.tr;
} );

View file

@ -1,2 +1 @@
@import "font-awesome-sprockets";
@import "font-awesome"; @import "font-awesome";

View file

@ -62,12 +62,16 @@ class DataController < ApplicationController
flash[:notice] = t 'data.import.projects_count', count: count flash[:notice] = t 'data.import.projects_count', count: count
when 'todos' when 'todos'
count = Todo.import path_and_file, params, current_user count = Todo.import path_and_file, params, current_user
flash[:notice] = t 'data.import.todos.count', count: count if !count
flash[:error] = t('data.import.errors.no_context')
else
flash[:notice] = t 'data.import.todos_count', count: count
end
else else
flash[:error] = t('data.import.errors.invalid_destination') flash[:error] = t('data.import.errors.invalid_destination')
end end
rescue Exception => e rescue Exception => e
flash[:error] = t 'data.import.invalid_destination', e: e flash[:error] = t 'data.import.errors.invalid_destination', e: e
end end
File.delete(path_and_file) File.delete(path_and_file)
redirect_to import_data_path redirect_to import_data_path

View file

@ -13,7 +13,7 @@ module RenderingHelper
# do not change string; URL is already linked # do not change string; URL is already linked
href href
else else
content_tag(:a, h(href), :href => URI.escape(href)) content_tag(:a, h(href), :href => href)
end end
end end
end end
@ -27,7 +27,7 @@ module RenderingHelper
config = relaxed_config config = relaxed_config
# add onenote and message protocols, allow a target # 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'] a_attributes = relaxed_config[:attributes]['a'] + ['target']
config = Sanitize::Config.merge(config, protocols: { 'a' => { 'href' => a_href_config } }, :attributes => { 'a' => a_attributes }) config = Sanitize::Config.merge(config, protocols: { 'a' => { 'href' => a_href_config } }, :attributes => { 'a' => a_attributes })

View file

@ -26,7 +26,7 @@ class MessageGateway < ActionMailer::Base
attachment = todo.attachments.build attachment = todo.attachments.build
# create temp file # create temp file
tmp = Tempfile.new(['attachment', '.eml'], { universal_newline: true }) tmp = Tempfile.new(['attachment', '.eml'], universal_newline: true)
tmp.write email.raw_source.gsub(/\r/, "") tmp.write email.raw_source.gsub(/\r/, "")
# add temp file to attachment. paperclip will copy the file to the right location # add temp file to attachment. paperclip will copy the file to the right location

View file

@ -353,6 +353,7 @@ class Todo < ApplicationRecord
def self.import(filename, params, user) def self.import(filename, params, user)
default_context = user.contexts.order('id').first default_context = user.contexts.order('id').first
return false if default_context.nil?
count = 0 count = 0
CSV.foreach(filename, headers: true) do |row| CSV.foreach(filename, headers: true) do |row|

View file

@ -73,7 +73,7 @@ mailmap:
<td>&lt;</td><td><%= I18n.t 'integrations.email_rich.field_descriptions.due_date' %></td> <td>&lt;</td><td><%= I18n.t 'integrations.email_rich.field_descriptions.due_date' %></td>
</tr> </tr>
<tr> <tr>
<td>&gt;</td><td><%= I18n.t 'integrations.email_rich.field_descriptions.due_date' %></td> <td>&gt;</td><td><%= I18n.t 'integrations.email_rich.field_descriptions.tickler_date' %></td>
</tr> </tr>
<tr> <tr>
<td>#</td><td><%= I18n.t 'integrations.email_rich.field_descriptions.tag' %></td> <td>#</td><td><%= I18n.t 'integrations.email_rich.field_descriptions.tag' %></td>

View file

@ -64,10 +64,10 @@
<li>/projects/<code><%= t('rest_help.id') %></code>/todos.xml</li> <li>/projects/<code><%= t('rest_help.id') %></code>/todos.xml</li>
</ul> </ul>
<p><%= raw t('rest_help.retrieve.limit', { <p><%= raw t('rest_help.retrieve.limit',
fields: '<code>ID, created_at, modified_at, completed_at</code>', fields: '<code>ID, created_at, modified_at, completed_at</code>',
limit_parameter: '<code>limit_fields</code>', limit_parameter: '<code>limit_fields</code>',
set_to: '<code>index</code>'}) %></p> set_to: '<code>index</code>') %></p>
<pre> <pre>
<code> <code>
@ -87,10 +87,10 @@
<h2><%= t('rest_help.writing.title') %></h2> <h2><%= t('rest_help.writing.title') %></h2>
<p><%= raw t('rest_help.writing.description', { <p><%= raw t('rest_help.writing.description',
put: '<code>PUT</code>', put: '<code>PUT</code>',
post: '<code>POST</code>', post: '<code>POST</code>',
delete: '<code>DELETE</code>'}) %></p> delete: '<code>DELETE</code>') %></p>
<p><%= t('rest_help.writing.example_title') %></p> <p><%= t('rest_help.writing.example_title') %></p>
@ -105,9 +105,9 @@ Location: <%= root_url %>projects/65.xml
</code> </code>
</pre> </pre>
<p><%= raw t('rest_help.writing.example_project_response_title', { <p><%= raw t('rest_help.writing.example_project_response_title',
response_code: '<code>HTTP/1.1 201 Created</code>', response_code: '<code>HTTP/1.1 201 Created</code>',
header: '<code>Location</code>'}) %></p> header: '<code>Location</code>') %></p>
<pre> <pre>
<code> <code>
@ -120,9 +120,9 @@ Location: <%= root_url %>todos/452.xml
</code> </code>
</pre> </pre>
<p><%= raw t('rest_help.writing.example_todo_response_title', { <p><%= raw t('rest_help.writing.example_todo_response_title',
response_code: '<code>HTTP/1.1 201 Created</code>', response_code: '<code>HTTP/1.1 201 Created</code>',
header: '<code>Location</code>'}) %></p> header: '<code>Location</code>') %></p>
<pre> <pre>
<code> <code>
@ -143,8 +143,8 @@ Location: <%= root_url %>todos/452.xml
</code> </code>
</pre> </pre>
<p><%= raw t('rest_help.writing.example_note_response_title', { <p><%= raw t('rest_help.writing.example_note_response_title',
response_code: '<code>HTTP/1.1 200 OK</code>'}) %></p> response_code: '<code>HTTP/1.1 200 OK</code>') %></p>
<pre> <pre>
<code> <code>
@ -164,8 +164,8 @@ Location: <%= root_url %>todos/452.xml
</code> </code>
</pre> </pre>
<p><%= raw t('rest_help.writing.example_delete_title', { <p><%= raw t('rest_help.writing.example_delete_title',
delete: '<code>DELETE</code>'}) %></p> delete: '<code>DELETE</code>') %></p>
<pre> <pre>
<code> <code>
@ -176,15 +176,15 @@ Location: <%= root_url %>todos/452.xml
</code> </code>
</pre> </pre>
<p><%= raw t('rest_help.writing.example_delete_response_title', { <p><%= raw t('rest_help.writing.example_delete_response_title',
response_code: '<code>HTTP/1.1 200 OK</code>'}) %></p> response_code: '<code>HTTP/1.1 200 OK</code>') %></p>
<h2><%= t('rest_help.response.title') %></h2> <h2><%= t('rest_help.response.title') %></h2>
<p><%= raw t('rest_help.response.description', { <p><%= raw t('rest_help.response.description',
response_200: '<code>200 OK</code>', response_200: '<code>200 OK</code>',
response_201: '<code>201 Created</code>', response_201: '<code>201 Created</code>',
example_call: '<code>GET /contexts/2/todos.xml</code>'}) %></p> example_call: '<code>GET /contexts/2/todos.xml</code>') %></p>
<p><%= t('rest_help.response.xml_description') %></p> <p><%= t('rest_help.response.xml_description') %></p>
@ -200,11 +200,11 @@ $ curl -u username:p4ssw0rd -H "Content-Type: text/xml" \
<h2><%= t('rest_help.activeresource.title') %></h2> <h2><%= t('rest_help.activeresource.title') %></h2>
<p><%= raw I18n.t 'rest_help.activeresource.description', { <p><%= 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'), 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'), ror_link: link_to(I18n.t('rest_help.activeresource.ror_link_text'), 'http://www.rubyonrails.org'),
gem_command: '<code>gem install activeresource --source http://gems.rubyonrails.org --include-dependencies</code>' gem_command: '<code>gem install activeresource --source http://gems.rubyonrails.org --include-dependencies</code>'
} %></p> %></p>
<pre> <pre>
<code> <code>
@ -226,8 +226,8 @@ Loading development environment (Rails 1.2.4)
</code> </code>
</pre> </pre>
<p><%= raw I18n.t 'rest_help.activeresource.wrapper_description', { <p><%= raw I18n.t 'rest_help.activeresource.wrapper_description',
signals_link: link_to(I18n.t('rest_help.activeresource.signals_link_text'), 'http://www.37signals.com')} %></p> signals_link: link_to(I18n.t('rest_help.activeresource.signals_link_text'), 'http://www.37signals.com') %></p>
<pre> <pre>
<code> <code>
@ -246,13 +246,13 @@ irb(main):003:0&gt;
<p><%= t('rest_help.notes.description') %></p> <p><%= t('rest_help.notes.description') %></p>
<ul> <ul>
<li><%= raw I18n.t 'rest_help.notes.bullet1', { <li><%= raw I18n.t 'rest_help.notes.bullet1',
id: '<code>ID</code>', id: '<code>ID</code>',
url: '<span class="caps">URL</span>'} %></li> url: '<span class="caps">URL</span>' %></li>
<li><%= raw I18n.t 'rest_help.notes.bullet2', { <li><%= raw I18n.t 'rest_help.notes.bullet2',
omit: '<code>...</code>' } %></li> omit: '<code>...</code>' %></li>
</ul> </ul>
<p><%= raw I18n.t 'rest_help.notes.curl_description', { <p><%= raw I18n.t 'rest_help.notes.curl_description',
curl: link_to(I18n.t('rest_help.curl_link_text'), 'http://en.wikipedia.org/wiki/CURL')} %></p> curl: link_to(I18n.t('rest_help.curl_link_text'), 'http://en.wikipedia.org/wiki/CURL') %></p>
</div> </div>

View file

@ -1,6 +1,7 @@
<div class="bootstrap"> <div class="bootstrap">
<div class="footer"> <div class="footer">
<%= t('footer.send_feedback', :version => TRACKS_VERSION) %> <%= t('footer.version', :version => TRACKS_VERSION, :revision_with_date => TRACKS_REVISION_WITH_DATE, :revision => TRACKS_REVISION) %>
<%= t('footer.send_feedback') %>
<span class="footer-line"> <span class="footer-line">
<a href="https://github.com/TracksApp/tracks/issues"><%= t('common.bugs')%></a> | <a href="https://github.com/TracksApp/tracks/issues"><%= t('common.bugs')%></a> |
<a href="https://github.com/TracksApp/tracks/wiki"><%= t('common.wiki')%></a> | <a href="https://github.com/TracksApp/tracks/wiki"><%= t('common.wiki')%></a> |

View file

@ -35,5 +35,7 @@ module Tracksapp
# configure Tracks to handle deployment in a subdir # configure Tracks to handle deployment in a subdir
config.relative_url_root = SITE_CONFIG['subdir'] if SITE_CONFIG['subdir'] config.relative_url_root = SITE_CONFIG['subdir'] if SITE_CONFIG['subdir']
# or deployment behind a proxy
config.action_controller.default_url_options = SITE_CONFIG['default_url_options'] if SITE_CONFIG['default_url_options']
end end
end end

View file

@ -9,6 +9,7 @@ development:
password: password:
production: production:
# Set this to 'postgresql' if using PostgreSQL.
adapter: mysql2 adapter: mysql2
database: tracks database: tracks
# set this if you are storing utf8 in your mysql database to handle strings # set this if you are storing utf8 in your mysql database to handle strings

View file

@ -7,4 +7,4 @@ safe_list =
Loofah::HTML5::WhiteList Loofah::HTML5::WhiteList
end end
safe_list::ALLOWED_PROTOCOLS.merge(%w(message onenote)) safe_list::ALLOWED_PROTOCOLS.merge(%w(message onenote obsidian))

View file

@ -1,7 +1,3 @@
tracks_version='2.5.2' TRACKS_VERSION='2.6.1'
# comment out next two lines if you do not want (or can not) the date of the TRACKS_REVISION_WITH_DATE=`git log --date=format:'%Y-%m-%d' --pretty=format:"%h @ %ad" -1`
# last git commit in the footer TRACKS_REVISION=`git log --pretty=format:"%h" -1`
info=`git log --pretty=format:"%ai" -1`
tracks_version=tracks_version + ' ('+info+')'
TRACKS_VERSION=tracks_version

View file

@ -248,9 +248,9 @@ cs:
- Listopad - Listopad
- Prosinec - Prosinec
order: order:
- rok - :year
- ":měsíc" - :month
- den - :day
datetime: datetime:
distance_in_words: distance_in_words:
about_x_hours: about_x_hours:
@ -347,7 +347,8 @@ cs:
select_feed_for_context: Select the feed for this context select_feed_for_context: Select the feed for this context
select_feed_for_project: Vyberte feed pro tento projekt select_feed_for_project: Vyberte feed pro tento projekt
footer: footer:
send_feedback: Poslat zpětnou vazbu na %{version} version: 'Tracks %{version} (%{revision_with_date})'
send_feedback: Poslat zpětnou vazbu
helpers: helpers:
select: select:
prompt: Выберите prompt: Выберите

View file

@ -402,7 +402,8 @@ de:
select_feed_for_context: Feed für diesen Kontext auswählen select_feed_for_context: Feed für diesen Kontext auswählen
select_feed_for_project: Feed für dieses Projekt auswählen select_feed_for_project: Feed für dieses Projekt auswählen
footer: footer:
send_feedback: Senden Sie Feedback zu %{version} version: 'Tracks %{version} (%{revision_with_date})'
send_feedback: Senden Sie Feedback
helpers: helpers:
select: select:
prompt: Выберите prompt: Выберите

View file

@ -207,6 +207,7 @@ en:
invalid_csv: "Invalid CSV: could not read headers: %{e}" invalid_csv: "Invalid CSV: could not read headers: %{e}"
save_error: "Could not save uploaded CSV (%{path_and_file}). Can Tracks write\ save_error: "Could not save uploaded CSV (%{path_and_file}). Can Tracks write\
\ to the upload directory? %{e}" \ to the upload directory? %{e}"
no_context: No default context could be found
map_title: Map fields to be imported map_title: Map fields to be imported
header: Importing data header: Importing data
submit: Import submit: Import
@ -406,7 +407,8 @@ en:
select_feed_for_context: Select the feed for this context select_feed_for_context: Select the feed for this context
select_feed_for_project: Select the feed for this project select_feed_for_project: Select the feed for this project
footer: footer:
send_feedback: Send feedback on %{version} version: 'Tracks %{version} (%{revision_with_date})'
send_feedback: Send feedback
helpers: helpers:
select: select:
prompt: Please select prompt: Please select
@ -481,7 +483,7 @@ en:
\ and home email accounts to your Tracks Mailgun route, set it up like this:\ \ and home email accounts to your Tracks Mailgun route, set it up like this:\
\ %{code}" \ %{code}"
email_rich: email_rich:
description: "For both of the above methods, the follow format can be used:" description: "For both of the above methods, the following format can be used in the message subject to add metadata:"
fields_title: "The fields are:" fields_title: "The fields are:"
symbol_title: Symbol symbol_title: Symbol
meaning_title: Meaning meaning_title: Meaning
@ -492,6 +494,8 @@ en:
project: The project 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 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) month-day, or 6 digits for year-month-day)
tickler_date: The tickler 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 tag: A tag to apply to the Todo may be used multiple times
star: Flag to star the Todo star: Flag to star the Todo
example_names: example_names:
@ -1342,49 +1346,88 @@ en:
curl_link_text: cURL curl_link_text: cURL
intro: intro:
title: Introduction 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: Tracks is designed to be integrated with scripts, web services, and
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. third-party applications. This page serves as the documentation of our REST
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. 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 restful_link_text: RESTful
auth: auth:
title: Authentication 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 basic_auth_link_text: Basic HTTP authentication
retrieve: retrieve:
title: Retrieving data from the API 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:' single_context: 'Getting a single context:'
todos_from_context: 'Getting the todos within a 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:' 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:' limit: 'For the todo resources (todos, tickler, done, hidden and calendar) you
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:' 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: writing:
title: Writing to the API 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_title: 'Creating a new project, using curl:'
example_project_name: Build a treehouse for the kids 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_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_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_note_response_title: 'The response is an %{response_code} with in the
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:' body the XML representation of the updated todo. We provide a shorcut method
example_delete_response_title: The API returns an %{response_code} and the todo is now deleted. 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: response:
title: Dealing with the response and response status 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. description: All successful operations respond with a status code of %{response_200}
xml_description: 'The XML for empty list responses look like this, again with curl:' 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: activeresource:
title: Consuming the API with 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 activeresource_link_text: ActiveResource
ror_link_text: Ruby on Rails ror_link_text: Ruby on Rails
wrapper_description: 'Inspired by %{signals_link} &#8217;s Highrise wrapper, we&#8217;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} &#8217;s Highrise wrapper,
we&#8217;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 signals_link_text: 37 Signals
notes: notes:
title: Notes about the documentation title: Notes about the documentation
description: 'A few conventions have been applied in the documentation, these are:' description: 'A few conventions have been applied in the documentation, these
bullet1: '%{id}&#8217;s in a resource %{url} indicate that the resource&#8217;s unique ID needs to be inserted there' are:'
bullet2: '%{omit} indicates that unimportant bits of response data have been removed to eliminate noise from the documentation' bullet1: '%{id}&#8217;s in a resource %{url} indicate that the resource&#8217;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}.' curl_description: 'All examples make use of %{curl}.'

File diff suppressed because it is too large Load diff

View file

@ -63,14 +63,14 @@ fi:
empty: ei voi olla tyhjä empty: ei voi olla tyhjä
equal_to: täytyy olla sama kuin %{count} equal_to: täytyy olla sama kuin %{count}
even: täytyy olla tasan even: täytyy olla tasan
exclusion: is reserved exclusion: on varattu
greater_than: täytyy olla suurempi kuin %{count} greater_than: täytyy olla suurempi kuin %{count}
greater_than_or_equal_to: täytyy olla suurempi tai yhtäsuuri kuin %{count} greater_than_or_equal_to: täytyy olla suurempi tai yhtäsuuri kuin %{count}
inclusion: ei sisälly listaan 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: täytyy olla vähemmän kuin %{count}
less_than_or_equal_to: täytyy olla vähemmän tai yhtäsuuri 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 odd: täytyy olla pariton
record_invalid: 'Validointi epäonnistui: %{errors}' record_invalid: 'Validointi epäonnistui: %{errors}'
restrict_dependent_destroy: restrict_dependent_destroy:
@ -192,7 +192,7 @@ fi:
save_status_message: Asiayhteys tallennettu save_status_message: Asiayhteys tallennettu
show_form: Luo uusi asiayhteys show_form: Luo uusi asiayhteys
show_form_title: Lisää asiayhteys show_form_title: Lisää asiayhteys
status_active: Context is active status_active: Asiayhteys on aktiivinen
status_hidden: Asiayhteys on piilotettu status_hidden: Asiayhteys on piilotettu
todos_append: tässä asiayhteydessä todos_append: tässä asiayhteydessä
update_status_message: Asiayhteyden nimi muutettiin update_status_message: Asiayhteyden nimi muutettiin
@ -251,6 +251,7 @@ fi:
file_blank: Tiedosto ei voi olla tyhjä file_blank: Tiedosto ei voi olla tyhjä
some: Tuonnissa tapahtui virheitä some: Tuonnissa tapahtui virheitä
invalid_destination: 'Virheellinen tuontikohde: %{e}' invalid_destination: 'Virheellinen tuontikohde: %{e}'
no_context: Asiayhteyttä ei löytynyt oletusarvoksi
date: date:
abbr_day_names: abbr_day_names:
- Su - Su
@ -403,7 +404,8 @@ fi:
select_feed_for_context: Valitse tämän asiayhteyden syöte select_feed_for_context: Valitse tämän asiayhteyden syöte
select_feed_for_project: Valitse tämän projektin syöte select_feed_for_project: Valitse tämän projektin syöte
footer: footer:
send_feedback: Lähetä palautetta versiosta %{version} version: 'Tracks %{version} (%{revision_with_date})'
send_feedback: Lähetä palautetta
helpers: helpers:
select: select:
prompt: Valitse prompt: Valitse
@ -453,12 +455,16 @@ fi:
määrittämiseksi näissä järjestyksissä) määrittämiseksi näissä järjestyksissä)
project: Projekti, johon toimenpide liitetään project: Projekti, johon toimenpide liitetään
context: Konteksti, johon toimenpide liitetään context: Konteksti, johon toimenpide liitetään
tickler_date: Toimenpiteen näyttöajankohta (2 numeroa pelkän päivän määrittämiseksi,
4 numeroa kuukauden ja päivän tai 6 numeroa vuoden, kuukauden ja päivän
määrittämiseksi näissä järjestyksissä)
fields_instruction: Kaikki merkinnät ovat valinnaisia. Tekstiä ensimmäiseen fields_instruction: Kaikki merkinnät ovat valinnaisia. Tekstiä ensimmäiseen
merkintään asti käytetään toimenpiteen kuvauksena merkintään asti käytetään toimenpiteen kuvauksena
meaning_title: Tarkoitus meaning_title: Tarkoitus
symbol_title: Merkintä symbol_title: Merkintä
fields_title: 'Kentät:' fields_title: 'Kentät:'
description: 'Molemmilla ylläolevilla tavoilla voidaan käyttää seuraavaa muotoilua:' description: 'Molemmilla ylläolevilla tavoilla voidaan käyttää viestin otsikossa
seuraavaa muotoilua tietojen lisäämiseen:'
message_gateway: message_gateway:
instructions: instructions:
'3': Lähetä sähköposti juuri asettamaasi osoitteeseen! '3': Lähetä sähköposti juuri asettamaasi osoitteeseen!
@ -513,7 +519,7 @@ fi:
contribute_link_text: projektin verkkosivustolta contribute_link_text: projektin verkkosivustolta
mailing_list_link_text: Sähköpostilista mailing_list_link_text: Sähköpostilista
irc_bullet: '%{irc_link} (käytettävissä myös %{matrix_link})' irc_bullet: '%{irc_link} (käytettävissä myös %{matrix_link})'
irc_link_text: 'IRC-kanava #Tracks@FreeNode' irc_link_text: 'IRC-kanava #Tracks@Libera'
matrix_link_text: Matrixin kautta matrix_link_text: Matrixin kautta
layouts: layouts:
mobile_navigation: mobile_navigation:
@ -745,7 +751,7 @@ fi:
hidden_projects: Piilotetut projektit hidden_projects: Piilotetut projektit
hide_form: Piilota lomake hide_form: Piilota lomake
hide_form_title: Piilota projektinluontilomake hide_form_title: Piilota projektinluontilomake
is_active: is active is_active: on aktiivinen
last_completed_in_project: "(viimeiset %{number})" last_completed_in_project: "(viimeiset %{number})"
letter_abbreviation: P letter_abbreviation: P
list_completed_projects: TRACKS::Valmistuneiden projektien lista list_completed_projects: TRACKS::Valmistuneiden projektien lista
@ -756,7 +762,7 @@ fi:
no_last_completed_recurring_todos: Valmiita toistuvia toimenpiteitä ei löytynyt no_last_completed_recurring_todos: Valmiita toistuvia toimenpiteitä ei löytynyt
no_notes_attached: Projektiin ei ole liitetty muistiinpanoja no_notes_attached: Projektiin ei ole liitetty muistiinpanoja
no_projects: Projekteja ei löytynyt no_projects: Projekteja ei löytynyt
notes: Notes notes: Muistiinpanot
notes_empty: Tälle projektille ei ole muistiinpanoja notes_empty: Tälle projektille ei ole muistiinpanoja
page_title: 'TRACKS::Project: %{project}' page_title: 'TRACKS::Project: %{project}'
project_destroyed_status: Projekti ”%{name}” poistettu project_destroyed_status: Projekti ”%{name}” poistettu
@ -775,7 +781,7 @@ fi:
was_marked_hidden: on merkitty piilotetuksi was_marked_hidden: on merkitty piilotetuksi
with_default_context: with a default context of '%{context_name}' with_default_context: with a default context of '%{context_name}'
with_default_tags: ja oletusasiasanoilla ”%{tags}” 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 with_no_default_tags: ja ilman oletusavainsanoja
search: search:
contexts_matching_query: hakua vastaavaa asiayhteyttä contexts_matching_query: hakua vastaavaa asiayhteyttä
@ -1158,7 +1164,7 @@ fi:
no_last_completed_actions: Valmistuneita toimenpiteitä ei ole no_last_completed_actions: Valmistuneita toimenpiteitä ei ole
no_project: "--No project--" no_project: "--No project--"
no_recurring_todos: Ei toistuvia toimenpiteitä no_recurring_todos: Ei toistuvia toimenpiteitä
notes: Notes notes: Muistiinpanot
overdue: Myöhässä overdue: Myöhässä
pending: Odottaa pending: Odottaa
recurrence: recurrence:
@ -1343,3 +1349,88 @@ fi:
previous_label: "&#8592; Edellinen" previous_label: "&#8592; Edellinen"
auth_type: auth_type:
database: Tietokanta database: Tietokanta
rest_help:
writing:
example_todo_name: Mallinna puumaja SketchUpilla
title: Rajapintaan kirjoittaminen
example_title: 'Luo uusi projekti curlilla:'
example_project_name: Rakenna puumaja lapsille
example_project_response_title: 'Vastaus on %{response_code} yhdessä otsakkeen
%{header} kanssa, joka osoittaa mistä uusi projektiresurssi löytyy. Nyt voimme
lisätä tähän projektiin uuden tehtävän käyttäen curlia:'
example_delete_response_title: Rajapinta palauttaa %{response_code} ja tehtävä
on nyt poistettu.
example_delete_title: 'Kun haluamme poistaa tehtävän, kutsumme sen yksilöllistä
resurssitunnistetta (URL-osoite) HTTP-metodilla %{delete}, jälleen curlilla:'
example_todo_response_title: 'Vastaus on jälleen %{response_code} yhdessä otsakkeen
%{header} kanssa, joka osoittaa mistä uusi tehtäväresurssi löytyy. Tehtävän
muistiinpanojen muuttaminen, jälleen curlilla:'
example_note_response_title: 'Vastaus on %{response_code} ja sen rungossa on
päivitetty tehtävä XML-muotoisena. Tarjoamme helpomman tavan muuttaa tehtävä
tehdyksi tai tekemättömäksi ilman tarvetta päivitysoperaation tekemiselle
kenttäarvoilla:'
description: Rajapinta tarjoaa mekanismit resurssien lisäämiseen, päivittämiseen
ja poistamiseen käyttämällä %{put}, %{post} ja %{delete} yhdessä sisällön
kanssa.
example_note_text: käytä vaahterakuviota
title: REST-rajapinnan dokumentaatio kehittäjille
intro:
title: Esittely
content_2: Tracksin REST-rajapinnan avulla kehittäjät voivat integroida Tracksin
sovelluksiinsa. Sen avulla sovellukset voivat lukea ja muuttaa Tracksiin tallennettuja
tietoja ja se on toteutettu XML:nä HTTP:n yli.
restful_link_text: RESTful
content: Tracks on suunniteltu integroitavaksi skripteihin, verkkopalveluihin
ja kolmannen osapuolen sovelluksiin. Tämä sivu toimii REST-rajapintamme dokumentaationa.
content_3: Rajapinta on %{restful_link}-palvelu. Kaikki tieto on saatavilla
rajapinnan kautta resursseina, joihin voidaan viitata yksilöllisellä tunnisteella.
Rajapinta vastaa lajitelmaan HTTP-kutsuja (GET, PUT, POST ja UPDATE) ja kaikki
rajapinnan vastaukset ovat XML-muotoiltua UTF-8:aa.
auth:
title: Tunnistautuminen
content: Tunnistautuminen tapahtuu %{auth_link}. Tracksin käyttäjätunnusta ja
salasanaa käytetään rajapinnan tunnisteina. Huomaathan, että Basic-HTTP-tunnistautumisessa
salasanasi lähetetään pelkkänä tekstinä. Jos tarvitset turvallisempaa tunnistautumisratkaisua,
asenna verkkopalvelimesi palvelemaan Tracks HTTPS:n yli.
basic_auth_link_text: Basic-HTTP-tunnistautuminen
retrieve:
content: 'Noutaaksesi tietoa sinun tarvitsee vain tehdä HTTP GET-pyyntö resurssitunnisteella.
Esimerkiksi jos haluat hakea kaikki asiayhteydet %{curl_link}illa:'
single_context: 'Yksittäisen asiayhteyden noutaminen:'
todos_from_context: 'Asiayhteyteen kuuluvien tehtävien noutaminen:'
projects: Voit käyttää yllä esitettyä muotoa myös projekteilla asiayhteyksien
sijaan.
paths_title: 'Kaikki tiedot ovat saatavilla seuraavissa resurssipoluissa:'
active_todos: 'Jos haluat noutaa vain aktiiviset tehtävät, voit lisätä parametrin
%{active_code} ja asettaa siihen jonkin arvon, kuten:'
title: Tiedon noutaminen rajapinnasta
limit: 'Tehtäväresursseille (tehtävät, tickler, tehdyt, piilotetut ja kalenteri)
voit palauttaa vain kentät %{fields} lisäämällä parametrin %{limit_parameter}
ja asettamalla sen arvoksi %{set_to}. Esimerkiksi:'
notes:
description: 'Ohjeessa on noudatettu muutamia merkintötapoja:'
curl_description: Kaikki esimerkit käyttävät %{curl}ia.
bullet2: '%{omit} osoittaa että epäolennaisia osuuksia vastaustiedosta on jätetty
pois ohjeen selkiyttämiseksi'
bullet1: '%{id} resurssin %{url} osoittavat että se tulee korvata resurssin
yksilöllisellä tunnisteella'
title: Huomioita ohjeesta
activeresource:
title: Rajapinnan käyttäminen ActiveResourcella
wrapper_description: '%{signals_link}in Highrise-wrapperin innostamana teimme
pienen Ruby-wrapperin (löytyy doc/-hakemistosta) rajapinnalle joka luo sinulle
ActiveResource-mallit joilla voit leikkiä IRB-istunnossa:'
ror_link_text: Ruby on Rails
signals_link_text: 37 Signals
activeresource_link_text: ActiveResource
description: '%{activeresource_link} on ohut mutta hyödyllinen RESTful-palveluiden
ympärillä %{ror_link}issa oleva palvelu. Se tulee olemaan osa Rails 2.0:aa,
mutta siihen asti voit noutaa sen %{gem_command}.'
response:
xml_description: 'XML tyhjälle listalle näyttää tältä, jälleen curlilla:'
title: Vastauksen ja vastauskoodin käsittely
description: Kaikki onnistuneet toiminnot palauttavat tilakoodin %{response_200}
tai %{response_201} riippuen toiminnosta. Joissain tapauksissa listassa, esimerkiksi
%{example_call} ei ole lainkaan tuloksia, jolloin palautetaan tyhjä lista.
curl_link_text: cURL
id: ID

View file

@ -354,7 +354,8 @@ fr:
select_feed_for_context: Selectionner un flux pour ce contexte select_feed_for_context: Selectionner un flux pour ce contexte
select_feed_for_project: Selectionner le flux pour ce projet select_feed_for_project: Selectionner le flux pour ce projet
footer: footer:
send_feedback: Envoyer un feedback sur %{version} send_feedback: Envoyer un feedback
version: 'Tracks %{version} (%{revision_with_date})'
helpers: helpers:
select: select:
prompt: Veuillez sélectionner prompt: Veuillez sélectionner

View file

@ -304,7 +304,8 @@ he:
select_feed_for_context: בחירת ההזנה עבור ההקשר הנתון select_feed_for_context: בחירת ההזנה עבור ההקשר הנתון
select_feed_for_project: בחירת ההזנה עבור הפרוייקט select_feed_for_project: בחירת ההזנה עבור הפרוייקט
footer: footer:
send_feedback: שליחת משוב על גירסא %{version} send_feedback: שליחת משוב על גירסא
version: 'Tracks %{version} (%{revision_with_date})'
helpers: helpers:
select: select:
prompt: Выберите prompt: Выберите

View file

@ -1 +1,5 @@
{} nb_NO:
activerecord:
attributes:
note:
created_at: Opprettet

View file

@ -347,7 +347,8 @@ nl:
select_feed_for_context: Kies de feed voor deze context select_feed_for_context: Kies de feed voor deze context
select_feed_for_project: Kies de feed voor dit project select_feed_for_project: Kies de feed voor dit project
footer: footer:
send_feedback: Stuur reactie op %{version} send_feedback: Stuur reactie
version: 'Tracks %{version} (%{revision_with_date})'
helpers: helpers:
select: select:
prompt: Maak een keuze prompt: Maak een keuze

View file

@ -425,7 +425,8 @@ ru:
select_feed_for_context: Выберите ленту новостей для этого контекста select_feed_for_context: Выберите ленту новостей для этого контекста
select_feed_for_project: Выберите ленту новостей для этого проекта select_feed_for_project: Выберите ленту новостей для этого проекта
footer: footer:
send_feedback: Обратная связь. Версия %{version} send_feedback: Обратная связь
version: 'Tracks %{version} (%{revision_with_date})'
helpers: helpers:
select: select:
prompt: Выберите... prompt: Выберите...

View file

@ -1 +1,2 @@
{} sv:
{}

View file

@ -1,4 +1,5 @@
data: tr:
data:
import: import:
yaml_disabled: YAML yükleme kapalı yaml_disabled: YAML yükleme kapalı
todos_count: İçeri aktarılacak Todos sayısı %{count} todos_count: İçeri aktarılacak Todos sayısı %{count}
@ -48,7 +49,7 @@ data:
yaml: YAML yaml: YAML
csv: CSV csv: CSV
xml: XML xml: XML
contexts: contexts:
visible_contexts: Görünür içerikler visible_contexts: Görünür içerikler
view_link: '%{name} içeriğini görüntüle' view_link: '%{name} içeriğini görüntüle'
update_status_message: İçerik adı değiştirildi update_status_message: İçerik adı değiştirildi
@ -81,7 +82,7 @@ contexts:
completed_tasks_title: TRACKS::şuradan '%{context_name}' tamamlanan eylemler 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 add_context: İçerik ekle
common: common:
wiki: Wiki wiki: Wiki
weeks: haftalar weeks: haftalar
week: hafta week: hafta
@ -141,7 +142,16 @@ common:
add: Ekle add: Ekle
actions: Eylemler actions: Eylemler
action: Eylem action: Eylem
activerecord: days_midsentence:
one: Gün
other: Günler
note:
one: Not yok
other: 1 not var
actions_midsentence:
one: Eylem
other: Eylemler
activerecord:
errors: errors:
template: template:
header: header:
@ -234,13 +244,15 @@ activerecord:
note: note:
updated_at: Güncellenme tarihi updated_at: Güncellenme tarihi
created_at: Oluşturulma tarihi created_at: Oluşturulma tarihi
date: date:
abbr_day_names: abbr_day_names:
- Pa - Pa
- Pt - Pt
- Pe - Pe
- Cu - Cu
- Ct - Ct
- Cum
- Cmt
abbr_month_names: abbr_month_names:
- Kas - Kas
- Oca - Oca
@ -253,6 +265,8 @@ date:
- Ağu - Ağu
- Eyl - Eyl
- Eki - Eki
- Kas
- Ara
day_names: day_names:
- Pazar - Pazar
- Pazartesi - Pazartesi
@ -279,10 +293,12 @@ date:
- Ekim - Ekim
- Kasım - Kasım
- Aralık - Aralık
- Aralık
order: order:
- :yıl - :year
- :gün - :month
datetime: - :day
datetime:
prompts: prompts:
day: Gün day: Gün
hour: Saat hour: Saat
@ -319,7 +335,7 @@ datetime:
over_x_years: over_x_years:
one: 1 yıldan fazla one: 1 yıldan fazla
other: '%{count} yıldan fazla' other: '%{count} yıldan fazla'
errors: errors:
messages: messages:
blank: boş bırakılamaz blank: boş bırakılamaz
less_than: "%{count}'dan az olmalıdır" less_than: "%{count}'dan az olmalıdır"
@ -346,8 +362,68 @@ errors:
format: '%{attribute} %{message}' format: '%{attribute} %{message}'
user_unauthorized: '401 Yetkisiz: sadece yetkili kullanıcılar bu özelliğe erişime user_unauthorized: '401 Yetkisiz: sadece yetkili kullanıcılar bu özelliğe erişime
sahiptir.' sahiptir.'
feedlist: feedlist:
actions_completed_last_week: Son 7 günde tamamlanan eylemler actions_completed_last_week: Son 7 günde tamamlanan eylemler
actions_due_next_week: 7 gün veya daha önce bitecek eylemler actions_due_next_week: 7 gün veya daha önce bitecek eylemler
actions_due_today: Bugün veya daha erken bitecek olan eylemler actions_due_today: Bugün veya daha erken bitecek olan eylemler
active_projects_wo_next: Eylemi bulunmayan aktif projeler active_projects_wo_next: Eylemi bulunmayan aktif projeler
all_projects: Bütün Projeler
choose_context: Almak istediğiniz içeriği seçin
projects_and_actions: Aktif projeler ve eylemleri
rss_feed: RSS Akışı
active_starred_actions: Yıldızlı, etkin eylemler
all_actions: Tüm eylemler
all_contexts: Bütün İçerikler
choose_project: Almak istediğiniz projeyi seçin
context_centric_actions: Belirli bir içerikteki tamamlanmamış eylemler için akış
context_needed: Akış talep etmeden önce en az bir içerik olmalı
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"
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ı
select_feed_for_context: Bu içerik için akış seçin
select_feed_for_project: Bu proje için akış seçin
integrations:
sections:
email_rich: Zengin Todo Mesaj e-posta formatı
message_gateway: Tracks aracılığıyla e-posta gönderebilmek için Tracks'ı e-posta
serverine bağlayın
automatic_email: Yaklaşan eylemler için kendinize otomatik e-posta gönderin
mailgun: Mailgun aracılığıyla Tracks'a e-posta gönder
opensearch_description: Tracks'ta ara
title: Entegrasyonlar
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}'
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
version: 'Tracks %{version} (%{revision_with_date})'
helpers:
select:
prompt: Seçiniz
submit:
create: Oluştur %{model}
submit: Kaydet %{model}
update: Güncelle %{model}

View file

@ -39,6 +39,13 @@ force_ssl: false
# the relative URL. Mongrel, for example, has a --prefix option. # the relative URL. Mongrel, for example, has a --prefix option.
# subdir: "/tracks" # subdir: "/tracks"
# Set this to respective values if you're instance is running behind a proxy
# (e.g. localhost:3000 is not the client visible host).
# default_url_options:
# :host: 'example.org'
# :protocol: 'https://'
# :port: 443
# Set to true to allow anyone to sign up for a username. # Set to true to allow anyone to sign up for a username.
open_signups: false open_signups: false

View file

@ -1,9 +1,55 @@
See doc/upgrading.md for the upgrade documentation! See doc/upgrading.md for the upgrade documentation!
## Version 2.6.1
### Deprecations
* This will be the last release to support Ruby 2.6, which is already end-of-life.
### Bug fixes
* Lots of dependencies have been updated (including security updates).
* Fixed some documentation.
* Updated and added missing Datepicker localisations which caused some locales to fail.
* Added PostgreSQL documentation (thanks Sean Pappalardo!)
* URL options can be specified to make autocompletion work behind a proxy (thanks Michal Koutný!)
### Updated translations
* Finnish (by maintainer Jyri-Petteri ”ZeiP” Paloposki)
* Spanish (thanks Francisco Serrador!)
* Norwegian Bokmål (thanks Allan Nordhøy!)
## 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.
* Footer shows the Git version hash and date 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 ## Version 2.5.2
### New features ### New features
* Whole Tracks is now translatable.
* New Finnish locale by the maintainer Jyri-Petteri ”ZeiP” Paloposki. * New Finnish locale by the maintainer Jyri-Petteri ”ZeiP” Paloposki.
* Update last login field when validating an existing login. * Update last login field when validating an existing login.
* Show more users in the user list and allow changing the order criteria. * Show more users in the user list and allow changing the order criteria.

View file

@ -50,8 +50,8 @@ Tracks container. In future there should be an official image in Docker Hub. You
1. Make sure you have Docker properly installed. 1. Make sure you have Docker properly installed.
2. Start a database container with either MySQL or PostgreSQL: 2. Start a database container with either MySQL or PostgreSQL:
``` ```
$ docker run -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=password -d postgres $ docker run -d -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=password -d postgres
$ docker run -p 3306:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=password -d mariadb $ docker run -d -p 3306:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=password -d mariadb
``` ```
3. Create a database and a user for Tracks in the database: 3. Create a database and a user for Tracks in the database:
``` ```
@ -72,8 +72,8 @@ Tracks container. In future there should be an official image in Docker Hub. You
``` ```
5. Start the Tracks server: 5. Start the Tracks server:
``` ```
$ docker run -p 3000:3000 --name tracks --link mariadb:db -t tracks $ docker run -d -p 3000:3000 --name tracks --link mariadb:db -t tracks
$ docker run -p 3000:3000 --name tracks --link postgres:db -t tracks $ docker run -d -p 3000:3000 --name tracks --link postgres:db -t tracks
``` ```
6. You should now be able to access Tracks in http://localhost:3000 6. You should now be able to access Tracks in http://localhost:3000
@ -153,13 +153,13 @@ Tracks is built upon a number of Ruby libraries (known as gems). The Bundl
* If you are using SQLite: * If you are using SQLite:
``` ```
bundle install --without development test mysql bundle install --without "development test mysql"
``` ```
* If you are using MySQL: * If you are using MySQL:
``` ```
bundle install --without development test sqlite bundle install --without "development test sqlite"
``` ```
* 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. * 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.
@ -168,10 +168,13 @@ Tracks is built upon a number of Ruby libraries (known as gems). The Bundl
## Configure variables ## Configure variables
1. In the `config` folder, copy the files `database.yml.tmpl` and `site.yml.tmpl` to `database.yml` and `site.yml`, respectively. 1. In the `config` folder, copy the files `database.yml.tmpl` and `site.yml.tmpl` to `database.yml` and `site.yml`, respectively.
2. Open the file `config/database.yml` and edit the `production:` section with the details of your database. If you are using MySQL the `adapter:` line should read `adapter: mysql2`, `host: localhost` (in the majority of cases), and your username and password should match those you assigned when you created the database. If you are using SQLite3, you should have only two lines under the production section: `adapter: sqlite3` and `database: db/tracks.db`. 2. Open the file `config/database.yml` and edit the `production:` section with the details of your database.
3. Open the file `config/site.yml`, and read through the settings to make sure that they suit your setup. In most cases, all you need to change are the `secret_token`, the administrator email address (`admin_email`), and the time zone setting. For the time zone setting you can use the command `bundle exec rake time:zones:local` to see all available timezones on your machine * If you are using MySQL the `adapter:` line should read `adapter: mysql2`, `host: localhost` (in the majority of cases), and your username and password should match those you assigned when you created the database.
4. If you are using Windows, you may need to check the shebang lines (`#!/usr/bin/env ruby`) of the `/public/dispatch.*` files and all the files in the `/script` directory. They are set to `#!/usr/bin/env ruby` by default. This should work for all Unix based setups (Linux or Mac OS X), but Windows users will probably have to change it to something like `#c:/ruby/bin/ruby` to point to the Ruby binary on your system. * If you are using PostgreSQL, set the line to `adapter: postgresql` and adjust host, username and password as appropriate.
5. If you intend to use Tracks behind a web server or reverse proxy with https enabled, ensure to set `force_ssl` option to `true`. * If you are using SQLite3, you should have only two lines under the production section: `adapter: sqlite3` and `database: db/tracks.db`.
5. Open the file `config/site.yml`, and read through the settings to make sure that they suit your setup. In most cases, all you need to change are the `secret_token`, the administrator email address (`admin_email`), and the time zone setting. For the time zone setting you can use the command `bundle exec rake time:zones:local` to see all available timezones on your machine
6. If you are using Windows, you may need to check the shebang lines (`#!/usr/bin/env ruby`) of the `/public/dispatch.*` files and all the files in the `/script` directory. They are set to `#!/usr/bin/env ruby` by default. This should work for all Unix based setups (Linux or Mac OS X), but Windows users will probably have to change it to something like `#c:/ruby/bin/ruby` to point to the Ruby binary on your system.
7. If you intend to use Tracks behind a web server or reverse proxy with https enabled, ensure to set `force_ssl` option to `true`.
### Populate your database with the Tracks schema ### Populate your database with the Tracks schema

0
public/uploads/csv/.keep Normal file
View file

View file

@ -1,10 +1,12 @@
#!/bin/bash #!/bin/bash
echo "==> Polling DB…"
appdir=$(cd $(dirname "$0")/.. && pwd) appdir=$(cd $(dirname "$0")/.. && pwd)
[ -f /etc/app-env ] || exec "$appdir/script/docker-environment" $0 $@ [ -f /etc/app-env ] || exec "$appdir/script/docker-environment" $0 $@
for i in {1..60}; do for i in {1..60}; do
curl -sf db:3306 >/dev/null && exit nc -z -w5 db 3306 && exit
sleep 1 sleep 1
done done

View file

@ -10,7 +10,7 @@ services:
web: web:
build: build:
context: .. context: ..
dockerfile: Dockerfile-2.5 dockerfile: Dockerfile-3.0
environment: environment:
# These are set in script/ci-build, so we need to pass-thru them. # These are set in script/ci-build, so we need to pass-thru them.
RAILS_ENV: $RAILS_ENV RAILS_ENV: $RAILS_ENV

View file

@ -1,22 +1,25 @@
version: '3' version: '3'
services: services:
db: db:
image: mysql:5.7 image: postgres:13
environment: environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 1 POSTGRES_DB: ${DATABASE_NAME:-tracks}
MYSQL_DATABASE: ${TRACKS_DB:-tracks} POSTGRES_PASSWORD: password
volumes: volumes:
- db-data:/var/lib/mysql - db-data:/var/lib/postgresql/data
web: web:
build: build:
context: .. context: ..
dockerfile: Dockerfile-2.6 dockerfile: Dockerfile-3.0
environment: environment:
# These are set in script/ci-build, so we need to pass-thru them. # These are set in script/ci-build, so we need to pass-thru them.
RAILS_ENV: $RAILS_ENV RAILS_ENV: $RAILS_ENV
DATABASE_NAME: $DATABASE_NAME DATABASE_NAME: $DATABASE_NAME
DATABASE_USERNAME: root DATABASE_USERNAME: postgres
DATABASE_PASSWORD_EMPTY: 1 DATABASE_PASSWORD: password
DATABASE_TYPE: postgresql
DATABASE_ENCODING: unicode
DATABASE_PORT: 5432
volumes: volumes:
- ${VOLUME:-..}:/app:Z - ${VOLUME:-..}:/app:Z
- ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z - ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z

View file

@ -0,0 +1,17 @@
version: '3'
services:
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: "/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

View file

@ -4,10 +4,10 @@ class IconHelperTest < ActionView::TestCase
include IconHelper include IconHelper
test 'icon_fw generates fixed-width class' do test 'icon_fw generates fixed-width class' do
assert_equal '<i class="fas fa-gear fa-fw"></i>', icon_fw('fas', 'gear') assert_equal '<i class="fas fa-gear fa-fw" aria-hidden="true"></i>', icon_fw('fas', 'gear')
end end
test 'icon_fw accepts an additional class' do test 'icon_fw accepts an additional class' do
assert_equal '<i class="fas fa-gear fa-fw myclass"></i>', icon_fw('fas', 'gear', class: 'myclass') assert_equal '<i class="fas fa-gear fa-fw myclass" aria-hidden="true"></i>', icon_fw('fas', 'gear', class: 'myclass')
end end
end end

View file

@ -28,7 +28,7 @@ class RenderingHelperTest < ActionView::TestCase
end end
test "message link" do test "message link" do
expected = '<p>Call <a href="message://%3C123%3E">message://&lt;123&gt;</a>.</p>' expected = '<p>Call <a href="message://<123>">message://&lt;123&gt;</a>.</p>'
actual = render_text("Call message://<123>.") actual = render_text("Call message://<123>.")
assert_equal(expected, actual) assert_equal(expected, actual)
end end

View file

@ -0,0 +1,25 @@
require 'test_helper'
class LocaleTest < ActionDispatch::IntegrationTest
fixtures :users
def test_locale_index
logs_in_as(users(:other_user_email), 'open')
@user = User.find(@request.session['user_id'])
locales = I18n.available_locales.map {|l| l.to_s}
locales.each do |locale|
# Set the locale
@user.preference.locale = locale
@user.preference.save!
logs_in_as(users(:other_user_email), 'open')
get '/'
assert_response :success
assert_template "todos/index"
end
# Finally log in as normal admin user to prevent other tests from failing to the non-English locale.
logs_in_as(users(:admin_user), 'abracadabra')
end
end

View file

@ -2,17 +2,6 @@ require 'test_helper'
class RecurringTodosTest < ActionDispatch::IntegrationTest class RecurringTodosTest < ActionDispatch::IntegrationTest
def logs_in_as(user,plain_pass)
@user = user
post "/login", params: { :user_login => @user.login,
:user_password => plain_pass,
:user_noexpiry => 'n' }
assert_response :redirect
follow_redirect!
assert_response :success
assert_template "todos/index"
end
def test_deleting_recurring_todo_clears_reference_from_related_todos def test_deleting_recurring_todo_clears_reference_from_related_todos
logs_in_as(users(:admin_user), 'abracadabra') logs_in_as(users(:admin_user), 'abracadabra')

View file

@ -107,7 +107,6 @@ class RecurringTodoTest < ActiveSupport::TestCase
def test_start_from_in_future def test_start_from_in_future
## Test: every day ## Test: every day
# every_day should return start_day if it is in the future # every_day should return start_day if it is in the future
@every_day.start_from = @in_three_days @every_day.start_from = @in_three_days
due_date = @every_day.get_due_date(nil) due_date = @every_day.get_due_date(nil)
@ -120,18 +119,14 @@ class RecurringTodoTest < ActiveSupport::TestCase
due_date = @every_day.get_due_date(@in_four_days) due_date = @every_day.get_due_date(@in_four_days)
assert_equal (@in_four_days+1.day).at_midnight, due_date assert_equal (@in_four_days+1.day).at_midnight, due_date
## Test: Every weekday ## Test: Every weekday
# 1 Jan 2020 is a Wednesday # 1 Jan 2020 is a Wednesday
@weekly_every_day.start_from = Time.zone.local(2020,1,1) @weekly_every_day.start_from = Time.zone.local(2020,1,1)
assert_equal Time.zone.local(2020,1,1), @weekly_every_day.get_due_date(nil) assert_equal Time.zone.local(2020,1,1), @weekly_every_day.get_due_date(nil)
assert_equal Time.zone.local(2020,1,1), @weekly_every_day.get_due_date(Time.zone.local(2019,10,1)) assert_equal Time.zone.local(2020,1,1), @weekly_every_day.get_due_date(Time.zone.local(2019,10,1))
assert_equal Time.zone.local(2020,1,10), @weekly_every_day.get_due_date(Time.zone.local(2020,1,9)) assert_equal Time.zone.local(2020,1,10), @weekly_every_day.get_due_date(Time.zone.local(2020,1,9))
## Test: every month ## Test: every month
@monthly_every_last_friday.start_from = Time.zone.local(@next_year,3,1) @monthly_every_last_friday.start_from = Time.zone.local(@next_year,3,1)
last_friday_in_march = Time.zone.local(@next_year, 3, 31) last_friday_in_march = Time.zone.local(@next_year, 3, 31)
@ -152,16 +147,17 @@ class RecurringTodoTest < ActiveSupport::TestCase
# Starting from 1 April next year: next due date is the last Friday of April # Starting from 1 April next year: next due date is the last Friday of April
assert_equal last_friday_in_april, @monthly_every_last_friday.get_due_date(Time.zone.local(@next_year,4,1)) assert_equal last_friday_in_april, @monthly_every_last_friday.get_due_date(Time.zone.local(@next_year,4,1))
## Test: every year ## Test: every year
# start from after june 8th 2008
@yearly.start_from = Time.zone.local(2021,6,12)
assert_equal Time.zone.local(2022,6,8), @yearly.get_due_date(nil) # jun 8th next year
assert_equal Time.zone.local(2022,6,8), @yearly.get_due_date(Time.zone.local(2019,6,1)) # also next year
assert_equal Time.zone.local(2022,6,8), @yearly.get_due_date(Time.zone.local(2020,6,15)) # also next year
this_year = Time.zone.now.utc.year this_year = Time.zone.now.utc.year
next_year = this_year + 1
# Test that we're getting the next due date both without a specific date,
# after this year and after the next year's.
@yearly.start_from = Time.zone.local(this_year, 6, 12)
assert_equal Time.zone.local(next_year, 6, 8), @yearly.get_due_date(nil) # jun 8th next year
assert_equal Time.zone.local(next_year, 6, 8), @yearly.get_due_date(Time.zone.local(next_year, 6, 1)) # also next year
assert_equal Time.zone.local(next_year + 1, 6, 8), @yearly.get_due_date(Time.zone.local(next_year, 6, 15)) # also next year
@yearly.start_from = Time.zone.local(this_year+1,6,12) @yearly.start_from = Time.zone.local(this_year+1,6,12)
due_date = @yearly.get_due_date(nil) due_date = @yearly.get_due_date(nil)
assert_equal due_date.year, this_year+2 assert_equal due_date.year, this_year+2

View file

@ -109,6 +109,17 @@ end
class ActionDispatch::IntegrationTest class ActionDispatch::IntegrationTest
def logs_in_as(user, plain_pass)
@user = user
post "/login", params: { :user_login => @user.login,
:user_password => plain_pass,
:user_noexpiry => 'n' }
assert_response :redirect
follow_redirect!
assert_response :success
assert_template "todos/index"
end
def authenticated_post_xml(url, username, password, parameters, headers = {}) def authenticated_post_xml(url, username, password, parameters, headers = {})
post url, params: parameters, headers: post url, params: parameters, headers:
{ 'HTTP_AUTHORIZATION' => "Basic " + Base64.encode64("#{username}:#{password}"), { 'HTTP_AUTHORIZATION' => "Basic " + Base64.encode64("#{username}:#{password}"),