56 lines
1.4 KiB
JavaScript
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));
|