OC.Tasks = { bool_string_cmp:function(a, b) { if (a === b) { return 0; } if (a === false) { return -1; } if (b === false) { return 1; } return a.localeCompare(b); }, create_task_div:function(task) { var actions = $('#task_actions_template'); var summary_container = $('

') .attr('title', task.description) ; OC.Tasks.setSummary(summary_container, task); var task_container = $('

') .addClass('task') .data('task', task) .data('show_count', 0) .attr('data-id', task.id) .append(summary_container) //.append(actions.clone().removeAttr('id')) ; task_container.find('.summary a').click(OC.Tasks.summaryClickHandler); var checkbox = $('') .click(OC.Tasks.complete_task); if (task.completed) { checkbox.attr('checked', 'checked'); task_container.addClass('done'); } $('
') .addClass('completed') .append(checkbox) .prependTo(task_container); var priority = task.priority; $('
') .addClass('tag') .addClass('priority') .addClass('priority-'+(priority?priority:'n')) .text(priority) .prependTo(task_container); if (task.location) { $('
') .addClass('tag') .addClass('location') .text(task.location) .appendTo(task_container); } if (task.categories.length > 0) { var categories = $('
') .addClass('categories') .appendTo(task_container); $(task.categories).each(function(i, category){ categories.append($('') .addClass('tag') .text(category) ); }); } return task_container; }, filter:function(tag, find_filter) { var tag_text = $(tag).text(); var filter = !$(tag).hasClass('active'); OC.Tasks.filterUpdate(filter, function(task_container){ var found = 0; task_container.find(find_filter).each(function(){ if ($(this).text() == tag_text) { $(this).toggleClass('active'); found = 1; } }); return found; }); }, filterUpdate:function(filter, find_filter) { var show_count = $('#tasks_list').data('show_count'); show_count += filter ? +1 : -1; $('#tasks_list').data('show_count', show_count); $('#tasks .task').each(function(i, task_container){ task_container = $(task_container); var task = task_container.data('task'); var found = find_filter(task_container); var hide_count = task_container.data('show_count'); if (!filter) { hide_count-=found; } else { hide_count+=found; } if (hide_count == show_count) { task_container.show(); } else { task_container.hide(); } task_container.data('show_count', hide_count); }); }, order:function(sort, get_property, empty_label) { var tasks = $('#tasks .task').not('.clone'); tasks.sort(sort); var current = null; tasks.detach(); var $tasks = $('#tasks_list').empty(); var container = $tasks; tasks.each(function(){ if (get_property) { var label = get_property($(this).data('task')); if(label != current) { current = label; container = $('
').appendTo($tasks); if (label == '' && empty_label) { label = empty_label; } $('

').text(label).appendTo(container); } } container.append(this); }); }, setSummary:function(summary_container, task){ var summary = $(''+task.summary+'') .click(OC.Tasks.summaryClickHandler); summary_container.html(summary); }, summaryClickHandler:function(event){ event.preventDefault(); //event.stopPropagation(); var task = $(this).closest('.task').data('task'); var summary_container = $(this).parent(); var input = $('').val($(this).text()).blur(function(){ var old_summary = task.summary; task.summary = $(this).val(); OC.Tasks.setSummary(summary_container, task); $.post('ajax/update_property.php', {id:task.id, type:'summary', summary:task.summary}, function(jsondata){ if(jsondata.status != 'success') { task.summary = old_summary; OC.Tasks.setSummary(summary_container, task); } }); }); summary_container.empty().append(input); input.focus(); return false; }, complete_task:function() { var $task = $(this).closest('.task'), task = $task.data('task'), checked = $(this).is(':checked'); $.post('ajax/update_property.php', {id:task.id, type:'complete', checked:checked?1:0}, function(jsondata){ if(jsondata.status == 'success') { task = jsondata.data; $task.data('task', task) if (task.completed) { $task.addClass('done'); } else { $task.removeClass('done'); } } else{ alert(jsondata.data.message); } }, 'json'); }, List: { create_list_div:function(category){ return $('
').text(category) .click(function(){ OC.Tasks.filter(this, 'div.categories .tag'); $(this).toggleClass('active'); }); } } }; $(document).ready(function(){ fillHeight($('#tasks')); //fillHeight($('#tasks_lists')); //fillHeight($('#tasks_list')); //fillWindow($('#task_details')); /*------------------------------------------------------------------------- * Actions for startup *-----------------------------------------------------------------------*/ $.getJSON(OC.filePath('tasks', 'ajax', 'gettasks.php'), function(jsondata) { var tasks = $('#tasks_list').empty().data('show_count', 0); $(jsondata).each(function(i, task) { tasks.append(OC.Tasks.create_task_div(task)); }); if( $('#tasks_list div').length > 0 ){ $('#tasks_list div').first().addClass('active'); } $(categories).each(function(i, category) { $('#tasks_lists .all').after(OC.Tasks.List.create_list_div(category)); }); $('#tasks_lists .all').click(function(){ $('#tasks_lists .active').click(); }); $('#tasks_lists .done').click(function(){ var filter = !$(this).hasClass('active'); OC.Tasks.filterUpdate(filter, function(task_container){ return task_container.hasClass('done'); }); $(this).toggleClass('active'); }); }); /*------------------------------------------------------------------------- * Event handlers *-----------------------------------------------------------------------*/ $('#tasks div.categories .tag').live('click',function(){ OC.Tasks.filter(this, 'div.categories .tag'); var tag_text = $(this).text(); $('#tasks_lists div:not(".all"):not(".done")').each(function(){ if ($(this).text() == tag_text) { $(this).toggleClass('active'); } }); }); $('#tasks .priority.tag').live('click',function(){ OC.Tasks.filter(this, '.priority.tag'); }); $('#tasks .location.tag').live('click',function(){ OC.Tasks.filter(this, '.location.tag'); }); $('#tasks_order_category').click(function(){ var tasks = $('#tasks .task').not('.clone'); var collection = {}; tasks.each(function(i, task) { var categories = $(task).data('task').categories; $(categories).each(function() { if (!collection.hasOwnProperty(this)) { collection[this] = []; } collection[this].push(task); if (categories.length > 1) { task = $(task).clone(true).addClass('clone').get(0); } }); if (categories.length == 0) { if (!collection.hasOwnProperty('')) { collection[''] = []; } collection[''].push(task); } }); var labels = []; for (var label in collection) { labels.push(label); } labels.sort(); tasks.detach(); var $tasks = $('#tasks_list').empty(); for (var index in labels) { var label = labels[index]; var container = $('
').appendTo($tasks); if (label == '') { label = t('tasks', 'No category'); } $('

').text(label).appendTo(container); container.append(collection[labels[index]]); } }); $('#tasks_order_due').click(function(){ OC.Tasks.order(function(a, b){ a = $(a).data('task').due; b = $(b).data('task').due; return OC.Tasks.bool_string_cmp(a, b); }); }); $('#tasks_order_complete').click(function(){ OC.Tasks.order(function(a, b){ return ($(a).data('task').complete - $(b).data('task').complete) || OC.Tasks.bool_string_cmp($(a).data('task').completed, $(b).data('task').completed); }); }); $('#tasks_order_location').click(function(){ OC.Tasks.order(function(a, b){ a = $(a).data('task').location; b = $(b).data('task').location; return OC.Tasks.bool_string_cmp(a, b); }); }); $('#tasks_order_prio').click(function(){ OC.Tasks.order(function(a, b){ return $(a).data('task').priority - $(b).data('task').priority; }); }); $('#tasks_order_label').click(function(){ OC.Tasks.order(function(a, b){ return $(a).data('task').summary.localeCompare( $(b).data('task').summary); }); }); $('#tasks_delete').live('click',function(){ var id = $('#task_details').data('id'); $.getJSON('ajax/delete.php',{'id':id},function(jsondata){ if(jsondata.status == 'success'){ $('#tasks [data-id="'+jsondata.data.id+'"]').remove(); $('#task_details').data('id',''); $('#task_details').html(''); } else{ alert(jsondata.data.message); } }); return false; }); $('#tasks_newtask').click(function(){ $.getJSON('ajax/addtaskform.php',{},function(jsondata){ if(jsondata.status == 'success'){ $('#task_details').data('id',''); $('#task_details').html(jsondata.data.page); } else{ alert(jsondata.data.message); } }); return false; }); $('#tasks_addtaskform input[type="submit"]').live('click',function(){ $.post('ajax/addtask.php',$('#tasks_addtaskform').serialize(),function(jsondata){ if(jsondata.status == 'success'){ $('#task_details').data('id',jsondata.data.id); $('#task_details').html(jsondata.data.page); $('#tasks_list').append(OC.Tasks.create_task_div(jsondata.data.task)); } else{ alert(jsondata.data.message); } }, 'json'); return false; }); $('#tasks_edit').live('click',function(){ var id = $('#task_details').data('id'); $.getJSON('ajax/edittaskform.php',{'id':id},function(jsondata){ if(jsondata.status == 'success'){ $('#task_details').html(jsondata.data.page); $('#task_details #categories').multiple_autocomplete({source: categories}); } else{ alert(jsondata.data.message); } }); return false; }); $('#tasks_edittaskform #percent_complete').live('change',function(event){ if ($(event.target).val() == 100){ $('#tasks_edittaskform #complete').show(); }else{ $('#tasks_edittaskform #complete').hide(); } }); $('#tasks_edittaskform input[type="submit"]').live('click',function(){ $.post('ajax/edittask.php',$('#tasks_edittaskform').serialize(),function(jsondata){ $('.error_msg').remove(); $('.error').removeClass('error'); if(jsondata.status == 'success'){ var id = jsondata.data.id; $('#task_details').data('id',id); $('#task_details').html(jsondata.data.page); var task = jsondata.data.task; $('#tasks .task[data-id='+id+']') .data('task', task) .html(OC.Tasks.create_task_div(task).html()); } else{ var errors = jsondata.data.errors; for (k in errors){ $('#'+k).addClass('error') .after(''+errors[k]+''); } $('.error_msg').effect('highlight', {}, 3000); $('.error').effect('highlight', {}, 3000); } }, 'json'); return false; }); OCCategories.app = 'calendar'; });