diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb index 6c8703c6..994fb305 100644 --- a/app/helpers/todos_helper.rb +++ b/app/helpers/todos_helper.rb @@ -122,7 +122,7 @@ module TodosHelper :title => 'Drag onto another action to make it depend on that action', :class => 'grip') + image_tag('blank.png', :width => 16, :height => 16, :border => 0, - :title => "Drop an action to make it depend on this action", :class => 'successor_target') + :title => "Drop an action to make it depend on this action", :class => 'successor_target drop_target') end end diff --git a/app/views/contexts/_context.rhtml b/app/views/contexts/_context.rhtml index c95c93b9..7b33ee9a 100644 --- a/app/views/contexts/_context.rhtml +++ b/app/views/contexts/_context.rhtml @@ -16,4 +16,5 @@ <%= render :partial => "todos/todo", :collection => @not_done, :locals => { :parent_container_type => "context" } %> +
diff --git a/app/views/todos/update.js.rjs b/app/views/todos/update.js.rjs index 6cdf7367..d15595f5 100644 --- a/app/views/todos/update.js.rjs +++ b/app/views/todos/update.js.rjs @@ -153,3 +153,5 @@ else page.show 'error_status' page.replace_html 'error_status', "#{error_messages_for('todo')}" end + +page << "enable_rich_interaction();" diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 7aab4d4c..fc3122a9 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -232,21 +232,46 @@ function enable_rich_interaction(){ function drop_todo(evt, ui) { dragged_todo = ui.draggable[0].id.split('_')[2]; dropped_todo = $(this).parents('.item-show').get(0).id.split('_')[2]; - ui.draggable.hide(); + ui.draggable.remove(); $(this).block({message: null}); $.post(relative_to_root('todos/add_predecessor'), {successor: dragged_todo, predecessor: dropped_todo}, null, 'script'); } + function drag_todo(){ + $('.drop_target').show(); + $(this).parents(".container").find(".context_target").hide(); + } + $('.item-show').draggable({handle: '.grip', revert: 'invalid', - start: function() {$('.successor_target').show();}, - stop: function() {$('.successor_target').hide();}}); + start: drag_todo, + stop: function() {$('.drop_target').hide();}}); $('.successor_target').droppable({drop: drop_todo, tolerance: 'pointer', hoverClass: 'hover'}); + + /* Drag & drop for changing contexts */ + function drop_todo_on_context(evt, ui) { + target = $(this); + dragged_todo = ui.draggable[0].id.split('_')[2]; + context_id = this.id.split('_')[1]; + ui.draggable.remove(); + target.block({message: null}); + setTimeout(function() {target.show()}, 0); + $.post(relative_to_root('todos/update'), + {id: dragged_todo, + "todo[id]": dragged_todo, + "todo[context_id]": context_id}, + function(){target.unblock(); target.hide();}, 'script'); + } + + $('.context_target').droppable({ + drop: drop_todo_on_context, + tolerance: 'pointer', + hoverClass: 'hover'}); /* Reset auto updater */ field_touched = false; diff --git a/public/stylesheets/standard.css b/public/stylesheets/standard.css index b326652d..d214f861 100644 --- a/public/stylesheets/standard.css +++ b/public/stylesheets/standard.css @@ -939,11 +939,14 @@ div.message { cursor: move; } +.drop_target { + display:none; +} + .successor_target { background-image:url("../images/add_successor_off.png"); background-repeat: no-repeat; background-position: center right; - display: none; } .successor_target.hover { @@ -952,6 +955,15 @@ div.message { background-position: center right; } +.context_target { + height: 15px; + margin: 4px; + border: thick dotted #CCC; +} + +.context_target.hover { +} + /* Error message styles */ .fieldWithErrors { padding: 2px;