diff --git a/app/controllers/application.rb b/app/controllers/application.rb index 86b546f4..497c2fa1 100644 --- a/app/controllers/application.rb +++ b/app/controllers/application.rb @@ -130,14 +130,6 @@ class ApplicationController < ActionController::Base RedCloth.new(text).to_html end - def build_default_project_context_name_map(projects) - 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 1c399935..cda24148 100644 --- a/app/controllers/contexts_controller.rb +++ b/app/controllers/contexts_controller.rb @@ -218,8 +218,6 @@ class ContextsController < ApplicationController @projects = current_user.projects @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 e6ead846..899c435d 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -53,8 +53,6 @@ class ProjectsController < ApplicationController @down_count = @count + @deferred.size @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 2bf54576..be659b3a 100644 --- a/app/controllers/recurring_todos_controller.rb +++ b/app/controllers/recurring_todos_controller.rb @@ -251,8 +251,6 @@ class RecurringTodosController < ApplicationController @xth_day = [['first',1],['second',2],['third',3],['fourth',4],['last',5]] @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 @@ -265,4 +263,4 @@ class RecurringTodosController < ApplicationController recurring_todos.each { |rt| rt.toggle_completion! if rt.todos.not_completed.count == 0} end -end \ No newline at end of file +end diff --git a/app/controllers/todos_controller.rb b/app/controllers/todos_controller.rb index c472d40e..5b568af2 100644 --- a/app/controllers/todos_controller.rb +++ b/app/controllers/todos_controller.rb @@ -358,8 +358,6 @@ 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 - @default_project_tags_map = build_default_project_tags_map(@projects).to_json respond_to do |format| format.html @@ -428,10 +426,7 @@ class TodosController < ApplicationController @down_count = @count 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.html format.m { cookies[:mobile_url]= {:value => request.request_uri, :secure => SITE_CONFIG['secure_cookies']} render :action => "mobile_tag" @@ -465,8 +460,6 @@ class TodosController < ApplicationController @page_title = "TRACKS::Calendar" @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 @@ -751,9 +744,6 @@ class TodosController < ApplicationController end 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 end diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb index 17faf97c..3f717405 100644 --- a/app/helpers/todos_helper.rb +++ b/app/helpers/todos_helper.rb @@ -244,6 +244,16 @@ module TodosHelper # @contexts.empty? array_or_string_for_javascript( current_user.contexts.collect{|c| escape_javascript(c.name) } ) end + + def default_contexts_for_autocomplete + projects = current_user.projects.find(:all, :conditions => ['default_context_id is not null']) + Hash[*projects.map{ |p| [p.name, p.default_context.name] }.flatten].to_json + end + + def default_tags_for_autocomplete + projects = current_user.projects.find(:all, :conditions => ['default_tags != ""']) + Hash[*projects.map{ |p| [p.name, p.default_tags] }.flatten].to_json + end def format_ical_notes(notes) split_notes = notes.split(/\n/) diff --git a/app/views/layouts/standard.html.erb b/app/views/layouts/standard.html.erb index eb68d1eb..50a91967 100644 --- a/app/views/layouts/standard.html.erb +++ b/app/views/layouts/standard.html.erb @@ -28,6 +28,8 @@ <%= auto_discovery_link_tag(:rss, {:controller => "todos", :action => "index", :format => 'rss', :token => "#{current_user.token}"}, {:title => "RSS feed of next actions"}) %> diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 9f1d94a3..79ee6f2c 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -240,11 +240,38 @@ function update_project_order(event, ui){ /* Unobtrusive jQuery behavior */ +function project_defaults(){ + if(defaultContexts[$(this).val()] !== undefined) { + context_name = $(this).parents('form').find('input[name=context_name]'); + if(context_name.attr('edited') === undefined){ + context_name.val(defaultContexts[$(this).val()]); + } + } + if(defaultTags[$(this).val()] !== undefined) { + tag_list = $(this).parents('form').find('input[name=tag_list]'); + if(tag_list.attr('edited') === undefined){ + tag_list.val(defaultTags[$(this).val()]); + } + } +} + function enable_rich_interaction(){ $('input.Date').datepicker(); /* Autocomplete */ $('input[name=context_name]').autocomplete(contextNames); $('input[name=project_name]').autocomplete(projectNames); + + /* have to bind on keypress because of limitataions of live() */ + $('input[name=project_name]').live('keypress', function(){ + $(this).bind('blur', project_defaults); + }); + + $('input[name=context_name]').live('keypress', function(){ + $(this).attr('edited', 'true'); + }); + $('input[name=tag_list]').live('keypress', function(){ + $(this).attr('edited', 'true'); + }); } $(document).ready(function() {