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 @@ + + + The source code + + + + +
+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