New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

backbone.eventrouter

Package Overview
Dependencies
Maintainers
0
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

backbone.eventrouter - npm Package Compare versions

Comparing version 1.0.1 to 1.1.0

.npmignore

3

CHANGELOG.md

@@ -0,1 +1,4 @@

#### v1.1.0
* Support destroying the eventrouter
#### v1.0.1

@@ -2,0 +5,0 @@ * Updated underscore peer dependency

/**
* backbone.eventrouter - A highly opinionated, simplistic Backbone.Router coupled with a Backbone.Radio.Channel
* @version v1.0.1
* @version v1.1.0
* @link https://github.com/RoundingWellOS/backbone.eventrouter

@@ -41,2 +41,4 @@ * @license MIT

this.cid = _.uniqueId('bber');
this._ch = Backbone.Radio.channel(_.result(this, 'channelName'));

@@ -148,3 +150,5 @@

if (_.isFunction(name) || !callback) {
return bbRoute.call(this, _route, name, callback);
_route = bbRoute.call(this, _route, name, callback);
Backbone.history.handlers[0].cid = this.cid;
return _route;
}

@@ -164,3 +168,5 @@

return bbRoute.call(this, _route, name, wrappedCallback);
_route = bbRoute.call(this, _route, name, wrappedCallback);
Backbone.history.handlers[0].cid = this.cid;
return _route;
},

@@ -224,3 +230,3 @@

return arguments.length === _.union(arguments, this.currentRoute).length;
return arguments.length === _.union(arguments, currentRoute).length;
},

@@ -308,2 +314,18 @@

return _.reduce(eventArgs, this._replaceParam, route);
},
/**
* Destroys the eventrouter and removes any registered route handlers.
*
* @public
* @method destroy
* @memberOf EventRouter
* @returns {EventRouter}
*/
destroy: function destroy() {
Backbone.history.handlers = _.reject(Backbone.history.handlers, { cid: this.cid });
this.stopListening();
this.trigger('destroy', this);
return this;
}

@@ -310,0 +332,0 @@ });

4

dist/backbone.eventrouter.min.js
/**
* backbone.eventrouter - A highly opinionated, simplistic Backbone.Router coupled with a Backbone.Radio.Channel
* @version v1.0.1
* @version v1.1.0
* @link https://github.com/RoundingWellOS/backbone.eventrouter
* @license MIT
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("underscore"),require("backbone"),require("backbone.radio")):"function"==typeof define&&define.amd?define(["underscore","backbone","backbone.radio"],e):(t.Backbone=t.Backbone||{},t.Backbone.EventRouter=e(t._,t.Backbone,t.Radio))}(this,function(t,e,r){"use strict";t="default"in t?t.default:t,e="default"in e?e.default:e;var i=/(\(\?)?:\w+/,n=e.EventRouter=e.Router.extend({constructor:function(r){t.extend(this,t.pick(r,["channelName","routeTriggers"])),this._ch=e.Radio.channel(t.result(this,"channelName")),this.listenTo(this._ch,"all",this.navigateFromEvent),e.Router.apply(this,arguments),this._initRoutes()},channelName:"event-router",getChannel:function(){return this._ch},_initRoutes:function(){this._routeTriggers=t.result(this,"routeTriggers",{}),t.each(this._routeTriggers,this._addRouteTrigger,this)},_addRouteTrigger:function(e,r){e=t.isArray(e)?e:[e],t.each(e,function(e){this.route(e,r,t.bind(this._ch.trigger,this._ch,r))},this)},addRouteTrigger:function(t,e){return this._routeTriggers[e]=t,this._addRouteTrigger(t,e),this},route:function(r,i,n){var o=e.Router.prototype.route;if(t.isFunction(i)||!n)return o.call(this,r,i,n);var u=t.bind(function(){var e=t.drop(arguments,0);this.trigger("before:route",i,e),this.trigger.apply(this,["before:route:"+i].concat(e)),this._storeRouteTrigger([i].concat(e)),n.apply(this,e),this._clearRouteTrigger()},this);return o.call(this,r,i,u)},_storeRouteTrigger:function(t){this._routeArgs=this._routeArgs||[],this._routeArgs.push(t)},_getCurrentRouteTrigger:function(){return t.last(this._routeArgs)||[]},_clearRouteTrigger:function(){this._routeArgs.pop()},_isTriggeredFromRoute:function(){var e=this._getCurrentRouteTrigger();return arguments.length===e.length&&arguments.length===t.union(arguments,this.currentRoute).length},navigateFromEvent:function(e){var r=this.getDefaultRoute(e);if(!r){var i=t.drop(arguments,0);return this.trigger.apply(this,["noMatch"].concat(i)),this}if(this._isTriggeredFromRoute.apply(this,arguments))return this;var n=t.drop(arguments,1),o=this.translateRoute(r,n);return this.navigate(o,{trigger:!1})},getDefaultRoute:function(e){var r=this._routeTriggers[e];return t.isArray(r)?r[0]:r},_replaceParam:function(t,e){return t.replace(i,e)},translateRoute:function(e,r){return t.reduce(r,this._replaceParam,e)}});return n});
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("underscore"),require("backbone"),require("backbone.radio")):"function"==typeof define&&define.amd?define(["underscore","backbone","backbone.radio"],e):(t.Backbone=t.Backbone||{},t.Backbone.EventRouter=e(t._,t.Backbone,t.Radio))}(this,function(t,e,r){"use strict";t="default"in t?t.default:t,e="default"in e?e.default:e;var i=/(\(\?)?:\w+/,n=e.EventRouter=e.Router.extend({constructor:function(r){t.extend(this,t.pick(r,["channelName","routeTriggers"])),this.cid=t.uniqueId("bber"),this._ch=e.Radio.channel(t.result(this,"channelName")),this.listenTo(this._ch,"all",this.navigateFromEvent),e.Router.apply(this,arguments),this._initRoutes()},channelName:"event-router",getChannel:function(){return this._ch},_initRoutes:function(){this._routeTriggers=t.result(this,"routeTriggers",{}),t.each(this._routeTriggers,this._addRouteTrigger,this)},_addRouteTrigger:function(e,r){e=t.isArray(e)?e:[e],t.each(e,function(e){this.route(e,r,t.bind(this._ch.trigger,this._ch,r))},this)},addRouteTrigger:function(t,e){return this._routeTriggers[e]=t,this._addRouteTrigger(t,e),this},route:function(r,i,n){var o=e.Router.prototype.route;if(t.isFunction(i)||!n)return r=o.call(this,r,i,n),e.history.handlers[0].cid=this.cid,r;var s=t.bind(function(){var e=t.drop(arguments,0);this.trigger("before:route",i,e),this.trigger.apply(this,["before:route:"+i].concat(e)),this._storeRouteTrigger([i].concat(e)),n.apply(this,e),this._clearRouteTrigger()},this);return r=o.call(this,r,i,s),e.history.handlers[0].cid=this.cid,r},_storeRouteTrigger:function(t){this._routeArgs=this._routeArgs||[],this._routeArgs.push(t)},_getCurrentRouteTrigger:function(){return t.last(this._routeArgs)||[]},_clearRouteTrigger:function(){this._routeArgs.pop()},_isTriggeredFromRoute:function(){var e=this._getCurrentRouteTrigger();return arguments.length===e.length&&arguments.length===t.union(arguments,e).length},navigateFromEvent:function(e){var r=this.getDefaultRoute(e);if(!r){var i=t.drop(arguments,0);return this.trigger.apply(this,["noMatch"].concat(i)),this}if(this._isTriggeredFromRoute.apply(this,arguments))return this;var n=t.drop(arguments,1),o=this.translateRoute(r,n);return this.navigate(o,{trigger:!1})},getDefaultRoute:function(e){var r=this._routeTriggers[e];return t.isArray(r)?r[0]:r},_replaceParam:function(t,e){return t.replace(i,e)},translateRoute:function(e,r){return t.reduce(r,this._replaceParam,e)},destroy:function(){return e.history.handlers=t.reject(e.history.handlers,{cid:this.cid}),this.stopListening(),this.trigger("destroy",this),this}});return n});
//# sourceMappingURL=backbone.eventrouter.min.js.map
{
"name": "backbone.eventrouter",
"version": "1.0.1",
"version": "1.1.0",
"description": "A highly opinionated, simplistic Backbone.Router coupled with a Backbone.Radio.Channel",

@@ -5,0 +5,0 @@ "main": "./dist/backbone.eventrouter.js",

@@ -27,2 +27,4 @@ import _ from 'underscore';

this.cid = _.uniqueId('bber');
this._ch = Backbone.Radio.channel(_.result(this, 'channelName'));

@@ -129,3 +131,5 @@

if(_.isFunction(name) || !callback) {
return bbRoute.call(this, route, name, callback);
route = bbRoute.call(this, route, name, callback);
Backbone.history.handlers[0].cid = this.cid;
return route;
}

@@ -145,3 +149,5 @@

return bbRoute.call(this, route, name, wrappedCallback);
route = bbRoute.call(this, route, name, wrappedCallback);
Backbone.history.handlers[0].cid = this.cid;
return route;
},

@@ -202,3 +208,3 @@

return (arguments.length === _.union(arguments, this.currentRoute).length);
return (arguments.length === _.union(arguments, currentRoute).length);
},

@@ -282,2 +288,17 @@

return _.reduce(eventArgs, this._replaceParam, route);
},
/**
* Destroys the eventrouter and removes any registered route handlers.
*
* @public
* @method destroy
* @memberOf EventRouter
* @returns {EventRouter}
*/
destroy() {
Backbone.history.handlers = _.reject(Backbone.history.handlers, { cid: this.cid });
this.stopListening();
this.trigger('destroy', this);
return this;
}

@@ -287,1 +308,2 @@ });

export default EventRouter;

@@ -128,2 +128,53 @@ describe('Backbone.Eventrouter Events', function() {

});
describe('when a router is destroyed', function() {
describe('when a route is removed', function() {
beforeEach(function() {
this.beforeRouteStub = this.sinon.stub();
this.routeStub = this.sinon.stub();
this.beforeRouteNameStub = this.sinon.stub();
this.routeNameStub = this.sinon.stub();
this.myEventRouter.on('before:route', this.beforeRouteStub);
this.myEventRouter.on('route', this.routeStub);
this.myEventRouter.on('before:route:testevent:bar', this.beforeRouteNameStub);
this.myEventRouter.on('route:testevent:bar', this.routeNameStub);
this.myEventRouter.addRouteTrigger('test/url/:foo', 'testevent:bar');
this.myEventRouter.destroy();
this.myEventRouter.navigate('test/url/baz', { trigger: true });
});
it('should not throw a before:route event', function() {
expect(this.beforeRouteStub).to.not.have.been.calledOnce;
});
});
describe('when a route is removed and added to a new router', function() {
beforeEach(function() {
this.beforeRouteStub = this.sinon.stub();
this.beforeRouteOtherStub = this.sinon.stub();
this.myEventRouter.on('before:route', this.beforeRouteStub);
this.myEventRouter.addRouteTrigger('test/url/:foo', 'testevent:bar');
this.myEventRouter.navigate('test/url/baz', { trigger: true });
this.myEventRouter.destroy();
this.myEventRouter.navigate('test/url/baz2', { trigger: true });
this.myOtherEventRouter = new Backbone.EventRouter();
this.myOtherEventRouter.on('before:route', this.beforeRouteOtherStub);
this.myOtherEventRouter.addRouteTrigger('test/url/:foo', 'testevent:bar');
this.myOtherEventRouter.navigate('test/url/baz3', { trigger: true });
it('should throw a before:route event', function() {
expect(this.beforeRouteStub).to.have.been.calledOnce;
});
it('should throw a before:route event', function() {
expect(this.beforeRouteOtherStub).to.have.been.calledOnce;
});
});
});
});
});

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc