@thecodeblogs/blog 0.11.7 → 0.13.0

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.
Files changed (134) hide show
  1. package/esm2020/lib/components/entry-creator/entry-creator.component.mjs +347 -0
  2. package/esm2020/lib/components/entry-renderer/entry-renderer.component.mjs +108 -0
  3. package/esm2020/lib/components/entry-renderer-wrapper/entry-renderer-wrapper.component.mjs +75 -0
  4. package/esm2020/lib/components/entry-selector-dialog/entry-selector-dialog-data.mjs +3 -0
  5. package/esm2020/lib/components/entry-selector-dialog/entry-selector-dialog.component.mjs +45 -0
  6. package/esm2020/lib/components/entry-summary/entry-summary.component.mjs +28 -0
  7. package/esm2020/lib/components/json-renderer/json-renderer.component.mjs +26 -0
  8. package/esm2020/lib/components/landing-page/landing-page.component.mjs +35 -0
  9. package/esm2020/lib/components/main/main.component.mjs +56 -0
  10. package/esm2020/lib/components/media-upload-modal/media-upload-modal.component.mjs +160 -0
  11. package/esm2020/lib/components/outline-view/outline-view.component.mjs +40 -0
  12. package/esm2020/lib/components/schedule-publish-dialog/schedule-publish-dialog-data.mjs +3 -0
  13. package/esm2020/lib/components/schedule-publish-dialog/schedule-publish-dialog.component.mjs +33 -0
  14. package/esm2020/lib/components/side-navigation/side-navigation.component.mjs +151 -0
  15. package/esm2020/lib/components/static-html/static-html.component.mjs +28 -0
  16. package/esm2020/lib/core.module.mjs +207 -0
  17. package/esm2020/lib/data/base.mjs +7 -0
  18. package/esm2020/lib/data/content-type.mjs +10 -0
  19. package/esm2020/lib/data/content.mjs +5 -0
  20. package/esm2020/lib/data/core-event-type.enum.mjs +7 -0
  21. package/esm2020/lib/data/core-event.mjs +7 -0
  22. package/esm2020/lib/data/entry.mjs +80 -0
  23. package/esm2020/lib/data/guid.mjs +12 -0
  24. package/esm2020/lib/data/identity.mjs +2 -0
  25. package/esm2020/lib/data/list-response.mjs +3 -0
  26. package/esm2020/lib/data/section.mjs +11 -0
  27. package/esm2020/lib/data/tag.mjs +7 -0
  28. package/esm2020/lib/data/visitor-profile.mjs +3 -0
  29. package/esm2020/lib/pipes/LinkyPipe.mjs +15 -0
  30. package/esm2020/lib/pipes/TimeAgoPipe.mjs +100 -0
  31. package/esm2020/lib/routing/routes.mjs +25 -0
  32. package/esm2020/lib/services/analytics/interaction.service.mjs +20 -0
  33. package/esm2020/lib/services/analytics/view.service.mjs +20 -0
  34. package/esm2020/lib/services/comment.service.mjs +28 -0
  35. package/esm2020/lib/services/django-rest-framework-endpoint.service.mjs +50 -0
  36. package/esm2020/lib/services/entry.service.mjs +73 -0
  37. package/esm2020/lib/services/identity.service.mjs +20 -0
  38. package/esm2020/lib/services/interaction.mjs +3 -0
  39. package/esm2020/lib/services/prism.service.mjs +39 -0
  40. package/esm2020/lib/services/static-html.service.mjs +22 -0
  41. package/esm2020/lib/services/tag.service.mjs +33 -0
  42. package/esm2020/lib/services/upload.mjs +3 -0
  43. package/esm2020/lib/services/upload.service.mjs +22 -0
  44. package/esm2020/lib/services/view.mjs +3 -0
  45. package/esm2020/lib/services/visitor-profile.service.mjs +35 -0
  46. package/esm2020/public-api.mjs +45 -0
  47. package/esm2020/thecodeblogs-blog.mjs +5 -0
  48. package/fesm2015/thecodeblogs-blog.mjs +1826 -0
  49. package/fesm2015/thecodeblogs-blog.mjs.map +1 -0
  50. package/fesm2020/thecodeblogs-blog.mjs +1820 -0
  51. package/fesm2020/thecodeblogs-blog.mjs.map +1 -0
  52. package/lib/components/entry-creator/entry-creator.component.d.ts +3 -0
  53. package/lib/components/entry-renderer/entry-renderer.component.d.ts +3 -0
  54. package/lib/components/entry-renderer-wrapper/entry-renderer-wrapper.component.d.ts +3 -0
  55. package/lib/components/entry-selector-dialog/entry-selector-dialog.component.d.ts +3 -0
  56. package/lib/components/entry-summary/entry-summary.component.d.ts +3 -0
  57. package/lib/components/json-renderer/json-renderer.component.d.ts +3 -0
  58. package/lib/components/landing-page/landing-page.component.d.ts +3 -0
  59. package/lib/components/main/main.component.d.ts +3 -0
  60. package/lib/components/media-upload-modal/media-upload-modal.component.d.ts +3 -0
  61. package/lib/components/outline-view/outline-view.component.d.ts +3 -0
  62. package/lib/components/schedule-publish-dialog/schedule-publish-dialog.component.d.ts +3 -0
  63. package/lib/components/side-navigation/side-navigation.component.d.ts +3 -0
  64. package/lib/components/static-html/static-html.component.d.ts +3 -0
  65. package/lib/core.module.d.ts +40 -0
  66. package/lib/pipes/LinkyPipe.d.ts +3 -0
  67. package/lib/pipes/TimeAgoPipe.d.ts +3 -0
  68. package/lib/services/analytics/interaction.service.d.ts +3 -0
  69. package/lib/services/analytics/view.service.d.ts +3 -0
  70. package/lib/services/comment.service.d.ts +3 -0
  71. package/lib/services/django-rest-framework-endpoint.service.d.ts +3 -0
  72. package/lib/services/entry.service.d.ts +3 -0
  73. package/lib/services/identity.service.d.ts +3 -0
  74. package/lib/services/prism.service.d.ts +3 -0
  75. package/lib/services/static-html.service.d.ts +3 -0
  76. package/lib/services/tag.service.d.ts +3 -0
  77. package/lib/services/upload.service.d.ts +3 -0
  78. package/lib/services/visitor-profile.service.d.ts +3 -0
  79. package/package.json +36 -24
  80. package/thecodeblogs-blog.d.ts +1 -3
  81. package/bundles/thecodeblogs-blog.umd.js +0 -2279
  82. package/bundles/thecodeblogs-blog.umd.js.map +0 -1
  83. package/bundles/thecodeblogs-blog.umd.min.js +0 -17
  84. package/bundles/thecodeblogs-blog.umd.min.js.map +0 -1
  85. package/esm2015/lib/components/entry-creator/entry-creator.component.js +0 -336
  86. package/esm2015/lib/components/entry-renderer/entry-renderer.component.js +0 -108
  87. package/esm2015/lib/components/entry-renderer-wrapper/entry-renderer-wrapper.component.js +0 -79
  88. package/esm2015/lib/components/entry-selector-dialog/entry-selector-dialog-data.js +0 -3
  89. package/esm2015/lib/components/entry-selector-dialog/entry-selector-dialog.component.js +0 -41
  90. package/esm2015/lib/components/entry-summary/entry-summary.component.js +0 -29
  91. package/esm2015/lib/components/json-renderer/json-renderer.component.js +0 -29
  92. package/esm2015/lib/components/landing-page/landing-page.component.js +0 -37
  93. package/esm2015/lib/components/main/main.component.js +0 -55
  94. package/esm2015/lib/components/media-upload-modal/media-upload-modal.component.js +0 -155
  95. package/esm2015/lib/components/outline-view/outline-view.component.js +0 -40
  96. package/esm2015/lib/components/schedule-publish-dialog/schedule-publish-dialog-data.js +0 -3
  97. package/esm2015/lib/components/schedule-publish-dialog/schedule-publish-dialog.component.js +0 -28
  98. package/esm2015/lib/components/side-navigation/side-navigation.component.js +0 -154
  99. package/esm2015/lib/components/static-html/static-html.component.js +0 -33
  100. package/esm2015/lib/core.module.js +0 -125
  101. package/esm2015/lib/data/base.js +0 -7
  102. package/esm2015/lib/data/content-type.js +0 -10
  103. package/esm2015/lib/data/content.js +0 -5
  104. package/esm2015/lib/data/core-event-type.enum.js +0 -7
  105. package/esm2015/lib/data/core-event.js +0 -7
  106. package/esm2015/lib/data/entry.js +0 -80
  107. package/esm2015/lib/data/guid.js +0 -12
  108. package/esm2015/lib/data/identity.js +0 -2
  109. package/esm2015/lib/data/list-response.js +0 -3
  110. package/esm2015/lib/data/section.js +0 -11
  111. package/esm2015/lib/data/tag.js +0 -7
  112. package/esm2015/lib/data/visitor-profile.js +0 -3
  113. package/esm2015/lib/pipes/LinkyPipe.js +0 -11
  114. package/esm2015/lib/pipes/TimeAgoPipe.js +0 -100
  115. package/esm2015/lib/routing/routes.js +0 -25
  116. package/esm2015/lib/services/analytics/interaction.service.js +0 -22
  117. package/esm2015/lib/services/analytics/view.service.js +0 -22
  118. package/esm2015/lib/services/comment.service.js +0 -30
  119. package/esm2015/lib/services/django-rest-framework-endpoint.service.js +0 -52
  120. package/esm2015/lib/services/entry.service.js +0 -74
  121. package/esm2015/lib/services/identity.service.js +0 -22
  122. package/esm2015/lib/services/interaction.js +0 -3
  123. package/esm2015/lib/services/prism.service.js +0 -37
  124. package/esm2015/lib/services/static-html.service.js +0 -24
  125. package/esm2015/lib/services/tag.service.js +0 -35
  126. package/esm2015/lib/services/upload.js +0 -3
  127. package/esm2015/lib/services/upload.service.js +0 -24
  128. package/esm2015/lib/services/view.js +0 -3
  129. package/esm2015/lib/services/visitor-profile.service.js +0 -39
  130. package/esm2015/public-api.js +0 -45
  131. package/esm2015/thecodeblogs-blog.js +0 -8
  132. package/fesm2015/thecodeblogs-blog.js +0 -1786
  133. package/fesm2015/thecodeblogs-blog.js.map +0 -1
  134. package/thecodeblogs-blog.metadata.json +0 -1
@@ -1,336 +0,0 @@
1
- import { COMMA, ENTER, TAB } from '@angular/cdk/keycodes';
2
- import { ChangeDetectorRef, Component, ViewChild, Input } from '@angular/core';
3
- import { Entry } from '../../data/entry';
4
- import { Section } from '../../data/section';
5
- import { Content } from '../../data/content';
6
- import { ContentType } from '../../data/content-type';
7
- import { EntryService } from '../../services/entry.service';
8
- import { IdentityService } from '../../services/identity.service';
9
- import { map as loMap, filter } from 'lodash';
10
- import { MatDialog } from '@angular/material/dialog';
11
- import { EntrySelectorDialogComponent } from '../../components/entry-selector-dialog/entry-selector-dialog.component';
12
- import { FileUploader } from 'ng2-file-upload';
13
- import { MediaUploadModalComponent } from '../../components/media-upload-modal/media-upload-modal.component';
14
- import { map, startWith } from 'rxjs/operators';
15
- import { FormControl } from '@angular/forms';
16
- import { TagService } from '../../services/tag.service';
17
- const slugify = require('slugify');
18
- export class EntryCreatorComponent {
19
- constructor(entryService, tagService, identityService, cdr, dialog) {
20
- this.entryService = entryService;
21
- this.tagService = tagService;
22
- this.identityService = identityService;
23
- this.cdr = cdr;
24
- this.dialog = dialog;
25
- this.ContentType = ContentType;
26
- this.Object = Object;
27
- this.entry = new Entry();
28
- this.separatorKeysCodes = [ENTER, COMMA, TAB];
29
- this.removable = true;
30
- this.all_tags = ['Angular', 'Bash', 'MacOS', 'Typescript', 'NPM', 'Databases'];
31
- this.tagCtrl = new FormControl();
32
- this.publishDateControl = new FormControl();
33
- this.selectable = false;
34
- this.scheduling = false;
35
- this.customScheduleTime = '';
36
- this.today = new Date();
37
- this.allowedMimeTypes = [
38
- 'image/jpeg',
39
- 'image/gif',
40
- 'image/png',
41
- 'image/jpg',
42
- 'video/mp4',
43
- 'video/webm',
44
- 'video/ogg',
45
- ];
46
- this.uploadUrlKey = 'path_to_file';
47
- this.uploader = new FileUploader({
48
- url: '/file_api/uploads/create_image/',
49
- itemAlias: 'file',
50
- authToken: '',
51
- headers: [
52
- {
53
- name: 'X-CSRFToken',
54
- value: EntryCreatorComponent.getCookie('csrftoken')
55
- },
56
- ],
57
- additionalParameter: {
58
- 'csrf_token': EntryCreatorComponent.getCookie('csrftoken')
59
- },
60
- removeAfterUpload: true,
61
- allowedMimeType: this.allowedMimeTypes,
62
- });
63
- const scheduledDate = new Date();
64
- this.customScheduleTime = scheduledDate.getHours() + ':' + scheduledDate.getMinutes() + ' AM';
65
- }
66
- static getCookie(name) {
67
- const ca = document.cookie.split(';');
68
- const caLen = ca.length;
69
- const cookieName = `${name}=`;
70
- let c;
71
- for (let i = 0; i < caLen; i += 1) {
72
- c = ca[i].replace(/^\s+/g, '');
73
- if (c.indexOf(cookieName) === 0) {
74
- return c.substring(cookieName.length, c.length);
75
- }
76
- }
77
- return '';
78
- }
79
- _filter(value) {
80
- const filterValue = value.toLowerCase();
81
- return this.all_tags.filter(tag => tag.toLowerCase().indexOf(filterValue) === 0);
82
- }
83
- add(event) {
84
- const input = event.input;
85
- const value = event.value;
86
- // Add our tag
87
- if ((value || '').trim()) {
88
- this.tags.push(value.trim());
89
- }
90
- // Reset the input value
91
- if (input) {
92
- input.value = '';
93
- }
94
- this.tagCtrl.setValue(null);
95
- this.onChange();
96
- }
97
- remove(fruit) {
98
- const index = this.tags.indexOf(fruit);
99
- if (index >= 0) {
100
- this.tags.splice(index, 1);
101
- }
102
- this.onChange();
103
- }
104
- selected(event) {
105
- this.tags.push(event.option.viewValue);
106
- this.tagInput.nativeElement.value = '';
107
- this.tagCtrl.setValue(null);
108
- this.onChange();
109
- }
110
- refreshTags() {
111
- this.tagService.get().subscribe((response) => {
112
- this.all_tags = loMap(response.results, (t) => t.label);
113
- this.filtered_tags = this.tagCtrl.valueChanges.pipe(startWith(null), map((tag) => tag ? this._filter(tag) : this.all_tags.slice()));
114
- });
115
- }
116
- createNewEntry() {
117
- this.entry = new Entry();
118
- this.entry.title = EntryCreatorComponent.DEFAULT_NEW_ENTRY_TITLE;
119
- this.entry.published = false;
120
- this.entry.version = 1;
121
- this.entryService.create(this.entry).subscribe((response) => {
122
- this.entry = response;
123
- this.entry.sort();
124
- setTimeout(() => {
125
- this.entryService.currentlyEditedEntry.next(this.entry);
126
- }, 10);
127
- });
128
- }
129
- ngOnInit() {
130
- this.refreshTags();
131
- this.identityService.getMe().subscribe((me) => {
132
- this.me = me;
133
- });
134
- const savedEntry = localStorage.getItem(EntryCreatorComponent.CURRENT_ENTRY);
135
- if (savedEntry) {
136
- this.entry = new Entry(JSON.parse(savedEntry));
137
- if (this.entry.should_publish_in_future && this.entry.future_publish_date < new Date()) {
138
- this.createNewEntry();
139
- }
140
- this.entry.sort();
141
- if (this.entry.should_publish_in_future) {
142
- // Restore scheduling settings
143
- this.scheduling = true;
144
- let hours = this.entry.future_publish_date.getHours();
145
- let minutes = this.entry.future_publish_date.getMinutes();
146
- const ampm = hours >= 12 ? 'PM' : 'AM';
147
- if (hours >= 12) {
148
- hours = hours % 12;
149
- hours = hours ? hours : 12;
150
- }
151
- minutes = minutes < 10 ? '0' + minutes : minutes;
152
- this.customScheduleTime = hours + ':' + minutes + ' ' + ampm;
153
- }
154
- setTimeout(() => {
155
- this.entryService.currentlyEditedEntry.next(this.entry);
156
- }, 10);
157
- }
158
- else {
159
- this.createNewEntry();
160
- }
161
- this.uploader.onCompleteItem = (item, response) => {
162
- // const responseObj = JSON.parse(response)
163
- // this.uploadId = responseObj.id;
164
- };
165
- this.uploader.onWhenAddingFileFailed = (item, uploadFilter, options) => {
166
- // this.error = 'This file is not a supported mimetype.'
167
- // this.uploading = false;
168
- };
169
- this.tags = this.entry.tags;
170
- }
171
- onFileSelected(e) {
172
- this.uploader.uploadAll();
173
- }
174
- startUploader(content) {
175
- const dialogRef = this.dialog.open(MediaUploadModalComponent, {});
176
- dialogRef.componentInstance.allowedMimeTypes = this.allowedMimeTypes;
177
- dialogRef.componentInstance.uploadUrlKey = this.uploadUrlKey;
178
- dialogRef.afterClosed().subscribe(() => {
179
- content.value = dialogRef.componentInstance.imgLink;
180
- content.additional = [];
181
- content.additional.push({ key: Content.KEY_MIMETYPE, value: dialogRef.componentInstance.mimeType });
182
- this.onChange();
183
- });
184
- }
185
- addSection() {
186
- this.entry.sections.push(new Section());
187
- this.onChange();
188
- }
189
- removeSection(section) {
190
- const remove = confirm('Are you sure you want to remove this section?');
191
- if (remove) {
192
- this.entry.sections =
193
- filter(this.entry.sections, (sct) => sct.id !== section.id);
194
- this.onChange();
195
- }
196
- }
197
- addContent(section) {
198
- section.contents.push(new Content());
199
- this.onChange();
200
- }
201
- removeContent(content) {
202
- const remove = confirm('Are you sure you want to remove this content?');
203
- if (remove) {
204
- for (const section of this.entry.sections) {
205
- section.contents = filter(section.contents, (ct) => ct.id !== content.id);
206
- }
207
- this.onChange();
208
- }
209
- }
210
- onChange() {
211
- this.entry.slug = slugify(this.entry.title).toLowerCase();
212
- localStorage.setItem(EntryCreatorComponent.CURRENT_ENTRY, JSON.stringify(this.entry));
213
- this.entry.sort();
214
- this.cdr.detectChanges();
215
- this.entryService.currentlyEditedEntry.next(this.entry);
216
- this.entryService._currentlyEditedEntry = this.entry;
217
- }
218
- resetDate() {
219
- this.entry.create_date = new Date();
220
- this.entry.edit_date = new Date();
221
- this.onChange();
222
- }
223
- startNew() {
224
- const finish = confirm('Are you sure your finished? The JSON and entry displayed will be removed. Make sure you have already copied it.');
225
- if (finish) {
226
- this.entry = new Entry();
227
- this.entry.title = EntryCreatorComponent.DEFAULT_NEW_ENTRY_TITLE;
228
- this.entry.published = false;
229
- this.entry.version = 1;
230
- this.entryService.currentlyEditedEntry.next(this.entry);
231
- localStorage.setItem(EntryCreatorComponent.CURRENT_ENTRY, JSON.stringify(this.entry));
232
- this.entryService.create(this.entry).subscribe((next) => {
233
- });
234
- }
235
- }
236
- seeEntries() {
237
- const dialogRef = this.dialog.open(EntrySelectorDialogComponent, {
238
- width: '500px',
239
- data: { name: 'test', animal: 'test' }
240
- });
241
- dialogRef.afterClosed().subscribe((id) => {
242
- if (id) {
243
- this.entryService.getUnpublishedById(id).subscribe((result) => {
244
- const entry = result;
245
- this.entryService.currentlyEditedEntry.next(entry);
246
- localStorage.setItem(EntryCreatorComponent.CURRENT_ENTRY, JSON.stringify(entry));
247
- this.entry = entry;
248
- });
249
- }
250
- });
251
- }
252
- postPublishCallback() {
253
- this.entry = new Entry();
254
- this.entry.title = EntryCreatorComponent.DEFAULT_NEW_ENTRY_TITLE;
255
- this.entry.published = false;
256
- this.entry.version = 1;
257
- this.entryService.currentlyEditedEntry.next(this.entry);
258
- localStorage.setItem(EntryCreatorComponent.CURRENT_ENTRY, JSON.stringify(this.entry));
259
- this.entryService.create(this.entry).subscribe((next) => {
260
- this.tags = [];
261
- this.refreshTags();
262
- });
263
- }
264
- cancelScheduling() {
265
- this.entry.future_publish_date = null;
266
- this.entry.should_publish_in_future = false;
267
- this.scheduling = false;
268
- this.onChange();
269
- }
270
- exposeScheduling() {
271
- const scheduledDate = new Date();
272
- scheduledDate.setDate(scheduledDate.getDate() + 1);
273
- this.entry.future_publish_date = scheduledDate;
274
- this.setTime(this.customScheduleTime);
275
- this.entry.should_publish_in_future = true;
276
- this.scheduling = true;
277
- this.onChange();
278
- }
279
- publish() {
280
- const publish = confirm('Are you sure you want to publish? Once an article is published it is available to everyone.');
281
- if (publish) {
282
- this.entry.published = true;
283
- this.entry.publish_date = new Date();
284
- this.entry.edit_date = new Date();
285
- this.entryService.updateUnpublishedEntry(this.entry).subscribe(this.postPublishCallback.bind(this));
286
- }
287
- }
288
- delete() {
289
- const confirmDelete = confirm('Are you sure you want to delete this draft? Once it is deleted it cannot be recovered.');
290
- if (confirmDelete) {
291
- this.entryService.delete(this.entry).subscribe(() => {
292
- this.entry = null;
293
- });
294
- }
295
- }
296
- onDateChange() {
297
- this.entry.future_publish_date.setHours(this.hours);
298
- this.entry.future_publish_date.setMinutes(this.minutes);
299
- this.onChange();
300
- }
301
- setTime(e) {
302
- const firstTimeSplit = e.split(' ');
303
- const secondTimeSplit = firstTimeSplit[0].split(':');
304
- this.hours = Number(secondTimeSplit[0]);
305
- this.minutes = Number(secondTimeSplit[1]);
306
- if (firstTimeSplit[1] === 'PM') {
307
- this.hours = Number(this.hours) + 12;
308
- }
309
- this.entry.future_publish_date.setHours(this.hours);
310
- this.entry.future_publish_date.setMinutes(this.minutes);
311
- this.onChange();
312
- }
313
- }
314
- EntryCreatorComponent.CURRENT_ENTRY = 'current_entry';
315
- EntryCreatorComponent.DEFAULT_NEW_ENTRY_TITLE = 'A New Entry';
316
- EntryCreatorComponent.decorators = [
317
- { type: Component, args: [{
318
- selector: 'app-entry-creator',
319
- template: "<div class=\"section creator fields\">\n <form #createForm=\"ngForm\" (change)=\"onChange()\" *ngIf=\"this.entry\">\n <div class=\"form-group\">\n <mat-form-field class=\"full-width\">\n <mat-label>Title</mat-label>\n <input matInput\n [(ngModel)]=\"entry.title\"\n name=\"title\">\n </mat-form-field>\n </div>\n <mat-card class=\"form-section tags\">\n <div>\n <mat-form-field class=\"full-width\" hintLabel=\"Use a comma to seperate different tags\">\n <mat-chip-list #tagList aria-label=\"Tags\">\n <mat-chip\n *ngFor=\"let tag of tags\"\n [selectable]=\"selectable\"\n [removable]=\"removable\"\n (removed)=\"remove(tag)\">\n {{tag}}\n <mat-icon matChipRemove *ngIf=\"removable\">cancel</mat-icon>\n </mat-chip>\n <input\n matInput\n placeholder=\"Tags...\"\n #tagInput\n [formControl]=\"tagCtrl\"\n [matAutocomplete]=\"tagauto\"\n [matChipInputFor]=\"tagList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"add($event)\">\n </mat-chip-list>\n <mat-autocomplete #tagauto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n <mat-option *ngFor=\"let tag of filtered_tags | async\" [value]=\"tag\">\n {{tag}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n </div>\n </mat-card>\n <mat-card class=\"form-section\" *ngFor=\"let section of entry.sections\">\n <div>\n <mat-form-field class=\"full-width\">\n <mat-label>Subheading</mat-label>\n <input matInput\n [(ngModel)]=\"section.subheading\"\n name=\"{{section.id}}-subheading\">\n </mat-form-field>\n <div class=\"form-content\" *ngFor=\"let content of section.contents\">\n <div class=\"form-group\">\n <mat-radio-group\n aria-label=\"Select the Content Type\"\n name=\"{{content.id}}-content-type\"\n class=\"radio-group\"\n [(ngModel)]=\"content.type\">\n <mat-radio-button\n *ngFor=\"let value of Object.values(ContentType)\"\n class=\"radio-button\"\n [value]=\"value\">{{value}}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n <ng-container [ngSwitch]=\"content.type\">\n <ng-container *ngSwitchCase=\"ContentType.URL\">\n <mat-form-field class=\"full-width\">\n <mat-label>Value</mat-label>\n <input\n matInput\n name=\"{{content.id}}-content-value\"\n [(ngModel)]=\"content.value\">\n </mat-form-field>\n <mat-form-field class=\"full-width\">\n <mat-label>Title</mat-label>\n <input\n matInput\n name=\"{{content.id}}-content-title\"\n [(ngModel)]=\"content.title\">\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase=\"ContentType.TEXT\">\n <mat-form-field class=\"full-width\">\n <mat-label>Value</mat-label>\n <textarea matInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"3\"\n cdkAutosizeMaxRows=\"20\"\n name=\"{{content.id}}-content-value\"\n [(ngModel)]=\"content.value\"\n ></textarea>\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase=\"ContentType.HTML\">\n <mat-form-field class=\"full-width\">\n <mat-label>Value</mat-label>\n <textarea matInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"3\"\n cdkAutosizeMaxRows=\"20\"\n name=\"{{content.id}}-content-value\"\n [(ngModel)]=\"content.value\"\n ></textarea>\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase=\"ContentType.CODE\">\n <mat-form-field class=\"full-width\">\n <mat-label>Value</mat-label>\n <textarea matInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"10\"\n cdkAutosizeMaxRows=\"100\"\n name=\"{{content.id}}-content-value\"\n [(ngModel)]=\"content.value\"\n ></textarea>\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase=\"ContentType.IMAGE\">\n <mat-form-field class=\"full-width\">\n <mat-label>Value</mat-label>\n <input\n matInput\n name=\"{{content.id}}-content-value\"\n [(ngModel)]=\"content.value\">\n </mat-form-field>\n <mat-form-field class=\"full-width\">\n <mat-label>Value</mat-label>\n <input\n matInput\n name=\"{{content.id}}-content-source\"\n [(ngModel)]=\"content.value\">\n </mat-form-field>\n <mat-form-field class=\"full-width\">\n <mat-label>Description</mat-label>\n <input\n matInput\n name=\"{{content.id}}-content-description\"\n [(ngModel)]=\"content.description\">\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase=\"ContentType.MEDIA\">\n <div class=\"full-width\">\n <ng-container *ngIf=\"content.value\">\n <mat-form-field class=\"full-width\">\n <mat-label>Value</mat-label>\n <input\n matInput\n name=\"{{content.id}}-content-value\"\n [(ngModel)]=\"content.value\">\n </mat-form-field>\n <mat-form-field class=\"full-width\">\n <mat-label>Description</mat-label>\n <input\n matInput\n name=\"{{content.id}}-content-description\"\n [(ngModel)]=\"content.description\">\n </mat-form-field>\n </ng-container>\n <ng-container *ngIf=\"content.additional\">\n <ng-container *ngFor=\"let add of content.additional\">\n <mat-form-field class=\"full-width\">\n <mat-label>{{add.key}}</mat-label>\n <input\n matInput\n name=\"{{content.id}}-content-{{add.key}}\"\n [(ngModel)]=\"add.value\"\n [disabled]=\"true\"\n >\n </mat-form-field>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!content.value\">\n <button mat-raised-button (click)=startUploader(content)>Upload</button>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n <button mat-raised-button (click)=removeContent(content)>Remove Content</button>\n <button mat-raised-button (click)=\"addContent(section)\">+ Add Content</button>\n </div>\n <button mat-raised-button (click)=\"removeSection(section)\">Remove Section</button>\n <button mat-raised-button (click)=\"addContent(section)\" *ngIf=\"section.contents.length === 0\">+ Add\n Content\n </button>\n <button mat-raised-button (click)=\"addSection()\">+ Add Section</button>\n </div>\n\n </mat-card>\n <button mat-raised-button (click)=\"addSection()\" *ngIf=\"entry.sections?.length === 0\">+ Add Section</button>\n <button mat-raised-button (click)=\"addSection()\" *ngIf=\"!entry.sections\">+ Add Section</button>\n\n <div class=\"controls\">\n <button mat-raised-button (click)=\"resetDate()\">Reset the Date</button>\n <button mat-raised-button (click)=\"delete()\">Delete</button>\n <button mat-raised-button [disabled]=\"scheduling\" (click)=\"publish()\">Publish</button>\n <button mat-raised-button [disabled]=\"scheduling\" (click)=\"exposeScheduling()\">Schedule</button>\n <button mat-raised-button (click)=\"startNew()\">New</button>\n </div>\n <p *ngIf=\"scheduling\">Publishing is disabled while scheduling is being used.</p>\n\n <mat-card [hidden]=\"!scheduling\">\n <h4>\n Scheduling Options\n </h4>\n\n <div class=\"form-group\">\n <mat-form-field class=\"full-width\">\n <mat-label>Date</mat-label>\n <input\n #futurePublishDate\n matInput\n [matDatepicker]=\"picker\"\n [min]=\"today\"\n (dateInput)=\"onDateChange()\"\n (dateChange)=\"onDateChange()\"\n [(ngModel)]=\"entry.future_publish_date\"\n name=\"future-publish-date\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker\n #picker></mat-datepicker>\n </mat-form-field>\n\n <mat-label>Time</mat-label>\n <ngx-timepicker-field\n [defaultTime]=\"customScheduleTime\"\n [format]=\"12\"\n [buttonAlign]=\"'left'\"\n (timeChanged)=\"setTime($event)\"\n ></ngx-timepicker-field>\n <p>Times are represented in your local time zone</p>\n </div>\n\n <div mat-dialog-actions>\n <div class=\"controls\">\n <button mat-raised-button (click)=\"cancelScheduling()\">Cancel Scheduling</button>\n </div>\n </div>\n <p>This post will be published as soon as its scheduled date and time arrive. No further action is needed by you. If you do not\n want to use scheduling, you can cancel scheduling and manually publish.</p>\n </mat-card>\n </form>\n <div class=\"controls\">\n <button mat-raised-button (click)=\"seeEntries()\">See Entries</button>\n <button *ngIf=\"!this.entry\" mat-raised-button (click)=\"startNew()\">New</button>\n </div>\n</div>\n",
320
- styles: [".creator{min-height:calc(100vh - 100px)}form{padding:20px}.content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}button{margin:4px}.radio-group{display:flex;flex-direction:column;margin:15px 0}.radio-button{margin:4px}.full-width{width:100%}.content-card{margin:0 0 10px}.form-section{margin-bottom:10px}.form-content:not(:last-child){border-bottom:1px dotted #aaa;padding-bottom:10px}.controls{display:inline-block;padding:10px;width:100%}[hidden]{display:none!important}"]
321
- },] }
322
- ];
323
- EntryCreatorComponent.ctorParameters = () => [
324
- { type: EntryService },
325
- { type: TagService },
326
- { type: IdentityService },
327
- { type: ChangeDetectorRef },
328
- { type: MatDialog }
329
- ];
330
- EntryCreatorComponent.propDecorators = {
331
- tagInput: [{ type: ViewChild, args: ['tagInput',] }],
332
- matAutocomplete: [{ type: ViewChild, args: ['tagauto',] }],
333
- allowedMimeTypes: [{ type: Input }],
334
- uploadUrlKey: [{ type: Input }]
335
- };
336
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktY3JlYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2JqYW1lc29uL0RldmVsb3BtZW50L2Jsb2cvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9lbnRyeS1jcmVhdG9yL2VudHJ5LWNyZWF0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFvQyxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFdkgsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBR3BELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFFaEUsT0FBTyxFQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRCxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSx3RUFBd0UsQ0FBQztBQUNwSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sa0VBQWtFLENBQUM7QUFFM0csT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxP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LEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFDLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQzs7QUE1WE0sbUNBQWEsR0FBRyxlQUFlLENBQUM7QUFDaEMsNkNBQXVCLEdBQUcsYUFBYSxDQUFDOztZQVJsRCxTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsaXViQUE2Qzs7YUFFaEQ7OztZQXJCTyxZQUFZO1lBYVosVUFBVTtZQVpWLGVBQWU7WUFUZixpQkFBaUI7WUFZakIsU0FBUzs7O3VCQWtDWixTQUFTLFNBQUMsVUFBVTs4QkFDcEIsU0FBUyxTQUFDLFNBQVM7K0JBY25CLEtBQUs7MkJBVUwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q09NTUEsIEVOVEVSLCBUQUJ9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0VudHJ5fSBmcm9tICcuLi8uLi9kYXRhL2VudHJ5JztcbmltcG9ydCB7U2VjdGlvbn0gZnJvbSAnLi4vLi4vZGF0YS9zZWN0aW9uJztcbmltcG9ydCB7Q29udGVudH0gZnJvbSAnLi4vLi4vZGF0YS9jb250ZW50JztcbmltcG9ydCB7Q29udGVudFR5cGV9IGZyb20gJy4uLy4uL2RhdGEvY29udGVudC10eXBlJztcbmltcG9ydCB7SWRlbnRpdHl9IGZyb20gJy4uLy4uL2RhdGEvaWRlbnRpdHknO1xuXG5pbXBvcnQge0VudHJ5U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50cnkuc2VydmljZSc7XG5pbXBvcnQge0lkZW50aXR5U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvaWRlbnRpdHkuc2VydmljZSc7XG5cbmltcG9ydCB7bWFwIGFzIGxvTWFwLCBmaWx0ZXJ9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7TWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCwgTWF0QXV0b2NvbXBsZXRlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtFbnRyeVNlbGVjdG9yRGlhbG9nQ29tcG9uZW50fSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VudHJ5LXNlbGVjdG9yLWRpYWxvZy9lbnRyeS1zZWxlY3Rvci1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7RmlsZVVwbG9hZGVyfSBmcm9tICduZzItZmlsZS11cGxvYWQnO1xuaW1wb3J0IHtNZWRpYVVwbG9hZE1vZGFsQ29tcG9uZW50fSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lZGlhLXVwbG9hZC1tb2RhbC9tZWRpYS11cGxvYWQtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgc3RhcnRXaXRofSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0Zvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge01hdENoaXBJbnB1dEV2ZW50fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQge1RhZ1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RhZy5zZXJ2aWNlJztcbmltcG9ydCB7U2NoZWR1bGVQdWJsaXNoRGlhbG9nQ29tcG9uZW50fSBmcm9tICcuLi9zY2hlZHVsZS1wdWJsaXNoLWRpYWxvZy9zY2hlZHVsZS1wdWJsaXNoLWRpYWxvZy5jb21wb25lbnQnO1xuY29uc3Qgc2x1Z2lmeSA9IHJlcXVpcmUoJ3NsdWdpZnknKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtZW50cnktY3JlYXRvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VudHJ5LWNyZWF0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2VudHJ5LWNyZWF0b3IuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFbnRyeUNyZWF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgc3RhdGljIENVUlJFTlRfRU5UUlkgPSAnY3VycmVudF9lbnRyeSc7XG4gICAgc3RhdGljIERFRkFVTFRfTkVXX0VOVFJZX1RJVExFID0gJ0EgTmV3IEVudHJ5JztcblxuICAgIENvbnRlbnRUeXBlID0gQ29udGVudFR5cGU7XG4gICAgT2JqZWN0ID0gT2JqZWN0O1xuXG4gICAgZW50cnk6IEVudHJ5ID0gbmV3IEVudHJ5KCk7XG4gICAgbWU6IElkZW50aXR5O1xuXG4gICAgc2VwYXJhdG9yS2V5c0NvZGVzOiBudW1iZXJbXSA9IFtFTlRFUiwgQ09NTUEsIFRBQl07XG4gICAgcmVtb3ZhYmxlID0gdHJ1ZTtcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgICBhbGxfdGFnczogc3RyaW5nW10gPSBbJ0FuZ3VsYXInLCAnQmFzaCcsICdNYWNPUycsICdUeXBlc2NyaXB0JywgJ05QTScsICdEYXRhYmFzZXMnXTtcbiAgICBmaWx0ZXJlZF90YWdzOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgICBAVmlld0NoaWxkKCd0YWdJbnB1dCcpIHRhZ0lucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoJ3RhZ2F1dG8nKSBtYXRBdXRvY29tcGxldGU6IE1hdEF1dG9jb21wbGV0ZTtcblxuICAgIHRhZ0N0cmwgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgICBwdWJsaXNoRGF0ZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICAgIHRhZ190b19hZGQ6IHN0cmluZztcbiAgICBzZWxlY3RhYmxlID0gZmFsc2U7XG5cbiAgICBzY2hlZHVsaW5nID0gZmFsc2U7XG4gICAgY3VzdG9tU2NoZWR1bGVUaW1lID0gJyc7XG4gICAgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIGhvdXJzOiBudW1iZXI7XG4gICAgbWludXRlczogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgYWxsb3dlZE1pbWVUeXBlcyA9IFtcbiAgICAgICAgICAgICAgICAnaW1hZ2UvanBlZycsXG4gICAgICAgICAgICAgICAgJ2ltYWdlL2dpZicsXG4gICAgICAgICAgICAgICAgJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICAgICAgJ2ltYWdlL2pwZycsXG4gICAgICAgICAgICAgICAgJ3ZpZGVvL21wNCcsXG4gICAgICAgICAgICAgICAgJ3ZpZGVvL3dlYm0nLFxuICAgICAgICAgICAgICAgICd2aWRlby9vZ2cnLFxuICAgIF07XG5cbiAgICBASW5wdXQoKSB1cGxvYWRVcmxLZXkgPSAncGF0aF90b19maWxlJztcblxuICAgIHB1YmxpYyB1cGxvYWRlcjogRmlsZVVwbG9hZGVyID0gbmV3IEZpbGVVcGxvYWRlcihcbiAgICAgICAge1xuICAgICAgICAgICAgdXJsOiAnL2ZpbGVfYXBpL3VwbG9hZHMvY3JlYXRlX2ltYWdlLycsXG4gICAgICAgICAgICBpdGVtQWxpYXM6ICdmaWxlJyxcbiAgICAgICAgICAgIGF1dGhUb2tlbjogJycsXG4gICAgICAgICAgICBoZWFkZXJzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnWC1DU1JGVG9rZW4nLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogRW50cnlDcmVhdG9yQ29tcG9uZW50LmdldENvb2tpZSgnY3NyZnRva2VuJylcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQYXJhbWV0ZXI6IHtcbiAgICAgICAgICAgICAgICAnY3NyZl90b2tlbic6IEVudHJ5Q3JlYXRvckNvbXBvbmVudC5nZXRDb29raWUoJ2NzcmZ0b2tlbicpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlQWZ0ZXJVcGxvYWQ6IHRydWUsXG4gICAgICAgICAgICBhbGxvd2VkTWltZVR5cGU6IHRoaXMuYWxsb3dlZE1pbWVUeXBlcyxcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBzdGF0aWMgZ2V0Q29va2llKG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBjYTogQXJyYXk8c3RyaW5nPiA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuICAgICAgICBjb25zdCBjYUxlbjogbnVtYmVyID0gY2EubGVuZ3RoO1xuICAgICAgICBjb25zdCBjb29raWVOYW1lID0gYCR7bmFtZX09YDtcbiAgICAgICAgbGV0IGM6IHN0cmluZztcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhTGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGMgPSBjYVtpXS5yZXBsYWNlKC9eXFxzKy9nLCAnJyk7XG4gICAgICAgICAgICBpZiAoYy5pbmRleE9mKGNvb2tpZU5hbWUpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuc3Vic3RyaW5nKGNvb2tpZU5hbWUubGVuZ3RoLCBjLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVudHJ5U2VydmljZTogRW50cnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRhZ1NlcnZpY2U6IFRhZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgaWRlbnRpdHlTZXJ2aWNlOiBJZGVudGl0eVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICApIHtcbiAgICAgICAgY29uc3Qgc2NoZWR1bGVkRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoaXMuY3VzdG9tU2NoZWR1bGVUaW1lID0gc2NoZWR1bGVkRGF0ZS5nZXRIb3VycygpICsgJzonICsgc2NoZWR1bGVkRGF0ZS5nZXRNaW51dGVzKCkgKyAnIEFNJztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9maWx0ZXIodmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxfdGFncy5maWx0ZXIodGFnID0+IHRhZy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsdWUpID09PSAwKTtcbiAgICB9XG5cbiAgICBhZGQoZXZlbnQ6IE1hdENoaXBJbnB1dEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQuaW5wdXQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XG5cbiAgICAgICAgLy8gQWRkIG91ciB0YWdcbiAgICAgICAgaWYgKCh2YWx1ZSB8fCAnJykudHJpbSgpKSB7XG4gICAgICAgICAgICB0aGlzLnRhZ3MucHVzaCh2YWx1ZS50cmltKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzZXQgdGhlIGlucHV0IHZhbHVlXG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGFnQ3RybC5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIHJlbW92ZShmcnVpdDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50YWdzLmluZGV4T2YoZnJ1aXQpO1xuXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnRhZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgc2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWdzLnB1c2goZXZlbnQub3B0aW9uLnZpZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMudGFnSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICB0aGlzLnRhZ0N0cmwuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICByZWZyZXNoVGFncygpIHtcbiAgICAgICAgdGhpcy50YWdTZXJ2aWNlLmdldCgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWxsX3RhZ3MgPSBsb01hcChyZXNwb25zZS5yZXN1bHRzLCAodCkgPT4gdC5sYWJlbCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkX3RhZ3MgPSB0aGlzLnRhZ0N0cmwudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgICAgIG1hcCgodGFnOiBzdHJpbmcgfCBudWxsKSA9PiB0YWcgPyB0aGlzLl9maWx0ZXIodGFnKSA6IHRoaXMuYWxsX3RhZ3Muc2xpY2UoKSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVOZXdFbnRyeSgpIHtcbiAgICAgICAgdGhpcy5lbnRyeSA9IG5ldyBFbnRyeSgpO1xuICAgICAgICB0aGlzLmVudHJ5LnRpdGxlID0gRW50cnlDcmVhdG9yQ29tcG9uZW50LkRFRkFVTFRfTkVXX0VOVFJZX1RJVExFO1xuICAgICAgICB0aGlzLmVudHJ5LnB1Ymxpc2hlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVudHJ5LnZlcnNpb24gPSAxO1xuXG4gICAgICAgIHRoaXMuZW50cnlTZXJ2aWNlLmNyZWF0ZSh0aGlzLmVudHJ5KS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVudHJ5ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICB0aGlzLmVudHJ5LnNvcnQoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50cnlTZXJ2aWNlLmN1cnJlbnRseUVkaXRlZEVudHJ5Lm5leHQodGhpcy5lbnRyeSk7XG4gICAgICAgICAgICB9LCAxMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJlZnJlc2hUYWdzKCk7XG4gICAgICAgIHRoaXMuaWRlbnRpdHlTZXJ2aWNlLmdldE1lKCkuc3Vic2NyaWJlKChtZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZSA9IG1lO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzYXZlZEVudHJ5ID1cbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKEVudHJ5Q3JlYXRvckNvbXBvbmVudC5DVVJSRU5UX0VOVFJZKTtcblxuICAgICAgICBpZiAoc2F2ZWRFbnRyeSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyeSA9IG5ldyBFbnRyeShKU09OLnBhcnNlKHNhdmVkRW50cnkpKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZW50cnkuc2hvdWxkX3B1Ymxpc2hfaW5fZnV0dXJlICYmIHRoaXMuZW50cnkuZnV0dXJlX3B1Ymxpc2hfZGF0ZSA8IG5ldyBEYXRlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU5ld0VudHJ5KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZW50cnkuc29ydCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZW50cnkuc2hvdWxkX3B1Ymxpc2hfaW5fZnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVzdG9yZSBzY2hlZHVsaW5nIHNldHRpbmdzXG4gICAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBsZXQgaG91cnMgPSB0aGlzLmVudHJ5LmZ1dHVyZV9wdWJsaXNoX2RhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgICBsZXQgbWludXRlczogc3RyaW5nIHwgbnVtYmVyID0gdGhpcy5lbnRyeS5mdXR1cmVfcHVibGlzaF9kYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhbXBtID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJztcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgaG91cnMgPSBob3VycyAlIDEyO1xuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGhvdXJzID8gaG91cnMgOiAxMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWludXRlcyA9IG1pbnV0ZXMgPCAxMCA/ICcwJyArIG1pbnV0ZXMgOiBtaW51dGVzO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tU2NoZWR1bGVUaW1lID0gaG91cnMgKyAnOicgKyBtaW51dGVzICsgJyAnICsgYW1wbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50cnlTZXJ2aWNlLmN1cnJlbnRseUVkaXRlZEVudHJ5Lm5leHQodGhpcy5lbnRyeSk7XG4gICAgICAgICAgICB9LCAxMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU5ld0VudHJ5KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwbG9hZGVyLm9uQ29tcGxldGVJdGVtID0gKGl0ZW0sIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zdCByZXNwb25zZU9iaiA9IEpTT04ucGFyc2UocmVzcG9uc2UpXG4gICAgICAgICAgICAvLyB0aGlzLnVwbG9hZElkID0gcmVzcG9uc2VPYmouaWQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy51cGxvYWRlci5vbldoZW5BZGRpbmdGaWxlRmFpbGVkID0gKGl0ZW0sIHVwbG9hZEZpbHRlciwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcy5lcnJvciA9ICdUaGlzIGZpbGUgaXMgbm90IGEgc3VwcG9ydGVkIG1pbWV0eXBlLidcbiAgICAgICAgICAgIC8vIHRoaXMudXBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy50YWdzID0gdGhpcy5lbnRyeS50YWdzO1xuICAgIH1cblxuICAgIG9uRmlsZVNlbGVjdGVkKGUpIHtcbiAgICAgICAgdGhpcy51cGxvYWRlci51cGxvYWRBbGwoKTtcbiAgICB9XG5cbiAgICBzdGFydFVwbG9hZGVyKGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihNZWRpYVVwbG9hZE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuYWxsb3dlZE1pbWVUeXBlcyA9IHRoaXMuYWxsb3dlZE1pbWVUeXBlcztcbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLnVwbG9hZFVybEtleSA9IHRoaXMudXBsb2FkVXJsS2V5O1xuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29udGVudC52YWx1ZSA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5pbWdMaW5rO1xuICAgICAgICAgICAgY29udGVudC5hZGRpdGlvbmFsID0gW107XG4gICAgICAgICAgICBjb250ZW50LmFkZGl0aW9uYWwucHVzaCh7a2V5OiBDb250ZW50LktFWV9NSU1FVFlQRSwgdmFsdWU6IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5taW1lVHlwZX0pO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGRTZWN0aW9uKCkge1xuICAgICAgICB0aGlzLmVudHJ5LnNlY3Rpb25zLnB1c2gobmV3IFNlY3Rpb24oKSk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICByZW1vdmVTZWN0aW9uKHNlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlID0gY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIHNlY3Rpb24/Jyk7XG4gICAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgICAgIHRoaXMuZW50cnkuc2VjdGlvbnMgPVxuICAgICAgICAgICAgICAgIGZpbHRlcih0aGlzLmVudHJ5LnNlY3Rpb25zLCAoc2N0KSA9PiBzY3QuaWQgIT09IHNlY3Rpb24uaWQpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkQ29udGVudChzZWN0aW9uKSB7XG4gICAgICAgIHNlY3Rpb24uY29udGVudHMucHVzaChuZXcgQ29udGVudCgpKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIHJlbW92ZUNvbnRlbnQoY29udGVudCkge1xuICAgICAgICBjb25zdCByZW1vdmUgPSBjb25maXJtKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgY29udGVudD8nKTtcblxuICAgICAgICBpZiAocmVtb3ZlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5lbnRyeS5zZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIHNlY3Rpb24uY29udGVudHMgPSBmaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uY29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgIChjdCkgPT4gY3QuaWQgIT09IGNvbnRlbnQuaWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuZW50cnkuc2x1ZyA9IHNsdWdpZnkodGhpcy5lbnRyeS50aXRsZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgICBFbnRyeUNyZWF0b3JDb21wb25lbnQuQ1VSUkVOVF9FTlRSWSxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZW50cnkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZW50cnkuc29ydCgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuZW50cnlTZXJ2aWNlLmN1cnJlbnRseUVkaXRlZEVudHJ5Lm5leHQodGhpcy5lbnRyeSk7XG4gICAgICAgIHRoaXMuZW50cnlTZXJ2aWNlLl9jdXJyZW50bHlFZGl0ZWRFbnRyeSA9IHRoaXMuZW50cnk7XG4gICAgfVxuXG4gICAgcmVzZXREYXRlKCkge1xuICAgICAgICB0aGlzLmVudHJ5LmNyZWF0ZV9kYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5lbnRyeS5lZGl0X2RhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBzdGFydE5ldygpIHtcbiAgICAgICAgY29uc3QgZmluaXNoID0gY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdXIgZmluaXNoZWQ/IFRoZSBKU09OIGFuZCBlbnRyeSBkaXNwbGF5ZWQgd2lsbCBiZSByZW1vdmVkLiBNYWtlIHN1cmUgeW91IGhhdmUgYWxyZWFkeSBjb3BpZWQgaXQuJyk7XG4gICAgICAgIGlmIChmaW5pc2gpIHtcblxuICAgICAgICAgICAgdGhpcy5lbnRyeSA9IG5ldyBFbnRyeSgpO1xuICAgICAgICAgICAgdGhpcy5lbnRyeS50aXRsZSA9IEVudHJ5Q3JlYXRvckNvbXBvbmVudC5ERUZBVUxUX05FV19FTlRSWV9USVRMRTtcbiAgICAgICAgICAgIHRoaXMuZW50cnkucHVibGlzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVudHJ5LnZlcnNpb24gPSAxO1xuXG4gICAgICAgICAgICB0aGlzLmVudHJ5U2VydmljZS5jdXJyZW50bHlFZGl0ZWRFbnRyeS5uZXh0KHRoaXMuZW50cnkpO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgICAgICAgRW50cnlDcmVhdG9yQ29tcG9uZW50LkNVUlJFTlRfRU5UUlksXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5lbnRyeSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmVudHJ5U2VydmljZS5jcmVhdGUodGhpcy5lbnRyeSkuc3Vic2NyaWJlKChuZXh0KSA9PiB7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlZUVudHJpZXMoKSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRW50cnlTZWxlY3RvckRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICAgICAgICBkYXRhOiB7bmFtZTogJ3Rlc3QnLCBhbmltYWw6ICd0ZXN0J31cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChpZCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRyeVNlcnZpY2UuZ2V0VW5wdWJsaXNoZWRCeUlkKGlkKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyeVNlcnZpY2UuY3VycmVudGx5RWRpdGVkRW50cnkubmV4dChlbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgICAgICAgICAgICAgRW50cnlDcmVhdG9yQ29tcG9uZW50LkNVUlJFTlRfRU5UUlksXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShlbnRyeSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyeSA9IGVudHJ5O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwb3N0UHVibGlzaENhbGxiYWNrKCkge1xuICAgICAgICB0aGlzLmVudHJ5ID0gbmV3IEVudHJ5KCk7XG4gICAgICAgIHRoaXMuZW50cnkudGl0bGUgPSBFbnRyeUNyZWF0b3JDb21wb25lbnQuREVGQVVMVF9ORVdfRU5UUllfVElUTEU7XG4gICAgICAgIHRoaXMuZW50cnkucHVibGlzaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW50cnkudmVyc2lvbiA9IDE7XG4gICAgICAgIHRoaXMuZW50cnlTZXJ2aWNlLmN1cnJlbnRseUVkaXRlZEVudHJ5Lm5leHQodGhpcy5lbnRyeSk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgRW50cnlDcmVhdG9yQ29tcG9uZW50LkNVUlJFTlRfRU5UUlksXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmVudHJ5KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmVudHJ5U2VydmljZS5jcmVhdGUodGhpcy5lbnRyeSkuc3Vic2NyaWJlKChuZXh0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFRhZ3MoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FuY2VsU2NoZWR1bGluZygpIHtcbiAgICAgICAgdGhpcy5lbnRyeS5mdXR1cmVfcHVibGlzaF9kYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbnRyeS5zaG91bGRfcHVibGlzaF9pbl9mdXR1cmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zY2hlZHVsaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBleHBvc2VTY2hlZHVsaW5nKCkge1xuICAgICAgICBjb25zdCBzY2hlZHVsZWREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgc2NoZWR1bGVkRGF0ZS5zZXREYXRlKHNjaGVkdWxlZERhdGUuZ2V0RGF0ZSgpICsgMSk7XG5cbiAgICAgICAgdGhpcy5lbnRyeS5mdXR1cmVfcHVibGlzaF9kYXRlID0gc2NoZWR1bGVkRGF0ZTtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHRoaXMuY3VzdG9tU2NoZWR1bGVUaW1lKTtcblxuICAgICAgICB0aGlzLmVudHJ5LnNob3VsZF9wdWJsaXNoX2luX2Z1dHVyZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2NoZWR1bGluZyA9ICB0cnVlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKCk7XG4gICAgfVxuICAgIHB1Ymxpc2goKSB7XG4gICAgICAgIGNvbnN0IHB1Ymxpc2ggPSBjb25maXJtKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcHVibGlzaD8gT25jZSBhbiBhcnRpY2xlIGlzIHB1Ymxpc2hlZCBpdCBpcyBhdmFpbGFibGUgdG8gZXZlcnlvbmUuJyk7XG4gICAgICAgIGlmIChwdWJsaXNoKSB7XG4gICAgICAgICAgICB0aGlzLmVudHJ5LnB1Ymxpc2hlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVudHJ5LnB1Ymxpc2hfZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB0aGlzLmVudHJ5LmVkaXRfZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB0aGlzLmVudHJ5U2VydmljZS51cGRhdGVVbnB1Ymxpc2hlZEVudHJ5KHRoaXMuZW50cnkpLnN1YnNjcmliZSh0aGlzLnBvc3RQdWJsaXNoQ2FsbGJhY2suYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlKCkge1xuICAgICAgICBjb25zdCBjb25maXJtRGVsZXRlID0gY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGRyYWZ0PyBPbmNlIGl0IGlzIGRlbGV0ZWQgaXQgY2Fubm90IGJlIHJlY292ZXJlZC4nKTtcbiAgICAgICAgaWYgKGNvbmZpcm1EZWxldGUpIHtcbiAgICAgICAgICAgIHRoaXMuZW50cnlTZXJ2aWNlLmRlbGV0ZSh0aGlzLmVudHJ5KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50cnkgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25EYXRlQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmVudHJ5LmZ1dHVyZV9wdWJsaXNoX2RhdGUuc2V0SG91cnModGhpcy5ob3Vycyk7XG4gICAgICAgIHRoaXMuZW50cnkuZnV0dXJlX3B1Ymxpc2hfZGF0ZS5zZXRNaW51dGVzKHRoaXMubWludXRlcyk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKTtcbiAgICB9XG5cblxuICAgIHNldFRpbWUoZSkge1xuICAgICAgICBjb25zdCBmaXJzdFRpbWVTcGxpdCA9IGUuc3BsaXQoJyAnKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kVGltZVNwbGl0ID0gZmlyc3RUaW1lU3BsaXRbMF0uc3BsaXQoJzonKTtcbiAgICAgICAgdGhpcy5ob3VycyA9IE51bWJlcihzZWNvbmRUaW1lU3BsaXRbMF0pO1xuICAgICAgICB0aGlzLm1pbnV0ZXMgPSBOdW1iZXIoc2Vjb25kVGltZVNwbGl0WzFdKTtcblxuICAgICAgICBpZiAoZmlyc3RUaW1lU3BsaXRbMV0gPT09ICdQTScpIHtcbiAgICAgICAgICAgIHRoaXMuaG91cnMgPSBOdW1iZXIodGhpcy5ob3VycykgKyAxMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW50cnkuZnV0dXJlX3B1Ymxpc2hfZGF0ZS5zZXRIb3Vycyh0aGlzLmhvdXJzKTtcbiAgICAgICAgdGhpcy5lbnRyeS5mdXR1cmVfcHVibGlzaF9kYXRlLnNldE1pbnV0ZXModGhpcy5taW51dGVzKTtcblxuICAgICAgICB0aGlzLm9uQ2hhbmdlKCk7XG4gICAgfVxufVxuIl19
@@ -1,108 +0,0 @@
1
- import { Component, Input, NgZone } from '@angular/core';
2
- import { Router } from '@angular/router';
3
- import { Content } from '../../data/content';
4
- import { ContentType } from '../../data/content-type';
5
- import { IdentityService } from '../../services/identity.service';
6
- import { EntryService } from '../../services/entry.service';
7
- import { CommentService } from '../../services/comment.service';
8
- import { PrismService } from '../../services/prism.service';
9
- import { EntryCreatorComponent } from '../../components/entry-creator/entry-creator.component';
10
- export class EntryRendererComponent {
11
- constructor(prismService, ngZone, identityService, commentService, router, entryService) {
12
- this.prismService = prismService;
13
- this.ngZone = ngZone;
14
- this.identityService = identityService;
15
- this.commentService = commentService;
16
- this.router = router;
17
- this.entryService = entryService;
18
- this.ContentType = ContentType;
19
- this.comments = [];
20
- this.commentText = '';
21
- this.alert = alert;
22
- this.editMode = false;
23
- }
24
- ngOnInit() {
25
- this.identityService.getMe().subscribe((me) => {
26
- this.me = me;
27
- });
28
- this.commentService.getComments(this.entry.id).subscribe((response) => {
29
- this.comments = response.results;
30
- for (const comment of this.comments) {
31
- comment.date_obj = new Date(comment.created_on);
32
- }
33
- });
34
- }
35
- ngAfterViewChecked() {
36
- if (!this.editMode) {
37
- this.ngZone.runOutsideAngular(() => {
38
- try {
39
- this.prismService.highlightAll();
40
- }
41
- catch (e) {
42
- }
43
- });
44
- }
45
- }
46
- edit(entry) {
47
- entry.version++;
48
- entry.published = false;
49
- delete entry.publish_date;
50
- this.entryService.create(entry).subscribe((response) => {
51
- localStorage.setItem(EntryCreatorComponent.CURRENT_ENTRY, JSON.stringify(response));
52
- this.router.navigateByUrl('create(left-col:create//right-col:create)').then(() => {
53
- });
54
- });
55
- }
56
- postComment(e) {
57
- e.preventDefault();
58
- if (this.commentText !== '') {
59
- this.commentService.postComment({ entry: this.entry.id, content: this.commentText }).subscribe((comment) => {
60
- this.comments.push(comment);
61
- });
62
- this.commentText = '';
63
- }
64
- }
65
- mediaIsZip(content) {
66
- let mediaIsZip = false;
67
- if (content.additional) {
68
- for (const add of content.additional) {
69
- if (add.key === Content.KEY_MIMETYPE) {
70
- if (add.value === 'application/zip') {
71
- mediaIsZip = true;
72
- }
73
- }
74
- }
75
- }
76
- return mediaIsZip;
77
- }
78
- approve(comment) {
79
- comment.approved = !comment.approved;
80
- this.commentService.patchComment(Object.assign({}, { approved: true }, comment)).subscribe((rComment) => {
81
- });
82
- }
83
- unapprove(comment) {
84
- comment.approved = !comment.approved;
85
- this.commentService.patchComment(Object.assign({}, { approved: false }, comment)).subscribe((rComment) => {
86
- });
87
- }
88
- }
89
- EntryRendererComponent.decorators = [
90
- { type: Component, args: [{
91
- selector: 'app-entry-renderer',
92
- template: "<div>\n <h2>{{entry?.title}}</h2>\n <a *ngIf=\"me?.id === entry?.getProp('author_id')\" href=\"javascript:void(0)\" (click)=\"edit(entry)\"><h4>[Edit]</h4></a>\n <h3>Posted {{entry?.create_date.toString() | timeAgo}} on {{entry?.create_date?.getMonth() + 1}}/{{entry?.create_date?.getDate()}}/{{entry?.create_date?.getFullYear()}}</h3>\n <h5 *ngIf=\"entry?.showEditInformation()\">Article was last edited {{entry?.edit_date.toString() | timeAgo}}</h5>\n <br>\n <p *ngIf=\"entry?.tags?.length > 0\">Tags: <span *ngFor=\"let tag of entry?.tags; let last = last\">{{tag}}<ng-container *ngIf=\"!last\"> |\n </ng-container></span><span *ngIf=\"entry?.views\">, {{entry._friendly_views}} views</span></p>\n <br>\n\n <ng-container *ngFor=\"let section of entry?.sections\">\n <h4>{{section?.subheading}}</h4>\n <ng-container *ngFor=\"let content of section?.contents\">\n <ng-container [ngSwitch]=\"content.type\">\n <ng-container *ngSwitchCase=\"ContentType.CODE\">\n <pre><code class=\"language-ts\">{{content?.value}}</code></pre>\n </ng-container>\n <ng-container *ngSwitchCase=\"ContentType.URL\">\n <a [href]=\"content?.value\" target=\"_blank\">{{content.title}}</a><br>\n </ng-container>\n <ng-container *ngSwitchCase=\"ContentType.IMAGE\">\n <div class=\"restrict\">\n <div class=\"image\">\n <img [src]=\"content?.value\"/>\n </div>\n <div class=\"description\" *ngIf=\"content?.description\">{{content?.description}}</div>\n <div class=\"source\" *ngIf=\"content?.source\">\n <a [href]=\"content?.source\" [target]=\"'_blank'\">Source: {{content?.source}}</a>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ContentType.MEDIA\">\n <ng-container *ngIf=\"mediaIsZip(content)\">\n <div class=\"download\">\n <a href=\"content?.value\">{{content?.description}}</a>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!mediaIsZip(content)\">\n <div class=\"restrict\">\n <div class=\"image\">\n <img [src]=\"content?.value\"/>\n </div>\n <div class=\"description\" *ngIf=\"content?.description\">{{content?.description}}</div>\n <div class=\"source\" *ngIf=\"content?.source\">\n <a [href]=\"content?.source\" [target]=\"'_blank'\">Source: {{content?.source}}</a>\n </div>\n </div>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"ContentType.HTML\">\n <app-static-html\n [value]=\"content?.value\"\n >\n </app-static-html>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <p>{{content?.value}}</p>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container>\n <h2>Comments</h2>\n <p *ngIf=\"comments?.length == 0\">There are no comments yet.</p>\n <ng-container *ngIf=\"comments?.length > 0\">\n <div *ngFor=\"let comment of comments\">\n <mat-card style=\"margin-bottom: 20px;\" class=\"restrict\">\n <mat-card-title><img class=\"gravatar\" src=\"{{comment.gravatar_url}} + ?s=30\"> {{comment.user_display_name}}</mat-card-title>\n <mat-card-subtitle>{{comment.date_obj | timeAgo}}</mat-card-subtitle>\n <mat-card-content>\n <p>{{comment.content}}</p>\n <ng-container *ngIf=\"me?.id === entry?.__server_generated_properties?.author_id\">\n <a href=\"javascript:void(0);\" *ngIf=\"!comment?.approved\" (click)=\"approve(comment)\">Approve</a>\n <a href=\"javascript:void(0);\" *ngIf=\"comment?.approved\" (click)=\"unapprove(comment)\">Unapprove</a>\n </ng-container>\n </mat-card-content>\n </mat-card>\n </div>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!me\">\n <a href=\"/signup\">Signup</a> or <a href=\"/login\">login</a> to join the conversation!\n </ng-container>\n <ng-container *ngIf=\"me && !me?.comments_public\">\n <p>Note, your comments will not be public be default. It is possible I will make your comments public, but for now comments are just between you and me.</p>\n </ng-container>\n <ng-container *ngIf=\"me\">\n <h2 style=\"width: 100%;\">Leave a Comment</h2>\n <br>\n <mat-form-field class=\"restrict\" style=\"width: 100%;\" appearance=\"outline\">\n <mat-label>Comment</mat-label>\n <textarea [(ngModel)]=\"commentText\" (keydown.enter)=\"postComment($event)\" matInput></textarea>\n </mat-form-field>\n <br>\n <button (click)=\"postComment($event)\" style=\"text-align: right;\" mat-button>Submit</button>\n </ng-container>\n <div style=\"margin-bottom: 30px;\"></div>\n</div>\n\n",
93
- styles: [".image{justify-content:center;text-align:center;width:100%}.description,.source{font-size:12px;text-align:center}.gravatar{margin-right:20px}.smaller{text-color:grey;text-size:12px}"]
94
- },] }
95
- ];
96
- EntryRendererComponent.ctorParameters = () => [
97
- { type: PrismService },
98
- { type: NgZone },
99
- { type: IdentityService },
100
- { type: CommentService },
101
- { type: Router },
102
- { type: EntryService }
103
- ];
104
- EntryRendererComponent.propDecorators = {
105
- entry: [{ type: Input }],
106
- editMode: [{ type: Input }]
107
- };
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9iamFtZXNvbi9EZXZlbG9wbWVudC9ibG9nL3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZW50cnktcmVuZGVyZXIvZW50cnktcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBRTVGLE9BQU8sRUFBaUQsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFHdkYsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUdwRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFHMUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sd0RBQXdELENBQUM7QUFPN0YsTUFBTSxPQUFPLHNCQUFzQjtJQWEvQixZQUNZLFlBQTBCLEVBQzFCLE1BQWMsRUFDZCxlQUFnQyxFQUNoQyxjQUE4QixFQUM5QixNQUFjLEVBQ2QsWUFBMEI7UUFMMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBZHRDLGdCQUFXLEdBQUcsV0FBVyxD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ckI7aUJBQ0o7YUFDSjtTQUNKO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUNELE9BQU8sQ0FBQyxPQUFZO1FBQ2hCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFFdEcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsU0FBUyxDQUFDLE9BQVk7UUFDbEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUV2RyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OztZQWpHSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsMmpMQUE4Qzs7YUFFakQ7OztZQVRPLFlBQVk7WUFad0IsTUFBTTtZQVMxQyxlQUFlO1lBRWYsY0FBYztZQVRrQyxNQUFNO1lBUXRELFlBQVk7OztvQkFlZixLQUFLO3VCQVFMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0NoZWNrZWQsIENvbXBvbmVudCwgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtvcmRlckJ5fSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7RW50cnl9IGZyb20gJy4uLy4uL2RhdGEvZW50cnknO1xuaW1wb3J0IHtDb250ZW50fSBmcm9tICcuLi8uLi9kYXRhL2NvbnRlbnQnO1xuaW1wb3J0IHtDb250ZW50VHlwZX0gZnJvbSAnLi4vLi4vZGF0YS9jb250ZW50LXR5cGUnO1xuaW1wb3J0IHtJZGVudGl0eX0gZnJvbSAnLi4vLi4vZGF0YS9pZGVudGl0eSc7XG5cbmltcG9ydCB7SWRlbnRpdHlTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pZGVudGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7RW50cnlTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRyeS5zZXJ2aWNlJztcbmltcG9ydCB7Q29tbWVudFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1lbnQuc2VydmljZSc7XG5pbXBvcnQge1ByaXNtU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJpc20uc2VydmljZSc7XG5cblxuaW1wb3J0IHtFbnRyeUNyZWF0b3JDb21wb25lbnR9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZW50cnktY3JlYXRvci9lbnRyeS1jcmVhdG9yLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWVudHJ5LXJlbmRlcmVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZW50cnktcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2VudHJ5LXJlbmRlcmVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRW50cnlSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG5cbiAgICBtZTogSWRlbnRpdHk7XG4gICAgQElucHV0KCkgZW50cnk6IEVudHJ5O1xuXG4gICAgQ29udGVudFR5cGUgPSBDb250ZW50VHlwZTtcbiAgICBjb21tZW50cyA9IFtdO1xuICAgIGNvbW1lbnRUZXh0ID0gJyc7XG5cbiAgICBhbGVydCA9IGFsZXJ0O1xuXG4gICAgQElucHV0KCkgZWRpdE1vZGUgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHByaXNtU2VydmljZTogUHJpc21TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIGlkZW50aXR5U2VydmljZTogSWRlbnRpdHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbW1lbnRTZXJ2aWNlOiBDb21tZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBlbnRyeVNlcnZpY2U6IEVudHJ5U2VydmljZSxcbiAgICApIHtcbiAgICB9XG5cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmlkZW50aXR5U2VydmljZS5nZXRNZSgpLnN1YnNjcmliZSgobWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWUgPSBtZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tbWVudFNlcnZpY2UuZ2V0Q29tbWVudHModGhpcy5lbnRyeS5pZCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21tZW50cyA9IChyZXNwb25zZSBhcyBhbnkpLnJlc3VsdHM7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgdGhpcy5jb21tZW50cykge1xuICAgICAgICAgICAgICAgIGNvbW1lbnQuZGF0ZV9vYmogPSBuZXcgRGF0ZShjb21tZW50LmNyZWF0ZWRfb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJpc21TZXJ2aWNlLmhpZ2hsaWdodEFsbCgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVkaXQoZW50cnk6IEVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnZlcnNpb24rKztcbiAgICAgICAgZW50cnkucHVibGlzaGVkID0gZmFsc2U7XG4gICAgICAgIGRlbGV0ZSBlbnRyeS5wdWJsaXNoX2RhdGU7XG5cbiAgICAgICAgdGhpcy5lbnRyeVNlcnZpY2UuY3JlYXRlKGVudHJ5KS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShFbnRyeUNyZWF0b3JDb21wb25lbnQuQ1VSUkVOVF9FTlRSWSwgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpKTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJ2NyZWF0ZShsZWZ0LWNvbDpjcmVhdGUvL3JpZ2h0LWNvbDpjcmVhdGUpJykudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcG9zdENvbW1lbnQoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmNvbW1lbnRUZXh0ICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5jb21tZW50U2VydmljZS5wb3N0Q29tbWVudCh7ZW50cnk6IHRoaXMuZW50cnkuaWQsIGNvbnRlbnQ6IHRoaXMuY29tbWVudFRleHR9KS5zdWJzY3JpYmUoKGNvbW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY29tbWVudFRleHQgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZWRpYUlzWmlwKGNvbnRlbnQ6IENvbnRlbnQpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IG1lZGlhSXNaaXAgPSBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRlbnQuYWRkaXRpb25hbCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhZGQgb2YgY29udGVudC5hZGRpdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFkZC5rZXkgPT09IENvbnRlbnQuS0VZX01JTUVUWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGQudmFsdWUgPT09ICdhcHBsaWNhdGlvbi96aXAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUlzWmlwID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVkaWFJc1ppcDtcbiAgICB9XG4gICAgYXBwcm92ZShjb21tZW50OiBhbnkpIHtcbiAgICAgICAgY29tbWVudC5hcHByb3ZlZCA9ICFjb21tZW50LmFwcHJvdmVkO1xuICAgICAgICB0aGlzLmNvbW1lbnRTZXJ2aWNlLnBhdGNoQ29tbWVudChPYmplY3QuYXNzaWduKHt9LCB7YXBwcm92ZWQ6IHRydWV9LCBjb21tZW50KSkuc3Vic2NyaWJlKChyQ29tbWVudCkgPT4ge1xuXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1bmFwcHJvdmUoY29tbWVudDogYW55KSB7XG4gICAgICAgIGNvbW1lbnQuYXBwcm92ZWQgPSAhY29tbWVudC5hcHByb3ZlZDtcbiAgICAgICAgdGhpcy5jb21tZW50U2VydmljZS5wYXRjaENvbW1lbnQoT2JqZWN0LmFzc2lnbih7fSwge2FwcHJvdmVkOiBmYWxzZX0sIGNvbW1lbnQpKS5zdWJzY3JpYmUoKHJDb21tZW50KSA9PiB7XG5cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19