-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathbinder.js
More file actions
128 lines (119 loc) · 4.36 KB
/
Copy pathbinder.js
File metadata and controls
128 lines (119 loc) · 4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/**
* Created by Vitaly Egorov <egorov@samsonos.com> on 04.12.13.
*/
/** Universal function for async request & responses */
var SJSBinder = {
/**
*
* @returns {SamsonJS}
*/
ajaxClick : function( responseHandler, beforeHandler )
{
// Iterate all elements
return this.each(function(clickable)
{
var busy = false;
// Bind click event
clickable.click(function()
{
if (!busy) {
var beforeHandlerStatus = true;
// If external response handler is passed
if( beforeHandler ) beforeHandlerStatus = beforeHandler(clickable);
// If external response handler return true status
if (beforeHandlerStatus) {
busy = true;
// Perform async request
s.ajax(clickable.a('href'),function(response)
{
busy = false;
try
{
// Parse JSON only if this is not an object
if (typeof(response) !== "object") {
// Parse JSON response
response = JSON.parse(response);
}
// If external response handler is passed
if( responseHandler ) responseHandler( response, clickable );
}
catch(e){}
});
}
}
}, true, true );
});
},
/**
* Send AJAX request to the url placed in option value when this option is selected
* @returns {SamsonJS}
*/
ajaxSelect : function( responseHandler, beforeHandler )
{
// Iterate all elements
return this.each(function(clickable)
{
// Bind click event
clickable.change(function(clickable, options, event, selected)
{
var beforeHandlerStatus = true;
// If external response handler is passed
if( beforeHandler ) beforeHandlerStatus = beforeHandler(clickable);
// If external response handler return true status
if (beforeHandlerStatus) {
// Perform async request
s.ajax(selected.val(),function(response)
{
try
{
// Parse JSON only if this is not an object
if (typeof(response) !== "object") {
// Parse JSON response
response = JSON.parse(response);
}
// If external response handler is passed
if( responseHandler ) responseHandler( response, clickable );
}
catch(e){}
});
}
}, true, true );
});
},
/**
*
* @param responseHandler
*/
ajaxSubmit : function( responseHandler, beforeHandler )
{
// Iterate all elements
return this.each(function(form)
{
form.submit(function()
{
var beforeHandlerStatus = true;
// If external response handler is passed
if( beforeHandler ) beforeHandlerStatus = beforeHandler(form);
// If external response handler return true status
if (beforeHandlerStatus) {
form.ajaxForm(function(response)
{
try
{
// Parse JSON only if this is not an object
if (typeof(response) !== "object") {
// Parse JSON response
response = JSON.parse(response);
}
// If external response handler is passed
if( responseHandler ) responseHandler( response, form);
}
catch(e){s.trace(e.toString())}
});
}
}, true, true );
});
}
}
// Add plugin to SamsonJS
SamsonJS.extend( SJSBinder );