4 * Ajatus - Distributed CRM
5 * @requires jQuery v1.2.1
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
16 $.ajatus = $.ajatus || {};
17 $.ajatus.views = $.ajatus.views || {};
19 $.ajatus.views.init = function()
21 var views_tab_holder = $('#tabs-views ul');
22 var app_tab_holder = $('#tabs-application ul');
23 var app_views_holder = $('#application-views ul');
25 $.each($.ajatus.views.system.available, function(i,sv){
26 var view = $.ajatus.views.system[sv];
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)
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);
42 tab.appendTo(views_tab_holder);
44 $.ajatus.tabs.prepare(tab);
47 && view.history_support) {
48 $.ajatus.history.add_map(view_hash, '$.ajatus.views.system.'+sv+'.render("list");');
50 tab.bind('click',view.tab.on_click);
53 // if ( typeof view.has_additional_views != 'undefined'
54 // && view.has_additional_views
55 // && typeof view.generate_additional_views == 'function')
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>');
64 // tab.appendTo(app_tab_holder);
66 // $.ajatus.history.add_map(data.view_hash, '$.ajatus.history.update("'+data.view_hash+'");$.ajatus.views.system.'+sv+'.render("'+name+'");');
71 if (typeof view['statics'] != 'undefined') {
72 $.ajatus.views.install_statics(sv, view);
76 && view.dynamic_history
77 && typeof view.history_register == 'function')
79 view.history_register();
81 // $.ajatus.history.add_map(view_hash, '$.ajatus.views.system.'+sv+'.render();');
83 $('li:first', views_tab_holder).addClass('tabs-selected');
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);
92 $.ajatus.history.add_map(view_hash, '$.ajatus.preferences.view.render("edit");');
94 $.each($.ajatus.preferences.client.content_types, function(key,type){
98 var view_hash = '#view.'+key;
99 var tab = $('<li><a href="'+view_hash+'"><span>'+$.ajatus.i10n.get(type.title)+'</span></a></li>');
101 tab.appendTo(views_tab_holder);
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");');
108 tab.bind('click',type.tab.on_click);
112 if (typeof type.additional_views != 'undefined') {
113 $.each(type.additional_views, function(name, data){
114 var view_hash = '#'+data.hash_key+'.'+key;
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+'");');
120 if (typeof type['statics'] != 'undefined') {
121 $.ajatus.views.install_statics(key, type);
125 if ($.ajatus.views['custom'])
127 $.ajatus.views.get_custom_views();
131 $.ajatus.views.get_custom_views = function()
133 if ($.ajatus.preferences.client.custom_views.length > 0)
135 $.each($.ajatus.preferences.client.custom_views, function(i,cv){
136 $.ajatus.events.lock_pool.increase();
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);
142 $.ajatus.events.lock_pool.decrease();
148 $.ajatus.views.install_statics = function(view_name, view)
150 var view_exists = false;
151 var existing_rev = null;
152 var vc = $.jqCouch.connection('view');
155 _id: '_design/' + view_name,
159 $.each(view.statics, function(name,fn){
163 if (typeof(fn) == 'string') {
164 fn = $.ajatus.views.generate(fn);
167 static_views.views[name] = fn;
171 vc.exists($.ajatus.preferences.client.content_database, view_name, function(data){
173 existing_rev = data._rev;
176 var update = view.update_statics;
177 if ($.ajatus.maintenance.recreate['views']) {
187 static_views['_rev'] = existing_rev;
189 vc.save($.ajatus.preferences.client.content_database, static_views);
193 $.ajatus.views.on_change_calls = {
196 $.ajatus.views.on_change_actions = {
198 add: function(action) {
199 if ($.inArray(action, $.ajatus.views.on_change_actions.list) == -1) {
200 $.ajatus.views.on_change_actions.list.push(action);
204 $.each($.ajatus.views.on_change_actions.list, function(i,a){
207 $.ajatus.views.on_change_actions.list = [];
210 $.ajatus.views.on_change = function(new_view, keep_app_tabs)
212 // console.log('$.ajatus.views.on_change('+new_view+')');
214 if (typeof keep_app_tabs == 'undefined') {
215 keep_app_tabs = false;
218 if ( typeof($.ajatus.views.on_change_calls.called[new_view]) == 'undefined'
219 || $.ajatus.views.on_change_calls.called[new_view] == 2)
221 $.ajatus.views.on_change_calls.called[new_view] = 0;
224 // $.ajatus.debug('$.ajatus.views.on_change_calls.called['+new_view+']: '+$.ajatus.views.on_change_calls.called[new_view]);
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('');
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();
242 $.ajatus.views.generate = function(fn_str)
244 var fn = "function(){var doc = arguments[0]; "+fn_str+"}";
245 return eval('(' + fn + ')');
248 $.ajatus.views.export_view = function(table, output_type) {
249 if (typeof output_type == 'undefined') {
250 var output_type = 'csv';
252 if (typeof table == 'undefined') {
253 var table = $('table.listing', $.ajatus.application_content_area)[0];
256 var popup = window.open('exported.csv', 'Ajatus CRM - Export', 'width=765,height=480,resizable=false,scrollbars=no');
257 var csvout = popup.document;
260 if ($.browser.safari) {
264 if (output_type == 'csv') {
268 var numofRows = table.rows.length-1;
269 var numofCells = table.rows[0].cells.length-1;
271 var rowcsv = [numofRows];
273 for ( var r = 0; r <= numofRows; r++) {
276 for (c == 0; c<=numofCells; c++) {
277 if (c != numofCells) {
278 tempdata += $.trim($(table.rows[r].cells[c]).text()) + ",";
280 tempdata += $.trim($(table.rows[r].cells[c]).text()) + line_sep;
283 rowcsv[r] = tempdata;
286 csvout.open("text/comma-separated-values");
288 for (var rowcnt = 0; rowcnt <= rowcsv.length-1; rowcnt++) {
289 csvout.write(rowcsv[rowcnt]);