Ext.onReady(function(){
Ext.QuickTips.init();
var win = window.nativeWindow;
var opener = Ext.air.NativeWindow.getRootHtmlWindow();
var taskId = String(window.location).split('=')[1];
var isNew = !taskId;
var completed = false;
win.title = 'Task - ' + Ext.util.Format.ellipsis(getTask().data.title, 40);
var tb = new Ext.Toolbar({
region: 'north',
height:26,
id:'main-tb',
items:[{
id:'cpl-btn',
iconCls: 'icon-mark-complete',
text: 'Mark Complete',
handler: function(){
setCompleted(!completed);
if(completed) {
setMsg('This task was completed on ' + new Date().format('l, F d, Y'));
}
if(validate()) {
(function(){
saveData();
if (completed) {
win.close();
}
}).defer(250);
}
}
},'-',
{iconCls: 'icon-delete-task', text: 'Delete', handler: function(){
Ext.Msg.confirm('Confirm Delete', 'Are you sure you want to delete this task?', function(btn){
if(btn == 'yes'){
opener.tx.data.tasks.remove(getTask());
win.close();
}
});
}}
]
});
var title = new Ext.form.TextField({
fieldLabel: 'Task Subject',
name: 'title',
anchor: '100%'
});
var dueDate = new Ext.form.DateField({
fieldLabel: 'Due Date',
name: 'dueDate',
width: 135,
format: 'm/d/Y'
});
var list = new ListSelector({
fieldLabel: 'Task List',
name: 'listId',
store: opener.tx.data.lists,
anchor: '100%'
});
list.on('render', function(){
this.menu.on('beforeshow', function(m){
list.tree.setWidth(Math.max(180, list.getSize().width));
});
});
win.addEventListener('closing', function(){
opener.tx.data.lists.unbindTree(list.tree);
});
var hasReminder = new Ext.form.Checkbox({
boxLabel: 'Reminder:',
checked: false
});
var reminder = new Ext.ux.form.DateTime({
name: 'reminder',
disabled: true,
timeFormat: 'g:i A',
dateFormat: 'm/d/Y',
timeConfig: {
tpl: opener.Templates.timeField,
listClass:'x-combo-list-small',
maxHeight:100
}
});
var description = new Ext.form.HtmlEditor({
hideLabel: true,
name: 'description',
anchor: '100% -95', // anchor width by percentage and height by raw adjustment
onEditorEvent : function(e){
var t;
if(e.browserEvent.type == 'mousedown' && (t = e.getTarget('a', 3))){
t.target = '_blank';
}
this.updateToolbar();
}
});
var form = new Ext.form.FormPanel({
region:'center',
baseCls: 'x-plain',
labelWidth: 75,
margins:'10 10 5 10',
buttonAlign: 'right',
minButtonWidth: 80,
buttons:[{
text: 'OK',
handler: function(){
if(validate()) {
saveData();
window.nativeWindow.close();
}
}
},{
text: 'Cancel',
handler: function(){ window.nativeWindow.close(); }
}],
items: [{
xtype:'box',
autoEl: {id:'msg'}
},
title,{
layout: 'column',
anchor: '100%',
baseCls: 'x-plain',
items: [{
width: 250,
layout: 'form',
baseCls: 'x-plain',
items: dueDate
}, {
columnWidth: 1,
layout: 'form',
baseCls: 'x-plain',
labelWidth:55,
items: list
}]
},{
xtype:'box',
autoEl: {cls:'divider'}
},{
layout: 'column',
anchor: '100%',
baseCls: 'x-plain',
items: [{
width: 80,
layout: 'form',
baseCls: 'x-plain',
hideLabels: true,
items: hasReminder
}, {
columnWidth: 1,
layout: 'form',
baseCls: 'x-plain',
hideLabels: true,
items: reminder
}]
},
description]
});
var viewport = new Ext.Viewport({
layout:'border',
items:[tb, form]
});
var msg = Ext.get('msg');
var task = getTask();
if(task && task.data.completedDate){
setMsg('This task was completed on ' + task.data.completedDate.format('l, F d, Y'));
}
hasReminder.on('check', function(cb, checked){
reminder.setDisabled(!checked);
if(checked && !reminder.getValue()){
reminder.setValue(opener.tx.data.getDefaultReminder(getTask()));
}
});
refreshData.defer(10);
win.visible = true;
win.activate();
title.focus();
function refreshData(){
if(!isNew){
var task = getTask();
hasReminder.setValue(!!task.data.reminder);
form.getForm().loadRecord(task);
setCompleted(task.data.completed);
}
}
function saveData(){
var task;
if(isNew){
task = opener.tx.data.tasks.createTask(
title.getValue(),
list.getRawValue(),
dueDate.getValue(),
description.getValue(),
completed
);
}else{
task = getTask();
task.set('completed', completed);
}
if(!hasReminder.getValue()){
reminder.setValue('');
}
form.getForm().updateRecord(task);
}
function setCompleted(value){
completed = value;
var cplBtn = Ext.getCmp('cpl-btn');
if (completed) {
cplBtn.setText('Mark Active');
cplBtn.setIconClass('icon-mark-active');
hasReminder.disable();
reminder.disable();
}
else {
cplBtn.setText('Mark Complete');
cplBtn.setIconClass('icon-mark-complete');
setMsg(null);
hasReminder.enable();
reminder.setDisabled(!hasReminder.checked);
}
}
function setMsg(msgText){
var last;
if(!msgText) {
msg.setDisplayed(false);
} else {
msg.setDisplayed('');
msg.update(msgText);
}
description.anchorSpec.bottom = function(v){
if(v !== last){
last = v;
var h = msg.getHeight();
return v - 95 - (h ? h + 8 : 0);
}
};
form.doLayout();
}
function validate(){
if(Ext.isEmpty(title.getValue(), false)){
Ext.Msg.alert('Warning', 'Unable to save changes. A subject is required.', function(){
title.focus();
});
return false;
}
return true;
}
function getTask(){
var t = opener.tx.data.tasks.lookup(taskId);
if(t){
//workaround WebKit cross-frame date issue
fixDateMember(t.data, 'completedDate');
fixDateMember(t.data, 'reminder');
fixDateMember(t.data, 'dueDate');
}
return t;
}
});