@posiwise/resource-module 0.0.163 → 0.0.165

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 (108) hide show
  1. package/fesm2022/{posiwise-resource-module-base-top-banner.component-Cxeoyf5z.mjs → posiwise-resource-module-base-top-banner.component-qdYdb5Le.mjs} +7 -6
  2. package/fesm2022/posiwise-resource-module-base-top-banner.component-qdYdb5Le.mjs.map +1 -0
  3. package/fesm2022/posiwise-resource-module-posiwise-resource-module-DlOc6owW.mjs +1795 -0
  4. package/fesm2022/posiwise-resource-module-posiwise-resource-module-DlOc6owW.mjs.map +1 -0
  5. package/fesm2022/posiwise-resource-module-resource-blogs.module-BY02aMCz.mjs +69 -0
  6. package/fesm2022/posiwise-resource-module-resource-blogs.module-BY02aMCz.mjs.map +1 -0
  7. package/fesm2022/posiwise-resource-module-resource-case-studies.module-CP7-pHth.mjs +133 -0
  8. package/fesm2022/posiwise-resource-module-resource-case-studies.module-CP7-pHth.mjs.map +1 -0
  9. package/fesm2022/posiwise-resource-module-resource-events.module-CXAhiCS6.mjs +228 -0
  10. package/fesm2022/posiwise-resource-module-resource-events.module-CXAhiCS6.mjs.map +1 -0
  11. package/fesm2022/posiwise-resource-module-resource-hub.module-a6qHwXRb.mjs +233 -0
  12. package/fesm2022/posiwise-resource-module-resource-hub.module-a6qHwXRb.mjs.map +1 -0
  13. package/fesm2022/posiwise-resource-module-resource-integrations.module-WfJfGko9.mjs +274 -0
  14. package/fesm2022/posiwise-resource-module-resource-integrations.module-WfJfGko9.mjs.map +1 -0
  15. package/fesm2022/posiwise-resource-module-resource-post.module-DvTdeeQt.mjs +304 -0
  16. package/fesm2022/posiwise-resource-module-resource-post.module-DvTdeeQt.mjs.map +1 -0
  17. package/fesm2022/posiwise-resource-module-resource-release-notes.module-CxAh59AL.mjs +104 -0
  18. package/fesm2022/posiwise-resource-module-resource-release-notes.module-CxAh59AL.mjs.map +1 -0
  19. package/fesm2022/posiwise-resource-module-resource-root.module-BHGO5PqT.mjs +393 -0
  20. package/fesm2022/posiwise-resource-module-resource-root.module-BHGO5PqT.mjs.map +1 -0
  21. package/fesm2022/posiwise-resource-module-resource-videos.module-BJxrv9JZ.mjs +69 -0
  22. package/fesm2022/posiwise-resource-module-resource-videos.module-BJxrv9JZ.mjs.map +1 -0
  23. package/fesm2022/posiwise-resource-module-resource-white-papers.module-iWQ29ue6.mjs +70 -0
  24. package/fesm2022/posiwise-resource-module-resource-white-papers.module-iWQ29ue6.mjs.map +1 -0
  25. package/fesm2022/posiwise-resource-module.mjs +1 -31
  26. package/fesm2022/posiwise-resource-module.mjs.map +1 -1
  27. package/lib/public/components/resource-case-studies/resource-case-studies.component.d.ts +1 -0
  28. package/lib/public/shared/resource-shared.module.d.ts +1 -1
  29. package/package.json +4 -6
  30. package/esm2022/index.mjs +0 -25
  31. package/esm2022/lib/public/components/base/base-resource.component.mjs +0 -144
  32. package/esm2022/lib/public/components/base/base-top-banner.component.mjs +0 -111
  33. package/esm2022/lib/public/components/reslease-note-card/release-note-card.component.mjs +0 -174
  34. package/esm2022/lib/public/components/resource-blogs/resource-blog-top-banner/resource-blog-top-banner.component.mjs +0 -27
  35. package/esm2022/lib/public/components/resource-blogs/resource-blog.component.mjs +0 -27
  36. package/esm2022/lib/public/components/resource-case-studies/case-studies-cards/case-studies-cards.component.mjs +0 -108
  37. package/esm2022/lib/public/components/resource-case-studies/resource-case-studies.component.mjs +0 -78
  38. package/esm2022/lib/public/components/resource-company-card/resource-company-card.component.mjs +0 -88
  39. package/esm2022/lib/public/components/resource-contact-us/resource-contact-us.module.mjs +0 -16
  40. package/esm2022/lib/public/components/resource-edit-card/resource-edit-card.component.mjs +0 -230
  41. package/esm2022/lib/public/components/resource-edit-card-lazy/resource-edit-card-lazy.component.mjs +0 -75
  42. package/esm2022/lib/public/components/resource-integration/integration-top-banner/integration-top-banner.component.mjs +0 -27
  43. package/esm2022/lib/public/components/resource-integration/resource-integration.component.mjs +0 -237
  44. package/esm2022/lib/public/components/resource-post/related-resources/related-resources.component.mjs +0 -124
  45. package/esm2022/lib/public/components/resource-post/related-resources/resource-cards/resource-cards.component.mjs +0 -107
  46. package/esm2022/lib/public/components/resource-post/resource-post-details/resource-post-details.component.mjs +0 -128
  47. package/esm2022/lib/public/components/resource-post/resource-post.component.mjs +0 -39
  48. package/esm2022/lib/public/components/resource-release-notes/resource-release-notes-top-banner/resource-release-notes-top-banner.component.mjs +0 -27
  49. package/esm2022/lib/public/components/resource-release-notes/resource-release-notes.component.mjs +0 -59
  50. package/esm2022/lib/public/components/resource-top-banner-edit/resource-top-banner-edit.component.mjs +0 -106
  51. package/esm2022/lib/public/components/resource-vault/resource-vault.component.mjs +0 -76
  52. package/esm2022/lib/public/components/resource-videos/resource-video-cards/resource-video-cards.component.mjs +0 -130
  53. package/esm2022/lib/public/components/resource-videos/resource-videos-top-banner/resource-videos-top-banner.component.mjs +0 -27
  54. package/esm2022/lib/public/components/resource-videos/resource-videos.component.mjs +0 -27
  55. package/esm2022/lib/public/components/resource-webinars/replay-event-cards/replay-event-cards.component.mjs +0 -101
  56. package/esm2022/lib/public/components/resource-webinars/resource-webinars.component.mjs +0 -115
  57. package/esm2022/lib/public/components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component.mjs +0 -148
  58. package/esm2022/lib/public/components/resources/resource-tags/resource-tags.component.mjs +0 -84
  59. package/esm2022/lib/public/components/resources/resources.component.mjs +0 -84
  60. package/esm2022/lib/public/components/resources/vault-section/vault-section.component.mjs +0 -160
  61. package/esm2022/lib/public/components/resources-hub/resources-hub.component.mjs +0 -208
  62. package/esm2022/lib/public/components/testimonial-card/testimonial-card.component.mjs +0 -86
  63. package/esm2022/lib/public/components/white-papers/white-papers-top-banner/white-papers-top-banner.component.mjs +0 -27
  64. package/esm2022/lib/public/components/white-papers/white-papers.component.mjs +0 -27
  65. package/esm2022/lib/public/modules/blogs/resource-blogs.module.mjs +0 -31
  66. package/esm2022/lib/public/modules/case-studies/resource-case-studies.module.mjs +0 -36
  67. package/esm2022/lib/public/modules/events/resource-events.module.mjs +0 -31
  68. package/esm2022/lib/public/modules/hub/resource-hub.module.mjs +0 -30
  69. package/esm2022/lib/public/modules/integrations/resource-integrations.module.mjs +0 -31
  70. package/esm2022/lib/public/modules/post/resource-post.module.mjs +0 -33
  71. package/esm2022/lib/public/modules/release-notes/resource-release-notes.module.mjs +0 -31
  72. package/esm2022/lib/public/modules/root/resource-root-shared.module.mjs +0 -61
  73. package/esm2022/lib/public/modules/root/resource-root.module.mjs +0 -33
  74. package/esm2022/lib/public/modules/videos/resource-videos.module.mjs +0 -31
  75. package/esm2022/lib/public/modules/white-papers/resource-white-papers.module.mjs +0 -32
  76. package/esm2022/lib/public/resource-public.module.mjs +0 -18
  77. package/esm2022/lib/public/resource-public.routing.module.mjs +0 -61
  78. package/esm2022/lib/public/shared/resource-cards.module.mjs +0 -121
  79. package/esm2022/lib/public/shared/resource-edit.module.mjs +0 -64
  80. package/esm2022/lib/public/shared/resource-shared.module.mjs +0 -128
  81. package/esm2022/lib/resource.module.mjs +0 -15
  82. package/esm2022/lib/resource.service.mjs +0 -79
  83. package/esm2022/lib/shared/models/resource.model.mjs +0 -12
  84. package/esm2022/lib/shared/resource-modal.interface.mjs +0 -2
  85. package/esm2022/posiwise-resource-module.mjs +0 -5
  86. package/fesm2022/posiwise-resource-module-base-top-banner.component-Cxeoyf5z.mjs.map +0 -1
  87. package/fesm2022/posiwise-resource-module-posiwise-resource-module-B1G5qNj1.mjs +0 -1795
  88. package/fesm2022/posiwise-resource-module-posiwise-resource-module-B1G5qNj1.mjs.map +0 -1
  89. package/fesm2022/posiwise-resource-module-resource-blogs.module-CTYKg3kh.mjs +0 -91
  90. package/fesm2022/posiwise-resource-module-resource-blogs.module-CTYKg3kh.mjs.map +0 -1
  91. package/fesm2022/posiwise-resource-module-resource-case-studies.module-Dov1BAfF.mjs +0 -127
  92. package/fesm2022/posiwise-resource-module-resource-case-studies.module-Dov1BAfF.mjs.map +0 -1
  93. package/fesm2022/posiwise-resource-module-resource-events.module-K3sH1mdv.mjs +0 -245
  94. package/fesm2022/posiwise-resource-module-resource-events.module-K3sH1mdv.mjs.map +0 -1
  95. package/fesm2022/posiwise-resource-module-resource-hub.module-C5t2KeqW.mjs +0 -249
  96. package/fesm2022/posiwise-resource-module-resource-hub.module-C5t2KeqW.mjs.map +0 -1
  97. package/fesm2022/posiwise-resource-module-resource-integrations.module-CN_tWJV2.mjs +0 -287
  98. package/fesm2022/posiwise-resource-module-resource-integrations.module-CN_tWJV2.mjs.map +0 -1
  99. package/fesm2022/posiwise-resource-module-resource-post.module-PsfJSV3t.mjs +0 -318
  100. package/fesm2022/posiwise-resource-module-resource-post.module-PsfJSV3t.mjs.map +0 -1
  101. package/fesm2022/posiwise-resource-module-resource-release-notes.module-TR3GIX0u.mjs +0 -124
  102. package/fesm2022/posiwise-resource-module-resource-release-notes.module-TR3GIX0u.mjs.map +0 -1
  103. package/fesm2022/posiwise-resource-module-resource-root.module-Bm5Wv4mP.mjs +0 -408
  104. package/fesm2022/posiwise-resource-module-resource-root.module-Bm5Wv4mP.mjs.map +0 -1
  105. package/fesm2022/posiwise-resource-module-resource-videos.module-CDBHydlX.mjs +0 -91
  106. package/fesm2022/posiwise-resource-module-resource-videos.module-CDBHydlX.mjs.map +0 -1
  107. package/fesm2022/posiwise-resource-module-resource-white-papers.module-DVDuexfj.mjs +0 -92
  108. package/fesm2022/posiwise-resource-module-resource-white-papers.module-DVDuexfj.mjs.map +0 -1
@@ -1,144 +0,0 @@
1
- import { Component, Injector } from '@angular/core';
2
- import { AppBaseComponent } from '@posiwise/app-base-component';
3
- import { AuthService, TagService } from '@posiwise/common-services';
4
- import { HelperService } from '@posiwise/helper-service';
5
- import { ResourceService } from '../../../resource.service';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../../../resource.service";
8
- import * as i2 from "@posiwise/common-services";
9
- export class BaseResourceComponent extends AppBaseComponent {
10
- constructor(resourceService, tagService, authService, injector) {
11
- super(injector);
12
- this.resourceService = resourceService;
13
- this.tagService = tagService;
14
- this.authService = authService;
15
- this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;
16
- this.posts = [];
17
- this.testimonialsPosts = [];
18
- this.isLoaded = false;
19
- this.canEditResourcesValue = false;
20
- }
21
- ngOnInit() {
22
- this.getUserSubscriptionId().subscribe(response => {
23
- this.subscriptionId = response;
24
- });
25
- this.authService.getToken$().subscribe(res => {
26
- this.userLoggedIn = !!res;
27
- if (this.userLoggedIn) {
28
- this.localStorage.getItem$('product').subscribe(res => {
29
- const data = res ? JSON.parse(res) : null;
30
- this.subscriptionId = data?.subscriptionId;
31
- });
32
- this.userService.getUserInfo().subscribe(data => {
33
- this.user = data;
34
- this.updateCanEditResourcesValue();
35
- this.initializeComponent();
36
- });
37
- }
38
- else {
39
- this.initializeComponent();
40
- }
41
- });
42
- }
43
- initializeComponent() {
44
- if (this.shouldUseTagCategories()) {
45
- this.getTags();
46
- }
47
- else {
48
- this.getPostTags();
49
- }
50
- if (this.shouldLoadTestimonials()) {
51
- this.getTestimonialTags();
52
- }
53
- }
54
- getTags() {
55
- this.isLoaded = false;
56
- this.tagService
57
- .getAllTagCategories({ search: this.getSearchTerm() }, this.getEffectiveSubscriptionId())
58
- .subscribe(response => {
59
- this.tagCategory = response.tag_categories[0];
60
- this.getPostTags();
61
- });
62
- }
63
- getPostTags() {
64
- this.tagService
65
- .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())
66
- .subscribe(response => {
67
- if (this.shouldUseTagCategories()) {
68
- this.blogPostTag = response.tags.find(tag => tag.tag_category_id === this.tagCategory?.id);
69
- }
70
- else {
71
- this.blogPostTag = response.tags.find(tag => tag.name === this.getResourceType());
72
- }
73
- this.getPosts(1, 100);
74
- })
75
- .add(() => {
76
- this.isLoaded = true;
77
- });
78
- }
79
- getTestimonialTags() {
80
- this.tagService
81
- .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())
82
- .subscribe(response => {
83
- this.blogTestimonialsPostTag = response.tags.find(tag => tag.name === 'Testimonials');
84
- this.getTestimonialsPosts(1, 100);
85
- });
86
- }
87
- getPosts(page, pageSize) {
88
- this.fetchPosts(page, pageSize, this.blogPostTag?.tag_category_id, 'posts');
89
- }
90
- getTestimonialsPosts(page, pageSize) {
91
- this.fetchPosts(page, pageSize, this.blogTestimonialsPostTag?.tag_category_id, 'testimonialsPosts');
92
- }
93
- /** Shared method to fetch posts with common filtering, sorting, and slicing logic */
94
- fetchPosts(page, pageSize, tagCategoryId, targetProperty) {
95
- this.resourceService
96
- .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', tagCategoryId)
97
- .subscribe(response => {
98
- const filteredPosts = response.posts
99
- .filter(post => post.tags?.some(tag => tag.tag_category_id === tagCategoryId))
100
- .sort((a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime())
101
- .slice(0, 12);
102
- if (targetProperty === 'posts') {
103
- this.posts = filteredPosts;
104
- }
105
- else {
106
- this.testimonialsPosts = filteredPosts;
107
- }
108
- });
109
- }
110
- /** Helper method to get effective subscription ID */
111
- getEffectiveSubscriptionId() {
112
- return HelperService.getEffectiveSubscriptionId(this.user, this.subscriptionId, this.masterSubscriptionId);
113
- }
114
- // Optional methods that can be overridden
115
- getSearchTerm() {
116
- return this.getResourceType();
117
- }
118
- shouldUseTagCategories() {
119
- return false;
120
- }
121
- shouldLoadTestimonials() {
122
- return false;
123
- }
124
- updateCanEditResourcesValue() {
125
- if (this.userLoggedIn && this.user) {
126
- this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
127
- }
128
- else {
129
- this.canEditResourcesValue = false;
130
- }
131
- }
132
- canEditResources() {
133
- return this.canEditResourcesValue;
134
- }
135
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: BaseResourceComponent, deps: [{ token: i1.ResourceService }, { token: i2.TagService }, { token: i2.AuthService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
136
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: BaseResourceComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
137
- }
138
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: BaseResourceComponent, decorators: [{
139
- type: Component,
140
- args: [{
141
- template: ''
142
- }]
143
- }], ctorParameters: () => [{ type: i1.ResourceService }, { type: i2.TagService }, { type: i2.AuthService }, { type: i0.Injector }] });
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1yZXNvdXJjZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Jlc291cmNlLW1vZHVsZS9zcmMvbGliL3B1YmxpYy9jb21wb25lbnRzL2Jhc2UvYmFzZS1yZXNvdXJjZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBSzVELE1BQU0sT0FBZ0IscUJBQXNCLFNBQVEsZ0JBQWdCO0lBZWhFLFlBQ3VCLGVBQWdDLEVBQ2hDLFVBQXNCLEVBQ3hCLFdBQXdCLEVBQ3pDLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUxHLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBaEI3Qyx5QkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQztRQUMxRSxVQUFLLEdBQWUsRUFBRSxDQUFDO1FBQ3ZCLHNCQUFpQixHQUFlLEVBQUUsQ0FBQztRQUtuQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSWpCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztJQVM5QixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM5QyxJQUFJ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Q2pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQ3ZELElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLGlCQUFpQixDQUN6QixDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDdEMsQ0FBQzsrR0FwTGlCLHFCQUFxQjttR0FBckIscUJBQXFCLDJFQUY3QixFQUFFOzs0RkFFTSxxQkFBcUI7a0JBSDFDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLEVBQUU7aUJBQ2YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFRhZ1NlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFJlc291cmNlLCBVc2VyIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5cbmltcG9ydCB7IFJlc291cmNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVJlc291cmNlQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcbiAgICBtYXN0ZXJTdWJzY3JpcHRpb25JZCA9IHRoaXMuYXBwQ29uZmlnLm1hc3Rlcl9zdWJzY3JpcHRpb24uc3Vic2NyaXB0aW9uX2lkO1xuICAgIHBvc3RzOiBSZXNvdXJjZVtdID0gW107XG4gICAgdGVzdGltb25pYWxzUG9zdHM6IFJlc291cmNlW10gPSBbXTtcbiAgICB1c2VyTG9nZ2VkSW46IGJvb2xlYW47XG4gICAgYmxvZ1Bvc3RUYWc7XG4gICAgdGFnQ2F0ZWdvcnk7XG4gICAgYmxvZ1Rlc3RpbW9uaWFsc1Bvc3RUYWc7XG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcbiAgICB1c2VyOiBVc2VyO1xuICAgIGlzTWFzdGVyU3Vic2NyaXB0aW9uO1xuXG4gICAgY2FuRWRpdFJlc291cmNlc1ZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc291cmNlU2VydmljZTogUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGFnU2VydmljZTogVGFnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZ2V0VXNlclN1YnNjcmlwdGlvbklkKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSByZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0VG9rZW4kKCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLnVzZXJMb2dnZWRJbiA9ICEhcmVzO1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlckxvZ2dlZEluKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSQoJ3Byb2R1Y3QnKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlcyA/IEpTT04ucGFyc2UocmVzKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBkYXRhPy5zdWJzY3JpcHRpb25JZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJJbmZvKCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXIgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbkVkaXRSZXNvdXJjZXNWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ29tcG9uZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0aWFsaXplQ29tcG9uZW50KCkge1xuICAgICAgICBpZiAodGhpcy5zaG91bGRVc2VUYWdDYXRlZ29yaWVzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0VGFncygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXRQb3N0VGFncygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZFRlc3RpbW9uaWFscygpKSB7XG4gICAgICAgICAgICB0aGlzLmdldFRlc3RpbW9uaWFsVGFncygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFRhZ3MoKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50YWdTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWxsVGFnQ2F0ZWdvcmllcyhcbiAgICAgICAgICAgICAgICB7IHNlYXJjaDogdGhpcy5nZXRTZWFyY2hUZXJtKCkgfSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldEVmZmVjdGl2ZVN1YnNjcmlwdGlvbklkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2F0ZWdvcnkgPSByZXNwb25zZS50YWdfY2F0ZWdvcmllc1swXTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBvc3RUYWdzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UG9zdFRhZ3MoKSB7XG4gICAgICAgIHRoaXMudGFnU2VydmljZVxuICAgICAgICAgICAgLmdldFRhZ3NCeVR5cGUoJ3Bvc3RfY2F0ZWdvcmllcycsIHt9LCB0aGlzLmdldEVmZmVjdGl2ZVN1YnNjcmlwdGlvbklkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG91bGRVc2VUYWdDYXRlZ29yaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9nUG9zdFRhZyA9IHJlc3BvbnNlLnRhZ3MuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9PiB0YWcudGFnX2NhdGVnb3J5X2lkID09PSB0aGlzLnRhZ0NhdGVnb3J5Py5pZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmxvZ1Bvc3RUYWcgPSByZXNwb25zZS50YWdzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWcgPT4gdGFnLm5hbWUgPT09IHRoaXMuZ2V0UmVzb3VyY2VUeXBlKClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQb3N0cygxLCAxMDApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFRlc3RpbW9uaWFsVGFncygpIHtcbiAgICAgICAgdGhpcy50YWdTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0VGFnc0J5VHlwZSgncG9zdF9jYXRlZ29yaWVzJywge30sIHRoaXMuZ2V0RWZmZWN0aXZlU3Vic2NyaXB0aW9uSWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmxvZ1Rlc3RpbW9uaWFsc1Bvc3RUYWcgPSByZXNwb25zZS50YWdzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIHRhZyA9PiB0YWcubmFtZSA9PT0gJ1Rlc3RpbW9uaWFscydcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGVzdGltb25pYWxzUG9zdHMoMSwgMTAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRQb3N0cyhwYWdlOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5mZXRjaFBvc3RzKHBhZ2UsIHBhZ2VTaXplLCB0aGlzLmJsb2dQb3N0VGFnPy50YWdfY2F0ZWdvcnlfaWQsICdwb3N0cycpO1xuICAgIH1cblxuICAgIGdldFRlc3RpbW9uaWFsc1Bvc3RzKHBhZ2U6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLmZldGNoUG9zdHMoXG4gICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgICB0aGlzLmJsb2dUZXN0aW1vbmlhbHNQb3N0VGFnPy50YWdfY2F0ZWdvcnlfaWQsXG4gICAgICAgICAgICAndGVzdGltb25pYWxzUG9zdHMnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIFNoYXJlZCBtZXRob2QgdG8gZmV0Y2ggcG9zdHMgd2l0aCBjb21tb24gZmlsdGVyaW5nLCBzb3J0aW5nLCBhbmQgc2xpY2luZyBsb2dpYyAqL1xuICAgIHByaXZhdGUgZmV0Y2hQb3N0cyhcbiAgICAgICAgcGFnZTogbnVtYmVyLFxuICAgICAgICBwYWdlU2l6ZTogbnVtYmVyLFxuICAgICAgICB0YWdDYXRlZ29yeUlkLFxuICAgICAgICB0YXJnZXRQcm9wZXJ0eTogJ3Bvc3RzJyB8ICd0ZXN0aW1vbmlhbHNQb3N0cydcbiAgICApIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRQdWJsaWNQb3N0cyh0aGlzLmdldEVmZmVjdGl2ZVN1YnNjcmlwdGlvbklkKCksIHBhZ2UsIHBhZ2VTaXplLCAnJywgdGFnQ2F0ZWdvcnlJZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUG9zdHMgPSByZXNwb25zZS5wb3N0c1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHBvc3QgPT4gcG9zdC50YWdzPy5zb21lKHRhZyA9PiB0YWcudGFnX2NhdGVnb3J5X2lkID09PSB0YWdDYXRlZ29yeUlkKSlcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShiLnB1Ymxpc2hlZF9hdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5wdWJsaXNoZWRfYXQpLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCAxMik7XG5cbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0UHJvcGVydHkgPT09ICdwb3N0cycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3N0cyA9IGZpbHRlcmVkUG9zdHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXN0aW1vbmlhbHNQb3N0cyA9IGZpbHRlcmVkUG9zdHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEhlbHBlciBtZXRob2QgdG8gZ2V0IGVmZmVjdGl2ZSBzdWJzY3JpcHRpb24gSUQgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0RWZmZWN0aXZlU3Vic2NyaXB0aW9uSWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIEhlbHBlclNlcnZpY2UuZ2V0RWZmZWN0aXZlU3Vic2NyaXB0aW9uSWQoXG4gICAgICAgICAgICB0aGlzLnVzZXIsXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkLFxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJTdWJzY3JpcHRpb25JZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEFic3RyYWN0IG1ldGhvZHMgdGhhdCBlYWNoIGNvbXBvbmVudCBtdXN0IGltcGxlbWVudFxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRSZXNvdXJjZVR5cGUoKTogc3RyaW5nO1xuXG4gICAgLy8gT3B0aW9uYWwgbWV0aG9kcyB0aGF0IGNhbiBiZSBvdmVycmlkZGVuXG4gICAgcHJvdGVjdGVkIGdldFNlYXJjaFRlcm0oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VUeXBlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNob3VsZFVzZVRhZ0NhdGVnb3JpZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2hvdWxkTG9hZFRlc3RpbW9uaWFscygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2FuRWRpdFJlc291cmNlc1ZhbHVlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy51c2VyTG9nZ2VkSW4gJiYgdGhpcy51c2VyKSB7XG4gICAgICAgICAgICB0aGlzLmNhbkVkaXRSZXNvdXJjZXNWYWx1ZSA9IEhlbHBlclNlcnZpY2UuY2FuRWRpdFJlc291cmNlcyhcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXIsXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyTG9nZ2VkSW4sXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FuRWRpdFJlc291cmNlc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5FZGl0UmVzb3VyY2VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW5FZGl0UmVzb3VyY2VzVmFsdWU7XG4gICAgfVxufVxuIl19
@@ -1,111 +0,0 @@
1
- import { Component, Injector } from '@angular/core';
2
- import { Title } from '@angular/platform-browser';
3
- import { AppBaseComponent } from '@posiwise/app-base-component';
4
- import { AuthService, TagService } from '@posiwise/common-services';
5
- import { HelperService } from '@posiwise/helper-service';
6
- import { ResourceService } from '../../../resource.service';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../../../resource.service";
9
- import * as i2 from "@posiwise/common-services";
10
- import * as i3 from "@angular/platform-browser";
11
- export class BaseTopBannerComponent extends AppBaseComponent {
12
- constructor(resourceService, tagService, authService, titleService, injector) {
13
- super(injector);
14
- this.resourceService = resourceService;
15
- this.tagService = tagService;
16
- this.authService = authService;
17
- this.titleService = titleService;
18
- this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;
19
- this.posts = [];
20
- this.testimonialsPosts = [];
21
- this.isLoaded = false;
22
- this.canEditResourcesValue = false;
23
- }
24
- ngOnInit() {
25
- this.getUserSubscriptionId().subscribe(response => {
26
- this.subscriptionId = response;
27
- });
28
- this.authService.getToken$().subscribe(res => {
29
- this.userLoggedIn = !!res;
30
- if (this.userLoggedIn) {
31
- this.localStorage.getItem$('product').subscribe(res => {
32
- const data = res ? JSON.parse(res) : null;
33
- this.subscriptionId = data?.subscriptionId;
34
- });
35
- this.userService.getUserInfo().subscribe(data => {
36
- this.user = data;
37
- this.updateCanEditResourcesValue();
38
- this.getTags();
39
- });
40
- }
41
- else {
42
- this.getTags();
43
- }
44
- });
45
- }
46
- getTags() {
47
- this.isLoaded = false;
48
- this.tagService
49
- .getAllTagCategories({ search: this.getSearchTerm() }, this.getEffectiveSubscriptionId())
50
- .subscribe(response => {
51
- this.tagCategory = response.tag_categories[0];
52
- this.getPostTags();
53
- });
54
- }
55
- getPostTags() {
56
- this.tagService
57
- .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())
58
- .subscribe(response => {
59
- this.blogPostTag = response.tags.find(tag => tag.tag_category_id === this.tagCategory?.id);
60
- this.updateSEOMetadata();
61
- })
62
- .add(() => {
63
- this.isLoaded = true;
64
- });
65
- }
66
- /** Helper method to get effective subscription ID */
67
- getEffectiveSubscriptionId() {
68
- return HelperService.getEffectiveSubscriptionId(this.user, this.subscriptionId, this.masterSubscriptionId);
69
- }
70
- updateSEOMetadata() {
71
- if (this.blogPostTag) {
72
- // Update page title if meta_title is available
73
- if (this.blogPostTag.meta_title) {
74
- this.titleService.setTitle(this.blogPostTag.meta_title);
75
- }
76
- // Update meta description if meta_description is available
77
- if (this.blogPostTag.meta_description) {
78
- this.updateMetaDescription(this.blogPostTag.meta_description);
79
- }
80
- }
81
- }
82
- updateMetaDescription(description) {
83
- let metaDescription = document.querySelector('meta[name="description"]');
84
- if (!metaDescription) {
85
- metaDescription = document.createElement('meta');
86
- metaDescription.setAttribute('name', 'description');
87
- document.head.appendChild(metaDescription);
88
- }
89
- metaDescription.setAttribute('content', description);
90
- }
91
- updateCanEditResourcesValue() {
92
- if (this.userLoggedIn && this.user) {
93
- this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
94
- }
95
- else {
96
- this.canEditResourcesValue = false;
97
- }
98
- }
99
- canEditResources() {
100
- return this.canEditResourcesValue;
101
- }
102
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: BaseTopBannerComponent, deps: [{ token: i1.ResourceService }, { token: i2.TagService }, { token: i2.AuthService }, { token: i3.Title }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
103
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: BaseTopBannerComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
104
- }
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: BaseTopBannerComponent, decorators: [{
106
- type: Component,
107
- args: [{
108
- template: ''
109
- }]
110
- }], ctorParameters: () => [{ type: i1.ResourceService }, { type: i2.TagService }, { type: i2.AuthService }, { type: i3.Title }, { type: i0.Injector }] });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10b3AtYmFubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcmVzb3VyY2UtbW9kdWxlL3NyYy9saWIvcHVibGljL2NvbXBvbmVudHMvYmFzZS9iYXNlLXRvcC1iYW5uZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7O0FBSzVELE1BQU0sT0FBZ0Isc0JBQXVCLFNBQVEsZ0JBQWdCO0lBZWpFLFlBQ3VCLGVBQWdDLEVBQ2hDLFVBQXNCLEVBQ3hCLFdBQXdCLEVBQ3hCLFlBQW1CLEVBQ3BDLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQU5HLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFPO1FBakJ4Qyx5QkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQztRQUMxRSxVQUFLLEdBQWUsRUFBRSxDQUFDO1FBQ3ZCLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUt2QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSWpCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztJ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OzRGQUVNLHNCQUFzQjtrQkFIM0MsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsRUFBRTtpQkFDZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFRhZ1NlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFJlc291cmNlLCBVc2VyIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5cbmltcG9ydCB7IFJlc291cmNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVRvcEJhbm5lckNvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgbWFzdGVyU3Vic2NyaXB0aW9uSWQgPSB0aGlzLmFwcENvbmZpZy5tYXN0ZXJfc3Vic2NyaXB0aW9uLnN1YnNjcmlwdGlvbl9pZDtcbiAgICBwb3N0czogUmVzb3VyY2VbXSA9IFtdO1xuICAgIHRlc3RpbW9uaWFsc1Bvc3RzID0gW107XG4gICAgdXNlckxvZ2dlZEluOiBib29sZWFuO1xuICAgIGJsb2dQb3N0VGFnO1xuICAgIHRhZ0NhdGVnb3J5O1xuICAgIGJsb2dUZXN0aW1vbmlhbHNQb3N0VGFnO1xuICAgIGlzTG9hZGVkID0gZmFsc2U7XG4gICAgdXNlcjogVXNlcjtcbiAgICBpc01hc3RlclN1YnNjcmlwdGlvbjtcblxuICAgIGNhbkVkaXRSZXNvdXJjZXNWYWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSByZXNvdXJjZVNlcnZpY2U6IFJlc291cmNlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhZ1NlcnZpY2U6IFRhZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlU2VydmljZTogVGl0bGUsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZ2V0VXNlclN1YnNjcmlwdGlvbklkKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSByZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0VG9rZW4kKCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLnVzZXJMb2dnZWRJbiA9ICEhcmVzO1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlckxvZ2dlZEluKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSQoJ3Byb2R1Y3QnKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlcyA/IEpTT04ucGFyc2UocmVzKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBkYXRhPy5zdWJzY3JpcHRpb25JZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJJbmZvKCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXIgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbkVkaXRSZXNvdXJjZXNWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhZ3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUYWdzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRUYWdzKCkge1xuICAgICAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGFnU2VydmljZVxuICAgICAgICAgICAgLmdldEFsbFRhZ0NhdGVnb3JpZXMoXG4gICAgICAgICAgICAgICAgeyBzZWFyY2g6IHRoaXMuZ2V0U2VhcmNoVGVybSgpIH0sXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRFZmZlY3RpdmVTdWJzY3JpcHRpb25JZCgpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NhdGVnb3J5ID0gcmVzcG9uc2UudGFnX2NhdGVnb3JpZXNbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQb3N0VGFncygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQb3N0VGFncygpIHtcbiAgICAgICAgdGhpcy50YWdTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0VGFnc0J5VHlwZSgncG9zdF9jYXRlZ29yaWVzJywge30sIHRoaXMuZ2V0RWZmZWN0aXZlU3Vic2NyaXB0aW9uSWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmxvZ1Bvc3RUYWcgPSByZXNwb25zZS50YWdzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIHRhZyA9PiB0YWcudGFnX2NhdGVnb3J5X2lkID09PSB0aGlzLnRhZ0NhdGVnb3J5Py5pZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTRU9NZXRhZGF0YSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEhlbHBlciBtZXRob2QgdG8gZ2V0IGVmZmVjdGl2ZSBzdWJzY3JpcHRpb24gSUQgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0RWZmZWN0aXZlU3Vic2NyaXB0aW9uSWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIEhlbHBlclNlcnZpY2UuZ2V0RWZmZWN0aXZlU3Vic2NyaXB0aW9uSWQoXG4gICAgICAgICAgICB0aGlzLnVzZXIsXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkLFxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJTdWJzY3JpcHRpb25JZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB1cGRhdGVTRU9NZXRhZGF0YSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYmxvZ1Bvc3RUYWcpIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBwYWdlIHRpdGxlIGlmIG1ldGFfdGl0bGUgaXMgYXZhaWxhYmxlXG4gICAgICAgICAgICBpZiAodGhpcy5ibG9nUG9zdFRhZy5tZXRhX3RpdGxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGhpcy5ibG9nUG9zdFRhZy5tZXRhX3RpdGxlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXBkYXRlIG1ldGEgZGVzY3JpcHRpb24gaWYgbWV0YV9kZXNjcmlwdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAgICAgIGlmICh0aGlzLmJsb2dQb3N0VGFnLm1ldGFfZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1ldGFEZXNjcmlwdGlvbih0aGlzLmJsb2dQb3N0VGFnLm1ldGFfZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVNZXRhRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZykge1xuICAgICAgICBsZXQgbWV0YURlc2NyaXB0aW9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiZGVzY3JpcHRpb25cIl0nKTtcbiAgICAgICAgaWYgKCFtZXRhRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIG1ldGFEZXNjcmlwdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTtcbiAgICAgICAgICAgIG1ldGFEZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnZGVzY3JpcHRpb24nKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobWV0YURlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBtZXRhRGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCdjb250ZW50JywgZGVzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIC8vIEFic3RyYWN0IG1ldGhvZCB0aGF0IGVhY2ggY29tcG9uZW50IG11c3QgaW1wbGVtZW50XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNlYXJjaFRlcm0oKTogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSB1cGRhdGVDYW5FZGl0UmVzb3VyY2VzVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnVzZXJMb2dnZWRJbiAmJiB0aGlzLnVzZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuRWRpdFJlc291cmNlc1ZhbHVlID0gSGVscGVyU2VydmljZS5jYW5FZGl0UmVzb3VyY2VzKFxuICAgICAgICAgICAgICAgIHRoaXMudXNlcixcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJMb2dnZWRJbixcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYW5FZGl0UmVzb3VyY2VzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbkVkaXRSZXNvdXJjZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbkVkaXRSZXNvdXJjZXNWYWx1ZTtcbiAgICB9XG59XG4iXX0=
@@ -1,174 +0,0 @@
1
- import { Component, Injector, Input } from '@angular/core';
2
- import { AppBaseComponent } from '@posiwise/app-base-component';
3
- import { TagService } from '@posiwise/common-services';
4
- import { HelperService } from '@posiwise/helper-service';
5
- import { ResourceService } from '../../../resource.service';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../../../resource.service";
8
- import * as i2 from "@posiwise/common-services";
9
- import * as i3 from "@angular/common";
10
- import * as i4 from "@angular/router";
11
- import * as i5 from "@angular/forms";
12
- import * as i6 from "@posiwise/shared-components";
13
- import * as i7 from "primeng/progressspinner";
14
- import * as i8 from "@posiwise/directives";
15
- import * as i9 from "../resource-edit-card-lazy/resource-edit-card-lazy.component";
16
- import * as i10 from "@jsverse/transloco";
17
- export class ResourceNoteCardComponent extends AppBaseComponent {
18
- constructor(injector, resourceService, tagService) {
19
- super(injector);
20
- this.resourceService = resourceService;
21
- this.tagService = tagService;
22
- this.releaseHeader = false;
23
- this.isReleasePress = false;
24
- this.isResource = false;
25
- this.postSlice = false;
26
- this.canEditResourcesValue = false;
27
- this.isLoaded = false;
28
- this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;
29
- this.postTags = {};
30
- this.releasePosts = {};
31
- }
32
- ngOnInit() {
33
- if (this.userLoggedIn) {
34
- this.localStorage.getItem$('product').subscribe(res => {
35
- const data = res ? JSON.parse(res) : null;
36
- this.subscriptionId = data?.subscriptionId;
37
- });
38
- }
39
- this.getTags();
40
- }
41
- ngOnChanges(changes) {
42
- if (changes['user'] || changes['userLoggedIn']) {
43
- if (this.userLoggedIn && this.user) {
44
- this.updateCanEditResourcesValue();
45
- }
46
- }
47
- }
48
- getTags() {
49
- this.isLoaded = false;
50
- this.tagService
51
- .getAllTagCategories({ search: 'Release Notes' }, this.getEffectiveSubscriptionId())
52
- .subscribe(response => {
53
- this.tagCategory = response.tag_categories[0];
54
- this.getPostTags();
55
- });
56
- }
57
- getPostTags() {
58
- this.tagService
59
- .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())
60
- .subscribe(response => {
61
- this.postTags['product'] = this.findTag(response.tags, 'Product Release Notes', this.tagCategory?.id);
62
- this.postTags['press'] = this.findTag(response.tags, 'Press Release Notes', this.tagCategory?.id);
63
- if (this.postTags['product']?.id) {
64
- this.getProductReleasePosts(1, 100);
65
- }
66
- else {
67
- this.isLoaded = true;
68
- this.releasePosts['product'] = [];
69
- }
70
- if (this.postTags['press']?.id) {
71
- this.getPressReleasePosts(1, 100);
72
- }
73
- else {
74
- this.isLoaded = true;
75
- this.releasePosts['press'] = [];
76
- }
77
- });
78
- }
79
- findTag(tags, name, categoryId) {
80
- return tags.find(tag => tag.name === name && tag.tag_category_id === categoryId);
81
- }
82
- hasPressReleases() {
83
- return this.releasePosts['press']?.length !== 0 && this.isLoaded;
84
- }
85
- hasProductReleases() {
86
- return this.releasePosts['product']?.length !== 0 && this.isLoaded;
87
- }
88
- getProductReleasePosts(page, pageSize) {
89
- this.isLoaded = false;
90
- this.resourceService
91
- .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', '', this.postTags['product']?.id)
92
- .subscribe(response => {
93
- const sortedPosts = response.posts
94
- .filter(post => post.showcase === true)
95
- .sort((a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime());
96
- this.releasePosts['product'] = this.getProcessedPosts(sortedPosts);
97
- })
98
- .add(() => {
99
- this.isLoaded = true;
100
- });
101
- }
102
- getPressReleasePosts(page, pageSize) {
103
- this.isLoaded = false;
104
- this.resourceService
105
- .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', '', this.postTags['press']?.id)
106
- .subscribe(response => {
107
- const sortedPosts = response?.posts
108
- .filter(post => post.showcase === true)
109
- .sort((a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime());
110
- this.releasePosts['press'] = this.getProcessedPosts(sortedPosts);
111
- })
112
- .add(() => {
113
- this.isLoaded = true;
114
- });
115
- }
116
- getProcessedPosts(posts, sliceCount = 3) {
117
- const cloned = [...posts];
118
- return this.postSlice ? cloned.reverse() : cloned.slice(0, sliceCount).reverse();
119
- }
120
- toggleEditTitle() {
121
- this.isEditingTitle = true;
122
- this.editedTitle = this.postTags['product'].title;
123
- }
124
- toggleEditPressTitle() {
125
- this.isPressEditingTitle = true;
126
- this.editedTitle = this.postTags['press'].title;
127
- }
128
- saveEditedTitle(type) {
129
- HelperService.updateTagTitle(this.postTags[type], this.editedTitle, this.tagService, this.getEffectiveSubscriptionId(), this.toast).subscribe(() => {
130
- this.postTags[type].title = this.editedTitle;
131
- if (type === 'product') {
132
- this.isEditingTitle = false;
133
- }
134
- else {
135
- this.isPressEditingTitle = false;
136
- }
137
- });
138
- }
139
- /** Helper method to get effective subscription ID */
140
- getEffectiveSubscriptionId() {
141
- return HelperService.getEffectiveSubscriptionId(this.user, this.subscriptionId, this.masterSubscriptionId);
142
- }
143
- updateCanEditResourcesValue() {
144
- this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
145
- }
146
- canEditResources() {
147
- return this.canEditResourcesValue;
148
- }
149
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceNoteCardComponent, deps: [{ token: i0.Injector }, { token: i1.ResourceService }, { token: i2.TagService }], target: i0.ɵɵFactoryTarget.Component }); }
150
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ResourceNoteCardComponent, selector: "pw-resource-note-card", inputs: { releaseHeader: "releaseHeader", categoryId: "categoryId", isReleasePress: "isReleasePress", isResource: "isResource", postSlice: "postSlice", resourceTitle: "resourceTitle", tag: "tag", user: "user", userLoggedIn: "userLoggedIn" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<section class=\"resource-vault-section bg-white\" *ngIf=\"hasProductReleases()\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n <ng-container *ngIf=\"!isEditingTitle; else editTitleBlock\">\n <span *ngIf=\"postTags['product']?.title; else fallback\" [innerHTML]=\"postTags['product']?.title\"></span>\n <ng-template #fallback>Product Release Notes</ng-template>\n <i *ngIf=\"canEditResourcesValue\" class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n </ng-container>\n\n <ng-template #editTitleBlock>\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle('product')\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n </ng-template>\n </h2>\n <a class=\"view-all\" *ngIf=\"!postSlice\" routerLink=\"/resources/release-notes\">VIEW ALL ></a>\n </div>\n <div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"releasePosts['product']?.length === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\" *ngIf=\"hasProductReleases()\">\n <div class=\"resource-blog-card p-4\" *ngFor=\"let post of releasePosts['product']\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getProductReleasePosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title\"></p>\n <img *ngIf=\"!post.picture?.url?.includes('default-photo.jpg'); else resourceRocketBox\"\n src=\"{{ post.picture.url }}\"\n class=\"resource-image mt-auto\"\n alt=\"Product Resource Icon\" />\n\n <ng-template #resourceRocketBox>\n <img\n src=\"assets/img/resource/rocket-box.png\"\n class=\"press-release-icon mt-auto\"\n alt=\"Product Resource Default Icon\" />\n </ng-template>\n <ng-template #ctaContent>\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"arrow\">\u2192</span>\n </ng-template>\n <a *ngIf=\"post?.external_url; else internalLink\"\n class=\"resource-btn mt-3\"\n aria-label=\"Navigate to external url\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <ng-container *ngTemplateOutlet=\"ctaContent\"></ng-container>\n </a>\n\n <ng-template #internalLink>\n <a class=\"resource-btn mt-3\" aria-label=\"Navigate to resource view\" [routerLink]=\"['/resources/view', post?.slug]\">\n <ng-container *ngTemplateOutlet=\"ctaContent\"></ng-container>\n </a>\n </ng-template>\n </div>\n </div>\n </div>\n</section>\n<section class=\"resource-vault-section bg-white\" *ngIf=\"isReleasePress && hasPressReleases()\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isPressEditingTitle }\">\n <ng-container *ngIf=\"!isPressEditingTitle; else editTitleBlock\">\n <span *ngIf=\"postTags['press']?.title; else fallback\" [innerHTML]=\"postTags['press']?.title\"></span>\n <ng-template #fallback>Press Release Notes</ng-template>\n <i *ngIf=\"canEditResourcesValue\" class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditPressTitle()\" (keydown.enter)=\"toggleEditPressTitle()\" (keydown.space)=\"toggleEditPressTitle()\" title=\"Edit Title\"></i>\n </ng-container>\n\n <ng-template #editTitleBlock>\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isPressEditingTitle }\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle('press')\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isPressEditingTitle = false\">Cancel</button>\n </ng-template>\n </h2>\n <a *ngIf=\"!postSlice\" class=\"view-all\" routerLink=\"/resources/release-notes\">VIEW ALL ></a>\n </div>\n <div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"releasePosts['press']?.length === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\" *ngIf=\"hasPressReleases()\">\n <div class=\"resource-blog-card p-4\" *ngFor=\"let post of releasePosts['press']\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPressReleasePosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title\"></p>\n <img *ngIf=\"!post.picture?.url.includes('default-photo.jpg'); else resourceRocketBox\"\n src=\"{{ post.picture.url }}\"\n class=\"resource-image mt-auto\"\n alt=\"Press Resource Icon\" />\n\n <ng-template #resourceRocketBox>\n <img\n src=\"assets/img/resource/rocket-box.png\"\n class=\"press-release-icon mt-auto\"\n alt=\"Press Resource Default Icon\" />\n </ng-template>\n <a *ngIf=\"post?.external_url; else internalLink\"\n class=\"resource-btn mt-3\"\n aria-label=\"Navigate to external url\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"arrow\">\u2192</span>\n </a>\n\n <ng-template #internalLink>\n <a class=\"resource-btn mt-3\" aria-label=\"Navigate to resource view\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"arrow\">\u2192</span>\n </a>\n </ng-template>\n </div>\n </div>\n </div>\n</section>\n\n", styles: [".bold{font-weight:700}.resource-heading{margin-bottom:2rem}.resource-note{margin-top:1rem;font-size:.85rem;color:#555}.resource-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.resource-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.resource-vault-section .vault-heading{font-size:3rem;font-weight:300}.resource-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.resource-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.resource-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.resource-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.resource-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.resource-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.resource-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.resource-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.resource-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media (width <= 1200px){.resource-vault-section .vault-heading{font-size:3.5rem}.resource-vault-section .vault-description{margin-top:1.35rem}.resource-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media (width >= 991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media (width >= 768px) and (width <= 1200px){.container{padding:0 6rem!important}}@media (width <= 768px){.video-row{gap:3rem!important}}@media (max-width: 768px){.resource-vault-section{padding-bottom:6rem!important}.resource-vault-section .container{padding-top:0rem!important;padding-bottom:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media (width <= 1200px){.container{padding:7rem 3rem 1rem!important}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i8.LazyImgDirective, selector: "img" }, { kind: "component", type: i9.ResourceEditCardLazyComponent, selector: "pw-resource-edit-card-lazy", inputs: ["id", "resourceData", "canEdit"], outputs: ["updated"] }, { kind: "pipe", type: i10.TranslocoPipe, name: "transloco" }] }); }
151
- }
152
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceNoteCardComponent, decorators: [{
153
- type: Component,
154
- args: [{ selector: 'pw-resource-note-card', template: "<section class=\"resource-vault-section bg-white\" *ngIf=\"hasProductReleases()\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n <ng-container *ngIf=\"!isEditingTitle; else editTitleBlock\">\n <span *ngIf=\"postTags['product']?.title; else fallback\" [innerHTML]=\"postTags['product']?.title\"></span>\n <ng-template #fallback>Product Release Notes</ng-template>\n <i *ngIf=\"canEditResourcesValue\" class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n </ng-container>\n\n <ng-template #editTitleBlock>\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle('product')\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n </ng-template>\n </h2>\n <a class=\"view-all\" *ngIf=\"!postSlice\" routerLink=\"/resources/release-notes\">VIEW ALL ></a>\n </div>\n <div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"releasePosts['product']?.length === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\" *ngIf=\"hasProductReleases()\">\n <div class=\"resource-blog-card p-4\" *ngFor=\"let post of releasePosts['product']\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getProductReleasePosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title\"></p>\n <img *ngIf=\"!post.picture?.url?.includes('default-photo.jpg'); else resourceRocketBox\"\n src=\"{{ post.picture.url }}\"\n class=\"resource-image mt-auto\"\n alt=\"Product Resource Icon\" />\n\n <ng-template #resourceRocketBox>\n <img\n src=\"assets/img/resource/rocket-box.png\"\n class=\"press-release-icon mt-auto\"\n alt=\"Product Resource Default Icon\" />\n </ng-template>\n <ng-template #ctaContent>\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"arrow\">\u2192</span>\n </ng-template>\n <a *ngIf=\"post?.external_url; else internalLink\"\n class=\"resource-btn mt-3\"\n aria-label=\"Navigate to external url\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <ng-container *ngTemplateOutlet=\"ctaContent\"></ng-container>\n </a>\n\n <ng-template #internalLink>\n <a class=\"resource-btn mt-3\" aria-label=\"Navigate to resource view\" [routerLink]=\"['/resources/view', post?.slug]\">\n <ng-container *ngTemplateOutlet=\"ctaContent\"></ng-container>\n </a>\n </ng-template>\n </div>\n </div>\n </div>\n</section>\n<section class=\"resource-vault-section bg-white\" *ngIf=\"isReleasePress && hasPressReleases()\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isPressEditingTitle }\">\n <ng-container *ngIf=\"!isPressEditingTitle; else editTitleBlock\">\n <span *ngIf=\"postTags['press']?.title; else fallback\" [innerHTML]=\"postTags['press']?.title\"></span>\n <ng-template #fallback>Press Release Notes</ng-template>\n <i *ngIf=\"canEditResourcesValue\" class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditPressTitle()\" (keydown.enter)=\"toggleEditPressTitle()\" (keydown.space)=\"toggleEditPressTitle()\" title=\"Edit Title\"></i>\n </ng-container>\n\n <ng-template #editTitleBlock>\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isPressEditingTitle }\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle('press')\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isPressEditingTitle = false\">Cancel</button>\n </ng-template>\n </h2>\n <a *ngIf=\"!postSlice\" class=\"view-all\" routerLink=\"/resources/release-notes\">VIEW ALL ></a>\n </div>\n <div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"releasePosts['press']?.length === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\" *ngIf=\"hasPressReleases()\">\n <div class=\"resource-blog-card p-4\" *ngFor=\"let post of releasePosts['press']\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPressReleasePosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title\"></p>\n <img *ngIf=\"!post.picture?.url.includes('default-photo.jpg'); else resourceRocketBox\"\n src=\"{{ post.picture.url }}\"\n class=\"resource-image mt-auto\"\n alt=\"Press Resource Icon\" />\n\n <ng-template #resourceRocketBox>\n <img\n src=\"assets/img/resource/rocket-box.png\"\n class=\"press-release-icon mt-auto\"\n alt=\"Press Resource Default Icon\" />\n </ng-template>\n <a *ngIf=\"post?.external_url; else internalLink\"\n class=\"resource-btn mt-3\"\n aria-label=\"Navigate to external url\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"arrow\">\u2192</span>\n </a>\n\n <ng-template #internalLink>\n <a class=\"resource-btn mt-3\" aria-label=\"Navigate to resource view\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"arrow\">\u2192</span>\n </a>\n </ng-template>\n </div>\n </div>\n </div>\n</section>\n\n", styles: [".bold{font-weight:700}.resource-heading{margin-bottom:2rem}.resource-note{margin-top:1rem;font-size:.85rem;color:#555}.resource-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.resource-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.resource-vault-section .vault-heading{font-size:3rem;font-weight:300}.resource-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.resource-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.resource-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.resource-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.resource-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.resource-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.resource-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.resource-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.resource-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media (width <= 1200px){.resource-vault-section .vault-heading{font-size:3.5rem}.resource-vault-section .vault-description{margin-top:1.35rem}.resource-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media (width >= 991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media (width >= 768px) and (width <= 1200px){.container{padding:0 6rem!important}}@media (width <= 768px){.video-row{gap:3rem!important}}@media (max-width: 768px){.resource-vault-section{padding-bottom:6rem!important}.resource-vault-section .container{padding-top:0rem!important;padding-bottom:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media (width <= 1200px){.container{padding:7rem 3rem 1rem!important}}\n"] }]
155
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.ResourceService }, { type: i2.TagService }], propDecorators: { releaseHeader: [{
156
- type: Input
157
- }], categoryId: [{
158
- type: Input
159
- }], isReleasePress: [{
160
- type: Input
161
- }], isResource: [{
162
- type: Input
163
- }], postSlice: [{
164
- type: Input
165
- }], resourceTitle: [{
166
- type: Input
167
- }], tag: [{
168
- type: Input
169
- }], user: [{
170
- type: Input
171
- }], userLoggedIn: [{
172
- type: Input
173
- }] } });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsZWFzZS1ub3RlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9yZXNvdXJjZS1tb2R1bGUvc3JjL2xpYi9wdWJsaWMvY29tcG9uZW50cy9yZXNsZWFzZS1ub3RlLWNhcmQvcmVsZWFzZS1ub3RlLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9yZXNvdXJjZS1tb2R1bGUvc3JjL2xpYi9wdWJsaWMvY29tcG9uZW50cy9yZXNsZWFzZS1ub3RlLWNhcmQvcmVsZWFzZS1ub3RlLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUU3RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBTzVELE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxnQkFBZ0I7SUEwQjNELFlBQ0ksUUFBa0IsRUFDRCxlQUFnQyxFQUNoQyxVQUFzQjtRQUV2QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFIQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQTVCbEMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFdEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBSzNCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUc5Qixh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aEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7WUFDckMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHFEQUFxRDtJQUM3QywwQkFBMEI7UUFDOUIsT0FBTyxhQUFhLENBQUMsMEJBQTBCLENBQzNDLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLG9CQUFvQixDQUM1QixDQUFDO0lBQ04sQ0FBQztJQUNPLDJCQUEyQjtRQUMvQixJQUFJLENBQUMscUJBQXFCLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUN2RCxJQUFJLENBQUMsSUFBSSxFQUNULElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FDekIsQ0FBQztJQUNOLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUN0QyxDQUFDOytHQTVNUSx5QkFBeUI7bUdBQXpCLHlCQUF5QiwyVkNkdEMsbzlOQW1JQTs7NEZEckhhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDSSx1QkFBdUI7b0lBS3hCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWdTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBSZXNvdXJjZSwgVXNlciB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuXG5pbXBvcnQgeyBSZXNvdXJjZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1yZXNvdXJjZS1ub3RlLWNhcmQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZWxlYXNlLW5vdGUtY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4uL3Jlc291cmNlcy9yZXNvdXJjZXMtc2hhcmVkLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VOb3RlQ2FyZENvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgcmVsZWFzZUhlYWRlciA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGNhdGVnb3J5SWQhOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaXNSZWxlYXNlUHJlc3MgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBpc1Jlc291cmNlID0gZmFsc2U7XG4gICAgQElucHV0KCkgcG9zdFNsaWNlID0gZmFsc2U7XG4gICAgQElucHV0KCkgcmVzb3VyY2VUaXRsZSE6IHN0cmluZztcbiAgICBASW5wdXQoKSB0YWc7XG4gICAgQElucHV0KCkgdXNlcjogVXNlcjtcblxuICAgIGNhbkVkaXRSZXNvdXJjZXNWYWx1ZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHVzZXJMb2dnZWRJbjogYm9vbGVhbjtcblxuICAgIGlzTG9hZGVkID0gZmFsc2U7XG4gICAgc3Vic2NyaXB0aW9uSWQ7XG4gICAgbWFzdGVyU3Vic2NyaXB0aW9uSWQgPSB0aGlzLmFwcENvbmZpZy5tYXN0ZXJfc3Vic2NyaXB0aW9uLnN1YnNjcmlwdGlvbl9pZDtcblxuICAgIHBvc3RUYWdzOiB7IFtrZXk6IHN0cmluZ106IHsgaWQ6IHN0cmluZzsgdGl0bGU6IHN0cmluZyB9IH0gPSB7fTtcbiAgICByZWxlYXNlUG9zdHM6IHsgW2tleTogc3RyaW5nXTogUmVzb3VyY2VbXSB9ID0ge307XG5cbiAgICB0YWdDYXRlZ29yeTtcbiAgICBpc0VkaXRpbmdUaXRsZTogYm9vbGVhbjtcbiAgICBpc1ByZXNzRWRpdGluZ1RpdGxlOiBib29sZWFuO1xuICAgIGVkaXRlZFRpdGxlOiBzdHJpbmc7XG4gICAgaXNNYXN0ZXJTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlU2VydmljZTogUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRhZ1NlcnZpY2U6IFRhZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy51c2VyTG9nZ2VkSW4pIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0kKCdwcm9kdWN0Jykuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlcyA/IEpTT04ucGFyc2UocmVzKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA9IGRhdGE/LnN1YnNjcmlwdGlvbklkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXRUYWdzKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlc1sndXNlciddIHx8IGNoYW5nZXNbJ3VzZXJMb2dnZWRJbiddKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VyTG9nZ2VkSW4gJiYgdGhpcy51c2VyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYW5FZGl0UmVzb3VyY2VzVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGFncygpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRhZ1NlcnZpY2VcbiAgICAgICAgICAgIC5nZXRBbGxUYWdDYXRlZ29yaWVzKHsgc2VhcmNoOiAnUmVsZWFzZSBOb3RlcycgfSwgdGhpcy5nZXRFZmZlY3RpdmVTdWJzY3JpcHRpb25JZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdDYXRlZ29yeSA9IHJlc3BvbnNlLnRhZ19jYXRlZ29yaWVzWzBdO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UG9zdFRhZ3MoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UG9zdFRhZ3MoKSB7XG4gICAgICAgIHRoaXMudGFnU2VydmljZVxuICAgICAgICAgICAgLmdldFRhZ3NCeVR5cGUoJ3Bvc3RfY2F0ZWdvcmllcycsIHt9LCB0aGlzLmdldEVmZmVjdGl2ZVN1YnNjcmlwdGlvbklkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvc3RUYWdzWydwcm9kdWN0J10gPSB0aGlzLmZpbmRUYWcoXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnRhZ3MsXG4gICAgICAgICAgICAgICAgICAgICdQcm9kdWN0IFJlbGVhc2UgTm90ZXMnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ0NhdGVnb3J5Py5pZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3N0VGFnc1sncHJlc3MnXSA9IHRoaXMuZmluZFRhZyhcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UudGFncyxcbiAgICAgICAgICAgICAgICAgICAgJ1ByZXNzIFJlbGVhc2UgTm90ZXMnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ0NhdGVnb3J5Py5pZFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wb3N0VGFnc1sncHJvZHVjdCddPy5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFByb2R1Y3RSZWxlYXNlUG9zdHMoMSwgMTAwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxlYXNlUG9zdHNbJ3Byb2R1Y3QnXSA9IFtdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBvc3RUYWdzWydwcmVzcyddPy5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFByZXNzUmVsZWFzZVBvc3RzKDEsIDEwMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsZWFzZVBvc3RzWydwcmVzcyddID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kVGFnKHRhZ3MsIG5hbWU6IHN0cmluZywgY2F0ZWdvcnlJZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0YWdzLmZpbmQodGFnID0+IHRhZy5uYW1lID09PSBuYW1lICYmIHRhZy50YWdfY2F0ZWdvcnlfaWQgPT09IGNhdGVnb3J5SWQpO1xuICAgIH1cblxuICAgIGhhc1ByZXNzUmVsZWFzZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbGVhc2VQb3N0c1sncHJlc3MnXT8ubGVuZ3RoICE9PSAwICYmIHRoaXMuaXNMb2FkZWQ7XG4gICAgfVxuICAgIGhhc1Byb2R1Y3RSZWxlYXNlcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVsZWFzZVBvc3RzWydwcm9kdWN0J10/Lmxlbmd0aCAhPT0gMCAmJiB0aGlzLmlzTG9hZGVkO1xuICAgIH1cblxuICAgIGdldFByb2R1Y3RSZWxlYXNlUG9zdHMocGFnZTogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRQdWJsaWNQb3N0cyhcbiAgICAgICAgICAgICAgICB0aGlzLmdldEVmZmVjdGl2ZVN1YnNjcmlwdGlvbklkKCksXG4gICAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICB0aGlzLnBvc3RUYWdzWydwcm9kdWN0J10/LmlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3J0ZWRQb3N0cyA9IHJlc3BvbnNlLnBvc3RzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIocG9zdCA9PiBwb3N0LnNob3djYXNlID09PSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAuc29ydChcbiAgICAgICAgICAgICAgICAgICAgICAgIChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKGIucHVibGlzaGVkX2F0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLnB1Ymxpc2hlZF9hdCkuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxlYXNlUG9zdHNbJ3Byb2R1Y3QnXSA9IHRoaXMuZ2V0UHJvY2Vzc2VkUG9zdHMoc29ydGVkUG9zdHMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0UHJlc3NSZWxlYXNlUG9zdHMocGFnZTogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRQdWJsaWNQb3N0cyhcbiAgICAgICAgICAgICAgICB0aGlzLmdldEVmZmVjdGl2ZVN1YnNjcmlwdGlvbklkKCksXG4gICAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICB0aGlzLnBvc3RUYWdzWydwcmVzcyddPy5pZFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc29ydGVkUG9zdHMgPSByZXNwb25zZT8ucG9zdHNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihwb3N0ID0+IHBvc3Quc2hvd2Nhc2UgPT09IHRydWUpXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYi5wdWJsaXNoZWRfYXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEucHVibGlzaGVkX2F0KS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGVhc2VQb3N0c1sncHJlc3MnXSA9IHRoaXMuZ2V0UHJvY2Vzc2VkUG9zdHMoc29ydGVkUG9zdHMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRQb3N0cyhwb3N0czogUmVzb3VyY2VbXSwgc2xpY2VDb3VudCA9IDMpOiBSZXNvdXJjZVtdIHtcbiAgICAgICAgY29uc3QgY2xvbmVkID0gWy4uLnBvc3RzXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFNsaWNlID8gY2xvbmVkLnJldmVyc2UoKSA6IGNsb25lZC5zbGljZSgwLCBzbGljZUNvdW50KS5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlRWRpdFRpdGxlKCkge1xuICAgICAgICB0aGlzLmlzRWRpdGluZ1RpdGxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lZGl0ZWRUaXRsZSA9IHRoaXMucG9zdFRhZ3NbJ3Byb2R1Y3QnXS50aXRsZTtcbiAgICB9XG5cbiAgICB0b2dnbGVFZGl0UHJlc3NUaXRsZSgpIHtcbiAgICAgICAgdGhpcy5pc1ByZXNzRWRpdGluZ1RpdGxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lZGl0ZWRUaXRsZSA9IHRoaXMucG9zdFRhZ3NbJ3ByZXNzJ10udGl0bGU7XG4gICAgfVxuXG4gICAgc2F2ZUVkaXRlZFRpdGxlKHR5cGUpIHtcbiAgICAgICAgSGVscGVyU2VydmljZS51cGRhdGVUYWdUaXRsZShcbiAgICAgICAgICAgIHRoaXMucG9zdFRhZ3NbdHlwZV0sXG4gICAgICAgICAgICB0aGlzLmVkaXRlZFRpdGxlLFxuICAgICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLFxuICAgICAgICAgICAgdGhpcy5nZXRFZmZlY3RpdmVTdWJzY3JpcHRpb25JZCgpLFxuICAgICAgICAgICAgdGhpcy50b2FzdFxuICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBvc3RUYWdzW3R5cGVdLnRpdGxlID0gdGhpcy5lZGl0ZWRUaXRsZTtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAncHJvZHVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRWRpdGluZ1RpdGxlID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNQcmVzc0VkaXRpbmdUaXRsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogSGVscGVyIG1ldGhvZCB0byBnZXQgZWZmZWN0aXZlIHN1YnNjcmlwdGlvbiBJRCAqL1xuICAgIHByaXZhdGUgZ2V0RWZmZWN0aXZlU3Vic2NyaXB0aW9uSWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIEhlbHBlclNlcnZpY2UuZ2V0RWZmZWN0aXZlU3Vic2NyaXB0aW9uSWQoXG4gICAgICAgICAgICB0aGlzLnVzZXIsXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkLFxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJTdWJzY3JpcHRpb25JZFxuICAgICAgICApO1xuICAgIH1cbiAgICBwcml2YXRlIHVwZGF0ZUNhbkVkaXRSZXNvdXJjZXNWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYW5FZGl0UmVzb3VyY2VzVmFsdWUgPSBIZWxwZXJTZXJ2aWNlLmNhbkVkaXRSZXNvdXJjZXMoXG4gICAgICAgICAgICB0aGlzLnVzZXIsXG4gICAgICAgICAgICB0aGlzLnVzZXJMb2dnZWRJbixcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2VcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjYW5FZGl0UmVzb3VyY2VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW5FZGl0UmVzb3VyY2VzVmFsdWU7XG4gICAgfVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJyZXNvdXJjZS12YXVsdC1zZWN0aW9uIGJnLXdoaXRlXCIgKm5nSWY9XCJoYXNQcm9kdWN0UmVsZWFzZXMoKVwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwXCI+XG4gICAgICA8aDIgY2xhc3M9XCJzZWN0aW9uLWhlYWRpbmcgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIFtuZ0NsYXNzXT1cInsgJ3ctNTAnOiBpc0VkaXRpbmdUaXRsZSB9XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFZGl0aW5nVGl0bGU7IGVsc2UgZWRpdFRpdGxlQmxvY2tcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInBvc3RUYWdzWydwcm9kdWN0J10/LnRpdGxlOyBlbHNlIGZhbGxiYWNrXCIgW2lubmVySFRNTF09XCJwb3N0VGFnc1sncHJvZHVjdCddPy50aXRsZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZhbGxiYWNrPlByb2R1Y3QgUmVsZWFzZSBOb3RlczwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGkgICpuZ0lmPVwiY2FuRWRpdFJlc291cmNlc1ZhbHVlXCIgY2xhc3M9XCJmYSBmYS1lZGl0IGluLXBhZ2UtZWRpdC1pY29uIG1zLTMgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwidG9nZ2xlRWRpdFRpdGxlKClcIiAoa2V5ZG93bi5lbnRlcik9XCJ0b2dnbGVFZGl0VGl0bGUoKVwiIChrZXlkb3duLnNwYWNlKT1cInRvZ2dsZUVkaXRUaXRsZSgpXCIgdGl0bGU9XCJFZGl0IFRpdGxlXCI+PC9pPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRUaXRsZUJsb2NrPlxuICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImVkaXRlZFRpdGxlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZC1pbmxpbmUgdy1hdXRvIG1lLTJcIiBbbmdDbGFzc109XCJ7ICd3LTEwMCc6IGlzRWRpdGluZ1RpdGxlIH1cIiAvPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IG1lLTFcIiAoY2xpY2spPVwic2F2ZUVkaXRlZFRpdGxlKCdwcm9kdWN0JylcIj5TYXZlPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJpc0VkaXRpbmdUaXRsZSA9IGZhbHNlXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2gyPlxuICAgICAgPGEgY2xhc3M9XCJ2aWV3LWFsbFwiICpuZ0lmPVwiIXBvc3RTbGljZVwiIHJvdXRlckxpbms9XCIvcmVzb3VyY2VzL3JlbGVhc2Utbm90ZXNcIj5WSUVXIEFMTCA+PC9hPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCIgKm5nSWY9XCIhaXNMb2FkZWRcIj5cbiAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwicmVsZWFzZVBvc3RzWydwcm9kdWN0J10/Lmxlbmd0aCA9PT0gMCAmJiBpc0xvYWRlZFwiPlxuICAgICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ1Jlc291cmNlLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCIvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtNSBkLWZsZXggZmxleC13cmFwIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTQgdmlkZW8tcm93XCIgKm5nSWY9XCJoYXNQcm9kdWN0UmVsZWFzZXMoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzb3VyY2UtYmxvZy1jYXJkIHAtNFwiICpuZ0Zvcj1cImxldCBwb3N0IG9mIHJlbGVhc2VQb3N0c1sncHJvZHVjdCddXCI+XG4gICAgICAgICAgPHB3LXJlc291cmNlLWVkaXQtY2FyZC1sYXp5XG4gICAgICAgICAgW2NhbkVkaXRdPVwiY2FuRWRpdFJlc291cmNlc1ZhbHVlXCJcbiAgICAgICAgICBbaWRdPVwicG9zdC5pZFwiXG4gICAgICAgICAgW3Jlc291cmNlRGF0YV09XCJwb3N0XCJcbiAgICAgICAgICAodXBkYXRlZCk9XCJnZXRQcm9kdWN0UmVsZWFzZVBvc3RzKDEsIDEwMClcIj5cbiAgICAgICAgICA8L3B3LXJlc291cmNlLWVkaXQtY2FyZC1sYXp5PlxuICAgICAgICAgIDxwIGNsYXNzPVwicmVzb3VyY2UtdGl0bGVcIiBbaW5uZXJIVE1MXT1cInBvc3QudGl0bGVcIj48L3A+XG4gICAgICAgICAgPGltZyAqbmdJZj1cIiFwb3N0LnBpY3R1cmU/LnVybD8uaW5jbHVkZXMoJ2RlZmF1bHQtcGhvdG8uanBnJyk7IGVsc2UgcmVzb3VyY2VSb2NrZXRCb3hcIlxuICAgICAgICAgIHNyYz1cInt7IHBvc3QucGljdHVyZS51cmwgfX1cIlxuICAgICAgICAgIGNsYXNzPVwicmVzb3VyY2UtaW1hZ2UgbXQtYXV0b1wiXG4gICAgICAgICAgYWx0PVwiUHJvZHVjdCBSZXNvdXJjZSBJY29uXCIgLz5cblxuICAgICA8bmctdGVtcGxhdGUgI3Jlc291cmNlUm9ja2V0Qm94PlxuICAgICAgPGltZ1xuICAgICAgc3JjPVwiYXNzZXRzL2ltZy9yZXNvdXJjZS9yb2NrZXQtYm94LnBuZ1wiXG4gICAgICBjbGFzcz1cInByZXNzLXJlbGVhc2UtaWNvbiBtdC1hdXRvXCJcbiAgICAgIGFsdD1cIlByb2R1Y3QgUmVzb3VyY2UgRGVmYXVsdCBJY29uXCIgLz5cbiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNjdGFDb250ZW50PlxuICAgICAgICAgIDxzcGFuPnt7IHBvc3Q/LmN0YV90ZXh0ICYmIHBvc3QuY3RhX3RleHQgIT09ICdudWxsJyA/IHBvc3QuY3RhX3RleHQgOiAnUmVhZCBOb3cnIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIj7ihpI8L3NwYW4+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGEgKm5nSWY9XCJwb3N0Py5leHRlcm5hbF91cmw7IGVsc2UgaW50ZXJuYWxMaW5rXCJcbiAgICAgICAgICAgIGNsYXNzPVwicmVzb3VyY2UtYnRuIG10LTNcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5hdmlnYXRlIHRvIGV4dGVybmFsIHVybFwiXG4gICAgICAgICAgICBbaHJlZl09XCJwb3N0LmV4dGVybmFsX3VybFwiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN0YUNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2E+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNpbnRlcm5hbExpbms+XG4gICAgICAgICAgPGEgY2xhc3M9XCJyZXNvdXJjZS1idG4gbXQtM1wiIGFyaWEtbGFiZWw9XCJOYXZpZ2F0ZSB0byByZXNvdXJjZSB2aWV3XCIgW3JvdXRlckxpbmtdPVwiWycvcmVzb3VyY2VzL3ZpZXcnLCBwb3N0Py5zbHVnXVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN0YUNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbjxzZWN0aW9uIGNsYXNzPVwicmVzb3VyY2UtdmF1bHQtc2VjdGlvbiBiZy13aGl0ZVwiICpuZ0lmPVwiaXNSZWxlYXNlUHJlc3MgJiYgaGFzUHJlc3NSZWxlYXNlcygpXCI+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LXdyYXBcIj5cbiAgICAgIDxoMiBjbGFzcz1cInNlY3Rpb24taGVhZGluZyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgW25nQ2xhc3NdPVwieyAndy01MCc6IGlzUHJlc3NFZGl0aW5nVGl0bGUgfVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUHJlc3NFZGl0aW5nVGl0bGU7IGVsc2UgZWRpdFRpdGxlQmxvY2tcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInBvc3RUYWdzWydwcmVzcyddPy50aXRsZTsgZWxzZSBmYWxsYmFja1wiIFtpbm5lckhUTUxdPVwicG9zdFRhZ3NbJ3ByZXNzJ10/LnRpdGxlXCI+PC9zcGFuPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZmFsbGJhY2s+UHJlc3MgUmVsZWFzZSBOb3RlczwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGkgICpuZ0lmPVwiY2FuRWRpdFJlc291cmNlc1ZhbHVlXCIgY2xhc3M9XCJmYSBmYS1lZGl0IGluLXBhZ2UtZWRpdC1pY29uIG1zLTMgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwidG9nZ2xlRWRpdFByZXNzVGl0bGUoKVwiIChrZXlkb3duLmVudGVyKT1cInRvZ2dsZUVkaXRQcmVzc1RpdGxlKClcIiAoa2V5ZG93bi5zcGFjZSk9XCJ0b2dnbGVFZGl0UHJlc3NUaXRsZSgpXCIgdGl0bGU9XCJFZGl0IFRpdGxlXCI+PC9pPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRUaXRsZUJsb2NrPlxuICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImVkaXRlZFRpdGxlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZC1pbmxpbmUgdy1hdXRvIG1lLTJcIiBbbmdDbGFzc109XCJ7ICd3LTEwMCc6IGlzUHJlc3NFZGl0aW5nVGl0bGUgfVwiIC8+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgbWUtMVwiIChjbGljayk9XCJzYXZlRWRpdGVkVGl0bGUoJ3ByZXNzJylcIj5TYXZlPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJpc1ByZXNzRWRpdGluZ1RpdGxlID0gZmFsc2VcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvaDI+XG4gICAgICA8YSAqbmdJZj1cIiFwb3N0U2xpY2VcIiBjbGFzcz1cInZpZXctYWxsXCIgcm91dGVyTGluaz1cIi9yZXNvdXJjZXMvcmVsZWFzZS1ub3Rlc1wiPlZJRVcgQUxMID48L2E+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIiAqbmdJZj1cIiFpc0xvYWRlZFwiPlxuICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJyZWxlYXNlUG9zdHNbJ3ByZXNzJ10/Lmxlbmd0aCA9PT0gMCAmJiBpc0xvYWRlZFwiPlxuICAgICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ1Jlc291cmNlLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCIvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtNSBkLWZsZXggZmxleC13cmFwIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTQgdmlkZW8tcm93XCIgKm5nSWY9XCJoYXNQcmVzc1JlbGVhc2VzKClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc291cmNlLWJsb2ctY2FyZCBwLTRcIiAqbmdGb3I9XCJsZXQgcG9zdCBvZiByZWxlYXNlUG9zdHNbJ3ByZXNzJ11cIj5cbiAgICAgICAgICA8cHctcmVzb3VyY2UtZWRpdC1jYXJkLWxhenlcbiAgICAgICAgICBbY2FuRWRpdF09XCJjYW5FZGl0UmVzb3VyY2VzVmFsdWVcIlxuICAgICAgICAgIFtpZF09XCJwb3N0LmlkXCJcbiAgICAgICAgICBbcmVzb3VyY2VEYXRhXT1cInBvc3RcIlxuICAgICAgICAgICh1cGRhdGVkKT1cImdldFByZXNzUmVsZWFzZVBvc3RzKDEsIDEwMClcIj5cbiAgICAgICAgICA8L3B3LXJlc291cmNlLWVkaXQtY2FyZC1sYXp5PlxuICAgICAgICAgIDxwIGNsYXNzPVwicmVzb3VyY2UtdGl0bGVcIiBbaW5uZXJIVE1MXT1cInBvc3QudGl0bGVcIj48L3A+XG4gICAgICAgICAgPGltZyAqbmdJZj1cIiFwb3N0LnBpY3R1cmU/LnVybC5pbmNsdWRlcygnZGVmYXVsdC1waG90by5qcGcnKTsgZWxzZSByZXNvdXJjZVJvY2tldEJveFwiXG4gICAgICAgICAgc3JjPVwie3sgcG9zdC5waWN0dXJlLnVybCB9fVwiXG4gICAgICAgICAgY2xhc3M9XCJyZXNvdXJjZS1pbWFnZSBtdC1hdXRvXCJcbiAgICAgICAgICBhbHQ9XCJQcmVzcyBSZXNvdXJjZSBJY29uXCIgLz5cblxuICAgICA8bmctdGVtcGxhdGUgI3Jlc291cmNlUm9ja2V0Qm94PlxuICAgICAgPGltZ1xuICAgICAgc3JjPVwiYXNzZXRzL2ltZy9yZXNvdXJjZS9yb2NrZXQtYm94LnBuZ1wiXG4gICAgICBjbGFzcz1cInByZXNzLXJlbGVhc2UtaWNvbiBtdC1hdXRvXCJcbiAgICAgIGFsdD1cIlByZXNzIFJlc291cmNlIERlZmF1bHQgSWNvblwiIC8+XG4gICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGEgKm5nSWY9XCJwb3N0Py5leHRlcm5hbF91cmw7IGVsc2UgaW50ZXJuYWxMaW5rXCJcbiAgICAgICAgICAgIGNsYXNzPVwicmVzb3VyY2UtYnRuIG10LTNcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5hdmlnYXRlIHRvIGV4dGVybmFsIHVybFwiXG4gICAgICAgICAgICBbaHJlZl09XCJwb3N0LmV4dGVybmFsX3VybFwiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgcG9zdD8uY3RhX3RleHQgJiYgcG9zdC5jdGFfdGV4dCAhPT0gJ251bGwnID8gcG9zdC5jdGFfdGV4dCA6ICdSZWFkIE5vdycgIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPuKGkjwvc3Bhbj5cbiAgICAgICAgICA8L2E+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNpbnRlcm5hbExpbms+XG4gICAgICAgICAgPGEgY2xhc3M9XCJyZXNvdXJjZS1idG4gbXQtM1wiIGFyaWEtbGFiZWw9XCJOYXZpZ2F0ZSB0byByZXNvdXJjZSB2aWV3XCIgW3JvdXRlckxpbmtdPVwiWycvcmVzb3VyY2VzL3ZpZXcnLCBwb3N0Py5zbHVnXVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgcG9zdD8uY3RhX3RleHQgJiYgcG9zdC5jdGFfdGV4dCAhPT0gJ251bGwnID8gcG9zdC5jdGFfdGV4dCA6ICdSZWFkIE5vdycgIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiPuKGkjwvc3Bhbj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cblxuIl19