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