Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / docs / source / TaskStore.html
diff --git a/docs/source/TaskStore.html b/docs/source/TaskStore.html
new file mode 100644 (file)
index 0000000..cc46076
--- /dev/null
@@ -0,0 +1,173 @@
+<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
+tx.data.TaskStore = Ext.extend(Ext.data.GroupingStore, {\r
+       constructor: function(){\r
+               tx.data.TaskStore.superclass.constructor.call(this, {\r
+               sortInfo:{field: 'dueDate', direction: "ASC"},\r
+               groupField:'dueDate',\r
+               taskFilter: 'all',\r
+               reader: new Ext.data.JsonReader({\r
+                   id: 'taskId',\r
+                               fields: tx.data.Task\r
+               })\r
+           });\r
+               this.conn = tx.data.conn;\r
+           this.proxy = new Ext.sql.Proxy(tx.data.conn, 'task', 'taskId', this);\r
+       },\r
+       \r
+       applyFilter : function(filter){\r
+       if(filter !== undefined){\r
+               this.taskFilter = filter;\r
+       }\r
+        var value = this.taskFilter;\r
+        if(value == 'all'){\r
+            return this.clearFilter();\r
+        }\r
+        return this.filterBy(function(item){\r
+            return item.data.completed === value;\r
+        });\r
+    },\r
+\r
+    addTask : function(data){\r
+        this.suspendEvents();\r
+        this.clearFilter();\r
+        this.resumeEvents();\r
+        this.loadData([data], true);\r
+        this.suspendEvents();\r
+        this.applyFilter();\r
+        this.applyGrouping(true);\r
+        this.resumeEvents();\r
+        this.fireEvent('datachanged', this);\r
+    },\r
+\r
+       loadList: function(listId){\r
+               var multi = Ext.isArray(listId);\r
+               this.activeList = multi ? listId[0] : listId;\r
+               this.suspendEvents();\r
+        if(multi){\r
+                       var ps = [];\r
+                       for(var i = 0, len = listId.length; i < len; i++){\r
+                               ps.push('?');\r
+                       }\r
+                       this.load({\r
+                               params: {\r
+                                       where: 'where listId in (' + ps.join(',') + ')',\r
+                                       args: listId\r
+                               }\r
+                       });\r
+               }else{\r
+                       this.load({params: {\r
+                               where: 'where listId = ?',\r
+                               args: [listId]\r
+                       }});\r
+               }               \r
+        this.applyFilter();\r
+        this.applyGrouping(true);\r
+        this.resumeEvents();\r
+        this.fireEvent('datachanged', this);\r
+       },\r
+       \r
+       removeList: function(listId){\r
+               this.conn.execBy('delete from task where listId = ?', [listId]);\r
+               this.reload();\r
+       },\r
+       \r
+    prepareTable : function(){\r
+        try{\r
+        this.createTable({\r
+            name: 'task',\r
+            key: 'taskId',\r
+            fields: tx.data.Task.prototype.fields\r
+        });\r
+        }catch(e){console.log(e);}\r
+    },\r
+               \r
+       createTask : function(title, listText, dueDate, description, completed){\r
+               if(!Ext.isEmpty(title)){\r
+                       var listId = '';\r
+                       if(!Ext.isEmpty(listText)){\r
+                               listId = tx.data.lists.addList(Ext.util.Format.htmlEncode(listText)).id;\r
+                       }else{\r
+                               listId = tx.data.lists.newList(false).id;\r
+                       }\r
+            this.addTask({\r
+                taskId: Ext.uniqueId(),\r
+                title: Ext.util.Format.htmlEncode(title),\r
+                dueDate: dueDate||'',\r
+                description: description||'',\r
+                listId: listId,\r
+                completed: completed || false\r
+            });\r
+        }\r
+       },\r
+       \r
+       afterEdit : function(r){\r
+        if(r.isModified(this.getGroupState())){\r
+                       this.applyGrouping();\r
+               }\r
+               //workaround WebKit cross-frame date issue\r
+               fixDateMember(r.data, 'completedDate');\r
+               fixDateMember(r.data, 'reminder');\r
+               fixDateMember(r.data, 'dueDate');\r
+               if(r.isModified('completed')){\r
+                       r.editing = true;\r
+                       r.set('completedDate', r.data.completed ? new Date() : '');\r
+                       r.editing = false;\r
+               }\r
+               tx.data.TaskStore.superclass.afterEdit.apply(this, arguments);\r
+    },\r
+       \r
+       init : function(){\r
+               tx.data.lists.load();\r
+               this.load({\r
+                       callback: function(){\r
+                               // first time?\r
+                               if(this.getCount() < 1){\r
+                                       Ext.Msg.confirm('Create Tasks?', 'Your database is currently empty. Would you like to insert some demo data?', \r
+                                               function(btn){\r
+                                                       if(btn == 'yes'){\r
+                                                               tx.data.lists.loadDemoLists();\r
+                                                               this.loadDemoTasks();   \r
+                                                       }\r
+                                               }, this);\r
+                               }\r
+                       },\r
+                       scope: this\r
+               });\r
+       },\r
+       \r
+       lookup : function(id){\r
+               var task;\r
+               if(task = this.getById(id)){\r
+                       return task;\r
+               }\r
+               var data = this.proxy.table.lookup(id);\r
+               if (data) {\r
+                       var result = this.reader.readRecords([data]);\r
+                       return result.records[0];\r
+               }\r
+               return null; \r
+       },\r
+       \r
+       /* This is used to laod some demo tasks if the task database is empty */\r
+       loadDemoTasks: function(){\r
+               var s = new Date();\r
+               // hardcoded demo tasks\r
+               this.addTask({taskId: Ext.uniqueId(), title:'Update Ext 2.0 documentation', listId:'ext2', description:'', dueDate: s.add('d', 21), completed: false, reminder: ''});\r
+               this.addTask({taskId: Ext.uniqueId(), title:'Release Ext 2.l Beta 1', listId:'ext2', description:'', dueDate:s.add('d', 2), completed: false, reminder: s.add('d', 2).clearTime(true).add('h', 9)});\r
+               this.addTask({taskId: Ext.uniqueId(), title:'Take wife to see movie', listId:'family', description:'', dueDate:s.add('d', 2), completed: false, reminder: ''});\r
+               this.addTask({taskId: Ext.uniqueId(), title:'Finish Simple Tasks v2 sample app', listId:'ext2', description:'', dueDate:s.add('d', 2), completed: false, reminder: ''});\r
+               this.addTask({taskId: Ext.uniqueId(), title:'Do something other than work', listId:'fun', description:'', dueDate:s.add('d', -1), completed: false, reminder: ''});\r
+               this.addTask({taskId: Ext.uniqueId(), title:'Go to the grocery store', listId:'family', description:'', dueDate:s.add('d', -1), completed: true, reminder: '', completedDate: new Date()});\r
+               this.addTask({taskId: Ext.uniqueId(), title:'Reboot my computer', listId:'personal-misc', description:'', dueDate:s, completed: false, reminder: ''});\r
+               this.addTask({taskId: Ext.uniqueId(), title:'Respond to emails', listId:'work-misc', description:'', dueDate:s, completed: true, reminder: '', completedDate: new Date()});\r
+       }\r
+});</pre>    \r
+</body>\r
+</html>
\ No newline at end of file