ses-proxy 0.1.0
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.
- data/app/public/bootstrap/css/bootstrap-responsive.css +1092 -0
- data/app/public/bootstrap/css/bootstrap-responsive.min.css +9 -0
- data/app/public/bootstrap/css/bootstrap.css +6039 -0
- data/app/public/bootstrap/css/bootstrap.min.css +9 -0
- data/app/public/bootstrap/img/glyphicons-halflings-white.png +0 -0
- data/app/public/bootstrap/img/glyphicons-halflings.png +0 -0
- data/app/public/bootstrap/js/bootstrap.js +2159 -0
- data/app/public/bootstrap/js/bootstrap.min.js +6 -0
- data/app/public/css/application.css +16 -0
- data/app/public/datepicker/css/datepicker.css +7 -0
- data/app/public/datepicker/js/bootstrap-datepicker.js +454 -0
- data/app/public/datepicker/less/datepicker.less +119 -0
- data/app/public/highcharts/adapters/mootools-adapter.js +13 -0
- data/app/public/highcharts/adapters/mootools-adapter.src.js +327 -0
- data/app/public/highcharts/adapters/prototype-adapter.js +16 -0
- data/app/public/highcharts/adapters/prototype-adapter.src.js +385 -0
- data/app/public/highcharts/highcharts-more.js +35 -0
- data/app/public/highcharts/highcharts.js +246 -0
- data/app/public/highcharts/highcharts.src.js +15111 -0
- data/app/public/highcharts/modules/canvas-tools.js +133 -0
- data/app/public/highcharts/modules/canvas-tools.src.js +3113 -0
- data/app/public/highcharts/modules/data.js +11 -0
- data/app/public/highcharts/modules/data.src.js +277 -0
- data/app/public/highcharts/modules/exporting.js +23 -0
- data/app/public/highcharts/modules/exporting.src.js +736 -0
- data/app/public/highcharts/themes/dark-blue.js +263 -0
- data/app/public/highcharts/themes/dark-green.js +263 -0
- data/app/public/highcharts/themes/gray.js +262 -0
- data/app/public/highcharts/themes/grid.js +95 -0
- data/app/public/highcharts/themes/skies.js +89 -0
- data/app/public/images/loader.gif +0 -0
- data/app/public/js/application.js +81 -0
- data/app/views/_chart.haml +2 -0
- data/app/views/_search_form.haml +23 -0
- data/app/views/bounces.haml +23 -0
- data/app/views/kaminari/_first_page.html.erb +3 -0
- data/app/views/kaminari/_gap.html.erb +3 -0
- data/app/views/kaminari/_last_page.html.erb +3 -0
- data/app/views/kaminari/_next_page.html.erb +3 -0
- data/app/views/kaminari/_page.html.erb +3 -0
- data/app/views/kaminari/_paginator.html.erb +17 -0
- data/app/views/kaminari/_prev_page.html.erb +3 -0
- data/app/views/layout.haml +25 -0
- data/app/views/mails.haml +26 -0
- data/app/web_panel.rb +149 -0
- data/bin/ses_proxy +20 -0
- data/lib/ses_proxy/conf.rb +9 -0
- data/lib/ses_proxy/main_command.rb +154 -0
- data/lib/ses_proxy/models/bounce.rb +14 -0
- data/lib/ses_proxy/models/complaint.rb +13 -0
- data/lib/ses_proxy/models/email.rb +15 -0
- data/lib/ses_proxy/smtp_server.rb +122 -0
- data/lib/ses_proxy/sns_endpoint.rb +199 -0
- data/ses_proxy.rb +10 -0
- data/template/mongoid.yml +12 -0
- data/template/ses-proxy.yml +19 -0
- metadata +294 -0
@@ -0,0 +1,119 @@
|
|
1
|
+
/*!
|
2
|
+
* Datepicker for Bootstrap
|
3
|
+
*
|
4
|
+
* Copyright 2012 Stefan Petre
|
5
|
+
* Licensed under the Apache License v2.0
|
6
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
7
|
+
*
|
8
|
+
*/
|
9
|
+
|
10
|
+
.datepicker {
|
11
|
+
top: 0;
|
12
|
+
left: 0;
|
13
|
+
padding: 4px;
|
14
|
+
margin-top: 1px;
|
15
|
+
.border-radius(4px);
|
16
|
+
&:before {
|
17
|
+
content: '';
|
18
|
+
display: inline-block;
|
19
|
+
border-left: 7px solid transparent;
|
20
|
+
border-right: 7px solid transparent;
|
21
|
+
border-bottom: 7px solid #ccc;
|
22
|
+
border-bottom-color: rgba(0,0,0,.2);
|
23
|
+
position: absolute;
|
24
|
+
top: -7px;
|
25
|
+
left: 6px;
|
26
|
+
}
|
27
|
+
&:after {
|
28
|
+
content: '';
|
29
|
+
display: inline-block;
|
30
|
+
border-left: 6px solid transparent;
|
31
|
+
border-right: 6px solid transparent;
|
32
|
+
border-bottom: 6px solid @white;
|
33
|
+
position: absolute;
|
34
|
+
top: -6px;
|
35
|
+
left: 7px;
|
36
|
+
}
|
37
|
+
>div {
|
38
|
+
display: none;
|
39
|
+
}
|
40
|
+
table{
|
41
|
+
width: 100%;
|
42
|
+
margin: 0;
|
43
|
+
}
|
44
|
+
td,
|
45
|
+
th{
|
46
|
+
text-align: center;
|
47
|
+
width: 20px;
|
48
|
+
height: 20px;
|
49
|
+
.border-radius(4px);
|
50
|
+
}
|
51
|
+
td {
|
52
|
+
&.day:hover {
|
53
|
+
background: @grayLighter;
|
54
|
+
cursor: pointer;
|
55
|
+
}
|
56
|
+
&.old,
|
57
|
+
&.new {
|
58
|
+
color: @grayLight;
|
59
|
+
}
|
60
|
+
&.active,
|
61
|
+
&.active:hover {
|
62
|
+
.buttonBackground(@primaryButtonBackground, spin(@primaryButtonBackground, 20));
|
63
|
+
color: #fff;
|
64
|
+
text-shadow: 0 -1px 0 rgba(0,0,0,.25);
|
65
|
+
}
|
66
|
+
span {
|
67
|
+
display: block;
|
68
|
+
width: 47px;
|
69
|
+
height: 54px;
|
70
|
+
line-height: 54px;
|
71
|
+
float: left;
|
72
|
+
margin: 2px;
|
73
|
+
cursor: pointer;
|
74
|
+
.border-radius(4px);
|
75
|
+
&:hover {
|
76
|
+
background: @grayLighter;
|
77
|
+
}
|
78
|
+
&.active {
|
79
|
+
.buttonBackground(@primaryButtonBackground, spin(@primaryButtonBackground, 20));
|
80
|
+
color: #fff;
|
81
|
+
text-shadow: 0 -1px 0 rgba(0,0,0,.25);
|
82
|
+
}
|
83
|
+
&.old {
|
84
|
+
color: @grayLight;
|
85
|
+
}
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
th {
|
90
|
+
&.switch {
|
91
|
+
width: 145px;
|
92
|
+
}
|
93
|
+
&.next,
|
94
|
+
&.prev {
|
95
|
+
font-size: @baseFontSize * 1.5;
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
99
|
+
thead tr:first-child th {
|
100
|
+
cursor: pointer;
|
101
|
+
&:hover{
|
102
|
+
background: @grayLighter;
|
103
|
+
}
|
104
|
+
}
|
105
|
+
/*.dow {
|
106
|
+
border-top: 1px solid #ddd !important;
|
107
|
+
}*/
|
108
|
+
}
|
109
|
+
.input-append,
|
110
|
+
.input-prepend {
|
111
|
+
&.date {
|
112
|
+
.add-on i {
|
113
|
+
display: block;
|
114
|
+
cursor: pointer;
|
115
|
+
width: 16px;
|
116
|
+
height: 16px;
|
117
|
+
}
|
118
|
+
}
|
119
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/*
|
2
|
+
Highcharts JS v2.3.3 (2012-10-04)
|
3
|
+
MooTools adapter
|
4
|
+
|
5
|
+
(c) 2010-2011 Torstein Hønsi
|
6
|
+
|
7
|
+
License: www.highcharts.com/license
|
8
|
+
*/
|
9
|
+
(function(){var e=window,i=document,f=e.MooTools.version.substring(0,3),g=f==="1.2"||f==="1.1",j=g||f==="1.3",h=e.$extend||function(){return Object.append.apply(Object,arguments)};e.HighchartsAdapter={init:function(a){var b=Fx.prototype,c=b.start,d=Fx.Morph.prototype,e=d.compute;b.start=function(b,d){var e=this.element;if(b.d)this.paths=a.init(e,e.d,this.toD);c.apply(this,arguments);return this};d.compute=function(b,c,d){var f=this.paths;if(f)this.element.attr("d",a.step(f[0],f[1],d,this.toD));else return e.apply(this,
|
10
|
+
arguments)}},adapterRun:function(a,b){if(b==="width"||b==="height")return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=i.getElementsByTagName("head")[0],d=i.createElement("script");d.type="text/javascript";d.src=a;d.onload=b;c.appendChild(d)},animate:function(a,b,c){var d=a.attr,f=c&&c.complete;if(d&&!a.setStyle)a.getStyle=a.attr,a.setStyle=function(){var b=arguments;a.attr.call(a,b[0],b[1][0])},a.$family=function(){return!0};e.HighchartsAdapter.stop(a);c=new Fx.Morph(d?a:$(a),h({transition:Fx.Transitions.Quad.easeInOut},
|
11
|
+
c));if(d)c.element=a;if(b.d)c.toD=b.d;f&&c.addEvent("complete",f);c.start(b);a.fx=c},each:function(a,b){return g?$each(a,b):Array.each(a,b)},map:function(a,b){return a.map(b)},grep:function(a,b){return a.filter(b)},inArray:function(a,b,c){return b.indexOf(a,c)},merge:function(){var a=arguments,b=[{}],c=a.length;if(g)a=$merge.apply(null,a);else{for(;c--;)typeof a[c]!=="boolean"&&(b[c+1]=a[c]);a=Object.merge.apply(Object,b)}return a},offset:function(a){a=$(a).getOffsets();return{left:a.x,top:a.y}},
|
12
|
+
extendWithEvents:function(a){a.addEvent||(a.nodeName?$(a):h(a,new Events))},addEvent:function(a,b,c){typeof b==="string"&&(b==="unload"&&(b="beforeunload"),e.HighchartsAdapter.extendWithEvents(a),a.addEvent(b,c))},removeEvent:function(a,b,c){typeof a!=="string"&&(e.HighchartsAdapter.extendWithEvents(a),b?(b==="unload"&&(b="beforeunload"),c?a.removeEvent(b,c):a.removeEvents&&a.removeEvents(b)):a.removeEvents())},fireEvent:function(a,b,c,d){b={type:b,target:a};b=j?new Event(b):new DOMEvent(b);b=h(b,
|
13
|
+
c);b.preventDefault=function(){d=null};a.fireEvent&&a.fireEvent(b.type,b);d&&d(b)},washMouseEvent:function(a){return a.event||a},stop:function(a){a.fx&&a.fx.cancel()}}})();
|
@@ -0,0 +1,327 @@
|
|
1
|
+
/**
|
2
|
+
* @license Highcharts JS v2.3.3 (2012-10-04)
|
3
|
+
* MooTools adapter
|
4
|
+
*
|
5
|
+
* (c) 2010-2011 Torstein Hønsi
|
6
|
+
*
|
7
|
+
* License: www.highcharts.com/license
|
8
|
+
*/
|
9
|
+
|
10
|
+
// JSLint options:
|
11
|
+
/*global Fx, $, $extend, $each, $merge, Events, Event, DOMEvent */
|
12
|
+
|
13
|
+
(function () {
|
14
|
+
|
15
|
+
var win = window,
|
16
|
+
doc = document,
|
17
|
+
mooVersion = win.MooTools.version.substring(0, 3), // Get the first three characters of the version number
|
18
|
+
legacy = mooVersion === '1.2' || mooVersion === '1.1', // 1.1 && 1.2 considered legacy, 1.3 is not.
|
19
|
+
legacyEvent = legacy || mooVersion === '1.3', // In versions 1.1 - 1.3 the event class is named Event, in newer versions it is named DOMEvent.
|
20
|
+
$extend = win.$extend || function () {
|
21
|
+
return Object.append.apply(Object, arguments);
|
22
|
+
};
|
23
|
+
|
24
|
+
win.HighchartsAdapter = {
|
25
|
+
/**
|
26
|
+
* Initialize the adapter. This is run once as Highcharts is first run.
|
27
|
+
* @param {Object} pathAnim The helper object to do animations across adapters.
|
28
|
+
*/
|
29
|
+
init: function (pathAnim) {
|
30
|
+
var fxProto = Fx.prototype,
|
31
|
+
fxStart = fxProto.start,
|
32
|
+
morphProto = Fx.Morph.prototype,
|
33
|
+
morphCompute = morphProto.compute;
|
34
|
+
|
35
|
+
// override Fx.start to allow animation of SVG element wrappers
|
36
|
+
/*jslint unparam: true*//* allow unused parameters in fx functions */
|
37
|
+
fxProto.start = function (from, to) {
|
38
|
+
var fx = this,
|
39
|
+
elem = fx.element;
|
40
|
+
|
41
|
+
// special for animating paths
|
42
|
+
if (from.d) {
|
43
|
+
//this.fromD = this.element.d.split(' ');
|
44
|
+
fx.paths = pathAnim.init(
|
45
|
+
elem,
|
46
|
+
elem.d,
|
47
|
+
fx.toD
|
48
|
+
);
|
49
|
+
}
|
50
|
+
fxStart.apply(fx, arguments);
|
51
|
+
|
52
|
+
return this; // chainable
|
53
|
+
};
|
54
|
+
|
55
|
+
// override Fx.step to allow animation of SVG element wrappers
|
56
|
+
morphProto.compute = function (from, to, delta) {
|
57
|
+
var fx = this,
|
58
|
+
paths = fx.paths;
|
59
|
+
|
60
|
+
if (paths) {
|
61
|
+
fx.element.attr(
|
62
|
+
'd',
|
63
|
+
pathAnim.step(paths[0], paths[1], delta, fx.toD)
|
64
|
+
);
|
65
|
+
} else {
|
66
|
+
return morphCompute.apply(fx, arguments);
|
67
|
+
}
|
68
|
+
};
|
69
|
+
/*jslint unparam: false*/
|
70
|
+
},
|
71
|
+
|
72
|
+
/**
|
73
|
+
* Run a general method on the framework, following jQuery syntax
|
74
|
+
* @param {Object} el The HTML element
|
75
|
+
* @param {String} method Which method to run on the wrapped element
|
76
|
+
*/
|
77
|
+
adapterRun: function (el, method) {
|
78
|
+
|
79
|
+
// This currently works for getting inner width and height. If adding
|
80
|
+
// more methods later, we need a conditional implementation for each.
|
81
|
+
if (method === 'width' || method === 'height') {
|
82
|
+
return parseInt($(el).getStyle(method), 10);
|
83
|
+
}
|
84
|
+
},
|
85
|
+
|
86
|
+
/**
|
87
|
+
* Downloads a script and executes a callback when done.
|
88
|
+
* @param {String} scriptLocation
|
89
|
+
* @param {Function} callback
|
90
|
+
*/
|
91
|
+
getScript: function (scriptLocation, callback) {
|
92
|
+
// We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.
|
93
|
+
var head = doc.getElementsByTagName('head')[0];
|
94
|
+
var script = doc.createElement('script');
|
95
|
+
|
96
|
+
script.type = 'text/javascript';
|
97
|
+
script.src = scriptLocation;
|
98
|
+
script.onload = callback;
|
99
|
+
|
100
|
+
head.appendChild(script);
|
101
|
+
},
|
102
|
+
|
103
|
+
/**
|
104
|
+
* Animate a HTML element or SVG element wrapper
|
105
|
+
* @param {Object} el
|
106
|
+
* @param {Object} params
|
107
|
+
* @param {Object} options jQuery-like animation options: duration, easing, callback
|
108
|
+
*/
|
109
|
+
animate: function (el, params, options) {
|
110
|
+
var isSVGElement = el.attr,
|
111
|
+
effect,
|
112
|
+
complete = options && options.complete;
|
113
|
+
|
114
|
+
if (isSVGElement && !el.setStyle) {
|
115
|
+
// add setStyle and getStyle methods for internal use in Moo
|
116
|
+
el.getStyle = el.attr;
|
117
|
+
el.setStyle = function () { // property value is given as array in Moo - break it down
|
118
|
+
var args = arguments;
|
119
|
+
el.attr.call(el, args[0], args[1][0]);
|
120
|
+
};
|
121
|
+
// dirty hack to trick Moo into handling el as an element wrapper
|
122
|
+
el.$family = function () { return true; };
|
123
|
+
}
|
124
|
+
|
125
|
+
// stop running animations
|
126
|
+
win.HighchartsAdapter.stop(el);
|
127
|
+
|
128
|
+
// define and run the effect
|
129
|
+
effect = new Fx.Morph(
|
130
|
+
isSVGElement ? el : $(el),
|
131
|
+
$extend({
|
132
|
+
transition: Fx.Transitions.Quad.easeInOut
|
133
|
+
}, options)
|
134
|
+
);
|
135
|
+
|
136
|
+
// Make sure that the element reference is set when animating svg elements
|
137
|
+
if (isSVGElement) {
|
138
|
+
effect.element = el;
|
139
|
+
}
|
140
|
+
|
141
|
+
// special treatment for paths
|
142
|
+
if (params.d) {
|
143
|
+
effect.toD = params.d;
|
144
|
+
}
|
145
|
+
|
146
|
+
// jQuery-like events
|
147
|
+
if (complete) {
|
148
|
+
effect.addEvent('complete', complete);
|
149
|
+
}
|
150
|
+
|
151
|
+
// run
|
152
|
+
effect.start(params);
|
153
|
+
|
154
|
+
// record for use in stop method
|
155
|
+
el.fx = effect;
|
156
|
+
},
|
157
|
+
|
158
|
+
/**
|
159
|
+
* MooTool's each function
|
160
|
+
*
|
161
|
+
*/
|
162
|
+
each: function (arr, fn) {
|
163
|
+
return legacy ?
|
164
|
+
$each(arr, fn) :
|
165
|
+
Array.each(arr, fn);
|
166
|
+
},
|
167
|
+
|
168
|
+
/**
|
169
|
+
* Map an array
|
170
|
+
* @param {Array} arr
|
171
|
+
* @param {Function} fn
|
172
|
+
*/
|
173
|
+
map: function (arr, fn) {
|
174
|
+
return arr.map(fn);
|
175
|
+
},
|
176
|
+
|
177
|
+
/**
|
178
|
+
* Grep or filter an array
|
179
|
+
* @param {Array} arr
|
180
|
+
* @param {Function} fn
|
181
|
+
*/
|
182
|
+
grep: function (arr, fn) {
|
183
|
+
return arr.filter(fn);
|
184
|
+
},
|
185
|
+
|
186
|
+
/**
|
187
|
+
* Return the index of an item in an array, or -1 if not matched
|
188
|
+
*/
|
189
|
+
inArray: function (item, arr, from) {
|
190
|
+
return arr.indexOf(item, from);
|
191
|
+
},
|
192
|
+
|
193
|
+
/**
|
194
|
+
* Deep merge two objects and return a third
|
195
|
+
*/
|
196
|
+
merge: function () {
|
197
|
+
var args = arguments,
|
198
|
+
args13 = [{}], // MooTools 1.3+
|
199
|
+
i = args.length,
|
200
|
+
ret;
|
201
|
+
|
202
|
+
if (legacy) {
|
203
|
+
ret = $merge.apply(null, args);
|
204
|
+
} else {
|
205
|
+
while (i--) {
|
206
|
+
// Boolean argumens should not be merged.
|
207
|
+
// JQuery explicitly skips this, so we do it here as well.
|
208
|
+
if (typeof args[i] !== 'boolean') {
|
209
|
+
args13[i + 1] = args[i];
|
210
|
+
}
|
211
|
+
}
|
212
|
+
ret = Object.merge.apply(Object, args13);
|
213
|
+
}
|
214
|
+
|
215
|
+
return ret;
|
216
|
+
},
|
217
|
+
|
218
|
+
/**
|
219
|
+
* Get the offset of an element relative to the top left corner of the web page
|
220
|
+
*/
|
221
|
+
offset: function (el) {
|
222
|
+
var offsets = $(el).getOffsets();
|
223
|
+
return {
|
224
|
+
left: offsets.x,
|
225
|
+
top: offsets.y
|
226
|
+
};
|
227
|
+
},
|
228
|
+
|
229
|
+
/**
|
230
|
+
* Extends an object with Events, if its not done
|
231
|
+
*/
|
232
|
+
extendWithEvents: function (el) {
|
233
|
+
// if the addEvent method is not defined, el is a custom Highcharts object
|
234
|
+
// like series or point
|
235
|
+
if (!el.addEvent) {
|
236
|
+
if (el.nodeName) {
|
237
|
+
el = $(el); // a dynamically generated node
|
238
|
+
} else {
|
239
|
+
$extend(el, new Events()); // a custom object
|
240
|
+
}
|
241
|
+
}
|
242
|
+
},
|
243
|
+
|
244
|
+
/**
|
245
|
+
* Add an event listener
|
246
|
+
* @param {Object} el HTML element or custom object
|
247
|
+
* @param {String} type Event type
|
248
|
+
* @param {Function} fn Event handler
|
249
|
+
*/
|
250
|
+
addEvent: function (el, type, fn) {
|
251
|
+
if (typeof type === 'string') { // chart broke due to el being string, type function
|
252
|
+
|
253
|
+
if (type === 'unload') { // Moo self destructs before custom unload events
|
254
|
+
type = 'beforeunload';
|
255
|
+
}
|
256
|
+
|
257
|
+
win.HighchartsAdapter.extendWithEvents(el);
|
258
|
+
|
259
|
+
el.addEvent(type, fn);
|
260
|
+
}
|
261
|
+
},
|
262
|
+
|
263
|
+
removeEvent: function (el, type, fn) {
|
264
|
+
if (typeof el === 'string') {
|
265
|
+
// el.removeEvents below apperantly calls this method again. Do not quite understand why, so for now just bail out.
|
266
|
+
return;
|
267
|
+
}
|
268
|
+
|
269
|
+
win.HighchartsAdapter.extendWithEvents(el);
|
270
|
+
if (type) {
|
271
|
+
if (type === 'unload') { // Moo self destructs before custom unload events
|
272
|
+
type = 'beforeunload';
|
273
|
+
}
|
274
|
+
|
275
|
+
if (fn) {
|
276
|
+
el.removeEvent(type, fn);
|
277
|
+
} else if (el.removeEvents) { // #958
|
278
|
+
el.removeEvents(type);
|
279
|
+
}
|
280
|
+
} else {
|
281
|
+
el.removeEvents();
|
282
|
+
}
|
283
|
+
},
|
284
|
+
|
285
|
+
fireEvent: function (el, event, eventArguments, defaultFunction) {
|
286
|
+
var eventArgs = {
|
287
|
+
type: event,
|
288
|
+
target: el
|
289
|
+
};
|
290
|
+
// create an event object that keeps all functions
|
291
|
+
event = legacyEvent ? new Event(eventArgs) : new DOMEvent(eventArgs);
|
292
|
+
event = $extend(event, eventArguments);
|
293
|
+
// override the preventDefault function to be able to use
|
294
|
+
// this for custom events
|
295
|
+
event.preventDefault = function () {
|
296
|
+
defaultFunction = null;
|
297
|
+
};
|
298
|
+
// if fireEvent is not available on the object, there hasn't been added
|
299
|
+
// any events to it above
|
300
|
+
if (el.fireEvent) {
|
301
|
+
el.fireEvent(event.type, event);
|
302
|
+
}
|
303
|
+
|
304
|
+
// fire the default if it is passed and it is not prevented above
|
305
|
+
if (defaultFunction) {
|
306
|
+
defaultFunction(event);
|
307
|
+
}
|
308
|
+
},
|
309
|
+
|
310
|
+
/**
|
311
|
+
* Set back e.pageX and e.pageY that MooTools has abstracted away
|
312
|
+
*/
|
313
|
+
washMouseEvent: function (e) {
|
314
|
+
return e.event || e;
|
315
|
+
},
|
316
|
+
|
317
|
+
/**
|
318
|
+
* Stop running animations on the object
|
319
|
+
*/
|
320
|
+
stop: function (el) {
|
321
|
+
if (el.fx) {
|
322
|
+
el.fx.cancel();
|
323
|
+
}
|
324
|
+
}
|
325
|
+
};
|
326
|
+
|
327
|
+
}());
|