Skip to content

Commit eca5373

Browse files
committed
Add support for routable engines
Make {{href-to}} behave the same as {{link-to}} within an engine, automatically prefixing routes with the engine's namespace Add {{href-to-external}}, for routes external to the engine.
1 parent 36c2fa8 commit eca5373

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

addon/helpers/href-to-external.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import Helper from '@ember/component/helper';
2+
import { getOwner } from '@ember/application';
3+
import { getHrefFromOwner } from './href-to';
4+
5+
function hrefToExternal(context, targetRouteName, ...rest) {
6+
const owner = getOwner(context);
7+
8+
if(owner.mountPoint) {
9+
targetRouteName = owner._getExternalRoute(targetRouteName);
10+
}
11+
return getHrefFromOwner(owner, targetRouteName, ...rest);
12+
}
13+
14+
export default Helper.extend({
15+
compute([targetRouteName, ...rest], namedArgs) {
16+
if(namedArgs.params) {
17+
return hrefToExternal(this, ...namedArgs.params);
18+
} else {
19+
return hrefToExternal(this, targetRouteName, ...rest);
20+
}
21+
}
22+
});

addon/helpers/href-to.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,17 @@ import Helper from '@ember/component/helper';
22
import { getOwner } from '@ember/application';
33

44
function hrefTo(context, targetRouteName, ...rest) {
5-
let router = getOwner(context).lookup('service:router');
5+
let owner = getOwner(context);
6+
7+
// If used in an engine, namespace the route
8+
if(owner.mountPoint && targetRouteName !== 'application') {
9+
targetRouteName = `${owner.mountPoint}.${targetRouteName}`;
10+
}
11+
return getHrefFromOwner(owner, targetRouteName, ...rest);
12+
}
13+
14+
function getHrefFromOwner(owner, targetRouteName, ...rest) {
15+
let router = owner.lookup('service:router');
616

717
if(router === undefined) {
818
return;
@@ -22,7 +32,7 @@ function hrefTo(context, targetRouteName, ...rest) {
2232
return router.urlFor.apply(router, args);
2333
}
2434

25-
export { hrefTo };
35+
export { hrefTo, getHrefFromOwner };
2636

2737
export default Helper.extend({
2838
compute([targetRouteName, ...rest], namedArgs) {

0 commit comments

Comments
 (0)