ajax 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/ajax.rb +22 -1
- data/lib/ajax/helpers/request_helper.rb +26 -12
- data/public/javascripts/ajax.js +194 -95
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/lib/ajax.rb
CHANGED
@@ -25,7 +25,10 @@ module Ajax
|
|
25
25
|
def self.is_enabled?
|
26
26
|
@enabled.nil? ? true : !!@enabled
|
27
27
|
end
|
28
|
-
|
28
|
+
class << self
|
29
|
+
alias_method :enabled?, :is_enabled?
|
30
|
+
end
|
31
|
+
|
29
32
|
# Set to false to disable this plugin completely.
|
30
33
|
#
|
31
34
|
# ActionController and ActionView helpers are still mixed in but
|
@@ -35,6 +38,24 @@ module Ajax
|
|
35
38
|
@enabled = !!value
|
36
39
|
end
|
37
40
|
|
41
|
+
# Return a boolean indicating whether to enable lazy loading assets.
|
42
|
+
# There are currently issues with some browsers when using this feature.
|
43
|
+
#
|
44
|
+
# Disabled by default.
|
45
|
+
def self.lazy_load_assets?
|
46
|
+
@lazy_load_assets.nil? ? false : !!@lazy_load_assets
|
47
|
+
end
|
48
|
+
|
49
|
+
# Set to false to disable lazy loading assets. Callbacks will
|
50
|
+
# be executed immediately.
|
51
|
+
#
|
52
|
+
# ActionController and ActionView helpers are still mixed in but
|
53
|
+
# they are effectively disabled, which means your code will still
|
54
|
+
# run.
|
55
|
+
def self.lazy_load_assets=(value)
|
56
|
+
@lazy_load_assets = !!value
|
57
|
+
end
|
58
|
+
|
38
59
|
# Return a boolean indicating whether the plugin is being mock tested.
|
39
60
|
#
|
40
61
|
# Mocking forces the environment to be returned after Ajax processing
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
module Ajax
|
2
4
|
module Helpers
|
3
5
|
module RequestHelper
|
@@ -15,33 +17,45 @@ module Ajax
|
|
15
17
|
# Hash and/or Array values are merged so you can set multiple values
|
16
18
|
def set_header(object, key, value)
|
17
19
|
headers = object.is_a?(::ActionController::Response) ? object.headers : object
|
18
|
-
|
19
|
-
|
20
|
+
|
21
|
+
info = case headers["Ajax-Info"]
|
22
|
+
when String
|
23
|
+
JSON.parse(headers["Ajax-Info"])
|
24
|
+
when Hash
|
25
|
+
headers["Ajax-Info"]
|
26
|
+
else
|
27
|
+
{}
|
20
28
|
end
|
21
29
|
|
22
30
|
# Deep merge hashes
|
23
|
-
if
|
31
|
+
if info.has_key?(key.to_s) &&
|
24
32
|
value.is_a?(Hash) &&
|
25
|
-
|
26
|
-
value =
|
33
|
+
info[key.to_s].is_a?(Hash)
|
34
|
+
value = info[key.to_s].merge(value, &DEEP_MERGE)
|
27
35
|
end
|
28
36
|
|
29
37
|
# Concat arrays
|
30
|
-
if
|
38
|
+
if info.has_key?(key.to_s) &&
|
31
39
|
value.is_a?(Array) &&
|
32
|
-
|
33
|
-
value =
|
40
|
+
info[key.to_s].is_a?(Array)
|
41
|
+
value = info[key.to_s].concat(value)
|
34
42
|
end
|
35
43
|
|
36
|
-
|
44
|
+
info[key.to_s] = value
|
45
|
+
headers["Ajax-Info"] = info.to_json
|
37
46
|
end
|
38
47
|
|
39
48
|
def get_header(object, key)
|
40
49
|
headers = object.is_a?(::ActionController::Request) ? object.headers : object
|
41
|
-
|
42
|
-
|
50
|
+
info = case headers["Ajax-Info"]
|
51
|
+
when String
|
52
|
+
JSON.parse(headers["Ajax-Info"])
|
53
|
+
when Hash
|
54
|
+
headers["Ajax-Info"]
|
55
|
+
else
|
56
|
+
{}
|
43
57
|
end
|
44
|
-
|
58
|
+
info[key.to_s]
|
45
59
|
end
|
46
60
|
|
47
61
|
# Set one or more paths that can be accessed directly without the AJAX framework.
|
data/public/javascripts/ajax.js
CHANGED
@@ -1,3 +1,64 @@
|
|
1
|
+
/**
|
2
|
+
* Script lazy loader 0.5
|
3
|
+
* Copyright (c) 2008 Bob Matsuoka
|
4
|
+
*
|
5
|
+
* This program is free software; you can redistribute it and/or
|
6
|
+
* modify it under the terms of the GNU General Public License
|
7
|
+
* as published by the Free Software Foundation; either version 2
|
8
|
+
* of the License, or (at your option) any later version.
|
9
|
+
*/
|
10
|
+
|
11
|
+
var LazyLoader = {}; //namespace
|
12
|
+
LazyLoader.timer = {}; // contains timers for scripts
|
13
|
+
LazyLoader.scripts = []; // contains called script references
|
14
|
+
LazyLoader.load = function(url, callback) {
|
15
|
+
// handle object or path
|
16
|
+
var classname = null;
|
17
|
+
var properties = null;
|
18
|
+
try {
|
19
|
+
// make sure we only load once
|
20
|
+
if (LazyLoader.scripts.indexOf(url) == -1) {
|
21
|
+
// note that we loaded already
|
22
|
+
LazyLoader.scripts.push(url);
|
23
|
+
var script = document.createElement("script");
|
24
|
+
script.src = url;
|
25
|
+
script.type = "text/javascript";
|
26
|
+
$(script).appendTo("head"); // add script tag to head element
|
27
|
+
|
28
|
+
// was a callback requested
|
29
|
+
if (callback) {
|
30
|
+
// test for onreadystatechange to trigger callback
|
31
|
+
script.onreadystatechange = function () {
|
32
|
+
if (script.readyState == 'loaded' || script.readyState == 'complete') {
|
33
|
+
callback();
|
34
|
+
}
|
35
|
+
};
|
36
|
+
|
37
|
+
// test for onload to trigger callback
|
38
|
+
script.onload = function () {
|
39
|
+
callback();
|
40
|
+
return;
|
41
|
+
};
|
42
|
+
|
43
|
+
// safari doesn't support either onload or readystate, create a timer
|
44
|
+
// only way to do this in safari
|
45
|
+
if (($.browser.webkit && !navigator.userAgent.match(/Version\/3/)) || $.browser.opera) { // sniff
|
46
|
+
LazyLoader.timer[url] = setInterval(function() {
|
47
|
+
if (/loaded|complete/.test(document.readyState)) {
|
48
|
+
clearInterval(LazyLoader.timer[url]);
|
49
|
+
callback(); // call the callback handler
|
50
|
+
}
|
51
|
+
}, 10);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
} else {
|
55
|
+
if (callback) { callback(); }
|
56
|
+
}
|
57
|
+
} catch (e) {
|
58
|
+
alert(e);
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
1
62
|
/**
|
2
63
|
* AjaxAssets
|
3
64
|
*
|
@@ -28,22 +89,28 @@ var AjaxAssets = function(array, type) {
|
|
28
89
|
addAsset: function(path) {
|
29
90
|
this.push(this.sanitizePath(path));
|
30
91
|
},
|
31
|
-
|
92
|
+
|
32
93
|
/**
|
33
94
|
* Load and add an asset. The asset is loaded using the
|
34
95
|
* unsanitized path should you need to put something in the
|
35
96
|
* query string.
|
36
97
|
*/
|
37
|
-
loadAsset: function(path) {
|
98
|
+
loadAsset: function(path, callback) {
|
38
99
|
console.log('[ajax] loading', type, path);
|
39
100
|
this.push(this.sanitizePath(path));
|
40
|
-
|
101
|
+
if (type == 'css') {
|
102
|
+
this.appendScriptTag(path, callback);
|
103
|
+
} else if ($.browser.msie || $.browser.mozilla) {
|
104
|
+
this.appendScriptTag(path, callback);
|
105
|
+
} else {
|
106
|
+
LazyLoader.load(path, callback);
|
107
|
+
}
|
41
108
|
},
|
42
109
|
|
43
110
|
/**
|
44
111
|
* Return a boolean indicating whether an asset has
|
45
112
|
* already been loaded.
|
46
|
-
*/
|
113
|
+
*/
|
47
114
|
loadedAsset: function(path) {
|
48
115
|
path = this.sanitizePath(path);
|
49
116
|
for (var i=0; i < this.length; i++) {
|
@@ -51,47 +118,45 @@ var AjaxAssets = function(array, type) {
|
|
51
118
|
return true;
|
52
119
|
}
|
53
120
|
}
|
54
|
-
return false;
|
121
|
+
return false;
|
55
122
|
},
|
56
123
|
|
57
124
|
/**
|
58
125
|
* Remove query strings and otherwise cleanup paths
|
59
126
|
* before adding them.
|
60
|
-
*/
|
127
|
+
*/
|
61
128
|
sanitizePath: function(path) {
|
62
129
|
return path.replace(/\?.*/, '');
|
63
130
|
},
|
64
|
-
|
131
|
+
|
65
132
|
/**
|
66
133
|
* Supports debugging and references the script files as external resources
|
67
134
|
* rather than inline.
|
68
135
|
*
|
69
136
|
* @see http://stackoverflow.com/questions/690781/debugging-scripts-added-via-jquery-getscript-function
|
70
|
-
*/
|
137
|
+
*/
|
71
138
|
appendScriptTag: function(url, callback) {
|
72
139
|
if (type == 'js') {
|
73
140
|
var head = document.getElementsByTagName("head")[0];
|
74
141
|
var script = document.createElement("script");
|
75
142
|
script.src = url;
|
76
143
|
script.type = 'text/javascript'
|
77
|
-
|
78
|
-
|
144
|
+
head.appendChild(script);
|
145
|
+
// Handle Script loading
|
146
|
+
if (callback) {
|
79
147
|
var done = false;
|
80
|
-
|
81
|
-
// Attach handlers for all browsers
|
82
148
|
script.onload = script.onreadystatechange = function(){
|
83
149
|
if ( !done && (!this.readyState ||
|
84
150
|
this.readyState == "loaded" || this.readyState == "complete") ) {
|
85
151
|
done = true;
|
86
152
|
if (callback)
|
87
153
|
callback();
|
88
|
-
|
154
|
+
|
89
155
|
// Handle memory leak in IE
|
90
156
|
script.onload = script.onreadystatechange = null;
|
91
157
|
}
|
92
158
|
};
|
93
|
-
}
|
94
|
-
head.appendChild(script);
|
159
|
+
}
|
95
160
|
} else if (type == 'css') {
|
96
161
|
if (url.match(/datauri/)) {
|
97
162
|
$(DATA_URI_START + '<link type="text/css" rel="stylesheet" href="'+ url +'">' + DATA_URI_END).appendTo('head');
|
@@ -102,7 +167,7 @@ var AjaxAssets = function(array, type) {
|
|
102
167
|
}
|
103
168
|
}
|
104
169
|
return undefined;
|
105
|
-
}
|
170
|
+
}
|
106
171
|
});
|
107
172
|
};
|
108
173
|
|
@@ -114,20 +179,20 @@ var AjaxAssets = function(array, type) {
|
|
114
179
|
* This must be set if you are using Ajax callbacks in your code,
|
115
180
|
* and you want them to still fire if Ajax is not enabled.
|
116
181
|
*
|
117
|
-
* <tt>default_container</tt> string jQuery selector of the default
|
182
|
+
* <tt>default_container</tt> string jQuery selector of the default
|
118
183
|
* container element to receive content.
|
119
184
|
*
|
120
185
|
* Callbacks:
|
121
186
|
*
|
122
187
|
* Callbacks can be specified using Ajax-Info{ callbacks: 'javascript to eval' },
|
123
188
|
* or by adding callbacks directly to the Ajax instance:
|
124
|
-
*
|
189
|
+
*
|
125
190
|
* window.ajax.onLoad(function() { doSomething(args); });
|
126
191
|
*
|
127
192
|
* Order of execution:
|
128
193
|
*
|
129
194
|
*
|
130
|
-
*/
|
195
|
+
*/
|
131
196
|
var Ajax = function(options) {
|
132
197
|
var self = this;
|
133
198
|
|
@@ -139,28 +204,32 @@ var Ajax = function(options) {
|
|
139
204
|
self.stylesheets = new AjaxAssets([], 'css');
|
140
205
|
self.callbacks = [];
|
141
206
|
self.loaded = false;
|
207
|
+
self.lazy_load_assets = false;
|
142
208
|
|
143
209
|
// For initial position of the loading icon. Often the mouse does not
|
144
210
|
// move so position it by the link that was clicked.
|
145
211
|
self.last_click_coords = undefined;
|
146
212
|
|
147
213
|
// Parse options
|
148
|
-
self.options = options;
|
214
|
+
self.options = options;
|
149
215
|
self.default_container = options.default_container;
|
150
216
|
if (options.enabled !== undefined) {
|
151
217
|
self.enabled = options.enabled;
|
152
218
|
}
|
153
|
-
|
219
|
+
if (options.lazy_load_assets !== undefined) {
|
220
|
+
self.lazy_load_assets = options.lazy_load_assets;
|
221
|
+
}
|
222
|
+
|
154
223
|
// Initialize on DOM ready
|
155
224
|
$(function() { self.init() });
|
156
|
-
|
225
|
+
|
157
226
|
/**
|
158
227
|
* Initializations run on DOM ready.
|
159
228
|
*
|
160
229
|
* Bind event handlers and setup jQuery Address.
|
161
230
|
*/
|
162
231
|
self.init = function() {
|
163
|
-
|
232
|
+
|
164
233
|
// Configure jQuery Address
|
165
234
|
$.address.history(true);
|
166
235
|
$.address.change = self.addressChanged;
|
@@ -168,21 +237,21 @@ var Ajax = function(options) {
|
|
168
237
|
// Insert loading image
|
169
238
|
var image = '<img src="/images/loading-icon-small.gif" id="loading-icon-small" alt="Loading..." />'
|
170
239
|
$(image).hide().appendTo($('body'));
|
171
|
-
|
240
|
+
|
172
241
|
// Bind a live event to all ajax-enabled links
|
173
242
|
$('a[data-deep-link]').live('click', self.linkClicked);
|
174
|
-
|
243
|
+
|
175
244
|
// Initialize the list of javascript assets
|
176
245
|
if (self.javascripts === undefined) {
|
177
246
|
self.javascripts = new AjaxAssets([], 'js');
|
178
|
-
|
247
|
+
|
179
248
|
$(document).find('script[type=text/javascript][src!=]').each(function() {
|
180
249
|
var script = $(this);
|
181
250
|
var src = script.attr('src');
|
182
|
-
|
251
|
+
|
183
252
|
// Local scripts only
|
184
253
|
if (src.match(/^\//)) {
|
185
|
-
|
254
|
+
|
186
255
|
// Parse parameters passed to the script via the query string.
|
187
256
|
// TODO: Untested. It's difficult for us to use this with Jammit.
|
188
257
|
if (src.match(/\Wajax.js\?.+/)) {
|
@@ -190,7 +259,7 @@ var Ajax = function(options) {
|
|
190
259
|
jQuery.each(params, function(idx, param) {
|
191
260
|
param = param.split('=');
|
192
261
|
if (param.length == 1) { return true; }
|
193
|
-
|
262
|
+
|
194
263
|
switch(param[0]) {
|
195
264
|
case 'enabled':
|
196
265
|
self.enabled = param[1] == 'false' ? false : true;
|
@@ -203,33 +272,33 @@ var Ajax = function(options) {
|
|
203
272
|
}
|
204
273
|
});
|
205
274
|
}
|
206
|
-
|
275
|
+
|
207
276
|
self.javascripts.addAsset(script.attr('src'));
|
208
277
|
}
|
209
278
|
});
|
210
279
|
}
|
211
280
|
self.initialized = true;
|
212
|
-
|
281
|
+
|
213
282
|
// Run onInit() callbacks
|
214
283
|
};
|
215
|
-
|
284
|
+
|
216
285
|
/**
|
217
286
|
* jQuery Address callback triggered when the address changes.
|
218
287
|
*/
|
219
288
|
self.addressChanged = function() {
|
220
289
|
if (document.location.pathname != '/') { return false; }
|
221
|
-
|
222
|
-
if (typeof(self.loaded_by_framework) == 'undefined' || self.loaded_by_framework != true) {
|
290
|
+
if (window.ajax.disable_address_intercept == true) {return false;}
|
291
|
+
if (typeof(self.loaded_by_framework) == 'undefined' || self.loaded_by_framework != true) {
|
223
292
|
self.loaded_by_framework = true;
|
224
|
-
return false;
|
225
|
-
}
|
226
|
-
|
227
|
-
self.loadPage({
|
293
|
+
return false;
|
294
|
+
}
|
295
|
+
|
296
|
+
self.loadPage({
|
228
297
|
url: $.address.value().replace(/\/\//, '/')
|
229
298
|
});
|
230
299
|
return true;
|
231
300
|
};
|
232
|
-
|
301
|
+
|
233
302
|
/**
|
234
303
|
* loadPage
|
235
304
|
*
|
@@ -246,7 +315,7 @@ var Ajax = function(options) {
|
|
246
315
|
* Cookies in the response are automatically set on the document.cookie.
|
247
316
|
*/
|
248
317
|
self.loadPage = function(options) {
|
249
|
-
if (!self.enabled) {
|
318
|
+
if (!self.enabled) {
|
250
319
|
document.location = options.url;
|
251
320
|
return true;
|
252
321
|
}
|
@@ -343,16 +412,16 @@ var Ajax = function(options) {
|
|
343
412
|
console.log('Using page title '+data.title);
|
344
413
|
$.address.title(data.title);
|
345
414
|
}
|
346
|
-
|
415
|
+
|
347
416
|
if (data.tab !== undefined) {
|
348
417
|
console.log('Activating tab '+data.tab);
|
349
418
|
$(data.tab).trigger('activate');
|
350
419
|
}
|
351
|
-
|
420
|
+
|
352
421
|
/**
|
353
|
-
* Load
|
422
|
+
* Load stylesheets
|
354
423
|
*/
|
355
|
-
if (data.assets
|
424
|
+
if (self.lazy_load_assets && data.assets && data.assets.stylesheets !== undefined) {
|
356
425
|
jQuery.each(jQuery.makeArray(data.assets.stylesheets), function(idx, url) {
|
357
426
|
if (self.stylesheets.loadedAsset(url)) {
|
358
427
|
console.log('[ajax] skipping css', url);
|
@@ -362,17 +431,6 @@ var Ajax = function(options) {
|
|
362
431
|
}
|
363
432
|
});
|
364
433
|
}
|
365
|
-
|
366
|
-
if (data.assets !== undefined && data.assets.javascripts !== undefined) {
|
367
|
-
jQuery.each(jQuery.makeArray(data.assets.javascripts), function(idx, url) {
|
368
|
-
if (self.javascripts.loadedAsset(url)) {
|
369
|
-
console.log('[ajax] skipping js', url);
|
370
|
-
return true;
|
371
|
-
} else {
|
372
|
-
self.javascripts.loadAsset(url);
|
373
|
-
}
|
374
|
-
});
|
375
|
-
}
|
376
434
|
|
377
435
|
/**
|
378
436
|
* Insert response
|
@@ -381,30 +439,49 @@ var Ajax = function(options) {
|
|
381
439
|
console.log('Set data ',data);
|
382
440
|
container.data('ajax-info', data)
|
383
441
|
container.html(responseText);
|
384
|
-
|
442
|
+
|
385
443
|
/**
|
386
|
-
*
|
444
|
+
* Include callbacks from Ajax-Info
|
387
445
|
*/
|
388
|
-
if (data.callbacks
|
389
|
-
|
390
|
-
|
391
|
-
});
|
446
|
+
if (data.callbacks) {
|
447
|
+
data.callbacks = jQuery.makeArray(data.callbacks);
|
448
|
+
self.callbacks.concat(data.callbacks);
|
392
449
|
}
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
450
|
+
|
451
|
+
/**
|
452
|
+
* Load javascipts
|
453
|
+
*/
|
454
|
+
if (self.lazy_load_assets && data.assets && data.assets.javascripts !== undefined) {
|
455
|
+
var count = data.assets.javascripts.length;
|
456
|
+
var callback;
|
457
|
+
|
458
|
+
jQuery.each(jQuery.makeArray(data.assets.javascripts), function(idx, url) {
|
459
|
+
if (self.javascripts.loadedAsset(url)) {
|
460
|
+
console.log('[ajax] skipping js', url);
|
461
|
+
return true;
|
462
|
+
}
|
463
|
+
|
464
|
+
// Execute callbacks once the last asset has loaded
|
465
|
+
callback = (idx == count - 1) ? undefined : self.executeCallbacks;
|
466
|
+
self.javascripts.loadAsset(url, callback);
|
397
467
|
});
|
398
|
-
|
468
|
+
} else {
|
469
|
+
// Execute callbacks immediately
|
470
|
+
self.executeCallbacks();
|
399
471
|
}
|
400
|
-
|
472
|
+
|
473
|
+
$(document).trigger('ajax.onload');
|
474
|
+
|
401
475
|
/**
|
402
|
-
* Set cookies
|
476
|
+
* Set cookies - browsers don't seem to allow this
|
403
477
|
*/
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
478
|
+
try {
|
479
|
+
var cookie = XMLHttpRequest.getResponseHeader('Set-Cookie');
|
480
|
+
if (cookie !== null) {
|
481
|
+
console.log('Setting cookie');
|
482
|
+
document.cookie = cookie;
|
483
|
+
}
|
484
|
+
} catch(e) {
|
408
485
|
}
|
409
486
|
};
|
410
487
|
|
@@ -432,28 +509,33 @@ var Ajax = function(options) {
|
|
432
509
|
*/
|
433
510
|
self.showLoadingImage = function() {
|
434
511
|
var icon = $('#loading-icon-small');
|
435
|
-
|
512
|
+
|
436
513
|
// Follow the mouse pointer
|
437
514
|
$(document).bind('mousemove', self.updateImagePosition);
|
438
|
-
|
515
|
+
|
439
516
|
// Display at last click coords initially
|
440
517
|
if (self.last_click_coords !== undefined) {
|
441
518
|
self.updateImagePosition(self.last_click_coords);
|
442
|
-
|
519
|
+
|
443
520
|
// Center it
|
444
521
|
} else {
|
522
|
+
var marginTop = parseInt(icon.css('marginTop'), 10);
|
523
|
+
var marginLeft = parseInt(icon.css('marginLeft'), 10);
|
524
|
+
marginTop = isNaN(marginTop) ? 0 : marginTop;
|
525
|
+
marginLeft = isNaN(marginLeft) ? 0 : marginLeft;
|
526
|
+
|
445
527
|
icon.css({
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
icon.show();
|
528
|
+
position: 'absolute',
|
529
|
+
left: '50%',
|
530
|
+
top: '50%',
|
531
|
+
zIndex: '99',
|
532
|
+
marginTop: marginTop + jQuery(window).scrollTop(),
|
533
|
+
marginLeft: marginLeft + jQuery(window).scrollLeft()
|
534
|
+
});
|
535
|
+
}
|
536
|
+
icon.show();
|
455
537
|
};
|
456
|
-
|
538
|
+
|
457
539
|
/**
|
458
540
|
* Update the position of the loading icon.
|
459
541
|
*/
|
@@ -466,7 +548,7 @@ var Ajax = function(options) {
|
|
466
548
|
});
|
467
549
|
};
|
468
550
|
|
469
|
-
|
551
|
+
|
470
552
|
/**
|
471
553
|
* onLoad
|
472
554
|
*
|
@@ -478,9 +560,9 @@ var Ajax = function(options) {
|
|
478
560
|
* on DOM ready.
|
479
561
|
*/
|
480
562
|
self.onLoad = function(callback) {
|
481
|
-
if (self.enabled && !self.loaded) {
|
563
|
+
if (self.enabled && (self.lazy_load_assets && !self.loaded)) {
|
482
564
|
self.callbacks.push(callback);
|
483
|
-
console.log('[ajax] appending callback', callback);
|
565
|
+
console.log('[ajax] appending callback', self.teaser(callback));
|
484
566
|
} else {
|
485
567
|
self.executeCallback(callback, true);
|
486
568
|
}
|
@@ -494,14 +576,27 @@ var Ajax = function(options) {
|
|
494
576
|
* @see onLoad
|
495
577
|
*/
|
496
578
|
self.prependOnLoad = function(callback) {
|
497
|
-
if (self.enabled && !self.loaded) {
|
579
|
+
if (self.enabled && (self.lazy_load_assets && !self.loaded)) {
|
498
580
|
self.callbacks.unshift(callback);
|
499
|
-
console.log('[ajax] prepending callback', callback);
|
581
|
+
console.log('[ajax] prepending callback', self.teaser(callback));
|
500
582
|
} else {
|
501
583
|
self.executeCallback(callback, true);
|
502
584
|
}
|
503
585
|
};
|
504
|
-
|
586
|
+
|
587
|
+
/**
|
588
|
+
* Execute callbacks
|
589
|
+
*/
|
590
|
+
self.executeCallbacks = function() {
|
591
|
+
var callbacks = jQuery.makeArray(self.callbacks);
|
592
|
+
if (callbacks.length > 0) {
|
593
|
+
jQuery.each(callbacks, function(idx, callback) {
|
594
|
+
self.executeCallback(callback);
|
595
|
+
});
|
596
|
+
self.callbacks = [];
|
597
|
+
}
|
598
|
+
};
|
599
|
+
|
505
600
|
/**
|
506
601
|
* Execute a callback given as a string or function reference.
|
507
602
|
*
|
@@ -513,8 +608,8 @@ var Ajax = function(options) {
|
|
513
608
|
$(function() {
|
514
609
|
self.executeCallback(callback);
|
515
610
|
})
|
516
|
-
} else {
|
517
|
-
console.log('[ajax] executing callback', callback);
|
611
|
+
} else {
|
612
|
+
console.log('[ajax] executing callback', self.teaser(callback));
|
518
613
|
try {
|
519
614
|
if (jQuery.isFunction(callback)) {
|
520
615
|
callback();
|
@@ -524,6 +619,10 @@ var Ajax = function(options) {
|
|
524
619
|
} catch(e) {
|
525
620
|
console.log('[ajax] callback failed with exception', e);
|
526
621
|
}
|
527
|
-
}
|
528
|
-
};
|
622
|
+
}
|
623
|
+
};
|
624
|
+
|
625
|
+
self.teaser = function(callback) {
|
626
|
+
return new String(callback).slice(0,50);
|
627
|
+
};
|
529
628
|
};
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ajax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karl Varga
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-04-
|
12
|
+
date: 2010-04-21 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|