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