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);
54 if (typeof view['statics'] != 'undefined') {
55 $.ajatus.views.install_statics(sv, view);
59 && view.dynamic_history
60 && typeof view.history_register == 'function')
62 view.history_register();
64 // $.ajatus.history.add_map(view_hash, '$.ajatus.views.system.'+sv+'.render();');
66 $('li:first', views_tab_holder).addClass('tabs-selected');
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);
75 $.ajatus.history.add_map(view_hash, '$.ajatus.preferences.view.render("edit");');
77 $.each($.ajatus.preferences.client.content_types, function(key,type){
81 var view_hash = '#view.'+key;
82 var tab = $('<li><a href="'+view_hash+'"><span>'+$.ajatus.i10n.get(type.title)+'</span></a></li>');
84 if ( typeof(type.application_tab) != 'undefined'
85 && type.application_tab)
87 tab.appendTo(app_tab_holder);
89 tab.appendTo(views_tab_holder);
92 $.ajatus.tabs.prepare(tab);
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");');
97 tab.bind('click',type.tab.on_click);
101 if (typeof type.additional_views != 'undefined') {
102 $.each(type.additional_views, function(name, data){
103 var view_hash = '#'+data.hash_key+'.'+key;
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+'");');
109 if (typeof type['statics'] != 'undefined') {
110 $.ajatus.views.install_statics(key, type);
114 if ($.ajatus.views['custom'])
116 $.ajatus.views.get_custom_views();
120 $.ajatus.views.get_custom_views = function()
122 if ($.ajatus.preferences.client.custom_views.length > 0)
124 $.each($.ajatus.preferences.client.custom_views, function(i,cv){
125 $.ajatus.events.lock_pool.increase();
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);
131 $.ajatus.events.lock_pool.decrease();
137 $.ajatus.views.install_statics = function(view_name, view)
139 var view_exists = false;
140 var existing_rev = null;
141 var vc = $.jqCouch.connection('view');
144 _id: '_design/' + view_name,
148 $.each(view.statics, function(name,fn){
152 if (typeof(fn) == 'string') {
153 fn = $.ajatus.views.generate(fn);
156 static_views.views[name] = fn;
160 vc.exists($.ajatus.preferences.client.content_database, view_name, function(data){
162 existing_rev = data._rev;
166 || view.update_statics)
169 && view.update_statics)
171 static_views['_rev'] = existing_rev;
173 vc.save($.ajatus.preferences.client.content_database, static_views);
177 $.ajatus.views.on_change_calls = {
180 $.ajatus.views.on_change_actions = {
182 add: function(action) {
183 if ($.inArray(action, $.ajatus.views.on_change_actions.list) == -1) {
184 $.ajatus.views.on_change_actions.list.push(action);
188 $.each($.ajatus.views.on_change_actions.list, function(i,a){
191 $.ajatus.views.on_change_actions.list = [];
194 $.ajatus.views.on_change = function(new_view)
196 // console.log('$.ajatus.views.on_change('+new_view+')');
198 if ( typeof($.ajatus.views.on_change_calls.called[new_view]) == 'undefined'
199 || $.ajatus.views.on_change_calls.called[new_view] == 2)
201 $.ajatus.views.on_change_calls.called[new_view] = 0;
204 // $.ajatus.debug('$.ajatus.views.on_change_calls.called['+new_view+']: '+$.ajatus.views.on_change_calls.called[new_view]);
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();
220 $.ajatus.views.generate = function(fn_str)
222 var fn = "function(){var doc = arguments[0]; "+fn_str+"}";
223 return eval('(' + fn + ')');
226 $.ajatus.views.export_view = function(table, output_type) {
227 if (typeof output_type == 'undefined') {
228 var output_type = 'csv';
230 if (typeof table == 'undefined') {
231 var table = $('table.listing', $.ajatus.application_content_area)[0];
234 var popup = window.open('exported.csv', 'Ajatus CRM - Export', 'width=765,height=480,resizable=false,scrollbars=no');
235 var csvout = popup.document;
238 if ($.browser.safari) {
242 if (output_type == 'csv') {
246 var numofRows = table.rows.length-1;
247 var numofCells = table.rows[0].cells.length-1;
249 var rowcsv = [numofRows];
251 for ( var r = 0; r <= numofRows; r++) {
254 for (c == 0; c<=numofCells; c++) {
255 if (c != numofCells) {
256 tempdata += $.trim($(table.rows[r].cells[c]).text()) + ",";
258 tempdata += $.trim($(table.rows[r].cells[c]).text()) + line_sep;
261 rowcsv[r] = tempdata;
264 csvout.open("text/comma-separated-values");
266 for (var rowcnt = 0; rowcnt <= rowcsv.length-1; rowcnt++) {
267 csvout.write(rowcsv[rowcnt]);