Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | 43x 43x 43x 43x 77x 43x 43x 4x 5x 4x 3x 3x 3x 3x 3x 1x 43x 41x 2x 39x 77x 39x 37x 39x 39x 43x | import { UrlMatchResult, UrlSegment } from '@angular/router';
import { MonoTypeOperatorFunction, filter } from 'rxjs';
import { ContentPageTreeView } from 'ish-core/models/content-page-tree-view/content-page-tree-view.model';
import { ContentPageTreeElement } from 'ish-core/models/content-page-tree/content-page-tree.model';
import { CoreState } from 'ish-core/store/core/core-store';
import { selectRouteParam } from 'ish-core/store/core/router';
import { sanitizeSlugData } from 'ish-core/utils/routing';
/**
* generate a localized content page slug
*
* @param page content page element for slug
* @returns localized, formatted content page slug
*/
function generateLocalizedContentPageSlug(page: ContentPageTreeElement) {
return sanitizeSlugData(page?.name);
}
// matcher to check if a given url is a content page route
const contentRouteFormat = /^\/(?!page\/.*$)(.*-)?pg(.*)$/;
/**
* check if given url is a content page route
*
* @param segments current url segments
* @returns match result if given url is a content page route or not
*/
export function matchContentRoute(segments: UrlSegment[]): UrlMatchResult {
// compatibility to old routes
Iif (segments && segments.length === 2 && segments[0].path === 'page') {
return {
consumed: [],
};
}
const url = `/${segments.map(s => s.path).join('/')}`;
if (contentRouteFormat.test(url)) {
const match = contentRouteFormat.exec(url);
const posParams: { [id: string]: UrlSegment } = {};
if (match[2]) {
posParams.contentPageId = new UrlSegment(match[2], {});
}
return {
consumed: [],
posParams,
};
}
return;
}
/**
* generate a localized content page url from a content page
*
* @param page content page
* @returns localized content page url
*/
export function generateContentPageUrl(page: ContentPageTreeView): string {
if (!page) {
return '/';
}
let route = '/';
// generate for each path element from the given content page hierarchy a content page slug and join them together to a complete route
route += page.pathElements?.map(p => generateLocalizedContentPageSlug(p)).join('/');
// add to content page route the content page identifier
if (route !== '/') {
route += '-';
}
route += `pg${page.contentPageId}`;
return route;
}
export function ofContentPageUrl(): MonoTypeOperatorFunction<{}> {
return source$ => source$.pipe(filter((state: CoreState) => !!selectRouteParam('contentPageId')(state)));
}
|