mirror of https://github.com/rancher/ui.git
95 lines
2.3 KiB
JavaScript
95 lines
2.3 KiB
JavaScript
import Ember from 'ember';
|
|
var list = {};
|
|
|
|
/* Usage: In your Addon:
|
|
*
|
|
* import { addRoutes } from 'ui/utils/additional-routes';
|
|
*
|
|
* addRoutes(function() {
|
|
* this.route('hello');
|
|
* this.route('foo', function() {
|
|
* this.route('bar', function() {
|
|
* this.route('baz');
|
|
* });
|
|
* });
|
|
* });
|
|
*
|
|
* addRoutes(function() {
|
|
* this.route('nested-inside');
|
|
* }, 'authenticated.project');
|
|
*
|
|
* @param callback: Standard Ember Routing DSL function, see Ember.Router.map
|
|
* @param parentRouteName: link-to-style name of the existing route to add these routes to.
|
|
*/
|
|
export function addRoutes(callback, parentRouteName='application' ) {
|
|
//console.log('addRoutes', callback, parentRouteName);
|
|
if ( !callback )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( !list )
|
|
{
|
|
throw new Error('Cannot addRoutes after Router.map() has already been called');
|
|
}
|
|
|
|
if ( !list[parentRouteName] )
|
|
{
|
|
list[parentRouteName] = [];
|
|
}
|
|
|
|
list[parentRouteName].push(callback);
|
|
}
|
|
|
|
|
|
export function applyRoutes(name) {
|
|
//console.log('applyRoutes', name);
|
|
if ( !list )
|
|
{
|
|
throw new Error('Cannot applyRoutes after Router.map() has already been called');
|
|
}
|
|
|
|
if( list[name] )
|
|
{
|
|
return function() {
|
|
list[name].forEach(function(fn) {
|
|
fn.apply(this);
|
|
}, this);
|
|
};
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
// Clear the route list once it's no longer needed, and prevent future calls to try to
|
|
// add more routes (which won't work anwyay, because Router.map() has already run.
|
|
export function clearRoutes() {
|
|
//console.log('clearRoutes()');
|
|
list = null;
|
|
}
|
|
|
|
// Monkey patch route() so that additional routes can be added by an addon
|
|
Ember.RouterDSL.prototype._route = Ember.RouterDSL.prototype.route;
|
|
Ember.RouterDSL.prototype.route = function( name, options, callback ) {
|
|
if (arguments.length === 1) {
|
|
options = {};
|
|
}
|
|
else if (arguments.length === 2 && typeof options === 'function') {
|
|
callback = options;
|
|
options = {};
|
|
}
|
|
|
|
var key = `${this.parent}.${name}`;
|
|
|
|
// Add all the standard routes to the aditional routes table
|
|
addRoutes(callback, key);
|
|
|
|
// Create a new DSL fn that contains both the stadnard and addon routes
|
|
let newCallback = applyRoutes(key);
|
|
|
|
// Call the original route() with the new DSL Fn
|
|
this._route(name, options, newCallback);
|
|
};
|
|
// End: Monkey patch
|
|
|