Fixed Archive views summary page items fetching
[ajatus.git] / js / ajatus.views.js
blobc353f5c217146c97d7b8e1ac81a5c219acebb94a
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.views = $.ajatus.views || {};
18     
19     $.ajatus.views.init = function()
20     {
21         var views_tab_holder = $('#tabs-views ul');
22         var app_tab_holder = $('#tabs-application ul');
23         var app_views_holder = $('#application-views ul');
24         
25         $.each($.ajatus.views.system.available, function(i,sv){
26             var view = $.ajatus.views.system[sv];
27             if (   view.in_tabs
28                 && view.tab)
29             {
30                 var view_hash = '#view.'+sv;
32                 var tab = $('<li><a href="'+view_hash+'"><span>'+$.ajatus.i10n.get(view.title)+'</span></a></li>');
34                 if (   typeof(view.application_view) != 'undefined'
35                     && view.application_view)
36                 {                    
37                     if (typeof view.icon != 'undefined') {
38                         tab = $('<li><a href="'+view_hash+'"><img src="'+ $.ajatus.preferences.client.theme_icons_url + view.icon + '" alt="'+$.ajatus.i10n.get(view.title)+'"/></a></li>');
39                         tab.appendTo(app_views_holder);
40                     }
41                 } else {                    
42                     tab.appendTo(views_tab_holder);
43                 }
44                 $.ajatus.tabs.prepare(tab);
45                 
46                 if (   $.ajatus.history
47                     && view.history_support) {
48                     $.ajatus.history.add_map(view_hash, '$.ajatus.views.system.'+sv+'.render("list");');
49                 } else {
50                     tab.bind('click',view.tab.on_click);
51                 }
52                 
53                 // if (   typeof view.has_additional_views != 'undefined'
54                 //     && view.has_additional_views
55                 //     && typeof view.generate_additional_views == 'function')
56                 // {
57                 //     app_tab_holder.html('');
58                 //     var addviews = view.generate_additional_views();
59                 //     $.each(addviews, function(name, data){                        
60                 //         var tab = $('<li><a href="'+data.view_hash+'"><span>'+$.ajatus.i10n.get(data.title)+'</span></a></li>');
61                 //         if (typeof data.icon != 'undefined') {
62                 //             tab = $('<li class="iconified"><a href="'+data.view_hash+'"><img src="'+ $.ajatus.preferences.client.theme_icons_url + data.icon + '" alt="'+$.ajatus.i10n.get(data.title)+'"/></a></li>');
63                 //         }
64                 //         tab.appendTo(app_tab_holder);
65                 // 
66                 //         $.ajatus.history.add_map(data.view_hash, '$.ajatus.history.update("'+data.view_hash+'");$.ajatus.views.system.'+sv+'.render("'+name+'");');
67                 //     });
68                 // }
69             }
70             
71             if (typeof view['statics'] != 'undefined') {
72                 $.ajatus.views.install_statics(sv, view);
73             }
74             
75             if (   $.ajatus.history
76                 && view.dynamic_history
77                 && typeof view.history_register == 'function')
78             {
79                 view.history_register();
80             }
81             // $.ajatus.history.add_map(view_hash, '$.ajatus.views.system.'+sv+'.render();');
82         });
83         $('li:first', views_tab_holder).addClass('tabs-selected');
84         
85         // Add preferences view
86         var pref_view = $.ajatus.preferences.view;
87         var view_hash = '#view.preferences';
88         var tab = $('<li><a href="'+view_hash+'"><img src="'+ $.ajatus.preferences.client.theme_icons_url + pref_view.icon + '" alt="'+$.ajatus.i10n.get(pref_view.title)+'"/></a></li>');
89         tab.appendTo(app_views_holder);
90         $.ajatus.tabs.prepare(tab);
91         
92         $.ajatus.history.add_map(view_hash, '$.ajatus.preferences.view.render("edit");');
93         
94         $.each($.ajatus.preferences.client.content_types, function(key,type){
95             if (   type.in_tabs
96                 && type.tab)
97             {
98                 var view_hash = '#view.'+key;
99                 var tab = $('<li><a href="'+view_hash+'"><span>'+$.ajatus.i10n.get(type.title)+'</span></a></li>');
100                 
101                 tab.appendTo(views_tab_holder);
102                 
103                 $.ajatus.tabs.prepare(tab);
104                 if (   $.ajatus.history
105                     && type.history_support) {
106                     $.ajatus.history.add_map(view_hash, '$.ajatus.history.update("'+view_hash+'");$.ajatus.views.on_change("'+view_hash+'");$.ajatus.preferences.client.content_types["'+key+'"].render("list");');
107                 } else {
108                     tab.bind('click',type.tab.on_click);
109                 }
110             }
111             
112             if (typeof type.additional_views != 'undefined') {
113                 $.each(type.additional_views, function(name, data){
114                     var view_hash = '#'+data.hash_key+'.'+key;
115                     
116                     $.ajatus.history.add_map(view_hash, '$.ajatus.history.update("'+view_hash+'");$.ajatus.views.on_change("'+view_hash+'");$.ajatus.preferences.client.content_types["'+key+'"].render("'+name+'");');
117                 });
118             }
119             
120             if (typeof type['statics'] != 'undefined') {
121                 $.ajatus.views.install_statics(key, type);
122             }
123         });
124         
125         if ($.ajatus.views['custom'])
126         {
127             $.ajatus.views.get_custom_views();          
128         }
129     };
130     
131     $.ajatus.views.get_custom_views = function()
132     {
133         if ($.ajatus.preferences.client.custom_views.length > 0)
134         {
135             $.each($.ajatus.preferences.client.custom_views, function(i,cv){
136                 $.ajatus.events.lock_pool.increase();
137                 
138                 $.getScript($.ajatus.preferences.client.application_url + 'js/views/custom/'+cv+'.js', function(){
139                     $.ajatus.views.custom.available[cv] = $.ajatus.views.custom[cv];
140                     $.ajatus.views.custom.init(cv);
141                     
142                     $.ajatus.events.lock_pool.decrease();
143                 });
144             });
145         }
146     };
147     
148     $.ajatus.views.install_statics = function(view_name, view)
149     {
150         var view_exists = false;
151         var existing_rev = null;
152         var vc = $.jqCouch.connection('view');
153         
154         var static_views = {
155             _id: '_design/' + view_name,
156             views: {}
157         };
158         
159         $.each(view.statics, function(name,fn){
160             if (   name
161                 && fn)
162             {
163                 if (typeof(fn) == 'string') {
164                     fn = $.ajatus.views.generate(fn);
165                 }
167                 static_views.views[name] = fn;
168             }
169         });
170         
171         vc.exists($.ajatus.preferences.client.content_database, view_name, function(data){
172             view_exists = true;
173             existing_rev = data._rev;
174         });
175         
176         var update = view.update_statics;
177         if ($.ajatus.maintenance.recreate['views']) {
178             update = true;
179         }
180         
181         if (   !view_exists
182             || update)
183         {
184             if (   view_exists
185                 && update)
186             {
187                 static_views['_rev'] = existing_rev;
188             }
189             vc.save($.ajatus.preferences.client.content_database, static_views);
190         }
191     };
192     
193     $.ajatus.views.on_change_calls = {
194         called: {}
195     };
196     $.ajatus.views.on_change_actions = {
197         list: [],
198         add: function(action) {
199             if ($.inArray(action, $.ajatus.views.on_change_actions.list) == -1) {
200                 $.ajatus.views.on_change_actions.list.push(action);
201             }
202         },
203         run: function() {
204             $.each($.ajatus.views.on_change_actions.list, function(i,a){
205                 eval(a);
206             });
207             $.ajatus.views.on_change_actions.list = [];
208         }
209     }
210     $.ajatus.views.on_change = function(new_view, keep_app_tabs)
211     {
212         // console.log('$.ajatus.views.on_change('+new_view+')');
213         
214         if (typeof keep_app_tabs == 'undefined') {
215             keep_app_tabs = false;
216         }
217         
218         if (   typeof($.ajatus.views.on_change_calls.called[new_view]) == 'undefined'
219             || $.ajatus.views.on_change_calls.called[new_view] == 2)
220         {
221             $.ajatus.views.on_change_calls.called[new_view] = 0;
222         }
223         
224         // $.ajatus.debug('$.ajatus.views.on_change_calls.called['+new_view+']: '+$.ajatus.views.on_change_calls.called[new_view]);
225         
226         if ($.ajatus.views.on_change_calls.called[new_view] < 2) {
227             $.ajatus.views.on_change_calls.called[new_view] += 1;
229             // $.ajatus.forms.clear_data();
230             if (! keep_app_tabs) {
231                 $('#tabs-application ul').html('');                
232             }
233             $.ajatus.events.named_lock_pool.clear('unsaved');
234             $.ajatus.elements.messages.clear();
235             $.ajatus.toolbar.clear();
236             $.ajatus.views.on_change_actions.run();
238             $.ajatus.document.actions.empty_pool();
239         }
240     };
241     
242     $.ajatus.views.generate = function(fn_str)
243     {
244         var fn = "function(){var doc = arguments[0]; "+fn_str+"}";
245         return eval('(' + fn + ')');
246     }
247     
248     $.ajatus.views.export_view = function(table, output_type) {
249         if (typeof output_type == 'undefined') {
250             var output_type = 'csv';
251         }
252         if (typeof table == 'undefined') {
253             var table = $('table.listing', $.ajatus.application_content_area)[0];
254         }
255         
256         var popup = window.open('exported.csv', 'Ajatus CRM - Export', 'width=765,height=480,resizable=false,scrollbars=no');
257         var csvout = popup.document;
258         
259         var line_sep = "\n";
260         if ($.browser.safari) {
261             line_sep = "<br>";
262         }
263         
264         if (output_type == 'csv') {
265             var cntrows = 0;
266             var tempdata = "";
267         
268             var numofRows = table.rows.length-1;
269             var numofCells = table.rows[0].cells.length-1;
270         
271             var rowcsv = [numofRows];
272             
273             for ( var r = 0; r <= numofRows; r++) {
274                 var c =0;
275                 tempdata = "";
276                 for (c == 0; c<=numofCells; c++) {
277                     if (c != numofCells) {
278                         tempdata += $.trim($(table.rows[r].cells[c]).text()) + ",";
279                     } else {
280                         tempdata += $.trim($(table.rows[r].cells[c]).text()) + line_sep;
281                     }
282                 }
283                 rowcsv[r] = tempdata;
284             }
285             
286             csvout.open("text/comma-separated-values");
287             
288             for (var rowcnt = 0; rowcnt <= rowcsv.length-1; rowcnt++) {
289                 csvout.write(rowcsv[rowcnt]);
290             }
291             
292             csvout.close();
293         }
294     }
295     
296 })(jQuery);