diff --git a/app/assets/javascripts/tracks.js b/app/assets/javascripts/tracks.js index 87361fb8..5d867ff0 100644 --- a/app/assets/javascripts/tracks.js +++ b/app/assets/javascripts/tracks.js @@ -329,6 +329,12 @@ var TracksPages = { refresh_page(); }); + $("a#show_empty_containers").click(function () { + var show = ($(this).attr("x_show_empty_containers") == "true"); + $.cookie('show_empty_containers', !show); + refresh_page(); + }); + /* fade flashes and alerts in automatically */ $(".alert").fadeOut(8000); } diff --git a/app/controllers/contexts_controller.rb b/app/controllers/contexts_controller.rb index 7a312abd..9bc7ea29 100644 --- a/app/controllers/contexts_controller.rb +++ b/app/controllers/contexts_controller.rb @@ -43,13 +43,13 @@ class ContextsController < ApplicationController @done = @context.todos.completed.limit(@max_completed).reorder("todos.completed_at DESC, todos.created_at DESC").includes(Todo::DEFAULT_INCLUDES) @not_done_todos = @context.todos.active.reorder("todos.due IS NULL, todos.due ASC, todos.created_at ASC").includes(Todo::DEFAULT_INCLUDES) - @deferred = @context.todos.deferred.includes(Todo::DEFAULT_INCLUDES) - @pending = @context.todos.pending.includes(Todo::DEFAULT_INCLUDES) + @deferred_todos = @context.todos.deferred.includes(Todo::DEFAULT_INCLUDES) + @pending_todos = @context.todos.pending.includes(Todo::DEFAULT_INCLUDES) @projects = current_user.projects @contexts = current_user.contexts - @count = @not_done_todos.count + @deferred.count + @pending.count + @count = @not_done_todos.count + @deferred_todos.count + @pending_todos.count @page_title = "TRACKS::Context: #{@context.name}" respond_to do |format| format.html diff --git a/app/controllers/todos_controller.rb b/app/controllers/todos_controller.rb index fb285bf7..24ec64f2 100644 --- a/app/controllers/todos_controller.rb +++ b/app/controllers/todos_controller.rb @@ -9,6 +9,8 @@ class TodosController < ApplicationController def index @source_view = params['_source_view'] || 'todo' @group_view_by = cookies['group_view_by'] || 'context' + @show_empty_containers = (cookies['show_empty_containers']=="true") || false + init_data_for_sidebar unless mobile? @todos = current_user.todos.includes(Todo::DEFAULT_INCLUDES) @@ -31,6 +33,7 @@ class TodosController < ApplicationController @page_title = t('todos.task_list_title') # Set count badge to number of not-done, not hidden context items @count = current_user.todos.active.not_hidden.count(:all) + @todos_without_project = @not_done_todos.select{|t|t.project.nil?} end format.m do @page_title = t('todos.mobile_todos_page_title') @@ -931,6 +934,7 @@ class TodosController < ApplicationController @tag_title = @single_tag ? @tag_name : tag_title(@tag_expr) @group_view_by = cookies['group_view_by'] || 'context' + @show_empty_containers = (cookies['show_empty_containers']=="true") || false end def get_ids_from_tag_expr(tag_expr) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 1b63eeb0..e4397553 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -17,6 +17,17 @@ module ApplicationHelper end end + def show_empty_containers_menu_entry + @show_empty_containers ||= false + @group_view_by ||= 'context' + content_tag(:li) do + link_to( + t("layouts.navigation.show_empty_containers_#{@group_view_by}"), + '#', + {:id => "show_empty_containers", :accesskey => "s", :title => t('layouts.navigation.show_empty_containers_title'), :x_show_empty_containers => @show_empty_containers} ) + end + end + def container_toggle(id) link_to( image_tag("blank.png", :alt => t('common.collapse_expand')), diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 2899eb02..c4a85993 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -15,11 +15,13 @@ module ProjectsHelper end def project_next_prev - html = "" - html << link_to_project(@previous_project, "« #{@previous_project.shortened_name}".html_safe) if @previous_project - html << " | " if @previous_project && @next_project - html << link_to_project(@next_project, "#{@next_project.shortened_name} »".html_safe) if @next_project - return html.html_safe + content_tag(:div, :id=>"project-next-prev") do + html = "" + html << link_to_project(@previous_project, "« #{@previous_project.shortened_name}".html_safe) if @previous_project + html << " | " if @previous_project && @next_project + html << link_to_project(@next_project, "#{@next_project.shortened_name} »".html_safe) if @next_project + html.html_safe + end end def project_next_prev_mobile diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb index 464867f6..87926aba 100644 --- a/app/helpers/todos_helper.rb +++ b/app/helpers/todos_helper.rb @@ -1,17 +1,112 @@ module TodosHelper - def empty_message_holder(show) - content_tag(:div, :id => "no_todos_in_view", :class => "container context", :style => "display:" + (show ? "block" : "none") ) do - content_tag(:h2) { t('todos.no_actions_found_title') } + def empty_message_holder(container_name, show, title_param=nil) + content_tag(:div, :id => "no_todos_in_view", :class => "container #{container_name}", :style => "display:" + (show ? "block" : "none") ) do + content_tag(:h2) { t("todos.no_actions.title", :param=>title_param) } + content_tag(:div, :class => "message") do - content_tag(:p) { t('todos.no_actions_found') } + content_tag(:p) { t("todos.no_actions.#{container_name}", :param=>title_param) } + end + end + end + + def todos_container_empty_message(container_name, container_id, show_message) + content_tag(:div, :id=>"#{container_id}-empty-d", :style=>"display:#{show_message ? 'block' : 'none'}") do + content_tag(:div, :class=>"message") do + content_tag(:p) do + t("todos.no_actions.#{container_name}") + end end end end def show_grouped_todos collection = (@group_view_by == 'context') ? @contexts_to_show : @projects_to_show - render(:partial => collection, :locals => { :collapsible => true }) + render(:partial => collection, :locals => { :settings => {:collapsible => true, :show_empty_containers => @show_empty_containers }}) + end + + def default_collection_settings + { + :suppress_context => false, + :suppress_project => false, + :collapsible => false, + :append_descriptor => nil, + :parent_container_type => nil, + :show_empty_containers => true + } + end + + def show_done_todos(done_todos, settings={}) + settings[:container_name] = "completed" + settings[:link_in_header] = link_to(t('common.show_all'), determine_done_path) + + render :partial => 'todos/collection', + :object => done_todos, + :locals => {:settings => settings.reverse_merge!(default_collection_settings)} + end + + def show_hidden_todos(hidden_todos, settings={}) + settings[:container_name] = "hidden" + + render :partial => 'todos/collection', + :object => hidden_todos, + :locals => {:settings => settings.reverse_merge!(default_collection_settings)} + end + + def show_deferred_pending_todos(deferred_todos, pending_todos, settings={}) + settings[:pending] = pending_todos + settings[:container_name]="deferred_pending" + + render :partial => "todos/collection", + :object => deferred_todos+pending_todos, + :locals => {:settings => settings.reverse_merge!(default_collection_settings)} + end + + def show_todos_without_project(todos_without_project) + render :partial => 'todos/collection', + :object => todos_without_project, + :locals => {:settings => { + :collapsible => true, + :container_name => "without_project" + } + } + end + + def todos_container(settings={}) + container_name = settings[:container_name] + settings.reverse_merge!({ + :id => "#{container_name}_container", + :class => "container #{container_name}", + }) + + content_tag(:div, + :class=>settings[:class], + :id=>settings[:id], + :style => "display:" + (settings[:show_container] ? "block" : "none")) do + yield + end + end + + def todos_container_header(settings={}) + settings.reverse_merge!({ + :title => t("todos.actions.#{settings[:parent_container_type]}_#{settings[:container_name]}", :param => settings[:title_param]) + }) + header = settings[:link_in_header].nil? ? "" : content_tag(:div, :class=>"add_note_link"){settings[:link_in_header]} + header += content_tag(:h2) do + toggle = settings[:collapsible] ? container_toggle("toggle_#{settings[:container_name]}") : "" + "#{toggle} #{settings[:title]} #{settings[:append_descriptor]}".html_safe + end + header.html_safe + end + + def todos_container_items(collection, settings={}) + settings.reverse_merge!({:id => "#{settings[:container_name]}"}) + # do not pass :class to partial locals + settings.delete(:class) + + content_tag(:div, :id =>settings[:id]+"_items", :class=>"items toggle_target") do + todos_container_empty_message(settings[:container_name], settings[:id], collection.empty?) + + render(:partial => "todos/todo", :collection => collection, :locals => settings) + end end def remote_star_icon(todo=@todo) diff --git a/app/models/project.rb b/app/models/project.rb index 85005f9e..1cc84500 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -167,4 +167,8 @@ class NullProject nil end + def name + "" + end + end diff --git a/app/views/contexts/_context.html.erb b/app/views/contexts/_context.html.erb index 950f0402..096625a7 100644 --- a/app/views/contexts/_context.html.erb +++ b/app/views/contexts/_context.html.erb @@ -4,17 +4,17 @@ # rendering of "due in x days" that change without touching updated at of the todo cache [context, @source_view, current_user.date.strftime("%Y%m%d"), @tag_name] do %> -
"> -

- <%= container_toggle("toggle_c#{context.id}") %> - <%= show_context_name(context) %> -

-
-
-
-

<%= t 'contexts.no_actions' %>

-
- <%= render :partial => "todos/todo", :collection => @not_done, :locals => { :parent_container_type => "context" } %> -
-
+ + <%= + render :partial => 'todos/collection', + :object => @not_done, + :locals => { :settings => { + :id => "c#{context.id}", + :collapsible => settings[:collapsible], + :container_name => 'context', + :title => show_context_name(context), + :show_empty_containers => @show_empty_containers + }} + %> + <% end %> diff --git a/app/views/contexts/show.html.erb b/app/views/contexts/show.html.erb index f3b3f804..7aca31c7 100644 --- a/app/views/contexts/show.html.erb +++ b/app/views/contexts/show.html.erb @@ -1,9 +1,14 @@ +<% + suffix_completed = t('contexts.last_completed_in_context', :number=>prefs.show_number_completed) + deferred_pending_options = {:append_descriptor => nil, :parent_container_type => 'context'} + done_todo_options = {:append_descriptor => suffix_completed, :suppress_context => true, :parent_container_type => 'context'} +-%>
-<%= render :partial => @context, :locals => { :collapsible => false } %> -<%= render :partial => "todos/deferred", :object => @deferred, :locals => { :collapsible => false, :append_descriptor => t('contexts.todos_append'), :parent_container_type => 'context', :pending => @pending } %> -<% unless @max_completed==0 -%> - <%= render :partial => "todos/completed", :object => @done, :locals => { :suppress_context => true, :collapsible => false, :append_descriptor => t('contexts.last_completed_in_context', :number=>prefs.show_number_completed) } %> -<% end -%> + <%= render :partial => @context, :locals => { :settings => {:collapsible => false }} %> + + <%= show_deferred_pending_todos(@deferred_todos, @pending_todos, deferred_pending_options) %> + + <%= show_done_todos(@done, done_todo_options) unless @done.nil? %>
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 46e6a1ae..f9acfdab 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -73,6 +73,7 @@
  • <%= navigation_link( t('layouts.navigation.stats'), stats_path, :title => t('layouts.navigation.stats_title')) %>

  • <%= group_view_by_menu_entry %> + <%= show_empty_containers_menu_entry %>
  • <%= t('layouts.navigation.admin') %> diff --git a/app/views/projects/_project.html.erb b/app/views/projects/_project.html.erb index 1d6cfa2f..9451a061 100644 --- a/app/views/projects/_project.html.erb +++ b/app/views/projects/_project.html.erb @@ -5,18 +5,19 @@ cache [project, @source_view, current_user.date.strftime("%Y%m%d")] do %> <%= render :partial => "project_settings_container", :locals => {:project => project} if source_view_is :project %> - -
    "> -

    - <%= container_toggle("toggle_p#{project.id}") if collapsible %> - <%= source_view_is(:project) ? t('projects.actions_in_project_title') : show_project_name(project) %> -

    -
    -
    -

    <%= t('projects.no_actions_in_project') %>

    -
    - <%= render :partial => "todos/todo", :collection => @not_done, :locals => { :parent_container_type => "project" } %> -
    -
    + + <%= + title = source_view_is(:project) ? t('projects.actions_in_project_title') : show_project_name(project) + + render :partial => 'todos/collection', + :object => @not_done, + :locals => { :settings => { + :id => "p#{project.id}", + :collapsible => settings[:collapsible], + :title => title, + :container_name => 'project', + :show_empty_containers => @show_empty_containers + }} + %> <% end %> diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index 5d1d8c55..4c50c89a 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -1,14 +1,20 @@ +<% + deferred_pending_options = {:append_descriptor => nil, :parent_container_type => 'project'} + done_todo_options = { + :append_descriptor => t('projects.last_completed_in_project', :number=>prefs.show_number_completed), + :suppress_project => true, + :parent_container_type => 'project' + } +-%>
    -
    - <%= project_next_prev %> -
    + <%= project_next_prev %> - <%= render :partial => @project, :locals => {:collapsible => false } %> - <%= render :partial => "todos/deferred", :object => @deferred_todos, :locals => { :collapsible => false, :append_descriptor => t('projects.todos_append'), :parent_container_type => 'project', :pending => @pending_todos } %> - <% unless @max_completed==0 -%> - <%= render :partial => "todos/completed", :object => @done, :locals => { :collapsible => false, :suppress_project => true, :append_descriptor => t('projects.todos_append') } %> - <% end -%> + <%= render :partial => @project, :locals => {:settings => {:collapsible => false }} %> + <%= show_deferred_pending_todos(@deferred_todos, @pending_todos, deferred_pending_options) %> + + <%= show_done_todos(@done, done_todo_options) unless @done.nil? %> +
    @@ -29,4 +35,4 @@
    <%= render :partial => "shared/add_new_item_form" %> <%= render :file => "sidebar/sidebar" %> -
    +
    \ No newline at end of file diff --git a/app/views/todos/_collection.html.erb b/app/views/todos/_collection.html.erb new file mode 100644 index 00000000..8d79bda0 --- /dev/null +++ b/app/views/todos/_collection.html.erb @@ -0,0 +1,8 @@ +<%= + settings[:show_container] = !collection.empty? || settings[:show_empty_containers] + + todos_container(settings) do + todos_container_header(settings) + + todos_container_items(collection, settings) + end +%> \ No newline at end of file diff --git a/app/views/todos/_completed.html.erb b/app/views/todos/_completed.html.erb deleted file mode 100644 index e59107c4..00000000 --- a/app/views/todos/_completed.html.erb +++ /dev/null @@ -1,21 +0,0 @@ -<% suffix = append_descriptor ? append_descriptor : '' - suppress_context ||= false - suppress_project ||= false --%> -
    - -

    - <% if collapsible %> - <%= image_tag("blank.png", :alt => t('common.collapse_expand')) %> - <% end %> - <%= t('todos.completed_actions') %> <%= raw suffix %> -

    -
    - -
    -

    <%= t('todos.no_completed_actions') %>

    -
    - - <%= render :partial => "todos/todo", :collection => completed, :locals => { :parent_container_type => "completed", :suppress_context => suppress_context, :suppress_project => suppress_project } %> -
    -
    diff --git a/app/views/todos/_deferred.html.erb b/app/views/todos/_deferred.html.erb deleted file mode 100644 index 95c7ce02..00000000 --- a/app/views/todos/_deferred.html.erb +++ /dev/null @@ -1,18 +0,0 @@ -
    -

    - <% if collapsible %> - <%= image_tag("blank.png", :alt => t('common.collapse_expand')) %> - <% end %> - <%= t('todos.deferred_pending_actions') %> <%= raw(append_descriptor ? append_descriptor : '') %> -

    - -
    -
    -

    <%= t('todos.no_deferred_pending_actions') %>

    -
    - - <%= render :partial => "todos/todo", :collection => deferred, :locals => { :parent_container_type => parent_container_type } %> - <%= render :partial => "todos/todo", :collection => pending, :locals => { :parent_container_type => parent_container_type } %> - -
    -
    diff --git a/app/views/todos/_hidden.html.erb b/app/views/todos/_hidden.html.erb deleted file mode 100644 index a95b70d6..00000000 --- a/app/views/todos/_hidden.html.erb +++ /dev/null @@ -1,17 +0,0 @@ - diff --git a/app/views/todos/index.html.erb b/app/views/todos/index.html.erb index 844210c3..260128bf 100644 --- a/app/views/todos/index.html.erb +++ b/app/views/todos/index.html.erb @@ -1,12 +1,13 @@
    - <%= empty_message_holder(@not_done_todos.empty?) %> + <%= empty_message_holder("not_done", @not_done_todos.empty?) %> <%= show_grouped_todos %> - <% unless @done.nil? -%> - <%= render(:partial => "todos/completed", :object => @done, - :locals => { :collapsible => true, :append_descriptor => nil }) -%> + <% if @group_view_by == 'context' -%> + <%= show_todos_without_project(@todos_with_project) unless @todos_without_project.nil? -%> <% end -%> + + <%= show_done_todos(@done, {:collapsible => true}) unless @done.nil? %>
    diff --git a/app/views/todos/tag.html.erb b/app/views/todos/tag.html.erb index 5cb0ad03..39196ef4 100644 --- a/app/views/todos/tag.html.erb +++ b/app/views/todos/tag.html.erb @@ -1,29 +1,27 @@ +<% + options = { + :collapsible => false, + :parent_container_type => 'tag', + :title_param => @tag_title + } + deferred_pending_options=options.clone.merge({:deferred => @deferred_todos, :pending => @pending_todos}) + hidden_options = options.clone + done_options = options.clone +-%>
    - <%= empty_message_holder(@not_done_todos.empty?) %> + <%= empty_message_holder("not_done_with_tag", @not_done_todos.empty?, @tag_name) %> <%= show_grouped_todos %> - <% unless @deferred_todos.nil? -%> - <%= render :partial => "todos/deferred", :locals => { - :deferred => @deferred_todos, - :pending => @pending_todos, - :collapsible => true, - :append_descriptor => t('todos.tagged_with', :tag_name => @tag_title), - :parent_container_type => 'tag' - } %> - <% end -%> + <%= show_deferred_pending_todos(@deferred_todos, @pending_todos, deferred_pending_options) %> - <% unless @hidden_todos.nil? -%> - <%= render :partial => "todos/hidden", :object => @hidden_todos, :locals => { :collapsible => true, :append_descriptor => t('todos.tagged_with', :tag_name => @tag_title) } %> - <% end -%> + <%= show_hidden_todos(@hidden_todos, hidden_options) unless @hidden_todos.nil? %> - <% unless @done.nil? -%> - <%= render :partial => "todos/completed", :object => @done, - :locals => { :collapsible => true, :append_descriptor => t('todos.tagged_with', :tag_name => @tag_title) } %> - <% end -%> -
    + <%= show_done_todos(@done, done_options) unless @done.nil? %> + +
    <%= render :partial => "shared/add_new_item_form" %> <%= render :file => "sidebar/sidebar" %> -
    +
    \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index 632b24d1..fccd20a6 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1,65 +1,5 @@ --- en: - layouts: - toggle_notes: Toggle notes - toggle_contexts: "Toggle collapsed contexts" - toggle_contexts_title: "Make collapsed contexts (in)visible" - next_actions_rss_feed: RSS feed of next actions - toggle_notes_title: Toggle all notes - mobile_navigation: - new_action: New - logout: Logout - feeds: Feeds - full: Full Site - starred: Starred - projects: Projects - tickler: Tickler - contexts: Contexts - home: Home - navigation: - manage_users_title: Add or delete users - recurring_todos: Repeating todos - api_docs: REST API Docs - feeds: Feeds - starred: Starred - notes_title: View all notes - review_title: Make review - stats: Statistics - tickler_title: Tickler - manage_users: Manage users - export_title: Import and export data - preferences: Preferences - integrations_: Integrate Tracks - feeds_title: See a list of available feeds - calendar_title: Calendar of due actions - completed_tasks: Done - stats_title: See your statistics - tickler: Tickler - home_title: Home - starred_title: See your starred actions - recurring_todos_title: Manage recurring actions - view: View - organize: Organize - completed_tasks_title: Completed - home: Home - export: Export - contexts_title: Contexts - calendar: Calendar - projects_title: Projects - search: Search All Items - preferences_title: Show my preferences - admin: Admin - help: "?" - mobile: Mobile Site - group_view_by_context: "Order by context" - group_view_by_project: "Order by project" - group_view_by_title: "Change the ordering of the actions on this page" - integrations: - opensearch_description: Search in Tracks - applescript_next_action_prompt: "Description of next action:" - gmail_description: Gadget to add Tracks to Gmail as a gadget - applescript_success_after_id: created - applescript_success_before_id: New next action with ID number: format: separator: . @@ -92,94 +32,6 @@ en: precision: format: delimiter: "" - common: - back: Back - third: Third - recurring_todos: Repeating Actions - actions: Actions - actions_midsentence: - zero: actions - one: action - other: actions - add: Add - previous: Previous - show_all: Show all - logout: Logout - go_back: Go back - optional: optional - week: week - cancel: Cancel - none: None - second: Second - month: month - server_error: An error occurred on the server. - notes: Notes - review: Review - last: Last - projects: Projects - action: Action - project: Project - ok: Ok - contribute: Contribute - website: Website - first: First - numbered_step: Step %{number} - sort: - by_task_count_title: Sort by number of tasks - by_task_count_title_confirm: Are you sure that you want to sort these projects by the number of tasks? This will replace the existing sort order. - alphabetically: Alphabetically - alphabetically_confirm: Are you sure that you want to sort these projects alphabetically? This will replace the existing sort order. - alphabetically_title: Sort projects alphabetically - sort: Sort - by_task_count: By number of tasks - fourth: Fourth - create: Create - months: months - contexts: Contexts - errors_with_fields: "There were problems with the following fields:" - next: Next - todo: todo - note: - zero: "no notes" - one: "1 note" - other: "%{count} notes" - context: Context - drag_handle: DRAG - description: Description - bugs: Bugs - update: Update - forth: Forth - weeks: weeks - wiki: Wiki - email: Email - mailing_list: Mailing List - search: Search - ajaxError: There was an error retrieving from server - days_midsentence: - zero: days - one: day - other: days - deferred: deferred - not_available_abbr: "n/a" - collapse_expand: Collapse/expand - data: - import_successful: Import was successful. - import_errors: Some errors occurred during import - models: - project: - feed_title: Tracks Projects - feed_description: Lists all the projects for %{username} - todo: - error_date_must_be_future: must be a date in the future - user: - error_context_not_associated: Context id %{context} not associated with user id %{user}. - error_project_not_associated: Project id %{project} not associated with user id %{user}. - preference: - due_on: Due on %{date} - due_in: Due in %{days} days - due_styles: - - Due in ___ days - - Due on _______ activerecord: attributes: project: @@ -259,6 +111,689 @@ en: header: one: 1 error prohibited this %{model} from being saved other: "%{count} errors prohibited this %{model} from being saved" + models: + project: + feed_title: Tracks Projects + feed_description: Lists all the projects for %{username} + todo: + error_date_must_be_future: must be a date in the future + user: + error_context_not_associated: Context id %{context} not associated with user id %{user}. + error_project_not_associated: Project id %{project} not associated with user id %{user}. + preference: + due_on: Due on %{date} + due_in: Due in %{days} days + due_styles: + - Due in ___ days + - Due on _______ + datetime: + prompts: + minute: Minute + second: Seconds + month: Month + hour: Hour + day: Day + year: Year + distance_in_words: + less_than_x_minutes: + one: less than a minute + other: less than %{count} minutes + zero: less than 1 minute + x_days: + one: 1 day + other: "%{count} days" + almost_x_years: + one: almost 1 year + other: almost %{count} years + x_seconds: + one: 1 second + other: "%{count} seconds" + about_x_hours: + one: about 1 hour + other: about %{count} hours + less_than_x_seconds: + one: less than 1 second + other: less than %{count} seconds + zero: less than 1 second + x_months: + one: 1 month + other: "%{count} months" + x_minutes: + one: 1 minute + other: "%{count} minutes" + about_x_years: + one: about 1 year + other: about %{count} years + about_x_months: + one: about 1 month + other: about %{count} months + over_x_years: + one: over 1 year + other: over %{count} years + half_a_minute: half a minute + time: + am: am + formats: + default: "%a, %d %b %Y %H:%M:%S %z" + time: "" + short: "%d %b %H:%M" + month_day: "%B %d" + long: "%B %d, %Y %H:%M" + stats: "%a %d-%m" + pm: pm + date: + month_names: + - + - January + - February + - March + - April + - May + - June + - July + - August + - September + - October + - November + - December + abbr_day_names: + - Sun + - Mon + - Tue + - Wed + - Thu + - Fri + - Sat + order: + - :year + - :month + - :day + formats: + only_day: "" + default: "%Y-%m-%d" + short: "%b %d" + month_day: "" + long: "%B %d, %Y" + longer: "%A %B %d, %Y" + day_names: + - Sunday + - Monday + - Tuesday + - Wednesday + - Thursday + - Friday + - Saturday + abbr_month_names: + - + - Jan + - Feb + - Mar + - Apr + - May + - Jun + - Jul + - Aug + - Sep + - Oct + - Nov + - Dec + support: + array: + words_connector: ", " + last_word_connector: ", and " + two_words_connector: " and " + select: + prompt: Please select + errors: + user_unauthorized: "401 Unauthorized: Only administrative users are allowed access to this function." + common: + back: Back + third: Third + recurring_todos: Repeating Actions + actions: Actions + actions_midsentence: + zero: actions + one: action + other: actions + add: Add + previous: Previous + show_all: Show all + logout: Logout + go_back: Go back + optional: optional + week: week + cancel: Cancel + none: None + second: Second + month: month + server_error: An error occurred on the server. + notes: Notes + review: Review + last: Last + projects: Projects + action: Action + project: Project + ok: Ok + contribute: Contribute + website: Website + first: First + numbered_step: Step %{number} + sort: + by_task_count_title: Sort by number of tasks + by_task_count_title_confirm: Are you sure that you want to sort these projects by the number of tasks? This will replace the existing sort order. + alphabetically: Alphabetically + alphabetically_confirm: Are you sure that you want to sort these projects alphabetically? This will replace the existing sort order. + alphabetically_title: Sort projects alphabetically + sort: Sort + by_task_count: By number of tasks + fourth: Fourth + create: Create + months: months + contexts: Contexts + errors_with_fields: "There were problems with the following fields:" + next: Next + todo: todo + note: + zero: "no notes" + one: "1 note" + other: "%{count} notes" + context: Context + drag_handle: DRAG + description: Description + bugs: Bugs + update: Update + forth: Forth + weeks: weeks + wiki: Wiki + email: Email + mailing_list: Mailing List + search: Search + ajaxError: There was an error retrieving from server + days_midsentence: + zero: days + one: day + other: days + deferred: deferred + not_available_abbr: "n/a" + collapse_expand: Collapse/expand + shared: + multiple_next_actions: Multiple next actions (one on each line) + hide_form: Hide form + toggle_single: Add a next action + add_action: Add action + add_actions: Add actions + add_context: Add Context + tags_for_all_actions: Tags for all actions (sep. with commas) + toggle_single_title: Add a new next action + project_for_all_actions: Project for all actions + context_for_all_actions: Context for all actions + toggle_multi: Add multiple next actions + separate_tags_with_commas: separate with commas + toggle_multi_title: Toggle single/multi new action form + hide_action_form_title: Hide new action form + make_actions_dependent: Make actions dependent on each other + states: + hidden_plural: Hidden + completed: Completed + completed_plural: Completed + visible_plural: Visible + visible: Visible + close: Closed + closed_plural: Closed + active_plural: Active + hidden: Hidden + active: Active + review_plural: Dated + review: Dated + stalled_plural: Stalled + stalled: Stalled + blocked_plural: Blocked + blocked: Blocked + current_plural: Up-to-date + current: Up-to-date + layouts: + toggle_notes: Toggle notes + toggle_contexts: "Toggle collapsed contexts" + toggle_contexts_title: "Make collapsed contexts (in)visible" + next_actions_rss_feed: RSS feed of next actions + toggle_notes_title: Toggle all notes + mobile_navigation: + new_action: New + logout: Logout + feeds: Feeds + full: Full Site + starred: Starred + projects: Projects + tickler: Tickler + contexts: Contexts + home: Home + navigation: + manage_users_title: Add or delete users + recurring_todos: Repeating todos + api_docs: REST API Docs + feeds: Feeds + starred: Starred + notes_title: View all notes + review_title: Make review + stats: Statistics + tickler_title: Tickler + manage_users: Manage users + export_title: Import and export data + preferences: Preferences + integrations_: Integrate Tracks + feeds_title: See a list of available feeds + calendar_title: Calendar of due actions + completed_tasks: Done + stats_title: See your statistics + tickler: Tickler + home_title: Home + starred_title: See your starred actions + recurring_todos_title: Manage recurring actions + view: View + organize: Organize + completed_tasks_title: Completed + home: Home + export: Export + contexts_title: Contexts + calendar: Calendar + projects_title: Projects + search: Search All Items + preferences_title: Show my preferences + admin: Admin + help: "?" + mobile: Mobile Site + group_view_by_context: "Order by context" + group_view_by_project: "Order by project" + group_view_by_title: "Change the ordering of the actions on this page" + show_empty_containers_project: "Show empty projects" + show_empty_containers_context: "Show empty contexts" + show_empty_containers_title: "Show or hide the empty projects or contexts" + footer: + send_feedback: Send feedback on %{version} + sidebar: + list_name_active_contexts: Active contexts + list_name_active_projects: Active projects + list_empty: None + list_name_completed_projects: Completed projects + list_name_hidden_projects: Hidden projects + list_name_hidden_contexts: Hidden contexts + todos: + no_actions: + hidden: Currently there are no hidden actions found + tag_hidden: Currently there are no hidden actions found + without_project: Currently there are no actions without a project + deferred_pending: "Currently there are no deferred or pending actions" + recurring_todos: Currently there are no recurring todos + completed: Currently there are no completed actions + title: No actions found + not_done_with_tag: "Currently there are no incomplete actions with the tag '%{param}'" + completed_recurring: Currently there are no completed recurring todos + not_done: Currently there are no incomplete actions + project: Currently there are no incomplete actions in this project + context: Currently there are no incomplete actions in this context + actions: + completed: Completed actions + tag_completed: "Completed actions tagged with '%{param}'" + without_project: "Actions without project" + project_project: "Actions in this project" + project_deferred_pending: Deferred/pending actions in this project + context_deferred_pending: Deferred/pending actions in this context + tag_deferred_pending: "Deferred/pending actions tagged with '%{param}'" + project_completed: Completed actions in this project + context_completed: Completed actions in this context + tag_hidden: "Hidden actions tagged with '%{param}'" + show_from: Show from + error_starring_recurring: "Could not toggle the star of recurring todo \'%{description}\'" + recurring_action_deleted: Action was deleted. Because this action is recurring, a new action was added +>>>>>>> do a big refactor of rendering collections of todos for home page, tag page, project page, context page + completed_recurring: Completed recurring todos + added_new_next_action: Added new next action + completed_rest_of_previous_month: Completed in the rest of the previous month + blocked_by: Blocked by %{predecessors} + star_action: Star this action + completed_recurrence_completed: There is no next action after the recurring action you just deleted. The recurrence is completed + defer_date_after_due_date: Defer date is after due date. Please edit and adjust due date before deferring. + unable_to_add_dependency: Unable to add dependency + done: Done? + star_action_with_description: "star the action '%{description}'" + tagged_with: "tagged with '%{tag_name}'" + completed: Completed + edit_action_with_description: "Edit the action '%{description}'" + action_due_on: (action due on %{date}) + remove_dependency: Remove dependency (does not delete the action) + archived_tasks_title: TRACKS::Archived completed tasks + list_incomplete_next_actions: Lists incomplete next actions + tags: Tags (separate with commas) + action_deleted_success: Successfully deleted next action + new_related_todo_created: A new todo was added which belongs to this recurring todo + context_changed: Context changed to %{name} + add_another_dependency: Add another dependency + mobile_todos_page_title: All actions + delete_recurring_action_title: Delete the recurring action + removed_predecessor: Removed %{successor} as dependency from %{predecessor}. + recurring_actions_title: TRACKS::Recurring Actions + next_action_needed: You need to submit at least one next action + action_saved: Action saved + scheduled_overdue: Scheduled to show %{days} days ago + action_deleted_error: Failed to delete the action + edit_action: Edit action + added_new_context: Added new context + next_actions_description: "Filter:" + list_incomplete_next_actions_with_limit: Lists the last %{count} incomplete next actions + set_to_pending: "%{task} set to pending" + added_new_project: Added new project + next_actions_title_additions: + completed: actions completed + due_today: due today + due_within_a_week: due within a week + append_in_this_project: in this project + error_deleting_item: There was an error deleting the item %{description} + task_list_title: TRACKS::List tasks + no_actions_due_this_week: No actions due in rest of this week + error_completing_todo: There was an error completing / activating the recurring todo %{description} + recurring_pattern_removed: The recurrence pattern is removed from %{count} + convert_to_project: Make project + delete_recurring_action_confirm: "Are you sure that you want to delete the recurring action '%{description}'?" + completed_last_day: Completed in the last 24 hours + show_in_days: Show in %{days} days + no_project: --No project-- + error_saving_recurring: "There was an error saving the recurring todo \'%{description}\'" + new_related_todo_created_short: created a new todo + all_completed: All completed actions + feed_title_in_context: "in context '%{context}'" + completed_tagged_page_title: "TRACKS::Completed tasks with tag '%{tag_name}'" + edit: Edit + pending: Pending + completed_actions_with: "Completed actions with the tag '%{tag_name}'" + deleted_success: The action was deleted succesfully. + completed_tasks_title: TRACKS::Completed tasks + feed_title_in_project: "in project '%{project}'" + clear_due_date: Clear due date + hidden_actions: Hidden actions + error_removing_dependency: There was an error removing the dependency + was_due_on_date: was due on %{date} + show_on_date: Show on %{date} + recurrence_period: Recurrence period + deferred_actions_with: "Deferred actions with the tag '%{tag_name}'" + recurring_deleted_success: The recurring action was deleted succesfully. + confirm_delete: "Are you sure that you want to delete the action '%{description}'?" + deferred_tasks_title: TRACKS::Tickler + next_actions_title: Tracks - Next Actions + next_action_description: Next action description + clear_show_from_date: Clear show from date + calendar_page_title: TRACKS::Calendar + unresolved_dependency: The value you entered in the dependency field did not resolve to an existing action. This value will not be saved with the rest of the action. Continue? + in_hidden_state: in hidden state + show_today: Show Today + next_actions_due_date: + overdue_by: Overdue by %{days} day + due_today: Due Today + due_in_x_days: Due in %{days} days + overdue_by_plural: Overdue by %{days} days + due_tomorrow: Due Tomorrow + completed_last_x_days: Completed in the last %{count} days + defer_x_days: + one: Defer 1 day + other: Defer %{count} days + added_new_next_action_singular: Added new next action + feeds: + completed: "Completed: %{date}" + due: "Due: %{date}" + deferred_pending_actions: Deferred/pending actions + has_x_pending: + one: Has one pending action + other: Has %{count} pending actions + delete_action: Delete action + error_deleting_recurring: "There was an error deleting the recurring todo \'%{description}\'" + recurring_todos: Recurring todos + delete: Delete + cannot_add_dependency_to_completed_todo: Cannot add this action as a dependency to a completed action! + drag_action_title: Drag onto another action to make it depend on that action + no_last_completed_actions: No completed actions found + depends_on: Depends on + tickler_items_due: + one: One tickler item is now due - refresh the page to see it. + other: "%{count} tickler items are now due - refresh the page to see them." + action_marked_complete: "The action '%{description}' was marked as %{completed}" + completed_today: Completed today + added_new_next_action_plural: Added new next actions + new_related_todo_not_created_short: did not create todo + completed_rest_of_week: Completed in the rest of this week + error_starring: "Could not toggle the star of this todo '%{description}'" + calendar: + get_in_ical_format: Get this calendar in iCal format + due_next_week: Due next week + no_actions_due_next_week: No actions due in next week + due_this_week: Due in rest of this week + due_today: Due today + no_actions_due_today: No actions due today + due_next_month_and_later: Due in %{month} and later + no_actions_due_after_this_month: No actions due after this month + due_this_month: Due in rest of %{month} + no_actions_due_this_month: No actions due in rest of this month + show_tomorrow: Show Tomorrow + tagged_page_title: "TRACKS::Tagged with '%{tag_name}'" + action_deferred: "The action '%{description}' was deferred" + mark_complete: Mark complete + recurrence: + ends_on_number_times: Ends after %{number} times + ends_on_date: Ends on %{date} + every_work_day: Every work day + recurrence_on_due_date: the date that the todo is due + weekly_options: Settings for weekly recurring actions + weekly: Weekly + monthly_options: Settings for monthly recurring actions + starts_on: Starts on + daily_options: Settings for daily recurring actions + monthly: Monthly + pattern: + month_names: + - + - January + - February + - Match + - April + - May + - June + - July + - August + - September + - October + - November + - December + third: third + every_n: every %{n} + on_day_n: on day %{n} + second: second + every_xth_day_of_every_n_months: every %{x} %{day} of every %{n_months} + from: from + weekly: weekly + last: last + every_day: every day + the_xth_day_of_month: the %{x} %{day} of %{month} + times: for %{number} times + on_work_days: on work days + first: first + every_year_on: every year on %{date} + day_names: + - sunday + - monday + - tuesday + - wednesday + - thursday + - friday + - saturday + show: show + fourth: fourth + due: due + until: until + every_month: every month + show_option_always: always + daily: Daily + yearly_every_x_day: Every %{month} %{day} + recurrence_on_options: Set recurrence on + daily_every_number_day: Every %{number} day(s) + show_options: Show the todo + weekly_every_number_week: Returns every %{number} week on + ends_on: Ends on + show_days_before: "%{days} days before the todo is due" + from_tickler: the date todo comes from tickler (no due date set) + no_end_date: No end date + day_x_on_every_x_month: Day %{day} on every %{month} month + yearly_options: Settings for yearly recurring actions + yearly_every_xth_day: The %{day} %{day_of_week} of %{month} + monthly_every_xth_day: The %{day} %{day_of_week} of every %{month} month + yearly: Yearly + added_dependency: Added %{dependency} as dependency. + all_completed_tagged_page_title: TRACKS::All completed tasks with tag %{tag_name} + completed_rest_of_month: Completed in the rest of this month + recurrence_completed: There is no next action after the recurring action you just finished. The recurrence is completed + error_toggle_complete: Could not mark this todo complete + in_pending_state: in pending state + due: Due + action_marked_complete_error: "The action '%{description}' was NOT marked as %{completed} due to an error on the server." + depends_on_separate_with_commas: Depends on (separate with commas) + action_saved_to_tickler: Action saved to tickler + recurring_action_saved: Recurring action saved + completed_in_archive: + one: There is a completed action in the archive. + other: There are %{count} completed actions in the archive. + to_tickler: to tickler + next_actions_description_additions: + completed: in the last %{count} days + due_date: with a due date %{due_date} or earlier + overdue: Overdue + add_new_recurring: Add a new recurring action + edit_recurring_todo: Edit repeating action + see_all_completed: You can see all completed actions %{link} + all_completed_here: here + contexts: + delete_context_title: Delete context + all_completed_tasks_title: "TRACKS::All Completed actions in the context '%{context_name}'" + hide_form: Hide form + show_form_title: Add a context + delete_context_confirmation: "Are you sure that you want to delete the context '%{name}'? Be aware that this will also delete all (repeating) actions in this context!" + delete_context: Delete context + edit_context: Edit context + hide_form_title: Hide new context form + context_hide: Hide from front page? + context_state: Context state + hidden_contexts: Hidden contexts + no_contexts_active: Currently there are no active contexts + show_form: Create a new context + visible_contexts: Visible contexts + save_status_message: Context saved + add_context: Add Context + context_name: Context name + update_status_message: Name of context was changed + completed_tasks_title: "TRACKS::Completed actions in the context '%{context_name}'" + new_context_post: "' will be also created. Are you sure?" + status_active: Context is active + last_completed_in_context: "(last %{number})" + context_deleted: "Deleted context '%{name}'" + no_contexts_hidden: Currently there are no hidden contexts + new_context_pre: New context ' + status_hidden: Context is hidden + todos_append: in this context + projects: + was_marked_hidden: has been marked as hidden + edit_project_title: Edit project + default_tags_removed_notice: Removed the default tags + default_context_set: Set project's default context to %{default_context} + all_completed_tasks_title: "TRACKS::List All Completed Actions in Project '%{project_name}'" + hide_form: Hide form + page_title: "TRACKS::Project: %{project}" + show_form_title: Create a new project + list_completed_projects: TRACKS::List Completed Projects + to_new_project_page: Take me to the new project page + no_notes_attached: Currently there are no notes attached to this project + this_project: This project + project_state: Project is %{state}. + last_completed_in_project: (last %{number}) + no_last_completed_projects: No completed projects found + notes: Notes + no_last_completed_recurring_todos: No completed recurring todos found + notes_empty: There are no notes for this project + no_projects: Currently there are no projects + hide_form_title: Hide new project form + with_no_default_context: with no default context + delete_project: Delete project + show_form: Add a project + actions_in_project_title: Actions in this project + delete_project_confirmation: "Are you sure that you want to delete the project '%{name}'?" + with_default_context: "with a default context of '%{context_name}'" + set_default_tags_notice: Set project's default tags to %{default_tags} + is_active: is active + settings: Settings + completed_projects: Completed projects + with_default_tags: "and with '%{tags}' as the default tags" + list_projects: TRACKS::List Projects + list_reviews: TRACKS::Review + project_saved_status: Project saved + add_project: Add Project + add_note: Add a note + completed_tasks_title: "TRACKS::List Completed Actions in Project '%{project_name}'" + delete_project_title: Delete the project + hidden_projects: Hidden projects + add_note_submit: Add note + was_marked_complete: has been marked as completed + default_context_removed: Removed default context + default_context: The default context for this project is %{context} + status_project_name_changed: Name of project was changed + active_projects: Active projects + no_default_context: This project does not have a default context + with_no_default_tags: and with no default tags + edit_project_settings: Edit Project Settings + state: This project is %{state} + notes: + delete_confirmation: "Are you sure that you want to delete the note '%{id}'?" + delete_item_title: Delete item + delete_note_title: "Delete the note '%{id}'" + note_link_title: Show note %{id} + show_note_title: Show note + deleted_note: "Deleted note '%{id}'" + edit_item_title: Edit item + note_location_link: "In:" + no_notes_available: "Currently there are no notes: add notes to projects from individual project pages." + note_header: Note %{id} + delete_note_confirm: "Are you sure that you want to delete the note '%{id}'?" + in_project: "In: " + integrations: + opensearch_description: Search in Tracks + applescript_next_action_prompt: "Description of next action:" + gmail_description: Gadget to add Tracks to Gmail as a gadget + applescript_success_after_id: created + applescript_success_before_id: New next action with ID + preferences: + open_id_url: Your OpenID URL is + staleness_starts_after: Staleness starts after %{days} days + change_identity_url: Change Your Identity URL + change_password: Change your password + password_changed: You password has been changed, please log on again. + updated: Preferences updated + page_title: TRACKS::Preferences + title: Your preferences + token_description: Token (for feeds and API use) + is_false: "false" + show_number_completed: Show %{number} completed items + page_title_edit: TRACKS::Edit Preferences + is_true: "true" + edit_preferences: Edit preferences + sms_context_none: None + generate_new_token: Generate a new token + token_header: Your token + authentication_header: Your authentication + current_authentication_type: Your authentication type is %{auth_type} + change_authentication_type: Change your authentication type + tabs: + authentication: Authentication + tracks_behavior: Tracks behavior + profile: Profile + date_and_time: Date and time + generate_new_token_confirm: Are you sure? Generating a new token will replace the existing one and break any external usages of this token. + data: + import_successful: Import was successful. + import_errors: Some errors occurred during import stats: index_title: TRACKS::Statistics within_one: Within 1 @@ -363,452 +898,6 @@ en: number_of_actions: Number of actions time_of_day: Time of day action_selection_title: TRACKS::Action selection - todos: - show_from: Show from - error_starring_recurring: "Could not toggle the star of recurring todo \'%{description}\'" - recurring_action_deleted: Action was deleted. Because this action is recurring, a new action was added - completed_actions: Completed actions - completed_recurring: Completed recurring todos - added_new_next_action: Added new next action - completed_rest_of_previous_month: Completed in the rest of the previous month - blocked_by: Blocked by %{predecessors} - star_action: Star this action - completed_recurrence_completed: There is no next action after the recurring action you just deleted. The recurrence is completed - defer_date_after_due_date: Defer date is after due date. Please edit and adjust due date before deferring. - unable_to_add_dependency: Unable to add dependency - done: Done? - star_action_with_description: "star the action '%{description}'" - tagged_with: tagged with ‘%{tag_name}’ - completed: Completed - no_deferred_actions_with: No deferred actions with the tag '%{tag_name}' - edit_action_with_description: Edit the action '%{description}' - no_hidden_actions: Currently there are no hidden actions found - action_due_on: (action due on %{date}) - remove_dependency: Remove dependency (does not delete the action) - archived_tasks_title: TRACKS::Archived completed tasks - list_incomplete_next_actions: Lists incomplete next actions - tags: Tags (separate with commas) - action_deleted_success: Successfully deleted next action - new_related_todo_created: A new todo was added which belongs to this recurring todo - context_changed: Context changed to %{name} - add_another_dependency: Add another dependency - mobile_todos_page_title: All actions - delete_recurring_action_title: Delete the recurring action - removed_predecessor: Removed %{successor} as dependency from %{predecessor}. - recurring_actions_title: TRACKS::Recurring Actions - next_action_needed: You need to submit at least one next action - action_saved: Action saved - scheduled_overdue: Scheduled to show %{days} days ago - action_deleted_error: Failed to delete the action - edit_action: Edit action - added_new_context: Added new context - next_actions_description: "Filter:" - list_incomplete_next_actions_with_limit: Lists the last %{count} incomplete next actions - set_to_pending: "%{task} set to pending" - added_new_project: Added new project - next_actions_title_additions: - completed: actions completed - due_today: due today - due_within_a_week: due within a week - older_completed_items: "" - append_in_this_project: in this project - error_deleting_item: There was an error deleting the item %{description} - task_list_title: TRACKS::List tasks - no_actions_due_this_week: No actions due in rest of this week - no_deferred_pending_actions: Currently there are no deferred or pending actions - no_recurring_todos: Currently there are no recurring todos - error_completing_todo: There was an error completing / activating the recurring todo %{description} - recurring_pattern_removed: The recurrence pattern is removed from %{count} - convert_to_project: Make project - delete_recurring_action_confirm: Are you sure that you want to delete the recurring action '%{description}'? - completed_last_day: Completed in the last 24 hours - show_in_days: Show in %{days} days - no_project: --No project-- - error_saving_recurring: There was an error saving the recurring todo \'%{description}\' - new_related_todo_created_short: created a new todo - all_completed: All completed actions - feed_title_in_context: in context '%{context}' - completed_tagged_page_title: TRACKS::Completed tasks with tag '%{tag_name}' - edit: Edit - pending: Pending - completed_actions_with: Completed actions with the tag '%{tag_name}' - deleted_success: The action was deleted succesfully. - completed_tasks_title: TRACKS::Completed tasks - feed_title_in_project: in project '%{project}' - clear_due_date: Clear due date - hidden_actions: Hidden actions - error_removing_dependency: There was an error removing the dependency - was_due_on_date: was due on %{date} - show_on_date: Show on %{date} - recurrence_period: Recurrence period - deferred_actions_with: Deferred actions with the tag '%{tag_name}' - recurring_deleted_success: The recurring action was deleted succesfully. - confirm_delete: Are you sure that you want to delete the action '%{description}'? - deferred_tasks_title: TRACKS::Tickler - next_actions_title: Tracks - Next Actions - next_action_description: Next action description - no_completed_actions_with: No completed actions with the tag '%{tag_name}' - clear_show_from_date: Clear show from date - calendar_page_title: TRACKS::Calendar - unresolved_dependency: The value you entered in the dependency field did not resolve to an existing action. This value will not be saved with the rest of the action. Continue? - in_hidden_state: in hidden state - show_today: Show Today - no_actions_found_title: No actions found - next_actions_due_date: - overdue_by: Overdue by %{days} day - due_today: Due Today - due_in_x_days: Due in %{days} days - overdue_by_plural: Overdue by %{days} days - due_tomorrow: Due Tomorrow - completed_last_x_days: Completed in the last %{count} days - no_actions_with: Currently there are no incomplete actions with the tag '%{tag_name}' - defer_x_days: - one: Defer 1 day - other: Defer %{count} days - added_new_next_action_singular: Added new next action - no_completed_actions: Currently there are no completed actions. - feeds: - completed: "Completed: %{date}" - due: "Due: %{date}" - deferred_pending_actions: Deferred/pending actions - has_x_pending: - one: Has one pending action - other: Has %{count} pending actions - delete_action: Delete action - error_deleting_recurring: There was an error deleting the recurring todo \'%{description}\' - recurring_todos: Recurring todos - delete: Delete - cannot_add_dependency_to_completed_todo: Cannot add this action as a dependency to a completed action! - drag_action_title: Drag onto another action to make it depend on that action - no_last_completed_actions: No completed actions found - depends_on: Depends on - tickler_items_due: - one: One tickler item is now due - refresh the page to see it. - other: "%{count} tickler items are now due - refresh the page to see them." - action_marked_complete: The action '%{description}' was marked as %{completed} - completed_today: Completed today - added_new_next_action_plural: Added new next actions - new_related_todo_not_created_short: did not create todo - completed_rest_of_week: Completed in the rest of this week - error_starring: Could not toggle the star of this todo '%{description}' - calendar: - get_in_ical_format: Get this calendar in iCal format - due_next_week: Due next week - no_actions_due_next_week: No actions due in next week - due_this_week: Due in rest of this week - due_today: Due today - no_actions_due_today: No actions due today - due_next_month_and_later: Due in %{month} and later - no_actions_due_after_this_month: No actions due after this month - due_this_month: Due in rest of %{month} - no_actions_due_this_month: No actions due in rest of this month - show_tomorrow: Show Tomorrow - tagged_page_title: TRACKS::Tagged with '%{tag_name}' - action_deferred: The action '%{description}' was deferred - mark_complete: Mark complete - recurrence: - ends_on_number_times: Ends after %{number} times - ends_on_date: Ends on %{date} - every_work_day: Every work day - recurrence_on_due_date: the date that the todo is due - weekly_options: Settings for weekly recurring actions - weekly: Weekly - monthly_options: Settings for monthly recurring actions - starts_on: Starts on - daily_options: Settings for daily recurring actions - monthly: Monthly - pattern: - month_names: - - - - January - - February - - Match - - April - - May - - June - - July - - August - - September - - October - - November - - December - third: third - every_n: every %{n} - on_day_n: on day %{n} - second: second - every_xth_day_of_every_n_months: every %{x} %{day} of every %{n_months} - from: from - weekly: weekly - last: last - every_day: every day - the_xth_day_of_month: the %{x} %{day} of %{month} - times: for %{number} times - on_work_days: on work days - first: first - every_year_on: every year on %{date} - day_names: - - sunday - - monday - - tuesday - - wednesday - - thursday - - friday - - saturday - show: show - fourth: fourth - due: due - until: until - every_month: every month - show_option_always: always - daily: Daily - yearly_every_x_day: Every %{month} %{day} - recurrence_on_options: Set recurrence on - daily_every_number_day: Every %{number} day(s) - show_options: Show the todo - weekly_every_number_week: Returns every %{number} week on - ends_on: Ends on - show_days_before: "%{days} days before the todo is due" - from_tickler: the date todo comes from tickler (no due date set) - no_end_date: No end date - day_x_on_every_x_month: Day %{day} on every %{month} month - yearly_options: Settings for yearly recurring actions - yearly_every_xth_day: The %{day} %{day_of_week} of %{month} - monthly_every_xth_day: The %{day} %{day_of_week} of every %{month} month - yearly: Yearly - no_completed_recurring: Currently there are no completed recurring todos - added_dependency: Added %{dependency} as dependency. - no_deferred_actions: Currently there are no deferred actions. - all_completed_tagged_page_title: TRACKS::All completed tasks with tag %{tag_name} - completed_rest_of_month: Completed in the rest of this month - recurrence_completed: There is no next action after the recurring action you just finished. The recurrence is completed - error_toggle_complete: Could not mark this todo complete - no_actions_found: Currently there are no incomplete actions. - in_pending_state: in pending state - due: Due - action_marked_complete_error: The action '%{description}' was NOT marked as %{completed} due to an error on the server. - depends_on_separate_with_commas: Depends on (separate with commas) - action_saved_to_tickler: Action saved to tickler - recurring_action_saved: Recurring action saved - completed_in_archive: - one: There is a completed action in the archive. - other: There are %{count} completed actions in the archive. - to_tickler: to tickler - next_actions_description_additions: - completed: in the last %{count} days - due_date: with a due date %{due_date} or earlier - overdue: Overdue - add_new_recurring: Add a new recurring action - edit_recurring_todo: Edit repeating action - no_incomplete_actions: There are no incomplete actions - see_all_completed: You can see all completed actions %{link} - all_completed_here: here - notes: - delete_confirmation: Are you sure that you want to delete the note '%{id}'? - delete_item_title: Delete item - delete_note_title: Delete the note '%{id}' - note_link_title: Show note %{id} - show_note_title: Show note - deleted_note: Deleted note '%{id}' - edit_item_title: Edit item - note_location_link: "In:" - no_notes_available: "Currently there are no notes: add notes to projects from individual project pages." - note_header: Note %{id} - delete_note_confirm: Are you sure that you want to delete the note '%{id}'? - in_project: "In: " - states: - hidden_plural: Hidden - completed: Completed - completed_plural: Completed - visible_plural: Visible - visible: Visible - close: Closed - closed_plural: Closed - active_plural: Active - hidden: Hidden - active: Active - review_plural: Dated - review: Dated - stalled_plural: Stalled - stalled: Stalled - blocked_plural: Blocked - blocked: Blocked - current_plural: Up-to-date - current: Up-to-date - projects: - was_marked_hidden: has been marked as hidden - edit_project_title: Edit project - default_tags_removed_notice: Removed the default tags - default_context_set: Set project's default context to %{default_context} - no_actions_in_project: Currently there are no incomplete actions in this project - deferred_actions: Deferred actions for this project - all_completed_tasks_title: TRACKS::List All Completed Actions in Project '%{project_name}' - hide_form: Hide form - page_title: "TRACKS::Project: %{project}" - show_form_title: Create a new project - list_completed_projects: TRACKS::List Completed Projects - to_new_project_page: Take me to the new project page - no_notes_attached: Currently there are no notes attached to this project - deferred_actions_empty: There are no deferred actions for this project - this_project: This project - project_state: Project is %{state}. - todos_append: in this project - no_last_completed_projects: No completed projects found - notes: Notes - no_last_completed_recurring_todos: No completed recurring todos found - notes_empty: There are no notes for this project - no_projects: Currently there are no projects - hide_form_title: Hide new project form - with_no_default_context: with no default context - delete_project: Delete project - completed_actions_empty: There are no completed actions for this project - show_form: Add a project - actions_in_project_title: Actions in this project - delete_project_confirmation: Are you sure that you want to delete the project '%{name}'? - with_default_context: with a default context of '%{context_name}' - set_default_tags_notice: Set project's default tags to %{default_tags} - is_active: is active - settings: Settings - completed_projects: Completed projects - with_default_tags: and with '%{tags}' as the default tags - list_projects: TRACKS::List Projects - list_reviews: TRACKS::Review - project_saved_status: Project saved - add_project: Add Project - add_note: Add a note - completed_tasks_title: TRACKS::List Completed Actions in Project '%{project_name}' - delete_project_title: Delete the project - hidden_projects: Hidden projects - add_note_submit: Add note - was_marked_complete: has been marked as completed - completed_actions: Completed actions for this project - default_context_removed: Removed default context - default_context: The default context for this project is %{context} - status_project_name_changed: Name of project was changed - active_projects: Active projects - no_default_context: This project does not have a default context - with_no_default_tags: and with no default tags - edit_project_settings: Edit Project Settings - state: This project is %{state} - time: - am: am - formats: - default: "%a, %d %b %Y %H:%M:%S %z" - time: "" - short: "%d %b %H:%M" - month_day: "%B %d" - long: "%B %d, %Y %H:%M" - stats: "%a %d-%m" - pm: pm - preferences: - open_id_url: Your OpenID URL is - staleness_starts_after: Staleness starts after %{days} days - change_identity_url: Change Your Identity URL - change_password: Change your password - password_changed: You password has been changed, please log on again. - updated: Preferences updated - page_title: TRACKS::Preferences - title: Your preferences - token_description: Token (for feeds and API use) - is_false: "false" - show_number_completed: Show %{number} completed items - page_title_edit: TRACKS::Edit Preferences - is_true: "true" - edit_preferences: Edit preferences - sms_context_none: None - generate_new_token: Generate a new token - token_header: Your token - authentication_header: Your authentication - current_authentication_type: Your authentication type is %{auth_type} - change_authentication_type: Change your authentication type - tabs: - authentication: Authentication - tracks_behavior: Tracks behavior - profile: Profile - date_and_time: Date and time - generate_new_token_confirm: Are you sure? Generating a new token will replace the existing one and break any external usages of this token. - errors: - user_unauthorized: "401 Unauthorized: Only administrative users are allowed access to this function." - date: - month_names: - - - - January - - February - - March - - April - - May - - June - - July - - August - - September - - October - - November - - December - abbr_day_names: - - Sun - - Mon - - Tue - - Wed - - Thu - - Fri - - Sat - order: - - :year - - :month - - :day - formats: - only_day: "" - default: "%Y-%m-%d" - short: "%b %d" - month_day: "" - long: "%B %d, %Y" - longer: "%A %B %d, %Y" - day_names: - - Sunday - - Monday - - Tuesday - - Wednesday - - Thursday - - Friday - - Saturday - abbr_month_names: - - - - Jan - - Feb - - Mar - - Apr - - May - - Jun - - Jul - - Aug - - Sep - - Oct - - Nov - - Dec - support: - array: - words_connector: ", " - last_word_connector: ", and " - two_words_connector: " and " - select: - prompt: Please select - footer: - send_feedback: Send feedback on %{version} - shared: - multiple_next_actions: Multiple next actions (one on each line) - hide_form: Hide form - toggle_single: Add a next action - add_action: Add action - add_actions: Add actions - add_context: Add Context - tags_for_all_actions: Tags for all actions (sep. with commas) - toggle_single_title: Add a new next action - project_for_all_actions: Project for all actions - context_for_all_actions: Context for all actions - toggle_multi: Add multiple next actions - separate_tags_with_commas: separate with commas - toggle_multi_title: Toggle single/multi new action form - hide_action_form_title: Hide new action form - make_actions_dependent: Make actions dependent on each other users: successfully_deleted_user: Successfully deleted user %{username} failed_to_delete_user: Failed to delete user %{username} @@ -854,13 +943,6 @@ en: change_authentication_type: Change authentication type total_notes: Total notes select_authentication_type: Select your new authentication type and click 'Change authentication type' to replace your current settings. - sidebar: - list_name_active_contexts: Active contexts - list_name_active_projects: Active projects - list_empty: None - list_name_completed_projects: Completed projects - list_name_hidden_projects: Hidden projects - list_name_hidden_contexts: Hidden contexts feedlist: choose_context: Choose the context you want a feed of actions_due_today: Actions due today or earlier @@ -885,46 +967,17 @@ en: plain_text_feed: Plain Text Feed last_fixed_number: Last %{number} actions project_centric: Feeds for incomplete actions in a specific project - contexts: - delete_context_title: Delete context - all_completed_tasks_title: TRACKS::All Completed actions in the context '%{context_name}' - hide_form: Hide form - show_form_title: Add a context - delete_context_confirmation: Are you sure that you want to delete the context '%{name}'? Be aware that this will also delete all (repeating) actions in this context! - delete_context: Delete context - edit_context: Edit context - hide_form_title: Hide new context form - context_hide: Hide from front page? - context_state: Context state - hidden_contexts: Hidden contexts - no_contexts_active: Currently there are no active contexts - show_form: Create a new context - visible_contexts: Visible contexts - save_status_message: Context saved - add_context: Add Context - context_name: Context name - update_status_message: Name of context was changed - completed_tasks_title: TRACKS::Completed actions in the context '%{context_name}' - new_context_post: "' will be also created. Are you sure?" - status_active: Context is active - no_actions: Currently there are no incomplete actions in this context - last_completed_in_context: in this context (last %{number}) - context_deleted: Deleted context '%{name}' - no_contexts_hidden: Currently there are no hidden contexts - new_context_pre: New context ' - status_hidden: Context is hidden - todos_append: in this context login: login_cas: go to the CAS sign_in: Sign in - openid_identity_url_not_found: Sorry, no user by that identity URL exists (%{identity_url}) + openid_identity_url_not_found: "Sorry, no user by that identity URL exists (%{identity_url})" user_no_expiry: Stay logged in - cas_no_user_found: Hello, %{username}! You do not have an account on Tracks. + cas_no_user_found: "Hello, %{username}! You do not have an account on Tracks." cas_login: CAS Login successful_with_session_info: "Login successful:" please_login: Please log in to use Tracks - cas_logged_in_greeting: Hello, %{username}! You are authenticated. - cas_username_not_found: Sorry, no user by that CAS username exists (%{username}) + cas_logged_in_greeting: "Hello, %{username}! You are authenticated." + cas_username_not_found: "Sorry, no user by that CAS username exists (%{username})" mobile_use_openid: "…or login with an OpenID" cas_create_account: If you like to request on please go here to %{signup_link} account_login: Account login @@ -933,61 +986,16 @@ en: successful: Logged in successfully. Welcome back! option_separator: or, session_time_out: Session has timed out. Please %{link} - session_will_expire: session will expire after %{hours} hour(s) of inactivity. + session_will_expire: "session will expire after %{hours} hour(s) of inactivity." login_standard: go back to the standard login logged_out: You have been logged out of Tracks. login_with_openid: login with an OpenID unsuccessful: Login unsuccessful. log_in_again: log in again. - datetime: - prompts: - minute: Minute - second: Seconds - month: Month - hour: Hour - day: Day - year: Year - distance_in_words: - less_than_x_minutes: - one: less than a minute - other: less than %{count} minutes - zero: less than 1 minute - x_days: - one: 1 day - other: "%{count} days" - almost_x_years: - one: almost 1 year - other: almost %{count} years - x_seconds: - one: 1 second - other: "%{count} seconds" - about_x_hours: - one: about 1 hour - other: about %{count} hours - less_than_x_seconds: - one: less than 1 second - other: less than %{count} seconds - zero: less than 1 second - x_months: - one: 1 month - other: "%{count} months" - x_minutes: - one: 1 minute - other: "%{count} minutes" - about_x_years: - one: about 1 year - other: about %{count} years - about_x_months: - one: about 1 month - other: about %{count} months - over_x_years: - one: over 1 year - other: over %{count} years - half_a_minute: half a minute search: contexts_matching_query: Contexts matching query tags_matching_query: Tags matching query notes_matching_query: Notes matching query no_results: Your search yielded no results. todos_matching_query: Todos matching query - projects_matching_query: Projects matching query + projects_matching_query: Projects matching query diff --git a/test/functional/projects_controller_test.rb b/test/functional/projects_controller_test.rb index b78056be..f982d0b1 100644 --- a/test/functional/projects_controller_test.rb +++ b/test/functional/projects_controller_test.rb @@ -14,15 +14,15 @@ class ProjectsControllerTest < ActionController::TestCase p = projects(:timemachine) login_as :admin_user get :show, :id => p.to_param - assert_not_nil assigns['deferred'] - assert_equal 1, assigns['deferred'].size + assert_not_nil assigns['deferred_todos'] + assert_equal 1, assigns['deferred_todos'].size t = p.todos.not_completed[0] t.show_from = 1.days.from_now.utc t.save! get :show, :id => p.to_param - assert_equal 2, assigns['deferred'].size + assert_equal 2, assigns['deferred_todos'].size end def test_show_exposes_next_project_in_same_state