{"_id":"marionette.approuter","_rev":"5-dd66aea7db79a0de31f26a276a1ca804","name":"marionette.approuter","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"marionette.approuter","description":"Extends the Backbone.Router to make it easier to construct a large number of routes for your app.","version":"1.0.0","homepage":"https://marionettejs.com/","main":"lib/marionette.approuter.js","module":"lib/marionette.approuter.esm.js","keywords":["backbone","plugin","marionette","router"],"license":"MIT","scripts":{"build":"gulp build","esfix":"gulp esfix","coverage":"gulp coverage","coveralls":"gulp coveralls","test":"gulp","test-browser":"gulp test-browser","test-cross-browser":"gulp test-cross-browser","test-cypress":"gulp cypress-run","test-cypress-ci":"gulp cypress-ci","test-lodash":"USE_LODASH=1 gulp"},"author":{"name":"Derick Bailey","email":"derickbailey@gmail.com","url":"http://derickbailey.com/"},"bugs":{"url":"https://github.com/marionettejs/marionette.approuter/issues"},"repository":{"type":"git","url":"git+https://github.com/marionettejs/marionette.approuter.git"},"github":"https://github.com/marionettejs/marionette.approuter","dependencies":{"backbone.marionette":"^4.0.0, 4.0.0-beta.1"},"peerDependencies":{"backbone":"~1.3.3","underscore":"~1.8.3"},"devDependencies":{"babel-core":"6.25.0","babel-eslint":"7.0.0","babel-preset-es2015":"6.24.1","babel-register":"6.24.1","backbone":"1.2.1 - 1.3.x","chai":"3.5.0","chai-jq":"0.0.9","eslint":"3.7.1","gulp":"3.9.1","gulp-coveralls":"0.1.4","gulp-eslint":"3.0.1","gulp-if":"^2.0.1","gulp-istanbul":"1.1.1","gulp-lintspaces":"0.5.0","gulp-livereload":"3.8.1","gulp-mocha":"3.0.1","gulp-plumber":"1.1.0","gulp-util":"3.0.7","isparta":"4.0.0","jquery":"3.1.0","jsdom":"9.6.0","lodash":"^4.17.3","mocha":"3.1.2","opn":"4.0.2","rollup":"0.45.2","rollup-plugin-babel":"2.7.1","rollup-plugin-commonjs":"5.0.5","rollup-plugin-json":"2.0.2","rollup-plugin-multi-entry":"2.0.1","rollup-plugin-node-globals":"1.0.9","rollup-plugin-node-resolve":"2.0.0","run-sequence":"1.2.2","sinon":"1.17.6","sinon-chai":"2.8.0","uglify-js":"^3.0.27","underscore":"1.8 - 1.8.3"},"gitHead":"b0ed89f3f16dd4b13f36d7fa1466c907683678ed","_id":"marionette.approuter@1.0.0","_shasum":"62c89d1c9923b6664df4b0da07e4f58b3c4dc324","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.13.1","_npmUser":{"name":"paulfalgout","email":"paul@otterball.com"},"dist":{"shasum":"62c89d1c9923b6664df4b0da07e4f58b3c4dc324","tarball":"https://registry.npmjs.org/marionette.approuter/-/marionette.approuter-1.0.0.tgz","fileCount":12,"unpackedSize":268799,"integrity":"sha512-09hFhywupDgcL4k+CQJvGgcHivInMUmU0xczsnfSmygIX4S21f3mnPzvG+oxkoipEc/AhEZMr+4td4MCDfOHTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBZo0Y3wovQb4ixjgqnE+k5NeXlxkel9gWujrhZ+Cn4DAiEA+6XIsbXWOmLSI4lk9uAVRbfqH4xVYfulW1sIXu4mPwk="}]},"maintainers":[{"name":"paulfalgout","email":"paul@otterball.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/marionette.approuter_1.0.0_1532353615380_0.2209038051436505"},"_hasShrinkwrap":false},"1.0.1":{"name":"marionette.approuter","description":"Extends the Backbone.Router to make it easier to construct a large number of routes for your app.","version":"1.0.1","homepage":"https://marionettejs.com/","main":"lib/marionette.approuter.js","module":"lib/marionette.approuter.esm.js","keywords":["backbone","plugin","marionette","router"],"license":"MIT","scripts":{"build":"gulp build","esfix":"gulp esfix","coverage":"gulp coverage","coveralls":"gulp coveralls","test":"gulp","test-browser":"gulp test-browser","test-cross-browser":"gulp test-cross-browser","test-cypress":"gulp cypress-run","test-cypress-ci":"gulp cypress-ci","test-lodash":"USE_LODASH=1 gulp"},"author":{"name":"Derick Bailey","email":"derickbailey@gmail.com","url":"http://derickbailey.com/"},"bugs":{"url":"https://github.com/marionettejs/marionette.approuter/issues"},"repository":{"type":"git","url":"git+https://github.com/marionettejs/marionette.approuter.git"},"github":"https://github.com/marionettejs/marionette.approuter","dependencies":{"backbone.marionette":"^4.0.0, 4.0.0-beta.1"},"peerDependencies":{"backbone":"~1.3.3","underscore":"~1.8.3"},"devDependencies":{"babel-core":"6.25.0","babel-eslint":"7.0.0","babel-preset-es2015":"6.24.1","babel-register":"6.24.1","backbone":"1.2.1 - 1.3.x","chai":"3.5.0","chai-jq":"0.0.9","eslint":"3.7.1","gulp":"3.9.1","gulp-coveralls":"0.1.4","gulp-eslint":"3.0.1","gulp-if":"^2.0.1","gulp-istanbul":"1.1.1","gulp-lintspaces":"0.5.0","gulp-livereload":"3.8.1","gulp-mocha":"3.0.1","gulp-plumber":"1.1.0","gulp-util":"3.0.7","isparta":"4.0.0","jquery":"3.1.0","jsdom":"9.6.0","lodash":"^4.17.3","mocha":"3.1.2","opn":"4.0.2","rollup":"0.45.2","rollup-plugin-babel":"2.7.1","rollup-plugin-commonjs":"5.0.5","rollup-plugin-json":"2.0.2","rollup-plugin-multi-entry":"2.0.1","rollup-plugin-node-globals":"1.0.9","rollup-plugin-node-resolve":"2.0.0","run-sequence":"1.2.2","sinon":"1.17.6","sinon-chai":"2.8.0","uglify-js":"^3.0.27","underscore":"1.8 - 1.8.3"},"gitHead":"3a7befe0ca09ff9249e8198687758706ac8517c1","_id":"marionette.approuter@1.0.1","_shasum":"1b17ff745d03c752d948ba5fd2e5d7a5fbb68b0b","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.13.1","_npmUser":{"name":"paulfalgout","email":"paul@otterball.com"},"dist":{"shasum":"1b17ff745d03c752d948ba5fd2e5d7a5fbb68b0b","tarball":"https://registry.npmjs.org/marionette.approuter/-/marionette.approuter-1.0.1.tgz","integrity":"sha512-+NrBCUM2JN0vfyB0tcKN372YQFsNu3h7ugCsR2fyp68u5c55mXY7GRCkTFX2idY0+a+tyY6T6dgJOsNJCKZg4w==","fileCount":12,"unpackedSize":268781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbgWRcCRA9TVsSAnZWagAABc4P/2VgvMfaxxG12GJjjwyY\ncF3SB+otvBF8kjWo3H47mMSIhVQtzgHZCM8C4SejHVqidTT5PZHwD9ApMq6o\nGPA08jC9ZIiobpaEI93Tz5P+rRVlBzTlf1d7dSy1gCn65srK9B8JeFFP/6ry\nAwv5q9pAiOji9W/01RT/1+R2TaUubWOsi2Wf5RLwWLadt0GjyJjSJ9ng9+hu\nM+2ftWNDXBjksMqw/5HmbUYc/LquVXb6pzh1yj5UWMCVPa4ju38liq3zngIf\nF88IcJ4DmVJInlinnVH58jrwlDMu1zCpqZP19NqxoyQd3f5yp8vb8XgFSEfF\nR11tcV+sp1EuPy3uu54RVaaT2KUCv0IuSSTHgJlb5p9tbPUoTm2/+ral7l70\nv4mCAeKUg59PeXn6FJSw/2joqc53xgtzUfTTTR6SqAZjZHZAzC1/RurHaU5c\n4Af6ae8IEFtcQRO7Ek2j5pzLKW8TW4ITb0fEgp3qEVyBoqTq5WERwGpxs5qJ\nl/p2Mf6UFl8u3A8/3evZWlvX08OsMLYYMHeWnsZhyg2STaLsfQF6pbI4tHqY\n3rBbXhj6IoKra1yZDlwJ6B9w75bl2Syo6thVstv8POH5YVCMvpIovOfdRp80\ngEVoOEMM7GBSHUgyMtNMk/9bDjPGrQSEJm1zKGgeJ4QQBOjkclZHh3BQhd0Y\nMPzS\r\n=1we6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH4QCyLqCAdeE5Z3D4Ifca6Ofcd3FJ1H/Vc02CZEdrhpAiArY233Oh7SDvlsnVmz/vtGOTxXC4L32pkAuJOJNVEYBg=="}]},"maintainers":[{"name":"paulfalgout","email":"paul@otterball.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/marionette.approuter_1.0.1_1535206492184_0.75929057581219"},"_hasShrinkwrap":false},"1.0.2":{"name":"marionette.approuter","description":"Extends the Backbone.Router to make it easier to construct a large number of routes for your app.","version":"1.0.2","homepage":"https://marionettejs.com/","main":"lib/marionette.approuter.js","module":"lib/marionette.approuter.esm.js","keywords":["backbone","plugin","marionette","router"],"license":"MIT","scripts":{"build":"gulp build","esfix":"gulp esfix","coverage":"gulp coverage","coveralls":"gulp coveralls","test":"gulp","test-browser":"gulp test-browser","test-cross-browser":"gulp test-cross-browser","test-cypress":"gulp cypress-run","test-cypress-ci":"gulp cypress-ci","test-lodash":"USE_LODASH=1 gulp"},"author":{"name":"Derick Bailey","email":"derickbailey@gmail.com","url":"http://derickbailey.com/"},"bugs":{"url":"https://github.com/marionettejs/marionette.approuter/issues"},"repository":{"type":"git","url":"git+https://github.com/marionettejs/marionette.approuter.git"},"github":"https://github.com/marionettejs/marionette.approuter","peerDependencies":{"backbone":"^1.3.3","backbone.marionette":"^4.0.0","underscore":"^1.8.3"},"devDependencies":{"babel-core":"6.25.0","babel-eslint":"7.0.0","babel-preset-es2015":"6.24.1","babel-register":"6.24.1","backbone":"1.2.1 - 1.3.x","chai":"3.5.0","chai-jq":"0.0.9","eslint":"3.7.1","gulp":"3.9.1","gulp-coveralls":"0.1.4","gulp-eslint":"3.0.1","gulp-if":"^2.0.1","gulp-istanbul":"1.1.1","gulp-lintspaces":"0.5.0","gulp-livereload":"3.8.1","gulp-mocha":"3.0.1","gulp-plumber":"1.1.0","gulp-util":"3.0.7","isparta":"4.0.0","jquery":"3.1.0","jsdom":"9.6.0","lodash":"^4.17.3","mocha":"3.1.2","opn":"4.0.2","rollup":"0.45.2","rollup-plugin-babel":"2.7.1","rollup-plugin-commonjs":"5.0.5","rollup-plugin-json":"2.0.2","rollup-plugin-multi-entry":"2.0.1","rollup-plugin-node-globals":"1.0.9","rollup-plugin-node-resolve":"2.0.0","run-sequence":"1.2.2","sinon":"1.17.6","sinon-chai":"2.8.0","uglify-js":"^3.0.27","underscore":"1.8 - 1.8.3"},"gitHead":"0099fbcdaa39862369e05da7aca94bdc516e4a8e","_id":"marionette.approuter@1.0.2","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"paulfalgout","email":"paul@otterball.com"},"dist":{"integrity":"sha512-XjcKb1Y6KROCmdZxO/rtOdRhd3Hfrs+7zWjtfiuCFS3VZa2IQjNgKUuIGmaKDZte2AmKRRMaPvXMh22nKYFh8A==","shasum":"bd45b801762fea4ec5caa9505640413596cc432c","tarball":"https://registry.npmjs.org/marionette.approuter/-/marionette.approuter-1.0.2.tgz","fileCount":11,"unpackedSize":268535,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcs2e9CRA9TVsSAnZWagAAEEkP/j95MEYFZ8GkHjHAYS8i\nggLPBbEPYQRy14uzNZT7VGPLqshB3Gz1BFC5AojVSTHocMJXqQWJ6yJ5HDnZ\nHVvbekuqSjcf2spzoWa/ekmeB4YaipLEcA5yZs9U+XpFLStAEBebBU/MPAch\nijzYD5HJC0cfV+o74y41nXEljkj5GwHANsEGxXj36/zRFvk/Vv63PK5tkO6+\nqTSq+ZZHy3DTtTq0nsAUiSZPngBaGXKFU+bJ6aPYzJIvLcGq0lg0Gfs+wPSN\nXh1QCgcqlf1ve2WhIoC1kpJ2rHrXhsrru22yfoCaDYOUny3EBTvY4JVjNZFZ\nZ7WZfZduMreeVDYcstRrRkqY9zyzNpcjEBBS0RBHaDuLJerj06F/6yjejkxm\nOkGNZqm4ZZz0HDt4PU24qj1ulHTvjPThkEjEW8ourXbnERoKylZyrz6VsLX/\nR3kn15eLuwUtkfvnVb1q9vo/DEkIZ4KED1FMOhsIGVdOuyGFNtUYrsb1B+Gp\nbRjeaIEF5EdnDM0VAOCIruQLO9SDyaomDd2xwOIxHS861gIBRfzPyji0ootZ\nPIXzKV6LZut4nNmjeK3IrZqg8u1NptfjUFm4CuHIKjouUBEMr5YJvwW8ht+f\nFh+7TQjbnLI+AxPhBdjBONPM39o3qsMIoVOJCwdeDdO9SVuyGY+/hnsocjc9\njRcN\r\n=71wH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+fq8Mrt3lX/YJLWobnQBXtELOQdoyApv0AYCI26cDSgIhAPS+DjYjyH+HRgTnPuignQKIBU8t+Dmkga/XCB/V36vW"}]},"maintainers":[{"name":"paulfalgout","email":"paul@otterball.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/marionette.approuter_1.0.2_1555261372792_0.11258570537220769"},"_hasShrinkwrap":false}},"time":{"created":"2018-07-23T13:46:55.379Z","1.0.0":"2018-07-23T13:46:55.451Z","modified":"2022-06-19T16:03:39.361Z","1.0.1":"2018-08-25T14:14:52.334Z","1.0.2":"2019-04-14T17:02:52.911Z"},"maintainers":[{"name":"paulfalgout","email":"paul@otterball.com"}],"description":"Extends the Backbone.Router to make it easier to construct a large number of routes for your app.","homepage":"https://marionettejs.com/","keywords":["backbone","plugin","marionette","router"],"repository":{"type":"git","url":"git+https://github.com/marionettejs/marionette.approuter.git"},"author":{"name":"Derick Bailey","email":"derickbailey@gmail.com","url":"http://derickbailey.com/"},"bugs":{"url":"https://github.com/marionettejs/marionette.approuter/issues"},"license":"MIT","readme":"# Marionette.AppRouter\n\nThis library was extracted from Marionette v3.\n\nThe Marionette `AppRouter` extends the [`Backbone.Router`][backbone-router] to\nmake it easier to construct a large number of routes for your app. This is\nparticularly useful if you want to build a large single-page app while keeping\nyour router's core logic readable.\n\n## Documentation Index\n\n* [Using the AppRouter](#using-the-approuter)\n* [Configure Routes](#configure-routes)\n* [Configure Routes In Constructor](#configure-routes-in-constructor)\n* [Add Routes At Runtime](#add-routes-at-runtime)\n* [Specify A Controller](#specify-a-controller)\n* [Using Marionette.Object](#using-marionetteobject)\n* [Multiple Routers](#multiple-routers)\n* [Backbone History](#backbone-history)\n* [Handling Route Changes](#handling-route-changes)\n\n## Using the AppRouter\n\nThe Marionette AppRouter is typically used to set up your app when the user\nloads a specific endpoint directly. Typically, in a single-page app, users will\nexpect to be able to easily navigate back to a section of the application by\nbookmarking a URL and loading it directly. Let's look at a concrete example:\n\n```javascript\nvar AppRouter = require('marionette.approuter');\n\nvar EmailController = {\n  showEmail: function(email) {\n    // Look up the email and display it in our main layout\n  }\n};\n\nvar EmailRouter = AppRouter.extend({\n  controller: EmailController,\n\n  appRoutes: {\n    'emails/:email': 'showEmail'\n  }\n});\n```\n\nAssuming our application is served from the root, whenever the user accesses\n`http://ourapplication.com/#emails/email-subject-line-123`, the method\n`showEmail` will be called with `email-subject-line-123` as its argument. This\nwill be covered in more detail below.\n\n## Configure Routes\n\nThe AppRouter uses the `appRoutes` option to define how we respond to routes\nbeing accessed. To define routes, set the route as your key and the method to\ncall as a string referencing a method on your controller. For more information\non route definitions, see the [Backbone documentation][#backbone-routes].\n\nThe major difference between `appRoutes` and `routes` is that we provide\ncallbacks on a controller instead of directly on the router itself. This allows\nyou to define a simpler router and keep your controller logic closer to the\nmodules it interacts directly with:\n\n```javascript\nvar AppRouter = require('marionette.approuter');\nvar EmailController = require('./emails/controller/email');\n\nvar MyRouter = AppRouter.extend({\n  controller: EmailController,\n\n  // \"someMethod\" must exist at controller.someMethod\n  appRoutes: {\n    'email': 'listEmails',\n    'email/:email': 'showEmail'\n  }\n});\n```\n\nAs the `AppRouter` extends `Backbone.Router`, you can also define a `routes`\nattribute whose callbacks must be present on the `AppRouter`:\n\n```javascript\nvar AppRouter = require('marionette.approuter');\n\nvar MyRouter = AppRouter.extend({\n  routes: {\n    'email/:email': 'showEmail'\n  },\n\n  showEmail: function(email) {\n    // show the email\n  }\n})\n```\n\nSee the [Backbone documentation][backbone-routes] for more information about\ndefining `routes`.\n\n### Configure Routes In Constructor\n\nIf you want more control when managing your routes, you can define your routes\n[on router instantiation][basics-instantiation]:\n\n```javascript\nvar AppRouter = require('marionette.approuter');\nvar EmailController = require('./emails/controllers/email');\n\nvar MyRouter = new AppRouter({\n  controller: EmailController,\n  appRoutes: {\n    'email/': 'listEmails',\n    'email/:email': 'showEmail'\n  }\n});\n```\n\n### Add Routes At Runtime\n\nIn addition to setting the `appRoutes` for an AppRouter, you can add app routes\nat runtime, to an instance of a router. This is done with the `appRoute()`\nmethod call. It works the same as the built-in `router.route()` call from\nBackbone's Router, but has all the same semantics and behavior of the\n`appRoutes` configuration.\n\n```javascript\nvar AppRouter = require('marionette.approuter');\n\nvar MyRouter = AppRouter.extend({});\n\nvar router = new MyRouter();\nrouter.appRoute(\"/foo\", \"fooThat\");\n```\n\nAlso you can specify a controller with the multiple routes at runtime with  the\n`processAppRoutes` method. This will preserve the existing controller as well:\n\n```javascript\nvar AppRouter = require('marionette.approuter');\n\nvar MyRouter = AppRouter.extend({});\n\nvar router = new MyRouter();\nrouter.processAppRoutes(myController, {\n  \"foo\": \"doFoo\",\n  \"bar/:id\": \"doBar\"\n});\n```\n\n## Specify A Controller\n\nApp routers can only use one `controller` object. You can either specify this\ndirectly in the router definition:\n\n```javascript\nvar AppRouter = require('marionette.approuter');\n\nvar someController = {\n  someMethod: function(){ /*...*/ }\n};\n\nAppRouter.extend({\n  controller: someController\n});\n```\n\nThe object that is used as the `controller` has no requirements, other than it\nwill contain the methods that you specified in the `appRoutes`.\n\n### Using Marionette.Object\n\nA controller can also be an instance of\n[`Marionette.Object`](https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.object.md) - this is useful for cases where\nyou want to access the helper tools of the Object API and pass through\ninformation on instantiation.\n\n## Multiple Routers\n\nMarionette allows you to run multiple AppRouters in a single application. It's\nrecommended that you break your routing into multiple sections, each with its\nown router and/or controller setting up the views for their own components. This\nwill make it much easier to find and manage your route-handling logic as your\napplication grows in complexity.\n\n## Backbone History\n\nThe [Backbone History API][backbone-history] monitors the browser's location bar\nand triggers route changes on your app routers. It also provides a set of\nmethods to change the contents of the location bar manually when you want to\nexpose functionality to your user via a URL:\n\n```javascript\nvar Bb = require('backbone');\nvar Mn = require('backbone.marionette');\n\nvar EmailView = require('./email/views/email');\n\nvar EmailList = Mn.View.extend({\n  regions: {\n    layout: '.layout-hook'\n  },\n\n  showEmail: function(model) {\n    this.showChildView('layout', new EmailView({model: model}));\n    Bb.history.navigate('email/' + model.id);\n  }\n});\n```\n\nAs stated in the Backbone documentation, `navigate` takes an `options` argument\nthat lets you `trigger` on route change. We recommend against using this as it\ntends to cause side-effects like making it hard to ensure the route is only\nnavigated to once, or unintentionally firing different route changes.\n\n## Handling Route Changes\n\nWhen the user navigates to a new route in your application that matches a route\nin your `AppRouter`, the `route` event will be fired. Listening to this will let\nyou perform extra custom behavior:\n\n```javascript\nvar AppRouter = require('marionette.approuter');\nvar Controller = require('./email/controller');\n\nvar MyRouter = AppRouter.extend({\n  controller: Controller,\n\n  appRoutes: {\n    'emails/:email': 'showEmail'\n  },\n\n  onRoute: function(name, path, args) {\n    console.log('User navigated to ' + path);\n  }\n});\n```\n\nThis event handler takes three arguments:\n\n1. `name` - Name of the route\n2. `path` - Path that triggered this event\n3. `args` - Arguments passed into the route\n\n[backbone-history]: http://backbonejs.org/#History\n[backbone-router]: http://backbonejs.org/#Router\n[backbone-routes]: http://backbonejs.org/#Router-routes\n","readmeFilename":"readme.md"}