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
.locker
= $.ajatus
.locker
|| {};
18 $.ajatus
.events
= $.ajatus
.events
|| {};
20 $.ajatus
.events
.locks
= {
23 $.extend($.ajatus
.events
.locks
, {
26 var new_count
= $.ajatus
.events
.locks
.list
.push(lock
);
29 remove: function(index
)
31 $.ajatus
.events
.locks
.list
= $.grep( $.ajatus
.events
.locks
.list
, function(n
,i
){
35 update: function(index
, lock
)
37 $.ajatus
.events
.locks
.list
[index
] = lock
;
41 $.ajatus
.events
.lock = function(options
)
45 this.options
= $.extend({
46 msg
: '<h1><img src="'+$.ajatus
.preferences
.client
.application_url
+'images/loading-small.gif" /> ' + $.ajatus
.i10n
.get('Loading Ajatus') + '...</h1>',
50 disable_application
: true
53 this._id
= $.ajatus
.events
.locks
.add(this);
55 if ( !this.options
.dialog
56 && this.options
.disable_application
)
58 $.blockUI(this.options
.msg
);
61 if (this.options
.watch
)
67 $.each(this.options
.watch
, function(i
,n
){
73 this._watcher
= new $.ajatus
.events
.watcher(watcher_opts
);
76 this._watcher
.element
.bind('on_stop', function(watcher_id
){
80 this._watcher
.start();
83 $.ajatus
.events
.locks
.update(this);
86 $.extend($.ajatus
.events
.lock
.prototype, {
88 if ( !this.options
.dialog
89 && this.options
.disable_application
)
94 if ( this.options
.on_release
95 && typeof(this.options
.on_release
) == 'function')
97 this.options
.on_release(this);
100 update: function(lock_cnt
) {
102 this._release_lock();
107 $.ajatus
.events
.watchers
= {
110 $.extend($.ajatus
.events
.watchers
, {
111 add: function(watcher
) {
112 var new_count
= $.ajatus
.events
.watchers
.list
.push(watcher
);
115 remove: function(index
) {
116 $.ajatus
.events
.watchers
.list
= $.grep( $.ajatus
.events
.watchers
.list
, function(n
,i
){
122 $.ajatus
.events
.watcher = function(options
) {
123 this.options
= $.extend({
133 if ( typeof(this.options
.validate
) != 'function'
134 && this.options
.timed
<= 0)
140 this._timeout_id
= -1;
141 this._done_safety_runs
= 0;
144 this._id
= $.ajatus
.events
.watchers
.add(this);
145 this.element
= $('<div id="ajatus_events_watcher_'+this._id
+'" />').appendTo($('body'));
147 if (this.options
.auto_start
) {
153 $.extend($.ajatus
.events
.watcher
.prototype, {
155 if (this.options
.interval
< 200) {
156 this.options
.interval
= 200; // Safari needs at least 200 ms
158 // console.log("Watcher "+this._id+" started!");
159 this._timeout_id
= setTimeout("$.ajatus.events.watchers.list["+this._id
+"]._check();", this.options
.interval
);
162 // console.log("Watcher "+this._id+" is checking status");
165 if (this.options
.timed
> 0) {
166 if ( this.elapsed
>= this.options
.timed
167 || this._done_runs
>= (this.options
.max_runs
-this.options
.safety_runs
))
171 this._done_safety_runs
= 0;
172 this.elapsed
+= this.options
.interval
;
173 this._timeout_id
= setTimeout("$.ajatus.events.watchers.list["+this._id
+"]._check();", this.options
.interval
);
176 if ( this.options
.validate()
177 || this._done_runs
>= (this.options
.max_runs
-this.options
.safety_runs
))
179 //console.log("Watcher "+this._id+" validated!");
181 if (this._done_safety_runs
< this.options
.safety_runs
) {
182 this._done_safety_runs
++;
183 //console.log("Watcher "+this._id+" doing safety run: "+this._done_safety_runs+" of "+this.options.safety_runs);
184 this._timeout_id
= setTimeout("$.ajatus.events.watchers.list["+this._id
+"]._check();", this.options
.interval
);
186 //console.log("Watcher "+this._id+" has done all safety runs!");
190 this._done_safety_runs
= 0;
191 this._timeout_id
= setTimeout("$.ajatus.events.watchers.list["+this._id
+"]._check();", this.options
.interval
);
197 // console.log("Watcher "+this._id+" ended!");
198 clearTimeout(this._timeout_id
);
200 this.element
.trigger('on_stop',[this._id
]);
204 $.ajatus
.events
.lock_pool
= {
206 increase: function() {
207 $.ajatus
.events
.lock_pool
.count
= $.ajatus
.events
.named_lock_pool
.increase('global');
208 // console.log('lock_pool increase to '+$.ajatus.events.lock_pool.count);
210 decrease: function() {
211 $.ajatus
.events
.lock_pool
.count
= $.ajatus
.events
.named_lock_pool
.decrease('global');
212 // console.log('lock_pool decrease to '+$.ajatus.events.lock_pool.count);
215 $.ajatus
.events
.named_lock_pool
.clear('global');
216 $.ajatus
.events
.lock_pool
.count
= 0;
220 $.ajatus
.events
.named_lock_pool
= {
222 count: function(name
) {
223 if ($.ajatus
.events
.named_lock_pool
.counts
[name
] == undefined) {
226 return $.ajatus
.events
.named_lock_pool
.counts
[name
];
229 increase: function(name
) {
230 if ($.ajatus
.events
.named_lock_pool
.counts
[name
] == undefined) {
231 $.ajatus
.events
.named_lock_pool
.counts
[name
] = 0;
233 $.ajatus
.events
.named_lock_pool
.counts
[name
]++;
235 //console.log('named_lock_pool increase '+name+' to '+$.ajatus.events.named_lock_pool.counts[name]);
236 return $.ajatus
.events
.named_lock_pool
.counts
[name
];
238 decrease: function(name
) {
239 if ($.ajatus
.events
.named_lock_pool
.counts
[name
] == undefined) {
240 $.ajatus
.events
.named_lock_pool
.counts
[name
] = 0;
242 $.ajatus
.events
.named_lock_pool
.counts
[name
] = $.ajatus
.events
.named_lock_pool
.counts
[name
]-1;
244 // console.log('named_lock_pool decrease '+name+' to '+$.ajatus.events.named_lock_pool.counts[name]);
245 return $.ajatus
.events
.named_lock_pool
.counts
[name
];
247 clear: function(name
) {
248 $.ajatus
.events
.named_lock_pool
.counts
[name
] = 0;