Fixed timed event check
[ajatus.git] / js / content_types / note.js
bloba06b7c52821125bc84822d6b195c53536f33b8f4
1 /*
2  * This file is part of
3  *
4  * Ajatus - Distributed CRM
5  * @requires jQuery v1.2.1
6  * 
7  * Copyright (c) 2007 Jerry Jalava <jerry.jalava@gmail.com>
8  * Copyright (c) 2007 Nemein Oy <http://nemein.com>
9  * Website: http://ajatus.info
10  * Licensed under the GPL license
11  * http://www.gnu.org/licenses/gpl.html
12  * 
13  */
15 (function($){
16     $.ajatus = $.ajatus || {};
17     $.ajatus.content_type = $.ajatus.content_type || {};
18     
19     $.ajatus.content_type.note = function()
20     {
21         var self = this;
22         this.name = 'note';
23         this.title = 'Note';
24         this.in_tabs = true;
25         this.history_support = true;
26         this.enable_additionals = true;
27         
28         this.max_items_before_pool = $.ajatus.renderer_defaults.max_items_before_pool;
29         this.pool_settings = {
30             enabled: true,
31             settings: {
32                 type: 'scroll'
33             }
34         };
35         
36         this.schema = {
37             title: {
38                 label: 'Title',
39                 widget: {
40                     name: 'text',
41                     config: {}
42                 },
43                 def_val: '',
44                 required: true
45             },
46             description: {
47                 label: 'Description',
48                 widget: {
49                     name: 'wiki',
50                     config: {}
51                 },
52                 def_val: ''
53             },
54             tags: {
55                 label: 'Tags',
56                 widget: {
57                     name: 'tags',
58                     config: {}
59                 },
60                 def_val: []
61             }
62         };
63         this.original_schema = $.ajatus.utils.object.clone(this.schema);
64         
65         this.views = {
66             all: function(doc) {
67                 if (doc.value._type == 'note')
68                 {
69                     return doc.value;
70                 }
71             },
72             list: function(doc) {
73                 if (   doc.value._type == 'note'
74                     && doc.value.metadata.archived.val == false
75                     && doc.value.metadata.deleted.val == false)
76                 {
77                     map(doc.value.metadata.created, {
78                         "_type": doc.value._type,
79                         "title": doc.value.title,
80                         "created": doc.value.metadata.created,
81                         "creator": doc.value.metadata.creator,
82                         "tags": doc.value.tags
83                     });
84                 }
85             }
86         };
87         
88         this.statics = {
89             list: this.views.list
90         };
91         
92         this.list_headers = [
93             'title', 'created', 'creator'
94         ];
95         
96         this.tab = {
97             on_click: function(e)
98             {   
99                 $.ajatus.tabs.on_click(e);
100                 this.render();
101             }
102         };
103         
104         this.render = function() {
105             $.ajatus.active_type = self;
106             $.ajatus.layout.body.set_class('list '+self.name);
107             $.ajatus.application_content_area.html('');
109             $.ajatus.toolbar.add_item($.ajatus.i10n.get('New %s', [self.name]), {
110                 icon: self.name+'-new.png',
111                 action: function(){
112                     $.ajatus.views.system.create.render(self);
113                 },
114                 access_key: 'Ctrl+n'
115             });
116             $.ajatus.toolbar.show();
118             var doc_count = $.jqCouch.connection('view').get($.ajatus.preferences.client.content_database, 'note/list', {
119                 count: 0
120             }).total_rows;
121             
122             if (doc_count == 0) {
123                 var key = $.ajatus.i10n.plural($.ajatus.i10n.get(self.title));
124                 var msg = $.ajatus.elements.messages.static($.ajatus.i10n.get('Empty results'), $.ajatus.i10n.get('No %s found', [key]));
125                 return;
126             }
128             if (doc_count < $.ajatus.renderer_defaults.use_db_after) {
129                 
130                 var on_success = function(data) {
131                     var renderer = new $.ajatus.renderer.list(
132                         $.ajatus.application_content_area,
133                         self,
134                         {
135                             id: self.name + '_list_holder',
136                             pool: self.pool_settings
137                         }
138                     );
139                     
140                     $.each(data.rows, function(i,doc){
141                         var doc = new $.ajatus.document(doc);
142                         if ($.ajatus.tags.active != '') {
143                             if ($.ajatus.utils.array.has_match($.ajatus.tags.active, doc.value.tags.val)) {
144                                 renderer.render_item(doc, i);                            
145                             }
146                         } else {
147                             renderer.render_item(doc, i);
148                         }
149                     });
150                     renderer.items_added();
151                     renderer.enable_sorting();
153                     return data;
154                 };
155                 
156                 $.jqCouch.connection('view', on_success).get($.ajatus.preferences.client.content_database, 'note/list', {
157                     descending: true
158                 });
159             } else {
161                 this.pool_settings.settings.use_db = true;
162                 this.pool_settings.settings.db = {
163                     "static": 'note/list'
164                 };
165                 
166                 var on_success = function(data) {
167                     var renderer = new $.ajatus.renderer.list(
168                         $.ajatus.application_content_area,
169                         self,
170                         {
171                             id: self.name + '_list_holder',
172                             pool: self.pool_settings
173                         }
174                     );
175                     
176                     $.each(data.rows, function(i,doc){
177                         var doc = new $.ajatus.document(doc);
178                         if ($.ajatus.tags.active != '') {
179                             if ($.ajatus.utils.array.has_match($.ajatus.tags.active, doc.value.tags.val)) {
180                                 renderer.render_item(doc, i);                            
181                             }
182                         } else {
183                             renderer.render_item(doc, i);
184                         }
185                     });
186                     renderer.items_added(doc_count);
188                     return data;
189                 };
190                 
191                 var first_doc = $.jqCouch.connection('view').get($.ajatus.preferences.client.content_database, 'note/list', {
192                     descending: true,
193                     count: 1
194                 }).rows[0];
195                 
196                 $.jqCouch.connection('view', on_success).get($.ajatus.preferences.client.content_database, 'note/list', {
197                     descending: true,
198                     startkey: first_doc.key,
199                     startkey_docid: first_doc.id,
200                     count: $.ajatus.renderer_defaults.items_per_page
201                 });
202             }
203         };
204     };
205     
206     $.ajatus.preferences.client_defaults.content_types['note'] = new $.ajatus.content_type.note();
208 })(jQuery);