X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/ee06f37b0f6f6d94cd05a6ffae556660f7c4a2bc..c930e9176a5a85509c5b0230e2bff5c22a591432:/docs/source/task.html diff --git a/docs/source/task.html b/docs/source/task.html new file mode 100644 index 00000000..e1210146 --- /dev/null +++ b/docs/source/task.html @@ -0,0 +1,299 @@ + +
++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; + } + +}); + + + ++ + \ No newline at end of file