From bb6269f81c7029f39da97ec771efbf70d77cc2b9 Mon Sep 17 00:00:00 2001 From: Reinier Balt Date: Tue, 8 Mar 2011 23:28:48 +0100 Subject: [PATCH] fix tests for dependencies and fix minor issues --- app/controllers/todos_controller.rb | 2 +- app/helpers/todos_helper.rb | 2 +- app/views/todos/destroy.js.erb | 28 +- app/views/todos/toggle_check.js.erb | 21 +- config/locales/en.yml | 1 + config/locales/nl.yml | 603 +++++++++--------- features/dependencies.feature | 66 +- .../step_definitions/dependencies_steps.rb | 116 ++++ features/step_definitions/feedlist_steps.rb | 2 +- features/step_definitions/generic_steps.rb | 10 +- .../step_definitions/project_list_steps.rb | 4 +- .../step_definitions/recurring_todo_steps.rb | 8 +- features/step_definitions/todo_steps.rb | 135 ++-- features/support/world.rb | 4 + public/javascripts/application.js | 3 + 15 files changed, 571 insertions(+), 434 deletions(-) create mode 100644 features/step_definitions/dependencies_steps.rb diff --git a/app/controllers/todos_controller.rb b/app/controllers/todos_controller.rb index 57095af9..f5f639b7 100644 --- a/app/controllers/todos_controller.rb +++ b/app/controllers/todos_controller.rb @@ -447,7 +447,7 @@ class TodosController < ApplicationController format.js do if @saved determine_down_count - if source_view_is_one_of(:todo, :deferred) + if source_view_is_one_of(:todo, :deferred, :project) determine_remaining_in_context_count(@context_id) elsif source_view_is :calendar @original_item_due_id = get_due_id_for_calendar(@original_item_due) diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb index 2304a8dd..17ff926c 100644 --- a/app/helpers/todos_helper.rb +++ b/app/helpers/todos_helper.rb @@ -90,7 +90,7 @@ module TodosHelper end def remote_toggle_checkbox(todo=@todo) - check_box_tag('item_id', toggle_check_todo_path(todo), todo.completed?, :class => 'item-checkbox', + check_box_tag("mark_complete_#{todo.id}", toggle_check_todo_path(todo), todo.completed?, :class => 'item-checkbox', :title => todo.pending? ? t('todos.blocked_by', :predecessors => todo.uncompleted_predecessors.map(&:description).join(', ')) : "", :readonly => todo.pending?) end diff --git a/app/views/todos/destroy.js.erb b/app/views/todos/destroy.js.erb index c511f172..b5acc553 100644 --- a/app/views/todos/destroy.js.erb +++ b/app/views/todos/destroy.js.erb @@ -1,5 +1,5 @@ <%- if @saved -%> - TracksPages.page_notify('notice', '<%= escape_javascript("The action was deleted succesfully") %>', 5); + TracksPages.page_notify('notice', '<%= escape_javascript(t('todos.deleted_success')) %>', 5); TracksPages.set_page_badge(<%=@down_count%>); remove_todo_from_page(); show_new_todo_if_todo_was_recurring(); @@ -59,14 +59,24 @@ function show_new_todo_if_todo_was_recurring() { } function activate_pending_todos() { - <% # Activate pending todos that are successors of the deleted -%> - <% @pending_to_activate.each do |t| -%> - <% if source_view_is(:project) or source_view_is(:tag) %> - $('#<%=dom_id(t)%>').remove(); - <% end -%> - $('#<%=item_container_id(t)%>').append("<%=escape_javascript(render(:partial => t, :locals => { :parent_container_type => parent_container_type }))%>"); - $('#<%= dom_id(t, 'line')%>').effect('highlight', {}, 2000 ); - <% end -%> + <% # Activate pending todos that are successors of the completed + if @saved && @pending_to_activate + # do not render the js in case of an error or if no todos to activate + @pending_to_activate.each do |t| + html = escape_javascript(render(:partial => t, :locals => { :parent_container_type => parent_container_type })) + # only project and tag view have a deferred/blocked container + if source_view_is_one_of(:project,:tag) -%> + $('#<%= dom_id(t) %>').fadeOut(400, function() { + $('#<%= dom_id(t) %>').remove(); + $('#<%= item_container_id(t) %>').append("<%= html %>"); + <%= "$('#tickler-empty-nd').show();" if @remaining_deferred_or_pending_count==0 -%> + }); + <% else -%> + $('#<%= item_container_id(t) %>').append("<%= html%>"); + <% end -%> + TodoItems.highlight_todo('#<%= dom_id(t, 'line')%>'); + <% end -%> + <% end -%> } function html_for_new_recurring_todo() { diff --git a/app/views/todos/toggle_check.js.erb b/app/views/todos/toggle_check.js.erb index fe277420..9a702bfe 100644 --- a/app/views/todos/toggle_check.js.erb +++ b/app/views/todos/toggle_check.js.erb @@ -95,32 +95,33 @@ function update_empty_tag_container(next_steps) { <% if @new_recurring_todo # hide js if @new_recurring_todo is not there-%> function highlight_updated_recurring_todo(next_steps) { - highlight_todo('#<%= dom_id(@new_recurring_todo)%>'); + TodoItems.highlight_todo('#<%= dom_id(@new_recurring_todo)%>'); next_steps.go(); } <% end -%> function highlight_updated_todo(next_steps) { - highlight_todo('#<%= dom_id(@todo)%>'); + TodoItems.highlight_todo('#<%= dom_id(@todo)%>'); next_steps.go(); } -function highlight_todo(id) { - $(id).effect('highlight', {}, 2000, function(){ }); -} - function activate_pending_todos(next_steps) { <% # Activate pending todos that are successors of the completed if @saved && @pending_to_activate # do not render the js in case of an error or if no todos to activate @pending_to_activate.each do |t| + html = escape_javascript(render(:partial => t, :locals => { :parent_container_type => parent_container_type })) + # only project and tag view have a deferred/blocked container if source_view_is_one_of(:project,:tag) -%> $('#<%= dom_id(t) %>').fadeOut(400, function() { $('#<%= dom_id(t) %>').remove(); + $('#<%= item_container_id(t) %>').append("<%= html %>"); + <%= "$('#tickler-empty-nd').show();" if @remaining_deferred_or_pending_count==0 -%> }); - <% end -%> - $('#<%= item_container_id(t) %>').append("<%= escape_javascript(render(:partial => t, :locals => { :parent_container_type => parent_container_type }))%>"); - highlight_todo('#<%= dom_id(t)%>'); + <% else -%> + $('#<%= item_container_id(t) %>').append("<%= html%>"); + <% end -%> + TodoItems.highlight_todo('#<%= dom_id(t)%>'); <% end -%> <% end -%> next_steps.go(); @@ -135,7 +136,7 @@ function block_predecessors(next_steps) { $('#<%= dom_id(t) %>').remove(); <% if source_view_is(:project) or source_view_is(:tag) # Insert it in deferred/pending block if existing -%> $('#<%= item_container_id(t) %>').append("<%= escape_javascript(render(:partial => t, :locals => { :parent_container_type => parent_container_type }))%>"); - highlight_todo('#<%= dom_id(t)%>'); + TodoItems.highlight_todo('#<%= dom_id(t)%>'); <% end -%> }); <% end -%> diff --git a/config/locales/en.yml b/config/locales/en.yml index 3db5c71a..83eab293 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -426,6 +426,7 @@ en: no_completed_recurring: "Currently there are no completed recurring todos" add_new_recurring: "Add a new recurring action" recurring_deleted_success: "The recurring action was deleted succesfully." + deleted_success: "The action was deleted succesfully." error_deleting_recurring: "There was an error deleting the recurring todo \'%{description}\'" error_starring_recurring: "Could not toggle the star of recurring todo \'%{description}\'" recurrence_period: "Recurrence period" diff --git a/config/locales/nl.yml b/config/locales/nl.yml index f4f9a8a5..2611de27 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1,88 +1,5 @@ --- nl: - common: - actions: Acties - back: Terug - add: Toevoegen - go_back: Ga terug - logout: Log uit - none: Geen - cancel: Annuleer - optional: optioneel - notes: Notities - forum: Forum - server_error: Een fout heeft op de server plaatsgevonden - action: Actie - projects: Projecten - project: Project - contribute: Bijdragen - ok: Ok - website: Website - numbered_step: Stap %{number} - context: Context - sort: - by_task_count_title: Sorteer op aantal acties - by_task_count_title_confirm: Weet u zeker dat u deze projecten alphabetisch wilt sorteren? Dat zal de huidige sorteervolgorde aanpassen. - alphabetically: Alphabetisch - sort: Sorteer - alphabetically_title: Sorteer projecten alphabetisch - alphabetically_confirm: Weet u zeker dat u deze projecten alphabetisch wilt sorteren? Dat zal de huidige sorteervolgorde aanpassen. - by_task_count: Bij aantal acties - create: Maken - description: Beschrijving - errors_with_fields: Er waren problemen met de volgende velden - contexts: Contexten - drag_handle: SLEEP - update: Bijwerken - bugs: Fouten - wiki: Wiki - ajaxError: Er is een fout opgetreden bij het ophalen van gegevens van de server - email: E-mail - search: Zoeken - layouts: - toggle_notes: Toggle notities - next_actions_rss_feed: RSS-feed van de acties - toggle_notes_title: Toggle alle notities - mobile_navigation: - logout: Afmelden - feeds: Feeds - new_action: 0-Nieuwe actie - starred: 4-Ster - projects: 3-Projecten - tickler: Tickler - contexts: 2-Contexten - home: 1-Start - navigation: - recurring_todos: Terugkerende todos - manage_users_title: Toevoegen of verwijderen gebruikers - api_docs: REST API Docs - feeds: Feeds - stats: Statistieken - starred: Ster - notes_title: Toon alle notities - tickler_title: Tickler - manage_users: Beheren gebruikers - preferences: Voorkeuren - export_title: Import en export van gegevens - integrations_: Integreer Tracks - feeds_title: Zie een lijst met beschikbare feeds - calendar_title: Kalender met acties met deadline - recurring_todos_title: Beheren terugkerende acties - completed_tasks: Gereed - stats_title: Zie je statistieken - tickler: Tickler - home_title: Start - starred_title: Zie je ster acties - organize: Organiseer - view: Bekijk - completed_tasks_title: Afgerond - export: Export - home: Start - contexts_title: Contexten - projects_title: Projecten - preferences_title: Toon mijn voorkeuren - calendar: Agenda - search: Zoeken in alle items number: format: separator: "," @@ -112,19 +29,102 @@ nl: applescript_next_action_prompt: "Omschrijving van de actie:" applescript_success_before_id: Nieuwe actie met ID applescript_success_after_id: gemaakt + common: + actions: Acties + back: Terug + add: Toevoegen + logout: Log uit + go_back: Ga terug + none: Geen + cancel: Annuleer + optional: optioneel + notes: Notities + forum: Forum + server_error: Een fout heeft op de server plaatsgevonden + action: Actie + projects: Projecten + project: Project + contribute: Bijdragen + ok: Ok + website: Website + numbered_step: Stap %{number} + context: Context + drag_handle: SLEEP + sort: + by_task_count_title: Sorteer op aantal acties + by_task_count_title_confirm: Weet u zeker dat u deze projecten alphabetisch wilt sorteren? Dat zal de huidige sorteervolgorde aanpassen. + alphabetically: Alphabetisch + alphabetically_title: Sorteer projecten alphabetisch + alphabetically_confirm: Weet u zeker dat u deze projecten alphabetisch wilt sorteren? Dat zal de huidige sorteervolgorde aanpassen. + sort: Sorteer + by_task_count: Bij aantal acties + create: Maken + description: Beschrijving + contexts: Contexten + errors_with_fields: Er waren problemen met de volgende velden + update: Bijwerken + bugs: Fouten + wiki: Wiki + email: E-mail + ajaxError: Er is een fout opgetreden bij het ophalen van gegevens van de server + search: Zoeken + layouts: + toggle_notes: Toggle notities + next_actions_rss_feed: RSS-feed van de acties + toggle_notes_title: Toggle alle notities + mobile_navigation: + logout: Afmelden + feeds: Feeds + new_action: 0-Nieuwe actie + starred: 4-Ster + projects: 3-Projecten + tickler: Tickler + contexts: 2-Contexten + home: 1-Start + navigation: + manage_users_title: Toevoegen of verwijderen gebruikers + recurring_todos: Terugkerende todos + api_docs: REST API Docs + feeds: Feeds + stats: Statistieken + starred: Ster + notes_title: Toon alle notities + tickler_title: Tickler + manage_users: Beheren gebruikers + export_title: Import en export van gegevens + integrations_: Integreer Tracks + preferences: Voorkeuren + feeds_title: Zie een lijst met beschikbare feeds + calendar_title: Kalender met acties met deadline + home_title: Start + starred_title: Zie je ster acties + recurring_todos_title: Beheren terugkerende acties + tickler: Tickler + completed_tasks: Gereed + stats_title: Zie je statistieken + view: Bekijk + organize: Organiseer + completed_tasks_title: Afgerond + contexts_title: Contexten + export: Export + home: Start + preferences_title: Toon mijn voorkeuren + calendar: Agenda + search: Zoeken in alle items + projects_title: Projecten models: project: feed_title: Tracks Projecten feed_description: Een overzicht van alle projecten voor %{username} todo: error_date_must_be_future: moet een datum in de toekomst zijn - user: - error_context_not_associated: Context %{context} niet geassocieerd met gebruikers %{user}. - error_project_not_associated: Project %{project} niet geassocieerd met gebruikers %{user}. preference: due_styles: - Deadline over ____ dagen - Deadline op ____ + user: + error_context_not_associated: Context %{context} niet geassocieerd met gebruikers %{user}. + error_project_not_associated: Project %{project} niet geassocieerd met gebruikers %{user}. data: import_successful: De import was succesvol import_errors: Er hebben zich fouten voorgedaan bij de import @@ -143,39 +143,39 @@ nl: context: Context description: Beschrijving due: Deadline - user: - last_name: Achternaam - first_name: Voornaam preference: show_hidden_projects_in_sidebar: Toon verborgen projecten in sidebar - date_format: Datum formaat show_hidden_contexts_in_sidebar: Toon verborgen contexten in sidebar + date_format: Datum formaat + sms_context: Standaard context voor email + verbose_action_descriptors: Context en project uitschrijven in actielijst mobile_todos_per_page: Acties per pagina (mobiel) staleness_starts: Begin van markeren openstaande actie - verbose_action_descriptors: Context en project uitschrijven in actielijst - sms_context: Standaard context voor email title_date_format: Datum formaat in titel show_number_completed: Aantal te tonen afgeronde acties refresh: Ververs interval (in minuten) week_starts: Week start op + due_style: Deadline stijl time_zone: Tijdzone locale: Taal - due_style: Deadline stijl - show_project_on_todo_done: Ga naar project pagina wanneer actie gereed is sms_email: Van email + show_project_on_todo_done: Ga naar project pagina wanneer actie gereed is show_completed_projects_in_sidebar: Toon afgeronde projecten in sidebar + user: + last_name: Achternaam + first_name: Voornaam errors: messages: - record_invalid: "Validatie mislukt: %{errors}" greater_than_or_equal_to: moet groter of gelijk zijn aan %{count} + record_invalid: "Validatie mislukt: %{errors}" confirmation: komt niet overeen met de configuratie less_than_or_equal_to: moet kleiner of gelijk zijn aan %{count} blank: mag niet leeg zijn exclusion: is gereserveerd invalid: mag niet een komma (',') karakter bevatten odd: moet oneven zijn - wrong_length: heeft de verkeerde lengte (moet %{count} karakters lang zijn) empty: mag niet leeg zijn + wrong_length: heeft de verkeerde lengte (moet %{count} karakters lang zijn) even: moet even zijn too_short: is te kort (minimum is %{count} karakters) less_than: moet kleiner zijn dan %{count} @@ -201,76 +201,78 @@ nl: full_messages: format: "%{attribute} %{message}" stats: - tag_cloud_description: Deze tag cloud bevat tags van alle acties (afgerond, niet voltooid, zichtbaar en / of verborgen) - tag_cloud_90days_title: Tag cloud met acties in afgelopen 90 dagen totals_active_project_count: Van deze zijn %{count} actieve projecten tag_cloud_title: Tag Cloud voor alle acties - totals_first_action: Sinds uw eerste actie op %{date} + tag_cloud_description: Deze tag cloud bevat tags van alle acties (afgerond, niet voltooid, zichtbaar en / of verborgen) + tag_cloud_90days_title: Tag cloud met acties in afgelopen 90 dagen actions_avg_completion_time: Van al uw afgeronde acties, de gemiddelde tijd dat dit in beslag nam is %{count} dagen. actions_last_year_legend: number_of_actions: Aantal acties months_ago: Maanden geleden - totals_deferred_actions: waarvan %{count} uitgestelde acties in de tickler zijn - top10_longrunning: Top 10 langstlopende projecten + totals_first_action: Sinds uw eerste actie op %{date} actions_dow_30days_title: Dag van de week (laatste 30 dagen) current_running_time_of_incomplete_visible_actions: Huidige looptijd van onvolledige zichtbare acties - legend: - actions: Acties - number_of_days: Aantal dagen geleden - number_of_actions: Aantal acties - day_of_week: Dag van de week - running_time: Looptijd van een actie (weken) - percentage: Percentage - months_ago: Maanden geleden running_time_legend: actions: Acties percentage: Percentage weeks: Looptijd van een actie (weken). Klik op een balk voor meer info totals_action_count: u heeft een totaal van %{count} acties - totals_unique_tags: Van deze tags zijn %{count} uniek. - actions_avg_completed_30days: en voltooide een gemiddelde van %{count} acties per dag. - top5_contexts: Top 5 contexten + totals_deferred_actions: waarvan %{count} uitgestelde acties in de tickler zijn + legend: + number_of_days: Aantal dagen geleden + actions: Acties + number_of_actions: Aantal acties + day_of_week: Dag van de week + percentage: Percentage + running_time: Looptijd van een actie (weken) + months_ago: Maanden geleden + top10_longrunning: Top 10 langstlopende projecten actions_lastyear_title: Acties in de afgelopen 12 maanden totals_actions_completed: "%{count} van deze zijn voltooid." totals_incomplete_actions: U heeft %{count} onvolledige acties - actions_last_year: Acties in de afgelopen jaren - totals_context_count: U heeft %{count} contexten. + totals_unique_tags: Van deze tags zijn %{count} uniek. + actions_avg_completed_30days: en voltooide een gemiddelde van %{count} acties per dag. + top5_contexts: Top 5 contexten totals_visible_context_count: Van deze zijn %{count} zichtbare contexten totals_blocked_actions: "%{count} zijn afhankelijk van de voltooiing van hun acties." action_completion_time_title: Doorlooptijd (alle voltooide acties) - totals_project_count: U heeft %{count} projecten. - actions_min_max_completion_days: De max-/minimum dagen tot voltooiing is %{min}/%{max}. + actions_last_year: Acties in de afgelopen jaren + totals_context_count: U heeft %{count} contexten. actions_min_completion_time: De minimale tijd tot afronding is %{time}. - tags: Tags no_tags_available: geen tags beschikbaar actions_day_of_week_title: Dag van de week (alle acties) - more_stats_will_appear: Meer statistieken zullen hier verschijnen zodra u acties hebt toegevoegd. - top5_visible_contexts_with_incomplete_actions: Top 5 zichtbare contexten met onvolledige acties - actions_further: en verder - tod30: Tijd van de dag (laatste 30 dagen) - tag_cloud_90days_description: Deze tag cloud bevat tags van acties die zijn gemaakt of voltooid in de afgelopen 90 dagen. + totals_project_count: U heeft %{count} projecten. + tags: Tags + actions_min_max_completion_days: De max-/minimum dagen tot voltooiing is %{min}/%{max}. running_time_all: Huidige looptijd van alle onvolledige acties totals_tag_count: U heeft %{count} tags geplaatst op acties. time_of_day: Tijd van de dag (alle acties) actions_30days_title: Acties in de afgelopen 30 dagen totals_hidden_project_count: "%{count} zijn verborgen" - spread_of_actions_for_all_context: Verdeling van acties voor alle contexten - actions_avg_created: In de afgelopen 12 maanden heeft u gemiddeld% {count} acties aangemaakt - click_to_show_actions_from_week: Klik %{link} om de acties van week %{week} en verder te zien. - other_actions_label: (anderen) - totals_completed_project_count: en %{count} zijn afgeronde projecten. + more_stats_will_appear: Meer statistieken zullen hier verschijnen zodra u acties hebt toegevoegd. + top5_visible_contexts_with_incomplete_actions: Top 5 zichtbare contexten met onvolledige acties + actions_further: en verder + tod30: Tijd van de dag (laatste 30 dagen) + tag_cloud_90days_description: Deze tag cloud bevat tags van acties die zijn gemaakt of voltooid in de afgelopen 90 dagen. click_to_return: Klik %{link} om terug te keren naar de statistieken pagina. top10_projects_30days: Top 10 project in de laatste 30 dagen actions_selected_from_week: Gekozen acties van week top10_projects: Top 10 projecten spread_of_running_actions_for_visible_contexts: Verdeling van actieve acties voor zichtbare contexten - totals_hidden_context_count: en %{count} zijn verborgen contexten. - actions_avg_completed: en voltooide een gemiddelde van %{count} acties per maand. - totals: Totalen + spread_of_actions_for_all_context: Verdeling van acties voor alle contexten + actions_avg_created: In de afgelopen 12 maanden heeft u gemiddeld% {count} acties aangemaakt + click_to_show_actions_from_week: Klik %{link} om de acties van week %{week} en verder te zien. + other_actions_label: (anderen) + totals_completed_project_count: en %{count} zijn afgeronde projecten. time_of_day_legend: number_of_actions: Aantal acties time_of_day: Tijd van de dag click_to_return_link: hier + totals_hidden_context_count: en %{count} zijn verborgen contexten. + actions_avg_completed: en voltooide een gemiddelde van %{count} acties per maand. + totals: Totalen + no_actions_selected: Er zijn geen acties geselecteerd. + click_to_update_actions: Klik op een balk in de grafiek op de acties hieronder aan te passen. labels: month_avg_completed: "%{months} gem afgerond per maand" completed: Afgerond @@ -278,37 +280,35 @@ nl: avg_created: Gem gemaakt avg_completed: Gem afgerond created: Gemaakt - no_actions_selected: Er zijn geen acties geselecteerd. - click_to_update_actions: Klik op een balk in de grafiek op de acties hieronder aan te passen. running_time_all_legend: actions: Acties - running_time: Looptijd van een actie (weken). Klik op een balk voor meer info percentage: Percentage + running_time: Looptijd van een actie (weken). Klik op een balk voor meer info + actions_actions_avg_created_30days: In de afgelopen 30 dagen heeft u gemiddeld% {count} acties gemaakt tod30_legend: number_of_actions: Aantal acties time_of_day: Tijd van de dag action_selection_title: "TRACKS:: Actie selectie" - actions_actions_avg_created_30days: In de afgelopen 30 dagen heeft u gemiddeld% {count} acties gemaakt todos: show_from: Toon vanaf error_starring_recurring: Kon niet de ster van deze terugkerende actie niet omgezetten \'%{description}\' recurring_action_deleted: Actie werd verwijderd. Omdat deze actie herhalend is. werd een nieuwe actie toegevoegd completed_actions: Voltooide acties - blocked_by: Geblokkeerd door %{predecessors} completed_recurring: Afgesloten terugkerende todos added_new_next_action: Nieuwe actie toegevoegd + blocked_by: Geblokkeerd door %{predecessors} + unable_to_add_dependency: Niet in staat om de afhankelijkheid toe te voegen star_action: Markeer deze actie met een ster completed_recurrence_completed: Er is geen actie na de terugkerende actie die u new verwijderd heeft. De herhaling is voltooid defer_date_after_due_date: Uitsteldatum is na de vervaldag. Gelieve vervaldag bewerken alvorens uitsteldatum aan te passen. - unable_to_add_dependency: Niet in staat om de afhankelijkheid toe te voegen done: Voltooid? star_action_with_description: markeer de actie '%{description}' met een ster tagged_with: gelabeld met ‘%{tag_name}’ completed: Afgerond no_deferred_actions_with: Geen uitgestelde acties met de tag '%{tag_name}' no_hidden_actions: Momenteel zijn er geen verborgen acties gevonden - action_due_on: (deadline actie op %{date}) edit_action_with_description: Bewerk de actie '%{description}' + action_due_on: (deadline actie op %{date}) archived_tasks_title: "TRACKS:: Gearchiveerde voltooide taken" remove_dependency: Verwijder afhankelijkheid (zal niet de actie zelf verwijderen) list_incomplete_next_actions: Toon onvoltooide acties @@ -336,16 +336,16 @@ nl: due_today: deadline vandaag due_within_a_week: deadline binnen een week older_completed_items: Oudere voltooide items - no_actions_due_this_week: Geen acties met deadline in rest van deze week append_in_this_project: in dit project error_deleting_item: Er is een fout opgetreden bij het verwijderen van het item '%{description}' task_list_title: TRACKS::Toon acties + no_actions_due_this_week: Geen acties met deadline in rest van deze week + no_deferred_pending_actions: Momenteel zijn er geen uitgestelde of in wachtende acties no_recurring_todos: Momenteel zijn er geen terugkerende acties error_completing_todo: Er was een fout bij het voltooien / activeren van de terugkerende actie '%{description}' convert_to_project: Maak project - no_deferred_pending_actions: Momenteel zijn er geen uitgestelde of in wachtende acties - completed_last_day: Voltooid in de laatste 24 uur delete_recurring_action_confirm: Weet u zeker dat u wilt de terugkerende actie '%{description}' wilt verwijderen? + completed_last_day: Voltooid in de laatste 24 uur show_in_days: Toon over %{days} dagen no_project: -- Geen project -- completed_more_than_x_days_ago: Voltooid meer dan %{count} dagen geleden @@ -354,6 +354,7 @@ nl: edit: Bewerken pending: Wachtend completed_actions_with: Afgeronde acties met de tag %{tag_name} + deleted_success: De actie werd met succes verwijderd. completed_tasks_title: TRACKS::Voltooide taken feed_title_in_project: In het project '%{project}' clear_due_date: Maak deadline leeg @@ -363,8 +364,8 @@ nl: show_on_date: Toon op %{date} recurrence_period: Herhaling periode deferred_actions_with: Uitgestelde acties met de tag '%{tag_name}' - confirm_delete: Weet u zeker dat u de actie '%{description}' wilt verwijderen? recurring_deleted_success: De recurrente actie is succesvol verwijderd. + confirm_delete: Weet u zeker dat u de actie '%{description}' wilt verwijderen? next_actions_title: Tracks - Acties next_action_description: Actie beschrijving deferred_tasks_title: TRACKS::Tickler @@ -392,17 +393,16 @@ nl: recurring_todos: Terugkerende acties delete: Verwijder drag_action_title: Sleep naar een andere actie om deze afhankelijk te maken van die actie - depends_on: Hangt af van tickler_items_due: one: Een tickler item wordt nu zichtbaar - vernieuw de pagina om het te zien. other: "%{count} tickerl items zijn nu zichtbaar - vernieuw de pagina om ze te zien." + depends_on: Hangt af van action_marked_complete: De actie '%{description}' werd gemarkeerd als %{completed} completed_today: one: U heeft een actie tot nu toe vandaag voltooid. other: U heeft %{count} acties tot nu toe vandaag voltooid. added_new_next_action_plural: Nieuwe acties toegevoegd error_starring: Kon niet de ster van deze actie niet omzetten \'%{description}\' - show_tomorrow: Toon morgen calendar: get_in_ical_format: Ontvang deze agenda in iCal-formaat due_next_week: Deadline deze week @@ -412,71 +412,81 @@ nl: due_today: Deadline vandaag due_next_month_and_later: Deadline in %{month} en later no_actions_due_after_this_month: Geen acties met deadline na deze maand - no_actions_due_this_month: Geen acties met deadline in de rest van deze maand due_this_month: Deadline in rest van %{month} + no_actions_due_this_month: Geen acties met deadline in de rest van deze maand + show_tomorrow: Toon morgen recurrence: + ends_on_number_times: Eindigt na %{number} keer ends_on_date: Eindigt op %{date} every_work_day: Elke werkdag - ends_on_number_times: Eindigt na %{number} keer recurrence_on_due_date: de datum dat deadline van de actie is weekly_options: Instellingen voor de wekelijkse terugkerende acties - weekly: Wekelijks monthly_options: Instellingen voor maandelijks terugkerende acties + weekly: Wekelijks + monthly: Maandelijks starts_on: Begint op daily_options: Instellingen voor dagelijks terugkerende acties - monthly: Maandelijks daily: Dagelijks show_option_always: altijd - recurrence_on_options: Stel herhaling in op yearly_every_x_day: Elke %{month} %{day} + recurrence_on_options: Stel herhaling in op daily_every_number_day: Elke %{number} dag(en) - ends_on: Eindigt op weekly_every_number_week: Herhaalt elke %{number} weken op + ends_on: Eindigt op show_options: Toon de actie + yearly_options: Instellingen voor jaarlijks terugkerende acties + yearly_every_xth_day: De %{day} %{day_of_week} van %{month} + show_days_before: "%{days} dagen v\xC3\xB3\xC3\xB3r de deadline van actie" from_tickler: de datum dat de actie uit de tickler komt (geen deadline ingesteld) no_end_date: Geen einddatum - yearly_every_xth_day: De %{day} %{day_of_week} van %{month} day_x_on_every_x_month: Dag %{dag} op elke %{month} maand - yearly_options: Instellingen voor jaarlijks terugkerende acties - show_days_before: "%{days} dagen v\xC3\xB3\xC3\xB3r de deadline van actie" - monthly_every_xth_day: De %{dag} %{day_of_week} van elke %{month} maand yearly: Jaarlijks + monthly_every_xth_day: De %{dag} %{day_of_week} van elke %{month} maand tagged_page_title: TRACKS::Tagged met '%{tag_name}' no_completed_recurring: Momenteel zijn er geen voltooide terugkerende acties added_dependency: "%{dependency} als afhankelijkheid toegevoegd." no_deferred_actions: Momenteel zijn er geen uitgestelde acties. recurrence_completed: Er is geen volgende actie na de terugkerende actie die u zojuist hebt voltooid. De herhaling is voltooid - due: Deadline no_actions_found: Geen acties gevonden in_pending_state: in wachtende toestand + due: Deadline action_marked_complete_error: De actie '%{description}' is niet gemarkeerd als %{completed} vanwege een fout op de server. - depends_on_separate_with_commas: Afhankelijk van (gescheiden door komma's) - recurring_action_saved: Terugkerende actie opgeslagen - action_saved_to_tickler: Actie opgeslagen in tickler completed_in_archive: one: Er is een voltooide actie in het archief. other: Er zijn %{count} afgeronde acties in het archief. + action_saved_to_tickler: Actie opgeslagen in tickler + depends_on_separate_with_commas: Afhankelijk van (gescheiden door komma's) + recurring_action_saved: Terugkerende actie opgeslagen to_tickler: naar tickler next_actions_description_additions: completed: in de afgelopen %{count} dagen due_date: met een deadline %{due_date} of eerder overdue: Achterstallig - no_incomplete_actions: Er zijn geen onvoltooide acties add_new_recurring: Voeg een nieuwe terugkerende actie toe + no_incomplete_actions: Er zijn geen onvoltooide acties notes: - delete_item_title: Verwijder item delete_note_title: Verwijder de notitie '%{id}' delete_confirmation: Weet u zeker dat u de notitie '%{id}' wilt verwijderen? + delete_item_title: Verwijder item + deleted_note: Verwijder notitie '%{id}' note_link_title: Toon notitie %{id} show_note_title: Toon notitie - deleted_note: Verwijder notitie '%{id}' note_location_link: "In:" edit_item_title: Item bewerken - note_header: Notitie %{id} no_notes_available: "Momenteel zijn er geen notities: voeg notities toe aan projecten vanaf de individuele project pagina's." + note_header: Notitie %{id} delete_note_confirm: Weet u zeker dat u de notitie '%{id}' wilt verwijderen? errors: user_unauthorized: "401 Unauthorized: Alleen administratieve gebruikers mogen deze functie gebruiken." + states: + hidden_plural: Verborgen + completed: Afgerond + completed_plural: Afgeronde + visible_plural: Zichtbare + visible: Zichtbaar + active_plural: Actieve + active: Actief + hidden: Verborgen time: am: ochtend formats: @@ -485,19 +495,10 @@ nl: short: "%d %B %H:%M" long: "%A, %d. %B %Y, %H:%M" pm: middag - states: - hidden_plural: Verborgen - completed: Afgerond - completed_plural: Afgeronde - visible_plural: Zichtbare - active_plural: Actieve - visible: Zichtbaar - active: Actief - hidden: Verborgen preferences: - change_identity_url: Verander uw Identity URL open_id_url: Uw OpenID URL is staleness_starts_after: Ophopen begint na %{days} dagen + change_identity_url: Verander uw Identity URL page_title: "TRACKS:: Voorkeuren" change_password: Wijzig uw wachtwoord token_description: Token (voor feeds en API gebruik) @@ -513,42 +514,42 @@ nl: change_authentication_type: Verander uw authenticatietype generate_new_token_confirm: Weet u dit zeker? Het genereren van een nieuw token zal de bestaande te vervangen en dit zal het extern gebruiken van de oude token laten mislukken. projects: - default_tags_removed_notice: De standaard tags zijn verwijderd default_context_set: Stel project standaard context in op %{default_context} deferred_actions: Uitgestelde acties voor dit project edit_project_title: Bewerk project - hide_form: Verberg formulier + default_tags_removed_notice: De standaard tags zijn verwijderd page_title: "TRACKS:: Project: %{project}" - to_new_project_page: Ga naar de nieuwe projectpagina - no_notes_attached: Momenteel zijn er geen notities toegevoegd aan dit project + hide_form: Verberg formulier deferred_actions_empty: Er zijn geen uitgestelde acties voor dit project project_state: Project is %{state}. show_form_title: Maak een nieuw project - todos_append: in dit project + to_new_project_page: Ga naar de nieuwe projectpagina + no_notes_attached: Momenteel zijn er geen notities toegevoegd aan dit project notes: Notities + todos_append: in dit project notes_empty: Er zijn geen notities voor dit project no_projects: Momenteel zijn er geen projecten hide_form_title: Verberg nieuw project formulier completed_actions_empty: Er zijn nog geen afgeronde acties voor dit project delete_project: Project verwijderen - delete_project_confirmation: Weet u zeker dat u wilt het project '%{name} wilt verwijderen? show_form: Toevoegen van een project - list_projects: "TRACKS:: Overzicht van projecten" - add_project: Voeg project toe + delete_project_confirmation: Weet u zeker dat u wilt het project '%{name} wilt verwijderen? set_default_tags_notice: Stel project standaard tags in op %{default_tags} add_note: Een notitie toevoegen project_saved_status: Project opgeslagen settings: Instellingen completed_projects: Voltooide projecten + list_projects: "TRACKS:: Overzicht van projecten" + add_project: Voeg project toe hidden_projects: Verborgen projecten delete_project_title: Verwijder het project - add_note_submit: Notitie toevoegen default_context_removed: Standaard context verwijderd completed_actions: Afgeronde acties voor dit project - default_context: De standaard context voor dit project is %{context} + add_note_submit: Notitie toevoegen status_project_name_changed: Naam van het project werd gewijzigd - active_projects: Actieve projecten no_default_context: Dit project heeft geen standaard context + default_context: De standaard context voor dit project is %{context} + active_projects: Actieve projecten state: Dit project is %{state} date: month_names: @@ -565,10 +566,6 @@ nl: - Oktober - November - December - order: - - :day - - :month - - :year abbr_day_names: - Zo - Ma @@ -577,6 +574,10 @@ nl: - Do - Vr - Za + order: + - :day + - :month + - :year formats: only_day: "%e" default: "%d-%m-%Y" @@ -611,6 +612,22 @@ nl: two_words_connector: en select: prompt: Selecteer + footer: + send_feedback: Stuur reactie op %{version} + shared: + multiple_next_actions: Meerdere acties (een op elke regel) + toggle_single: Voeg een actie toe + hide_form: Verberg formulier + add_action: Actie toevoegen + add_actions: Toevoegen acties + tags_for_all_actions: Tags voor alle acties (scheiden met een komma) + toggle_multi: Voeg meerdere acties toe + toggle_single_title: Voeg een nieuwe actie toe + project_for_all_actions: Project voor alle acties + context_for_all_actions: Context voor alle acties + separate_tags_with_commas: gescheiden door komma's + toggle_multi_title: Toggle single / multi actie formulier + hide_action_form_title: Verberg nieuwe actie formulier dates: month_names: - Januari @@ -633,22 +650,98 @@ nl: - Donderdag - Vrijdag - Zaterdag - shared: - multiple_next_actions: Meerdere acties (een op elke regel) + users: + destroy_successful: Gebruiker %{login} met succes verwijderd + auth_type_update_error: "Er was een probleem met het bijwerken van uw authenticatietype: %{error_messages}" + total_contexts: Totaal aantal contexten + first_user_heading: "Welkom bij TRACKS. Om te beginnen, maak dan een admin account:" + successfully_deleted_user: Succesvol gebruiker %{username} verwijderd + failed_to_delete_user: Mislukt de gebruiker %{username} te verwijderen + openid_url_verified: Je hebt %{url} met succes geverifieerd als je identiteit en uw authenticatie type OpenID opgeslagen. + new_token_generated: Nieuwe token met succes gegenereerd + total_projects: Totaal aantal projecten + signup_successful: Aanmelding succesvol voor gebruiker %{username}. + no_signups_title: "TRACKS:: Geen nieuwe aanmeldingen" + user_created: Gebruiker aangemaakt. + change_password_submit: Wachtwoord wijzigen + password_updated: Wachtwoord bijgewerkt. + manage_users: Beheren gebruikers + account_signup: Aanmelden voor een account + signup: Aanmelden + new_user_heading: "Registreer een nieuwe gebruiker:" + auth_type_updated: Authenticatietype bijgewerkt. + total_actions: Totaal aanal acties + desired_login: Gewenste login + confirm_password: Bevestig wachtwoord + choose_password: Kies een wachtwoord + change_password_title: TRACKS::Wachtwoord wijzigen + change_auth_type_title: TRACKS::Wijzig authenticatietype + change_password_prompt: Voer uw nieuwe wachtwoord in de onderstaande velden in en kies 'Wachtwoord wijzigen' om uw huidige wachtwoord met uw nieuwe te vervangen. + password_confirmation_label: Bevestig wachtwoord + destroy_error: Er is een fout opgetreden bij het verwijderen van de gebruiker '%{login}' + label_auth_type: Authenticatietype + new_password_label: Nieuw wachtwoord + register_with_cas: Met uw CAS gebruikersnaam + new_user_title: "TRACKS:: Aanmelden als de admin gebruiker" + destroy_user: Verwijder de gebruiker + total_users_count: Je hebt een totaal van %{count} gebruikers + destroy_confirmation: "Waarschuwing: dit zal de gebruiker '%{login} verwijderen met al zijn acties, contexten, projecten en notities. Weet u zeker dat u wilt doorgaan?" + signup_new_user: Registreer nieuwe gebruiker + auth_change_submit: Wijzigen authenticatietype + identity_url: Identiteit URL + openid_ok_pref_failed: Je hebt succesvol de %{url} geverifieerd als je identiteit, maar er was een probleem met het opslaan van uw authenticatie voorkeuren. + change_authentication_type: Wijzigen authenticatietype + select_authentication_type: Selecteer uw nieuwe authenticatie type en klik op 'Wijzigen authenticatietype' om uw huidige instellingen te vervangen. + total_notes: Totaal aantal notities + feedlist: + actions_due_today: Acties die vandaag of eerder af moeten + choose_context: Kies de context waar je een feed van wilt + all_contexts: Alle contexten + rss_feed: RSS Feed + legend: Legenda + ical_feed: iCal feed + all_projects: Alle projecten + choose_project: Kies het project waar je een feed van wilt + select_feed_for_project: Kies de feed voor dit project + active_projects_wo_next: Actieve projecten zonder acties + project_needed: "Er moet ten minste \xC3\xA9\xC3\xA9n project zijn voor een feed opgevraagd kan worden" + active_starred_actions: Alle gesterde, actieve acties + context_needed: "Er moet eerst ten minste \xC3\xA9\xC3\xA9n context zijn voor je een feed kan opvragen" + select_feed_for_context: Kies de feed voor deze context + projects_and_actions: Actieve projecten met hun acties + notice_incomplete_only: "Merk op: alle feeds laten alleen acties zien die niet afgerond zijn, tenzij anders vermeld." + actions_due_next_week: Acties die binnen 7 dagen afgerond moeten + plain_text_feed: Reguliere tekst feed + last_fixed_number: Laatste %{number} acties + all_actions: Alle acties + actions_completed_last_week: Acties afgerond in de afgelopen 7 dagen + context_centric_actions: Feeds voor onafgeronde acties in een specifieke context + project_centric: Feeds voor onafgeronde acties in een specifiek project + contexts: + delete_context_title: Verwijder context hide_form: Verberg formulier - toggle_single: Voeg een actie toe - add_action: Actie toevoegen - add_actions: Toevoegen acties - tags_for_all_actions: Tags voor alle acties (scheiden met een komma) - context_for_all_actions: Context voor alle acties - toggle_multi: Voeg meerdere acties toe - toggle_single_title: Voeg een nieuwe actie toe - project_for_all_actions: Project voor alle acties - separate_tags_with_commas: gescheiden door komma's - toggle_multi_title: Toggle single / multi actie formulier - hide_action_form_title: Verberg nieuwe actie formulier - footer: - send_feedback: Stuur reactie op %{version} + show_form_title: Voeg een context toe + delete_context_confirmation: Weet u zeker dat u de context '%{name}' wilt verwijderen? Merk op dat dit ook alle (herhalende) acties in deze context zal verwijderen! + delete_context: Verwijder context + hide_form_title: "Verberg formulier voor nieuwe context " + edit_context: Bewerk context + hidden_contexts: Verborgen contexten + no_contexts_active: Momenteel zijn er geen actieve contexten + context_hide: Verberg van de start pagina? + visible_contexts: Zichtbare contexten + save_status_message: Context bewaard + show_form: Maak een nieuwe context + add_context: Context toevoegen + update_status_message: Naam van de context was veranderd + context_name: Context naam + status_active: Context is actief + new_context_post: "' zal ook gemaakt worden. Weet u dit zeker?" + new_context_pre: Nieuwe context ' + no_actions: Momenteel zijn er geen onafgeronde acties in deze context + last_completed_in_context: in deze context (laatste %{number}) + context_deleted: De context '%{name}' is verwijderd + no_contexts_hidden: Momenteel zijn er geen verborgen contexten + status_hidden: Context is verborgen sidebar: list_name_active_contexts: Actieve contexten list_name_active_projects: Actieve projecten @@ -656,98 +749,6 @@ nl: list_name_completed_projects: Voltooide projecten list_name_hidden_projects: Verborgen projecten list_name_hidden_contexts: Verborgen contexten - users: - openid_url_verified: Je hebt %{url} met succes geverifieerd als je identiteit en uw authenticatie type OpenID opgeslagen. - destroy_successful: Gebruiker %{login} met succes verwijderd - auth_type_update_error: "Er was een probleem met het bijwerken van uw authenticatietype: %{error_messages}" - total_contexts: Totaal aantal contexten - first_user_heading: "Welkom bij TRACKS. Om te beginnen, maak dan een admin account:" - successfully_deleted_user: Succesvol gebruiker %{username} verwijderd - failed_to_delete_user: Mislukt de gebruiker %{username} te verwijderen - total_projects: Totaal aantal projecten - signup_successful: Aanmelding succesvol voor gebruiker %{username}. - new_token_generated: Nieuwe token met succes gegenereerd - no_signups_title: "TRACKS:: Geen nieuwe aanmeldingen" - user_created: Gebruiker aangemaakt. - change_password_submit: Wachtwoord wijzigen - account_signup: Aanmelden voor een account - password_updated: Wachtwoord bijgewerkt. - manage_users: Beheren gebruikers - signup: Aanmelden - confirm_password: Bevestig wachtwoord - new_user_heading: "Registreer een nieuwe gebruiker:" - auth_type_updated: Authenticatietype bijgewerkt. - total_actions: Totaal aanal acties - desired_login: Gewenste login - password_confirmation_label: Bevestig wachtwoord - destroy_error: Er is een fout opgetreden bij het verwijderen van de gebruiker '%{login}' - choose_password: Kies een wachtwoord - change_password_title: TRACKS::Wachtwoord wijzigen - change_auth_type_title: TRACKS::Wijzig authenticatietype - change_password_prompt: Voer uw nieuwe wachtwoord in de onderstaande velden in en kies 'Wachtwoord wijzigen' om uw huidige wachtwoord met uw nieuwe te vervangen. - label_auth_type: Authenticatietype - new_password_label: Nieuw wachtwoord - register_with_cas: Met uw CAS gebruikersnaam - destroy_user: Verwijder de gebruiker - total_users_count: Je hebt een totaal van %{count} gebruikers - new_user_title: "TRACKS:: Aanmelden als de admin gebruiker" - destroy_confirmation: "Waarschuwing: dit zal de gebruiker '%{login} verwijderen met al zijn acties, contexten, projecten en notities. Weet u zeker dat u wilt doorgaan?" - signup_new_user: Registreer nieuwe gebruiker - identity_url: Identiteit URL - auth_change_submit: Wijzigen authenticatietype - change_authentication_type: Wijzigen authenticatietype - openid_ok_pref_failed: Je hebt succesvol de %{url} geverifieerd als je identiteit, maar er was een probleem met het opslaan van uw authenticatie voorkeuren. - total_notes: Totaal aantal notities - select_authentication_type: Selecteer uw nieuwe authenticatie type en klik op 'Wijzigen authenticatietype' om uw huidige instellingen te vervangen. - contexts: - delete_context_title: Verwijder context - hide_form: Verberg formulier - show_form_title: Voeg een context toe - delete_context: Verwijder context - delete_context_confirmation: Weet u zeker dat u de context '%{name}' wilt verwijderen? Merk op dat dit ook alle (herhalende) acties in deze context zal verwijderen! - edit_context: Bewerk context - hide_form_title: "Verberg formulier voor nieuwe context " - context_hide: Verberg van de start pagina? - hidden_contexts: Verborgen contexten - no_contexts_active: Momenteel zijn er geen actieve contexten - add_context: Context toevoegen - visible_contexts: Zichtbare contexten - save_status_message: Context bewaard - show_form: Maak een nieuwe context - update_status_message: Naam van de context was veranderd - context_name: Context naam - status_active: Context is actief - new_context_post: "' zal ook gemaakt worden. Weet u dit zeker?" - context_deleted: De context '%{name}' is verwijderd - no_contexts_hidden: Momenteel zijn er geen verborgen contexten - new_context_pre: Nieuwe context ' - no_actions: Momenteel zijn er geen onafgeronde acties in deze context - last_completed_in_context: in deze context (laatste %{number}) - status_hidden: Context is verborgen - feedlist: - actions_due_today: Acties die vandaag of eerder af moeten - choose_context: Kies de context waar je een feed van wilt - ical_feed: iCal feed - all_contexts: Alle contexten - rss_feed: RSS Feed - legend: Legenda - all_projects: Alle projecten - choose_project: Kies het project waar je een feed van wilt - project_needed: "Er moet ten minste \xC3\xA9\xC3\xA9n project zijn voor een feed opgevraagd kan worden" - select_feed_for_project: Kies de feed voor dit project - active_projects_wo_next: Actieve projecten zonder acties - active_starred_actions: Alle gesterde, actieve acties - context_needed: "Er moet eerst ten minste \xC3\xA9\xC3\xA9n context zijn voor je een feed kan opvragen" - select_feed_for_context: Kies de feed voor deze context - projects_and_actions: Actieve projecten met hun acties - actions_due_next_week: Acties die binnen 7 dagen afgerond moeten - notice_incomplete_only: "Merk op: alle feeds laten alleen acties zien die niet afgerond zijn, tenzij anders vermeld." - context_centric_actions: Feeds voor onafgeronde acties in een specifieke context - plain_text_feed: Reguliere tekst feed - last_fixed_number: Laatste %{number} acties - all_actions: Alle acties - actions_completed_last_week: Acties afgerond in de afgelopen 7 dagen - project_centric: Feeds voor onafgeronde acties in een specifiek project datetime: prompts: minute: Minuut @@ -795,33 +796,33 @@ nl: half_a_minute: halve minuut login: user_no_expiry: Blijf ingelogd - login_cas: Ga naar het CAS sign_in: Meld aan openid_identity_url_not_found: Sorry, geen gebruiker met die identiteit URL bestaat (% {identity_url}) - successful_with_session_info: "Login succesvol:" - please_login: Log in om Tracks te gebruiken + login_cas: Ga naar het CAS cas_logged_in_greeting: Hallo, % {username}! U bent geauthenticeerd. cas_no_user_found: Hallo,% {username}! Je hebt nog geen account op Tracks. cas_login: CAS Inloggen + successful_with_session_info: "Login succesvol:" + please_login: Log in om Tracks te gebruiken cas_username_not_found: Sorry, geen gebruiker met die CAS gebruikersnaam bestaat (% {username}) - mobile_use_openid: ... if inloggen met een OpenID cas_create_account: Als u willen vragen ga hier om %{signup_link} + mobile_use_openid: ... if inloggen met een OpenID account_login: Account login cas_signup_link: Aanvragen account session_will_not_expire: sessie zal niet verlopen. successful: Succesvol aangemeld. Welkom terug! + session_time_out: Sessie is verlopen. Gelieve %{link} session_will_expire: sessie zal verlopen na %{hours} u(u)r(en) van inactiviteit. option_separator: of, - session_time_out: Sessie is verlopen. Gelieve %{link} login_standard: Ga terug naar de standaard login - log_in_again: log opnieuw in. logged_out: Je bent afgemeld bij Tracks. login_with_openid: inloggen met een OpenID unsuccessful: Login mislukt. + log_in_again: log opnieuw in. search: contexts_matching_query: Contexten passend bij zoekopdracht tags_matching_query: Tags passend bij zoekopdracht - todos_matching_query: Todos passend bij zoekopdracht - projects_matching_query: Projecten passend bij zoekopdracht notes_matching_query: Notities passend bij zoekopdracht no_results: Uw zoekopdracht heeft geen resultaten opgeleverd. + todos_matching_query: Todos passend bij zoekopdracht + projects_matching_query: Projecten passend bij zoekopdracht diff --git a/features/dependencies.feature b/features/dependencies.feature index 5bd85342..b15f6377 100644 --- a/features/dependencies.feature +++ b/features/dependencies.feature @@ -23,23 +23,7 @@ Feature: dependencies When I expand the dependencies of "Todo 2" Then I should see "Todo 3" within the dependencies of "Todo 2" - @selenium @wip - Scenario: Adding dependency with comma to todo # for #975 - Given I have a context called "@pc" - And I have a project "dependencies" that has the following todos - | description | context | - | test,1, 2,3 | @pc | - | test me | @pc | - When I visit the "dependencies" project - And I drag "test me" to "test,1, 2,3" - Then the successors of "test,1, 2,3" should include "test me" - When I edit the dependency of "test me" to "'test,1, 2,3' <'@pc'; 'dependencies'>,'test,1, 2,3' <'@pc'; 'dependencies'>" - Then there should not be an error - - Scenario: Deleting a predecessor will activate successors - Given this is a pending scenario - - @selenium @wip + @selenium Scenario: I can edit a todo to add the todo as a dependency to another Given I have a context called "@pc" And I have a project "dependencies" that has the following todos @@ -48,18 +32,18 @@ Feature: dependencies | test 2 | @pc | | test 3 | @pc | When I visit the "dependencies" project - When I edit the dependency of "test 1" to "'test 2' <'@pc'; 'dependencies'>" + When I edit the dependency of "test 1" to add "test 2" as predecessor Then I should see "test 1" within the dependencies of "test 2" And I should see "test 1" in the deferred container - When I edit the dependency of "test 1" to "'test 2' <'@pc'; 'dependencies'>, 'test 3' <'@pc'; 'dependencies'>" + When I edit the dependency of "test 1" to add "test 3" as predecessor Then I should see "test 1" within the dependencies of "test 2" Then I should see "test 1" within the dependencies of "test 3" - When I edit the dependency of "test 1" to "'test 2' <'@pc'; 'dependencies'>" - And I edit the dependency of "test 2" to "'test 3' <'@pc'; 'dependencies'>" + When I edit the dependency of "test 1" to remove "test 3" as predecessor + And I edit the dependency of "test 2" to add "test 3" as predecessor Then I should see "test 1" within the dependencies of "test 3" Then I should see "test 2" within the dependencies of "test 3" - @selenium @wip + @selenium Scenario: I can remove a dependency by editing the todo Given I have a context called "@pc" And I have a project "dependencies" that has the following todos @@ -69,12 +53,44 @@ Feature: dependencies And "test 1" depends on "test 2" When I visit the "dependencies" project Then I should see "test 1" in the deferred container - When I edit the dependency of "test 1" to "" + When I edit the dependency of "test 1" to remove "test 2" as predecessor Then I should not see "test 1" within the dependencies of "test 2" And I should not see "test 1" in the deferred container + @selenium + Scenario: Completing a predecessor will activate successors + Given I have a context called "@pc" + And I have a project "dependencies" that has the following todos + | description | context | + | test 1 | @pc | + | test 2 | @pc | + | test 3 | @pc | + And "test 2" depends on "test 1" + When I visit the "dependencies" project + Then I should see "test 2" in the deferred container + And I should see "test 1" in the action container + When I mark "test 1" as complete + Then I should see "test 1" in the completed container + And I should see "test 2" in the action container + And I should not see "test 2" in the deferred container + And I should see the empty message in the deferred container + + @selenium Scenario: Deleting a predecessor will activate successors - Given this is a pending scenario + Given I have a context called "@pc" + And I have a project "dependencies" that has the following todos + | description | context | + | test 1 | @pc | + | test 2 | @pc | + | test 3 | @pc | + And "test 2" depends on "test 1" + When I visit the "dependencies" project + Then I should see "test 2" in the deferred container + And I should see "test 1" in the action container + When I delete the action "test 1" + And I should see "test 2" in the action container + And I should not see "test 2" in the deferred container + And I should see the empty message in the deferred container Scenario: Deleting a successor will update predecessor - Given this is a pending scenario \ No newline at end of file + Given this is a pending scenario diff --git a/features/step_definitions/dependencies_steps.rb b/features/step_definitions/dependencies_steps.rb new file mode 100644 index 00000000..26833079 --- /dev/null +++ b/features/step_definitions/dependencies_steps.rb @@ -0,0 +1,116 @@ +Given /^"([^"]*)" depends on "([^"]*)"$/ do |successor_name, predecessor_name| + successor = Todo.find_by_description(successor_name) + predecessor = Todo.find_by_description(predecessor_name) + + successor.add_predecessor(predecessor) + successor.state = "pending" + successor.save! +end + +When /^I drag "(.*)" to "(.*)"$/ do |dragged, target| + drag_id = Todo.find_by_description(dragged).id + drop_id = Todo.find_by_description(target).id + drag_name = "xpath=//div[@id='line_todo_#{drag_id}']//img[@class='grip']" + drop_name = "xpath=//div[@id='line_todo_#{drop_id}']//div[@class='description']" + + selenium.drag_and_drop_to_object(drag_name, drop_name) + + arrow = "xpath=//div[@id='line_todo_#{drop_id}']/div/a[@class='show_successors']/img" + selenium.wait_for_element(arrow, :timeout_in_seconds => 5) +end + +When /^I expand the dependencies of "([^\"]*)"$/ do |todo_name| + todo = Todo.find_by_description(todo_name) + todo.should_not be_nil + + expand_img_locator = "xpath=//div[@id='line_todo_#{todo.id}']/div/a[@class='show_successors']/img" + selenium.click(expand_img_locator) +end + +When /^I edit the dependency of "([^"]*)" to add "([^"]*)" as predecessor$/ do |todo_description, predecessor_description| + todo = @current_user.todos.find_by_description(todo_description) + todo.should_not be_nil + predecessor = @current_user.todos.find_by_description(predecessor_description) + predecessor.should_not be_nil + + open_edit_form_for(todo) + + input = "xpath=//form[@id='form_todo_#{todo.id}']//input[@id='predecessor_input']" + selenium.focus(input) + selenium.type_keys input, predecessor_description + + # wait for auto complete + autocomplete = "xpath=//a[@id='ui-active-menuitem']" + selenium.wait_for_element(autocomplete, :timeout_in_seconds => 5) + + # click first line + first_elem = "xpath=//ul/li[1]/a[@id='ui-active-menuitem']" + selenium.click(first_elem) + + new_dependency_line = "xpath=//li[@id='pred_#{predecessor.id}']" + selenium.wait_for_element(new_dependency_line, :timeout_in_seconds => 5) + + submit_edit_todo_form(todo) +end + +When /^I edit the dependency of "([^"]*)" to remove "([^"]*)" as predecessor$/ do |todo_description, predecessor_description| + todo = @current_user.todos.find_by_description(todo_description) + todo.should_not be_nil + predecessor = @current_user.todos.find_by_description(predecessor_description) + predecessor.should_not be_nil + + open_edit_form_for(todo) + + delete_dep_button = "xpath=//form[@id='form_todo_#{todo.id}']//img[@id='delete_dep_#{predecessor.id}']" + selenium.click(delete_dep_button) + wait_for :timeout=>5 do + !selenium.is_element_present(delete_dep_button) + end + + submit_edit_todo_form(todo) + # note that animations will be running after the ajax is completed +end + +When /^I edit the dependency of "([^"]*)" to "([^"]*)"$/ do |todo_name, deps| + todo = @dep_todo = @current_user.todos.find_by_description(todo_name) + todo.should_not be_nil + + open_edit_form_for(todo) + fill_in "predecessor_list_todo_#{todo.id}", :with => deps + submit_edit_todo_form(todo) +end + +Then /^the successors of "(.*)" should include "(.*)"$/ do |parent_name, child_name| + parent = @current_user.todos.find_by_description(parent_name) + parent.should_not be_nil + + child = parent.pending_successors.find_by_description(child_name) + child.should_not be_nil +end + +Then /^I should see "([^\"]*)" within the dependencies of "([^\"]*)"$/ do |successor_description, todo_description| + todo = @current_user.todos.find_by_description(todo_description) + todo.should_not be_nil + successor = @current_user.todos.find_by_description(successor_description) + successor.should_not be_nil + + # argh, webrat on selenium does not support within, so this won't work + # xpath = "//div[@id='line_todo_#{todo.id}'" + # Then "I should see \"#{successor_description}\" within \"xpath=#{xpath}\"" + + # let selenium look for the presence of the successor + xpath = "xpath=//div[@id='line_todo_#{todo.id}']//div[@id='successor_line_todo_#{successor.id}']//span" + selenium.wait_for_element(xpath, :timeout_in_seconds => 5) +end + +Then /^I should not see "([^"]*)" within the dependencies of "([^"]*)"$/ do |successor_description, todo_description| + todo = @current_user.todos.find_by_description(todo_description) + todo.should_not be_nil + successor = @current_user.todos.find_by_description(successor_description) + successor.should_not be_nil + # let selenium look for the presence of the successor + xpath = "xpath=//div[@id='line_todo_#{todo.id}']//div[@id='successor_line_todo_#{successor.id}']//span" + wait_for :timeout => 5 do + !selenium.is_element_present(xpath) + end +end diff --git a/features/step_definitions/feedlist_steps.rb b/features/step_definitions/feedlist_steps.rb index 1715f36e..043eee20 100644 --- a/features/step_definitions/feedlist_steps.rb +++ b/features/step_definitions/feedlist_steps.rb @@ -31,7 +31,7 @@ Then /^I should see "([^"]*)" as the selected context$/ do |context_name| end Then /^I should see feeds for "([^"]*)" in list of "([^"]*)"$/ do |name, list_type| - selenium.wait_for :wait_for => :ajax, :javascript_framework => :jquery + wait_for_ajax xpath= "//div[@id='feeds-for-#{list_type}']//strong" name.should == response.selenium.get_text("xpath=#{xpath}") end diff --git a/features/step_definitions/generic_steps.rb b/features/step_definitions/generic_steps.rb index 07d58d93..8b080b4a 100644 --- a/features/step_definitions/generic_steps.rb +++ b/features/step_definitions/generic_steps.rb @@ -2,6 +2,10 @@ Given /this is a pending scenario/ do pending end +Given /^I am working on the mobile interface$/ do + @mobile_interface = true +end + Then /the badge should show (.*)/ do |number| badge = -1 xpath= "//span[@id='badge_count']" @@ -18,6 +22,8 @@ Then /the badge should show (.*)/ do |number| badge.should == number.to_i end -Given /^I am working on the mobile interface$/ do - @mobile_interface = true +Then /^I should see the empty message in the deferred container$/ do + wait_for :timeout => 5 do + selenium.is_visible("xpath=//div[@id='tickler']//div[@id='tickler-empty-nd']") + end end diff --git a/features/step_definitions/project_list_steps.rb b/features/step_definitions/project_list_steps.rb index 2ab5c737..3142e147 100644 --- a/features/step_definitions/project_list_steps.rb +++ b/features/step_definitions/project_list_steps.rb @@ -39,13 +39,13 @@ end When /^I sort the active list alphabetically$/ do click_link "Alphabetically" - selenium.wait_for :wait_for => :ajax, :javascript_framework => :jquery + wait_for_ajax selenium.get_confirmation.should == "Are you sure that you want to sort these projects alphabetically? This will replace the existing sort order." end When /^I sort the list by number of tasks$/ do click_link "By number of tasks" - selenium.wait_for :wait_for => :ajax, :javascript_framework => :jquery + wait_for_ajax selenium.get_confirmation.should == "Are you sure that you want to sort these projects by the number of tasks? This will replace the existing sort order." end diff --git a/features/step_definitions/recurring_todo_steps.rb b/features/step_definitions/recurring_todo_steps.rb index 76697b26..810b1e22 100644 --- a/features/step_definitions/recurring_todo_steps.rb +++ b/features/step_definitions/recurring_todo_steps.rb @@ -35,7 +35,7 @@ When /^I edit the name of the pattern "([^\"]*)" to "([^\"]*)"$/ do |pattern_nam pattern.should_not be_nil click_link "link_edit_recurring_todo_#{pattern.id}" - selenium.wait_for :wait_for => :ajax, :javascript_framework => :jquery + wait_for_ajax fill_in "edit_recurring_todo_description", :with => new_name selenium.click "recurring_todo_edit_action_submit" @@ -49,7 +49,7 @@ When /^I star the pattern "([^\"]*)"$/ do |pattern_name| pattern = @current_user.recurring_todos.find_by_description(pattern_name) pattern.should_not be_nil click_link "star_icon_#{pattern.id}" - selenium.wait_for :wait_for => :ajax, :javascript_framework => :jquery + wait_for_ajax end When /^I delete the pattern "([^"]*)"$/ do |pattern_name| @@ -67,7 +67,7 @@ When /^I mark the pattern "([^"]*)" as complete$/ do |pattern_name| pattern.should_not be_nil pattern.completed?.should be_false selenium.click "check_#{pattern.id}" - selenium.wait_for :wait_for => :ajax, :javascript_framework => :jquery + wait_for_ajax end When /^I mark the pattern "([^"]*)" as active$/ do |pattern_name| @@ -75,7 +75,7 @@ When /^I mark the pattern "([^"]*)" as active$/ do |pattern_name| pattern.should_not be_nil pattern.completed?.should be_true selenium.click "check_#{pattern.id}" - selenium.wait_for :wait_for => :ajax, :javascript_framework => :jquery + wait_for_ajax end Then /^the state list "([^"]*)" should be empty$/ do |state| diff --git a/features/step_definitions/todo_steps.rb b/features/step_definitions/todo_steps.rb index 218904e8..29c2cf1f 100644 --- a/features/step_definitions/todo_steps.rb +++ b/features/step_definitions/todo_steps.rb @@ -45,15 +45,6 @@ Given /^I have ([0-9]+) completed todos with a note$/ do |count| end end -Given /^"(.*)" depends on "(.*)"$/ do |successor_name, predecessor_name| - successor = Todo.find_by_description(successor_name) - predecessor = Todo.find_by_description(predecessor_name) - - successor.add_predecessor(predecessor) - successor.state = "pending" - successor.save! -end - Given /^I have a project "([^"]*)" that has the following todos$/ do |project_name, todos| Given "I have a project called \"#{project_name}\"" @project.should_not be_nil @@ -70,26 +61,6 @@ Given /^I have a project "([^"]*)" that has the following todos$/ do |project_na end end -When /^I drag "(.*)" to "(.*)"$/ do |dragged, target| - drag_id = Todo.find_by_description(dragged).id - drop_id = Todo.find_by_description(target).id - drag_name = "xpath=//div[@id='line_todo_#{drag_id}']//img[@class='grip']" - drop_name = "xpath=//div[@id='line_todo_#{drop_id}']//div[@class='description']" - - selenium.drag_and_drop_to_object(drag_name, drop_name) - - arrow = "xpath=//div[@id='line_todo_#{drop_id}']/div/a[@class='show_successors']/img" - selenium.wait_for_element(arrow, :timeout_in_seconds => 5) -end - -When /^I expand the dependencies of "([^\"]*)"$/ do |todo_name| - todo = Todo.find_by_description(todo_name) - todo.should_not be_nil - - expand_img_locator = "xpath=//div[@id='line_todo_#{todo.id}']/div/a[@class='show_successors']/img" - selenium.click(expand_img_locator) -end - When /I change the (.*) field of "([^\"]*)" to "([^\"]*)"$/ do |field, todo_name, new_value| todo = @current_user.todos.find_by_description(todo_name) todo.should_not be_nil @@ -171,15 +142,6 @@ When /^I submit the new multiple actions form with$/ do |multi_line_descriptions submit_multiple_next_action_form end -When /^I edit the dependency of "([^"]*)" to "([^"]*)"$/ do |todo_name, deps| - todo = @dep_todo = @current_user.todos.find_by_description(todo_name) - todo.should_not be_nil - - open_edit_form_for(todo) - fill_in "predecessor_list_todo_#{todo.id}", :with => deps - submit_edit_todo_form(todo) -end - When /^I edit the due date of "([^"]*)" to tomorrow$/ do |action_description| todo = @current_user.todos.find_by_description(action_description) todo.should_not be_nil @@ -196,6 +158,30 @@ When /^I clear the due date of "([^"]*)"$/ do |action_description| submit_edit_todo_form(todo) end +When /^I mark "([^"]*)" as complete$/ do |action_description| + # TODO: generalize. this currently only works for projects wrt xpath + todo = @current_user.todos.find_by_description(action_description) + todo.should_not be_nil + check "mark_complete_#{todo.id}" + wait_for :timeout => 5 do + !selenium.is_element_present("//div[@id='p#{todo.project.id}items']//div[@id='line_todo_#{todo.id}']") + end + # note that animations could be running after finishing this +end + +When /^I delete the action "([^"]*)"$/ do |action_description| + todo = @current_user.todos.find_by_description(action_description) + todo.should_not be_nil + + delete_todo_button = "xpath=//a[@id='delete_todo_#{todo.id}']/img" + selenium.click delete_todo_button + selenium.get_confirmation.should == "Are you sure that you want to delete the action '#{todo.description}'?" + + wait_for :timeout => 5 do + !selenium.is_element_present("//div[@id='line_todo_#{todo.id}']") + end +end + Then /^I should see ([0-9]+) todos$/ do |count| count.to_i.downto 1 do |i| match_xpath "div[" @@ -205,43 +191,11 @@ end Then /^there should not be an error$/ do sleep(5) # form should be gone and thus no errors visible - selenium.is_visible("edit_todo_#{@dep_todo.id}").should == false + wait_for :timeout => 5 do + !selenium.is_visible("edit_todo_#{@dep_todo.id}") + end end -Then /^the successors of "(.*)" should include "(.*)"$/ do |parent_name, child_name| - parent = @current_user.todos.find_by_description(parent_name) - parent.should_not be_nil - - child = parent.pending_successors.find_by_description(child_name) - child.should_not be_nil -end - -Then /^I should see "([^\"]*)" within the dependencies of "([^\"]*)"$/ do |successor_description, todo_description| - todo = @current_user.todos.find_by_description(todo_description) - todo.should_not be_nil - successor = @current_user.todos.find_by_description(successor_description) - successor.should_not be_nil - - # argh, webrat on selenium does not support within, so this won't work - # xpath = "//div[@id='line_todo_#{todo.id}'" - # Then "I should see \"#{successor_description}\" within \"xpath=#{xpath}\"" - - # let selenium look for the presence of the successor - xpath = "xpath=//div[@id='line_todo_#{todo.id}']//div[@id='successor_line_todo_#{successor.id}']//span" - selenium.wait_for_element(xpath, :timeout_in_seconds => 5) -end - -Then /^I should not see "([^"]*)" within the dependencies of "([^"]*)"$/ do |successor_description, todo_description| - todo = @current_user.todos.find_by_description(todo_description) - todo.should_not be_nil - successor = @current_user.todos.find_by_description(successor_description) - successor.should_not be_nil - # let selenium look for the presence of the successor - xpath = "xpath=//div[@id='line_todo_#{todo.id}']//div[@id='successor_line_todo_#{successor.id}']//span" - selenium.is_element_present(xpath).should be_false -end - - Then /^I should see the todo "([^\"]*)"$/ do |todo_description| selenium.is_element_present("//span[.=\"#{todo_description}\"]").should be_true end @@ -266,8 +220,7 @@ Then /^the container for the context "([^"]*)" should not be visible$/ do |conte context = @current_user.contexts.find_by_name(context_name) context.should_not be_nil xpath = "xpath=//div[@id=\"c#{context.id}\"]" - selenium.wait_for :wait_for => :ajax, :javascript_framework => :jquery - selenium.is_element_present(xpath).should be_false + wait_for_ajax selenium.is_element_present(xpath).should be_false end Then /^a confirmation for adding a new context "([^"]*)" should be asked$/ do |context_name| @@ -280,7 +233,31 @@ Then /^I should see "([^"]*)" in the deferred container$/ do |todo_description| xpath = "//div[@id='tickler']//div[@id='line_todo_#{todo.id}']" - selenium.is_element_present(xpath).should be_true + wait_for :timeout => 5 do + selenium.is_element_present(xpath) + end +end + +Then /^I should see "([^"]*)" in the action container$/ do |todo_description| + todo = @current_user.todos.find_by_description(todo_description) + todo.should_not be_nil + + xpath = "//div[@id='p#{todo.project.id}items']//div[@id='line_todo_#{todo.id}']" + + wait_for :timeout => 5 do + selenium.is_element_present(xpath) + end +end + +Then /^I should see "([^"]*)" in the completed container$/ do |todo_description| + todo = @current_user.todos.find_by_description(todo_description) + todo.should_not be_nil + + xpath = "//div[@id='completed_container']//div[@id='line_todo_#{todo.id}']" + + wait_for :timeout => 5 do + selenium.is_element_present(xpath) + end end Then /^I should not see "([^"]*)" in the deferred container$/ do |todo_description| @@ -289,7 +266,9 @@ Then /^I should not see "([^"]*)" in the deferred container$/ do |todo_descripti xpath = "//div[@id='tickler']//div[@id='line_todo_#{todo.id}']" - selenium.is_element_present(xpath).should be_false + wait_for :timeout => 5 do + !selenium.is_element_present(xpath) + end end Then /^the selected project should be "([^"]*)"$/ do |content| @@ -300,4 +279,4 @@ end Then /^the selected context should be "([^"]*)"$/ do |content| # Works for mobile. TODO: make it work for both mobile and non-mobile field_labeled("Context").element.search(".//option[@selected = 'selected']").inner_html.should =~ /#{content}/ -end +end \ No newline at end of file diff --git a/features/support/world.rb b/features/support/world.rb index 9e5527a8..0967a561 100644 --- a/features/support/world.rb +++ b/features/support/world.rb @@ -40,6 +40,10 @@ module TracksStepHelper # click edit selenium.click("//div[@id='line_todo_#{todo.id}']//img[@id='edit_icon_todo_#{todo.id}']", :wait_for => :ajax, :javascript_framework => :jquery) end + + def wait_for_ajax + selenium.wait_for :wait_for => :ajax, :javascript_framework => :jquery + end end diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 21c1c199..1594a166 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -342,6 +342,9 @@ var TodoItems = { var li = "
  • "+ anchor +" "+ todo_spec + "
  • "; return li; }, + highlight_todo: function(id) { + $(id).effect('highlight', {}, 2000, function(){ }); + }, setup_behavior: function() { /* show the notes of a todo */ $(".show_notes").live('click', function () {