').jqmData('icon', t.cp ? 'check' : 'nag-unchecked')
.append(
view_link
.append(
$('').text(t.n)
).append(
$('
').addClass('ui-li-aside')
.text(t.dd)
).append(
$('
').text((t.de ? t.de : ''))
)
).append(
toggle_link
);
item.jqmData('task_id', t.id);
item.jqmData('tasklist', t.l);
NagMobile.styleTask(item, t);
l.append(item);
},
/**
* Handler for pageBeforeChange event
*
* @param object e The event object.
* @param object data The data object.
*/
toPage: function(e, data)
{
switch (data.options.parsedUrl.view) {
case 'nag-list':
NagMobile.toList(data);
e.preventDefault();
break;
case 'nag-taskform-view':
if (data.options.parsedUrl.params.task_id) {
NagMobile.getTask(data);
} else {
HordeMobile.changePage('nag-taskform-view', data);
$('#nag-taskform-view .smartmobile-title').text(Nag.strings.newTask);
}
e.preventDefault();
break;
case 'nag-lists':
NagMobile.toLists(data);
e.preventDefault();
break;
case 'nag-toggle':
NagMobile.toggleComplete(data);
e.preventDefault();
break;
}
},
/**
* Add the appropriate CSS classes to the task element based on the task's
* completion, due date etc...
*
* @param object l The tasks's LI element.
* @param object t The task hash.
*/
styleTask: function(l, t)
{
var task_due = Date.parse(t.dd),
task_overdue = task_due ? (task_due.compareTo(new Date()) < 0 ? true : false) : false;
if (!t.cp) {
l.removeClass('closed');
if (!task_overdue) {
l.removeClass('overdue');
} else {
l.addClass('overdue');
}
} else {
l.addClass('closed');
l.removeClass('overdue');
}
},
/**
* Prepare the nag-taskform-view for entering a new task.
*/
prepareFormForNew: function()
{
$('#nag-task-form')[0].reset();
// Must explicitly call refresh when the selectedIndex changes
// programmatically or the UI won't reflect the new value.
try {
$("#task_priority").selectmenu("refresh");
} catch(e) {}
$('#nag-task-form #tasklist').val('');
$('#nag-task-form #task_id').val('');
$('#nag-taskform-view a[href^="#task-delete"]').hide();
},
handleSubmit: function(e)
{
var form = $('#nag-task-form'),
data = HordeJquery.formToObject(form);
if (!data.hasOwnProperty('task_completed')) {
data.task_completed = 'off';
}
HordeMobile.doAction('saveTask', data, NagMobile.handleSubmitCallback);
},
handleSubmitCallback: function(r)
{
if (!r.task) {
return;
}
NagMobile.tasks[r.task.l][r.task.id] = r.task;
NagMobile.buildTaskList();
HordeMobile.changePage('nag-list');
},
handleCancel: function(e)
{
HordeMobile.changePage('nag-list');
},
handleDelete: function(e)
{
var taskid = $('#nag-taskform-view #task_id').val(),
tasklist = $('#nag-taskform-view #tasklist').val();
if (taskid && tasklist) {
HordeMobile.doAction('deleteTask', {
'task_id': taskid,
'tasklist': tasklist,
},
NagMobile.handleDeleteCallback
);
}
},
handleDeleteCallback: function(r)
{
if (!r.l) {
return;
}
if (r.deleted) {
delete NagMobile.tasks[r.l][r.deleted];
}
NagMobile.buildTaskList();
HordeMobile.changePage('nag-list');
},
onDocumentReady: function()
{
$(document).bind('pagebeforechange', NagMobile.toPage);
// Capture task completed clicks to add the current LI element to
// the page change data.
$('#nag-list :jqmData(role="listview")').on('click', 'li', function(e) {
var a = $(e.target).closest('a[href^="#nag-toggle"]');
if (a.length) {
$.mobile.changePage(a.attr('href'), { data: $(e.currentTarget) });
return false;
}
});
// Capture new task clicks.
$('#nag-list :jqmData(role="footer") a[href^="#nag-taskform-view"]').on('click', NagMobile.prepareFormForNew);
$('#nag-taskform-view a[href^="#task-submit"]').on('click', NagMobile.handleSubmit);
$('#nag-taskform-view a[href^="#task-cancel"]').on('click', NagMobile.handleCancel);
$('#nag-taskform-view a[href^="#task-delete"]').on('click', NagMobile.handleDelete);
NagMobile.tasklists = Nag.tasklists;
NagMobile.tasklists[undefined] = { 'name': Nag.strings.all };
}
};
$(NagMobile.onDocumentReady);