tellform/public/lib/raven-js/plugins/backbone.js
2015-07-14 13:45:54 -07:00

56 lines
1.4 KiB
JavaScript

/**
* Backbone.js plugin
*
* Patches Backbone.Events callbacks.
*/
;(function(window, Raven, Backbone) {
'use strict';
// quit if Backbone isn't on the page
if (!Backbone) {
return;
}
function makeBackboneEventsOn(oldOn) {
return function BackboneEventsOn(name, callback, context) {
var wrapCallback = function (cb) {
if (Object.prototype.toString.call(cb) === '[object Function]') {
var _callback = cb._callback || cb;
cb = Raven.wrap(cb);
cb._callback = _callback;
}
return cb;
};
if (Object.prototype.toString.call(name) === '[object Object]') {
// Handle event maps.
for (var key in name) {
if (name.hasOwnProperty(key)) {
name[key] = wrapCallback(name[key]);
}
}
} else {
callback = wrapCallback(callback);
}
return oldOn.call(this, name, callback, context);
};
}
// We're too late to catch all of these by simply patching Backbone.Events.on
var affectedObjects = [
Backbone.Events,
Backbone,
Backbone.Model.prototype,
Backbone.Collection.prototype,
Backbone.View.prototype,
Backbone.Router.prototype,
Backbone.History.prototype
], i = 0, l = affectedObjects.length;
for (; i < l; i++) {
var affected = affectedObjects[i];
affected.on = makeBackboneEventsOn(affected.on);
affected.bind = affected.on;
}
}(window, window.Raven, window.Backbone));