fix regression and refactor todos/update.js a bit

This commit is contained in:
Reinier Balt 2014-08-10 15:57:37 +02:00
parent 4cdbd9a451
commit 8a3cb66e49
8 changed files with 332 additions and 334 deletions

View file

@ -0,0 +1,6 @@
animate: function() {
TracksPages.show_edit_errors(<%=object_name%>.html_for_error_messages());
},
html_for_error_messages: function() {
return "<%= escape_javascript(get_list_of_error_messages_for(@todo)) %>";
}

View file

@ -0,0 +1,115 @@
animate: function() {
<%-
animation = []
animation << "remove_todo" if update_needs_to_remove_todo_from_container
if replace_with_updated_todo
animation << "replace_todo"
elsif append_updated_todo
animation << ( update_needs_to_add_new_container ? "insert_new_container_with_updated_todo" : "add_to_existing_container")
end
animation << "hide_container" if update_needs_to_hide_container
animation << "highlight_updated_todo"
animation << "update_empty_container" if source_view_is_one_of(:tag, :todo, :deferred, :project, :context)
animation << "update_predecessors"
-%>
TracksPages.page_inform('<%=escape_javascript @status_message%>');
TracksPages.set_page_badge(<%= @down_count %>);
<%= render_animation(animation, object_name) %>
},
remove_todo: function(next_steps) {
$('#<%= dom_id(@todo) %>').fadeOut(400, function() {
$('#<%= dom_id(@todo) %>').remove();
<% if source_view_is :calendar
# in calendar view it is possible to have a todo on the page twice
-%>
$('#<%= dom_id(@todo) %>').remove();
<% end -%>
<%= show_empty_message_in_source_container -%>
next_steps.go();
});
},
add_to_existing_container: function(next_steps) {
$('#<%= item_container_id(@todo) %>_items').append(<%=object_name%>.html_for_todo());
<% if source_view_is_one_of(:calendar) -%>
next_steps.go();
<% if (@target_context_count==1) || ( (@todo.deferred? || @todo.pending?) && @remaining_deferred_or_pending_count == 1) -%>
$("#<%= empty_container_msg_div_id %>").slideUp(100);
<% end -%>
<% else -%>
<% unless (@todo_hidden_state_changed && @todo.hidden?) || @todo_was_deferred_from_active_state -%>
$('#<%= item_container_id(@todo) %>').fadeIn(500, function() {
next_steps.go();
<% if @target_context_count==1 -%>
$("#<%= empty_container_msg_div_id %>").slideUp(100);
<% end -%>
});
<% else -%>
next_steps.go();
<% if (@target_context_count==1) ||
( (@todo.deferred? || @todo.pending?) && @remaining_deferred_or_pending_count == 1) ||
( @todo.hidden? && @remaining_hidden_count == 1)
-%>
$("#<%= empty_container_msg_div_id %>").slideUp(100);
<% end -%>
<% end -%>
<% end -%>
},
replace_todo: function(next_steps) {
$('#<%= dom_id(@todo) %>').html(<%=object_name%>.html_for_todo());
next_steps.go();
},
hide_container: function(next_steps) {
$('#<%= item_container_id(@original_item) %>').fadeOut(400, function(){ next_steps.go(); });
<%= "$('#deferred_pending_container_empty-nd').slideDown(400);".html_safe if source_view_is(:deferred) && @down_count == 0 %>
},
highlight_updated_todo: function(next_steps) {
$('#<%= dom_id(@todo)%>').effect('highlight', {}, 2000, function(){ });
next_steps.go();
},
update_empty_container: function(next_steps) {
<% if should_show_empty_container -%>
$('div#no_todos_in_view').slideDown(400, function(){ next_steps.go(); });
<% else -%>
$('div#no_todos_in_view').fadeOut(100, function(){ next_steps.go(); });
<% end -%>
},
update_badge_count: function() {
<%
count = source_view_is(:context) ? @remaining_in_context : @down_count
count = @project_changed ? @remaining_undone_in_project : count
-%>
TracksPages.set_page_badge(<%= count %>);
},
insert_new_container_with_updated_todo: function(next_steps) {
$('#display_box').prepend(<%=object_name%>.html_for_new_container());
$('#<%= item_container_id(@todo) %>').fadeIn(500, function() { next_steps.go(); });
},
html_for_todo: function() {
return "<%= escape_javascript(render(:partial => @todo, :locals => { :parent_container_type => parent_container_type })) %>";
},
html_for_new_container: function() {
return "<%= ( @new_context_created || @new_project_created ) ? escape_javascript(render(:partial => @new_container, :locals => { :settings => {:collapsible => true }})) : "" %>";
},
update_predecessors: function(next_steps) {
<%=object_name%>.regenerate_predecessor_family();
<% if @removed_predecessors
@removed_predecessors.each do |p| -%>
if ($('#<%=item_container_id(p)%>')) {
$('#<%=dom_id(p)%>').html('<%=escape_javascript(render(:partial => p, :locals => { :settings => {:parent_container_type => parent_container_type }}))%>');
}
<% end -%>
<% end -%>
next_steps.go();
},
regenerate_predecessor_family: function() {
<%
parents = @todo.predecessors.to_a
until parents.empty?
parent = parents.pop
parents += parent.predecessors
-%>
$('#<%= dom_id(parent) %>').html("<%= escape_javascript(render(:partial => parent, :locals => { :settings => {:parent_container_type => parent_container_type }})) %>");
<%
end
-%>
}

View file

@ -1,5 +1,5 @@
<% unless @saved -%>
TracksPages.page_notify('error', "<%= t('todos.error_toggle_complete') %>", 5);
TracksPages.page_error("<%= t('todos.error_toggle_complete') %>");
<% else
# create a unique object name to prevent concurrent toggles to overwrite each other functions
object_name = unique_object_name_for("toggle_check")
@ -142,8 +142,7 @@ var <%= object_name %> = {
$('#<%= dom_id(t) %>').slideUp(400, function() {
$('#<%= 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) %>_items').append("<%= escape_javascript(render(:partial => t, :locals => { :parent_container_type => parent_container_type }))%>");
TodoItems.highlight_todo('#<%= dom_id(t)%>');
$('#<%= item_container_id(t) %>_items').append("<%= js_render(t, { :parent_container_type => parent_container_type }) %>");
<% end -%>
});
<% end -%>
@ -157,7 +156,7 @@ var <%= object_name %> = {
until parents.empty?
parent = parents.pop
parents += parent.predecessors -%>
$('#<%= dom_id(parent) %>').html("<%= escape_javascript(render(:partial => parent, :locals => { :parent_container_type => parent_container_type })) %>");
$('#<%= dom_id(parent) %>').html("<%= js_render(parent, { :parent_container_type => parent_container_type }) %>");
<%end
end
-%>
@ -165,23 +164,18 @@ var <%= object_name %> = {
},
html_for_recurring_todo: function() {
<%-
js = @new_recurring_todo ? escape_javascript(render(:partial => @new_recurring_todo, :locals => { :parent_container_type => parent_container_type })) : ""
js = @new_recurring_todo ? js_render(@new_recurring_todo, { :parent_container_type => parent_container_type }) : ""
-%>
return "<%= js %>";
},
html_for_todo: function() {
<%-
js = ""
if !source_view_is(:done)
js = escape_javascript(render(
:partial => @todo,
:locals => {
:parent_container_type => parent_container_type,
:suppress_project => source_view_is(:project),
:suppress_context => source_view_is(:context)
}
))
end
locals = {
:parent_container_type => parent_container_type,
:suppress_project => source_view_is(:project),
:suppress_context => source_view_is(:context)
}
js = source_view_is(:done) ? "" : js_render(@todo, locals)
-%>
return "<%= js %>";
}

View file

@ -1,130 +1,5 @@
<%-
object_name = unique_object_name_for("update_context_#{@context.id}")
-%>
<%- object_name = unique_object_name_for("update_todo_#{@todo.id}") -%>
var <%=object_name%> = {
<% unless @saved -%>
animate: function() {
TracksPages.show_edit_errors(html_for_error_messages());
},
html_for_error_messages: function() {
return "<%= escape_javascript(get_list_of_error_messages_for(@todo)) %>";
}
<% else -%>
animate: function() {
<%-
animation = []
animation << "remove_todo" if update_needs_to_remove_todo_from_container
if replace_with_updated_todo
animation << "replace_todo"
elsif append_updated_todo
animation << ( update_needs_to_add_new_container ? "insert_new_container_with_updated_todo" : "add_to_existing_container")
end
animation << "hide_container" if update_needs_to_hide_container
animation << "highlight_updated_todo"
animation << "update_empty_container" if source_view_is_one_of(:tag, :todo, :deferred, :project, :context)
animation << "update_predecessors"
-%>
TracksPages.page_notify('notice', '<%=escape_javascript @status_message%>', 5);
TracksPages.set_page_badge(<%= @down_count %>);
<%= render_animation(animation, object_name) %>
},
remove_todo: function(next_steps) {
$('#<%= dom_id(@todo) %>').fadeOut(400, function() {
$('#<%= dom_id(@todo) %>').remove();
<% if source_view_is :calendar
# in calendar view it is possible to have a todo on the page twice
-%>
$('#<%= dom_id(@todo) %>').remove();
<% end -%>
<%= show_empty_message_in_source_container -%>
next_steps.go();
});
},
add_to_existing_container: function(next_steps) {
$('#<%= item_container_id(@todo) %>_items').append(<%=object_name%>.html_for_todo());
<% if source_view_is_one_of(:calendar) -%>
next_steps.go();
<% if (@target_context_count==1) || ( (@todo.deferred? || @todo.pending?) && @remaining_deferred_or_pending_count == 1) -%>
$("#<%= empty_container_msg_div_id %>").slideUp(100);
<% end -%>
<% else -%>
<% unless (@todo_hidden_state_changed && @todo.hidden?) || @todo_was_deferred_from_active_state -%>
$('#<%= item_container_id(@todo) %>').fadeIn(500, function() {
next_steps.go();
<% if @target_context_count==1 -%>
$("#<%= empty_container_msg_div_id %>").slideUp(100);
<% end -%>
});
<% else -%>
next_steps.go();
<% if (@target_context_count==1) ||
( (@todo.deferred? || @todo.pending?) && @remaining_deferred_or_pending_count == 1) ||
( @todo.hidden? && @remaining_hidden_count == 1)
-%>
$("#<%= empty_container_msg_div_id %>").slideUp(100);
<% end -%>
<% end -%>
<% end -%>
},
replace_todo: function(next_steps) {
$('#<%= dom_id(@todo) %>').html(<%=object_name%>.html_for_todo());
next_steps.go();
},
hide_container: function(next_steps) {
$('#<%= item_container_id(@original_item) %>').fadeOut(400, function(){ next_steps.go(); });
<%= "$('#deferred_pending_container_empty-nd').slideDown(400);".html_safe if source_view_is(:deferred) && @down_count == 0 %>
},
highlight_updated_todo: function(next_steps) {
$('#<%= dom_id(@todo)%>').effect('highlight', {}, 2000, function(){ });
next_steps.go();
},
update_empty_container: function(next_steps) {
<% if should_show_empty_container -%>
$('div#no_todos_in_view').slideDown(400, function(){ next_steps.go(); });
<% else -%>
$('div#no_todos_in_view').fadeOut(100, function(){ next_steps.go(); });
<% end -%>
},
update_badge_count: function() {
<%
count = source_view_is(:context) ? @remaining_in_context : @down_count
count = @project_changed ? @remaining_undone_in_project : count
-%>
TracksPages.set_page_badge(<%= count %>);
},
insert_new_container_with_updated_todo: function(next_steps) {
$('#display_box').prepend(<%=object_name%>.html_for_new_container());
$('#<%= item_container_id(@todo) %>').fadeIn(500, function() { next_steps.go(); });
},
html_for_todo: function() {
return "<%= escape_javascript(render(:partial => @todo, :locals => { :parent_container_type => parent_container_type })) %>";
},
html_for_new_container: function() {
return "<%= ( @new_context_created || @new_project_created ) ? escape_javascript(render(:partial => @new_container, :locals => { :settings => {:collapsible => true }})) : "" %>";
},
update_predecessors: function(next_steps) {
regenerate_predecessor_family();
<% if @removed_predecessors
@removed_predecessors.each do |p| -%>
if ($('#<%=item_container_id(p)%>')) {
$('#<%=dom_id(p)%>').html('<%=escape_javascript(render(:partial => p, :locals => { :settings => {:parent_container_type => parent_container_type }}))%>');
}
<% end -%>
<% end -%>
next_steps.go();
},
regenerate_predecessor_family: function() {
<%
parents = @todo.predecessors.to_a
until parents.empty?
parent = parents.pop
parents += parent.predecessors
-%>
$('#<%= dom_id(parent) %>').html("<%= escape_javascript(render(:partial => parent, :locals => { :settings => {:parent_container_type => parent_container_type }})) %>");
<%
end
-%>
}
<% end # if @saved -%>
<%= render :partial => (@saved ? "update_succesfull" : "update_has_errors"), locals: {object_name: object_name} %>
}
<%=object_name%>.animate();