* Render a named path with any parameters.
* @param {string} name path name
* @param {object=} params parameter substitutions
+ * @param {string=} fragment #fragment
* @param {boolean=} asArray disable joining parts into string
* @returns {string} rendered path
*/
- routePath(name, params, asArray = false) {
+ routePath(name, params, fragment, asArray = false) {
const namedPath = this.router.getNamedPath(name);
if (!namedPath) {
throw new DingusError(`undefined route path '${name}'`);
const parameterizedPath = this.constructor._parameterizePath(namedPath, params);
- return asArray ? parameterizedPath : parameterizedPath.join('/');
+ if (asArray) {
+ return parameterizedPath;
+ } else {
+ return parameterizedPath.join('/') + (fragment ? `#${fragment}` : '');
+ }
}
* Render internal path including proxyPrefix.
* @param {string} name path name
* @param {object=} params parameter substitutions
+ * @param {string=} fragment #fragment
* @returns {string} rendered path
*/
- absolutePath(name, params) {
- return this.proxyPrefix + this.routePath(name, params);
+ absolutePath(name, params, fragment) {
+ return this.proxyPrefix + this.routePath(name, params, fragment);
}
* Render external URL for path.
* @param {string} name path name
* @param {object=} params parameter substitutions
+ * @param {string=} fragment #fragment
* @returns {string} rendered url
*/
- externalPath(name, params) {
- return this.selfBaseUrl + this.routePath(name, params);
+ externalPath(name, params, fragment) {
+ return this.selfBaseUrl + this.routePath(name, params, fragment);
}
const result = dingus.routePath('pathName');
assert.strictEqual(result, '/a/b/c');
});
+ it('renders plain path with fragment', function () {
+ dingus.on('GET', '/a/b/c', 'pathName', () => {});
+ const result = dingus.routePath('pathName', undefined, 'foo');
+ assert.strictEqual(result, '/a/b/c#foo');
+ });
it('renders parameterized path', function () {
dingus.on('GET', '/a/:b/c', 'pathName', () => {});
const result = dingus.routePath('pathName', { b: 'foo' });
});
it('renders parameterized path as array', function () {
dingus.on('GET', '/a/:b/c', 'pathName', () => {});
- const result = dingus.routePath('pathName', { b: 'foo' }, true);
+ const result = dingus.routePath('pathName', { b: 'foo' }, undefined, true);
assert.deepStrictEqual(result, ['', 'a', 'foo', 'c']);
});
it('requires parameters', function () {