From 0fda4506eb3206d4f5f9fbd3a77f0b5793abf203 Mon Sep 17 00:00:00 2001 From: Eric Allen Date: Sat, 2 May 2009 17:38:26 -0400 Subject: [PATCH] Pre-populate default tags from project instead of adding them when a todo is created. Fixes #879. --- app/controllers/application.rb | 4 ++++ app/controllers/contexts_controller.rb | 1 + app/controllers/projects_controller.rb | 1 + app/controllers/recurring_todos_controller.rb | 3 ++- app/controllers/todos_controller.rb | 11 +++++------ app/views/recurring_todos/_edit_form.html.erb | 18 +++++++++++++++--- .../recurring_todos/_recurring_todo_form.erb | 18 +++++++++++++++--- app/views/shared/_add_new_item_form.rhtml | 12 +++++++++++- app/views/todos/_edit_form.rhtml | 9 +++++++++ 9 files changed, 63 insertions(+), 14 deletions(-) diff --git a/app/controllers/application.rb b/app/controllers/application.rb index 2aea80e1..df5fcd1f 100644 --- a/app/controllers/application.rb +++ b/app/controllers/application.rb @@ -133,6 +133,10 @@ class ApplicationController < ActionController::Base Hash[*projects.reject{ |p| p.default_context.nil? }.map{ |p| [p.name, p.default_context.name] }.flatten].to_json end + def build_default_project_tags_map(projects) + Hash[*projects.reject{ |p| p.default_tags.nil? }.map{ |p| [p.name, p.default_tags] }.flatten].to_json + end + # Here's the concept behind this "mobile content negotiation" hack: In # addition to the main, AJAXy Web UI, Tracks has a lightweight low-feature # 'mobile' version designed to be suitablef or use from a phone or PDA. It diff --git a/app/controllers/contexts_controller.rb b/app/controllers/contexts_controller.rb index 7c5b2415..1c399935 100644 --- a/app/controllers/contexts_controller.rb +++ b/app/controllers/contexts_controller.rb @@ -219,6 +219,7 @@ class ContextsController < ApplicationController @count = @not_done_todos.size @default_project_context_name_map = build_default_project_context_name_map(@projects).to_json + @default_project_tags_map = build_default_project_tags_map(@projects).to_json end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 52e3b644..3e2b9939 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -54,6 +54,7 @@ class ProjectsController < ApplicationController @next_project = current_user.projects.next_from(@project) @previous_project = current_user.projects.previous_from(@project) @default_project_context_name_map = build_default_project_context_name_map(current_user.projects).to_json + @default_project_tags_map = build_default_project_tags_map(current_user.projects).to_json respond_to do |format| format.html format.m &render_project_mobile diff --git a/app/controllers/recurring_todos_controller.rb b/app/controllers/recurring_todos_controller.rb index e9776006..2bf54576 100644 --- a/app/controllers/recurring_todos_controller.rb +++ b/app/controllers/recurring_todos_controller.rb @@ -31,7 +31,7 @@ class RecurringTodosController < ApplicationController def update # TODO: write tests for updating - @recurring_todo.tag_with(params[:tag_list]) if params[:tag_list] + @recurring_todo.tag_with(params[:edit_recurring_todo_tag_list]) if params[:edit_recurring_todo_tag_list] @original_item_context_id = @recurring_todo.context_id @original_item_project_id = @recurring_todo.project_id @@ -252,6 +252,7 @@ class RecurringTodosController < ApplicationController @projects = current_user.projects.find(:all, :include => [:default_context]) @contexts = current_user.contexts.find(:all) @default_project_context_name_map = build_default_project_context_name_map(@projects).to_json + @default_project_tags_map = build_default_project_tags_map(@projects).to_json end def get_recurring_todo_from_param diff --git a/app/controllers/todos_controller.rb b/app/controllers/todos_controller.rb index b82a2a2f..d8eca08e 100644 --- a/app/controllers/todos_controller.rb +++ b/app/controllers/todos_controller.rb @@ -60,11 +60,6 @@ class TodosController < ApplicationController project = current_user.projects.find_or_create_by_name(p.project_name) @new_project_created = project.new_record_before_save? @todo.project_id = project.id - if tag_list.blank? - tag_list = project.default_tags unless project.default_tags.blank? - else - tag_list += ','+project.default_tags unless project.default_tags.blank? - end end if p.context_specified_by_name? @@ -363,7 +358,8 @@ class TodosController < ApplicationController @not_done_todos = current_user.deferred_todos @count = @not_done_todos.size @down_count = @count - @default_project_context_name_map = build_default_project_context_name_map(@projects).to_json unless mobile? + @default_project_context_name_map = build_default_project_context_name_map(@projects).to_json + @default_project_tags_map = build_default_project_tags_map(@projects).to_json respond_to do |format| format.html @@ -434,6 +430,7 @@ class TodosController < ApplicationController respond_to do |format| format.html { @default_project_context_name_map = build_default_project_context_name_map(@projects).to_json + @default_project_tags_map = build_default_project_tags_map(@projects).to_json } format.m { cookies[:mobile_url]= {:value => request.request_uri, :secure => SITE_CONFIG['secure_cookies']} @@ -469,6 +466,7 @@ class TodosController < ApplicationController @projects = current_user.projects.find(:all) @default_project_context_name_map = build_default_project_context_name_map(@projects).to_json + @default_project_tags_map = build_default_project_tags_map(@projects).to_json due_today_date = Time.zone.now due_this_week_date = Time.zone.now.end_of_week @@ -750,6 +748,7 @@ class TodosController < ApplicationController end @default_project_context_name_map = build_default_project_context_name_map(@projects).to_json + @default_project_tags_map = build_default_project_tags_map(@projects).to_json render end diff --git a/app/views/recurring_todos/_edit_form.html.erb b/app/views/recurring_todos/_edit_form.html.erb index 4430982d..9f6cc2f6 100644 --- a/app/views/recurring_todos/_edit_form.html.erb +++ b/app/views/recurring_todos/_edit_form.html.erb @@ -29,9 +29,17 @@ todoContextNameElement.value = defaultContextName; } } + function selectDefaultTags() { + todoTagListElement = $('edit_recurring_todo_tag_list'); + defaultTagList = todoTagListElement.projectDefaultTagsMap[this.value]; + if (defaultTagList && !todoTagListElement.editedByTracksUser) { + todoTagListElement.value = defaultTagList; + } + } Event.observe($('edit_recurring_todo_project_name'), "focus", projectAutoCompleter.activate.bind(projectAutoCompleter)); Event.observe($('edit_recurring_todo_project_name'), "click", projectAutoCompleter.activate.bind(projectAutoCompleter)); Event.observe($('edit_recurring_todo_project_name'), "blur", selectDefaultContext.bind($('edit_recurring_todo_project_name'))); + Event.observe($('edit_recurring_todo_project_name'), "blur", selectDefaultTags.bind($('edit_recurring_todo_project_name'))); @@ -59,9 +67,13 @@ $('edit_recurring_todo_context_name').projectDefaultContextsMap = eval('(' + <%= @default_project_context_name_map %> + ')'); - <%= - text_field_tag "tag_list", @recurring_todo.tag_list, :size => 30, :tabindex => 5 -%> - + + <%= text_field_tag "edit_recurring_todo_tag_list", @recurring_todo.tag_list, :size => 30, :tabindex => 5 -%> + +
diff --git a/app/views/recurring_todos/_recurring_todo_form.erb b/app/views/recurring_todos/_recurring_todo_form.erb index 177850a5..9080d976 100644 --- a/app/views/recurring_todos/_recurring_todo_form.erb +++ b/app/views/recurring_todos/_recurring_todo_form.erb @@ -56,9 +56,21 @@ $('recurring_todo_context_name').projectDefaultContextsMap = eval('(' + <%= @default_project_context_name_map %> + ')'); - <%= - text_field_tag "tag_list", nil, :size => 30, :tabindex => 5 -%> -
+ + <%= text_field_tag "tag_list", nil, :size => 30, :tabindex => 5 -%> + +
diff --git a/app/views/shared/_add_new_item_form.rhtml b/app/views/shared/_add_new_item_form.rhtml index e9db5162..a31136c5 100644 --- a/app/views/shared/_add_new_item_form.rhtml +++ b/app/views/shared/_add_new_item_form.rhtml @@ -75,7 +75,7 @@ <%= calendar_setup( "todo_due" ) %> diff --git a/app/views/todos/_edit_form.rhtml b/app/views/todos/_edit_form.rhtml index c82ac126..1e1786e6 100644 --- a/app/views/todos/_edit_form.rhtml +++ b/app/views/todos/_edit_form.rhtml @@ -24,9 +24,17 @@ todoContextNameElement.value = defaultContextName; } } + function selectDefaultTags() { + todoTagListElement = $('<%= dom_id(@todo, 'tag_list') %>'); + defaultTagList = $('tag_list').projectDefaultTagsMap[this.value]; + if (defaultTagList && !todoTagListElement.editedByTracksUser) { + todoTagListElement.value = defaultTagList; + } + } Event.observe($('<%= dom_id(@todo, 'project_name') %>'), "focus", <%= dom_id(@todo, 'project_autocompleter') %>.activate.bind(<%= dom_id(@todo, 'project_autocompleter') %>)); Event.observe($('<%= dom_id(@todo, 'project_name') %>'), "click", <%= dom_id(@todo, 'project_autocompleter') %>.activate.bind(<%= dom_id(@todo, 'project_autocompleter') %>)); Event.observe($('<%= dom_id(@todo, 'project_name') %>'), "blur", selectDefaultContext.bind($('<%= dom_id(@todo, 'project_name') %>'))); + Event.observe($('<%= dom_id(@todo, 'project_name') %>'), "blur", selectDefaultTags.bind($('<%= dom_id(@todo, 'project_name') %>')));
@@ -38,6 +46,7 @@