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