Updated Ajatus to use the new jqCouch library
[ajatus.git] / js / ajatus.views.js
blobdb22091ccc3979d3b6e5c824751ca8c9f02cf345
1 /*
2 * This file is part of
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
15 (function($){
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');
24 $.each($.ajatus.views.system.available, function(i,sv){
25 var view = $.ajatus.views.system[sv];
26 if ( view.in_tabs
27 && view.tab)
29 var view_hash = '#view.'+sv;
30 var tab = $('<li><a href="'+view_hash+'"><span>'+$.ajatus.i10n.get(view.title)+'</span></a></li>');
32 if ( typeof(view.application_tab) != 'undefined'
33 && view.application_tab)
35 tab.appendTo(app_tab_holder);
36 } else {
37 tab.appendTo(views_tab_holder);
39 $.ajatus.tabs.prepare(tab);
41 if ( $.ajatus.history
42 && view.history_support) {
43 $.ajatus.history.add_map(view_hash, '$.ajatus.views.system.'+sv+'.render();');
44 } else {
45 tab.bind('click',view.tab.on_click);
49 if (typeof view['statics'] != 'undefined') {
50 $.ajatus.views.install_statics(sv, view);
53 if ( $.ajatus.history
54 && view.dynamic_history
55 && typeof view.history_register == 'function')
57 view.history_register();
59 // $.ajatus.history.add_map(view_hash, '$.ajatus.views.system.'+sv+'.render();');
60 });
61 $('li:first', views_tab_holder).addClass('tabs-selected');
63 // Position preferences view tab
64 var pref_view = $.ajatus.preferences.view;
65 var view_hash = '#view.preferences';
66 var tab = $('<li><a href="'+view_hash+'"><span>'+$.ajatus.i10n.get(pref_view.title)+'</span></a></li>');
67 tab.prependTo(app_tab_holder);
68 $.ajatus.tabs.prepare(tab);
70 if ( typeof $.ajatus.history != 'undefined'
71 && $.ajatus.history.enabled)
73 $.ajatus.history.add_map(view_hash, '$.ajatus.preferences.view.render();');
76 $.each($.ajatus.preferences.client.content_types, function(key,type){
77 if ( type.in_tabs
78 && type.tab)
80 var view_hash = '#view.'+key;
81 var tab = $('<li><a href="'+view_hash+'"><span>'+$.ajatus.i10n.get(type.title)+'</span></a></li>');
82 tab.appendTo(views_tab_holder);
83 $.ajatus.tabs.prepare(tab);
84 if ( $.ajatus.history
85 && type.history_support) {
86 $.ajatus.history.add_map(view_hash, '$.ajatus.preferences.client.content_types["'+key+'"].render();');
87 } else {
88 tab.bind('click',type.tab.on_click);
91 if (typeof type['statics'] != 'undefined') {
92 $.ajatus.views.install_statics(key, type);
94 });
96 if ($.ajatus.views['custom'])
98 $.ajatus.views.get_custom_views();
102 $.ajatus.views.get_custom_views = function()
104 if ($.ajatus.preferences.client.custom_views.length > 0)
106 $.each($.ajatus.preferences.client.custom_views, function(i,cv){
107 $.ajatus.events.lock_pool.increase();
109 $.getScript($.ajatus.preferences.client.application_url + 'js/views/custom/'+cv+'.js', function(){
110 $.ajatus.views.custom.available[cv] = $.ajatus.views.custom[cv];
111 $.ajatus.views.custom.init(cv);
113 $.ajatus.events.lock_pool.decrease();
119 $.ajatus.views.install_statics = function(view_name, view)
121 var view_exists = false;
122 var existing_rev = null;
123 var vc = $.jqCouch.connection('view');
125 var static_views = {
126 _id: '_design/' + view_name,
127 views: {}
130 $.each(view.statics, function(name,fn){
131 if ( name
132 && fn)
134 if (typeof(fn) == 'string') {
135 fn = $.ajatus.views.generate(fn);//eval(fn)
138 static_views.views[name] = fn;
142 vc.exists($.ajatus.preferences.client.content_database, view_name, function(data){
143 view_exists = true;
144 existing_rev = data._rev;
147 if ( !view_exists
148 || view.update_statics)
150 if ( view_exists
151 && view.update_statics)
153 static_views['_rev'] = existing_rev;
155 vc.save($.ajatus.preferences.client.content_database, static_views);
159 $.ajatus.views.on_change_calls = {
160 called: {}
162 $.ajatus.views.on_change_actions = {
163 list: [],
164 add: function(action) {
165 $.ajatus.views.on_change_actions.list.push(action);
167 run: function() {
168 $.each($.ajatus.views.on_change_actions.list, function(i,a){
169 eval(a);
171 $.ajatus.views.on_change_actions.list = [];
174 $.ajatus.views.on_change = function(new_view)
176 // $.ajatus.debug('$.ajatus.views.on_change('+new_view+')');
178 if ( typeof($.ajatus.views.on_change_calls.called[new_view]) == 'undefined'
179 || $.ajatus.views.on_change_calls.called[new_view] == 2)
181 $.ajatus.views.on_change_calls.called[new_view] = 0;
184 // $.ajatus.debug('$.ajatus.views.on_change_calls.called['+new_view+']: '+$.ajatus.views.on_change_calls.called[new_view]);
186 if ($.ajatus.views.on_change_calls.called[new_view] < 2) {
187 $.ajatus.views.on_change_calls.called[new_view] += 1;
189 $.ajatus.events.named_lock_pool.clear('unsaved');
190 $.ajatus.elements.messages.clear();
191 $.ajatus.toolbar.clear();
192 $.ajatus.views.on_change_actions.run();
194 $.ajatus.document.actions.empty_pool();
198 $.ajatus.views.generate = function(fn_str)
200 var fn = "function(){var doc = arguments[0]; "+fn_str+"}";
201 return eval('(' + fn + ')');
204 })(jQuery);