@thescaffold/ngx-apps-blog 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/esm2022/lib/app.module.mjs +17 -0
- package/esm2022/lib/index.mjs +6 -0
- package/esm2022/lib/pages/article/article.component.mjs +82 -0
- package/esm2022/lib/pages/article/article.module.mjs +35 -0
- package/esm2022/lib/pages/docs/docs.component.mjs +386 -0
- package/esm2022/lib/pages/docs/docs.module.mjs +47 -0
- package/esm2022/lib/pages/error/error.component.mjs +75 -0
- package/esm2022/lib/pages/error/error.module.mjs +26 -0
- package/esm2022/lib/pages/home/home.component.mjs +49 -0
- package/esm2022/lib/pages/home/home.module.mjs +36 -0
- package/esm2022/lib/pages/pages.component.mjs +60 -0
- package/esm2022/lib/pages/pages.module.mjs +95 -0
- package/esm2022/lib/pkg/cards/card/card.component.mjs +763 -0
- package/esm2022/lib/pkg/cards/card/index.mjs +3 -0
- package/esm2022/lib/pkg/cards/cards.component.mjs +27 -0
- package/esm2022/lib/pkg/cards/cards.module.mjs +21 -0
- package/esm2022/lib/pkg/cards/cards.utils.mjs +2 -0
- package/esm2022/lib/pkg/cards/index.mjs +4 -0
- package/esm2022/lib/pkg/index.mjs +2 -0
- package/esm2022/public-api.mjs +5 -0
- package/esm2022/thescaffold-ngx-apps-blog.mjs +5 -0
- package/fesm2022/thescaffold-ngx-apps-blog-article.module-BnLR8e24.mjs +114 -0
- package/fesm2022/thescaffold-ngx-apps-blog-article.module-BnLR8e24.mjs.map +1 -0
- package/fesm2022/thescaffold-ngx-apps-blog-docs.module-DRQ-g0-1.mjs +430 -0
- package/fesm2022/thescaffold-ngx-apps-blog-docs.module-DRQ-g0-1.mjs.map +1 -0
- package/fesm2022/thescaffold-ngx-apps-blog-error.module-BzAoFNog.mjs +99 -0
- package/fesm2022/thescaffold-ngx-apps-blog-error.module-BzAoFNog.mjs.map +1 -0
- package/fesm2022/thescaffold-ngx-apps-blog-home.module-CG11DLKD.mjs +876 -0
- package/fesm2022/thescaffold-ngx-apps-blog-home.module-CG11DLKD.mjs.map +1 -0
- package/fesm2022/thescaffold-ngx-apps-blog.mjs +178 -0
- package/fesm2022/thescaffold-ngx-apps-blog.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/app.module.d.ts +8 -0
- package/lib/index.d.ts +5 -0
- package/lib/pages/article/article.component.d.ts +11 -0
- package/lib/pages/article/article.module.d.ts +10 -0
- package/lib/pages/docs/docs.component.d.ts +17 -0
- package/lib/pages/docs/docs.module.d.ts +10 -0
- package/lib/pages/error/error.component.d.ts +11 -0
- package/lib/pages/error/error.module.d.ts +10 -0
- package/lib/pages/home/home.component.d.ts +7 -0
- package/lib/pages/home/home.module.d.ts +11 -0
- package/lib/pages/pages.component.d.ts +9 -0
- package/lib/pages/pages.module.d.ts +11 -0
- package/lib/pkg/cards/card/card.component.d.ts +9 -0
- package/lib/pkg/cards/card/index.d.ts +2 -0
- package/lib/pkg/cards/cards.component.d.ts +7 -0
- package/lib/pkg/cards/cards.module.d.ts +10 -0
- package/lib/pkg/cards/cards.utils.d.ts +29 -0
- package/lib/pkg/cards/index.d.ts +3 -0
- package/lib/pkg/index.d.ts +1 -0
- package/package.json +33 -0
- package/public-api.d.ts +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Ngx Apps
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.0.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project blog` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project blog`.
|
|
8
|
+
|
|
9
|
+
> Note: Don't forget to add `--project blog` or else it will be added to the default project in your `angular.json` file.
|
|
10
|
+
|
|
11
|
+
## Build
|
|
12
|
+
|
|
13
|
+
Run `ng build blog` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
14
|
+
|
|
15
|
+
## Publishing
|
|
16
|
+
|
|
17
|
+
After building your library with `ng build blog`, go to the dist folder `cd dist/blog` and run `npm publish`.
|
|
18
|
+
|
|
19
|
+
## Running unit tests
|
|
20
|
+
|
|
21
|
+
Run `ng test blog` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
22
|
+
|
|
23
|
+
## Further help
|
|
24
|
+
|
|
25
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { AppModuleDirective } from '@thescaffold/ngx-common';
|
|
3
|
+
import { PagesModule } from './pages/pages.module';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class AppModule extends AppModuleDirective {
|
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: AppModule, deps: null, target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.5", ngImport: i0, type: AppModule, imports: [PagesModule], exports: [PagesModule] }); }
|
|
8
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: AppModule, imports: [PagesModule, PagesModule] }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: AppModule, decorators: [{
|
|
11
|
+
type: NgModule,
|
|
12
|
+
args: [{
|
|
13
|
+
imports: [PagesModule],
|
|
14
|
+
exports: [PagesModule],
|
|
15
|
+
}]
|
|
16
|
+
}] });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Jsb2cvc3JjL2xpYi9hcHAubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQU1uRCxNQUFNLE9BQU8sU0FBVSxTQUFRLGtCQUFrQjs4R0FBcEMsU0FBUzsrR0FBVCxTQUFTLFlBSFYsV0FBVyxhQUNYLFdBQVc7K0dBRVYsU0FBUyxZQUhWLFdBQVcsRUFDWCxXQUFXOzsyRkFFVixTQUFTO2tCQUpyQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDdEIsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDO2lCQUN2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBNb2R1bGVEaXJlY3RpdmUgfSBmcm9tICdAdGhlc2NhZmZvbGQvbmd4LWNvbW1vbic7XG5pbXBvcnQgeyBQYWdlc01vZHVsZSB9IGZyb20gJy4vcGFnZXMvcGFnZXMubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1BhZ2VzTW9kdWxlXSxcbiAgZXhwb3J0czogW1BhZ2VzTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQXBwTW9kdWxlIGV4dGVuZHMgQXBwTW9kdWxlRGlyZWN0aXZlIHt9XG4iXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { AppModule as BlogAppModule } from './app.module';
|
|
2
|
+
export { PagesModule } from './pages/pages.module';
|
|
3
|
+
export const routes = {
|
|
4
|
+
root: ['/', 'blog'],
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ibG9nL3NyYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsSUFBSSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRztJQUNwQixJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBBcHBNb2R1bGUgYXMgQmxvZ0FwcE1vZHVsZSB9IGZyb20gJy4vYXBwLm1vZHVsZSc7XG5leHBvcnQgeyBQYWdlc01vZHVsZSB9IGZyb20gJy4vcGFnZXMvcGFnZXMubW9kdWxlJztcblxuZXhwb3J0IGNvbnN0IHJvdXRlcyA9IHtcbiAgcm9vdDogWycvJywgJ2Jsb2cnXSxcbn07XG4iXX0=
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Component, inject } from '@angular/core';
|
|
2
|
+
import { ActivatedRoute } from '@angular/router';
|
|
3
|
+
import { MediaService } from '@thescaffold/ngx-core';
|
|
4
|
+
import { switchMap } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "@angular/router";
|
|
8
|
+
import * as i3 from "@thescaffold/ngx-ui";
|
|
9
|
+
import * as i4 from "@thescaffold/ngx-core";
|
|
10
|
+
export class ArticleComponent {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.route = inject(ActivatedRoute);
|
|
13
|
+
this.mediaService = inject(MediaService);
|
|
14
|
+
this.article$ = this.route.params.pipe(switchMap((params) => {
|
|
15
|
+
this.category = params['category'];
|
|
16
|
+
this.title = params['article'];
|
|
17
|
+
const name = this.category
|
|
18
|
+
? `${this.category}/${this.title}`
|
|
19
|
+
: `${this.title}`;
|
|
20
|
+
return this.mediaService.context('blog').article(name);
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ArticleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.5", type: ArticleComponent, selector: "x-article", ngImport: i0, template: `
|
|
25
|
+
<div *ngIf="article$ | async as article; else empty" class="">
|
|
26
|
+
<div class="">
|
|
27
|
+
<nav>
|
|
28
|
+
<ol *ngIf="title" class="breadcrumb">
|
|
29
|
+
<li class="breadcrumb-item">
|
|
30
|
+
<a [routerLink]="'blog.root' | xRoute">{{
|
|
31
|
+
'apps.blog.component.article.home.title' | xTranslate
|
|
32
|
+
}}</a>
|
|
33
|
+
</li>
|
|
34
|
+
<li *ngIf="category" class="breadcrumb-item">{{ category }}</li>
|
|
35
|
+
<li *ngIf="title" class="breadcrumb-item">{{ title }}</li>
|
|
36
|
+
</ol>
|
|
37
|
+
</nav>
|
|
38
|
+
</div>
|
|
39
|
+
<div [innerHTML]="article" class="w-75"></div>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<!-- misc -->
|
|
43
|
+
<ng-template #loader>
|
|
44
|
+
<x-element-loader></x-element-loader>
|
|
45
|
+
</ng-template>
|
|
46
|
+
|
|
47
|
+
<ng-template #empty>
|
|
48
|
+
<x-element-blank></x-element-blank>
|
|
49
|
+
</ng-template>
|
|
50
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.BlankComponent, selector: "x-element-blank", inputs: ["image", "icon", "type"] }, { kind: "component", type: i3.LoaderComponent, selector: "x-element-loader", inputs: ["data"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.RoutePipe, name: "xRoute" }, { kind: "pipe", type: i4.TranslatePipe, name: "xTranslate" }] }); }
|
|
51
|
+
}
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ArticleComponent, decorators: [{
|
|
53
|
+
type: Component,
|
|
54
|
+
args: [{ selector: 'x-article', template: `
|
|
55
|
+
<div *ngIf="article$ | async as article; else empty" class="">
|
|
56
|
+
<div class="">
|
|
57
|
+
<nav>
|
|
58
|
+
<ol *ngIf="title" class="breadcrumb">
|
|
59
|
+
<li class="breadcrumb-item">
|
|
60
|
+
<a [routerLink]="'blog.root' | xRoute">{{
|
|
61
|
+
'apps.blog.component.article.home.title' | xTranslate
|
|
62
|
+
}}</a>
|
|
63
|
+
</li>
|
|
64
|
+
<li *ngIf="category" class="breadcrumb-item">{{ category }}</li>
|
|
65
|
+
<li *ngIf="title" class="breadcrumb-item">{{ title }}</li>
|
|
66
|
+
</ol>
|
|
67
|
+
</nav>
|
|
68
|
+
</div>
|
|
69
|
+
<div [innerHTML]="article" class="w-75"></div>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<!-- misc -->
|
|
73
|
+
<ng-template #loader>
|
|
74
|
+
<x-element-loader></x-element-loader>
|
|
75
|
+
</ng-template>
|
|
76
|
+
|
|
77
|
+
<ng-template #empty>
|
|
78
|
+
<x-element-blank></x-element-blank>
|
|
79
|
+
</ng-template>
|
|
80
|
+
` }]
|
|
81
|
+
}] });
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ibG9nL3NyYy9saWIvcGFnZXMvYXJ0aWNsZS9hcnRpY2xlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQWlDN0MsTUFBTSxPQUFPLGdCQUFnQjtJQS9CN0I7UUFnQ21CLFVBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0IsaUJBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFJckQsYUFBUSxHQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2hELFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRO2dCQUN4QixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2xDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FDSCxDQUFDO0tBQ0g7OEdBaEJZLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLGlEQTdCakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUOzsyRkFHVSxnQkFBZ0I7a0JBL0I1QixTQUFTOytCQUNFLFdBQVcsWUFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTWVkaWFTZXJ2aWNlIH0gZnJvbSAnQHRoZXNjYWZmb2xkL25neC1jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd4LWFydGljbGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgKm5nSWY9XCJhcnRpY2xlJCB8IGFzeW5jIGFzIGFydGljbGU7IGVsc2UgZW1wdHlcIiBjbGFzcz1cIlwiPlxuICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICA8bmF2PlxuICAgICAgICAgIDxvbCAqbmdJZj1cInRpdGxlXCIgY2xhc3M9XCJicmVhZGNydW1iXCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJicmVhZGNydW1iLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiJ2Jsb2cucm9vdCcgfCB4Um91dGVcIj57e1xuICAgICAgICAgICAgICAgICdhcHBzLmJsb2cuY29tcG9uZW50LmFydGljbGUuaG9tZS50aXRsZScgfCB4VHJhbnNsYXRlXG4gICAgICAgICAgICAgIH19PC9hPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSAqbmdJZj1cImNhdGVnb3J5XCIgY2xhc3M9XCJicmVhZGNydW1iLWl0ZW1cIj57eyBjYXRlZ29yeSB9fTwvbGk+XG4gICAgICAgICAgICA8bGkgKm5nSWY9XCJ0aXRsZVwiIGNsYXNzPVwiYnJlYWRjcnVtYi1pdGVtXCI+e3sgdGl0bGUgfX08L2xpPlxuICAgICAgICAgIDwvb2w+XG4gICAgICAgIDwvbmF2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiYXJ0aWNsZVwiIGNsYXNzPVwidy03NVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBtaXNjIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxuICAgICAgPHgtZWxlbWVudC1sb2FkZXI+PC94LWVsZW1lbnQtbG9hZGVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgICAgPHgtZWxlbWVudC1ibGFuaz48L3gtZWxlbWVudC1ibGFuaz5cbiAgICA8L25nLXRlbXBsYXRlPlxuICBgLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBcnRpY2xlQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVkaWFTZXJ2aWNlID0gaW5qZWN0KE1lZGlhU2VydmljZSk7XG5cbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBhcnRpY2xlJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBzd2l0Y2hNYXAoKHBhcmFtcykgPT4ge1xuICAgICAgdGhpcy5jYXRlZ29yeSA9IHBhcmFtc1snY2F0ZWdvcnknXTtcbiAgICAgIHRoaXMudGl0bGUgPSBwYXJhbXNbJ2FydGljbGUnXTtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNhdGVnb3J5XG4gICAgICAgID8gYCR7dGhpcy5jYXRlZ29yeX0vJHt0aGlzLnRpdGxlfWBcbiAgICAgICAgOiBgJHt0aGlzLnRpdGxlfWA7XG4gICAgICByZXR1cm4gdGhpcy5tZWRpYVNlcnZpY2UuY29udGV4dCgnYmxvZycpLmFydGljbGUobmFtZSk7XG4gICAgfSksXG4gICk7XG59XG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { RouterModule } from '@angular/router';
|
|
3
|
+
import { SharedModule } from '@thescaffold/ngx-core';
|
|
4
|
+
import { ElementsModule, LayoutsModule } from '@thescaffold/ngx-ui';
|
|
5
|
+
import { ArticleComponent } from './article.component';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/router";
|
|
8
|
+
export class ArticleModule {
|
|
9
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ArticleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
10
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.5", ngImport: i0, type: ArticleModule, declarations: [ArticleComponent], imports: [SharedModule, i1.RouterModule, LayoutsModule,
|
|
11
|
+
ElementsModule] }); }
|
|
12
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ArticleModule, imports: [SharedModule,
|
|
13
|
+
RouterModule.forChild([
|
|
14
|
+
{ path: ':category/:article', component: ArticleComponent },
|
|
15
|
+
{ path: ':article', component: ArticleComponent },
|
|
16
|
+
]),
|
|
17
|
+
LayoutsModule,
|
|
18
|
+
ElementsModule] }); }
|
|
19
|
+
}
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: ArticleModule, decorators: [{
|
|
21
|
+
type: NgModule,
|
|
22
|
+
args: [{
|
|
23
|
+
declarations: [ArticleComponent],
|
|
24
|
+
imports: [
|
|
25
|
+
SharedModule,
|
|
26
|
+
RouterModule.forChild([
|
|
27
|
+
{ path: ':category/:article', component: ArticleComponent },
|
|
28
|
+
{ path: ':article', component: ArticleComponent },
|
|
29
|
+
]),
|
|
30
|
+
LayoutsModule,
|
|
31
|
+
ElementsModule,
|
|
32
|
+
],
|
|
33
|
+
}]
|
|
34
|
+
}] });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ibG9nL3NyYy9saWIvcGFnZXMvYXJ0aWNsZS9hcnRpY2xlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBY3ZELE1BQU0sT0FBTyxhQUFhOzhHQUFiLGFBQWE7K0dBQWIsYUFBYSxpQkFYVCxnQkFBZ0IsYUFFN0IsWUFBWSxtQkFLWixhQUFhO1lBQ2IsY0FBYzsrR0FHTCxhQUFhLFlBVHRCLFlBQVk7WUFDWixZQUFZLENBQUMsUUFBUSxDQUFDO2dCQUNwQixFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzNELEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7YUFDbEQsQ0FBQztZQUNGLGFBQWE7WUFDYixjQUFjOzsyRkFHTCxhQUFhO2tCQVp6QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUNoQyxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixZQUFZLENBQUMsUUFBUSxDQUFDOzRCQUNwQixFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7NEJBQzNELEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7eUJBQ2xELENBQUM7d0JBQ0YsYUFBYTt3QkFDYixjQUFjO3FCQUNmO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTaGFyZWRNb2R1bGUgfSBmcm9tICdAdGhlc2NhZmZvbGQvbmd4LWNvcmUnO1xuaW1wb3J0IHsgRWxlbWVudHNNb2R1bGUsIExheW91dHNNb2R1bGUgfSBmcm9tICdAdGhlc2NhZmZvbGQvbmd4LXVpJztcbmltcG9ydCB7IEFydGljbGVDb21wb25lbnQgfSBmcm9tICcuL2FydGljbGUuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbQXJ0aWNsZUNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBTaGFyZWRNb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKFtcbiAgICAgIHsgcGF0aDogJzpjYXRlZ29yeS86YXJ0aWNsZScsIGNvbXBvbmVudDogQXJ0aWNsZUNvbXBvbmVudCB9LFxuICAgICAgeyBwYXRoOiAnOmFydGljbGUnLCBjb21wb25lbnQ6IEFydGljbGVDb21wb25lbnQgfSxcbiAgICBdKSxcbiAgICBMYXlvdXRzTW9kdWxlLFxuICAgIEVsZW1lbnRzTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBcnRpY2xlTW9kdWxlIHt9XG4iXX0=
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { Component, inject } from '@angular/core';
|
|
2
|
+
import { ActivatedRoute } from '@angular/router';
|
|
3
|
+
import { BaseDirective, MediaService, titleCase } from '@thescaffold/ngx-core';
|
|
4
|
+
import { map, switchMap } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "@angular/forms";
|
|
8
|
+
import * as i3 from "@angular/router";
|
|
9
|
+
import * as i4 from "@thescaffold/ngx-ui";
|
|
10
|
+
import * as i5 from "@thescaffold/ngx-core";
|
|
11
|
+
export class DocsComponent extends BaseDirective {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.mediaService = inject(MediaService);
|
|
15
|
+
this.route = inject(ActivatedRoute);
|
|
16
|
+
this.navList = [];
|
|
17
|
+
this.showHeaders = true;
|
|
18
|
+
this.nav$ = this.mediaService
|
|
19
|
+
.context('blog')
|
|
20
|
+
.index()
|
|
21
|
+
.pipe(map((content) => {
|
|
22
|
+
return (this.navList = content?.nav);
|
|
23
|
+
}));
|
|
24
|
+
this.breadcrumbs$ = this.route.url.pipe(map((segments) => {
|
|
25
|
+
const breads = [
|
|
26
|
+
{
|
|
27
|
+
title: this.translate('apps.blog.component.docs.home.title'),
|
|
28
|
+
url: '/blog',
|
|
29
|
+
},
|
|
30
|
+
...(segments.length > 1
|
|
31
|
+
? [
|
|
32
|
+
{
|
|
33
|
+
title: titleCase(segments[0].path.replace(/-/g, ' ')),
|
|
34
|
+
url: `/${segments[0]}`,
|
|
35
|
+
},
|
|
36
|
+
]
|
|
37
|
+
: []),
|
|
38
|
+
...(segments.length > 2
|
|
39
|
+
? [
|
|
40
|
+
{
|
|
41
|
+
title: titleCase(segments[1].path.replace(/-/g, ' ')),
|
|
42
|
+
url: `/${segments[1]}`,
|
|
43
|
+
},
|
|
44
|
+
]
|
|
45
|
+
: []),
|
|
46
|
+
...(segments.length > 3
|
|
47
|
+
? [
|
|
48
|
+
{
|
|
49
|
+
title: titleCase(segments[2].path.replace(/-/g, ' ')),
|
|
50
|
+
url: `/${segments[2]}`,
|
|
51
|
+
},
|
|
52
|
+
]
|
|
53
|
+
: []),
|
|
54
|
+
{
|
|
55
|
+
title: titleCase(segments[segments.length - 1].path.replace(/-/g, ' ')),
|
|
56
|
+
url: null,
|
|
57
|
+
},
|
|
58
|
+
];
|
|
59
|
+
return breads;
|
|
60
|
+
}));
|
|
61
|
+
this.docs$ = this.route.params.pipe(switchMap((params) => {
|
|
62
|
+
let name = '';
|
|
63
|
+
const sub1 = (this.currentNav = params['sub1']);
|
|
64
|
+
if (sub1) {
|
|
65
|
+
this.showHeaders = sub1.toLowerCase() != 'index';
|
|
66
|
+
name += sub1;
|
|
67
|
+
}
|
|
68
|
+
const sub2 = params['sub2'];
|
|
69
|
+
if (sub2) {
|
|
70
|
+
this.showHeaders = sub2.toLowerCase() != 'index';
|
|
71
|
+
name += `/${sub2}`;
|
|
72
|
+
}
|
|
73
|
+
const sub3 = params['sub3'];
|
|
74
|
+
if (sub3) {
|
|
75
|
+
this.showHeaders = sub3.toLowerCase() != 'index';
|
|
76
|
+
name += `/${sub3}`;
|
|
77
|
+
}
|
|
78
|
+
const sub4 = params['sub4'];
|
|
79
|
+
if (sub4) {
|
|
80
|
+
this.showHeaders = sub4.toLowerCase() != 'index';
|
|
81
|
+
name += `/${sub4}`;
|
|
82
|
+
}
|
|
83
|
+
const sub5 = params['sub5'];
|
|
84
|
+
if (sub5) {
|
|
85
|
+
this.showHeaders = sub5.toLowerCase() != 'index';
|
|
86
|
+
name += `/${sub5}`;
|
|
87
|
+
}
|
|
88
|
+
return this.mediaService.context('blog').article(name, true);
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
onSelectChange(event) {
|
|
92
|
+
const selectedUrl = event.target.value;
|
|
93
|
+
if (selectedUrl) {
|
|
94
|
+
this.router.navigate([selectedUrl]);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
getLowestLevelHeaders(headers) {
|
|
98
|
+
if (headers.length === 0)
|
|
99
|
+
return [];
|
|
100
|
+
// Find the lowest level in the array
|
|
101
|
+
const minLevel = Math.min(...headers.map((header) => header.level));
|
|
102
|
+
// Filter headers by the lowest level
|
|
103
|
+
return headers.filter((header) => header.level == minLevel);
|
|
104
|
+
}
|
|
105
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DocsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
106
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.5", type: DocsComponent, selector: "x-docs", usesInheritance: true, ngImport: i0, template: `
|
|
107
|
+
<div class="row m-0 p-0">
|
|
108
|
+
<div
|
|
109
|
+
class="col-12 col-lg-3 p-0 mb-3 sticky-top d-block d-lg-none"
|
|
110
|
+
style="max-height: 75vh; overflow-y: scroll;"
|
|
111
|
+
*ngIf="nav$ | async as nav; else loader"
|
|
112
|
+
>
|
|
113
|
+
<ng-container *ngIf="nav?.length">
|
|
114
|
+
<select (change)="onSelectChange($event)" class="form-select">
|
|
115
|
+
<option value="" disabled selected>Menu</option>
|
|
116
|
+
<ng-container *ngFor="let a of nav">
|
|
117
|
+
<optgroup [label]="a.title">
|
|
118
|
+
<option *ngIf="!a?.links?.length" [value]="a.url">
|
|
119
|
+
{{ a.title }}
|
|
120
|
+
</option>
|
|
121
|
+
<ng-container *ngIf="a?.links?.length">
|
|
122
|
+
<option *ngFor="let b of a.links" [value]="b.url">
|
|
123
|
+
-- {{ b.title }}
|
|
124
|
+
</option>
|
|
125
|
+
<ng-container *ngFor="let b of a.links">
|
|
126
|
+
<option *ngFor="let c of b.links" [value]="c.url">
|
|
127
|
+
---- {{ c.title }}
|
|
128
|
+
</option>
|
|
129
|
+
</ng-container>
|
|
130
|
+
</ng-container>
|
|
131
|
+
</optgroup>
|
|
132
|
+
</ng-container>
|
|
133
|
+
</select>
|
|
134
|
+
</ng-container>
|
|
135
|
+
</div>
|
|
136
|
+
<div
|
|
137
|
+
class="col-12 col-lg-3 sticky-top d-none d-lg-block p-0 m-0"
|
|
138
|
+
style="max-height: 75vh; overflow-y: scroll;"
|
|
139
|
+
*ngIf="nav$ | async as nav; else loader"
|
|
140
|
+
>
|
|
141
|
+
<ul class="nav flex-column">
|
|
142
|
+
<ng-container *ngIf="nav?.length">
|
|
143
|
+
<li *ngFor="let a of nav" class="nav-item mb-5">
|
|
144
|
+
<p class="fw-bold fs-4 text-body" [innerHTML]="a.title"></p>
|
|
145
|
+
<ul *ngIf="a?.links?.length" class="nav flex-column">
|
|
146
|
+
<li *ngFor="let b of a?.links" class="nav-item">
|
|
147
|
+
<a
|
|
148
|
+
class="x-docs-parent-nav nav-link fs-6 ps-0 ms-0 pt-0 mt-0"
|
|
149
|
+
[routerLink]="b.url"
|
|
150
|
+
[routerLinkActive]="'active'"
|
|
151
|
+
[innerHTML]="b.title"
|
|
152
|
+
></a>
|
|
153
|
+
<ng-container *ngIf="b?.links?.length">
|
|
154
|
+
<ul
|
|
155
|
+
*ngFor="let c of b.links"
|
|
156
|
+
class="nav flex-column border-start"
|
|
157
|
+
>
|
|
158
|
+
<li class="nav-item">
|
|
159
|
+
<a
|
|
160
|
+
class="x-docs-child-nav nav-link text-tiny"
|
|
161
|
+
[routerLink]="c.url"
|
|
162
|
+
[routerLinkActive]="'active'"
|
|
163
|
+
[innerHTML]="c.title"
|
|
164
|
+
></a>
|
|
165
|
+
</li>
|
|
166
|
+
</ul>
|
|
167
|
+
</ng-container>
|
|
168
|
+
</li>
|
|
169
|
+
</ul>
|
|
170
|
+
</li>
|
|
171
|
+
</ng-container>
|
|
172
|
+
</ul>
|
|
173
|
+
</div>
|
|
174
|
+
<div class="col-12 col-lg-9 p-3 p-lg-5 bg-body-tertiary">
|
|
175
|
+
<div class="row" *ngIf="docs$ | async as docs; else loader">
|
|
176
|
+
<div class="col-12 col-lg-9 px-3">
|
|
177
|
+
<div *ngIf="breadcrumbs$ | async as breadcrumbs" class="">
|
|
178
|
+
<nav id="x-docs-nav">
|
|
179
|
+
<ol class="breadcrumb">
|
|
180
|
+
<li
|
|
181
|
+
*ngFor="let breadcrumb of breadcrumbs"
|
|
182
|
+
class="breadcrumb-item"
|
|
183
|
+
>
|
|
184
|
+
<a *ngIf="breadcrumb?.url" [routerLink]="breadcrumb.url">{{
|
|
185
|
+
breadcrumb.title
|
|
186
|
+
}}</a>
|
|
187
|
+
<span
|
|
188
|
+
*ngIf="!breadcrumb?.url"
|
|
189
|
+
[routerLink]="breadcrumb.url"
|
|
190
|
+
>{{ breadcrumb.title }}</span
|
|
191
|
+
>
|
|
192
|
+
</li>
|
|
193
|
+
</ol>
|
|
194
|
+
</nav>
|
|
195
|
+
</div>
|
|
196
|
+
|
|
197
|
+
<div
|
|
198
|
+
*ngIf="docs?.html; else empty"
|
|
199
|
+
data-bs-spy="scroll"
|
|
200
|
+
data-bs-target="#x-docs-nav"
|
|
201
|
+
data-bs-root-margin="0px 0px -40%"
|
|
202
|
+
data-bs-smooth-scroll="true"
|
|
203
|
+
class="scrollspy-example"
|
|
204
|
+
tabindex="0"
|
|
205
|
+
>
|
|
206
|
+
<div [innerHTML]="docs.html | xSafeHtml"></div>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
<div
|
|
210
|
+
*ngIf="showHeaders && docs?.headers?.length"
|
|
211
|
+
class="col-lg-3 sticky-top d-none d-lg-block"
|
|
212
|
+
style="max-height: 75vh; overflow-y: scroll;"
|
|
213
|
+
>
|
|
214
|
+
<ul class="nav flex-column">
|
|
215
|
+
<li
|
|
216
|
+
*ngFor="let h of getLowestLevelHeaders(docs.headers)"
|
|
217
|
+
class="nav-item"
|
|
218
|
+
>
|
|
219
|
+
<a
|
|
220
|
+
class="x-docs-header-nav nav-link text-tiny"
|
|
221
|
+
[routerLink]="['./']"
|
|
222
|
+
[routerLinkActive]="'active'"
|
|
223
|
+
[fragment]="h.id"
|
|
224
|
+
[innerHTML]="h.text"
|
|
225
|
+
></a>
|
|
226
|
+
</li>
|
|
227
|
+
</ul>
|
|
228
|
+
</div>
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
|
|
233
|
+
<div class="py-3"></div>
|
|
234
|
+
|
|
235
|
+
<!-- misc -->
|
|
236
|
+
<ng-template #loader>
|
|
237
|
+
<x-element-loader></x-element-loader>
|
|
238
|
+
</ng-template>
|
|
239
|
+
|
|
240
|
+
<ng-template #empty>
|
|
241
|
+
<x-element-blank></x-element-blank>
|
|
242
|
+
</ng-template>
|
|
243
|
+
`, isInline: true, styles: [".text-tiny{font-size:.9em}.x-docs-parent-nav.nav-link.active,.x-docs-parent-nav.nav-link:hover{font-weight:700}.x-docs-child-nav.nav-link.active,.x-docs-child-nav.nav-link:hover{border-left:5px solid;font-weight:700}.x-docs-header-nav.nav-link.active,.x-docs-header-nav.nav-link:hover{font-weight:700}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i4.BlankComponent, selector: "x-element-blank", inputs: ["image", "icon", "type"] }, { kind: "component", type: i4.LoaderComponent, selector: "x-element-loader", inputs: ["data"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.SafeHtmlPipe, name: "xSafeHtml" }] }); }
|
|
244
|
+
}
|
|
245
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DocsComponent, decorators: [{
|
|
246
|
+
type: Component,
|
|
247
|
+
args: [{ selector: 'x-docs', template: `
|
|
248
|
+
<div class="row m-0 p-0">
|
|
249
|
+
<div
|
|
250
|
+
class="col-12 col-lg-3 p-0 mb-3 sticky-top d-block d-lg-none"
|
|
251
|
+
style="max-height: 75vh; overflow-y: scroll;"
|
|
252
|
+
*ngIf="nav$ | async as nav; else loader"
|
|
253
|
+
>
|
|
254
|
+
<ng-container *ngIf="nav?.length">
|
|
255
|
+
<select (change)="onSelectChange($event)" class="form-select">
|
|
256
|
+
<option value="" disabled selected>Menu</option>
|
|
257
|
+
<ng-container *ngFor="let a of nav">
|
|
258
|
+
<optgroup [label]="a.title">
|
|
259
|
+
<option *ngIf="!a?.links?.length" [value]="a.url">
|
|
260
|
+
{{ a.title }}
|
|
261
|
+
</option>
|
|
262
|
+
<ng-container *ngIf="a?.links?.length">
|
|
263
|
+
<option *ngFor="let b of a.links" [value]="b.url">
|
|
264
|
+
-- {{ b.title }}
|
|
265
|
+
</option>
|
|
266
|
+
<ng-container *ngFor="let b of a.links">
|
|
267
|
+
<option *ngFor="let c of b.links" [value]="c.url">
|
|
268
|
+
---- {{ c.title }}
|
|
269
|
+
</option>
|
|
270
|
+
</ng-container>
|
|
271
|
+
</ng-container>
|
|
272
|
+
</optgroup>
|
|
273
|
+
</ng-container>
|
|
274
|
+
</select>
|
|
275
|
+
</ng-container>
|
|
276
|
+
</div>
|
|
277
|
+
<div
|
|
278
|
+
class="col-12 col-lg-3 sticky-top d-none d-lg-block p-0 m-0"
|
|
279
|
+
style="max-height: 75vh; overflow-y: scroll;"
|
|
280
|
+
*ngIf="nav$ | async as nav; else loader"
|
|
281
|
+
>
|
|
282
|
+
<ul class="nav flex-column">
|
|
283
|
+
<ng-container *ngIf="nav?.length">
|
|
284
|
+
<li *ngFor="let a of nav" class="nav-item mb-5">
|
|
285
|
+
<p class="fw-bold fs-4 text-body" [innerHTML]="a.title"></p>
|
|
286
|
+
<ul *ngIf="a?.links?.length" class="nav flex-column">
|
|
287
|
+
<li *ngFor="let b of a?.links" class="nav-item">
|
|
288
|
+
<a
|
|
289
|
+
class="x-docs-parent-nav nav-link fs-6 ps-0 ms-0 pt-0 mt-0"
|
|
290
|
+
[routerLink]="b.url"
|
|
291
|
+
[routerLinkActive]="'active'"
|
|
292
|
+
[innerHTML]="b.title"
|
|
293
|
+
></a>
|
|
294
|
+
<ng-container *ngIf="b?.links?.length">
|
|
295
|
+
<ul
|
|
296
|
+
*ngFor="let c of b.links"
|
|
297
|
+
class="nav flex-column border-start"
|
|
298
|
+
>
|
|
299
|
+
<li class="nav-item">
|
|
300
|
+
<a
|
|
301
|
+
class="x-docs-child-nav nav-link text-tiny"
|
|
302
|
+
[routerLink]="c.url"
|
|
303
|
+
[routerLinkActive]="'active'"
|
|
304
|
+
[innerHTML]="c.title"
|
|
305
|
+
></a>
|
|
306
|
+
</li>
|
|
307
|
+
</ul>
|
|
308
|
+
</ng-container>
|
|
309
|
+
</li>
|
|
310
|
+
</ul>
|
|
311
|
+
</li>
|
|
312
|
+
</ng-container>
|
|
313
|
+
</ul>
|
|
314
|
+
</div>
|
|
315
|
+
<div class="col-12 col-lg-9 p-3 p-lg-5 bg-body-tertiary">
|
|
316
|
+
<div class="row" *ngIf="docs$ | async as docs; else loader">
|
|
317
|
+
<div class="col-12 col-lg-9 px-3">
|
|
318
|
+
<div *ngIf="breadcrumbs$ | async as breadcrumbs" class="">
|
|
319
|
+
<nav id="x-docs-nav">
|
|
320
|
+
<ol class="breadcrumb">
|
|
321
|
+
<li
|
|
322
|
+
*ngFor="let breadcrumb of breadcrumbs"
|
|
323
|
+
class="breadcrumb-item"
|
|
324
|
+
>
|
|
325
|
+
<a *ngIf="breadcrumb?.url" [routerLink]="breadcrumb.url">{{
|
|
326
|
+
breadcrumb.title
|
|
327
|
+
}}</a>
|
|
328
|
+
<span
|
|
329
|
+
*ngIf="!breadcrumb?.url"
|
|
330
|
+
[routerLink]="breadcrumb.url"
|
|
331
|
+
>{{ breadcrumb.title }}</span
|
|
332
|
+
>
|
|
333
|
+
</li>
|
|
334
|
+
</ol>
|
|
335
|
+
</nav>
|
|
336
|
+
</div>
|
|
337
|
+
|
|
338
|
+
<div
|
|
339
|
+
*ngIf="docs?.html; else empty"
|
|
340
|
+
data-bs-spy="scroll"
|
|
341
|
+
data-bs-target="#x-docs-nav"
|
|
342
|
+
data-bs-root-margin="0px 0px -40%"
|
|
343
|
+
data-bs-smooth-scroll="true"
|
|
344
|
+
class="scrollspy-example"
|
|
345
|
+
tabindex="0"
|
|
346
|
+
>
|
|
347
|
+
<div [innerHTML]="docs.html | xSafeHtml"></div>
|
|
348
|
+
</div>
|
|
349
|
+
</div>
|
|
350
|
+
<div
|
|
351
|
+
*ngIf="showHeaders && docs?.headers?.length"
|
|
352
|
+
class="col-lg-3 sticky-top d-none d-lg-block"
|
|
353
|
+
style="max-height: 75vh; overflow-y: scroll;"
|
|
354
|
+
>
|
|
355
|
+
<ul class="nav flex-column">
|
|
356
|
+
<li
|
|
357
|
+
*ngFor="let h of getLowestLevelHeaders(docs.headers)"
|
|
358
|
+
class="nav-item"
|
|
359
|
+
>
|
|
360
|
+
<a
|
|
361
|
+
class="x-docs-header-nav nav-link text-tiny"
|
|
362
|
+
[routerLink]="['./']"
|
|
363
|
+
[routerLinkActive]="'active'"
|
|
364
|
+
[fragment]="h.id"
|
|
365
|
+
[innerHTML]="h.text"
|
|
366
|
+
></a>
|
|
367
|
+
</li>
|
|
368
|
+
</ul>
|
|
369
|
+
</div>
|
|
370
|
+
</div>
|
|
371
|
+
</div>
|
|
372
|
+
</div>
|
|
373
|
+
|
|
374
|
+
<div class="py-3"></div>
|
|
375
|
+
|
|
376
|
+
<!-- misc -->
|
|
377
|
+
<ng-template #loader>
|
|
378
|
+
<x-element-loader></x-element-loader>
|
|
379
|
+
</ng-template>
|
|
380
|
+
|
|
381
|
+
<ng-template #empty>
|
|
382
|
+
<x-element-blank></x-element-blank>
|
|
383
|
+
</ng-template>
|
|
384
|
+
`, styles: [".text-tiny{font-size:.9em}.x-docs-parent-nav.nav-link.active,.x-docs-parent-nav.nav-link:hover{font-weight:700}.x-docs-child-nav.nav-link.active,.x-docs-child-nav.nav-link:hover{border-left:5px solid;font-weight:700}.x-docs-header-nav.nav-link.active,.x-docs-header-nav.nav-link:hover{font-weight:700}\n"] }]
|
|
385
|
+
}] });
|
|
386
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ibG9nL3NyYy9saWIvcGFnZXMvZG9jcy9kb2NzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0UsT0FBTyxFQUFFLEdBQUcsRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFnTGxELE1BQU0sT0FBTyxhQUFjLFNBQVEsYUFBYTtJQTlLaEQ7O1FBK0ttQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxVQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXhDLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFHNUIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFFbkIsU0FBSSxHQUFvQixJQUFJLENBQUMsWUFBWTthQUN0QyxPQUFPLENBQUMsTUFBTSxDQUFDO2FBQ2YsS0FBSyxFQUFFO2FBQ1AsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUksT0FBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUNILENBQUM7UUFFSixpQkFBWSxHQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ2pELEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2YsTUFBTSxNQUFNLEdBQUc7Z0JBQ2I7b0JBQ0UsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMscUNBQXFDLENBQUM7b0JBQzVELEdBQUcsRUFBRSxPQUFPO2lCQUNiO2dCQUNELEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ3JCLENBQUMsQ0FBQzt3QkFDRTs0QkFDRSxLQUFLLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFDckQsR0FBRyxFQUFFLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO3lCQUN2QjtxQkFDRjtvQkFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNQLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ3JCLENBQUMsQ0FBQzt3QkFDRTs0QkFDRSxLQUFLLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFDckQsR0FBRyxFQUFFLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO3lCQUN2QjtxQkFDRjtvQkFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNQLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ3JCLENBQUMsQ0FBQzt3QkFDRTs0QkFDRSxLQUFLLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFDckQsR0FBRyxFQUFFLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO3lCQUN2QjtxQkFDRjtvQkFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNQO29CQUNFLEtBQUssRUFBRSxTQUFTLENBQ2QsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5SVQ7OzJGQW1DVSxhQUFhO2tCQTlLekIsU0FBUzsrQkFDRSxRQUFRLFlBQ1I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUlUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJhc2VEaXJlY3RpdmUsIE1lZGlhU2VydmljZSwgdGl0bGVDYXNlIH0gZnJvbSAnQHRoZXNjYWZmb2xkL25neC1jb3JlJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3gtZG9jcycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtLTAgcC0wXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY29sLTEyIGNvbC1sZy0zIHAtMCBtYi0zIHN0aWNreS10b3AgZC1ibG9jayBkLWxnLW5vbmVcIlxuICAgICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDc1dmg7IG92ZXJmbG93LXk6IHNjcm9sbDtcIlxuICAgICAgICAqbmdJZj1cIm5hdiQgfCBhc3luYyBhcyBuYXY7IGVsc2UgbG9hZGVyXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdj8ubGVuZ3RoXCI+XG4gICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cIm9uU2VsZWN0Q2hhbmdlKCRldmVudClcIiBjbGFzcz1cImZvcm0tc2VsZWN0XCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgZGlzYWJsZWQgc2VsZWN0ZWQ+TWVudTwvb3B0aW9uPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYSBvZiBuYXZcIj5cbiAgICAgICAgICAgICAgPG9wdGdyb3VwIFtsYWJlbF09XCJhLnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdJZj1cIiFhPy5saW5rcz8ubGVuZ3RoXCIgW3ZhbHVlXT1cImEudXJsXCI+XG4gICAgICAgICAgICAgICAgICB7eyBhLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImE/LmxpbmtzPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGIgb2YgYS5saW5rc1wiIFt2YWx1ZV09XCJiLnVybFwiPlxuICAgICAgICAgICAgICAgICAgICAtLSB7eyBiLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGIgb2YgYS5saW5rc1wiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGIubGlua3NcIiBbdmFsdWVdPVwiYy51cmxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAtLS0tIHt7IGMudGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9vcHRncm91cD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbC0xMiBjb2wtbGctMyBzdGlja3ktdG9wIGQtbm9uZSBkLWxnLWJsb2NrIHAtMCBtLTBcIlxuICAgICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDc1dmg7IG92ZXJmbG93LXk6IHNjcm9sbDtcIlxuICAgICAgICAqbmdJZj1cIm5hdiQgfCBhc3luYyBhcyBuYXY7IGVsc2UgbG9hZGVyXCJcbiAgICAgID5cbiAgICAgICAgPHVsIGNsYXNzPVwibmF2IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGEgb2YgbmF2XCIgY2xhc3M9XCJuYXYtaXRlbSBtYi01XCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiZnctYm9sZCBmcy00IHRleHQtYm9keVwiIFtpbm5lckhUTUxdPVwiYS50aXRsZVwiPjwvcD5cbiAgICAgICAgICAgICAgPHVsICpuZ0lmPVwiYT8ubGlua3M/Lmxlbmd0aFwiIGNsYXNzPVwibmF2IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBiIG9mIGE/LmxpbmtzXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ4LWRvY3MtcGFyZW50LW5hdiBuYXYtbGluayBmcy02IHBzLTAgbXMtMCBwdC0wIG10LTBcIlxuICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJiLnVybFwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIidhY3RpdmUnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJiLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgID48L2E+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYj8ubGlua3M/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYyBvZiBiLmxpbmtzXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdiBmbGV4LWNvbHVtbiBib3JkZXItc3RhcnRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwieC1kb2NzLWNoaWxkLW5hdiBuYXYtbGluayB0ZXh0LXRpbnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJjLnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIidhY3RpdmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJjLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1sZy05IHAtMyBwLWxnLTUgYmctYm9keS10ZXJ0aWFyeVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJkb2NzJCB8IGFzeW5jIGFzIGRvY3M7IGVsc2UgbG9hZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbGctOSBweC0zXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnJlYWRjcnVtYnMkIHwgYXN5bmMgYXMgYnJlYWRjcnVtYnNcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICA8bmF2IGlkPVwieC1kb2NzLW5hdlwiPlxuICAgICAgICAgICAgICAgIDxvbCBjbGFzcz1cImJyZWFkY3J1bWJcIj5cbiAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYnJlYWRjcnVtYiBvZiBicmVhZGNydW1ic1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnJlYWRjcnVtYi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJicmVhZGNydW1iPy51cmxcIiBbcm91dGVyTGlua109XCJicmVhZGNydW1iLnVybFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWRjcnVtYi50aXRsZVxuICAgICAgICAgICAgICAgICAgICB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFicmVhZGNydW1iPy51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cImJyZWFkY3J1bWIudXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICA+e3sgYnJlYWRjcnVtYi50aXRsZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvb2w+XG4gICAgICAgICAgICAgIDwvbmF2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJkb2NzPy5odG1sOyBlbHNlIGVtcHR5XCJcbiAgICAgICAgICAgICAgZGF0YS1icy1zcHk9XCJzY3JvbGxcIlxuICAgICAgICAgICAgICBkYXRhLWJzLXRhcmdldD1cIiN4LWRvY3MtbmF2XCJcbiAgICAgICAgICAgICAgZGF0YS1icy1yb290LW1hcmdpbj1cIjBweCAwcHggLTQwJVwiXG4gICAgICAgICAgICAgIGRhdGEtYnMtc21vb3RoLXNjcm9sbD1cInRydWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNjcm9sbHNweS1leGFtcGxlXCJcbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImRvY3MuaHRtbCB8IHhTYWZlSHRtbFwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJzaG93SGVhZGVycyAmJiBkb2NzPy5oZWFkZXJzPy5sZW5ndGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJjb2wtbGctMyBzdGlja3ktdG9wIGQtbm9uZSBkLWxnLWJsb2NrXCJcbiAgICAgICAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogNzV2aDsgb3ZlcmZsb3cteTogc2Nyb2xsO1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBoIG9mIGdldExvd2VzdExldmVsSGVhZGVycyhkb2NzLmhlYWRlcnMpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1pdGVtXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIngtZG9jcy1oZWFkZXItbmF2IG5hdi1saW5rIHRleHQtdGlueVwiXG4gICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy4vJ11cIlxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiJ2FjdGl2ZSdcIlxuICAgICAgICAgICAgICAgICAgW2ZyYWdtZW50XT1cImguaWRcIlxuICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJoLnRleHRcIlxuICAgICAgICAgICAgICAgID48L2E+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInB5LTNcIj48L2Rpdj5cblxuICAgIDwhLS0gbWlzYyAtLT5cbiAgICA8bmctdGVtcGxhdGUgI2xvYWRlcj5cbiAgICAgIDx4LWVsZW1lbnQtbG9hZGVyPjwveC1lbGVtZW50LWxvYWRlcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgICAgIDx4LWVsZW1lbnQtYmxhbms+PC94LWVsZW1lbnQtYmxhbms+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLnRleHQtdGlueSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgICB9XG5cbiAgICAgIC54LWRvY3MtcGFyZW50LW5hdi5uYXYtbGluay5hY3RpdmUge1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIH1cblxuICAgICAgLngtZG9jcy1wYXJlbnQtbmF2Lm5hdi1saW5rOmhvdmVyIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICB9XG5cbiAgICAgIC54LWRvY3MtY2hpbGQtbmF2Lm5hdi1saW5rLmFjdGl2ZSB7XG4gICAgICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgfVxuXG4gICAgICAueC1kb2NzLWNoaWxkLW5hdi5uYXYtbGluazpob3ZlciB7XG4gICAgICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgfVxuXG4gICAgICAueC1kb2NzLWhlYWRlci1uYXYubmF2LWxpbmsuYWN0aXZlIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICB9XG5cbiAgICAgIC54LWRvY3MtaGVhZGVyLW5hdi5uYXYtbGluazpob3ZlciB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERvY3NDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtZWRpYVNlcnZpY2UgPSBpbmplY3QoTWVkaWFTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG5cbiAgcHJpdmF0ZSBuYXZMaXN0OiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIGN1cnJlbnROYXY/OiBzdHJpbmc7XG5cbiAgc2hvd0hlYWRlcnMgPSB0cnVlO1xuXG4gIG5hdiQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMubWVkaWFTZXJ2aWNlXG4gICAgLmNvbnRleHQoJ2Jsb2cnKVxuICAgIC5pbmRleCgpXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKGNvbnRlbnQpID0+IHtcbiAgICAgICAgcmV0dXJuICh0aGlzLm5hdkxpc3QgPSAoY29udGVudCBhcyBhbnkpPy5uYXYpO1xuICAgICAgfSksXG4gICAgKTtcblxuICBicmVhZGNydW1icyQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMucm91dGUudXJsLnBpcGUoXG4gICAgbWFwKChzZWdtZW50cykgPT4ge1xuICAgICAgY29uc3QgYnJlYWRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlKCdhcHBzLmJsb2cuY29tcG9uZW50LmRvY3MuaG9tZS50aXRsZScpLFxuICAgICAgICAgIHVybDogJy9ibG9nJyxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uKHNlZ21lbnRzLmxlbmd0aCA+IDFcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZUNhc2Uoc2VnbWVudHNbMF0ucGF0aC5yZXBsYWNlKC8tL2csICcgJykpLFxuICAgICAgICAgICAgICAgIHVybDogYC8ke3NlZ21lbnRzWzBdfWAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXSksXG4gICAgICAgIC4uLihzZWdtZW50cy5sZW5ndGggPiAyXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGVDYXNlKHNlZ21lbnRzWzFdLnBhdGgucmVwbGFjZSgvLS9nLCAnICcpKSxcbiAgICAgICAgICAgICAgICB1cmw6IGAvJHtzZWdtZW50c1sxXX1gLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW10pLFxuICAgICAgICAuLi4oc2VnbWVudHMubGVuZ3RoID4gM1xuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlQ2FzZShzZWdtZW50c1syXS5wYXRoLnJlcGxhY2UoLy0vZywgJyAnKSksXG4gICAgICAgICAgICAgICAgdXJsOiBgLyR7c2VnbWVudHNbMl19YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdKSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiB0aXRsZUNhc2UoXG4gICAgICAgICAgICBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5wYXRoLnJlcGxhY2UoLy0vZywgJyAnKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHVybDogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIHJldHVybiBicmVhZHM7XG4gICAgfSksXG4gICk7XG5cbiAgZG9jcyQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMucm91dGUucGFyYW1zLnBpcGUoXG4gICAgc3dpdGNoTWFwKChwYXJhbXMpID0+IHtcbiAgICAgIGxldCBuYW1lID0gJyc7XG5cbiAgICAgIGNvbnN0IHN1YjEgPSAodGhpcy5jdXJyZW50TmF2ID0gcGFyYW1zWydzdWIxJ10pO1xuICAgICAgaWYgKHN1YjEpIHtcbiAgICAgICAgdGhpcy5zaG93SGVhZGVycyA9IHN1YjEudG9Mb3dlckNhc2UoKSAhPSAnaW5kZXgnO1xuICAgICAgICBuYW1lICs9IHN1YjE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YjIgPSBwYXJhbXNbJ3N1YjInXTtcbiAgICAgIGlmIChzdWIyKSB7XG4gICAgICAgIHRoaXMuc2hvd0hlYWRlcnMgPSBzdWIyLnRvTG93ZXJDYXNlKCkgIT0gJ2luZGV4JztcbiAgICAgICAgbmFtZSArPSBgLyR7c3ViMn1gO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdWIzID0gcGFyYW1zWydzdWIzJ107XG4gICAgICBpZiAoc3ViMykge1xuICAgICAgICB0aGlzLnNob3dIZWFkZXJzID0gc3ViMy50b0xvd2VyQ2FzZSgpICE9ICdpbmRleCc7XG4gICAgICAgIG5hbWUgKz0gYC8ke3N1YjN9YDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3ViNCA9IHBhcmFtc1snc3ViNCddO1xuICAgICAgaWYgKHN1YjQpIHtcbiAgICAgICAgdGhpcy5zaG93SGVhZGVycyA9IHN1YjQudG9Mb3dlckNhc2UoKSAhPSAnaW5kZXgnO1xuICAgICAgICBuYW1lICs9IGAvJHtzdWI0fWA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YjUgPSBwYXJhbXNbJ3N1YjUnXTtcbiAgICAgIGlmIChzdWI1KSB7XG4gICAgICAgIHRoaXMuc2hvd0hlYWRlcnMgPSBzdWI1LnRvTG93ZXJDYXNlKCkgIT0gJ2luZGV4JztcbiAgICAgICAgbmFtZSArPSBgLyR7c3ViNX1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5tZWRpYVNlcnZpY2UuY29udGV4dCgnYmxvZycpLmFydGljbGUobmFtZSwgdHJ1ZSk7XG4gICAgfSksXG4gICk7XG5cbiAgb25TZWxlY3RDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkVXJsID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XG4gICAgaWYgKHNlbGVjdGVkVXJsKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbc2VsZWN0ZWRVcmxdKTtcbiAgICB9XG4gIH1cblxuICBnZXRMb3dlc3RMZXZlbEhlYWRlcnMoaGVhZGVyczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKGhlYWRlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgICAvLyBGaW5kIHRoZSBsb3dlc3QgbGV2ZWwgaW4gdGhlIGFycmF5XG4gICAgY29uc3QgbWluTGV2ZWwgPSBNYXRoLm1pbiguLi5oZWFkZXJzLm1hcCgoaGVhZGVyKSA9PiBoZWFkZXIubGV2ZWwpKTtcblxuICAgIC8vIEZpbHRlciBoZWFkZXJzIGJ5IHRoZSBsb3dlc3QgbGV2ZWxcbiAgICByZXR1cm4gaGVhZGVycy5maWx0ZXIoKGhlYWRlcikgPT4gaGVhZGVyLmxldmVsID09IG1pbkxldmVsKTtcbiAgfVxufVxuIl19
|