tracks/app/views/todos/toggle_check.js.erb
2014-08-13 15:33:32 +02:00

185 lines
No EOL
7.2 KiB
Text

<% unless @saved -%>
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")
-%>
var <%= object_name %> = {
animate: function() {
<% if @wants_redirect_after_complete && @todo.completed? -%>
<%=object_name%>.redirect_after_complete();
<% else
animation = []
unless source_view_is(:search)
animation << "remove_todo"
if @todo.completed?
animation << "add_to_completed_container" unless source_view_is_one_of(:calendar, :deferred)
animation << "add_new_recurring_todo"
animation << "activate_pending_todos"
else
animation << "add_todo_to_container" unless source_view_is(:done)
animation << "block_predecessors"
end
animation << "update_empty_container" if source_view_is_one_of(:tag, :todo, :deferred, :project, :context)
animation << "regenerate_predecessor_family"
else
animation << "replace_todo"
end -%>
<%= render_animation(animation, object_name) %>
TracksPages.set_page_badge(<%= @down_count %>);
<% end -%>
},
redirect_after_complete: function() {
var path = "<%= @todo.project_id.nil? ? root_path : project_path(@todo.project) -%>";
redirect_to(path);
},
remove_todo: function(next_steps) {
<% if (@remaining_in_context == 0) && update_needs_to_hide_container
# remove context with deleted todo
-%>
$('#<%= item_container_id(@original_item)%>').slideUp(400, function() {
$('#<%=dom_id(@todo)%>').remove();
next_steps.go();
});
<%= show_empty_message_in_source_container -%>
<% else
# remove only the todo
-%>
<%= show_empty_message_in_source_container %>
$('#<%=dom_id(@todo)%>').slideUp(400, function() {
$('#<%=dom_id(@todo)%>').remove();
next_steps.go();
});
<% end -%>
},
add_to_completed_container: function(next_steps) {
<% unless current_user.prefs.hide_completed_actions? -%>
$('#<%= item_container_id(@todo) %>_items').prepend(<%=object_name%>.html_for_todo());
$("#completed_container-empty-d").slideUp(100);
<%=object_name%>.highlight_updated_todo(next_steps);
<% end -%>
},
replace_todo: function(next_steps) {
$('#<%= dom_id(@todo) %>').html(<%=object_name%>.html_for_todo());
next_steps.go();
},
add_todo_to_container: function(next_steps) {
$('#<%= item_container_id(@todo) %>_items').append(<%=object_name%>.html_for_todo());
<% if should_make_context_visible -%>
$('#<%= item_container_id(@todo) %>').slideDown(500, function() {
$("#<%= empty_container_msg_div_id %>").slideUp(100);
<%=object_name%>.highlight_updated_todo(next_steps);
});
<% else -%>
$("#<%= empty_container_msg_div_id(@todo) %>").slideUp(100);
<%=object_name%>.highlight_updated_todo(next_steps);
<% end -%>
<% if @completed_count == 0 -%>
$("#completed_container-empty-d").slideDown(100);
<% end -%>
},
add_new_recurring_todo: function(next_steps) {
<% # show new todo if the completed todo was recurring
if @todo.from_recurring_todo?
unless @new_recurring_todo.nil? || (@new_recurring_todo.deferred? && !source_view_is(:deferred)) -%>
$('#<%= item_container_id(@new_recurring_todo) %>_items').append(<%=object_name%>.html_for_recurring_todo());
$('#c<%= @new_recurring_todo.context_id %>').slideDown(500, function() {
<%=object_name%>.highlight_updated_recurring_todo(next_steps);
});
<% else
if @todo.recurring_todo.todos.active.count(:all) == 0 && @new_recurring_todo.nil? -%>
TracksPages.page_inform("<%=t('todos.recurrence_completed')%>");
<% end -%>
next_steps.go();
<% end
else -%>
next_steps.go();
<% end -%>
},
update_empty_container: function(next_steps) {
<% if @down_count==0 -%>
$('#no_todos_in_view').slideDown(400, function(){ next_steps.go(); });
<% else -%>
$('#no_todos_in_view').slideUp(400, function(){ next_steps.go(); });
<% end -%>
},
<% if @new_recurring_todo # hide js if @new_recurring_todo is not there-%>
highlight_updated_recurring_todo: function(next_steps) {
TodoItems.highlight_todo('#<%= dom_id(@new_recurring_todo)%>');
next_steps.go();
},
<% end -%>
highlight_updated_todo: function(next_steps) {
TodoItems.highlight_todo('#<%= dom_id(@todo)%>');
next_steps.go();
},
activate_pending_todos: function(next_steps) {
<% # Activate pending todos that are successors of the completed
if @pending_to_activate
# do not render the js in case of an error or if no todos to activate
@pending_to_activate.each do |t|
html = escape_javascript(render(:partial => t, :locals => { :parent_container_type => parent_container_type }))
# only project and tag view have a deferred/blocked container
if source_view_is_one_of(:project,:tag) -%>
$('#<%= dom_id(t) %>').slideUp(400, function() {
$('#<%= dom_id(t) %>').remove();
$('#<%= item_container_id(t) %>_items').append("<%= html %>");
<%= "$('#deferred_pending_container-empty-d').show();".html_safe if @remaining_deferred_or_pending_count==0 -%>
});
<% else -%>
$('#<%= item_container_id(t) %>_items').append("<%= html%>");
<% end -%>
TodoItems.highlight_todo('#<%= dom_id(t)%>');
<% end -%>
<% end -%>
next_steps.go();
},
block_predecessors: function(next_steps) {
<% # Block active todos that are successors of the uncompleted
if @saved && @active_to_block
# do not render the js in case of an error or if no todos to block
@active_to_block.each do |t| %>
$('#<%= 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("<%= js_render(t, { :parent_container_type => parent_container_type }) %>");
<% end -%>
});
<% end -%>
<% end -%>
next_steps.go();
},
regenerate_predecessor_family: function(next_steps) {
<%
if @predecessors
parents = @predecessors.to_a
until parents.empty?
parent = parents.pop
parents += parent.predecessors -%>
$('#<%= dom_id(parent) %>').html("<%= js_render(parent, { :parent_container_type => parent_container_type }) %>");
<%end
end
-%>
next_steps.go();
},
html_for_recurring_todo: function() {
<%-
js = @new_recurring_todo ? js_render(@new_recurring_todo, { :parent_container_type => parent_container_type }) : ""
-%>
return "<%= js %>";
},
html_for_todo: function() {
<%-
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 %>";
}
}
<%=object_name%>.animate();
<% end -%>