76 lines
2 KiB
JavaScript
76 lines
2 KiB
JavaScript
/**
|
||
* jQuery plugin
|
||
*
|
||
* Patches event handler callbacks and ajax callbacks.
|
||
*/
|
||
;(function(window, Raven, $) {
|
||
'use strict';
|
||
|
||
// quit if jQuery isn't on the page
|
||
if (!$) {
|
||
return;
|
||
}
|
||
|
||
var _oldEventAdd = $.event.add;
|
||
$.event.add = function ravenEventAdd(elem, types, handler, data, selector) {
|
||
var _handler;
|
||
|
||
if (handler && handler.handler) {
|
||
_handler = handler.handler;
|
||
handler.handler = Raven.wrap(handler.handler);
|
||
} else {
|
||
_handler = handler;
|
||
handler = Raven.wrap(handler);
|
||
}
|
||
|
||
// If the handler we are attaching doesn’t have the same guid as
|
||
// the original, it will never be removed when someone tries to
|
||
// unbind the original function later. Technically as a result of
|
||
// this our guids are no longer globally unique, but whatever, that
|
||
// never hurt anybody RIGHT?!
|
||
if (_handler.guid) {
|
||
handler.guid = _handler.guid;
|
||
} else {
|
||
handler.guid = _handler.guid = $.guid++;
|
||
}
|
||
|
||
return _oldEventAdd.call(this, elem, types, handler, data, selector);
|
||
};
|
||
|
||
var _oldReady = $.fn.ready;
|
||
$.fn.ready = function ravenjQueryReadyWrapper(fn) {
|
||
return _oldReady.call(this, Raven.wrap(fn));
|
||
};
|
||
|
||
var _oldAjax = $.ajax;
|
||
$.ajax = function ravenAjaxWrapper(url, options) {
|
||
var keys = ['complete', 'error', 'success'], key;
|
||
|
||
// Taken from https://github.com/jquery/jquery/blob/eee2eaf1d7a189d99106423a4206c224ebd5b848/src/ajax.js#L311-L318
|
||
// If url is an object, simulate pre-1.5 signature
|
||
if (typeof url === 'object') {
|
||
options = url;
|
||
url = undefined;
|
||
}
|
||
|
||
// Force options to be an object
|
||
options = options || {};
|
||
|
||
/*jshint -W084*/
|
||
while(key = keys.pop()) {
|
||
if ($.isFunction(options[key])) {
|
||
options[key] = Raven.wrap(options[key]);
|
||
}
|
||
}
|
||
/*jshint +W084*/
|
||
|
||
try {
|
||
return _oldAjax.call(this, url, options);
|
||
} catch (e) {
|
||
Raven.captureException(e);
|
||
throw e;
|
||
}
|
||
};
|
||
|
||
}(window, window.Raven, window.jQuery));
|