@thecodeblogs/blog 0.11.6 → 0.13.1
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/esm2020/lib/components/entry-creator/entry-creator.component.mjs +347 -0
- package/esm2020/lib/components/entry-renderer/entry-renderer.component.mjs +108 -0
- package/esm2020/lib/components/entry-renderer-wrapper/entry-renderer-wrapper.component.mjs +75 -0
- package/esm2020/lib/components/entry-selector-dialog/entry-selector-dialog-data.mjs +3 -0
- package/esm2020/lib/components/entry-selector-dialog/entry-selector-dialog.component.mjs +45 -0
- package/esm2020/lib/components/entry-summary/entry-summary.component.mjs +28 -0
- package/esm2020/lib/components/json-renderer/json-renderer.component.mjs +26 -0
- package/esm2020/lib/components/landing-page/landing-page.component.mjs +35 -0
- package/esm2020/lib/components/main/main.component.mjs +56 -0
- package/esm2020/lib/components/media-upload-modal/media-upload-modal.component.mjs +160 -0
- package/esm2020/lib/components/outline-view/outline-view.component.mjs +40 -0
- package/esm2020/lib/components/schedule-publish-dialog/schedule-publish-dialog-data.mjs +3 -0
- package/esm2020/lib/components/schedule-publish-dialog/schedule-publish-dialog.component.mjs +33 -0
- package/esm2020/lib/components/side-navigation/side-navigation.component.mjs +151 -0
- package/esm2020/lib/components/static-html/static-html.component.mjs +28 -0
- package/esm2020/lib/core.module.mjs +207 -0
- package/esm2020/lib/data/base.mjs +7 -0
- package/esm2020/lib/data/content-type.mjs +10 -0
- package/esm2020/lib/data/content.mjs +5 -0
- package/esm2020/lib/data/core-event-type.enum.mjs +7 -0
- package/esm2020/lib/data/core-event.mjs +7 -0
- package/esm2020/lib/data/entry.mjs +80 -0
- package/esm2020/lib/data/guid.mjs +12 -0
- package/esm2020/lib/data/identity.mjs +2 -0
- package/esm2020/lib/data/list-response.mjs +3 -0
- package/esm2020/lib/data/section.mjs +11 -0
- package/esm2020/lib/data/tag.mjs +7 -0
- package/esm2020/lib/data/visitor-profile.mjs +3 -0
- package/esm2020/lib/pipes/LinkyPipe.mjs +15 -0
- package/esm2020/lib/pipes/TimeAgoPipe.mjs +100 -0
- package/esm2020/lib/routing/routes.mjs +25 -0
- package/esm2020/lib/services/analytics/interaction.service.mjs +20 -0
- package/esm2020/lib/services/analytics/view.service.mjs +20 -0
- package/esm2020/lib/services/comment.service.mjs +28 -0
- package/esm2020/lib/services/django-rest-framework-endpoint.service.mjs +50 -0
- package/esm2020/lib/services/entry.service.mjs +73 -0
- package/esm2020/lib/services/identity.service.mjs +20 -0
- package/esm2020/lib/services/interaction.mjs +3 -0
- package/esm2020/lib/services/prism.service.mjs +39 -0
- package/esm2020/lib/services/static-html.service.mjs +22 -0
- package/esm2020/lib/services/tag.service.mjs +33 -0
- package/esm2020/lib/services/upload.mjs +3 -0
- package/esm2020/lib/services/upload.service.mjs +22 -0
- package/esm2020/lib/services/view.mjs +3 -0
- package/esm2020/lib/services/visitor-profile.service.mjs +35 -0
- package/esm2020/public-api.mjs +45 -0
- package/esm2020/thecodeblogs-blog.mjs +5 -0
- package/fesm2015/thecodeblogs-blog.mjs +1826 -0
- package/fesm2015/thecodeblogs-blog.mjs.map +1 -0
- package/fesm2020/thecodeblogs-blog.mjs +1820 -0
- package/fesm2020/thecodeblogs-blog.mjs.map +1 -0
- package/lib/components/entry-creator/entry-creator.component.d.ts +3 -0
- package/lib/components/entry-renderer/entry-renderer.component.d.ts +3 -0
- package/lib/components/entry-renderer-wrapper/entry-renderer-wrapper.component.d.ts +3 -0
- package/lib/components/entry-selector-dialog/entry-selector-dialog.component.d.ts +3 -0
- package/lib/components/entry-summary/entry-summary.component.d.ts +3 -0
- package/lib/components/json-renderer/json-renderer.component.d.ts +3 -0
- package/lib/components/landing-page/landing-page.component.d.ts +3 -0
- package/lib/components/main/main.component.d.ts +3 -0
- package/lib/components/media-upload-modal/media-upload-modal.component.d.ts +3 -0
- package/lib/components/outline-view/outline-view.component.d.ts +3 -0
- package/lib/components/schedule-publish-dialog/schedule-publish-dialog.component.d.ts +3 -0
- package/lib/components/side-navigation/side-navigation.component.d.ts +3 -0
- package/lib/components/static-html/static-html.component.d.ts +3 -0
- package/lib/core.module.d.ts +40 -0
- package/lib/pipes/LinkyPipe.d.ts +3 -0
- package/lib/pipes/TimeAgoPipe.d.ts +3 -0
- package/lib/services/analytics/interaction.service.d.ts +3 -0
- package/lib/services/analytics/view.service.d.ts +3 -0
- package/lib/services/comment.service.d.ts +3 -0
- package/lib/services/django-rest-framework-endpoint.service.d.ts +3 -0
- package/lib/services/entry.service.d.ts +3 -0
- package/lib/services/identity.service.d.ts +3 -0
- package/lib/services/prism.service.d.ts +3 -0
- package/lib/services/static-html.service.d.ts +3 -0
- package/lib/services/tag.service.d.ts +3 -0
- package/lib/services/upload.service.d.ts +3 -0
- package/lib/services/visitor-profile.service.d.ts +3 -0
- package/package.json +36 -24
- package/thecodeblogs-blog.d.ts +1 -3
- package/bundles/thecodeblogs-blog.umd.js +0 -2279
- package/bundles/thecodeblogs-blog.umd.js.map +0 -1
- package/bundles/thecodeblogs-blog.umd.min.js +0 -17
- package/bundles/thecodeblogs-blog.umd.min.js.map +0 -1
- package/esm2015/lib/components/entry-creator/entry-creator.component.js +0 -336
- package/esm2015/lib/components/entry-renderer/entry-renderer.component.js +0 -108
- package/esm2015/lib/components/entry-renderer-wrapper/entry-renderer-wrapper.component.js +0 -79
- package/esm2015/lib/components/entry-selector-dialog/entry-selector-dialog-data.js +0 -3
- package/esm2015/lib/components/entry-selector-dialog/entry-selector-dialog.component.js +0 -41
- package/esm2015/lib/components/entry-summary/entry-summary.component.js +0 -29
- package/esm2015/lib/components/json-renderer/json-renderer.component.js +0 -29
- package/esm2015/lib/components/landing-page/landing-page.component.js +0 -37
- package/esm2015/lib/components/main/main.component.js +0 -55
- package/esm2015/lib/components/media-upload-modal/media-upload-modal.component.js +0 -155
- package/esm2015/lib/components/outline-view/outline-view.component.js +0 -40
- package/esm2015/lib/components/schedule-publish-dialog/schedule-publish-dialog-data.js +0 -3
- package/esm2015/lib/components/schedule-publish-dialog/schedule-publish-dialog.component.js +0 -28
- package/esm2015/lib/components/side-navigation/side-navigation.component.js +0 -154
- package/esm2015/lib/components/static-html/static-html.component.js +0 -33
- package/esm2015/lib/core.module.js +0 -125
- package/esm2015/lib/data/base.js +0 -7
- package/esm2015/lib/data/content-type.js +0 -10
- package/esm2015/lib/data/content.js +0 -5
- package/esm2015/lib/data/core-event-type.enum.js +0 -7
- package/esm2015/lib/data/core-event.js +0 -7
- package/esm2015/lib/data/entry.js +0 -80
- package/esm2015/lib/data/guid.js +0 -12
- package/esm2015/lib/data/identity.js +0 -2
- package/esm2015/lib/data/list-response.js +0 -3
- package/esm2015/lib/data/section.js +0 -11
- package/esm2015/lib/data/tag.js +0 -7
- package/esm2015/lib/data/visitor-profile.js +0 -3
- package/esm2015/lib/pipes/LinkyPipe.js +0 -11
- package/esm2015/lib/pipes/TimeAgoPipe.js +0 -100
- package/esm2015/lib/routing/routes.js +0 -25
- package/esm2015/lib/services/analytics/interaction.service.js +0 -22
- package/esm2015/lib/services/analytics/view.service.js +0 -22
- package/esm2015/lib/services/comment.service.js +0 -30
- package/esm2015/lib/services/django-rest-framework-endpoint.service.js +0 -52
- package/esm2015/lib/services/entry.service.js +0 -74
- package/esm2015/lib/services/identity.service.js +0 -22
- package/esm2015/lib/services/interaction.js +0 -3
- package/esm2015/lib/services/prism.service.js +0 -37
- package/esm2015/lib/services/static-html.service.js +0 -24
- package/esm2015/lib/services/tag.service.js +0 -35
- package/esm2015/lib/services/upload.js +0 -3
- package/esm2015/lib/services/upload.service.js +0 -24
- package/esm2015/lib/services/view.js +0 -3
- package/esm2015/lib/services/visitor-profile.service.js +0 -39
- package/esm2015/public-api.js +0 -45
- package/esm2015/thecodeblogs-blog.js +0 -8
- package/fesm2015/thecodeblogs-blog.js +0 -1786
- package/fesm2015/thecodeblogs-blog.js.map +0 -1
- package/thecodeblogs-blog.metadata.json +0 -1
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { Component, HostListener, Input } from '@angular/core';
|
|
2
|
+
import { FileUploader } from 'ng2-file-upload';
|
|
3
|
+
import { UploadService } from '../../services/upload.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/material/dialog";
|
|
6
|
+
import * as i2 from "../../services/upload.service";
|
|
7
|
+
import * as i3 from "@angular/material/divider";
|
|
8
|
+
import * as i4 from "@fortawesome/angular-fontawesome";
|
|
9
|
+
import * as i5 from "@angular/material/button";
|
|
10
|
+
import * as i6 from "@angular/common";
|
|
11
|
+
import * as i7 from "ng2-file-upload";
|
|
12
|
+
export class MediaUploadModalComponent {
|
|
13
|
+
constructor(dialogRef, uploadService) {
|
|
14
|
+
this.dialogRef = dialogRef;
|
|
15
|
+
this.uploadService = uploadService;
|
|
16
|
+
this.allowedMimeTypes = [
|
|
17
|
+
'image/jpeg',
|
|
18
|
+
'image/gif',
|
|
19
|
+
'image/png',
|
|
20
|
+
'image/jpg',
|
|
21
|
+
'video/mp4',
|
|
22
|
+
'video/webm',
|
|
23
|
+
'video/ogg',
|
|
24
|
+
];
|
|
25
|
+
this.uploadUrlKey = 'path_to_file';
|
|
26
|
+
this.uploading = false;
|
|
27
|
+
}
|
|
28
|
+
static getCookie(name) {
|
|
29
|
+
const ca = document.cookie.split(';');
|
|
30
|
+
const caLen = ca.length;
|
|
31
|
+
const cookieName = `${name}=`;
|
|
32
|
+
let c;
|
|
33
|
+
for (let i = 0; i < caLen; i += 1) {
|
|
34
|
+
c = ca[i].replace(/^\s+/g, '');
|
|
35
|
+
if (c.indexOf(cookieName) === 0) {
|
|
36
|
+
return c.substring(cookieName.length, c.length);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return '';
|
|
40
|
+
}
|
|
41
|
+
pollForCompletion() {
|
|
42
|
+
this.uploadService.get(this.uploadId).subscribe((response) => {
|
|
43
|
+
if (response.processed) {
|
|
44
|
+
this.imgLink = response[this.uploadUrlKey];
|
|
45
|
+
this.mimeType = response.mime_type;
|
|
46
|
+
clearInterval(this.poller);
|
|
47
|
+
this.poller = null;
|
|
48
|
+
this.uploading = false;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
ngOnInit() {
|
|
53
|
+
this.uploader = new FileUploader({
|
|
54
|
+
url: UploadService.upload_endpoint,
|
|
55
|
+
itemAlias: 'file',
|
|
56
|
+
authToken: '',
|
|
57
|
+
headers: [
|
|
58
|
+
{ name: 'X-CSRFToken', value: MediaUploadModalComponent.getCookie('csrftoken') },
|
|
59
|
+
],
|
|
60
|
+
additionalParameter: { csrf_token: MediaUploadModalComponent.getCookie('csrftoken') },
|
|
61
|
+
removeAfterUpload: true,
|
|
62
|
+
allowedMimeType: this.allowedMimeTypes,
|
|
63
|
+
});
|
|
64
|
+
this.uploader.onCompleteItem = (item, response) => {
|
|
65
|
+
const responseObj = JSON.parse(response);
|
|
66
|
+
this.uploadId = responseObj.id;
|
|
67
|
+
this.poller = setInterval(this.pollForCompletion.bind(this), 2000);
|
|
68
|
+
};
|
|
69
|
+
this.uploader.onWhenAddingFileFailed = (item, filter, options) => {
|
|
70
|
+
this.error = 'This file is not a supported mimetype.';
|
|
71
|
+
this.uploading = false;
|
|
72
|
+
};
|
|
73
|
+
if (this.file) {
|
|
74
|
+
this.uploader.addToQueue([this.file]);
|
|
75
|
+
this.uploader.uploadAll();
|
|
76
|
+
this.uploading = true;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
onFileSelected(e) {
|
|
80
|
+
this.uploader.uploadAll();
|
|
81
|
+
this.uploading = true;
|
|
82
|
+
}
|
|
83
|
+
buildHost(url) {
|
|
84
|
+
return location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '') + url;
|
|
85
|
+
}
|
|
86
|
+
close() {
|
|
87
|
+
this.dialogRef.close();
|
|
88
|
+
}
|
|
89
|
+
ngOnDestroy() {
|
|
90
|
+
if (this.socketSub) {
|
|
91
|
+
this.socketSub.complete();
|
|
92
|
+
this.socketSub = null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
blobToFile(theBlob, fileName) {
|
|
96
|
+
// A Blob() is almost a File() - it's just missing the two properties below which we will add
|
|
97
|
+
theBlob.lastModifiedDate = new Date();
|
|
98
|
+
theBlob.name = fileName;
|
|
99
|
+
return theBlob;
|
|
100
|
+
}
|
|
101
|
+
onPaste(e) {
|
|
102
|
+
if (e instanceof ClipboardEvent) {
|
|
103
|
+
const files = e.clipboardData.files;
|
|
104
|
+
if (files) {
|
|
105
|
+
if (files.length < 1) {
|
|
106
|
+
// const items = e.clipboardData.items;
|
|
107
|
+
// for(let i = 0; i < items.length; i++) {
|
|
108
|
+
// const item = items[i];
|
|
109
|
+
// item.getAsString((text) => {
|
|
110
|
+
// try {
|
|
111
|
+
// const url = new URL(text);
|
|
112
|
+
// if(url) {
|
|
113
|
+
// fetch(text)
|
|
114
|
+
// .then(res => res.blob()) // Gets the response and returns it as a blob
|
|
115
|
+
// .then(blob => {
|
|
116
|
+
// const file = this.blobToFile(blob, 'web-created')
|
|
117
|
+
// this.uploader.addToQueue([file])
|
|
118
|
+
// this.uploader.uploadAll();
|
|
119
|
+
// this.uploading = true;
|
|
120
|
+
// });
|
|
121
|
+
// }
|
|
122
|
+
// } catch(e) {
|
|
123
|
+
//
|
|
124
|
+
// }
|
|
125
|
+
// });
|
|
126
|
+
// }
|
|
127
|
+
}
|
|
128
|
+
else if (files.length > 1) {
|
|
129
|
+
console.log('Multiple files detected');
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
for (let i = 0; i < files.length; i++) {
|
|
133
|
+
this.uploader.addToQueue([files[i]]);
|
|
134
|
+
}
|
|
135
|
+
this.uploader.uploadAll();
|
|
136
|
+
this.uploading = true;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
console.log('Stuff not working');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
MediaUploadModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MediaUploadModalComponent, deps: [{ token: i1.MatDialogRef }, { token: i2.UploadService }], target: i0.ɵɵFactoryTarget.Component });
|
|
146
|
+
MediaUploadModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: MediaUploadModalComponent, selector: "app-media-upload-modal", inputs: { allowedMimeTypes: "allowedMimeTypes", uploadUrlKey: "uploadUrlKey", file: "file" }, host: { listeners: { "document:paste": "onPaste($event)" } }, ngImport: i0, template: "<h1 mat-dialog-title>Upload an Image</h1>\n<!--<mat-radio-group aria-label=\"Select an option\">-->\n<!-- <mat-radio-button class=\"option\" value=\"unpublished\">Unpublished</mat-radio-button>-->\n<!-- <mat-radio-button class=\"option\" value=\"published\">Published</mat-radio-button>-->\n<!--</mat-radio-group>-->\n<mat-divider class=\"option-list-divider\"></mat-divider>\n<div mat-dialog-content>\n <div *ngIf=\"uploading\">\n <fa-icon [icon]=\"'spinner'\" [spin]=\"true\"></fa-icon>\n </div>\n <ng-container *ngIf=\"!imgLink && !uploading\">\n <h4>Select a File</h4>\n <div class=\"input-group\">\n <div class=\"form-group\">\n <!-- <label for=\"import_file\">Choose File</label>-->\n <input type=\"file\" id=\"import_file\"\n *ngIf=\"uploader.queue.length==0 && !uploading\"\n ng2FileSelect\n [uploader]=\"uploader\"\n (onFileSelected)=\"onFileSelected($event)\"\n >\n </div>\n </div>\n <br>\n <h3>Paste a File</h3>\n <p>You can use the paste command to paste any image here</p>\n </ng-container>\n <div *ngIf=\"imgLink\">\n <img *ngIf=\"imgLink\" [src]=\"imgLink\"/>\n </div>\n <div *ngIf=\"error\">\n <div class=\"alert alert-danger\">\n {{error}}\n </div>\n </div>\n</div>\n<div mat-dialog-actions>\n <button mat-button [disabled]=\"!imgLink || uploading\" (click)=\"close()\">Attach</button>\n</div>\n", styles: [""], components: [{ type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.FileSelectDirective, selector: "[ng2FileSelect]", inputs: ["uploader"], outputs: ["onFileSelected"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }] });
|
|
147
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MediaUploadModalComponent, decorators: [{
|
|
148
|
+
type: Component,
|
|
149
|
+
args: [{ selector: 'app-media-upload-modal', template: "<h1 mat-dialog-title>Upload an Image</h1>\n<!--<mat-radio-group aria-label=\"Select an option\">-->\n<!-- <mat-radio-button class=\"option\" value=\"unpublished\">Unpublished</mat-radio-button>-->\n<!-- <mat-radio-button class=\"option\" value=\"published\">Published</mat-radio-button>-->\n<!--</mat-radio-group>-->\n<mat-divider class=\"option-list-divider\"></mat-divider>\n<div mat-dialog-content>\n <div *ngIf=\"uploading\">\n <fa-icon [icon]=\"'spinner'\" [spin]=\"true\"></fa-icon>\n </div>\n <ng-container *ngIf=\"!imgLink && !uploading\">\n <h4>Select a File</h4>\n <div class=\"input-group\">\n <div class=\"form-group\">\n <!-- <label for=\"import_file\">Choose File</label>-->\n <input type=\"file\" id=\"import_file\"\n *ngIf=\"uploader.queue.length==0 && !uploading\"\n ng2FileSelect\n [uploader]=\"uploader\"\n (onFileSelected)=\"onFileSelected($event)\"\n >\n </div>\n </div>\n <br>\n <h3>Paste a File</h3>\n <p>You can use the paste command to paste any image here</p>\n </ng-container>\n <div *ngIf=\"imgLink\">\n <img *ngIf=\"imgLink\" [src]=\"imgLink\"/>\n </div>\n <div *ngIf=\"error\">\n <div class=\"alert alert-danger\">\n {{error}}\n </div>\n </div>\n</div>\n<div mat-dialog-actions>\n <button mat-button [disabled]=\"!imgLink || uploading\" (click)=\"close()\">Attach</button>\n</div>\n", styles: [""] }]
|
|
150
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: i2.UploadService }]; }, propDecorators: { allowedMimeTypes: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], uploadUrlKey: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], file: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], onPaste: [{
|
|
157
|
+
type: HostListener,
|
|
158
|
+
args: ['document:paste', ['$event']]
|
|
159
|
+
}] } });
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtdXBsb2FkLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9jb21wb25lbnRzL21lZGlhLXVwbG9hZC1tb2RhbC9tZWRpYS11cGxvYWQtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2NvbXBvbmVudHMvbWVkaWEtdXBsb2FkLW1vZGFsL21lZGlhLXVwbG9hZC1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUk3QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7OztBQU81RCxNQUFNLE9BQU8seUJBQXlCO0lBd0NsQyxZQUNXLFNBQWtELEVBQ2pELGFBQTRCO1FBRDdCLGNBQVMsR0FBVCxTQUFTLENBQXlDO1FBQ2pELGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBeEMvQixxQkFBZ0IsR0FBRztZQUNoQixZQUFZO1lBQ1osV0FBVztZQUNYLFdBQVc7WUFDWCxXQUFXO1lBQ1gsV0FBVztZQUNYLFlBQVk7WUFDWixXQUFXO1NBQ3RCLENBQUM7UUFFTyxpQkFBWSxHQUFHLGNBQWMsQ0FBQztRQVF2QyxjQUFTLEdBQUcsS0FBSyxDQUFDO0lBd0JsQixDQUFDO0lBbkJELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBWTtRQUN6QixNQUFNLEVBQUUsR0FBa0IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsTUFBTSxLQUFLLEdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNoQyxNQUFNLFVBQVUsR0FB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RkFBNkY7b0JBQzdGLHNDQUFzQztvQkFDdEMsNEVBQTRFO29CQUM1RSwyREFBMkQ7b0JBQzNELHFEQUFxRDtvQkFDckQsaURBQWlEO29CQUNqRCwwQkFBMEI7b0JBQzFCLGdCQUFnQjtvQkFDaEIsdUJBQXVCO29CQUN2QixFQUFFO29CQUNGLFlBQVk7b0JBQ1osVUFBVTtvQkFDVixJQUFJO2lCQUNQO3FCQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztpQkFDMUM7cUJBQU07b0JBQ0gsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDeEM7b0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7aUJBQ3pCO2FBQ0o7aUJBQU07Z0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ3BDO1NBQ0o7SUFDTCxDQUFDOztzSEFqS1EseUJBQXlCOzBHQUF6Qix5QkFBeUIsME5DWnRDLDhqREF1Q0E7MkZEM0JhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDSSx3QkFBd0I7K0hBTXpCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFVRyxZQUFZO3NCQUFwQixLQUFLO2dCQVNHLElBQUk7c0JBQVosS0FBSztnQkFxR04sT0FBTztzQkFETixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RmlsZVVwbG9hZGVyfSBmcm9tICduZzItZmlsZS11cGxvYWQnO1xuaW1wb3J0IHtNYXREaWFsb2dSZWZ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7RGphbmdvUmVzdEZyYW1ld29ya0VuZHBvaW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGphbmdvLXJlc3QtZnJhbWV3b3JrLWVuZHBvaW50LnNlcnZpY2UnO1xuaW1wb3J0IHtVcGxvYWRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91cGxvYWQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLW1lZGlhLXVwbG9hZC1tb2RhbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL21lZGlhLXVwbG9hZC1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbWVkaWEtdXBsb2FkLW1vZGFsLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNZWRpYVVwbG9hZE1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgYWxsb3dlZE1pbWVUeXBlcyA9IFtcbiAgICAgICAgICAgICAgICAnaW1hZ2UvanBlZycsXG4gICAgICAgICAgICAgICAgJ2ltYWdlL2dpZicsXG4gICAgICAgICAgICAgICAgJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICAgICAgJ2ltYWdlL2pwZycsXG4gICAgICAgICAgICAgICAgJ3ZpZGVvL21wNCcsXG4gICAgICAgICAgICAgICAgJ3ZpZGVvL3dlYm0nLFxuICAgICAgICAgICAgICAgICd2aWRlby9vZ2cnLFxuICAgIF07XG5cbiAgICBASW5wdXQoKSB1cGxvYWRVcmxLZXkgPSAncGF0aF90b19maWxlJztcblxuICAgIGltZ0xpbms7XG4gICAgbWltZVR5cGU7XG4gICAgc29ja2V0U3ViO1xuICAgIGVycm9yO1xuICAgIHB1YmxpYyB1cGxvYWRlcjogRmlsZVVwbG9hZGVyO1xuICAgIHVwbG9hZElkO1xuICAgIHVwbG9hZGluZyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGZpbGU7XG5cbiAgICBwb2xsZXI7XG5cbiAgICBzdGF0aWMgZ2V0Q29va2llKG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBjYTogQXJyYXk8c3RyaW5nPiA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuICAgICAgICBjb25zdCBjYUxlbjogbnVtYmVyID0gY2EubGVuZ3RoO1xuICAgICAgICBjb25zdCBjb29raWVOYW1lID0gYCR7bmFtZX09YDtcbiAgICAgICAgbGV0IGM6IHN0cmluZztcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhTGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGMgPSBjYVtpXS5yZXBsYWNlKC9eXFxzKy9nLCAnJyk7XG4gICAgICAgICAgICBpZiAoYy5pbmRleE9mKGNvb2tpZU5hbWUpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuc3Vic3RyaW5nKGNvb2tpZU5hbWUubGVuZ3RoLCBjLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8TWVkaWFVcGxvYWRNb2RhbENvbXBvbmVudD4sXG4gICAgICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogVXBsb2FkU2VydmljZVxuICAgICkge1xuICAgIH1cblxuXG4gICAgcG9sbEZvckNvbXBsZXRpb24oKSB7XG4gICAgICAgIHRoaXMudXBsb2FkU2VydmljZS5nZXQodGhpcy51cGxvYWRJZCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnByb2Nlc3NlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1nTGluayA9IHJlc3BvbnNlW3RoaXMudXBsb2FkVXJsS2V5XTtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbWVUeXBlID0gcmVzcG9uc2UubWltZV90eXBlO1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5wb2xsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9sbGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gICAgICAgIHRoaXMudXBsb2FkZXIgPSBuZXcgRmlsZVVwbG9hZGVyKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVybDogVXBsb2FkU2VydmljZS51cGxvYWRfZW5kcG9pbnQsXG4gICAgICAgICAgICAgICAgaXRlbUFsaWFzOiAnZmlsZScsXG4gICAgICAgICAgICAgICAgYXV0aFRva2VuOiAnJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtuYW1lOiAnWC1DU1JGVG9rZW4nLCB2YWx1ZTogTWVkaWFVcGxvYWRNb2RhbENvbXBvbmVudC5nZXRDb29raWUoJ2NzcmZ0b2tlbicpfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQYXJhbWV0ZXI6IHtjc3JmX3Rva2VuOiBNZWRpYVVwbG9hZE1vZGFsQ29tcG9uZW50LmdldENvb2tpZSgnY3NyZnRva2VuJyl9LFxuICAgICAgICAgICAgICAgIHJlbW92ZUFmdGVyVXBsb2FkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGFsbG93ZWRNaW1lVHlwZTogdGhpcy5hbGxvd2VkTWltZVR5cGVzLFxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMudXBsb2FkZXIub25Db21wbGV0ZUl0ZW0gPSAoaXRlbSwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlT2JqID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZElkID0gcmVzcG9uc2VPYmouaWQ7XG4gICAgICAgICAgICB0aGlzLnBvbGxlciA9IHNldEludGVydmFsKHRoaXMucG9sbEZvckNvbXBsZXRpb24uYmluZCh0aGlzKSwgMjAwMCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy51cGxvYWRlci5vbldoZW5BZGRpbmdGaWxlRmFpbGVkID0gKGl0ZW0sIGZpbHRlciwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy5lcnJvciA9ICdUaGlzIGZpbGUgaXMgbm90IGEgc3VwcG9ydGVkIG1pbWV0eXBlLic7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkZXIuYWRkVG9RdWV1ZShbdGhpcy5maWxlXSk7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVyLnVwbG9hZEFsbCgpO1xuICAgICAgICAgICAgdGhpcy51cGxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25GaWxlU2VsZWN0ZWQoZSkge1xuICAgICAgICB0aGlzLnVwbG9hZGVyLnVwbG9hZEFsbCgpO1xuICAgICAgICB0aGlzLnVwbG9hZGluZyA9IHRydWU7XG4gICAgfVxuXG4gICAgYnVpbGRIb3N0KHVybCkge1xuICAgICAgICByZXR1cm4gbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgbG9jYXRpb24uaG9zdG5hbWUgKyAobG9jYXRpb24ucG9ydCA/ICc6JyArIGxvY2F0aW9uLnBvcnQgOiAnJykgKyB1cmw7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNvY2tldFN1Yikge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXRTdWIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0U3ViID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJsb2JUb0ZpbGUodGhlQmxvYiwgZmlsZU5hbWUpIHtcbiAgICAgICAgLy8gQSBCbG9iKCkgaXMgYWxtb3N0IGEgRmlsZSgpIC0gaXQncyBqdXN0IG1pc3NpbmcgdGhlIHR3byBwcm9wZXJ0aWVzIGJlbG93IHdoaWNoIHdlIHdpbGwgYWRkXG4gICAgICAgIHRoZUJsb2IubGFzdE1vZGlmaWVkRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoZUJsb2IubmFtZSA9IGZpbGVOYW1lO1xuICAgICAgICByZXR1cm4gdGhlQmxvYjtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpwYXN0ZScsIFsnJGV2ZW50J10pXG4gICAgb25QYXN0ZShlKSB7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gZS5jbGlwYm9hcmREYXRhLmZpbGVzO1xuICAgICAgICAgICAgaWYgKGZpbGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgaXRlbXMgPSBlLmNsaXBib2FyZERhdGEuaXRlbXM7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcihsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgaXRlbS5nZXRBc1N0cmluZygodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGlmKHVybCkge1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgZmV0Y2godGV4dClcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4gcmVzLmJsb2IoKSkgLy8gR2V0cyB0aGUgcmVzcG9uc2UgYW5kIHJldHVybnMgaXQgYXMgYSBibG9iXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYmxvYiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLmJsb2JUb0ZpbGUoYmxvYiwgJ3dlYi1jcmVhdGVkJylcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlci5hZGRUb1F1ZXVlKFtmaWxlXSlcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlci51cGxvYWRBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ011bHRpcGxlIGZpbGVzIGRldGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlci5hZGRUb1F1ZXVlKFtmaWxlc1tpXV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZXIudXBsb2FkQWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdHVmZiBub3Qgd29ya2luZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGgxIG1hdC1kaWFsb2ctdGl0bGU+VXBsb2FkIGFuIEltYWdlPC9oMT5cbjwhLS08bWF0LXJhZGlvLWdyb3VwIGFyaWEtbGFiZWw9XCJTZWxlY3QgYW4gb3B0aW9uXCI+LS0+XG48IS0tICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwib3B0aW9uXCIgdmFsdWU9XCJ1bnB1Ymxpc2hlZFwiPlVucHVibGlzaGVkPC9tYXQtcmFkaW8tYnV0dG9uPi0tPlxuPCEtLSAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cIm9wdGlvblwiIHZhbHVlPVwicHVibGlzaGVkXCI+UHVibGlzaGVkPC9tYXQtcmFkaW8tYnV0dG9uPi0tPlxuPCEtLTwvbWF0LXJhZGlvLWdyb3VwPi0tPlxuPG1hdC1kaXZpZGVyIGNsYXNzPVwib3B0aW9uLWxpc3QtZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2ICpuZ0lmPVwidXBsb2FkaW5nXCI+XG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cIidzcGlubmVyJ1wiIFtzcGluXT1cInRydWVcIj48L2ZhLWljb24+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbWdMaW5rICYmICF1cGxvYWRpbmdcIj5cbiAgICAgICAgPGg0PlNlbGVjdCBhIEZpbGU8L2g0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiaW1wb3J0X2ZpbGVcIj5DaG9vc2UgRmlsZTwvbGFiZWw+LS0+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJpbXBvcnRfZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidXBsb2FkZXIucXVldWUubGVuZ3RoPT0wICYmICF1cGxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICBuZzJGaWxlU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgIFt1cGxvYWRlcl09XCJ1cGxvYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgIChvbkZpbGVTZWxlY3RlZCk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxicj5cbiAgICAgICAgPGgzPlBhc3RlIGEgRmlsZTwvaDM+XG4gICAgICAgIDxwPllvdSBjYW4gdXNlIHRoZSBwYXN0ZSBjb21tYW5kIHRvIHBhc3RlIGFueSBpbWFnZSBoZXJlPC9wPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgKm5nSWY9XCJpbWdMaW5rXCI+XG4gICAgICAgIDxpbWcgKm5nSWY9XCJpbWdMaW5rXCIgW3NyY109XCJpbWdMaW5rXCIvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJlcnJvclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCI+XG4gICAgICAgICAgICB7e2Vycm9yfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbZGlzYWJsZWRdPVwiIWltZ0xpbmsgfHwgdXBsb2FkaW5nXCIgKGNsaWNrKT1cImNsb3NlKClcIj5BdHRhY2g8L2J1dHRvbj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { Entry } from '../../data/entry';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../services/entry.service";
|
|
5
|
+
import * as i2 from "@angular/material/card";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
7
|
+
import * as i4 from "@angular/cdk/drag-drop";
|
|
8
|
+
export class OutlineViewComponent {
|
|
9
|
+
constructor(entryService) {
|
|
10
|
+
this.entryService = entryService;
|
|
11
|
+
this.entry = new Entry();
|
|
12
|
+
this.Math = Math;
|
|
13
|
+
}
|
|
14
|
+
ngOnInit() {
|
|
15
|
+
this.entryService.currentlyEditedEntry.subscribe((entry) => {
|
|
16
|
+
this.entry = entry;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
sectionDrop(e) {
|
|
20
|
+
const entry = this.entry;
|
|
21
|
+
const diff = e.currentIndex - e.previousIndex;
|
|
22
|
+
entry.sections[e.previousIndex].order = e.currentIndex * 10 + (diff > 0 ? 1 : -1);
|
|
23
|
+
entry.sort();
|
|
24
|
+
this.entryService.currentlyEditedEntry.next(this.entry);
|
|
25
|
+
}
|
|
26
|
+
contentDrop(e, section) {
|
|
27
|
+
const entry = this.entry;
|
|
28
|
+
const diff = e.currentIndex - e.previousIndex;
|
|
29
|
+
section.contents[e.previousIndex].order = e.currentIndex * 10 + (diff > 0 ? 1 : -1);
|
|
30
|
+
entry.sort();
|
|
31
|
+
this.entryService.currentlyEditedEntry.next(this.entry);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
OutlineViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: OutlineViewComponent, deps: [{ token: i1.EntryService }], target: i0.ɵɵFactoryTarget.Component });
|
|
35
|
+
OutlineViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: OutlineViewComponent, selector: "app-outline-view", ngImport: i0, template: "<div class=\"section outline\">\n <h1 *ngIf=\"entry?.sections?.length === 0\">Outline View</h1>\n <div cdkDropList class=\"sections\" (cdkDropListDropped)=\"sectionDrop($event)\">\n <mat-card class=\"card\" cdkDrag *ngFor=\"let section of entry.sections\">\n <h3>Section {{Math.ceil(section.order / 10) + 1}}</h3>\n {{section.subheading}}\n <div cdkDropList class=\"contents\" (cdkDropListDropped)=\"contentDrop($event, section)\">\n <h3>Contents for {{section.subheading}}</h3>\n <div class=\"content-card\" *ngFor=\"let content of section.contents\" cdkDrag>\n <div class=\"content\">{{content.value}}</div>\n <div class=\"content-placeholder\" *cdkDragPlaceholder></div>\n </div>\n </div>\n </mat-card>\n <div class=\"custom-placeholder\" *cdkDragPlaceholder></div>\n </div>\n</div>\n", styles: [".outline{padding:0 20px}.content{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.card,.content-card{margin:4px;cursor:pointer}.content-card:not(:last-child){border-bottom:1px dotted #aaa}.custom-placeholder{background:#ccc;border:dotted 3px #999;transition:transform .25s cubic-bezier(0,0,.2,1);min-height:60px}.content-placeholder{background:#ccc;border:dotted 3px #999;transition:transform .25s cubic-bezier(0,0,.2,1);min-height:30px}\n"], components: [{ type: i2.MatCard, selector: "mat-card", exportAs: ["matCard"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i4.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }] });
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: OutlineViewComponent, decorators: [{
|
|
37
|
+
type: Component,
|
|
38
|
+
args: [{ selector: 'app-outline-view', template: "<div class=\"section outline\">\n <h1 *ngIf=\"entry?.sections?.length === 0\">Outline View</h1>\n <div cdkDropList class=\"sections\" (cdkDropListDropped)=\"sectionDrop($event)\">\n <mat-card class=\"card\" cdkDrag *ngFor=\"let section of entry.sections\">\n <h3>Section {{Math.ceil(section.order / 10) + 1}}</h3>\n {{section.subheading}}\n <div cdkDropList class=\"contents\" (cdkDropListDropped)=\"contentDrop($event, section)\">\n <h3>Contents for {{section.subheading}}</h3>\n <div class=\"content-card\" *ngFor=\"let content of section.contents\" cdkDrag>\n <div class=\"content\">{{content.value}}</div>\n <div class=\"content-placeholder\" *cdkDragPlaceholder></div>\n </div>\n </div>\n </mat-card>\n <div class=\"custom-placeholder\" *cdkDragPlaceholder></div>\n </div>\n</div>\n", styles: [".outline{padding:0 20px}.content{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.card,.content-card{margin:4px;cursor:pointer}.content-card:not(:last-child){border-bottom:1px dotted #aaa}.custom-placeholder{background:#ccc;border:dotted 3px #999;transition:transform .25s cubic-bezier(0,0,.2,1);min-height:60px}.content-placeholder{background:#ccc;border:dotted 3px #999;transition:transform .25s cubic-bezier(0,0,.2,1);min-height:30px}\n"] }]
|
|
39
|
+
}], ctorParameters: function () { return [{ type: i1.EntryService }]; } });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0bGluZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9jb21wb25lbnRzL291dGxpbmUtdmlldy9vdXRsaW5lLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2NvbXBvbmVudHMvb3V0bGluZS12aWV3L291dGxpbmUtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQVF2QyxNQUFNLE9BQU8sb0JBQW9CO0lBSzdCLFlBQ1ksWUFBMEI7UUFBMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFKdEMsVUFBSyxHQUFVLElBQUksS0FBSyxFQUFFLENBQUM7UUFDM0IsU0FBSSxHQUFHLElBQUksQ0FBQztJQUtaLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXLENBQUMsQ0FBQztRQUNULE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQzlDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELFdBQVcsQ0FBQyxDQUFDLEVBQUUsT0FBTztRQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUM5QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEYsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7O2lIQTlCUSxvQkFBb0I7cUdBQXBCLG9CQUFvQix3RENWakMsazdCQWlCQTsyRkRQYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0ksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0VudHJ5fSBmcm9tICcuLi8uLi9kYXRhL2VudHJ5JztcbmltcG9ydCB7RW50cnlTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRyeS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtb3V0bGluZS12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vb3V0bGluZS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9vdXRsaW5lLXZpZXcuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBPdXRsaW5lVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBlbnRyeTogRW50cnkgPSBuZXcgRW50cnkoKTtcbiAgICBNYXRoID0gTWF0aDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVudHJ5U2VydmljZTogRW50cnlTZXJ2aWNlXG4gICAgKSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZW50cnlTZXJ2aWNlLmN1cnJlbnRseUVkaXRlZEVudHJ5LnN1YnNjcmliZSgoZW50cnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW50cnkgPSBlbnRyeTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2VjdGlvbkRyb3AoZSkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuZW50cnk7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBlLmN1cnJlbnRJbmRleCAtIGUucHJldmlvdXNJbmRleDtcbiAgICAgICAgZW50cnkuc2VjdGlvbnNbZS5wcmV2aW91c0luZGV4XS5vcmRlciA9IGUuY3VycmVudEluZGV4ICogMTAgKyAoZGlmZiA+IDAgPyAxIDogLTEpO1xuICAgICAgICBlbnRyeS5zb3J0KCk7XG4gICAgICAgIHRoaXMuZW50cnlTZXJ2aWNlLmN1cnJlbnRseUVkaXRlZEVudHJ5Lm5leHQodGhpcy5lbnRyeSk7XG4gICAgfVxuXG4gICAgY29udGVudERyb3AoZSwgc2VjdGlvbikge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuZW50cnk7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBlLmN1cnJlbnRJbmRleCAtIGUucHJldmlvdXNJbmRleDtcbiAgICAgICAgc2VjdGlvbi5jb250ZW50c1tlLnByZXZpb3VzSW5kZXhdLm9yZGVyID0gZS5jdXJyZW50SW5kZXggKiAxMCArIChkaWZmID4gMCA/IDEgOiAtMSk7XG4gICAgICAgIGVudHJ5LnNvcnQoKTtcbiAgICAgICAgdGhpcy5lbnRyeVNlcnZpY2UuY3VycmVudGx5RWRpdGVkRW50cnkubmV4dCh0aGlzLmVudHJ5KTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2VjdGlvbiBvdXRsaW5lXCI+XG4gICAgPGgxICpuZ0lmPVwiZW50cnk/LnNlY3Rpb25zPy5sZW5ndGggPT09IDBcIj5PdXRsaW5lIFZpZXc8L2gxPlxuICAgIDxkaXYgY2RrRHJvcExpc3QgY2xhc3M9XCJzZWN0aW9uc1wiIChjZGtEcm9wTGlzdERyb3BwZWQpPVwic2VjdGlvbkRyb3AoJGV2ZW50KVwiPlxuICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJjYXJkXCIgY2RrRHJhZyAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBlbnRyeS5zZWN0aW9uc1wiPlxuICAgICAgICAgICAgPGgzPlNlY3Rpb24ge3tNYXRoLmNlaWwoc2VjdGlvbi5vcmRlciAvIDEwKSArIDF9fTwvaDM+XG4gICAgICAgICAgICB7e3NlY3Rpb24uc3ViaGVhZGluZ319XG4gICAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IGNsYXNzPVwiY29udGVudHNcIiAoY2RrRHJvcExpc3REcm9wcGVkKT1cImNvbnRlbnREcm9wKCRldmVudCwgc2VjdGlvbilcIj5cbiAgICAgICAgICAgICAgICA8aDM+Q29udGVudHMgZm9yIHt7c2VjdGlvbi5zdWJoZWFkaW5nfX08L2gzPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWNhcmRcIiAqbmdGb3I9XCJsZXQgY29udGVudCBvZiBzZWN0aW9uLmNvbnRlbnRzXCIgY2RrRHJhZz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj57e2NvbnRlbnQudmFsdWV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1wbGFjZWhvbGRlclwiICpjZGtEcmFnUGxhY2Vob2xkZXI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtY2FyZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1wbGFjZWhvbGRlclwiICpjZGtEcmFnUGxhY2Vob2xkZXI+PC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export class SchedulePublishDialogData {
|
|
2
|
+
}
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUtcHVibGlzaC1kaWFsb2ctZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlLXB1Ymxpc2gtZGlhbG9nL3NjaGVkdWxlLXB1Ymxpc2gtZGlhbG9nLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLHlCQUF5QjtDQUNyQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBTY2hlZHVsZVB1Ymxpc2hEaWFsb2dEYXRhIHtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/material/dialog";
|
|
5
|
+
import * as i2 from "@angular/material/form-field";
|
|
6
|
+
import * as i3 from "@angular/material/datepicker";
|
|
7
|
+
import * as i4 from "ngx-material-timepicker";
|
|
8
|
+
import * as i5 from "@angular/material/button";
|
|
9
|
+
import * as i6 from "@angular/material/input";
|
|
10
|
+
import * as i7 from "./schedule-publish-dialog-data";
|
|
11
|
+
export class SchedulePublishDialogComponent {
|
|
12
|
+
constructor(dialogRef, data) {
|
|
13
|
+
this.dialogRef = dialogRef;
|
|
14
|
+
this.data = data;
|
|
15
|
+
}
|
|
16
|
+
ngOnInit() {
|
|
17
|
+
}
|
|
18
|
+
onNoClick() {
|
|
19
|
+
}
|
|
20
|
+
onYesClick() {
|
|
21
|
+
this.dialogRef.close('test');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
SchedulePublishDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: SchedulePublishDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
25
|
+
SchedulePublishDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: SchedulePublishDialogComponent, selector: "lib-schedule-publish-dialog", ngImport: i0, template: "<h1 mat-dialog-title>Select a Date and Time to Schedule This Post</h1>\n<!--<mat-radio-group aria-label=\"Select an option\">-->\n<!-- <mat-radio-button class=\"option\" value=\"unpublished\">Unpublished</mat-radio-button>-->\n<!-- <mat-radio-button class=\"option\" value=\"published\">Published</mat-radio-button>-->\n<!--</mat-radio-group>-->\n<p>Date</p>\n<mat-form-field appearance=\"fill\">\n <mat-label>Choose a date</mat-label>\n <input matInput [matDatepicker]=\"picker\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n</mat-form-field>\n<p>Time</p>\n<input [ngxTimepicker]=\"timepicker\" readonly>\n<ngx-material-timepicker #timepicker></ngx-material-timepicker>\n<div mat-dialog-actions>\n <button mat-button (click)=\"onNoClick()\">Cancel</button>\n <button mat-button (click)=\"onYesClick()\" cdkFocusInitial>Schedule Publish</button>\n</div>\n", styles: [""], components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i3.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { type: i4.NgxMaterialTimepickerComponent, selector: "ngx-material-timepicker", inputs: ["ESC", "hoursOnly", "ngxMaterialTimepickerTheme", "format", "minutesGap", "cancelBtnTmpl", "editableHintTmpl", "confirmBtnTmpl", "enableKeyboardInput", "preventOverlayClick", "disableAnimation", "appendToInput", "defaultTime", "timepickerClass", "theme", "min", "max"], outputs: ["timeSet", "opened", "closed", "hourSelected", "timeChanged"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2.MatLabel, selector: "mat-label" }, { type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i3.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i2.MatSuffix, selector: "[matSuffix]" }, { type: i4.TimepickerDirective, selector: "[ngxTimepicker]", inputs: ["format", "value", "min", "max", "ngxTimepicker", "disabled", "disableClick"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }] });
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: SchedulePublishDialogComponent, decorators: [{
|
|
27
|
+
type: Component,
|
|
28
|
+
args: [{ selector: 'lib-schedule-publish-dialog', template: "<h1 mat-dialog-title>Select a Date and Time to Schedule This Post</h1>\n<!--<mat-radio-group aria-label=\"Select an option\">-->\n<!-- <mat-radio-button class=\"option\" value=\"unpublished\">Unpublished</mat-radio-button>-->\n<!-- <mat-radio-button class=\"option\" value=\"published\">Published</mat-radio-button>-->\n<!--</mat-radio-group>-->\n<p>Date</p>\n<mat-form-field appearance=\"fill\">\n <mat-label>Choose a date</mat-label>\n <input matInput [matDatepicker]=\"picker\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n</mat-form-field>\n<p>Time</p>\n<input [ngxTimepicker]=\"timepicker\" readonly>\n<ngx-material-timepicker #timepicker></ngx-material-timepicker>\n<div mat-dialog-actions>\n <button mat-button (click)=\"onNoClick()\">Cancel</button>\n <button mat-button (click)=\"onYesClick()\" cdkFocusInitial>Schedule Publish</button>\n</div>\n", styles: [""] }]
|
|
29
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: i7.SchedulePublishDialogData, decorators: [{
|
|
30
|
+
type: Inject,
|
|
31
|
+
args: [MAT_DIALOG_DATA]
|
|
32
|
+
}] }]; } });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUtcHVibGlzaC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2NvbXBvbmVudHMvc2NoZWR1bGUtcHVibGlzaC1kaWFsb2cvc2NoZWR1bGUtcHVibGlzaC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2NvbXBvbmVudHMvc2NoZWR1bGUtcHVibGlzaC1kaWFsb2cvc2NoZWR1bGUtcHVibGlzaC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFlLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7QUFRdkUsTUFBTSxPQUFPLDhCQUE4QjtJQUV2QyxZQUNXLFNBQXVELEVBQzlCLElBQStCO1FBRHhELGNBQVMsR0FBVCxTQUFTLENBQThDO1FBQzlCLFNBQUksR0FBSixJQUFJLENBQTJCO0lBQy9ELENBQUM7SUFFTCxRQUFRO0lBQ1IsQ0FBQztJQUVELFNBQVM7SUFDVCxDQUFDO0lBRUQsVUFBVTtRQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7OzJIQWZRLDhCQUE4Qiw4Q0FJM0IsZUFBZTsrR0FKbEIsOEJBQThCLG1FQ1QzQyx1N0JBbUJBOzJGRFZhLDhCQUE4QjtrQkFMMUMsU0FBUzsrQkFDSSw2QkFBNkI7OzBCQVFsQyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtTY2hlZHVsZVB1Ymxpc2hEaWFsb2dEYXRhfSBmcm9tICcuL3NjaGVkdWxlLXB1Ymxpc2gtZGlhbG9nLWRhdGEnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1zY2hlZHVsZS1wdWJsaXNoLWRpYWxvZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlLXB1Ymxpc2gtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zY2hlZHVsZS1wdWJsaXNoLWRpYWxvZy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2NoZWR1bGVQdWJsaXNoRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8U2NoZWR1bGVQdWJsaXNoRGlhbG9nQ29tcG9uZW50PixcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBTY2hlZHVsZVB1Ymxpc2hEaWFsb2dEYXRhLFxuICAgICkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB9XG5cbiAgICBvbk5vQ2xpY2soKTogdm9pZCB7XG4gICAgfVxuXG4gICAgb25ZZXNDbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3Rlc3QnKTtcbiAgICB9XG59XG4iLCI8aDEgbWF0LWRpYWxvZy10aXRsZT5TZWxlY3QgYSBEYXRlIGFuZCBUaW1lIHRvIFNjaGVkdWxlIFRoaXMgUG9zdDwvaDE+XG48IS0tPG1hdC1yYWRpby1ncm91cCBhcmlhLWxhYmVsPVwiU2VsZWN0IGFuIG9wdGlvblwiPi0tPlxuPCEtLSAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cIm9wdGlvblwiIHZhbHVlPVwidW5wdWJsaXNoZWRcIj5VbnB1Ymxpc2hlZDwvbWF0LXJhZGlvLWJ1dHRvbj4tLT5cbjwhLS0gICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJvcHRpb25cIiB2YWx1ZT1cInB1Ymxpc2hlZFwiPlB1Ymxpc2hlZDwvbWF0LXJhZGlvLWJ1dHRvbj4tLT5cbjwhLS08L21hdC1yYWRpby1ncm91cD4tLT5cbjxwPkRhdGU8L3A+XG48bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIj5cbiAgPG1hdC1sYWJlbD5DaG9vc2UgYSBkYXRlPC9tYXQtbGFiZWw+XG4gIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIj5cbiAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbjwvbWF0LWZvcm0tZmllbGQ+XG48cD5UaW1lPC9wPlxuPGlucHV0IFtuZ3hUaW1lcGlja2VyXT1cInRpbWVwaWNrZXJcIiByZWFkb25seT5cbjxuZ3gtbWF0ZXJpYWwtdGltZXBpY2tlciAjdGltZXBpY2tlcj48L25neC1tYXRlcmlhbC10aW1lcGlja2VyPlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJvbk5vQ2xpY2soKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwib25ZZXNDbGljaygpXCIgY2RrRm9jdXNJbml0aWFsPlNjaGVkdWxlIFB1Ymxpc2g8L2J1dHRvbj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { filter } from 'lodash';
|
|
3
|
+
import { map } from 'lodash';
|
|
4
|
+
import { Entry } from '../../data/entry';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../services/entry.service";
|
|
7
|
+
import * as i2 from "@angular/router";
|
|
8
|
+
import * as i3 from "../../services/identity.service";
|
|
9
|
+
import * as i4 from "@angular/material/list";
|
|
10
|
+
import * as i5 from "@angular/common";
|
|
11
|
+
export class SideNavigationComponent {
|
|
12
|
+
constructor(entryService, router, identityService) {
|
|
13
|
+
this.entryService = entryService;
|
|
14
|
+
this.router = router;
|
|
15
|
+
this.identityService = identityService;
|
|
16
|
+
this.entries = [];
|
|
17
|
+
this.entriesByMonthAndYear = [];
|
|
18
|
+
}
|
|
19
|
+
ngOnInit() {
|
|
20
|
+
this.identityService.getMe().subscribe((identity) => {
|
|
21
|
+
this.identity = identity;
|
|
22
|
+
}, (err) => {
|
|
23
|
+
this.identity = null;
|
|
24
|
+
});
|
|
25
|
+
this.getEntries();
|
|
26
|
+
}
|
|
27
|
+
getEntriesWithUrl(url) {
|
|
28
|
+
this.entryService.getListByUrl(url).subscribe((response) => {
|
|
29
|
+
this.entries = this.entries.concat(map(response.results, (result) => {
|
|
30
|
+
return { id: result.id, entry: new Entry(result) };
|
|
31
|
+
}));
|
|
32
|
+
if (response.next) {
|
|
33
|
+
this.getEntriesWithUrl(response.next);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.organizeEntries();
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
organizeEntries() {
|
|
41
|
+
for (const entryWrapper of this.entries) {
|
|
42
|
+
const entry = entryWrapper.entry;
|
|
43
|
+
const create_date = new Date(entry.create_date);
|
|
44
|
+
const month = create_date.getMonth();
|
|
45
|
+
const year = create_date.getFullYear();
|
|
46
|
+
const key = month + '/' + year;
|
|
47
|
+
const sort_index = (year * 100) + month;
|
|
48
|
+
const containers = filter(this.entriesByMonthAndYear, (entryContainer) => entryContainer.month_year === key);
|
|
49
|
+
if (containers.length > 0) {
|
|
50
|
+
const container = containers[0];
|
|
51
|
+
const entriesWithId = filter(container.entries, (e) => e.id === entryWrapper.entry.id);
|
|
52
|
+
if (entriesWithId.length === 0) {
|
|
53
|
+
container.entries.push(entry);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
const newContainer = { month_year: key, month_year_number: sort_index, entries: [entry] };
|
|
58
|
+
this.entriesByMonthAndYear.push(newContainer);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
this.entriesByMonthAndYear.sort((entry_a, entry_b) => {
|
|
62
|
+
return entry_a.month_year_number - entry_b.month_year_number;
|
|
63
|
+
});
|
|
64
|
+
this.entriesByMonthAndYear.reverse();
|
|
65
|
+
}
|
|
66
|
+
getEntries() {
|
|
67
|
+
this.entryService.get().subscribe((response) => {
|
|
68
|
+
this.entries = map(response.results, (result) => {
|
|
69
|
+
return { id: result.id, entry: new Entry(result) };
|
|
70
|
+
});
|
|
71
|
+
if (response.next) {
|
|
72
|
+
this.getEntriesWithUrl(response.next);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
this.organizeEntries();
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
render() {
|
|
80
|
+
}
|
|
81
|
+
routeTo(entry) {
|
|
82
|
+
if (!entry) {
|
|
83
|
+
this.router.navigateByUrl('create(left-col:create//right-col:create)').then(() => {
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
this.router.navigate(['/', 'blog', entry.slug]).then(() => {
|
|
88
|
+
// Noop
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
getMonthAndYearFromKey(key) {
|
|
93
|
+
let subheading = '';
|
|
94
|
+
const parts = key.split('/');
|
|
95
|
+
switch (Number(parts[0])) {
|
|
96
|
+
case 0:
|
|
97
|
+
subheading += 'January ';
|
|
98
|
+
break;
|
|
99
|
+
case 1:
|
|
100
|
+
subheading += 'February ';
|
|
101
|
+
break;
|
|
102
|
+
case 2:
|
|
103
|
+
subheading += 'March ';
|
|
104
|
+
break;
|
|
105
|
+
case 3:
|
|
106
|
+
subheading += 'April ';
|
|
107
|
+
break;
|
|
108
|
+
case 4:
|
|
109
|
+
subheading += 'May ';
|
|
110
|
+
break;
|
|
111
|
+
case 5:
|
|
112
|
+
subheading += 'June ';
|
|
113
|
+
break;
|
|
114
|
+
case 6:
|
|
115
|
+
subheading += 'July ';
|
|
116
|
+
break;
|
|
117
|
+
case 7:
|
|
118
|
+
subheading += 'August ';
|
|
119
|
+
break;
|
|
120
|
+
case 8:
|
|
121
|
+
subheading += 'September ';
|
|
122
|
+
break;
|
|
123
|
+
case 9:
|
|
124
|
+
subheading += 'October ';
|
|
125
|
+
break;
|
|
126
|
+
case 10:
|
|
127
|
+
subheading += 'November ';
|
|
128
|
+
break;
|
|
129
|
+
case 11:
|
|
130
|
+
subheading += 'December ';
|
|
131
|
+
break;
|
|
132
|
+
default:
|
|
133
|
+
subheading += 'January ';
|
|
134
|
+
}
|
|
135
|
+
subheading += parts[1];
|
|
136
|
+
return subheading;
|
|
137
|
+
}
|
|
138
|
+
ngOnDestroy() {
|
|
139
|
+
if (this.sourceSub) {
|
|
140
|
+
this.sourceSub.unsubscribe();
|
|
141
|
+
this.sourceSub = null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
SideNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: SideNavigationComponent, deps: [{ token: i1.EntryService }, { token: i2.Router }, { token: i3.IdentityService }], target: i0.ɵɵFactoryTarget.Component });
|
|
146
|
+
SideNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: SideNavigationComponent, selector: "app-side-navigation", ngImport: i0, template: "<div class=\"sidenav no-scrollbar\">\n <mat-nav-list *ngFor=\"let container of entriesByMonthAndYear\">\n <h3>{{getMonthAndYearFromKey(container.month_year)}}</h3>\n <a mat-list-item *ngFor=\"let entry of container.entries\" href=\"javascript:void(0)\" (click)=\"routeTo(entry)\">{{entry.title}}</a>\n </mat-nav-list>\n\n <ng-container *ngIf=\"identity?.id === 1\">\n <h2>Misc</h2>\n\n <mat-nav-list>\n <a mat-list-item href=\"javascript:void(0);\" (click)=\"routeTo(null)\">Create</a>\n </mat-nav-list>\n </ng-container>\n <h3 *ngIf=\"identity\">Logged in as {{identity?.email}}</h3>\n</div>\n\n", styles: [".sidenav{max-height:calc(100vh - 100px)}@media screen and (max-height: 560px){.sidenav{max-height:100vh}}h2,h3{margin-left:10px;justify-content:right}\n"], components: [{ type: i4.MatNavList, selector: "mat-nav-list", inputs: ["disableRipple", "disabled"], exportAs: ["matNavList"] }, { type: i4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }], directives: [{ type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
147
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: SideNavigationComponent, decorators: [{
|
|
148
|
+
type: Component,
|
|
149
|
+
args: [{ selector: 'app-side-navigation', template: "<div class=\"sidenav no-scrollbar\">\n <mat-nav-list *ngFor=\"let container of entriesByMonthAndYear\">\n <h3>{{getMonthAndYearFromKey(container.month_year)}}</h3>\n <a mat-list-item *ngFor=\"let entry of container.entries\" href=\"javascript:void(0)\" (click)=\"routeTo(entry)\">{{entry.title}}</a>\n </mat-nav-list>\n\n <ng-container *ngIf=\"identity?.id === 1\">\n <h2>Misc</h2>\n\n <mat-nav-list>\n <a mat-list-item href=\"javascript:void(0);\" (click)=\"routeTo(null)\">Create</a>\n </mat-nav-list>\n </ng-container>\n <h3 *ngIf=\"identity\">Logged in as {{identity?.email}}</h3>\n</div>\n\n", styles: [".sidenav{max-height:calc(100vh - 100px)}@media screen and (max-height: 560px){.sidenav{max-height:100vh}}h2,h3{margin-left:10px;justify-content:right}\n"] }]
|
|
150
|
+
}], ctorParameters: function () { return [{ type: i1.EntryService }, { type: i2.Router }, { type: i3.IdentityService }]; } });
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1uYXZpZ2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NpZGUtbmF2aWdhdGlvbi9zaWRlLW5hdmlnYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2NvbXBvbmVudHMvc2lkZS1uYXZpZ2F0aW9uL3NpZGUtbmF2aWdhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUEwQyxNQUFNLGVBQWUsQ0FBQztBQUVqRixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzlCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFM0IsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7O0FBV3ZDLE1BQU0sT0FBTyx1QkFBdUI7SUFRaEMsWUFDWSxZQUEwQixFQUMxQixNQUFjLEVBQ2QsZUFBZ0M7UUFGaEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQU41QyxZQUFPLEdBQWlDLEVBQUUsQ0FBQztRQUMzQywwQkFBcUIsR0FBd0UsRUFBRSxDQUFDO0lBT2hHLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUM3QixDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxD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IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7ZmlsdGVyfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHttYXB9IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7RW50cnl9IGZyb20gJy4uLy4uL2RhdGEvZW50cnknO1xuaW1wb3J0IHtJZGVudGl0eX0gZnJvbSAnLi4vLi4vZGF0YS9pZGVudGl0eSc7XG5cbmltcG9ydCB7RW50cnlTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRyeS5zZXJ2aWNlJztcbmltcG9ydCB7SWRlbnRpdHlTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pZGVudGl0eS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtc2lkZS1uYXZpZ2F0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2lkZS1uYXZpZ2F0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zaWRlLW5hdmlnYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTaWRlTmF2aWdhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHNvdXJjZVN1YjtcbiAgICBpZGVudGl0eTogSWRlbnRpdHk7XG5cbiAgICBlbnRyaWVzOiB7aWQ6IHN0cmluZywgZW50cnk6IEVudHJ5fVtdID0gW107XG4gICAgZW50cmllc0J5TW9udGhBbmRZZWFyOiB7bW9udGhfeWVhcjogc3RyaW5nLCBtb250aF95ZWFyX251bWJlcjogbnVtYmVyLCBlbnRyaWVzOiBFbnRyeVtdfVtdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbnRyeVNlcnZpY2U6IEVudHJ5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBpZGVudGl0eVNlcnZpY2U6IElkZW50aXR5U2VydmljZSxcbiAgICApIHtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5pZGVudGl0eVNlcnZpY2UuZ2V0TWUoKS5zdWJzY3JpYmUoKGlkZW50aXR5KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaWRlbnRpdHkgPSBudWxsO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmdldEVudHJpZXMoKTtcblxuICAgIH1cblxuICAgIGdldEVudHJpZXNXaXRoVXJsKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZW50cnlTZXJ2aWNlLmdldExpc3RCeVVybCh1cmwpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcyA9IHRoaXMuZW50cmllcy5jb25jYXQoXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSBhcyBhbnkpLnJlc3VsdHMsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IHJlc3VsdC5pZCwgZW50cnk6IG5ldyBFbnRyeShyZXN1bHQpfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICgocmVzcG9uc2UgYXMgYW55KS5uZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRFbnRyaWVzV2l0aFVybChyZXNwb25zZS5uZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmdhbml6ZUVudHJpZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3JnYW5pemVFbnRyaWVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5V3JhcHBlciBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cnlXcmFwcGVyLmVudHJ5O1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlX2RhdGUgPSBuZXcgRGF0ZShlbnRyeS5jcmVhdGVfZGF0ZSk7XG4gICAgICAgICAgICBjb25zdCBtb250aCA9IGNyZWF0ZV9kYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gY3JlYXRlX2RhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IG1vbnRoICsgJy8nICsgeWVhcjtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRfaW5kZXggPSAoeWVhciAqIDEwMCkgKyBtb250aDtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBmaWx0ZXIodGhpcy5lbnRyaWVzQnlNb250aEFuZFllYXIsIChlbnRyeUNvbnRhaW5lcikgPT4gZW50cnlDb250YWluZXIubW9udGhfeWVhciA9PT0ga2V5KTtcbiAgICAgICAgICAgIGlmIChjb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBjb250YWluZXJzWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJpZXNXaXRoSWQgPSBmaWx0ZXIoY29udGFpbmVyLmVudHJpZXMsIChlKSA9PiBlLmlkID09PSBlbnRyeVdyYXBwZXIuZW50cnkuaWQpO1xuICAgICAgICAgICAgICAgIGlmIChlbnRyaWVzV2l0aElkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRhaW5lciA9IHttb250aF95ZWFyOiBrZXksIG1vbnRoX3llYXJfbnVtYmVyOiBzb3J0X2luZGV4LCBlbnRyaWVzOiBbZW50cnldfTtcbiAgICAgICAgICAgICAgICB0aGlzLmVudHJpZXNCeU1vbnRoQW5kWWVhci5wdXNoKG5ld0NvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnRyaWVzQnlNb250aEFuZFllYXIuc29ydChcbiAgICAgICAgICAgIChlbnRyeV9hLCBlbnRyeV9iKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5X2EubW9udGhfeWVhcl9udW1iZXIgLSBlbnRyeV9iLm1vbnRoX3llYXJfbnVtYmVyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZW50cmllc0J5TW9udGhBbmRZZWFyLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBnZXRFbnRyaWVzKCkge1xuICAgICAgICB0aGlzLmVudHJ5U2VydmljZS5nZXQoKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXMgPSBtYXAocmVzcG9uc2UucmVzdWx0cywgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGlkOiByZXN1bHQuaWQsIGVudHJ5OiBuZXcgRW50cnkocmVzdWx0KX07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICgocmVzcG9uc2UgYXMgYW55KS5uZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRFbnRyaWVzV2l0aFVybChyZXNwb25zZS5uZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmdhbml6ZUVudHJpZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgIH1cblxuICAgIHJvdXRlVG8oZW50cnkpIHtcbiAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnY3JlYXRlKGxlZnQtY29sOmNyZWF0ZS8vcmlnaHQtY29sOmNyZWF0ZSknKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nLCAnYmxvZycsIGVudHJ5LnNsdWddKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBOb29wXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE1vbnRoQW5kWWVhckZyb21LZXkoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHN1YmhlYWRpbmcgPSAnJztcbiAgICAgICAgY29uc3QgcGFydHMgPSBrZXkuc3BsaXQoJy8nKTtcblxuICAgICAgICBzd2l0Y2ggKE51bWJlcihwYXJ0c1swXSkpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBzdWJoZWFkaW5nICs9ICdKYW51YXJ5ICc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgc3ViaGVhZGluZyArPSAnRmVicnVhcnkgJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBzdWJoZWFkaW5nICs9ICdNYXJjaCAnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHN1YmhlYWRpbmcgKz0gJ0FwcmlsICc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgc3ViaGVhZGluZyArPSAnTWF5ICc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgc3ViaGVhZGluZyArPSAnSnVuZSAnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgIHN1YmhlYWRpbmcgKz0gJ0p1bHkgJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICBzdWJoZWFkaW5nICs9ICdBdWd1c3QgJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICBzdWJoZWFkaW5nICs9ICdTZXB0ZW1iZXIgJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICBzdWJoZWFkaW5nICs9ICdPY3RvYmVyICc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgIHN1YmhlYWRpbmcgKz0gJ05vdmVtYmVyICc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgIHN1YmhlYWRpbmcgKz0gJ0RlY2VtYmVyICc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHN1YmhlYWRpbmcgKz0gJ0phbnVhcnkgJztcbiAgICAgICAgfVxuICAgICAgICBzdWJoZWFkaW5nICs9IHBhcnRzWzFdO1xuXG4gICAgICAgIHJldHVybiBzdWJoZWFkaW5nO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zb3VyY2VTdWIpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZVN1YiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2lkZW5hdiBuby1zY3JvbGxiYXJcIj5cbiAgICA8bWF0LW5hdi1saXN0ICpuZ0Zvcj1cImxldCBjb250YWluZXIgb2YgZW50cmllc0J5TW9udGhBbmRZZWFyXCI+XG4gICAgICAgIDxoMz57e2dldE1vbnRoQW5kWWVhckZyb21LZXkoY29udGFpbmVyLm1vbnRoX3llYXIpfX08L2gzPlxuICAgICAgICA8YSBtYXQtbGlzdC1pdGVtICpuZ0Zvcj1cImxldCBlbnRyeSBvZiBjb250YWluZXIuZW50cmllc1wiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwicm91dGVUbyhlbnRyeSlcIj57e2VudHJ5LnRpdGxlfX08L2E+XG4gICAgPC9tYXQtbmF2LWxpc3Q+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaWRlbnRpdHk/LmlkID09PSAxXCI+XG4gICAgICAgIDxoMj5NaXNjPC9oMj5cblxuICAgICAgICA8bWF0LW5hdi1saXN0PlxuICAgICAgICAgICAgPGEgbWF0LWxpc3QtaXRlbSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJyb3V0ZVRvKG51bGwpXCI+Q3JlYXRlPC9hPlxuICAgICAgICA8L21hdC1uYXYtbGlzdD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8aDMgKm5nSWY9XCJpZGVudGl0eVwiPkxvZ2dlZCBpbiBhcyB7e2lkZW50aXR5Py5lbWFpbH19PC9oMz5cbjwvZGl2PlxuXG4iXX0=
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../services/static-html.service";
|
|
4
|
+
import * as i2 from "@angular/platform-browser";
|
|
5
|
+
export class StaticHtmlComponent {
|
|
6
|
+
constructor(staticHtmlService, domSanitizer) {
|
|
7
|
+
this.staticHtmlService = staticHtmlService;
|
|
8
|
+
this.domSanitizer = domSanitizer;
|
|
9
|
+
}
|
|
10
|
+
refreshContent() {
|
|
11
|
+
this.innerHtml = this.domSanitizer.bypassSecurityTrustHtml(this.staticHtmlService.mapStaticHtml(this.value, false));
|
|
12
|
+
}
|
|
13
|
+
ngOnChanges(changes) {
|
|
14
|
+
this.refreshContent();
|
|
15
|
+
}
|
|
16
|
+
ngOnInit() {
|
|
17
|
+
this.refreshContent();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
StaticHtmlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: StaticHtmlComponent, deps: [{ token: i1.StaticHtmlService }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
21
|
+
StaticHtmlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: StaticHtmlComponent, selector: "app-static-html", inputs: { value: "value" }, usesOnChanges: true, ngImport: i0, template: "<div [innerHtml]=\"innerHtml\">\n</div>\n", styles: [""] });
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: StaticHtmlComponent, decorators: [{
|
|
23
|
+
type: Component,
|
|
24
|
+
args: [{ selector: 'app-static-html', template: "<div [innerHtml]=\"innerHtml\">\n</div>\n", styles: [""] }]
|
|
25
|
+
}], ctorParameters: function () { return [{ type: i1.StaticHtmlService }, { type: i2.DomSanitizer }]; }, propDecorators: { value: [{
|
|
26
|
+
type: Input
|
|
27
|
+
}] } });
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLWh0bWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2NvbXBvbmVudHMvc3RhdGljLWh0bWwvc3RhdGljLWh0bWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2NvbXBvbmVudHMvc3RhdGljLWh0bWwvc3RhdGljLWh0bWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQW9DLE1BQU0sZUFBZSxDQUFDOzs7O0FBU25GLE1BQU0sT0FBTyxtQkFBbUI7SUFLNUIsWUFDWSxpQkFBb0MsRUFDcEMsWUFBMEI7UUFEMUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUNsQyxDQUFDO0lBRUwsY0FBYztRQUNWLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4SCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDOztnSEFwQlEsbUJBQW1CO29HQUFuQixtQkFBbUIsd0dDVGhDLDJDQUVBOzJGRE9hLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDSSxpQkFBaUI7bUlBT2xCLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RvbVNhbml0aXplciwgU2FmZUh0bWx9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtTdGF0aWNIdG1sU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdGljLWh0bWwuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLXN0YXRpYy1odG1sJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc3RhdGljLWh0bWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0YXRpYy1odG1sLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTdGF0aWNIdG1sQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gICAgaW5uZXJIdG1sOiBTYWZlSHRtbDtcbiAgICBASW5wdXQoKSB2YWx1ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHN0YXRpY0h0bWxTZXJ2aWNlOiBTdGF0aWNIdG1sU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplclxuICAgICkgeyB9XG5cbiAgICByZWZyZXNoQ29udGVudCgpIHtcbiAgICAgICAgdGhpcy5pbm5lckh0bWwgPSB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLnN0YXRpY0h0bWxTZXJ2aWNlLm1hcFN0YXRpY0h0bWwodGhpcy52YWx1ZSwgZmFsc2UpKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVmcmVzaENvbnRlbnQoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29udGVudCgpO1xuICAgIH1cblxufVxuIiwiPGRpdiBbaW5uZXJIdG1sXT1cImlubmVySHRtbFwiPlxuPC9kaXY+XG4iXX0=
|