thin_man 0.19.5 → 0.19.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/thin_man.js +931 -925
- data/lib/thin_man/version.rb +1 -1
- data/test/javascript/karma.conf.js +49 -44
- data/test/javascript/spec/thinManSpec.js +254 -214
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f0e4ee879650cc8ce1501b4b0b6cfe7eb2a0122
|
4
|
+
data.tar.gz: 8557f0bbb4c686bca8ad0b5592ba04a724a819d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 784e88c488f0970552f3109320801653b6e290310b6882009f0644f04171e9974ff75af5784c340daca59f8fb2b2815aa885b8f73d8f3adf7c87af81919903c1
|
7
|
+
data.tar.gz: f9313528484b9c26654fa634e4e072dab2c722f4b707dcc20e1987c32ce2fa41525725fe6224208975f01472cc15513ab2ac883dc91c9e8c4b2d3c139c95be25
|
@@ -1,967 +1,973 @@
|
|
1
1
|
//= require simple_inheritance
|
2
2
|
//= require debug_logger
|
3
|
-
var initThinMan = function(){
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
}
|
11
|
-
return this_class;
|
12
|
-
},
|
13
|
-
getLinkGroup: function(name){
|
14
|
-
if(thin_man.hasOwnProperty('link_groups') && thin_man.link_groups.hasOwnProperty(name)){
|
15
|
-
return thin_man.link_groups[name]
|
16
|
-
} else {
|
17
|
-
return thin_man.addLinkGroup(name)
|
18
|
-
}
|
19
|
-
},
|
20
|
-
addLinkGroup: function(name){
|
21
|
-
if(!thin_man.hasOwnProperty('link_groups')){
|
22
|
-
thin_man.link_groups = {}
|
23
|
-
}
|
24
|
-
if(!thin_man.link_groups.hasOwnProperty(name)){
|
25
|
-
var this_group = new thin_man.LinkGroup(name)
|
26
|
-
thin_man.link_groups[name] = this_group
|
27
|
-
return this_group
|
28
|
-
}
|
29
|
-
},
|
30
|
-
addLinkToGroup: function(link, sequence_number, group_name){
|
31
|
-
var group = thin_man.getLinkGroup(group_name)
|
32
|
-
group.addLink(link,sequence_number)
|
33
|
-
},
|
34
|
-
LinkGroup: Class.extend({
|
35
|
-
init: function(name){
|
36
|
-
this.name = name
|
37
|
-
this.resetLinks()
|
38
|
-
},
|
39
|
-
resetLinks: function(){
|
40
|
-
this.links = {}
|
41
|
-
this.current_number = 0
|
42
|
-
},
|
43
|
-
addLink: function(link_submission, sequence_number){
|
44
|
-
if(this.links.hasOwnProperty(sequence_number)){
|
45
|
-
//If there is already a link with this number, we're starting over with a new list
|
46
|
-
this.resetLinks()
|
47
|
-
}
|
48
|
-
this.links[sequence_number] = link_submission
|
49
|
-
link_submission.addWatcher(this)
|
50
|
-
if(sequence_number == this.current_number){
|
51
|
-
this.fire()
|
52
|
-
}
|
53
|
-
},
|
54
|
-
fire: function(){
|
55
|
-
if(this.links.hasOwnProperty(this.current_number)){
|
56
|
-
this.links[this.current_number].fire()
|
57
|
-
}
|
58
|
-
},
|
59
|
-
linkCompleted: function(link_submission){
|
60
|
-
this.current_number += 1
|
61
|
-
this.fire()
|
62
|
-
}
|
63
|
-
}),
|
64
|
-
AjaxSubmission: Class.extend({
|
65
|
-
init: function(jq_obj,params){
|
66
|
-
this.jq_obj = jq_obj
|
67
|
-
this.params = params
|
68
|
-
if(!this.params){ this.params = {}}
|
69
|
-
// Bail out if this is a no-mouse-click ajax element and we were mouse clicked
|
70
|
-
if(this.wasMouseClicked() && this.noMouseClick()){
|
71
|
-
return false
|
72
|
-
}
|
73
|
-
this.getTrigger()
|
74
|
-
this.getTarget()
|
75
|
-
this.getErrorTarget()
|
76
|
-
this.progress_color = jq_obj.data('progress-color')
|
77
|
-
this.progress_target = $(jq_obj.data('progress-target'))
|
78
|
-
this.$mask_target = $(jq_obj.data('mask-target'))
|
79
|
-
this.$mask_message = jq_obj.data('mask-message')
|
80
|
-
this.custom_progress = typeof(jq_obj.data('custom-progress')) != 'undefined';
|
81
|
-
this.scroll_to = jq_obj.data('scroll-to')
|
82
|
-
this.watchers = []
|
83
|
-
if(this.progress_target.length == 0 && this.trigger.length > 0){
|
84
|
-
this.progress_target = this.trigger
|
85
|
-
this.trigger_is_progress_target = true
|
86
|
-
}
|
87
|
-
this.insert_method = this.getInsertMethod()
|
88
|
-
var ajax_submission = this
|
89
|
-
this.ajax_options = {
|
90
|
-
url: ajax_submission.getAjaxUrl(),
|
91
|
-
type: ajax_submission.getAjaxType(),
|
92
|
-
datatype: ajax_submission.getAjaxDataType(),
|
93
|
-
data: ajax_submission.getData(),
|
94
|
-
beforeSend: function(jqXHr) { return ajax_submission.ajaxBefore(jqXHr) },
|
95
|
-
success: function(data,textStatus,jqXHR) { ajax_submission.ajaxSuccess(data,textStatus,jqXHR) },
|
96
|
-
error: function(jqXHr) { ajax_submission.ajaxError(jqXHr) },
|
97
|
-
complete: function(jqXHr) { ajax_submission.ajaxComplete(jqXHr) },
|
98
|
-
processData: ajax_submission.getProcessData()
|
99
|
-
};
|
100
|
-
if(!this.sendContentType()){
|
101
|
-
this.ajax_options.contentType = false
|
102
|
-
};
|
103
|
-
if(typeof this.customXHR === 'function'){
|
104
|
-
this.ajax_options.xhr = this.customXHR
|
105
|
-
this.ajax_options.thin_man_obj = this;
|
106
|
-
}
|
107
|
-
this.handleGroup()
|
108
|
-
if(this.readyToFire()){
|
109
|
-
this.fire()
|
110
|
-
}
|
111
|
-
},
|
112
|
-
fire: function(){
|
113
|
-
$.ajax(this.ajax_options);
|
114
|
-
},
|
115
|
-
readyToFire: function(){
|
116
|
-
if(!this.sequence_group){ return true }
|
117
|
-
},
|
118
|
-
handleGroup: function(){
|
119
|
-
this.sequence_group = this.jq_obj.data('sequence-group');
|
120
|
-
this.sequence_number = this.jq_obj.data('sequence-number');
|
121
|
-
if(typeof(this.sequence_number) == 'number' && !this.sequence_group){
|
122
|
-
console.log('Warning! Thin Man Link has sequence number but no sequence group.')
|
123
|
-
}
|
124
|
-
if(this.sequence_group && typeof(this.sequence_number) != 'number'){
|
125
|
-
console.log('Warning! Thin Man Link has sequence group ' + this.sequence_group + ' but no sequence number.')
|
126
|
-
}
|
127
|
-
if(this.sequence_group){
|
128
|
-
thin_man.addLinkToGroup(this, this.sequence_number, this.sequence_group)
|
129
|
-
}
|
130
|
-
},
|
131
|
-
getTarget: function(){
|
132
|
-
var target_selector = this.jq_obj.data('ajax-target');
|
133
|
-
if(target_selector){
|
134
|
-
if($(target_selector).length > 0){
|
135
|
-
this.target = $(target_selector);
|
136
|
-
}else{
|
137
|
-
console.log('Warning! Thin Man selector ' + target_selector + ' not found')
|
138
|
-
}
|
139
|
-
}else{
|
140
|
-
console.log('Warning! Thin Man selector not given')
|
141
|
-
}
|
142
|
-
},
|
143
|
-
getErrorTarget: function(){
|
144
|
-
if($(this.jq_obj.data('error-target')).length > 0){
|
145
|
-
this.error_target = $(this.jq_obj.data('error-target'));
|
146
|
-
}else{
|
147
|
-
this.error_target = $(this.jq_obj.data('ajax-target'));
|
148
|
-
}
|
149
|
-
},
|
150
|
-
getAjaxDataType: function(){
|
151
|
-
return this.jq_obj.data('return-type') || 'html';
|
152
|
-
},
|
153
|
-
getInsertMethod: function(){
|
154
|
-
return this.jq_obj.data('insert-method') || 'html';
|
155
|
-
},
|
156
|
-
getData: function() {
|
157
|
-
return null;
|
158
|
-
},
|
159
|
-
getProcessData: function() {
|
160
|
-
return true;
|
161
|
-
},
|
162
|
-
sendContentType: function() {
|
163
|
-
return true;
|
164
|
-
},
|
165
|
-
insertHtml: function(data) {
|
166
|
-
debug_logger.log("thin_man.AjaxSubmission.insertHtml target:")
|
167
|
-
debug_logger.log(this.target)
|
168
|
-
debug_logger.log("thin_man.AjaxSubmission.insertHtml insert_method:")
|
169
|
-
debug_logger.log(this.insert_method)
|
170
|
-
if(this.target){
|
171
|
-
this.target[this.insert_method](data);
|
172
|
-
if(this.refocus()){
|
173
|
-
this.target.find('input,select,textarea').filter(':visible:enabled:first').each(function(){
|
174
|
-
if(!$(this).data('date-picker')){
|
175
|
-
$(this).focus();
|
176
|
-
}
|
177
|
-
});
|
178
|
-
}
|
179
|
-
if(this.scroll_to){
|
180
|
-
if(this.target.not(':visible')){
|
181
|
-
if(this.target.parents('[data-tab-id]').length > 0){
|
182
|
-
this.target.parents('[data-tab-id]').each(function(){
|
183
|
-
var tab_key = $(this).data('tab-id')
|
184
|
-
$('[data-tab-target-id="' + tab_key + '"]').trigger('click')
|
185
|
-
})
|
186
|
-
}
|
3
|
+
var initThinMan = function() {
|
4
|
+
thin_man = {
|
5
|
+
getSubClass: function(sub_class_name, parent_class) {
|
6
|
+
if ((typeof(sub_class_name) == 'string') && (sub_class_name != '') && (sub_class_name != 'true')) {
|
7
|
+
var this_class = sub_class_name;
|
8
|
+
} else {
|
9
|
+
var this_class = parent_class;
|
187
10
|
}
|
188
|
-
|
189
|
-
|
190
|
-
|
11
|
+
return this_class;
|
12
|
+
},
|
13
|
+
getLinkGroup: function(name) {
|
14
|
+
if (thin_man.hasOwnProperty('link_groups') && thin_man.link_groups.hasOwnProperty(name)) {
|
15
|
+
return thin_man.link_groups[name]
|
16
|
+
} else {
|
17
|
+
return thin_man.addLinkGroup(name)
|
191
18
|
}
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
}
|
197
|
-
},
|
198
|
-
refocus: function(){
|
199
|
-
return true;
|
200
|
-
},
|
201
|
-
ajaxSuccess: function(data,textStatus,jqXHR){
|
202
|
-
debug_logger.log("thin_man.AjaxSubmission.ajaxSuccess data:")
|
203
|
-
debug_logger.log(data)
|
204
|
-
if(typeof data === 'string'){
|
205
|
-
this.insertHtml(data);
|
206
|
-
} else if(typeof data === 'object') {
|
207
|
-
if(typeof data.html != 'undefined'){
|
208
|
-
if(typeof data.hooch_modal != 'undefined'){
|
209
|
-
new hooch.Modal($(data.html))
|
210
|
-
}else{
|
211
|
-
this.insertHtml(data.html)
|
19
|
+
},
|
20
|
+
addLinkGroup: function(name) {
|
21
|
+
if (!thin_man.hasOwnProperty('link_groups')) {
|
22
|
+
thin_man.link_groups = {}
|
212
23
|
}
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
$.each(data.class_triggers, function(class_name, params){
|
218
|
-
try{
|
219
|
-
klass = eval(class_name);
|
220
|
-
new klass(params);
|
221
|
-
} catch(err) {
|
222
|
-
console.log("Error trying to instantiate class " + class_name + " from ajax response:")
|
223
|
-
console.log(err)
|
224
|
-
}
|
225
|
-
})
|
226
|
-
}
|
227
|
-
if(typeof data.function_calls != 'undefined'){
|
228
|
-
$.each(data.function_calls, function(func_name, params){
|
229
|
-
try{
|
230
|
-
func = eval(func_name);
|
231
|
-
func(params);
|
232
|
-
} catch(err) {
|
233
|
-
console.log("Error trying to instantiate function " + func_name + " from ajax response:")
|
234
|
-
console.log(err)
|
235
|
-
}
|
236
|
-
})
|
237
|
-
}
|
238
|
-
}
|
239
|
-
if(this.target){
|
240
|
-
var ajax_flash = this.target.children().last().data('ajax-flash');
|
241
|
-
if((jqXHR.status == 200) && ajax_flash){
|
242
|
-
new thin_man.AjaxFlash('success', ajax_flash.notice,this.target);
|
243
|
-
}
|
244
|
-
}
|
245
|
-
if(this.removeOnSuccess()){
|
246
|
-
if($(this.removeOnSuccess())){
|
247
|
-
$(this.removeOnSuccess()).remove();
|
248
|
-
}
|
249
|
-
}
|
250
|
-
if(this.emptyOnSuccess()){
|
251
|
-
if($(this.emptyOnSuccess())){
|
252
|
-
$(this.emptyOnSuccess()).empty();
|
253
|
-
}
|
254
|
-
}
|
255
|
-
if ($.contains(document, this.jq_obj[0])) {
|
256
|
-
this.jq_obj.find('.error').removeClass('error')
|
257
|
-
this.jq_obj.find('.help-inline').remove()
|
258
|
-
}
|
259
|
-
},
|
260
|
-
addWatcher: function(watcher){
|
261
|
-
if(!this.hasOwnProperty('watchers')){
|
262
|
-
this.watchers = []
|
263
|
-
}
|
264
|
-
this.watchers.push(watcher)
|
265
|
-
},
|
266
|
-
notifyWatchers: function(){
|
267
|
-
$.each(this.watchers, function(){
|
268
|
-
this.linkCompleted(this)
|
269
|
-
})
|
270
|
-
},
|
271
|
-
ajaxComplete: function(jqXHR) {
|
272
|
-
debug_logger.log('thin_man.AjaxSubmission.ajaxComplete jqXHR:')
|
273
|
-
debug_logger.log(jqXHR)
|
274
|
-
this.showTrigger();
|
275
|
-
this.notifyWatchers();
|
276
|
-
if(this.progress_indicator){
|
277
|
-
this.progress_indicator.stop();
|
278
|
-
} else if(!this.trigger_is_progress_target){
|
279
|
-
this.progress_target.remove();
|
280
|
-
}
|
281
|
-
if(typeof this.mask != 'undefined'){
|
282
|
-
this.mask.remove();
|
283
|
-
}
|
284
|
-
try{
|
285
|
-
var response_data = JSON.parse(jqXHR.responseText)
|
286
|
-
} catch(err) {
|
287
|
-
var response_data = {}
|
288
|
-
// hmmm, the response is not JSON, so there's no flash.
|
289
|
-
}
|
290
|
-
if(typeof response_data.flash_message != 'undefined'){
|
291
|
-
var flash_style = this.httpResponseToFlashStyle(jqXHR.status);
|
292
|
-
var flash_duration = null;
|
293
|
-
if(typeof response_data.flash_persist != 'undefined'){
|
294
|
-
if(response_data.flash_persist){
|
295
|
-
flash_duration = 'persist'
|
296
|
-
} else {
|
297
|
-
flash_duration = 'fade'
|
24
|
+
if (!thin_man.link_groups.hasOwnProperty(name)) {
|
25
|
+
var this_group = new thin_man.LinkGroup(name)
|
26
|
+
thin_man.link_groups[name] = this_group
|
27
|
+
return this_group
|
298
28
|
}
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
}
|
333
|
-
debug_logger.log("thin_man.AjaxSubmission.ajaxError error target:")
|
334
|
-
debug_logger.log(this.error_target)
|
335
|
-
debug_logger.log("thin_man.AjaxSubmission.ajaxError data:")
|
336
|
-
debug_logger.log(data)
|
337
|
-
if(typeof data === 'string'){
|
338
|
-
debug_logger.log("thin_man.AjaxSubmission.ajaxError data is a string, inserting into target.")
|
339
|
-
this.error_target.html(data);
|
340
|
-
} else if(typeof data === 'object') {
|
341
|
-
debug_logger.log("thin_man.AjaxSubmission.ajaxError data is an object.")
|
342
|
-
if(typeof data.html != 'undefined'){
|
343
|
-
debug_logger.log("thin_man.AjaxSubmission.ajaxError data.html exists, inserting into target.")
|
344
|
-
this.error_target.html(data.html);
|
29
|
+
},
|
30
|
+
addLinkToGroup: function(link, sequence_number, group_name) {
|
31
|
+
var group = thin_man.getLinkGroup(group_name)
|
32
|
+
group.addLink(link, sequence_number)
|
33
|
+
},
|
34
|
+
LinkGroup: Class.extend({
|
35
|
+
init: function(name) {
|
36
|
+
this.name = name
|
37
|
+
this.resetLinks()
|
38
|
+
},
|
39
|
+
resetLinks: function() {
|
40
|
+
this.links = {}
|
41
|
+
this.current_number = 0
|
42
|
+
},
|
43
|
+
addLink: function(link_submission, sequence_number) {
|
44
|
+
if (this.links.hasOwnProperty(sequence_number)) {
|
45
|
+
//If there is already a link with this number, we're starting over with a new list
|
46
|
+
this.resetLinks()
|
47
|
+
}
|
48
|
+
this.links[sequence_number] = link_submission
|
49
|
+
link_submission.addWatcher(this)
|
50
|
+
if (sequence_number == this.current_number) {
|
51
|
+
this.fire()
|
52
|
+
}
|
53
|
+
},
|
54
|
+
fire: function() {
|
55
|
+
if (this.links.hasOwnProperty(this.current_number)) {
|
56
|
+
this.links[this.current_number].fire()
|
57
|
+
}
|
58
|
+
},
|
59
|
+
linkCompleted: function(link_submission) {
|
60
|
+
this.current_number += 1
|
61
|
+
this.fire()
|
345
62
|
}
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
63
|
+
}),
|
64
|
+
AjaxSubmission: Class.extend({
|
65
|
+
init: function(jq_obj, params) {
|
66
|
+
this.jq_obj = jq_obj
|
67
|
+
this.params = params
|
68
|
+
if (!this.params) { this.params = {} }
|
69
|
+
// Bail out if this is a no-mouse-click ajax element and we were mouse clicked
|
70
|
+
if (this.wasMouseClicked() && this.noMouseClick()) {
|
71
|
+
return false
|
72
|
+
}
|
73
|
+
this.getTrigger()
|
74
|
+
this.getTarget()
|
75
|
+
this.getErrorTarget()
|
76
|
+
this.progress_color = jq_obj.data('progress-color')
|
77
|
+
this.progress_target = $(jq_obj.data('progress-target'))
|
78
|
+
this.$mask_target = $(jq_obj.data('mask-target'))
|
79
|
+
this.$mask_message = jq_obj.data('mask-message')
|
80
|
+
this.custom_progress = typeof(jq_obj.data('custom-progress')) != 'undefined';
|
81
|
+
this.scroll_to = jq_obj.data('scroll-to')
|
82
|
+
this.watchers = []
|
83
|
+
if (this.progress_target.length == 0 && this.trigger.length > 0) {
|
84
|
+
this.progress_target = this.trigger
|
85
|
+
this.trigger_is_progress_target = true
|
86
|
+
}
|
87
|
+
this.insert_method = this.getInsertMethod()
|
88
|
+
var ajax_submission = this
|
89
|
+
this.ajax_options = {
|
90
|
+
url: ajax_submission.getAjaxUrl(),
|
91
|
+
type: ajax_submission.getAjaxType(),
|
92
|
+
datatype: ajax_submission.getAjaxDataType(),
|
93
|
+
data: ajax_submission.getData(),
|
94
|
+
beforeSend: function(jqXHr) { return ajax_submission.ajaxBefore(jqXHr) },
|
95
|
+
success: function(data, textStatus, jqXHR) { ajax_submission.ajaxSuccess(data, textStatus, jqXHR) },
|
96
|
+
error: function(jqXHr) { ajax_submission.ajaxError(jqXHr) },
|
97
|
+
complete: function(jqXHr) { ajax_submission.ajaxComplete(jqXHr) },
|
98
|
+
processData: ajax_submission.getProcessData()
|
99
|
+
};
|
100
|
+
if (!this.sendContentType()) {
|
101
|
+
this.ajax_options.contentType = false
|
102
|
+
};
|
103
|
+
if (typeof this.customXHR === 'function') {
|
104
|
+
this.ajax_options.xhr = this.customXHR
|
105
|
+
this.ajax_options.thin_man_obj = this;
|
106
|
+
}
|
107
|
+
this.handleGroup()
|
108
|
+
if (this.readyToFire()) {
|
109
|
+
this.fire()
|
110
|
+
}
|
111
|
+
},
|
112
|
+
fire: function() {
|
113
|
+
$.ajax(this.ajax_options);
|
114
|
+
},
|
115
|
+
readyToFire: function() {
|
116
|
+
if (!this.sequence_group) { return true }
|
117
|
+
},
|
118
|
+
handleGroup: function() {
|
119
|
+
this.sequence_group = this.jq_obj.data('sequence-group');
|
120
|
+
this.sequence_number = this.jq_obj.data('sequence-number');
|
121
|
+
if (typeof(this.sequence_number) == 'number' && !this.sequence_group) {
|
122
|
+
console.log('Warning! Thin Man Link has sequence number but no sequence group.')
|
123
|
+
}
|
124
|
+
if (this.sequence_group && typeof(this.sequence_number) != 'number') {
|
125
|
+
console.log('Warning! Thin Man Link has sequence group ' + this.sequence_group + ' but no sequence number.')
|
126
|
+
}
|
127
|
+
if (this.sequence_group) {
|
128
|
+
thin_man.addLinkToGroup(this, this.sequence_number, this.sequence_group)
|
129
|
+
}
|
130
|
+
},
|
131
|
+
getTarget: function() {
|
132
|
+
var target_selector = this.jq_obj.data('ajax-target');
|
133
|
+
if (target_selector) {
|
134
|
+
if ($(target_selector).length > 0) {
|
135
|
+
this.target = $(target_selector);
|
136
|
+
} else {
|
137
|
+
console.log('Warning! Thin Man selector ' + target_selector + ' not found')
|
138
|
+
}
|
139
|
+
} else {
|
140
|
+
console.log('Warning! Thin Man selector not given')
|
141
|
+
}
|
142
|
+
},
|
143
|
+
getErrorTarget: function() {
|
144
|
+
if ($(this.jq_obj.data('error-target')).length > 0) {
|
145
|
+
this.error_target = $(this.jq_obj.data('error-target'));
|
146
|
+
} else {
|
147
|
+
this.error_target = $(this.jq_obj.data('ajax-target'));
|
148
|
+
}
|
149
|
+
},
|
150
|
+
getAjaxDataType: function() {
|
151
|
+
return this.jq_obj.data('return-type') || 'html';
|
152
|
+
},
|
153
|
+
getInsertMethod: function() {
|
154
|
+
return this.jq_obj.data('insert-method') || 'html';
|
155
|
+
},
|
156
|
+
getData: function() {
|
157
|
+
return null;
|
158
|
+
},
|
159
|
+
getProcessData: function() {
|
160
|
+
return true;
|
161
|
+
},
|
162
|
+
sendContentType: function() {
|
163
|
+
return true;
|
164
|
+
},
|
165
|
+
insertHtml: function(data) {
|
166
|
+
debug_logger.log("thin_man.AjaxSubmission.insertHtml target:")
|
167
|
+
debug_logger.log(this.target)
|
168
|
+
debug_logger.log("thin_man.AjaxSubmission.insertHtml insert_method:")
|
169
|
+
debug_logger.log(this.insert_method)
|
170
|
+
if (this.target) {
|
171
|
+
this.target[this.insert_method](data);
|
172
|
+
if (this.refocus()) {
|
173
|
+
this.target.find('input,select,textarea').filter(':visible:enabled:first').each(function() {
|
174
|
+
if (!$(this).data('date-picker')) {
|
175
|
+
$(this).focus();
|
176
|
+
}
|
177
|
+
});
|
178
|
+
}
|
179
|
+
if (this.scroll_to) {
|
180
|
+
if (this.target.not(':visible')) {
|
181
|
+
if (this.target.parents('[data-tab-id]').length > 0) {
|
182
|
+
this.target.parents('[data-tab-id]').each(function() {
|
183
|
+
var tab_key = $(this).data('tab-id')
|
184
|
+
$('[data-tab-target-id="' + tab_key + '"]').trigger('click')
|
185
|
+
})
|
186
|
+
}
|
187
|
+
}
|
188
|
+
var extra_offset = 0
|
189
|
+
if ($('[data-thin-man-offset]').length > 0) {
|
190
|
+
extra_offset = $('[data-thin-man-offset]').outerHeight()
|
191
|
+
}
|
192
|
+
$('html, body').animate({
|
193
|
+
scrollTop: this.target.offset().top - extra_offset
|
194
|
+
}, 1000);
|
195
|
+
}
|
196
|
+
}
|
197
|
+
},
|
198
|
+
refocus: function() {
|
199
|
+
return true;
|
200
|
+
},
|
201
|
+
ajaxSuccess: function(data, textStatus, jqXHR) {
|
202
|
+
debug_logger.log("thin_man.AjaxSubmission.ajaxSuccess data:")
|
203
|
+
debug_logger.log(data)
|
204
|
+
if (typeof data === 'string') {
|
205
|
+
this.insertHtml(data);
|
206
|
+
} else if (typeof data === 'object') {
|
207
|
+
if (typeof data.html != 'undefined') {
|
208
|
+
if (typeof data.hooch_modal != 'undefined') {
|
209
|
+
new hooch.Modal($(data.html))
|
210
|
+
} else {
|
211
|
+
this.insertHtml(data.html)
|
212
|
+
}
|
213
|
+
} else if (this.target && typeof(this.target.empty) == 'function') {
|
214
|
+
this.target.empty()
|
215
|
+
}
|
216
|
+
if (typeof data.class_triggers != 'undefined') {
|
217
|
+
$.each(data.class_triggers, function(class_name, params) {
|
218
|
+
try {
|
219
|
+
klass = eval(class_name);
|
220
|
+
new klass(params);
|
221
|
+
} catch (err) {
|
222
|
+
console.log("Error trying to instantiate class " + class_name + " from ajax response:")
|
223
|
+
console.log(err)
|
224
|
+
}
|
225
|
+
})
|
226
|
+
}
|
227
|
+
if (typeof data.function_calls != 'undefined') {
|
228
|
+
$.each(data.function_calls, function(func_name, params) {
|
229
|
+
try {
|
230
|
+
func = eval(func_name);
|
231
|
+
func(params);
|
232
|
+
} catch (err) {
|
233
|
+
console.log("Error trying to instantiate function " + func_name + " from ajax response:")
|
234
|
+
console.log(err)
|
235
|
+
}
|
236
|
+
})
|
237
|
+
}
|
238
|
+
}
|
239
|
+
if (this.target) {
|
240
|
+
var ajax_flash = this.target.children().last().data('ajax-flash');
|
241
|
+
if ((jqXHR.status == 200) && ajax_flash) {
|
242
|
+
new thin_man.AjaxFlash('success', ajax_flash.notice, this.target);
|
243
|
+
}
|
244
|
+
}
|
245
|
+
if (this.removeOnSuccess()) {
|
246
|
+
if ($(this.removeOnSuccess())) {
|
247
|
+
$(this.removeOnSuccess()).remove();
|
248
|
+
}
|
249
|
+
}
|
250
|
+
if (this.emptyOnSuccess()) {
|
251
|
+
if ($(this.emptyOnSuccess())) {
|
252
|
+
$(this.emptyOnSuccess()).empty();
|
253
|
+
}
|
254
|
+
}
|
255
|
+
if ($.contains(document, this.jq_obj[0])) {
|
256
|
+
this.jq_obj.find('.error').removeClass('error')
|
257
|
+
this.jq_obj.find('.help-inline').remove()
|
258
|
+
}
|
259
|
+
},
|
260
|
+
addWatcher: function(watcher) {
|
261
|
+
if (!this.hasOwnProperty('watchers')) {
|
262
|
+
this.watchers = []
|
263
|
+
}
|
264
|
+
this.watchers.push(watcher)
|
265
|
+
},
|
266
|
+
notifyWatchers: function() {
|
267
|
+
$.each(this.watchers, function() {
|
268
|
+
this.linkCompleted(this)
|
269
|
+
})
|
270
|
+
},
|
271
|
+
ajaxComplete: function(jqXHR) {
|
272
|
+
debug_logger.log('thin_man.AjaxSubmission.ajaxComplete jqXHR:')
|
273
|
+
debug_logger.log(jqXHR)
|
274
|
+
this.showTrigger();
|
275
|
+
this.notifyWatchers();
|
276
|
+
if (this.progress_indicator) {
|
277
|
+
this.progress_indicator.stop();
|
278
|
+
} else if (!this.trigger_is_progress_target) {
|
279
|
+
this.progress_target.remove();
|
280
|
+
}
|
281
|
+
if (typeof this.mask != 'undefined') {
|
282
|
+
this.mask.remove();
|
283
|
+
}
|
284
|
+
try {
|
285
|
+
var response_data = JSON.parse(jqXHR.responseText)
|
286
|
+
} catch (err) {
|
287
|
+
var response_data = {}
|
288
|
+
// hmmm, the response is not JSON, so there's no flash.
|
289
|
+
}
|
290
|
+
if (typeof response_data.flash_message != 'undefined') {
|
291
|
+
var flash_style = this.httpResponseToFlashStyle(jqXHR.status);
|
292
|
+
var flash_duration = null;
|
293
|
+
if (typeof response_data.flash_persist != 'undefined') {
|
294
|
+
if (response_data.flash_persist) {
|
295
|
+
flash_duration = 'persist'
|
296
|
+
} else {
|
297
|
+
flash_duration = 'fade'
|
298
|
+
}
|
299
|
+
}
|
300
|
+
if (this.target) {
|
301
|
+
this.flash = new thin_man.AjaxFlash(flash_style, response_data.flash_message, this.target, flash_duration);
|
302
|
+
} else {
|
303
|
+
this.flash = new thin_man.AjaxFlash(flash_style, response_data.flash_message, this.jq_obj, flash_duration);
|
304
|
+
}
|
305
|
+
}
|
306
|
+
if ('function' == typeof this.params.on_complete) {
|
307
|
+
this.params.on_complete()
|
308
|
+
}
|
309
|
+
},
|
310
|
+
ajaxBefore: function(jqXHr) {
|
311
|
+
this.toggleLoading();
|
312
|
+
if (!this.custom_progress) {
|
313
|
+
this.progress_indicator = new thin_man.AjaxProgress(this.progress_target, this.target, this.progress_color);
|
314
|
+
}
|
315
|
+
if (this.$mask_target) {
|
316
|
+
this.mask = new thin_man.AjaxMask(this.$mask_target, this.$mask_message)
|
317
|
+
}
|
318
|
+
},
|
319
|
+
ajaxError: function(jqXHR) {
|
320
|
+
debug_logger.log('thin_man.AjaxSubmission.ajaxError jqXHR:')
|
321
|
+
debug_logger.log(jqXHR)
|
322
|
+
if (jqXHR.status == 409) {
|
323
|
+
try {
|
324
|
+
var data = JSON.parse(jqXHR.responseText);
|
325
|
+
debug_logger.log("thin_man.AjaxSubmission.ajaxError responseText is valid JSON, parsing to an object:")
|
326
|
+
} catch (error) {
|
327
|
+
debug_logger.log("thin_man.AjaxSubmission.ajaxError responseText is not JSON, assuming a string:")
|
328
|
+
debug_logger.log(jqXHR.responseText)
|
329
|
+
var data = jqXHR.responseText;
|
330
|
+
debug_logger.log("thin_man.AjaxSubmission.ajaxError data to insert:")
|
331
|
+
debug_logger.log(data)
|
332
|
+
}
|
333
|
+
debug_logger.log("thin_man.AjaxSubmission.ajaxError error target:")
|
334
|
+
debug_logger.log(this.error_target)
|
335
|
+
debug_logger.log("thin_man.AjaxSubmission.ajaxError data:")
|
336
|
+
debug_logger.log(data)
|
337
|
+
if (typeof data === 'string') {
|
338
|
+
debug_logger.log("thin_man.AjaxSubmission.ajaxError data is a string, inserting into target.")
|
339
|
+
this.error_target.html(data);
|
340
|
+
} else if (typeof data === 'object') {
|
341
|
+
debug_logger.log("thin_man.AjaxSubmission.ajaxError data is an object.")
|
342
|
+
if (typeof data.html != 'undefined') {
|
343
|
+
debug_logger.log("thin_man.AjaxSubmission.ajaxError data.html exists, inserting into target.")
|
344
|
+
this.error_target.html(data.html);
|
345
|
+
}
|
346
|
+
}
|
347
|
+
} else if (jqXHR.status == 500) {
|
348
|
+
alert('There was an error communicating with the server.')
|
349
|
+
}
|
350
|
+
},
|
351
|
+
getTrigger: function() {},
|
352
|
+
hideTrigger: function() {},
|
353
|
+
showTrigger: function() {},
|
354
|
+
toggleLoading: function() {
|
355
|
+
if (this.target) {
|
356
|
+
if (this.target.find('[data-loading-visible="false"]').length > 0) {
|
357
|
+
this.target.find('[data-loading-visible="false"]').hide();
|
358
|
+
}
|
359
|
+
if (this.target.find('[data-loading-visible="true"]').length > 0) {
|
360
|
+
this.target.find('[data-loading-visible="true"]').show();
|
361
|
+
}
|
362
|
+
}
|
363
|
+
},
|
364
|
+
removeOnSuccess: function() {
|
365
|
+
return this.jq_obj.data('remove-on-success')
|
366
|
+
},
|
367
|
+
emptyOnSuccess: function() {
|
368
|
+
return this.jq_obj.data('empty-on-success')
|
369
|
+
},
|
370
|
+
httpResponseToFlashStyle: function(response_code) {
|
371
|
+
if ([403, 409, 500].indexOf(response_code) > -1) {
|
372
|
+
return 'error'
|
373
|
+
}
|
374
|
+
if ([200, 202].indexOf(response_code) > -1) {
|
375
|
+
return 'success'
|
376
|
+
}
|
377
|
+
return 'error'
|
378
|
+
},
|
379
|
+
wasMouseClicked: function() {
|
380
|
+
return this.params.e && this.params.e.type && this.params.e.type == 'click'
|
381
|
+
},
|
382
|
+
noMouseClick: function() {
|
383
|
+
return this.jq_obj.data('no-mouse-click')
|
384
|
+
}
|
385
|
+
}),
|
386
|
+
AjaxBrowserPushConnector: Class.extend({
|
387
|
+
init: function($connector) {
|
388
|
+
this.trigger = $connector.find('button, input[type="submit"]');
|
389
|
+
if (this.trigger.length < 1) {
|
390
|
+
this.trigger = $connector;
|
391
|
+
}
|
392
|
+
this.browser_push_progress_indicator = new thin_man.AjaxProgress(this.trigger, this.trigger, this.progress_color);
|
393
|
+
$connector.data('browser-push-progress-indicator-object', this.browser_push_progress_indicator);
|
394
|
+
}
|
395
|
+
}),
|
396
|
+
AjaxBrowserPushFlash: Class.extend({
|
397
|
+
init: function($flash) {
|
398
|
+
this.message = $flash.data('ajax-browser-push-flash')
|
399
|
+
this.$target = $($flash.data('ajax-browser-push-flash-target'));
|
400
|
+
this.$target.data('ajax-browser-push-flash', this.message);
|
401
|
+
}
|
402
|
+
}),
|
403
|
+
AjaxProgress: Class.extend({
|
404
|
+
init: function(target, alt, progress_color) {
|
405
|
+
if (target.length > 0 && target.is(':visible') && target.css('display') != 'inline' && target.css('display') != 'inline-block') {
|
406
|
+
this.progress_target = target;
|
407
|
+
} else if (typeof(alt) != 'undefined' && alt.is(':visible')) {
|
408
|
+
this.progress_target = alt;
|
409
|
+
} else {
|
410
|
+
this.progress_target = $('body');
|
411
|
+
}
|
412
|
+
if (typeof(progress_color) == 'undefined') {
|
413
|
+
var progress_color = 'black';
|
414
|
+
}
|
415
|
+
this.progress_container = $('#ajax_progress_container').clone();
|
416
|
+
var uuid = new UUID;
|
417
|
+
this.progress_container.prop('id', 'thin_man_ajax_progress_' + uuid.value);
|
418
|
+
this.progress_target.append(this.progress_container);
|
419
|
+
var css = { display: 'block', visibility: 'visible', 'color': progress_color, 'z-index': 1000000 }
|
420
|
+
$.extend(css, {
|
421
|
+
position: 'absolute',
|
422
|
+
top: '50%',
|
423
|
+
left: '50%',
|
424
|
+
'-ms-transform': 'translate(-50%, -50%)',
|
425
|
+
/* IE 9 */
|
426
|
+
'-webkit-transform': 'translate(-50%, -50%)',
|
427
|
+
/* Safari */
|
428
|
+
'transform': 'translate(-50%, -50%)'
|
429
|
+
})
|
430
|
+
this.progress_container.css(css)
|
431
|
+
},
|
432
|
+
stop: function() {
|
433
|
+
this.progress_container.remove();
|
434
|
+
}
|
435
|
+
}),
|
436
|
+
AjaxMask: Class.extend({
|
437
|
+
init: function($mask_target, mask_message) {
|
438
|
+
var uuid = new UUID;
|
439
|
+
this.$mask_target = $mask_target
|
440
|
+
this.$mask = $('#thin_man_mask').clone()
|
441
|
+
this.$mask.prop('id', 'thin_man_mask' + uuid.value)
|
442
|
+
if (typeof mask_message != 'undefined') {
|
443
|
+
var $message = this.$mask.find('[data-thin-man-mask-message]')
|
444
|
+
$message.html(mask_message)
|
445
|
+
}
|
446
|
+
var height = this.$mask_target.outerHeight()
|
447
|
+
var width = this.$mask_target.outerWidth()
|
448
|
+
var radius = this.$mask_target.css('border-radius')
|
449
|
+
this.$mask.css({ 'height': height, 'width': width, 'left': 0, 'top': 0, 'border-radius': radius })
|
450
|
+
this.$mask.css({ 'position': 'absolute', 'z-index': 10000 })
|
446
451
|
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
452
|
+
this.$mask_target.append(this.$mask)
|
453
|
+
this.$mask.on('click', function(e) {
|
454
|
+
e.preventDefault();
|
455
|
+
return false;
|
456
|
+
})
|
457
|
+
this.$mask.show()
|
458
|
+
},
|
459
|
+
remove: function() {
|
460
|
+
this.$mask.remove()
|
461
|
+
}
|
462
|
+
}),
|
463
|
+
AjaxFlash: Class.extend({
|
464
|
+
init: function(type, message, elem, duration) {
|
465
|
+
this.flash_container = $('[data-thin-man-flash-template]').clone();
|
466
|
+
this.flash_container.removeAttr('data-thin-man-flash-template');
|
467
|
+
this.flash_container.attr('data-thin-man-flash-container', true);
|
468
|
+
$('body').append(this.flash_container);
|
469
|
+
this.flash_container.css({ position: 'absolute', visibility: 'hidden' });
|
470
|
+
this.alert_type = type;
|
471
|
+
this.elem = elem;
|
472
|
+
var alert_class = 'alert-' + type;
|
473
|
+
this.flash_container.addClass(alert_class);
|
474
|
+
this.flash_content = this.flash_container.find('[data-thin-man-flash-content]');
|
475
|
+
this.flash_content.html(message);
|
476
|
+
this.flash_container.show();
|
477
|
+
this.setFadeBehavior(duration);
|
478
|
+
this.reposition(elem);
|
479
|
+
},
|
480
|
+
setFadeBehavior: function(duration) {
|
481
|
+
if (duration) {
|
482
|
+
if ('persist' == duration) {
|
483
|
+
this.fade = false
|
484
|
+
} else {
|
485
|
+
this.fade = true
|
486
|
+
}
|
487
|
+
} else { //default behavior if persist duration is not sent back with message
|
488
|
+
if ('error' == this.alert_type || 'warning' == this.alert_type || 'info' == this.alert_type) {
|
489
|
+
this.fade = false;
|
490
|
+
} else {
|
491
|
+
this.fade = true;
|
492
|
+
}
|
493
|
+
}
|
494
|
+
},
|
495
|
+
reposition: function(elem) {
|
496
|
+
var this_window = {
|
497
|
+
top: $(window).scrollTop(),
|
498
|
+
left: $(window).scrollLeft(),
|
499
|
+
height: $(window).outerHeight(),
|
500
|
+
width: $(window).outerWidth()
|
501
|
+
};
|
502
|
+
var this_flash = {
|
503
|
+
height: this.flash_container.outerHeight(),
|
504
|
+
width: this.flash_container.outerWidth()
|
505
|
+
}
|
506
|
+
this_window.vert_middle = (this_window.top + (this_window.height / 2));
|
507
|
+
this_window.horiz_middle = (this_window.left + (this_window.width / 2));
|
508
|
+
this_flash.half_height = (this_flash.height / 2);
|
509
|
+
this_flash.half_width = (this_flash.width / 2);
|
510
|
+
var new_top = this_window.vert_middle - this_flash.half_height;
|
511
|
+
var new_left = this_window.horiz_middle - this_flash.half_width;
|
512
|
+
this.flash_container.css({ left: new_left, top: new_top, visibility: 'visible' });
|
513
|
+
var ajax_flash = this;
|
514
|
+
if (this.fade) {
|
515
|
+
setTimeout(function() { ajax_flash.fadeOut() }, 1618);
|
516
|
+
}
|
517
|
+
},
|
518
|
+
fadeOut: function() {
|
519
|
+
this.flash_container.fadeOut('slow');
|
520
|
+
}
|
521
|
+
}),
|
522
|
+
AjaxSorter: Class.extend({
|
523
|
+
init: function($sort_container) {
|
524
|
+
var base_url = $sort_container.data('url');
|
525
|
+
$sort_container.sortable({
|
526
|
+
helper: "clone",
|
527
|
+
tolerance: 'pointer',
|
528
|
+
stop: function(event, ui) {
|
529
|
+
new thin_man.AjaxSortSubmission($sort_container);
|
530
|
+
}
|
531
|
+
});
|
532
|
+
$sort_container.disableSelection();
|
533
|
+
}
|
451
534
|
})
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
this.flash_container.attr('data-thin-man-flash-container',true);
|
463
|
-
$('body').append(this.flash_container);
|
464
|
-
this.flash_container.css({position:'absolute',visibility: 'hidden'});
|
465
|
-
this.alert_type = type;
|
466
|
-
this.elem = elem;
|
467
|
-
var alert_class = 'alert-' + type;
|
468
|
-
this.flash_container.addClass(alert_class);
|
469
|
-
this.flash_content = this.flash_container.find('[data-thin-man-flash-content]');
|
470
|
-
this.flash_content.html(message);
|
471
|
-
this.flash_container.show();
|
472
|
-
this.setFadeBehavior(duration);
|
473
|
-
this.reposition(elem);
|
474
|
-
},
|
475
|
-
setFadeBehavior: function(duration){
|
476
|
-
if(duration){
|
477
|
-
if('persist' == duration){
|
478
|
-
this.fade = false
|
479
|
-
} else {
|
480
|
-
this.fade = true
|
481
|
-
}
|
482
|
-
}else{ //default behavior if persist duration is not sent back with message
|
483
|
-
if('error' == this.alert_type || 'warning' == this.alert_type || 'info' == this.alert_type){
|
484
|
-
this.fade = false;
|
485
|
-
} else {
|
486
|
-
this.fade = true;
|
487
|
-
}
|
488
|
-
}
|
489
|
-
},
|
490
|
-
reposition: function(elem){
|
491
|
-
var this_window = {
|
492
|
-
top: $(window).scrollTop(),
|
493
|
-
left: $(window).scrollLeft(),
|
494
|
-
height: $(window).outerHeight(),
|
495
|
-
width: $(window).outerWidth()
|
496
|
-
};
|
497
|
-
var this_flash = {
|
498
|
-
height: this.flash_container.outerHeight(),
|
499
|
-
width: this.flash_container.outerWidth()
|
500
|
-
}
|
501
|
-
this_window.vert_middle = (this_window.top + (this_window.height / 2));
|
502
|
-
this_window.horiz_middle = (this_window.left + (this_window.width / 2));
|
503
|
-
this_flash.half_height = (this_flash.height / 2);
|
504
|
-
this_flash.half_width = (this_flash.width / 2);
|
505
|
-
var new_top = this_window.vert_middle - this_flash.half_height;
|
506
|
-
var new_left = this_window.horiz_middle - this_flash.half_width;
|
507
|
-
this.flash_container.css({left: new_left, top: new_top, visibility: 'visible'});
|
508
|
-
var ajax_flash = this;
|
509
|
-
if (this.fade) {
|
510
|
-
setTimeout(function(){ajax_flash.fadeOut()},1618);
|
511
|
-
}
|
512
|
-
},
|
513
|
-
fadeOut: function(){
|
514
|
-
this.flash_container.fadeOut('slow');
|
515
|
-
}
|
516
|
-
}),
|
517
|
-
AjaxSorter: Class.extend({
|
518
|
-
init: function($sort_container){
|
519
|
-
var base_url = $sort_container.data('url');
|
520
|
-
$sort_container.sortable({
|
521
|
-
helper: "clone",
|
522
|
-
tolerance: 'pointer',
|
523
|
-
stop: function( event, ui) {
|
524
|
-
new thin_man.AjaxSortSubmission($sort_container);
|
525
|
-
}
|
526
|
-
});
|
527
|
-
$sort_container.disableSelection();
|
528
|
-
}
|
529
|
-
})
|
530
|
-
};
|
531
|
-
thin_man.AjaxFormSubmission = thin_man.AjaxSubmission.extend({
|
532
|
-
getAjaxUrl: function(){
|
533
|
-
return this.jq_obj.attr('action');
|
534
|
-
},
|
535
|
-
getAjaxType: function(){
|
536
|
-
return this.jq_obj.attr('method') || 'POST'
|
537
|
-
},
|
538
|
-
getData: function(){
|
539
|
-
var $clicked = $(document.activeElement);
|
535
|
+
};
|
536
|
+
thin_man.AjaxFormSubmission = thin_man.AjaxSubmission.extend({
|
537
|
+
getAjaxUrl: function() {
|
538
|
+
return this.jq_obj.attr('action');
|
539
|
+
},
|
540
|
+
getAjaxType: function() {
|
541
|
+
return this.jq_obj.attr('method') || 'POST'
|
542
|
+
},
|
543
|
+
getData: function() {
|
544
|
+
var $clicked = $(document.activeElement);
|
540
545
|
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
546
|
+
if ($clicked.length && $clicked.is('button[type="submit"], input[type="submit"], input[type="image"]') && $clicked.is('[name]')) {
|
547
|
+
var button_name = $clicked.attr('name')
|
548
|
+
var button_value = $clicked.attr('value')
|
549
|
+
}
|
550
|
+
var event_data = this.params
|
551
|
+
if (!event_data.hasOwnProperty('e')) {
|
552
|
+
var thin_man_submitter = 'link_now'
|
553
|
+
} else {
|
554
|
+
var thin_man_submitter = this.params['e'].type
|
555
|
+
}
|
556
|
+
if ((this.getAjaxType().toLowerCase() == 'get') || (typeof FormData == 'undefined')) {
|
557
|
+
var data_array = this.jq_obj.serializeArray();
|
558
|
+
if (button_name && button_value) {
|
559
|
+
data_array.push({ name: button_name, value: button_value })
|
560
|
+
}
|
561
|
+
data_array.push({ name: 'thin_man_submitter', value: thin_man_submitter })
|
562
|
+
return data_array;
|
563
|
+
} else {
|
564
|
+
// need to implement a data-attribute for multiple file fields so we can allow selecting mutliple files at once. example here:
|
565
|
+
// http://stackoverflow.com/questions/12989442/uploading-multiple-files-using-formdata
|
566
|
+
var fd = new FormData(this.jq_obj[0]);
|
567
|
+
if (button_name && button_value) {
|
568
|
+
if (typeof fd.set != 'undefined') {
|
569
|
+
fd.set(button_name, button_value)
|
570
|
+
} else if (typeof fd.append != 'undefined') {
|
571
|
+
fd.append(button_name, button_value)
|
572
|
+
}
|
573
|
+
}
|
574
|
+
if (typeof fd.set != 'undefined') {
|
575
|
+
fd.set('thin_man_submitter', thin_man_submitter)
|
576
|
+
} else if (typeof fd.append != 'undefined') {
|
577
|
+
fd.append('thin_man_submitter', thin_man_submitter)
|
578
|
+
}
|
579
|
+
return fd
|
580
|
+
}
|
581
|
+
},
|
582
|
+
ajaxSuccess: function(data, textStatus, jqXHR) {
|
583
|
+
debug_logger.log('thin_man.AjaxFormSubmission.ajaxSuccess')
|
584
|
+
this._super(data, textStatus, jqXHR)
|
585
|
+
if (this.resetOnSuccess()) {
|
586
|
+
this.jq_obj[0].reset();
|
587
|
+
$(this.jq_obj).find('input[type=text],textarea,select').filter(':visible:first').focus();
|
588
|
+
}
|
589
|
+
},
|
590
|
+
resetOnSuccess: function() {
|
591
|
+
return this.jq_obj.data('reset-on-success')
|
592
|
+
},
|
593
|
+
getProcessData: function() {
|
594
|
+
if (this.getAjaxType().toLowerCase() == 'get') {
|
595
|
+
return true;
|
596
|
+
} else {
|
597
|
+
return false;
|
598
|
+
}
|
599
|
+
},
|
600
|
+
sendContentType: function() {
|
601
|
+
if (this.getAjaxType().toLowerCase() == 'get') {
|
602
|
+
return true;
|
603
|
+
} else {
|
604
|
+
return false;
|
605
|
+
}
|
606
|
+
},
|
607
|
+
getTrigger: function() {
|
608
|
+
this.trigger = this.jq_obj.find('button, input[type="submit"]');
|
609
|
+
if (this.trigger.length != 1) {
|
610
|
+
var $active_element = $(document.activeElement)
|
611
|
+
if ($active_element[0].nodeName.toLowerCase() != 'body') {
|
612
|
+
this.trigger = $active_element
|
613
|
+
}
|
614
|
+
}
|
615
|
+
},
|
616
|
+
hideTrigger: function() {
|
617
|
+
this.trigger.css('visibility', 'hidden');
|
618
|
+
},
|
619
|
+
showTrigger: function() {
|
620
|
+
this.trigger.css('visibility', 'visible');
|
621
|
+
}
|
622
|
+
}),
|
623
|
+
thin_man.AjaxLinkSubmission = thin_man.AjaxSubmission.extend({
|
624
|
+
getAjaxUrl: function() {
|
625
|
+
return this.jq_obj.attr('href');
|
626
|
+
},
|
627
|
+
getData: function() {
|
628
|
+
var this_data = { authenticity_token: $('[name="csrf-token"]').attr('content') };
|
629
|
+
if (this.jq_obj.data('form-data')) {
|
630
|
+
$.extend(this_data, this.jq_obj.data('form-data'))
|
631
|
+
}
|
632
|
+
return this_data
|
633
|
+
},
|
634
|
+
getProcessData: function() {
|
635
|
+
return true;
|
636
|
+
},
|
637
|
+
getAjaxType: function() {
|
638
|
+
return this.jq_obj.data('ajax-method') || 'GET'
|
639
|
+
},
|
640
|
+
getTrigger: function() {
|
641
|
+
this.trigger = this.jq_obj;
|
642
|
+
},
|
643
|
+
hideTrigger: function() {
|
644
|
+
this.trigger.css('visibility', 'hidden');
|
645
|
+
},
|
646
|
+
showTrigger: function() {
|
647
|
+
this.trigger.css('visibility', 'visible');
|
648
|
+
},
|
649
|
+
refocus: function() {
|
650
|
+
if (this.jq_obj.data('ajax-link-now')) {
|
651
|
+
return false
|
652
|
+
}
|
653
|
+
return true
|
654
|
+
},
|
650
655
|
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
ajaxSuccess: function(){
|
656
|
+
}),
|
657
|
+
thin_man.AjaxModalOpener = thin_man.AjaxLinkSubmission.extend({
|
658
|
+
ajaxSuccess: function(data, textStatus, jqXHR) {
|
659
|
+
this._super(data, textStatus, jqXHR);
|
660
|
+
$(this.jq_obj.data('ajax-modal')).modal();
|
661
|
+
}
|
662
|
+
}),
|
663
|
+
thin_man.AddALineForm = thin_man.AjaxFormSubmission.extend({
|
664
|
+
ajaxSuccess: function(data, textStatus, jqXHR) {
|
665
|
+
this._super(data, textStatus, jqXHR);
|
666
|
+
$(this.jq_obj.data('container')).empty();
|
667
|
+
},
|
668
|
+
ajaxError: function(jqXHR) {
|
669
|
+
this.insert_method = 'html';
|
670
|
+
this._super(jqXHR);
|
671
|
+
}
|
672
|
+
}),
|
673
|
+
thin_man.EmptyForm = thin_man.AjaxFormSubmission.extend({
|
674
|
+
ajaxSuccess: function(data, textStatus, jqXHR) {
|
675
|
+
var clicked_button = $("input[type=submit][clicked=true]")[0];
|
676
|
+
this._super(data, textStatus, jqXHR);
|
677
|
+
if ($(clicked_button).data('clone') != true) {
|
678
|
+
$(this.jq_obj)[0].reset();
|
679
|
+
};
|
680
|
+
$(this.jq_obj).find('input[type=text],textarea,select').filter(':visible:first').focus();
|
681
|
+
$("[data-autocomplete]").trigger("chosen:updated");
|
682
|
+
},
|
683
|
+
ajaxError: function(jqXHR) {
|
684
|
+
this.insert_method = 'html';
|
685
|
+
this._super(jqXHR);
|
686
|
+
}
|
687
|
+
}),
|
688
|
+
thin_man.ModalCloserForm = thin_man.AjaxFormSubmission.extend({
|
689
|
+
ajaxSuccess: function(data, textStatus, jqXHR) {
|
690
|
+
this._super(data, textStatus, jqXHR);
|
691
|
+
$modal = $(this.jq_obj.data('modal-container'));
|
692
|
+
$modal.modal('hide');
|
693
|
+
$modal.remove();
|
694
|
+
},
|
695
|
+
ajaxError: function(jqXHR) {
|
696
|
+
this._super(jqXHR);
|
697
|
+
$modal = $(this.jq_obj.data('modal-container'));
|
698
|
+
$modal.modal();
|
699
|
+
}
|
700
|
+
}),
|
701
|
+
thin_man.ResetOnSubmitForm = thin_man.AjaxFormSubmission.extend({
|
702
|
+
ajaxSuccess: function(data, textStatus, jqXHR) {
|
703
|
+
this._super(data, textStatus, jqXHR);
|
704
|
+
$(this.jq_obj).each(function() {
|
705
|
+
this.reset();
|
706
|
+
});
|
707
|
+
}
|
708
|
+
}),
|
709
|
+
thin_man.DeleteLink = thin_man.AjaxSubmission.extend({
|
710
|
+
ajaxSuccess: function(data, textStatus, jqXHR) {
|
711
|
+
this._super(data, textStatus, jqXHR);
|
712
|
+
if (data.length === 0) {
|
713
|
+
if (this.target) {
|
714
|
+
// $(this.target.selector).remove();
|
715
|
+
this.target.remove();
|
716
|
+
}
|
717
|
+
}
|
718
|
+
},
|
719
|
+
getTrigger: function() {
|
720
|
+
this.trigger = this.jq_obj;
|
721
|
+
},
|
722
|
+
getAjaxType: function() {
|
723
|
+
return 'DELETE';
|
724
|
+
},
|
725
|
+
getAjaxUrl: function() {
|
726
|
+
return this.jq_obj.attr('href');
|
727
|
+
},
|
728
|
+
getData: function() {
|
729
|
+
return { authenticity_token: $('[name="csrf-token"]').attr('content') };
|
730
|
+
},
|
731
|
+
getProcessData: function() {
|
732
|
+
return true;
|
733
|
+
},
|
734
|
+
ajaxBefore: function(jqXHR) {
|
735
|
+
if (!this.jq_obj.data('no-confirm')) {
|
736
|
+
return confirm("Are you sure you want to delete this?");
|
737
|
+
}
|
738
|
+
}
|
739
|
+
}),
|
740
|
+
thin_man.ReplaceDelete = thin_man.DeleteLink.extend({
|
741
|
+
ajaxSuccess: function(data, textStatus, jqXHR) {
|
742
|
+
this.target[this.insert_method](data);
|
743
|
+
},
|
744
|
+
ajaxBefore: function(jqXHR) {
|
745
|
+
//noop
|
746
|
+
}
|
747
|
+
}),
|
748
|
+
thin_man.AjaxSortSubmission = thin_man.AjaxLinkSubmission.extend({
|
749
|
+
init: function($form) {
|
750
|
+
this.sort_field = $form.data('sort-field');
|
751
|
+
this._super($form);
|
752
|
+
},
|
753
|
+
getAjaxUrl: function() {
|
754
|
+
return this._super() + '?' + 'sort_field=' + this.sort_field + '&' + this.jq_obj.sortable("serialize");
|
755
|
+
},
|
756
|
+
getAjaxType: function() {
|
757
|
+
return 'PUT';
|
758
|
+
},
|
759
|
+
ajaxSuccess: function() {
|
756
760
|
|
757
|
-
|
758
|
-
|
761
|
+
}
|
762
|
+
});
|
759
763
|
|
760
|
-
|
764
|
+
window.any_time_manager.registerListWithClasses({ 'sortable': 'AjaxSorter', 'ajax-link-now': 'AjaxLinkSubmission', 'ajax-form-now': 'AjaxFormSubmission' }, 'thin_man');
|
761
765
|
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
|
766
|
+
$(document).ready(function() {
|
767
|
+
$(document).on('click apiclick', '[data-ajax-link],[data-ajax-link-now]', function(e) {
|
768
|
+
e.preventDefault();
|
769
|
+
var this_class = eval('thin_man.' + thin_man.getSubClass($(this).data('sub-type'), 'AjaxLinkSubmission'));
|
770
|
+
var submission = new this_class($(this), { e: e });
|
771
|
+
return false;
|
772
|
+
});
|
769
773
|
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
774
|
+
$(document).on('submit apisubmit', '[data-ajax-form]', function(e) {
|
775
|
+
e.preventDefault();
|
776
|
+
var this_class = eval('thin_man.' + thin_man.getSubClass($(this).data('sub-type'), 'AjaxFormSubmission'));
|
777
|
+
var submission = new this_class($(this), { e: e });
|
778
|
+
return false;
|
779
|
+
});
|
776
780
|
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
|
781
|
+
$(document).on('click apiclick', '[data-ajax-delete]', function(e) {
|
782
|
+
e.preventDefault();
|
783
|
+
var this_class = eval('thin_man.' + thin_man.getSubClass($(this).data('sub-type'), 'DeleteLink'));
|
784
|
+
var deletion = new this_class($(this), { e: e });
|
785
|
+
});
|
786
|
+
$(document).on('click', '[data-change-url]', function(e) {
|
787
|
+
e.preventDefault();
|
788
|
+
new thin_man.AjaxPushState($(this))
|
789
|
+
});
|
786
790
|
|
787
|
-
|
788
|
-
|
789
|
-
|
791
|
+
$('[data-sortable]').each(function() {
|
792
|
+
new thin_man.AjaxSorter($(this));
|
793
|
+
});
|
790
794
|
|
791
795
|
|
792
|
-
|
796
|
+
});
|
793
797
|
|
794
798
|
};
|
795
799
|
|
796
|
-
if(typeof Class === "undefined"){
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
800
|
+
if (typeof Class === "undefined") {
|
801
|
+
/* Simple JavaScript Inheritance
|
802
|
+
* By John Resig http://ejohn.org/
|
803
|
+
* MIT Licensed.
|
804
|
+
*/
|
805
|
+
// Inspired by base2 and Prototype
|
806
|
+
(function() {
|
807
|
+
var initializing = false,
|
808
|
+
fnTest = /xyz/.test(function() { xyz; }) ? /\b_super\b/ : /.*/;
|
809
|
+
// The base Class implementation (does nothing)
|
810
|
+
this.Class = function() {};
|
806
811
|
|
807
|
-
|
808
|
-
|
809
|
-
|
812
|
+
// Create a new Class that inherits from this class
|
813
|
+
Class.extend = function(prop) {
|
814
|
+
var _super = this.prototype;
|
810
815
|
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
+
// Instantiate a base class (but only create the instance,
|
817
|
+
// don't run the init constructor)
|
818
|
+
initializing = true;
|
819
|
+
var prototype = new this();
|
820
|
+
initializing = false;
|
816
821
|
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
822
|
+
// Copy the properties over onto the new prototype
|
823
|
+
for (var name in prop) {
|
824
|
+
// Check if we're overwriting an existing function
|
825
|
+
prototype[name] = typeof prop[name] == "function" &&
|
826
|
+
typeof _super[name] == "function" && fnTest.test(prop[name]) ?
|
827
|
+
(function(name, fn) {
|
828
|
+
return function() {
|
829
|
+
var tmp = this._super;
|
825
830
|
|
826
|
-
|
827
|
-
|
828
|
-
|
831
|
+
// Add a new ._super() method that is the same method
|
832
|
+
// but on the super-class
|
833
|
+
this._super = _super[name];
|
829
834
|
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
835
|
+
// The method only need to be bound temporarily, so we
|
836
|
+
// remove it when we're done executing
|
837
|
+
var ret = fn.apply(this, arguments);
|
838
|
+
this._super = tmp;
|
834
839
|
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
+
return ret;
|
841
|
+
};
|
842
|
+
})(name, prop[name]) :
|
843
|
+
prop[name];
|
844
|
+
}
|
840
845
|
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
-
|
846
|
-
|
846
|
+
// The dummy class constructor
|
847
|
+
function Class() {
|
848
|
+
// All construction is actually done in the init method
|
849
|
+
if (!initializing && this.init)
|
850
|
+
this.init.apply(this, arguments);
|
851
|
+
}
|
847
852
|
|
848
|
-
|
849
|
-
|
853
|
+
// Populate our constructed prototype object
|
854
|
+
Class.prototype = prototype;
|
850
855
|
|
851
|
-
|
852
|
-
|
856
|
+
// Enforce the constructor to be what we expect
|
857
|
+
Class.prototype.constructor = Class;
|
853
858
|
|
854
|
-
|
855
|
-
|
859
|
+
// And make this class extendable
|
860
|
+
Class.extend = arguments.callee;
|
856
861
|
|
857
|
-
|
858
|
-
|
859
|
-
|
862
|
+
return Class;
|
863
|
+
};
|
864
|
+
})();
|
860
865
|
}
|
861
866
|
|
862
|
-
if(typeof UUID == 'undefined'){
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
-
|
867
|
+
if (typeof UUID == 'undefined') {
|
868
|
+
var UUID = Class.extend({
|
869
|
+
init: function() {
|
870
|
+
this.value = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
871
|
+
var r = Math.random() * 16 | 0,
|
872
|
+
v = c == 'x' ? r : (r & 0x3 | 0x8);
|
873
|
+
return v.toString(16);
|
874
|
+
});
|
875
|
+
}
|
876
|
+
})
|
871
877
|
}
|
872
878
|
|
873
|
-
if(typeof window.any_time_manager === "undefined" && typeof window.loading_any_time_manager === "undefined"){
|
874
|
-
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
|
881
|
-
|
882
|
-
|
879
|
+
if (typeof window.any_time_manager === "undefined" && typeof window.loading_any_time_manager === "undefined") {
|
880
|
+
//Anytime loader, simulates load events for ajax requests
|
881
|
+
function getSubClass(sub_class_name, parent_class) {
|
882
|
+
if ((typeof(sub_class_name) == 'string') && (sub_class_name != '') && (sub_class_name != 'true')) {
|
883
|
+
var this_class = sub_class_name;
|
884
|
+
} else {
|
885
|
+
var this_class = parent_class;
|
886
|
+
}
|
887
|
+
return this_class;
|
888
|
+
};
|
889
|
+
|
890
|
+
String.prototype.toCapCamel = function() {
|
891
|
+
camel = this.replace(/[-_]([a-z])/g, function(g) { return g.replace(/[-_]/, '').charAt(0).toUpperCase(); });
|
892
|
+
return camel.charAt(0).toUpperCase() + camel.slice(1);
|
893
|
+
};
|
883
894
|
|
884
|
-
|
885
|
-
|
886
|
-
|
887
|
-
|
895
|
+
var AnyTimeManager = Class.extend({
|
896
|
+
init: function() {
|
897
|
+
this.loader_array = []
|
898
|
+
},
|
899
|
+
register: function(data_attribute, load_method, base_class, namespace) {
|
900
|
+
if (!namespace) { namespace = '' } else { namespace = namespace + '.' }
|
901
|
+
this.loader_array.push({ data_attribute: data_attribute, base_class: base_class, load_method: load_method, namespace: namespace });
|
902
|
+
},
|
903
|
+
registerList: function(list, namespace) {
|
904
|
+
var anytime_manager = this;
|
905
|
+
$.each(list, function() {
|
906
|
+
anytime_manager.register(this + '', 'instantiate', null, namespace)
|
907
|
+
})
|
908
|
+
},
|
909
|
+
registerListWithClasses: function(list, namespace) {
|
910
|
+
var anytime_manager = this;
|
911
|
+
$.each(list, function(attr, klass) {
|
912
|
+
anytime_manager.register(attr, 'instantiate', klass, namespace)
|
913
|
+
})
|
914
|
+
},
|
915
|
+
registerRunList: function(list) {
|
916
|
+
var anytime_manager = this;
|
917
|
+
$.each(list, function(attr, method) {
|
918
|
+
anytime_manager.register(attr, method, null)
|
919
|
+
})
|
920
|
+
},
|
921
|
+
instantiate: function(jq_obj, class_name) {
|
922
|
+
if (!jq_obj.data('anytime_loaded')) {
|
923
|
+
jq_obj.data('anytime_loaded', true);
|
924
|
+
var this_class = eval(class_name);
|
925
|
+
new this_class(jq_obj);
|
926
|
+
}
|
927
|
+
},
|
928
|
+
run: function(jq_obj, resource, method_name) {
|
929
|
+
if (!jq_obj.data('anytime_run')) {
|
930
|
+
jq_obj.data('anytime_run', true);
|
931
|
+
resource[method_name](jq_obj);
|
932
|
+
}
|
933
|
+
},
|
934
|
+
load: function() {
|
935
|
+
var atm = this;
|
936
|
+
$.each(atm.loader_array, function() {
|
937
|
+
var data_attribute = this['data_attribute'];
|
938
|
+
var base_class = this['base_class'];
|
939
|
+
if (!base_class) {
|
940
|
+
base_class = data_attribute.toCapCamel();
|
941
|
+
}
|
942
|
+
var this_method = this['load_method'];
|
943
|
+
var namespace = this['namespace'];
|
944
|
+
$('[data-' + data_attribute + ']').each(function() {
|
945
|
+
if ('instantiate' == this_method) {
|
946
|
+
var declared_class = $(this).data('sub-type');
|
947
|
+
var this_class = getSubClass(declared_class, base_class);
|
948
|
+
this_class = namespace + this_class;
|
949
|
+
atm.instantiate($(this), this_class);
|
950
|
+
} else {
|
951
|
+
atm.run($(this), base_class, this_method);
|
952
|
+
}
|
888
953
|
|
889
|
-
|
890
|
-
|
891
|
-
this.loader_array = []
|
892
|
-
},
|
893
|
-
register: function(data_attribute,load_method,base_class,namespace){
|
894
|
-
if(!namespace){namespace = ''}else{namespace= namespace + '.'}
|
895
|
-
this.loader_array.push({data_attribute: data_attribute, base_class: base_class, load_method: load_method, namespace: namespace});
|
896
|
-
},
|
897
|
-
registerList: function(list,namespace){
|
898
|
-
var anytime_manager = this;
|
899
|
-
$.each(list,function(){
|
900
|
-
anytime_manager.register(this + '','instantiate',null,namespace)
|
901
|
-
})
|
902
|
-
},
|
903
|
-
registerListWithClasses: function(list,namespace){
|
904
|
-
var anytime_manager = this;
|
905
|
-
$.each(list,function(attr,klass){
|
906
|
-
anytime_manager.register(attr,'instantiate',klass,namespace)
|
907
|
-
})
|
908
|
-
},
|
909
|
-
registerRunList: function(list){
|
910
|
-
var anytime_manager = this;
|
911
|
-
$.each(list,function(attr,method){
|
912
|
-
anytime_manager.register(attr,method,null)
|
913
|
-
})
|
914
|
-
},
|
915
|
-
instantiate: function(jq_obj, class_name){
|
916
|
-
if(!jq_obj.data('anytime_loaded')){
|
917
|
-
jq_obj.data('anytime_loaded',true);
|
918
|
-
var this_class = eval(class_name);
|
919
|
-
new this_class(jq_obj);
|
920
|
-
}
|
921
|
-
},
|
922
|
-
run: function (jq_obj, resource, method_name){
|
923
|
-
if(!jq_obj.data('anytime_run')){
|
924
|
-
jq_obj.data('anytime_run',true);
|
925
|
-
resource[method_name](jq_obj);
|
926
|
-
}
|
927
|
-
},
|
928
|
-
load: function(){
|
929
|
-
var atm = this;
|
930
|
-
$.each(atm.loader_array,function(){
|
931
|
-
var data_attribute = this['data_attribute'];
|
932
|
-
var base_class = this['base_class'];
|
933
|
-
if(!base_class){
|
934
|
-
base_class = data_attribute.toCapCamel();
|
954
|
+
});
|
955
|
+
});
|
935
956
|
}
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
})
|
949
|
-
|
950
|
-
}
|
951
|
-
});
|
952
|
-
window.any_time_manager = new AnyTimeManager();
|
953
|
-
$(document).ajaxComplete(function(){
|
954
|
-
window.any_time_manager.load();
|
955
|
-
});
|
956
|
-
$(document).ready(function(){
|
957
|
-
if(typeof window.any_time_load_functions != 'undefined'){
|
958
|
-
$.each(window.any_time_load_functions, function(i,func){
|
959
|
-
func();
|
960
|
-
});
|
961
|
-
}
|
962
|
-
window.any_time_manager.load();
|
963
|
-
})
|
964
|
-
// End AnyTime library
|
957
|
+
});
|
958
|
+
window.any_time_manager = new AnyTimeManager();
|
959
|
+
$(document).ajaxComplete(function() {
|
960
|
+
window.any_time_manager.load();
|
961
|
+
});
|
962
|
+
$(document).ready(function() {
|
963
|
+
if (typeof window.any_time_load_functions != 'undefined') {
|
964
|
+
$.each(window.any_time_load_functions, function(i, func) {
|
965
|
+
func();
|
966
|
+
});
|
967
|
+
}
|
968
|
+
window.any_time_manager.load();
|
969
|
+
})
|
970
|
+
// End AnyTime library
|
965
971
|
}
|
966
972
|
|
967
|
-
initThinMan();
|
973
|
+
initThinMan();
|