Drag todos between contexts

Closes #1020
This commit is contained in:
Eric Allen 2010-04-10 16:08:09 -04:00
parent 05cbea50aa
commit 67df223488
5 changed files with 45 additions and 5 deletions

View file

@ -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

View file

@ -16,4 +16,5 @@
</div>
<%= render :partial => "todos/todo", :collection => @not_done, :locals => { :parent_container_type => "context" } %>
</div><!-- [end:items] -->
<div id="c_<%=context.id%>_target" class="context_target drop_target"></div>
</div><!-- [end:c<%= context.id %>] -->

View file

@ -153,3 +153,5 @@ else
page.show 'error_status'
page.replace_html 'error_status', "#{error_messages_for('todo')}"
end
page << "enable_rich_interaction();"

View file

@ -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;

View file

@ -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;